diff --git a/indra/llappearance/llavatarappearance.cpp b/indra/llappearance/llavatarappearance.cpp index 062a59ed92..e961658390 100644 --- a/indra/llappearance/llavatarappearance.cpp +++ b/indra/llappearance/llavatarappearance.cpp @@ -1064,7 +1064,6 @@ BOOL LLAvatarAppearance::loadSkeletonNode () mRoot->addChild(mMeshLOD[MESH_ID_UPPER_BODY]); mRoot->addChild(mMeshLOD[MESH_ID_LOWER_BODY]); mRoot->addChild(mMeshLOD[MESH_ID_SKIRT]); - mRoot->addChild(mMeshLOD[MESH_ID_HEAD]); LLAvatarJoint *skull = (LLAvatarJoint*)mRoot->findJoint("mSkull"); if (skull) diff --git a/indra/llcommon/CMakeLists.txt b/indra/llcommon/CMakeLists.txt index 3db4e6260c..ad1c817779 100644 --- a/indra/llcommon/CMakeLists.txt +++ b/indra/llcommon/CMakeLists.txt @@ -336,7 +336,13 @@ if (LL_TESTS) LL_ADD_INTEGRATION_TEST(bitpack "" "${test_libs}") LL_ADD_INTEGRATION_TEST(classic_callback "" "${test_libs}") LL_ADD_INTEGRATION_TEST(commonmisc "" "${test_libs}") - LL_ADD_INTEGRATION_TEST(lazyeventapi "" "${test_libs}") + if (WINDOWS) + # As of 2023-07-27, lazyeventapi.h triggers a bug in older clang, + # unfortunately the version we run on our TeamCity Mac build agent. As we + # move forward, either with an updated TC agent or GitHub builds, remove + # this 'if'. + LL_ADD_INTEGRATION_TEST(lazyeventapi "" "${test_libs}") + endif () LL_ADD_INTEGRATION_TEST(llbase64 "" "${test_libs}") LL_ADD_INTEGRATION_TEST(llcond "" "${test_libs}") LL_ADD_INTEGRATION_TEST(lldate "" "${test_libs}") diff --git a/indra/llcommon/lazyeventapi.h b/indra/llcommon/lazyeventapi.h index a815b119f0..e36831270b 100644 --- a/indra/llcommon/lazyeventapi.h +++ b/indra/llcommon/lazyeventapi.h @@ -71,25 +71,26 @@ namespace LL mOperations.push_back(std::make_pair(name, desc)); // Use connect_extended() so the lambda is passed its own // connection. + + // apply() can't accept a template per se; it needs a particular + // specialization. Specialize out here to work around a clang bug: + // https://github.com/llvm/llvm-project/issues/41999 + auto func{ &LazyEventAPIBase::add_trampoline + }; // We can't bind an unexpanded parameter pack into a lambda -- - // shame really. Instead, capture it as a std::tuple and then, in - // the lambda, use apply() to convert back to function args. + // shame really. Instead, capture all our args as a std::tuple and + // then, in the lambda, use apply() to pass to add_trampoline(). + auto args{ std::make_tuple(name, desc, std::forward(rest)...) }; + mParams.init.connect_extended( - [name, desc, rest = std::make_tuple(std::forward(rest)...)] + [func, args] (const boost::signals2::connection& conn, LLEventAPI* instance) { // we only need this connection once conn.disconnect(); - // Our add() method distinguishes name and desc because we - // capture them separately. But now, because apply() - // expects a tuple specifying ALL the arguments, expand to - // a tuple including add_trampoline() arguments: instance, - // name, desc, rest. - // apply() can't accept a template per se; it needs a - // particular specialization. - apply(&LazyEventAPIBase::add_trampoline, - std::tuple_cat(std::make_tuple(instance, name, desc), - rest)); + // apply() expects a tuple specifying ALL the arguments, + // so prepend instance. + apply(func, std::tuple_cat(std::make_tuple(instance), args)); }); } diff --git a/indra/llcommon/lleventdispatcher.cpp b/indra/llcommon/lleventdispatcher.cpp index 99e2e74376..da96de18f7 100644 --- a/indra/llcommon/lleventdispatcher.cpp +++ b/indra/llcommon/lleventdispatcher.cpp @@ -113,7 +113,7 @@ public: private: static std::string formatlist(const LLSD&); template - void callFail(ARGS&&... args) const; + [[noreturn]] void callFail(ARGS&&... args) const; // store a plain dumb back-pointer because we don't have to manage the // parent LLEventDispatcher's lifespan @@ -338,7 +338,7 @@ std::string LLEventDispatcher::LLSDArgsMapper::formatlist(const LLSD& list) } template -void LLEventDispatcher::LLSDArgsMapper::callFail(ARGS&&... args) const +[[noreturn]] void LLEventDispatcher::LLSDArgsMapper::callFail(ARGS&&... args) const { _parent->callFail (_function, std::forward(args)...); @@ -388,7 +388,7 @@ struct LLEventDispatcher::LLSDDispatchEntry: public LLEventDispatcher::DispatchE std::string mismatch(llsd_matches(mRequired, event)); if (! mismatch.empty()) { - return callFail(desc, ": bad request: ", mismatch); + callFail(desc, ": bad request: ", mismatch); } // Event syntax looks good, go for it! return mFunc(event); @@ -425,7 +425,7 @@ struct LLEventDispatcher::ParamsDispatchEntry: public LLEventDispatcher::Dispatc catch (const LL::apply_error& err) { // could hit runtime errors with LL::apply() - return callFail(err.what()); + callFail(err.what()); } } }; @@ -472,11 +472,11 @@ struct LLEventDispatcher::ArrayParamsDispatchEntry: public LLEventDispatcher::Pa // array, we must have an argskey. if (argskey.empty()) { - return callFail("LLEventDispatcher has no args key"); + callFail("LLEventDispatcher has no args key"); } if ((! event.has(argskey))) { - return callFail("missing required key ", std::quoted(argskey)); + callFail("missing required key ", std::quoted(argskey)); } args = event[argskey]; } @@ -708,7 +708,7 @@ LLSD LLEventDispatcher::try_call(const std::string& key, const std::string& name template //static -void LLEventDispatcher::sCallFail(ARGS&&... args) +[[noreturn]] void LLEventDispatcher::sCallFail(ARGS&&... args) { auto error = stringize(std::forward(args)...); LL_WARNS("LLEventDispatcher") << error << LL_ENDL; @@ -716,7 +716,7 @@ void LLEventDispatcher::sCallFail(ARGS&&... args) } template -void LLEventDispatcher::callFail(ARGS&&... args) const +[[noreturn]] void LLEventDispatcher::callFail(ARGS&&... args) const { // Describe this instance in addition to the error itself. sCallFail(*this, ": ", std::forward(args)...); diff --git a/indra/llcommon/lleventdispatcher.h b/indra/llcommon/lleventdispatcher.h index 69b4f82684..a82bc7a69b 100644 --- a/indra/llcommon/lleventdispatcher.h +++ b/indra/llcommon/lleventdispatcher.h @@ -475,13 +475,9 @@ private: virtual LLSD getMetadata() const = 0; template - LLSD callFail(ARGS&&... args) const + [[noreturn]] void callFail(ARGS&&... args) const { mParent->callFail(std::forward(args)...); -#ifndef _MSC_VER - // pacify the compiler - return {}; -#endif } }; typedef std::map > DispatchMap; @@ -584,9 +580,9 @@ private: protected: // raise specified EXCEPTION with specified stringize(ARGS) template - void callFail(ARGS&&... args) const; + [[noreturn]] void callFail(ARGS&&... args) const; template - static + [[noreturn]] static void sCallFail(ARGS&&... args); // Manage transient state, e.g. which registered callable we're attempting @@ -724,10 +720,6 @@ template LLEventDispatcher::invoker_function LLEventDispatcher::make_invoker(Method f, const InstanceGetter& getter) { - // function_arity includes its implicit 'this' pointer - constexpr auto arity = LL::function_arity< - typename std::remove_reference::type>::value - 1; - return [f, getter](const LLSD& args) { // always_return() immediately calls the lambda we pass, and @@ -736,6 +728,10 @@ LLEventDispatcher::make_invoker(Method f, const InstanceGetter& getter) [f, getter, args] () { + // function_arity includes its implicit 'this' pointer + constexpr auto arity = LL::function_arity< + typename std::remove_reference::type>::value - 1; + // Use bind_front() to bind the method to (a pointer to) the object // returned by getter(). It's okay to capture and bind a pointer // because this bind_front() object will last only as long as this diff --git a/indra/llcommon/llsdutil.h b/indra/llcommon/llsdutil.h index a6fd2fdac2..cd68f938ea 100644 --- a/indra/llcommon/llsdutil.h +++ b/indra/llcommon/llsdutil.h @@ -358,7 +358,7 @@ public: /// otherwise, instantiate a more specific LLSDParam to convert; that /// preserves the existing customization mechanism template - operator T() const { return LLSDParam(value_); } + operator T() const { return LLSDParam>(value_); } }; /** diff --git a/indra/llcommon/tests/lleventdispatcher_test.cpp b/indra/llcommon/tests/lleventdispatcher_test.cpp index 0f27211d9e..58469313e9 100644 --- a/indra/llcommon/tests/lleventdispatcher_test.cpp +++ b/indra/llcommon/tests/lleventdispatcher_test.cpp @@ -1200,6 +1200,9 @@ namespace tut void object::test<20>() { set_test_name("call array-style functions with right-size arrays"); +#if defined(_MSC_VER) && _MSC_VER <= 1933 + skip("This test fails on VS older than VS2022 ver 17.4"); +#endif std::vector binary; for (size_t h(0x01), i(0); i < 5; h+= 0x22, ++i) { @@ -1238,6 +1241,9 @@ namespace tut void object::test<21>() { set_test_name("verify that passing LLSD() to const char* sends NULL"); +#if defined(_MSC_VER) && _MSC_VER <= 1933 + skip("This test fails on VS older than VS2022 ver 17.4"); +#endif ensure_equals("Vars::cp init", v.cp, ""); work("methodna_map_mdft", LLSDMap("cp", LLSD())); @@ -1251,6 +1257,9 @@ namespace tut template<> template<> void object::test<22>() { +#if defined(_MSC_VER) && _MSC_VER <= 1933 + skip("This test fails on VS older than VS2022 ver 17.4"); +#endif set_test_name("call map-style functions with (full | oversized) (arrays | maps)"); const char binary[] = "\x99\x88\x77\x66\x55"; LLSD array_full(LLSDMap diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index ae8a970891..50b54ebb49 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -19656,17 +19656,6 @@ Change of this parameter will affect the layout of buttons in notification toast Value 1 - FSDisableMinZoomDist - - Comment - Disable the constraint on the closest distance the camera is allowed to get to an object. - Persist - 1 - Type - Boolean - Value - 0 - FSIgnoreSimulatorCameraConstraints Comment diff --git a/indra/newview/app_settings/settings_hybrid.xml b/indra/newview/app_settings/settings_hybrid.xml index 740041322a..dc3239ee20 100644 --- a/indra/newview/app_settings/settings_hybrid.xml +++ b/indra/newview/app_settings/settings_hybrid.xml @@ -366,18 +366,6 @@ 1 - FSDisableMinZoomDist - - Comment - Disable the constraint on the closest distance the camera is allowed to get to an object. - Persist - 1 - Type - Boolean - Value - 1 - - FSIgnoreSimulatorCameraConstraints Comment diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp index edd63423c4..a3370eaaee 100644 --- a/indra/newview/llagentcamera.cpp +++ b/indra/newview/llagentcamera.cpp @@ -107,6 +107,12 @@ const F32 GROUND_TO_AIR_CAMERA_TRANSITION_START_TIME = 0.5f; const F32 OBJECT_EXTENTS_PADDING = 0.5f; +static bool isDisableCameraConstraints() +{ + static LLCachedControl sDisableCameraConstraints(gSavedSettings, "DisableCameraConstraints", false); + return sDisableCameraConstraints; +} + // The agent instance. LLAgentCamera gAgentCamera; @@ -598,9 +604,9 @@ BOOL LLAgentCamera::calcCameraMinDistance(F32 &obj_min_distance) { BOOL soft_limit = FALSE; // is the bounding box to be treated literally (volumes) or as an approximation (avatars) - if (!mFocusObject || mFocusObject->isDead() || + if (!mFocusObject || mFocusObject->isDead() || mFocusObject->isMesh() || - gSavedSettings.getBOOL("DisableCameraConstraints")) + isDisableCameraConstraints()) { obj_min_distance = 0.f; return TRUE; @@ -770,39 +776,44 @@ F32 LLAgentCamera::getCameraZoomFraction(bool get_third_person) // already [0,1] return mHUDTargetZoom; } - else if (get_third_person || (mFocusOnAvatar && cameraThirdPerson())) + + if (isDisableCameraConstraints()) + { + return mCameraZoomFraction; + } + + if (get_third_person || (mFocusOnAvatar && cameraThirdPerson())) { return clamp_rescale(mCameraZoomFraction, MIN_ZOOM_FRACTION, MAX_ZOOM_FRACTION, 1.f, 0.f); } - else if (cameraCustomizeAvatar()) + + if (cameraCustomizeAvatar()) { F32 distance = (F32)mCameraFocusOffsetTarget.magVec(); return clamp_rescale(distance, APPEARANCE_MIN_ZOOM, APPEARANCE_MAX_ZOOM, 1.f, 0.f ); } - else - { - F32 min_zoom; - F32 max_zoom = getCameraMaxZoomDistance(); - F32 distance = (F32)mCameraFocusOffsetTarget.magVec(); - if (mFocusObject.notNull()) + F32 min_zoom; + F32 max_zoom = getCameraMaxZoomDistance(); + + F32 distance = (F32)mCameraFocusOffsetTarget.magVec(); + if (mFocusObject.notNull()) + { + if (mFocusObject->isAvatar()) { - if (mFocusObject->isAvatar()) - { - min_zoom = AVATAR_MIN_ZOOM; - } - else - { - min_zoom = OBJECT_MIN_ZOOM; - } + min_zoom = AVATAR_MIN_ZOOM; } else { - min_zoom = LAND_MIN_ZOOM; + min_zoom = OBJECT_MIN_ZOOM; } - - return clamp_rescale(distance, min_zoom, max_zoom, 1.f, 0.f); } + else + { + min_zoom = LAND_MIN_ZOOM; + } + + return clamp_rescale(distance, min_zoom, max_zoom, 1.f, 0.f); } void LLAgentCamera::setCameraZoomFraction(F32 fraction) @@ -815,6 +826,10 @@ void LLAgentCamera::setCameraZoomFraction(F32 fraction) { mHUDTargetZoom = fraction; } + else if (isDisableCameraConstraints()) + { + mCameraZoomFraction = fraction; + } else if (mFocusOnAvatar && cameraThirdPerson()) { mCameraZoomFraction = rescale(fraction, 0.f, 1.f, MAX_ZOOM_FRACTION, MIN_ZOOM_FRACTION); @@ -852,6 +867,7 @@ void LLAgentCamera::setCameraZoomFraction(F32 fraction) // [/RLVa:KB] // mCameraFocusOffsetTarget = camera_offset_dir * rescale(fraction, 0.f, 1.f, max_zoom, min_zoom); } + startCameraAnimation(); } @@ -956,58 +972,44 @@ void LLAgentCamera::cameraZoomIn(const F32 fraction) return; } - - LLVector3d camera_offset_unit(mCameraFocusOffsetTarget); - F32 min_zoom = LAND_MIN_ZOOM; + LLVector3d camera_offset_unit(mCameraFocusOffsetTarget); F32 current_distance = (F32)camera_offset_unit.normalize(); F32 new_distance = current_distance * fraction; - // Freeing the camera movement some more -KC - static LLCachedControl disable_minconstraints(gSavedSettings,"FSDisableMinZoomDist"); - if (!disable_minconstraints) + // Unless camera is unlocked + if (!isDisableCameraConstraints()) { - // Don't move through focus point - if (mFocusObject) - { - LLVector3 camera_offset_dir((F32)camera_offset_unit.mdV[VX], (F32)camera_offset_unit.mdV[VY], (F32)camera_offset_unit.mdV[VZ]); + F32 min_zoom = LAND_MIN_ZOOM; - if (mFocusObject->isAvatar()) + // Don't move through focus point + if (mFocusObject) { - calcCameraMinDistance(min_zoom); + LLVector3 camera_offset_dir((F32)camera_offset_unit.mdV[VX], (F32)camera_offset_unit.mdV[VY], (F32)camera_offset_unit.mdV[VZ]); + + if (mFocusObject->isAvatar()) + { + calcCameraMinDistance(min_zoom); + } + else + { + min_zoom = OBJECT_MIN_ZOOM; + } } - else + + new_distance = llmax(new_distance, min_zoom); + + // FIRE-23470: Fix camera controls zoom glitch + //F32 max_distance = getCameraMaxZoomDistance(); + F32 max_distance = getCameraMaxZoomDistance(true); + max_distance = llmin(max_distance, current_distance * 4.f); //Scaled max relative to current distance. MAINT-3154 + new_distance = llmin(new_distance, max_distance); + + if (cameraCustomizeAvatar()) { - min_zoom = OBJECT_MIN_ZOOM; + new_distance = llclamp(new_distance, APPEARANCE_MIN_ZOOM, APPEARANCE_MAX_ZOOM); } } - new_distance = llmax(new_distance, min_zoom); - } - - // FIRE-23470: Fix camera controls zoom glitch - //F32 max_distance = getCameraMaxZoomDistance(); - F32 max_distance = getCameraMaxZoomDistance(true); - - max_distance = llmin(max_distance, current_distance * 4.f); //Scaled max relative to current distance. MAINT-3154 - - if (new_distance > max_distance) - { - new_distance = max_distance; - - /* - // Unless camera is unlocked - if (!LLViewerCamera::sDisableCameraConstraints) - { - return; - } - */ - } - - if(cameraCustomizeAvatar()) - { - new_distance = llclamp( new_distance, APPEARANCE_MIN_ZOOM, APPEARANCE_MAX_ZOOM ); - } - // [RLVa:KB] - Checked: 2.0.0 if ( (RlvActions::isRlvEnabled()) && (!allowFocusOffsetChange(new_distance * camera_offset_unit)) ) return; @@ -1036,54 +1038,48 @@ void LLAgentCamera::cameraOrbitIn(const F32 meters) changeCameraToMouselook(FALSE); } - mCameraZoomFraction = llclamp(mCameraZoomFraction, MIN_ZOOM_FRACTION, MAX_ZOOM_FRACTION); + if (!isDisableCameraConstraints()) + { + mCameraZoomFraction = llclamp(mCameraZoomFraction, MIN_ZOOM_FRACTION, MAX_ZOOM_FRACTION); + } } else { LLVector3d camera_offset_unit(mCameraFocusOffsetTarget); F32 current_distance = (F32)camera_offset_unit.normalize(); F32 new_distance = current_distance - meters; - - // Freeing the camera movement some more -KC - static LLCachedControl disable_minconstraints(gSavedSettings,"FSDisableMinZoomDist"); - if (!disable_minconstraints) - { - F32 min_zoom = LAND_MIN_ZOOM; - - // Don't move through focus point - if (mFocusObject.notNull()) + + // Unless camera is unlocked + if (!isDisableCameraConstraints()) { - if (mFocusObject->isAvatar()) + F32 min_zoom = LAND_MIN_ZOOM; + + // Don't move through focus point + if (mFocusObject.notNull()) { - min_zoom = AVATAR_MIN_ZOOM; + if (mFocusObject->isAvatar()) + { + min_zoom = AVATAR_MIN_ZOOM; + } + else + { + min_zoom = OBJECT_MIN_ZOOM; + } } - else + + new_distance = llmax(new_distance, min_zoom); + + // FIRE-23470: Fix camera controls zoom glitch + //F32 max_distance = getCameraMaxZoomDistance(); + F32 max_distance = getCameraMaxZoomDistance(true); + new_distance = llmin(new_distance, max_distance); + + if (CAMERA_MODE_CUSTOMIZE_AVATAR == getCameraMode()) { - min_zoom = OBJECT_MIN_ZOOM; + new_distance = llclamp(new_distance, APPEARANCE_MIN_ZOOM, APPEARANCE_MAX_ZOOM); } } - new_distance = llmax(new_distance, min_zoom); - } - - // FIRE-23470: Fix camera controls zoom glitch - //F32 max_distance = getCameraMaxZoomDistance(); - F32 max_distance = getCameraMaxZoomDistance(true); - - if (new_distance > max_distance) - { - // Unless camera is unlocked - if (!gSavedSettings.getBOOL("DisableCameraConstraints")) - { - return; - } - } - - if( CAMERA_MODE_CUSTOMIZE_AVATAR == getCameraMode() ) - { - new_distance = llclamp( new_distance, APPEARANCE_MIN_ZOOM, APPEARANCE_MAX_ZOOM ); - } - // [RLVa:KB] - Checked: 2.0.0 if ( (RlvActions::isRlvEnabled()) && (!allowFocusOffsetChange(new_distance * camera_offset_unit)) ) return; @@ -1095,7 +1091,6 @@ void LLAgentCamera::cameraOrbitIn(const F32 meters) } } - //----------------------------------------------------------------------------- // cameraPanIn() //----------------------------------------------------------------------------- @@ -1825,8 +1820,7 @@ F32 LLAgentCamera::calcCameraFOVZoomFactor() // don't FOV zoom on mostly transparent objects F32 obj_min_dist = 0.f; // Freeing the camera movement some more -KC - static LLCachedControl disable_minconstraints(gSavedSettings,"FSDisableMinZoomDist"); - if (!disable_minconstraints) + if (!isDisableCameraConstraints()) calcCameraMinDistance(obj_min_dist); F32 current_distance = llmax(0.001f, camera_offset_dir.magVec()); @@ -1938,7 +1932,8 @@ LLVector3d LLAgentCamera::calcCameraPositionTargetGlobal(BOOL *hit_limit) local_camera_offset = gAgent.getFrameAgent().rotateToAbsolute( local_camera_offset ); } - if (!mCameraCollidePlane.isExactlyZero() && (!isAgentAvatarValid() || !gAgentAvatarp->isSitting())) + if (!isDisableCameraConstraints() && !mCameraCollidePlane.isExactlyZero() && + (!isAgentAvatarValid() || !gAgentAvatarp->isSitting())) { LLVector3 plane_normal; plane_normal.setVec(mCameraCollidePlane.mV); @@ -2057,11 +2052,7 @@ LLVector3d LLAgentCamera::calcCameraPositionTargetGlobal(BOOL *hit_limit) camera_position_global = focusPosGlobal + mCameraFocusOffset; } - // Replace frequently called gSavedSettings - //if (!gSavedSettings.getBOOL("DisableCameraConstraints") && !gAgent.isGodlike()) - static LLCachedControl sDisableCameraConstraints(gSavedSettings, "DisableCameraConstraints"); - if (!sDisableCameraConstraints && !gAgent.isGodlike()) - // + if (!isDisableCameraConstraints() && !gAgent.isGodlike()) { LLViewerRegion* regionp = LLWorld::getInstance()->getRegionFromPosGlobal(camera_position_global); bool constrain = true; @@ -2367,21 +2358,13 @@ F32 LLAgentCamera::getCameraMinOffGround() { return 0.f; } - else + + if (isDisableCameraConstraints()) { - // Replace frequently called gSavedSettings - //if (gSavedSettings.getBOOL("DisableCameraConstraints")) - static LLCachedControl sDisableCameraConstraints(gSavedSettings, "DisableCameraConstraints"); - if (sDisableCameraConstraints) - // - { - return -1000.f; - } - else - { - return 0.5f; - } + return -1000.f; } + + return 0.5f; } diff --git a/indra/newview/lldrawpoolavatar.cpp b/indra/newview/lldrawpoolavatar.cpp index 13bb10cc4e..cd53dfd06a 100644 --- a/indra/newview/lldrawpoolavatar.cpp +++ b/indra/newview/lldrawpoolavatar.cpp @@ -191,8 +191,8 @@ void LLDrawPoolAvatar::beginDeferredPass(S32 pass) is_deferred_render = true; if (LLPipeline::sImpostorRender) - { //impostor pass does not have rigid or impostor rendering - pass += 2; + { //impostor pass does not have impostor rendering + ++pass; } switch (pass) @@ -218,7 +218,7 @@ void LLDrawPoolAvatar::endDeferredPass(S32 pass) if (LLPipeline::sImpostorRender) { - pass += 2; + ++pass; } switch (pass) @@ -439,7 +439,7 @@ void LLDrawPoolAvatar::render(S32 pass) LL_PROFILE_ZONE_SCOPED_CATEGORY_AVATAR; if (LLPipeline::sImpostorRender) { - renderAvatars(NULL, pass+2); + renderAvatars(NULL, ++pass); return; } @@ -454,7 +454,7 @@ void LLDrawPoolAvatar::beginRenderPass(S32 pass) if (LLPipeline::sImpostorRender) { //impostor render does not have impostors or rigid rendering - pass += 2; + ++pass; } switch (pass) @@ -482,7 +482,7 @@ void LLDrawPoolAvatar::endRenderPass(S32 pass) if (LLPipeline::sImpostorRender) { - pass += 2; + ++pass; } switch (pass) diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index e76b1d073f..11d4a0ef7a 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -5897,11 +5897,6 @@ U32 LLVOAvatar::renderRigid() { return 0; } - - if (!mIsBuilt) - { - return 0; - } bool should_alpha_mask = shouldAlphaMask(); LLGLState test(GL_ALPHA_TEST, should_alpha_mask); diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp index 230a13f98e..a1285ff940 100644 --- a/indra/newview/llvoavatarself.cpp +++ b/indra/newview/llvoavatarself.cpp @@ -1353,7 +1353,7 @@ void LLVOAvatarSelf::updateRegion(LLViewerRegion *regionp) } //-------------------------------------------------------------------- -// draw tractor beam when editing objects +// draw tractor (selection) beam when editing objects //-------------------------------------------------------------------- //virtual void LLVOAvatarSelf::idleUpdateTractorBeam() @@ -3449,12 +3449,14 @@ BOOL LLVOAvatarSelf::needsRenderBeam() LLTool *tool = LLToolMgr::getInstance()->getCurrentTool(); BOOL is_touching_or_grabbing = (tool == LLToolGrab::getInstance() && LLToolGrab::getInstance()->isEditing()); - if (LLToolGrab::getInstance()->getEditingObject() && - LLToolGrab::getInstance()->getEditingObject()->isAttachment()) - { - // don't render selection beam on hud objects - is_touching_or_grabbing = FALSE; - } + LLViewerObject* objp = LLToolGrab::getInstance()->getEditingObject(); + if (objp // might need to be "!objp ||" instead of "objp &&". + && (objp->isAttachment() || objp->isAvatar())) + { + // don't render grab tool's selection beam on hud objects, + // attachments or avatars + is_touching_or_grabbing = FALSE; + } return is_touching_or_grabbing || (getAttachmentState() & AGENT_STATE_EDITING && LLSelectMgr::getInstance()->shouldShowSelection()); } diff --git a/indra/newview/skins/default/xui/az/floater_phototools.xml b/indra/newview/skins/default/xui/az/floater_phototools.xml index 8e23d0112a..118fc9cdf7 100644 --- a/indra/newview/skins/default/xui/az/floater_phototools.xml +++ b/indra/newview/skins/default/xui/az/floater_phototools.xml @@ -539,8 +539,6 @@ tool_tip="Adətən avatar üzərinə basmaqla kameranın yerləşməsi sıfırlanır. Bu seçim bu davranışı düzəldir."/> - - - diff --git a/indra/newview/skins/default/xui/de/floater_phototools.xml b/indra/newview/skins/default/xui/de/floater_phototools.xml index 2ee7f3e908..db56f5e5a7 100644 --- a/indra/newview/skins/default/xui/de/floater_phototools.xml +++ b/indra/newview/skins/default/xui/de/floater_phototools.xml @@ -556,7 +556,6 @@ - diff --git a/indra/newview/skins/default/xui/de/floater_phototools_camera.xml b/indra/newview/skins/default/xui/de/floater_phototools_camera.xml index bd0e51d0a0..621fe231f4 100644 --- a/indra/newview/skins/default/xui/de/floater_phototools_camera.xml +++ b/indra/newview/skins/default/xui/de/floater_phototools_camera.xml @@ -129,7 +129,6 @@ - diff --git a/indra/newview/skins/default/xui/de/panel_preferences_move.xml b/indra/newview/skins/default/xui/de/panel_preferences_move.xml index 521efa6c86..54a0488edf 100644 --- a/indra/newview/skins/default/xui/de/panel_preferences_move.xml +++ b/indra/newview/skins/default/xui/de/panel_preferences_move.xml @@ -18,7 +18,6 @@ - diff --git a/indra/newview/skins/default/xui/en/floater_phototools.xml b/indra/newview/skins/default/xui/en/floater_phototools.xml index b101bc2781..78f557130d 100644 --- a/indra/newview/skins/default/xui/en/floater_phototools.xml +++ b/indra/newview/skins/default/xui/en/floater_phototools.xml @@ -4449,17 +4449,6 @@ width="250" control_name="FSResetCameraOnTP" tool_tip="Normally, the camera position gets reset when teleporting (within a region). This option prevents this behavior."/> - - - - diff --git a/indra/newview/skins/default/xui/es/floater_phototools_camera.xml b/indra/newview/skins/default/xui/es/floater_phototools_camera.xml index 715ce95f07..0c717eab9f 100644 --- a/indra/newview/skins/default/xui/es/floater_phototools_camera.xml +++ b/indra/newview/skins/default/xui/es/floater_phototools_camera.xml @@ -110,7 +110,6 @@ - diff --git a/indra/newview/skins/default/xui/es/panel_preferences_move.xml b/indra/newview/skins/default/xui/es/panel_preferences_move.xml index 184f2e3b5b..695344f1ee 100644 --- a/indra/newview/skins/default/xui/es/panel_preferences_move.xml +++ b/indra/newview/skins/default/xui/es/panel_preferences_move.xml @@ -16,7 +16,6 @@ - diff --git a/indra/newview/skins/default/xui/fr/floater_phototools.xml b/indra/newview/skins/default/xui/fr/floater_phototools.xml index a0ce82854b..058ebc3d44 100644 --- a/indra/newview/skins/default/xui/fr/floater_phototools.xml +++ b/indra/newview/skins/default/xui/fr/floater_phototools.xml @@ -587,7 +587,6 @@ - diff --git a/indra/newview/skins/default/xui/fr/floater_phototools_camera.xml b/indra/newview/skins/default/xui/fr/floater_phototools_camera.xml index b56a1824b4..dd859911eb 100644 --- a/indra/newview/skins/default/xui/fr/floater_phototools_camera.xml +++ b/indra/newview/skins/default/xui/fr/floater_phototools_camera.xml @@ -129,7 +129,6 @@ - diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_move.xml b/indra/newview/skins/default/xui/fr/panel_preferences_move.xml index 6acc2dbe74..928a6e6828 100644 --- a/indra/newview/skins/default/xui/fr/panel_preferences_move.xml +++ b/indra/newview/skins/default/xui/fr/panel_preferences_move.xml @@ -15,7 +15,6 @@ - (Redémarrage requis) diff --git a/indra/newview/skins/default/xui/it/floater_phototools.xml b/indra/newview/skins/default/xui/it/floater_phototools.xml index 1b1b694bd0..e44aeaabfb 100644 --- a/indra/newview/skins/default/xui/it/floater_phototools.xml +++ b/indra/newview/skins/default/xui/it/floater_phototools.xml @@ -468,7 +468,6 @@ - diff --git a/indra/newview/skins/default/xui/it/floater_phototools_camera.xml b/indra/newview/skins/default/xui/it/floater_phototools_camera.xml index 501224cb36..449ae8ef56 100644 --- a/indra/newview/skins/default/xui/it/floater_phototools_camera.xml +++ b/indra/newview/skins/default/xui/it/floater_phototools_camera.xml @@ -117,7 +117,6 @@ - diff --git a/indra/newview/skins/default/xui/it/panel_preferences_move.xml b/indra/newview/skins/default/xui/it/panel_preferences_move.xml index 8c41a84de6..2844615626 100644 --- a/indra/newview/skins/default/xui/it/panel_preferences_move.xml +++ b/indra/newview/skins/default/xui/it/panel_preferences_move.xml @@ -17,7 +17,6 @@ - diff --git a/indra/newview/skins/default/xui/ja/floater_phototools.xml b/indra/newview/skins/default/xui/ja/floater_phototools.xml index c8ca2dc24b..1abd213527 100644 --- a/indra/newview/skins/default/xui/ja/floater_phototools.xml +++ b/indra/newview/skins/default/xui/ja/floater_phototools.xml @@ -746,7 +746,6 @@ - diff --git a/indra/newview/skins/default/xui/ja/floater_phototools_camera.xml b/indra/newview/skins/default/xui/ja/floater_phototools_camera.xml index a2c6c2c369..4bca7c8940 100644 --- a/indra/newview/skins/default/xui/ja/floater_phototools_camera.xml +++ b/indra/newview/skins/default/xui/ja/floater_phototools_camera.xml @@ -148,7 +148,6 @@ - diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_move.xml b/indra/newview/skins/default/xui/ja/panel_preferences_move.xml index 9a3c12b7bc..3420dd5813 100644 --- a/indra/newview/skins/default/xui/ja/panel_preferences_move.xml +++ b/indra/newview/skins/default/xui/ja/panel_preferences_move.xml @@ -21,7 +21,6 @@ - diff --git a/indra/newview/skins/default/xui/pl/floater_phototools.xml b/indra/newview/skins/default/xui/pl/floater_phototools.xml index 1ba9fa3e6d..43b5ad7373 100644 --- a/indra/newview/skins/default/xui/pl/floater_phototools.xml +++ b/indra/newview/skins/default/xui/pl/floater_phototools.xml @@ -468,7 +468,6 @@ - diff --git a/indra/newview/skins/default/xui/pl/floater_phototools_camera.xml b/indra/newview/skins/default/xui/pl/floater_phototools_camera.xml index 63f19ff682..b0ec961ddc 100644 --- a/indra/newview/skins/default/xui/pl/floater_phototools_camera.xml +++ b/indra/newview/skins/default/xui/pl/floater_phototools_camera.xml @@ -117,7 +117,6 @@ - diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_move.xml b/indra/newview/skins/default/xui/pl/panel_preferences_move.xml index 947b796dd3..f7a3a86518 100644 --- a/indra/newview/skins/default/xui/pl/panel_preferences_move.xml +++ b/indra/newview/skins/default/xui/pl/panel_preferences_move.xml @@ -17,7 +17,6 @@ - diff --git a/indra/newview/skins/default/xui/ru/floater_phototools.xml b/indra/newview/skins/default/xui/ru/floater_phototools.xml index 673cee8d36..fabcf0144a 100644 --- a/indra/newview/skins/default/xui/ru/floater_phototools.xml +++ b/indra/newview/skins/default/xui/ru/floater_phototools.xml @@ -539,8 +539,6 @@ tool_tip="Обычно нажатие на аватар сбрасывает положение камеры. Этот параметр устраняет это поведение."/> - - -