diff options
Diffstat (limited to 'indra')
65 files changed, 822 insertions, 509 deletions
diff --git a/indra/cmake/00-Common.cmake b/indra/cmake/00-Common.cmake index 452fd5f356..aa1d50b993 100644 --- a/indra/cmake/00-Common.cmake +++ b/indra/cmake/00-Common.cmake @@ -128,6 +128,17 @@ if (LINUX)    # Let's actually get a numerical version of gxx's version    STRING(REGEX REPLACE ".* ([0-9])\\.([0-9])\\.([0-9]).*" "\\1\\2\\3" CXX_VERSION_NUMBER ${CXX_VERSION}) +  # Hacks to work around gcc 4.1 TC build pool machines which can't process pragma warning disables +  # This is pure rubbish; I wish there was another way. +  # +  if(${CXX_VERSION_NUMBER} LESS 420) +    set(CMAKE_CXX_FLAGS "-Wno-deprecated -Wno-uninitialized -Wno-unused-variable -Wno-unused-function ${CMAKE_CXX_FLAGS}") +  endif (${CXX_VERSION_NUMBER} LESS 420) + +  if(${CXX_VERSION_NUMBER} GREATER 459) +    set(CMAKE_CXX_FLAGS "-Wno-deprecated -Wno-unused-but-set-variable -Wno-unused-variable ${CMAKE_CXX_FLAGS}") +  endif (${CXX_VERSION_NUMBER} GREATER 459) +    # gcc 4.3 and above don't like the LL boost and also    # cause warnings due to our use of deprecated headers    if(${CXX_VERSION_NUMBER} GREATER 429) @@ -218,7 +229,7 @@ if (LINUX OR DARWIN)    set(GCC_WARNINGS "-Wall -Wno-sign-compare -Wno-trigraphs")    if (NOT GCC_DISABLE_FATAL_WARNINGS) -    set(GCC_WARNINGS "${GCC_WARNINGS} -Werror") +#    set(GCC_WARNINGS "${GCC_WARNINGS} -Werror")    endif (NOT GCC_DISABLE_FATAL_WARNINGS)    set(GCC_CXX_WARNINGS "${GCC_WARNINGS} -Wno-reorder -Wno-non-virtual-dtor") diff --git a/indra/cmake/Copy3rdPartyLibs.cmake b/indra/cmake/Copy3rdPartyLibs.cmake index c32e357da3..1551b0e3f7 100644 --- a/indra/cmake/Copy3rdPartyLibs.cmake +++ b/indra/cmake/Copy3rdPartyLibs.cmake @@ -266,6 +266,7 @@ elseif(LINUX)          libdb-5.1.so          libexpat.so          libexpat.so.1 +        libfreetype.so.6          libglod.so          libgmock_main.so          libgmock.so.0 diff --git a/indra/cmake/FreeType.cmake b/indra/cmake/FreeType.cmake index 43a9d282d0..c9a90a9a8d 100644 --- a/indra/cmake/FreeType.cmake +++ b/indra/cmake/FreeType.cmake @@ -7,13 +7,7 @@ if (STANDALONE)    pkg_check_modules(FREETYPE REQUIRED freetype2)  else (STANDALONE)    use_prebuilt_binary(freetype) -  if (LINUX) -    set(FREETYPE_INCLUDE_DIRS -        ${LIBS_PREBUILT_DIR}/include) -  else (LINUX) -    set(FREETYPE_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include) -  endif (LINUX) - +  set(FREETYPE_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include)    set(FREETYPE_LIBRARIES freetype)  endif (STANDALONE) diff --git a/indra/linux_crash_logger/CMakeLists.txt b/indra/linux_crash_logger/CMakeLists.txt index 98ebdc7487..5263b59584 100644 --- a/indra/linux_crash_logger/CMakeLists.txt +++ b/indra/linux_crash_logger/CMakeLists.txt @@ -12,6 +12,7 @@ include(LLVFS)  include(LLXML)  include(Linking)  include(UI) +include(FreeType)  include_directories(      ${LLCOMMON_INCLUDE_DIRS} @@ -53,6 +54,7 @@ target_link_libraries(linux-crash-logger      ${LLCOMMON_LIBRARIES}      ${UI_LIBRARIES}      ${DB_LIBRARIES} +    ${FREETYPE_LIBRARIES}      )  add_custom_target(linux-crash-logger-target ALL diff --git a/indra/llcharacter/lleditingmotion.cpp b/indra/llcharacter/lleditingmotion.cpp index 0d0b85ba60..35508e0a87 100644 --- a/indra/llcharacter/lleditingmotion.cpp +++ b/indra/llcharacter/lleditingmotion.cpp @@ -38,8 +38,6 @@  // Constants  //-----------------------------------------------------------------------------  const LLQuaternion EDIT_MOTION_WRIST_ROTATION(F_PI_BY_TWO * 0.7f, LLVector3(1.0f, 0.0f, 0.0f)); -const F32 TARGET_LAG_HALF_LIFE	= 0.1f;		// half-life of IK targeting -const F32 TORSO_LAG_HALF_LIFE = 0.2f;  const F32 MAX_TIME_DELTA = 2.f; //max two seconds a frame for calculating interpolation  S32 LLEditingMotion::sHandPose = LLHandMotion::HAND_POSE_RELAXED_R; @@ -232,7 +230,7 @@ BOOL LLEditingMotion::onUpdate(F32 time, U8* joint_mask)  		mIKSolver.solve();  		// use blending... -		F32 slerp_amt = LLCriticalDamp::getInterpolant(TARGET_LAG_HALF_LIFE); +		F32 slerp_amt = LLCriticalDamp::getInterpolant(InterpDeltaTargetLagHalfLife);  		shoulderRot = slerp(slerp_amt, mShoulderJoint.getRotation(), shoulderRot);  		elbowRot = slerp(slerp_amt, mElbowJoint.getRotation(), elbowRot); @@ -258,3 +256,4 @@ void LLEditingMotion::onDeactivate()  // End + diff --git a/indra/llcharacter/llheadrotmotion.cpp b/indra/llcharacter/llheadrotmotion.cpp index 15a58a8389..1eddd0f449 100644 --- a/indra/llcharacter/llheadrotmotion.cpp +++ b/indra/llcharacter/llheadrotmotion.cpp @@ -182,8 +182,8 @@ BOOL LLHeadRotMotion::onUpdate(F32 time, U8* joint_mask)  	LLQuaternion	currentRootRotWorld = mRootJoint->getWorldRotation();  	LLQuaternion	currentInvRootRotWorld = ~currentRootRotWorld; -	F32 head_slerp_amt = LLCriticalDamp::getInterpolant(HEAD_LOOKAT_LAG_HALF_LIFE); -	F32 torso_slerp_amt = LLCriticalDamp::getInterpolant(TORSO_LOOKAT_LAG_HALF_LIFE); +	F32 head_slerp_amt = LLCriticalDamp::getInterpolant(InterpDeltaHeadLookAtLagHalfLife); +	F32 torso_slerp_amt = LLCriticalDamp::getInterpolant(InterpDeltaTorsoLookAtLagHalfLife);  	LLVector3* targetPos = (LLVector3*)mCharacter->getAnimationData("LookAtPoint"); @@ -530,3 +530,4 @@ void LLEyeMotion::onDeactivate()  }  // End + diff --git a/indra/llcharacter/llkeyframemotion.cpp b/indra/llcharacter/llkeyframemotion.cpp index c6f45bffa2..f394cf2635 100644 --- a/indra/llcharacter/llkeyframemotion.cpp +++ b/indra/llcharacter/llkeyframemotion.cpp @@ -1031,11 +1031,11 @@ void LLKeyframeMotion::applyConstraint(JointConstraint* constraint, F32 time, U8  	if (constraint->mSharedData->mChainLength != 0 &&  		dist_vec_squared(root_pos, target_pos) * 0.95f > constraint->mTotalLength * constraint->mTotalLength)  	{ -		constraint->mWeight = lerp(constraint->mWeight, 0.f, LLCriticalDamp::getInterpolant(0.1f)); +		constraint->mWeight = lerp(constraint->mWeight, 0.f, LLCriticalDamp::getInterpolant(InterpDeltaSmaller));  	}  	else  	{ -		constraint->mWeight = lerp(constraint->mWeight, 1.f, LLCriticalDamp::getInterpolant(0.3f)); +		constraint->mWeight = lerp(constraint->mWeight, 1.f, LLCriticalDamp::getInterpolant(InterpDeltaSmallish));  	}  	F32 weight = constraint->mWeight * ((shared_data->mEaseOutStopTime == 0.f) ? 1.f :  @@ -1084,7 +1084,7 @@ void LLKeyframeMotion::applyConstraint(JointConstraint* constraint, F32 time, U8  			F32 time_constant = 1.f / clamp_rescale(constraint->mFixupDistanceRMS, 0.f, 0.5f, 0.2f, 8.f);  //			llinfos << "Interpolant " << LLCriticalDamp::getInterpolant(time_constant, FALSE) << " and fixup distance " << constraint->mFixupDistanceRMS << " on " << mCharacter->findCollisionVolume(shared_data->mSourceConstraintVolume)->getName() << llendl;  			positions[joint_num] = lerp(positions[joint_num], kinematic_position,  -				LLCriticalDamp::getInterpolant(time_constant, FALSE)); +				LLCriticalDamp::getInterpolant(time_constant));  		}  		S32 iteration_count; @@ -2304,3 +2304,4 @@ LLKeyframeMotion::JointConstraint::~JointConstraint()  }  // End + diff --git a/indra/llcharacter/llkeyframewalkmotion.cpp b/indra/llcharacter/llkeyframewalkmotion.cpp index d52eb89a5c..d17c123e54 100644 --- a/indra/llcharacter/llkeyframewalkmotion.cpp +++ b/indra/llcharacter/llkeyframewalkmotion.cpp @@ -287,7 +287,7 @@ BOOL LLWalkAdjustMotion::onUpdate(F32 time, U8* joint_mask)  		F32 desired_speed_multiplier = llclamp(speed / foot_speed, min_speed_multiplier, ANIM_SPEED_MAX);  		// blend towards new speed adjustment value -		F32 new_speed_adjust = lerp(mAdjustedSpeed, desired_speed_multiplier, LLCriticalDamp::getInterpolant(SPEED_ADJUST_TIME_CONSTANT)); +		F32 new_speed_adjust = lerp(mAdjustedSpeed, desired_speed_multiplier, LLCriticalDamp::getInterpolant(InterpDeltaSpeedAdjustTime));  		// limit that rate at which the speed adjustment changes  		F32 speedDelta = llclamp(new_speed_adjust - mAdjustedSpeed, -SPEED_ADJUST_MAX_SEC * delta_time, SPEED_ADJUST_MAX_SEC * delta_time); @@ -305,8 +305,8 @@ BOOL LLWalkAdjustMotion::onUpdate(F32 time, U8* joint_mask)  	{	// standing/turning  		// damp out speed adjustment to 0 -		mAnimSpeed = lerp(mAnimSpeed, 1.f, LLCriticalDamp::getInterpolant(0.2f)); -		//mPelvisOffset = lerp(mPelvisOffset, LLVector3::zero, LLCriticalDamp::getInterpolant(0.2f)); +		mAnimSpeed = lerp(mAnimSpeed, 1.f, LLCriticalDamp::getInterpolant(InterpDeltaSmall)); +		//mPelvisOffset = lerp(mPelvisOffset, LLVector3::zero, LLCriticalDamp::getInterpolant(InterpDeltaSmall));  	}  	// broadcast walk speed change @@ -383,10 +383,11 @@ BOOL LLFlyAdjustMotion::onUpdate(F32 time, U8* joint_mask)  	F32 target_roll = llclamp(ang_vel.mV[VZ], -4.f, 4.f) * roll_factor;  	// roll is critically damped interpolation between current roll and angular velocity-derived target roll -	mRoll = lerp(mRoll, target_roll, LLCriticalDamp::getInterpolant(0.1f)); +	mRoll = lerp(mRoll, target_roll, LLCriticalDamp::getInterpolant(InterpDeltaSmaller));  	LLQuaternion roll(mRoll, LLVector3(0.f, 0.f, 1.f));  	mPelvisState->setRotation(roll);  	return TRUE;  } + diff --git a/indra/llcharacter/llmotion.cpp b/indra/llcharacter/llmotion.cpp index 2551f125d0..d4db0d84c9 100644 --- a/indra/llcharacter/llmotion.cpp +++ b/indra/llcharacter/llmotion.cpp @@ -73,7 +73,7 @@ void LLMotion::fadeOut()  {  	if (mFadeWeight > 0.01f)  	{ -		mFadeWeight = lerp(mFadeWeight, 0.f, LLCriticalDamp::getInterpolant(0.15f)); +		mFadeWeight = lerp(mFadeWeight, 0.f, LLCriticalDamp::getInterpolant(InterpDeltaFadeWeight));  	}  	else  	{ @@ -88,7 +88,7 @@ void LLMotion::fadeIn()  {  	if (mFadeWeight < 0.99f)  	{ -		mFadeWeight = lerp(mFadeWeight, 1.f, LLCriticalDamp::getInterpolant(0.15f)); +		mFadeWeight = lerp(mFadeWeight, 1.f, LLCriticalDamp::getInterpolant(InterpDeltaFadeWeight));  	}  	else  	{ @@ -169,3 +169,4 @@ BOOL LLMotion::canDeprecate()  }  // End + diff --git a/indra/llcharacter/lltargetingmotion.cpp b/indra/llcharacter/lltargetingmotion.cpp index 489aef923c..6ce6ce31d6 100644 --- a/indra/llcharacter/lltargetingmotion.cpp +++ b/indra/llcharacter/lltargetingmotion.cpp @@ -106,7 +106,7 @@ BOOL LLTargetingMotion::onActivate()  //-----------------------------------------------------------------------------  BOOL LLTargetingMotion::onUpdate(F32 time, U8* joint_mask)  { -	F32 slerp_amt = LLCriticalDamp::getInterpolant(TORSO_TARGET_HALF_LIFE); +	F32 slerp_amt = LLCriticalDamp::getInterpolant(InterpDeltaTorsoTargetLagHalfLife);  	LLVector3 target;  	LLVector3* lookAtPoint = (LLVector3*)mCharacter->getAnimationData("LookAtPoint"); @@ -169,3 +169,4 @@ void LLTargetingMotion::onDeactivate()  // End + diff --git a/indra/llcommon/CMakeLists.txt b/indra/llcommon/CMakeLists.txt index e019c17280..0c2ceebb52 100644 --- a/indra/llcommon/CMakeLists.txt +++ b/indra/llcommon/CMakeLists.txt @@ -121,6 +121,7 @@ set(llcommon_HEADER_FILES      linden_common.h      linked_lists.h      llaccountingcost.h +    llalignedarray.h      llallocator.h      llallocator_heap_profile.h      llagentconstants.h diff --git a/indra/llcommon/llalignedarray.h b/indra/llcommon/llalignedarray.h new file mode 100644 index 0000000000..ed8fd31205 --- /dev/null +++ b/indra/llcommon/llalignedarray.h @@ -0,0 +1,139 @@ +/**  + * @file llalignedarray.h + * @brief A static array which obeys alignment restrictions and mimics std::vector accessors. + * + * $LicenseInfo:firstyear=2002&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2010, Linden Research, Inc. + *  + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + *  + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU + * Lesser General Public License for more details. + *  + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA + *  + * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA + * $/LicenseInfo$ + */ + +#ifndef LL_LLALIGNEDARRAY_H +#define LL_LLALIGNEDARRAY_H + +#include "llmemory.h" + +template <class T, U32 alignment> +class LLAlignedArray +{ +public: +	T* mArray; +	U32 mElementCount; +	U32 mCapacity; + +	LLAlignedArray(); +	~LLAlignedArray(); + +	void push_back(const T& elem); +	U32 size() const { return mElementCount; } +	void resize(U32 size); +	T* append(S32 N); +	T& operator[](int idx); +	const T& operator[](int idx) const; +}; + +template <class T, U32 alignment> +LLAlignedArray<T, alignment>::LLAlignedArray() +{ +	llassert(alignment >= 16); +	mArray = NULL; +	mElementCount = 0; +	mCapacity = 0; +} + +template <class T, U32 alignment> +LLAlignedArray<T, alignment>::~LLAlignedArray() +{ +	ll_aligned_free(mArray); +	mArray = NULL; +	mElementCount = 0; +	mCapacity = 0; +} + +template <class T, U32 alignment> +void LLAlignedArray<T, alignment>::push_back(const T& elem) +{ +	T* old_buf = NULL; +	if (mCapacity <= mElementCount) +	{ +		mCapacity++; +		mCapacity *= 2; +		T* new_buf = (T*) ll_aligned_malloc(mCapacity*sizeof(T), alignment); +		if (mArray) +		{ +			ll_memcpy_nonaliased_aligned_16((char*)new_buf, (char*)mArray, sizeof(T)*mElementCount); +		} +		old_buf = mArray; +		mArray = new_buf; +	} + +	mArray[mElementCount++] = elem; + +	//delete old array here to prevent error on a.push_back(a[0]) +	ll_aligned_free(old_buf); +} + +template <class T, U32 alignment> +void LLAlignedArray<T, alignment>::resize(U32 size) +{ +	if (mCapacity < size) +	{ +		mCapacity = size+mCapacity*2; +		T* new_buf = mCapacity > 0 ? (T*) ll_aligned_malloc(mCapacity*sizeof(T), alignment) : NULL; +		if (mArray) +		{ +			ll_memcpy_nonaliased_aligned_16((char*) new_buf, (char*) mArray, sizeof(T)*mElementCount); +			ll_aligned_free(mArray); +		} + +		/*for (U32 i = mElementCount; i < mCapacity; ++i) +		{ +			new(new_buf+i) T(); +		}*/ +		mArray = new_buf; +	} + +	mElementCount = size; +} + + +template <class T, U32 alignment> +T& LLAlignedArray<T, alignment>::operator[](int idx) +{ +	llassert(idx < mElementCount); +	return mArray[idx]; +} + +template <class T, U32 alignment> +const T& LLAlignedArray<T, alignment>::operator[](int idx) const +{ +	llassert(idx < mElementCount); +	return mArray[idx]; +} + +template <class T, U32 alignment> +T* LLAlignedArray<T, alignment>::append(S32 N) +{ +	U32 sz = size(); +	resize(sz+N); +	return &((*this)[sz]); +} + +#endif + diff --git a/indra/llcommon/llapp.h b/indra/llcommon/llapp.h index a536a06ea5..afa06df23e 100644 --- a/indra/llcommon/llapp.h +++ b/indra/llcommon/llapp.h @@ -38,7 +38,7 @@ typedef LLAtomic32<U32> LLAtomicU32;  class LLErrorThread;  class LLLiveFile;  #if LL_LINUX -typedef struct siginfo siginfo_t; +#include <signal.h>  #endif  typedef void (*LLAppErrorHandler)(); diff --git a/indra/llcommon/llcriticaldamp.cpp b/indra/llcommon/llcriticaldamp.cpp index 87d79b1ee0..27fef0e6dc 100644 --- a/indra/llcommon/llcriticaldamp.cpp +++ b/indra/llcommon/llcriticaldamp.cpp @@ -32,8 +32,9 @@  // static members  //-----------------------------------------------------------------------------  LLFrameTimer LLCriticalDamp::sInternalTimer; -std::map<F32, F32> LLCriticalDamp::sInterpolants;  F32 LLCriticalDamp::sTimeDelta; +F32	LLCriticalDamp::sInterpolants[kNumCachedInterpolants]; +F32 LLCriticalDamp::sInterpolatedValues[kNumCachedInterpolants];  //-----------------------------------------------------------------------------  // LLCriticalDamp() @@ -41,6 +42,17 @@ F32 LLCriticalDamp::sTimeDelta;  LLCriticalDamp::LLCriticalDamp()  {  	sTimeDelta = 0.f; + +	// Init the core interpolant values (to which many, many enums map) +	// +	setInterpolantConstant(InterpDelta_0_025, 0.025f); +	setInterpolantConstant(InterpDelta_0_05,  0.05f ); +	setInterpolantConstant(InterpDelta_0_06,  0.06f); +	setInterpolantConstant(InterpDelta_0_10,  0.10f); +	setInterpolantConstant(InterpDelta_0_15,  0.15f); +	setInterpolantConstant(InterpDelta_0_20,  0.20f); +	setInterpolantConstant(InterpDelta_0_25,  0.25f); +	setInterpolantConstant(InterpDelta_0_30,  0.30f);  }  // static @@ -51,39 +63,10 @@ void LLCriticalDamp::updateInterpolants()  {  	sTimeDelta = sInternalTimer.getElapsedTimeAndResetF32(); -	F32 time_constant; - -	for (std::map<F32, F32>::iterator iter = sInterpolants.begin(); -		 iter != sInterpolants.end(); iter++) -	{ -		time_constant = iter->first; -		F32 new_interpolant = 1.f - pow(2.f, -sTimeDelta / time_constant); -		new_interpolant = llclamp(new_interpolant, 0.f, 1.f); -		sInterpolants[time_constant] = new_interpolant; -	} -}  - -//----------------------------------------------------------------------------- -// getInterpolant() -//----------------------------------------------------------------------------- -F32 LLCriticalDamp::getInterpolant(const F32 time_constant, BOOL use_cache) -{ -	if (time_constant == 0.f) +	U32 i; +	for (i = 0; i < kNumCachedInterpolants; i++)  	{ -		return 1.f; +		sInterpolatedValues[i] = llclamp(sTimeDelta / sInterpolants[ i], 0.0f, 1.0f);  	} - -	if (use_cache && sInterpolants.count(time_constant)) -	{ -		return sInterpolants[time_constant]; -	} -	 -	F32 interpolant = 1.f - pow(2.f, -sTimeDelta / time_constant); -	interpolant = llclamp(interpolant, 0.f, 1.f); -	if (use_cache) -	{ -		sInterpolants[time_constant] = interpolant; -	} - -	return interpolant;  } + diff --git a/indra/llcommon/llcriticaldamp.h b/indra/llcommon/llcriticaldamp.h index 52f052ae25..19a2ddb77a 100644 --- a/indra/llcommon/llcriticaldamp.h +++ b/indra/llcommon/llcriticaldamp.h @@ -32,22 +32,98 @@  #include "llframetimer.h" +// These enums each represent one fixed-time delta value +// that we interpolate once given the actual sTimeDelta time +// that has passed. This allows us to calculate the interp portion +// of those values once and then look them up repeatedly per frame. +// +enum InterpDelta +{	 +	InterpDelta_0_025,		// 0.025 +	InterpDeltaTeenier					= InterpDelta_0_025, +	InterpDeltaFolderOpenTime			= InterpDelta_0_025, +	InterpDeltaFolderCloseTime			= InterpDelta_0_025, +	InterpDeltaCameraFocusHalfLife		= InterpDelta_0_025,	// USED TO BE ZERO.... + +	InterpDelta_0_05,		// 0.05 +	InterpDeltaTeeny		= InterpDelta_0_05, + +	InterpDelta_0_06,		// 0.06 +	InterpDeltaObjectDampingConstant	= InterpDelta_0_06,	 +	InterpDeltaCameraZoomHalfLife		= InterpDelta_0_06, +	InterpDeltaFovZoomHalfLife			= InterpDelta_0_06, +	InterpDeltaManipulatorScaleHalfLife	= InterpDelta_0_06, +	InterpDeltaContextFadeTime			= InterpDelta_0_06, + +	InterpDelta_0_10,		// 0.10 +	InterpDeltaSmaller					= InterpDelta_0_10, +	InterpDeltaTargetLagHalfLife		= InterpDelta_0_10, +	InterpDeltaSpeedAdjustTime			= InterpDelta_0_10, + +	InterpDelta_0_15,		// 0.15 +	InterpDeltaFadeWeight				= InterpDelta_0_15, +	InterpDeltaHeadLookAtLagHalfLife	= InterpDelta_0_15, + +	InterpDelta_0_20,		// 0.20 +	InterpDeltaSmall					= InterpDelta_0_20, +	InterpDeltaTorsoLagHalfLife			= InterpDelta_0_20, +	InterpDeltaPositionDampingTC		= InterpDelta_0_20, + +	InterpDelta_0_25,		// 0.25 +	InterpDeltaCameraLagHalfLife		= InterpDelta_0_25, +	InterpDeltaTorsoTargetLagHalfLife	= InterpDelta_0_25, +	InterpDeltaTorsoLookAtLagHalfLife	= InterpDelta_0_25, + +	InterpDelta_0_30,		// 0.3 +	InterpDeltaSmallish		= InterpDelta_0_30, + +	// Dynamically set interpolants which use setInterpolantConstant +	// +	InterpDeltaCameraSmoothingHalfLife,	 +	InterpDeltaBehindnessLag, +	InterpDeltaFocusLag, +	InterpDeltaPositionLag, +	InterpDeltaOpenTime, +	InterpDeltaCloseTime,		 + +	kNumCachedInterpolants +}; +  class LL_COMMON_API LLCriticalDamp   {  public:  	LLCriticalDamp(); -	// MANIPULATORS +	// Updates all the known interp delta values for fast lookup in calls to getInterpolant(InterpDelta) +	//  	static void updateInterpolants(); +	static inline void setInterpolantConstant(InterpDelta whichDelta, const F32 time_constant) +	{ +		llassert(whichDelta < kNumCachedInterpolants); +		sInterpolants[whichDelta] = time_constant; +	} +  	// ACCESSORS -	static F32 getInterpolant(const F32 time_constant, BOOL use_cache = TRUE); +	static inline F32 getInterpolant(InterpDelta whichDelta) +	{ +		llassert(whichDelta < kNumCachedInterpolants); +		return sInterpolatedValues[whichDelta]; +	} + +	static inline F32 getInterpolant(const F32 time_constant) +	{ +		return llclamp((sTimeDelta / time_constant), 0.0f, 1.0f); +	}  protected:	  	static LLFrameTimer sInternalTimer;	// frame timer for calculating deltas -	static std::map<F32, F32> 	sInterpolants; +	//static std::map<F32, F32> 	sInterpolants; +	static F32					sInterpolants[kNumCachedInterpolants]; +	static F32					sInterpolatedValues[kNumCachedInterpolants];  	static F32					sTimeDelta;  };  #endif  // LL_LLCRITICALDAMP_H + diff --git a/indra/llcommon/llinstancetracker.cpp b/indra/llcommon/llinstancetracker.cpp index 0804be358f..65ef4322f6 100644 --- a/indra/llcommon/llinstancetracker.cpp +++ b/indra/llcommon/llinstancetracker.cpp @@ -42,4 +42,5 @@ void * & LLInstanceTrackerBase::getInstances(InstanceTrackType t)  	// key DOES exist, insert() simply returns (iterator, false). One lookup  	// handles both cases.  	return sInstanceTrackerData[t]; -}
\ No newline at end of file +} + diff --git a/indra/llcommon/llmemory.h b/indra/llcommon/llmemory.h index 46cabfadcd..d0e4bc9e25 100644 --- a/indra/llcommon/llmemory.h +++ b/indra/llcommon/llmemory.h @@ -36,6 +36,44 @@ class LLMutex ;  #define LL_CHECK_MEMORY  #endif +LL_COMMON_API void ll_assert_aligned_func(uintptr_t ptr,U32 alignment); + +#ifdef SHOW_ASSERT +#define ll_assert_aligned(ptr,alignment) ll_assert_aligned_func(reinterpret_cast<uintptr_t>(ptr),((U32)alignment)) +#else +#define ll_assert_aligned(ptr,alignment) +#endif + +#include <xmmintrin.h> + +template <typename T> T* LL_NEXT_ALIGNED_ADDRESS(T* address)  +{  +	return reinterpret_cast<T*>( +		(reinterpret_cast<uintptr_t>(address) + 0xF) & ~0xF); +} + +template <typename T> T* LL_NEXT_ALIGNED_ADDRESS_64(T* address)  +{  +	return reinterpret_cast<T*>( +		(reinterpret_cast<uintptr_t>(address) + 0x3F) & ~0x3F); +} + +#if LL_LINUX || LL_DARWIN + +#define			LL_ALIGN_PREFIX(x) +#define			LL_ALIGN_POSTFIX(x)		__attribute__((aligned(x))) + +#elif LL_WINDOWS + +#define			LL_ALIGN_PREFIX(x)		__declspec(align(x)) +#define			LL_ALIGN_POSTFIX(x) + +#else +#error "LL_ALIGN_PREFIX and LL_ALIGN_POSTFIX undefined" +#endif + +#define LL_ALIGN_16(var) LL_ALIGN_PREFIX(16) var LL_ALIGN_POSTFIX(16) +  inline void* ll_aligned_malloc( size_t size, int align )  {  #if defined(LL_WINDOWS) @@ -144,6 +182,78 @@ inline void ll_aligned_free_32(void *p)  #endif  } + +// Copy words 16-byte blocks from src to dst. Source and destination MUST NOT OVERLAP.  +// Source and dest must be 16-byte aligned and size must be multiple of 16. +// +inline void ll_memcpy_nonaliased_aligned_16(char* __restrict dst, const char* __restrict src, size_t bytes) +{ +	llassert(src != NULL); +	llassert(dst != NULL); +	llassert(bytes >= 16); +	llassert((bytes % sizeof(F32))== 0);  +	llassert((src < dst) ? ((src + bytes) < dst) : ((dst + bytes) < src)); +	llassert(bytes%16==0); +	ll_assert_aligned(src,16); +	ll_assert_aligned(dst,16); + +	char* end = dst + bytes; + +	if (bytes > 64) +	{ + +		// Find start of 64b aligned area within block +		// +		void* begin_64 = LL_NEXT_ALIGNED_ADDRESS_64(dst); +		 +		//at least 64 bytes before the end of the destination, switch to 16 byte copies +		void* end_64 = end-64; +	 +		// Prefetch the head of the 64b area now +		// +		_mm_prefetch((char*)begin_64, _MM_HINT_NTA); +		_mm_prefetch((char*)begin_64 + 64, _MM_HINT_NTA); +		_mm_prefetch((char*)begin_64 + 128, _MM_HINT_NTA); +		_mm_prefetch((char*)begin_64 + 192, _MM_HINT_NTA); +	 +		// Copy 16b chunks until we're 64b aligned +		// +		while (dst < begin_64) +		{ + +			_mm_store_ps((F32*)dst, _mm_load_ps((F32*)src)); +			dst += 16; +			src += 16; +		} +	 +		// Copy 64b chunks up to your tail +		// +		// might be good to shmoo the 512b prefetch offset +		// (characterize performance for various values) +		// +		while (dst < end_64) +		{ +			_mm_prefetch((char*)src + 512, _MM_HINT_NTA); +			_mm_prefetch((char*)dst + 512, _MM_HINT_NTA); +			_mm_store_ps((F32*)dst, _mm_load_ps((F32*)src)); +			_mm_store_ps((F32*)(dst + 16), _mm_load_ps((F32*)(src + 16))); +			_mm_store_ps((F32*)(dst + 32), _mm_load_ps((F32*)(src + 32))); +			_mm_store_ps((F32*)(dst + 48), _mm_load_ps((F32*)(src + 48))); +			dst += 64; +			src += 64; +		} +	} + +	// Copy remainder 16b tail chunks (or ALL 16b chunks for sub-64b copies) +	// +	while (dst < end) +	{ +		_mm_store_ps((F32*)dst, _mm_load_ps((F32*)src)); +		dst += 16; +		src += 16; +	} +} +  #ifndef __DEBUG_PRIVATE_MEM__  #define __DEBUG_PRIVATE_MEM__  0  #endif @@ -552,13 +662,7 @@ void  LLPrivateMemoryPoolTester::operator delete[](void* addr)  // LLSingleton moved to llsingleton.h -LL_COMMON_API void ll_assert_aligned_func(uintptr_t ptr,U32 alignment); -#ifdef SHOW_ASSERT -#define ll_assert_aligned(ptr,alignment) ll_assert_aligned_func(reinterpret_cast<uintptr_t>(ptr),((U32)alignment)) -#else -#define ll_assert_aligned(ptr,alignment) -#endif  #endif diff --git a/indra/llcommon/llstaticstringtable.h b/indra/llcommon/llstaticstringtable.h index 05b0848e30..d7e0e8a08d 100644 --- a/indra/llcommon/llstaticstringtable.h +++ b/indra/llcommon/llstaticstringtable.h @@ -1,81 +1,82 @@ -/** 
 - * @file llstringtable.h
 - * @brief The LLStringTable class provides a _fast_ method for finding
 - * unique copies of strings.
 - *
 - * $LicenseInfo:firstyear=2001&license=viewerlgpl$
 - * Second Life Viewer Source Code
 - * Copyright (C) 2010, Linden Research, Inc.
 - * 
 - * This library is free software; you can redistribute it and/or
 - * modify it under the terms of the GNU Lesser General Public
 - * License as published by the Free Software Foundation;
 - * version 2.1 of the License only.
 - * 
 - * This library is distributed in the hope that it will be useful,
 - * but WITHOUT ANY WARRANTY; without even the implied warranty of
 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 - * Lesser General Public License for more details.
 - * 
 - * You should have received a copy of the GNU Lesser General Public
 - * License along with this library; if not, write to the Free Software
 - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 - * 
 - * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
 - * $/LicenseInfo$
 - */
 -
 -#ifndef LL_STATIC_STRING_TABLE_H
 -#define LL_STATIC_STRING_TABLE_H
 -
 -#include "lldefs.h"
 -#include <boost/unordered_map.hpp>
 -#include "llstl.h"
 -
 -class LLStaticHashedString
 -{
 -public:
 -
 -	LLStaticHashedString(const std::string& s)
 -	{
 -		string_hash = makehash(s);
 -		string		= s;
 -	}
 -
 -	const std::string&	String() const { return string;		}
 -	size_t				Hash()	 const { return string_hash;  }
 -
 -	bool operator==(const LLStaticHashedString& b) const { return Hash() == b.Hash(); }
 -
 -protected:
 -
 -	size_t makehash(const std::string& s)
 -	{
 -		size_t len = s.size();
 -		const char* c = s.c_str();
 -		size_t hashval = 0;
 -		for (size_t i=0; i<len; i++)
 -		{
 -			hashval = ((hashval<<5) + hashval) + *c++;
 -		}
 -		return hashval;
 -	}
 -
 -	std::string string;
 -	size_t		string_hash;
 -};
 -
 -struct LLStaticStringHasher
 -{
 -	enum { bucket_size = 8 };
 -	size_t operator()(const LLStaticHashedString& key_value) const { return key_value.Hash(); }
 -	bool operator()(const LLStaticHashedString& left, const LLStaticHashedString& right) const { return left.Hash() < right.Hash(); }
 -};
 -
 -template< typename MappedObject >
 -class LL_COMMON_API LLStaticStringTable
 -	: public boost::unordered_map< LLStaticHashedString, MappedObject, LLStaticStringHasher >
 -{
 -};
 -
 -#endif
\ No newline at end of file +/**  + * @file llstringtable.h + * @brief The LLStringTable class provides a _fast_ method for finding + * unique copies of strings. + * + * $LicenseInfo:firstyear=2001&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2010, Linden Research, Inc. + *  + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + *  + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU + * Lesser General Public License for more details. + *  + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA + *  + * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA + * $/LicenseInfo$ + */ + +#ifndef LL_STATIC_STRING_TABLE_H +#define LL_STATIC_STRING_TABLE_H + +#include "lldefs.h" +#include <boost/unordered_map.hpp> +#include "llstl.h" + +class LLStaticHashedString +{ +public: + +	LLStaticHashedString(const std::string& s) +	{ +		string_hash = makehash(s); +		string		= s; +	} + +	const std::string&	String() const { return string;		} +	size_t				Hash()	 const { return string_hash;  } + +	bool operator==(const LLStaticHashedString& b) const { return Hash() == b.Hash(); } + +protected: + +	size_t makehash(const std::string& s) +	{ +		size_t len = s.size(); +		const char* c = s.c_str(); +		size_t hashval = 0; +		for (size_t i=0; i<len; i++) +		{ +			hashval = ((hashval<<5) + hashval) + *c++; +		} +		return hashval; +	} + +	std::string string; +	size_t		string_hash; +}; + +struct LLStaticStringHasher +{ +	enum { bucket_size = 8 }; +	size_t operator()(const LLStaticHashedString& key_value) const { return key_value.Hash(); } +	bool   operator()(const LLStaticHashedString& left, const LLStaticHashedString& right) const { return left.Hash() < right.Hash(); } +}; + +template< typename MappedObject > +class LL_COMMON_API LLStaticStringTable +	: public boost::unordered_map< LLStaticHashedString, MappedObject, LLStaticStringHasher > +{ +}; + +#endif + diff --git a/indra/llmath/llsimdmath.h b/indra/llmath/llsimdmath.h index 01458521ec..cebd2ace7d 100644 --- a/indra/llmath/llsimdmath.h +++ b/indra/llmath/llsimdmath.h @@ -39,34 +39,6 @@  #include <stdint.h>  #endif -template <typename T> T* LL_NEXT_ALIGNED_ADDRESS(T* address)  -{  -	return reinterpret_cast<T*>( -		(reinterpret_cast<uintptr_t>(address) + 0xF) & ~0xF); -} - -template <typename T> T* LL_NEXT_ALIGNED_ADDRESS_64(T* address)  -{  -	return reinterpret_cast<T*>( -		(reinterpret_cast<uintptr_t>(address) + 0x3F) & ~0x3F); -} - -#if LL_LINUX || LL_DARWIN - -#define			LL_ALIGN_PREFIX(x) -#define			LL_ALIGN_POSTFIX(x)		__attribute__((aligned(x))) - -#elif LL_WINDOWS - -#define			LL_ALIGN_PREFIX(x)		__declspec(align(x)) -#define			LL_ALIGN_POSTFIX(x) - -#else -#error "LL_ALIGN_PREFIX and LL_ALIGN_POSTFIX undefined" -#endif - -#define LL_ALIGN_16(var) LL_ALIGN_PREFIX(16) var LL_ALIGN_POSTFIX(16) -  #include <xmmintrin.h>  #include <emmintrin.h> diff --git a/indra/llmath/llvector4a.cpp b/indra/llmath/llvector4a.cpp index 6edeb0fefe..570fa41a43 100644 --- a/indra/llmath/llvector4a.cpp +++ b/indra/llmath/llvector4a.cpp @@ -41,55 +41,7 @@ extern const LLVector4a LL_V4A_EPSILON = reinterpret_cast<const LLVector4a&> ( F  /*static */void LLVector4a::memcpyNonAliased16(F32* __restrict dst, const F32* __restrict src, size_t bytes)  { -	assert(src != NULL); -	assert(dst != NULL); -	assert(bytes > 0); -	assert((bytes % sizeof(F32))== 0);  -	ll_assert_aligned(src,16); -	ll_assert_aligned(dst,16); -	assert(bytes%16==0); - -	F32* end = dst + (bytes / sizeof(F32) ); - -	if (bytes > 64) -	{ -		F32* begin_64 = LL_NEXT_ALIGNED_ADDRESS_64(dst); -		 -		//at least 64 (16*4) bytes before the end of the destination, switch to 16 byte copies -		F32* end_64 = end-16; -		 -		_mm_prefetch((char*)begin_64, _MM_HINT_NTA); -		_mm_prefetch((char*)begin_64 + 64, _MM_HINT_NTA); -		_mm_prefetch((char*)begin_64 + 128, _MM_HINT_NTA); -		_mm_prefetch((char*)begin_64 + 192, _MM_HINT_NTA); -		 -		while (dst < begin_64) -		{ -			copy4a(dst, src); -			dst += 4; -			src += 4; -		} -		 -		while (dst < end_64) -		{ -			_mm_prefetch((char*)src + 512, _MM_HINT_NTA); -			_mm_prefetch((char*)dst + 512, _MM_HINT_NTA); -			copy4a(dst, src); -			copy4a(dst+4, src+4); -			copy4a(dst+8, src+8); -			copy4a(dst+12, src+12); -			 -			dst += 16; -			src += 16; -		} -	} - -	while (dst < end) -	{ -		copy4a(dst, src); -		dst += 4; -		src += 4; -	} +        ll_memcpy_nonaliased_aligned_16((char*)dst, (char*)src, bytes);  }  void LLVector4a::setRotated( const LLRotation& rot, const LLVector4a& vec ) diff --git a/indra/llmath/llvector4a.h b/indra/llmath/llvector4a.h index 0526793d3a..1a478bc8de 100644 --- a/indra/llmath/llvector4a.h +++ b/indra/llmath/llvector4a.h @@ -93,7 +93,11 @@ public:  	LLVector4a()  	{ //DO NOT INITIALIZE -- The overhead is completely unnecessary +// This assert is causing spurious referenced before set warnings on GCC 4.3.4 +// +#if !LL_LINUX  		ll_assert_aligned(this,16); +#endif  	}  	LLVector4a(F32 x, F32 y, F32 z, F32 w = 0.f) diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index 9fc72fd801..edd16b5688 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -96,93 +96,6 @@ extern BOOL gDebugGL;  bool less_than_max_mag(const LLVector4a& vec); -template <class T, U32 alignment> -LLAlignedArray<T, alignment>::LLAlignedArray() -{ -	mArray = NULL; -	mElementCount = 0; -	mCapacity = 0; -} - -template <class T, U32 alignment> -LLAlignedArray<T, alignment>::~LLAlignedArray() -{ -	ll_aligned_free(mArray); -	mArray = NULL; -	mElementCount = 0; -	mCapacity = 0; -} - -template <class T, U32 alignment> -void LLAlignedArray<T, alignment>::push_back(const T& elem) -{ -	T* old_buf = NULL; -	if (mCapacity <= mElementCount) -	{ -		mCapacity++; -		mCapacity *= 2; -		T* new_buf = (T*) ll_aligned_malloc(mCapacity*sizeof(T), alignment); -		if (mArray) -		{ -			LLVector4a::memcpyNonAliased16((F32*) new_buf, (F32*) mArray, sizeof(T)*mElementCount); -		} -		old_buf = mArray; -		mArray = new_buf; -	} - -	mArray[mElementCount++] = elem; - -	//delete old array here to prevent error on a.push_back(a[0]) -	ll_aligned_free(old_buf); -} - -template <class T, U32 alignment> -void LLAlignedArray<T, alignment>::resize(U32 size) -{ -	if (mCapacity < size) -	{ -		mCapacity = size+mCapacity*2; -		T* new_buf = mCapacity > 0 ? (T*) ll_aligned_malloc(mCapacity*sizeof(T), alignment) : NULL; -		if (mArray) -		{ -			LLVector4a::memcpyNonAliased16((F32*) new_buf, (F32*) mArray, sizeof(T)*mElementCount); -			ll_aligned_free(mArray); -		} - -		/*for (U32 i = mElementCount; i < mCapacity; ++i) -		{ -			new(new_buf+i) T(); -		}*/ -		mArray = new_buf; -	} - -	mElementCount = size; -} - - -template <class T, U32 alignment> -T& LLAlignedArray<T, alignment>::operator[](int idx) -{ -	llassert(idx < mElementCount); -	return mArray[idx]; -} - -template <class T, U32 alignment> -const T& LLAlignedArray<T, alignment>::operator[](int idx) const -{ -	llassert(idx < mElementCount); -	return mArray[idx]; -} - -template <class T, U32 alignment> -T* LLAlignedArray<T, alignment>::append(S32 N) -{ -	U32 sz = size(); -	resize(sz+N); -	return &((*this)[sz]); -} - -  BOOL check_same_clock_dir( const LLVector3& pt1, const LLVector3& pt2, const LLVector3& pt3, const LLVector3& norm)  {      	LLVector3 test = (pt2-pt1)%(pt3-pt2); @@ -4816,10 +4729,13 @@ void LLVolumeFace::optimize(F32 angle_cutoff)  		}  	} -	llassert(new_face.mNumIndices == mNumIndices); -	llassert(new_face.mNumVertices <= mNumVertices); - -	swapData(new_face); +	// disallow data amplification +	// +	if (new_face.mNumVertices <= mNumVertices) +	{ +	    llassert(new_face.mNumIndices == mNumIndices); +	    swapData(new_face); +    }  }  class LLVCacheTriangleData; @@ -5400,12 +5316,7 @@ BOOL LLVolumeFace::createUnCutCubeCap(LLVolume* volume, BOOL partial_build)  	S32 max_t = volume->getPath().mPath.size();  	// S32 i; -	S32 num_vertices = 0, num_indices = 0;  	S32	grid_size = (profile.size()-1)/4; -	S32	quad_count = (grid_size * grid_size); - -	num_vertices = (grid_size+1)*(grid_size+1); -	num_indices = quad_count * 4;  	LLVector4a& min = mExtents[0];  	LLVector4a& max = mExtents[1]; @@ -6822,3 +6733,4 @@ void calc_binormal_from_triangle(LLVector4a& binormal,  		binormal.set( 0, 1 , 0 );  	}  } + diff --git a/indra/llmath/llvolume.h b/indra/llmath/llvolume.h index 5e43af92ec..6b599a4126 100644 --- a/indra/llmath/llvolume.h +++ b/indra/llmath/llvolume.h @@ -57,6 +57,7 @@ class LLVolumeTriangle;  #include "llrefcount.h"  #include "llpointer.h"  #include "llfile.h" +#include "llalignedarray.h"  //============================================================================ @@ -195,26 +196,6 @@ const U8 LL_SCULPT_FLAG_MIRROR    = 128;  const S32 LL_SCULPT_MESH_MAX_FACES = 8; -template <class T, U32 alignment> -class LLAlignedArray -{ -public: -	T* mArray; -	U32 mElementCount; -	U32 mCapacity; - -	LLAlignedArray(); -	~LLAlignedArray(); - -	void push_back(const T& elem); -	U32 size() const { return mElementCount; } -	void resize(U32 size); -	T* append(S32 N); -	T& operator[](int idx); -	const T& operator[](int idx) const; -}; - -  class LLProfileParams  {  public: diff --git a/indra/llmessage/lliosocket.cpp b/indra/llmessage/lliosocket.cpp index 0287026659..7713e553ef 100644 --- a/indra/llmessage/lliosocket.cpp +++ b/indra/llmessage/lliosocket.cpp @@ -592,6 +592,7 @@ LLIOPipe::EStatus LLIOServerSocket::process_impl(  	PUMP_DEBUG;  	apr_pool_t* new_pool = NULL;  	apr_status_t status = apr_pool_create(&new_pool, mPool); +	(void)status;  	apr_socket_t* socket = NULL;  	status = apr_socket_accept(  		&socket, diff --git a/indra/llprimitive/llmodel.cpp b/indra/llprimitive/llmodel.cpp index 5ed05e2201..ef6eb75a6b 100644 --- a/indra/llprimitive/llmodel.cpp +++ b/indra/llprimitive/llmodel.cpp @@ -186,27 +186,73 @@ LLModel::EModelStatus load_face_from_dom_triangles(std::vector<LLVolumeFace>& fa  	LLVolumeFace::VertexMapData::PointMap point_map; -	for (U32 i = 0; i < idx.getCount(); i += idx_stride) +	U32 index_count  = idx.getCount(); +	U32 vertex_count = pos_source  ? v.getCount()  : 0; +	U32 tc_count     = tc_source   ? tc.getCount() : 0; +	U32 norm_count   = norm_source ? n.getCount()  : 0; + +	for (U32 i = 0; i < index_count; i += idx_stride)  	{  		LLVolumeFace::VertexData cv;  		if (pos_source)  		{ +			// guard against model data specifiying out of range indices or verts +			// +			if (((i + pos_offset) > index_count) +			 || ((idx[i+pos_offset]*3+2) > vertex_count)) +			{ +				return LLModel::BAD_ELEMENT; +			} +  			cv.setPosition(LLVector4a(v[idx[i+pos_offset]*3+0],  								v[idx[i+pos_offset]*3+1],  								v[idx[i+pos_offset]*3+2])); + +			if (!cv.getPosition().isFinite3()) +			{ +				return LLModel::BAD_ELEMENT; +			}  		}  		if (tc_source)  		{ +			// guard against model data specifiying out of range indices or tcs +			// +			if (((i + tc_offset) > index_count) +			 || ((idx[i+pos_offset]*2+1) > tc_count)) +			{ +				return LLModel::BAD_ELEMENT; +			} +  			cv.mTexCoord.setVec(tc[idx[i+tc_offset]*2+0],  								tc[idx[i+tc_offset]*2+1]); + +			if (!cv.mTexCoord.isFinite()) +			{ +				llwarns << "Found NaN while loading tex coords from DAE-Model, invalid model." << llendl; +				return LLModel::BAD_ELEMENT; +			}  		}  		if (norm_source)  		{ +			// guard against model data specifiying out of range indices or norms +			// +			if (((i + norm_offset) > index_count) +				|| ((idx[i+norm_offset]*3+2) > norm_count)) +			{ +				return LLModel::BAD_ELEMENT; +			} +  			cv.setNormal(LLVector4a(n[idx[i+norm_offset]*3+0],  								n[idx[i+norm_offset]*3+1],  								n[idx[i+norm_offset]*3+2])); + +			if (!cv.getNormal().isFinite3()) +			{ +				llwarns << "Found NaN while loading normals from DAE-Model, invalid model." << llendl; +				return LLModel::BAD_ELEMENT; +			}  		}  		BOOL found = FALSE; @@ -261,13 +307,13 @@ LLModel::EModelStatus load_face_from_dom_triangles(std::vector<LLVolumeFace>& fa  			LLVolumeFace& new_face = *face_list.rbegin();  			if (!norm_source)  			{ -				ll_aligned_free_16(new_face.mNormals); +				//ll_aligned_free_16(new_face.mNormals);  				new_face.mNormals = NULL;  			}  			if (!tc_source)  			{ -				ll_aligned_free_16(new_face.mTexCoords); +				//ll_aligned_free_16(new_face.mTexCoords);  				new_face.mTexCoords = NULL;  			} @@ -292,13 +338,13 @@ LLModel::EModelStatus load_face_from_dom_triangles(std::vector<LLVolumeFace>& fa  		LLVolumeFace& new_face = *face_list.rbegin();  		if (!norm_source)  		{ -			ll_aligned_free_16(new_face.mNormals); +			//ll_aligned_free_16(new_face.mNormals);  			new_face.mNormals = NULL;  		}  		if (!tc_source)  		{ -			ll_aligned_free_16(new_face.mTexCoords); +			//ll_aligned_free_16(new_face.mTexCoords);  			new_face.mTexCoords = NULL;  		}  	} @@ -364,6 +410,11 @@ LLModel::EModelStatus load_face_from_dom_polylist(std::vector<LLVolumeFace>& fac  	LLVolumeFace::VertexMapData::PointMap point_map; +	U32 index_count  = idx.getCount(); +	U32 vertex_count = pos_source  ? v.getCount()  : 0; +	U32 tc_count     = tc_source   ? tc.getCount() : 0; +	U32 norm_count   = norm_source ? n.getCount()  : 0; +  	U32 cur_idx = 0;  	for (U32 i = 0; i < vcount.getCount(); ++i)  	{ //for each polygon @@ -376,22 +427,65 @@ LLModel::EModelStatus load_face_from_dom_polylist(std::vector<LLVolumeFace>& fac  			if (pos_source)  			{ +				// guard against model data specifiying out of range indices or verts +				// +				if (((i + pos_offset) > index_count) +				 || ((idx[i+pos_offset]*3+2) > vertex_count)) +				{ +					return LLModel::BAD_ELEMENT; +				} +  				cv.getPosition().set(v[idx[cur_idx+pos_offset]*3+0],  									v[idx[cur_idx+pos_offset]*3+1],  									v[idx[cur_idx+pos_offset]*3+2]); + +				if (!cv.getPosition().isFinite3()) +				{ +					llwarns << "Found NaN while loading positions from DAE-Model, invalid model." << llendl; +					return LLModel::BAD_ELEMENT; +				} +  			}  			if (tc_source)  			{ +				// guard against model data specifiying out of range indices or tcs +				// +				if (((i + pos_offset) > index_count) +				 || ((idx[cur_idx+tc_offset]*2+1) > tc_count)) +				{ +					return LLModel::BAD_ELEMENT; +				} +  				cv.mTexCoord.setVec(tc[idx[cur_idx+tc_offset]*2+0],  									tc[idx[cur_idx+tc_offset]*2+1]); + +				if (!cv.mTexCoord.isFinite()) +				{ +					llwarns << "Found NaN while loading tex coords from DAE-Model, invalid model." << llendl; +					return LLModel::BAD_ELEMENT; +				}  			}  			if (norm_source)  			{ +				// guard against model data specifiying out of range indices or norms +				// +				if (((i + pos_offset) > index_count) +				 || ((idx[cur_idx+norm_offset]*3+2) > norm_count)) +				{ +					return LLModel::BAD_ELEMENT; +				} +  				cv.getNormal().set(n[idx[cur_idx+norm_offset]*3+0],  									n[idx[cur_idx+norm_offset]*3+1],  									n[idx[cur_idx+norm_offset]*3+2]); + +				if (!cv.getNormal().isFinite3()) +				{ +					llwarns << "Found NaN while loading normals from DAE-Model, invalid model." << llendl; +					return LLModel::BAD_ELEMENT; +				}  			}  			cur_idx += idx_stride; @@ -480,13 +574,13 @@ LLModel::EModelStatus load_face_from_dom_polylist(std::vector<LLVolumeFace>& fac  				LLVolumeFace& new_face = *face_list.rbegin();  				if (!norm_source)  				{ -					ll_aligned_free_16(new_face.mNormals); +					//ll_aligned_free_16(new_face.mNormals);  					new_face.mNormals = NULL;  				}  				if (!tc_source)  				{ -					ll_aligned_free_16(new_face.mTexCoords); +					//ll_aligned_free_16(new_face.mTexCoords);  					new_face.mTexCoords = NULL;  				} @@ -514,13 +608,13 @@ LLModel::EModelStatus load_face_from_dom_polylist(std::vector<LLVolumeFace>& fac  		LLVolumeFace& new_face = *face_list.rbegin();  		if (!norm_source)  		{ -			ll_aligned_free_16(new_face.mNormals); +			//ll_aligned_free_16(new_face.mNormals);  			new_face.mNormals = NULL;  		}  		if (!tc_source)  		{ -			ll_aligned_free_16(new_face.mTexCoords); +			//ll_aligned_free_16(new_face.mTexCoords);  			new_face.mTexCoords = NULL;  		}  	} @@ -632,6 +726,12 @@ LLModel::EModelStatus load_face_from_dom_polygons(std::vector<LLVolumeFace>& fac  				vert.getPosition().set(v->get(v_idx),  								v->get(v_idx+1),  								v->get(v_idx+2)); + +				if (!vert.getPosition().isFinite3()) +				{ +					llwarns << "Found NaN while loading position data from DAE-Model, invalid model." << llendl; +					return LLModel::BAD_ELEMENT; +				}  			}  			//bounds check n and t lookups because some FBX to DAE converters @@ -644,6 +744,12 @@ LLModel::EModelStatus load_face_from_dom_polygons(std::vector<LLVolumeFace>& fac  				vert.getNormal().set(n->get(n_idx),  								n->get(n_idx+1),  								n->get(n_idx+2)); + +				if (!vert.getNormal().isFinite3()) +				{ +					llwarns << "Found NaN while loading normals from DAE-Model, invalid model." << llendl; +					return LLModel::BAD_ELEMENT; +				}  			}  			else  			{ @@ -657,6 +763,12 @@ LLModel::EModelStatus load_face_from_dom_polygons(std::vector<LLVolumeFace>& fac  				t_idx = llclamp(t_idx, (U32) 0, (U32) t->getCount());  				vert.mTexCoord.setVec(t->get(t_idx),  								t->get(t_idx+1));								 + +				if (!vert.mTexCoord.isFinite()) +				{ +					llwarns << "Found NaN while loading tex coords from DAE-Model, invalid model." << llendl; +					return LLModel::BAD_ELEMENT; +				}  			}  			else  			{ @@ -730,13 +842,13 @@ LLModel::EModelStatus load_face_from_dom_polygons(std::vector<LLVolumeFace>& fac  		LLVolumeFace& new_face = *face_list.rbegin();  		if (!n)  		{ -			ll_aligned_free_16(new_face.mNormals); +			//ll_aligned_free_16(new_face.mNormals);  			new_face.mNormals = NULL;  		}  		if (!t)  		{ -			ll_aligned_free_16(new_face.mTexCoords); +			//ll_aligned_free_16(new_face.mTexCoords);  			new_face.mTexCoords = NULL;  		}  	} @@ -1036,7 +1148,7 @@ void LLModel::setVolumeFaceData(  	}  	else  	{ -		ll_aligned_free_16(face.mNormals); +		//ll_aligned_free_16(face.mNormals);  		face.mNormals = NULL;  	} @@ -1047,7 +1159,7 @@ void LLModel::setVolumeFaceData(  	}  	else  	{ -		ll_aligned_free_16(face.mTexCoords); +		//ll_aligned_free_16(face.mTexCoords);  		face.mTexCoords = NULL;  	} @@ -1246,7 +1358,7 @@ void LLModel::generateNormals(F32 angle_cutoff)  		}  		else  		{ -			ll_aligned_free_16(new_face.mTexCoords); +			//ll_aligned_free_16(new_face.mTexCoords);  			new_face.mTexCoords = NULL;  		} diff --git a/indra/llrender/llvertexbuffer.cpp b/indra/llrender/llvertexbuffer.cpp index 4460461e12..f8ab085aac 100644 --- a/indra/llrender/llvertexbuffer.cpp +++ b/indra/llrender/llvertexbuffer.cpp @@ -310,7 +310,7 @@ void LLVBOPool::cleanup()  			if (r.mClientData)  			{ -				ll_aligned_free_16((void*) r.mClientData); +				ll_aligned_free((void*) r.mClientData);  			}  			l.pop_front(); diff --git a/indra/llui/llbutton.cpp b/indra/llui/llbutton.cpp index 705fe16559..3dfcb3ffa1 100644 --- a/indra/llui/llbutton.cpp +++ b/indra/llui/llbutton.cpp @@ -758,11 +758,11 @@ void LLButton::draw()  		mCurGlowStrength = lerp(mCurGlowStrength,  					mFlashing ? (flash? 1.0 : 0.0)  					: mHoverGlowStrength, -					LLCriticalDamp::getInterpolant(0.05f)); +					LLCriticalDamp::getInterpolant(InterpDeltaTeeny));  	}  	else  	{ -		mCurGlowStrength = lerp(mCurGlowStrength, 0.f, LLCriticalDamp::getInterpolant(0.05f)); +		mCurGlowStrength = lerp(mCurGlowStrength, 0.f, LLCriticalDamp::getInterpolant(InterpDeltaTeeny));  	}  	// Draw button image, if available. @@ -1247,3 +1247,4 @@ BOOL LLButton::handleDoubleClick(S32 x, S32 y, MASK mask)  	// just treat a double click as a second click  	return handleMouseDown(x, y, mask);  } + diff --git a/indra/llui/llconsole.cpp b/indra/llui/llconsole.cpp index 161496b1f5..fdfaf284de 100644 --- a/indra/llui/llconsole.cpp +++ b/indra/llui/llconsole.cpp @@ -243,8 +243,6 @@ void LLConsole::draw()  void LLConsole::Paragraph::makeParagraphColorSegments (const LLColor4 &color)   {  	LLSD paragraph_color_segments; -	LLColor4 lcolor=color; -	  	paragraph_color_segments[0]["text"] =wstring_to_utf8str(mParagraphText);  	LLSD color_sd = color.getValue();  	paragraph_color_segments[0]["color"]=color_sd; diff --git a/indra/llui/llkeywords.cpp b/indra/llui/llkeywords.cpp index c1cd04186b..537cc82302 100644 --- a/indra/llui/llkeywords.cpp +++ b/indra/llui/llkeywords.cpp @@ -368,7 +368,7 @@ void LLKeywords::findSegments(std::vector<LLTextSegmentPtr>* seg_list, const LLW  	const llwchar* base = wtext.c_str();  	const llwchar* cur = base;  	const llwchar* line = NULL; - +        (void)line;  	while( *cur )  	{  		if( *cur == '\n' || cur == base ) diff --git a/indra/llui/lllayoutstack.cpp b/indra/llui/lllayoutstack.cpp index 4c730286da..32383b1f1d 100644 --- a/indra/llui/lllayoutstack.cpp +++ b/indra/llui/lllayoutstack.cpp @@ -229,7 +229,10 @@ LLLayoutStack::LLLayoutStack(const LLLayoutStack::Params& p)  	mOpenTimeConstant(p.open_time_constant),  	mCloseTimeConstant(p.close_time_constant),  	mResizeBarOverlap(p.resize_bar_overlap) -{} +{ +	LLCriticalDamp::setInterpolantConstant(InterpDeltaCloseTime, mCloseTimeConstant); +	LLCriticalDamp::setInterpolantConstant(InterpDeltaOpenTime,  mOpenTimeConstant); +}  LLLayoutStack::~LLLayoutStack()  { @@ -478,7 +481,7 @@ void LLLayoutStack::createResizeBar(LLLayoutPanel* panelp)  		{  			LLResizeBar::Side side = (mOrientation == HORIZONTAL) ? LLResizeBar::RIGHT : LLResizeBar::BOTTOM;  			LLRect resize_bar_rect = getRect(); - +			(void)resize_bar_rect;  			LLResizeBar::Params resize_params;  			resize_params.name("resize");  			resize_params.resizing_view(lp); @@ -592,7 +595,7 @@ bool LLLayoutStack::animatePanels()  			{  				if (!mAnimatedThisFrame)  				{ -					panelp->mVisibleAmt = lerp(panelp->mVisibleAmt, 1.f, LLCriticalDamp::getInterpolant(mOpenTimeConstant)); +					panelp->mVisibleAmt = lerp(panelp->mVisibleAmt, 1.f, LLCriticalDamp::getInterpolant(InterpDeltaOpenTime));  					if (panelp->mVisibleAmt > 0.99f)  					{  						panelp->mVisibleAmt = 1.f; @@ -617,7 +620,7 @@ bool LLLayoutStack::animatePanels()  			{  				if (!mAnimatedThisFrame)  				{ -					panelp->mVisibleAmt = lerp(panelp->mVisibleAmt, 0.f, LLCriticalDamp::getInterpolant(mCloseTimeConstant)); +					panelp->mVisibleAmt = lerp(panelp->mVisibleAmt, 0.f, LLCriticalDamp::getInterpolant(InterpDeltaCloseTime));  					if (panelp->mVisibleAmt < 0.001f)  					{  						panelp->mVisibleAmt = 0.f; @@ -644,7 +647,7 @@ bool LLLayoutStack::animatePanels()  			{  				if (!mAnimatedThisFrame)  				{ -					panelp->mCollapseAmt = lerp(panelp->mCollapseAmt, collapse_state, LLCriticalDamp::getInterpolant(mCloseTimeConstant)); +					panelp->mCollapseAmt = lerp(panelp->mCollapseAmt, collapse_state, LLCriticalDamp::getInterpolant(InterpDeltaCloseTime));  				}  				if (llabs(panelp->mCollapseAmt - collapse_state) < 0.001f) @@ -855,3 +858,4 @@ void LLLayoutStack::updateResizeBarLimits()  		previous_visible_panelp = visible_panelp;  	}  } + diff --git a/indra/llui/llmenugl.cpp b/indra/llui/llmenugl.cpp index cd6cc6a75e..f142be885d 100644 --- a/indra/llui/llmenugl.cpp +++ b/indra/llui/llmenugl.cpp @@ -3673,7 +3673,7 @@ void LLTearOffMenu::draw()  	if (getRect().getHeight() != mTargetHeight)  	{  		// animate towards target height -		reshape(getRect().getWidth(), llceil(lerp((F32)getRect().getHeight(), mTargetHeight, LLCriticalDamp::getInterpolant(0.05f)))); +		reshape(getRect().getWidth(), llceil(lerp((F32)getRect().getHeight(), mTargetHeight, LLCriticalDamp::getInterpolant(InterpDeltaTeeny))));  	}  	LLFloater::draw();  } diff --git a/indra/llui/llscrollbar.cpp b/indra/llui/llscrollbar.cpp index 5d3bf7a670..d65b4431a8 100644 --- a/indra/llui/llscrollbar.cpp +++ b/indra/llui/llscrollbar.cpp @@ -493,11 +493,11 @@ void LLScrollbar::draw()  	BOOL hovered = getEnabled() && !other_captor && (hasMouseCapture() || mThumbRect.pointInRect(local_mouse_x, local_mouse_y));  	if (hovered)  	{ -		mCurGlowStrength = lerp(mCurGlowStrength, mHoverGlowStrength, LLCriticalDamp::getInterpolant(0.05f)); +		mCurGlowStrength = lerp(mCurGlowStrength, mHoverGlowStrength, LLCriticalDamp::getInterpolant(InterpDeltaTeeny));  	}  	else  	{ -		mCurGlowStrength = lerp(mCurGlowStrength, 0.f, LLCriticalDamp::getInterpolant(0.05f)); +		mCurGlowStrength = lerp(mCurGlowStrength, 0.f, LLCriticalDamp::getInterpolant(InterpDeltaTeeny));  	}  	// Draw background and thumb. @@ -642,3 +642,4 @@ void LLScrollbar::onLineDownBtnPressed( const LLSD& data )  {  	changeLine( mStepSize, TRUE );  } + diff --git a/indra/llui/lltabcontainer.cpp b/indra/llui/lltabcontainer.cpp index 5fc2cc350d..1e64cd0df8 100644 --- a/indra/llui/lltabcontainer.cpp +++ b/indra/llui/lltabcontainer.cpp @@ -406,7 +406,7 @@ void LLTabContainer::draw()  		}  	} -	setScrollPosPixels((S32)lerp((F32)getScrollPosPixels(), (F32)target_pixel_scroll, LLCriticalDamp::getInterpolant(0.08f))); +	setScrollPosPixels((S32)lerp((F32)getScrollPosPixels(), (F32)target_pixel_scroll, LLCriticalDamp::getInterpolant(InterpDeltaTeeny)));  	BOOL has_scroll_arrows = !getTabsHidden() && ((mMaxScrollPos > 0) || (mScrollPosPixels > 0));  	if (!mIsVertical) @@ -2046,3 +2046,4 @@ void LLTabContainer::commitHoveredButton(S32 x, S32 y)  		}  	}  } + diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp index 3815eec447..ec66b6df56 100644 --- a/indra/llui/lltextbase.cpp +++ b/indra/llui/lltextbase.cpp @@ -351,7 +351,6 @@ void LLTextBase::drawSelectionBackground()  		S32 selection_left		= llmin( mSelectionStart, mSelectionEnd );  		S32 selection_right		= llmax( mSelectionStart, mSelectionEnd ); -		LLRect selection_rect = mVisibleTextRect;  		// Skip through the lines we aren't drawing.  		LLRect content_display_rect = getVisibleDocumentRect(); @@ -2241,6 +2240,8 @@ S32 LLTextBase::getDocIndexFromLocalCoord( S32 local_x, S32 local_y, BOOL round,  	// Figure out which line we're nearest to.  	LLRect visible_region = getVisibleDocumentRect();  	LLRect doc_rect = mDocumentView->getRect(); +	(void)visible_region; +	(void)doc_rect;  	S32 doc_y = local_y - doc_rect.mBottom; diff --git a/indra/llui/lltexteditor.cpp b/indra/llui/lltexteditor.cpp index 46fbd1e6a0..e4bd51c8ce 100644 --- a/indra/llui/lltexteditor.cpp +++ b/indra/llui/lltexteditor.cpp @@ -2490,7 +2490,6 @@ void LLTextEditor::updateSegments()  		mKeywords.findSegments(&segment_list, getWText(), mDefaultColor.get(), *this);  		clearSegments(); -		segment_set_t::iterator insert_it = mSegments.begin();  		for (segment_vec_t::iterator list_it = segment_list.begin(); list_it != segment_list.end(); ++list_it)  		{  			insertSegment(*list_it); diff --git a/indra/llui/lltoolbar.cpp b/indra/llui/lltoolbar.cpp index 63b7e452d2..62b6a0cd2f 100644 --- a/indra/llui/lltoolbar.cpp +++ b/indra/llui/lltoolbar.cpp @@ -653,7 +653,6 @@ void LLToolBar::updateLayoutAsNeeded()  	S32 max_row_length = 0;  	S32 max_length; -	S32 max_total_girth;  	S32 cur_start;  	S32 cur_row ;  	S32 row_pad_start; @@ -664,7 +663,6 @@ void LLToolBar::updateLayoutAsNeeded()  	if (orientation == LLLayoutStack::HORIZONTAL)  	{  		max_length = getRect().getWidth() - mPadLeft - mPadRight; -		max_total_girth = getRect().getHeight() - mPadTop - mPadBottom;  		row_pad_start = mPadLeft;  		row_pad_end = mPadRight;  		cur_row = mPadTop; @@ -673,7 +671,6 @@ void LLToolBar::updateLayoutAsNeeded()  	else // VERTICAL  	{  		max_length = getRect().getHeight() - mPadTop - mPadBottom; -		max_total_girth = getRect().getWidth() - mPadLeft - mPadRight;  		row_pad_start = mPadTop;  		row_pad_end = mPadBottom;  		cur_row = mPadLeft; @@ -842,6 +839,7 @@ void LLToolBar::draw()  	{  		LLRect caret_rect = caret->getRect();  		LLRect toolbar_rect = getRect(); +		(void)toolbar_rect;  		if (getOrientation(mSideType) == LLLayoutStack::HORIZONTAL)  		{  			caret->setRect(LLRect(mDragx-caret_rect.getWidth()/2+1, diff --git a/indra/lscript/lscript_execute/lscript_readlso.cpp b/indra/lscript/lscript_execute/lscript_readlso.cpp index 35caa41ae1..3cdb41ac17 100644 --- a/indra/lscript/lscript_execute/lscript_readlso.cpp +++ b/indra/lscript/lscript_execute/lscript_readlso.cpp @@ -145,7 +145,7 @@ void LLScriptLSOParse::printGlobals(LLFILE *fp)  		// get offset to skip past name  		varoffset = global_v_offset;  		offset = bytestream2integer(mRawData, global_v_offset); -		 +		(void)offset; //hush little compiler  		// get typeexport  		type = *(mRawData + global_v_offset++); @@ -262,8 +262,6 @@ void LLScriptLSOParse::printGlobalFunctions(LLFILE *fp)  		fprintf(fp, "[Function #%d] [0x%X] %s\n", function_number, orig_function_offset, name);  		fprintf(fp, "\tReturn Type: %s\n", LSCRIPTTypeNames[type]);  		type = *(mRawData + function_offset++); -		S32 params; -		params = 0;  		S32 pcount = 0;  		while (type)  		{ @@ -350,6 +348,7 @@ void LLScriptLSOParse::printStates(LLFILE *fp)  				S32 dummy;  				opcode_end = worst_case_opcode_end; +				(void)opcode_end;  				for (k = LSTT_STATE_BEGIN; k < LSTT_STATE_END; k++)  				{ @@ -357,6 +356,7 @@ void LLScriptLSOParse::printStates(LLFILE *fp)  					{  						temp_end = bytestream2integer(mRawData, read_ahead);  						dummy = bytestream2integer(mRawData, read_ahead); +						(void)dummy;  						if (  (temp_end < opcode_end)  							&&(temp_end > event_offset))  						{ diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp index 9025c7af8b..a40d9cd318 100644 --- a/indra/newview/llagentcamera.cpp +++ b/indra/newview/llagentcamera.cpp @@ -179,7 +179,7 @@ LLAgentCamera::LLAgentCamera() :  	clearGeneralKeys();  	clearOrbitKeys(); -	clearPanKeys(); +	clearPanKeys();	  }  // Requires gSavedSettings to be initialized. @@ -192,6 +192,9 @@ void LLAgentCamera::init()  	mDrawDistance = gSavedSettings.getF32("RenderFarClip"); +	const F32 SMOOTHING_HALF_LIFE = 0.02f; +	LLCriticalDamp::setInterpolantConstant(InterpDeltaCameraSmoothingHalfLife, gSavedSettings.getF32("CameraPositionSmoothing") * SMOOTHING_HALF_LIFE); +  	LLViewerCamera::getInstance()->setView(DEFAULT_FIELD_OF_VIEW);  	// Leave at 0.1 meters until we have real near clip management  	LLViewerCamera::getInstance()->setNear(0.1f); @@ -337,7 +340,7 @@ void LLAgentCamera::resetView(BOOL reset_camera, BOOL change_camera)  			LLVector3 agent_at_axis = gAgent.getAtAxis();  			agent_at_axis -= projected_vec(agent_at_axis, gAgent.getReferenceUpVector());  			agent_at_axis.normalize(); -			gAgent.resetAxes(lerp(gAgent.getAtAxis(), agent_at_axis, LLCriticalDamp::getInterpolant(0.3f))); +			gAgent.resetAxes(lerp(gAgent.getAtAxis(), agent_at_axis, LLCriticalDamp::getInterpolant(InterpDeltaSmall)));  		}  		setFocusOnAvatar(TRUE, ANIMATE); @@ -1246,7 +1249,7 @@ void LLAgentCamera::updateCamera()  	gAgentCamera.clearPanKeys();  	// lerp camera focus offset -	mCameraFocusOffset = lerp(mCameraFocusOffset, mCameraFocusOffsetTarget, LLCriticalDamp::getInterpolant(CAMERA_FOCUS_HALF_LIFE)); +	mCameraFocusOffset = lerp(mCameraFocusOffset, mCameraFocusOffsetTarget, LLCriticalDamp::getInterpolant(InterpDeltaCameraFocusHalfLife));  	if ( mCameraMode == CAMERA_MODE_FOLLOW )  	{ @@ -1361,10 +1364,8 @@ void LLAgentCamera::updateCamera()  		mCameraSmoothingStop = mCameraSmoothingStop || in_build_mode;  		if (cameraThirdPerson() && !mCameraSmoothingStop) -		{ -			const F32 SMOOTHING_HALF_LIFE = 0.02f; -			 -			F32 smoothing = LLCriticalDamp::getInterpolant(gSavedSettings.getF32("CameraPositionSmoothing") * SMOOTHING_HALF_LIFE, FALSE); +		{			 +			F32 smoothing = LLCriticalDamp::getInterpolant(InterpDeltaCameraSmoothingHalfLife);  			if (!mFocusObject)  // we differentiate on avatar mode   			{ @@ -1394,7 +1395,7 @@ void LLAgentCamera::updateCamera()  	} -	mCameraCurrentFOVZoomFactor = lerp(mCameraCurrentFOVZoomFactor, mCameraFOVZoomFactor, LLCriticalDamp::getInterpolant(FOV_ZOOM_HALF_LIFE)); +	mCameraCurrentFOVZoomFactor = lerp(mCameraCurrentFOVZoomFactor, mCameraFOVZoomFactor, LLCriticalDamp::getInterpolant(InterpDeltaFovZoomHalfLife));  //	llinfos << "Current FOV Zoom: " << mCameraCurrentFOVZoomFactor << " Target FOV Zoom: " << mCameraFOVZoomFactor << " Object penetration: " << mFocusObjectDist << llendl; @@ -1809,7 +1810,7 @@ LLVector3d LLAgentCamera::calcCameraPositionTargetGlobal(BOOL *hit_limit)  			if (mTargetCameraDistance != mCurrentCameraDistance)  			{ -				F32 camera_lerp_amt = LLCriticalDamp::getInterpolant(CAMERA_ZOOM_HALF_LIFE); +				F32 camera_lerp_amt = LLCriticalDamp::getInterpolant(InterpDeltaCameraZoomHalfLife);  				mCurrentCameraDistance = lerp(mCurrentCameraDistance, mTargetCameraDistance, camera_lerp_amt);  			} @@ -1827,7 +1828,7 @@ LLVector3d LLAgentCamera::calcCameraPositionTargetGlobal(BOOL *hit_limit)  			if (isAgentAvatarValid())  			{  				LLVector3d camera_lag_d; -				F32 lag_interp = LLCriticalDamp::getInterpolant(CAMERA_LAG_HALF_LIFE); +				F32 lag_interp = LLCriticalDamp::getInterpolant(InterpDeltaCameraLagHalfLife);  				LLVector3 target_lag;  				LLVector3 vel = gAgent.getVelocity(); @@ -1872,7 +1873,7 @@ LLVector3d LLAgentCamera::calcCameraPositionTargetGlobal(BOOL *hit_limit)  				}  				else  				{ -					mCameraLag = lerp(mCameraLag, LLVector3::zero, LLCriticalDamp::getInterpolant(0.15f)); +					mCameraLag = lerp(mCameraLag, LLVector3::zero, LLCriticalDamp::getInterpolant(InterpDeltaCameraLagHalfLife));  				}  				camera_lag_d.setVec(mCameraLag); diff --git a/indra/newview/lldrawable.cpp b/indra/newview/lldrawable.cpp index d29181a3ce..dc0e256ebb 100644 --- a/indra/newview/lldrawable.cpp +++ b/indra/newview/lldrawable.cpp @@ -492,97 +492,83 @@ F32 LLDrawable::updateXform(BOOL undamped)  	BOOL damped = !undamped;  	// Position -	LLVector3 old_pos(mXform.getPosition()); -	LLVector3 target_pos; -	if (mXform.isRoot()) -	{ -		// get root position in your agent's region -		target_pos = mVObjp->getPositionAgent(); -	} -	else -	{ -		// parent-relative position -		target_pos = mVObjp->getPosition(); -	} -	 +	LLVector3 old_pos	 = mXform.getPosition(); + +	// get agent position or parent-relative position as appropriate +	// +	LLVector3 target_pos = mXform.isRoot() ? mVObjp->getPositionAgent() : mVObjp->getPosition(); +  	// Rotation  	LLQuaternion old_rot(mXform.getRotation());  	LLQuaternion target_rot = mVObjp->getRotation(); +  	//scaling  	LLVector3 target_scale = mVObjp->getScale();  	LLVector3 old_scale = mCurrentScale;  	LLVector3 dest_scale = target_scale; -	 -	// Damping -	F32 dist_squared = 0.f; -	F32 camdist2 = (mDistanceWRTCamera * mDistanceWRTCamera); +	LLVector3 scale_vec = old_scale-target_scale; + +	static const F32 dot_threshold = 1.0f - FLT_EPSILON; + +	F32 dist_squared = dist_vec_squared(old_pos, target_pos); +	bool translated  = dist_squared > 0.0f; +	bool rotated     = !mVObjp->getAngularVelocity().isExactlyZero() || (dot(old_rot, target_rot) < dot_threshold); +	bool scaled		 = (scale_vec * scale_vec) > MIN_INTERPOLATE_DISTANCE_SQUARED; +	 +	// Damping	  	if (damped && isVisible())  	{ -		F32 lerp_amt = llclamp(LLCriticalDamp::getInterpolant(OBJECT_DAMPING_TIME_CONSTANT), 0.f, 1.f); +		F32 lerp_amt = LLCriticalDamp::getInterpolant(InterpDeltaObjectDampingConstant);  		LLVector3 new_pos = lerp(old_pos, target_pos, lerp_amt); -		dist_squared = dist_vec_squared(new_pos, target_pos); +		dist_squared = dist_vec_squared(new_pos, old_pos);  		LLQuaternion new_rot = nlerp(lerp_amt, old_rot, target_rot); -		// FIXME: This can be negative! It is be possible for some rots to 'cancel out' pos or size changes. -		dist_squared += (1.f - dot(new_rot, target_rot)) * 10.f; +		dist_squared += fabs(1.f - dot(new_rot, old_rot)) * 10.f;  		LLVector3 new_scale = lerp(old_scale, target_scale, lerp_amt); -		dist_squared += dist_vec_squared(new_scale, target_scale); +		dist_squared += dist_vec_squared(new_scale, old_scale); -		if ((dist_squared >= MIN_INTERPOLATE_DISTANCE_SQUARED * camdist2) && -			(dist_squared <= MAX_INTERPOLATE_DISTANCE_SQUARED)) +		// If our lerp isn't moving too far, substitue the lerp'd pos for our target for this frame +		// +		if (dist_squared <= MAX_INTERPOLATE_DISTANCE_SQUARED)  		{  			// interpolate  			target_pos = new_pos;  			target_rot = new_rot;  			target_scale = new_scale;  		} -		else if (mVObjp->getAngularVelocity().isExactlyZero()) +		else  		{ -			// snap to final position (only if no target omega is applied) -			dist_squared = 0.0f; -			if (getVOVolume() && !isRoot()) -			{ //child prim snapping to some position, needs a rebuild -				gPipeline.markRebuild(this, LLDrawable::REBUILD_POSITION, TRUE); -			} +			llinfos << "skipping update due to overly large lerp" << llendl;  		}  	} -	else -	{ -		// The following fixes MAINT-1742 but breaks vehicles similar to MAINT-2275 -		// dist_squared = dist_vec_squared(old_pos, target_pos); -		// The following fixes MAINT-2247 but causes MAINT-2275 -		//dist_squared += (1.f - dot(old_rot, target_rot)) * 10.f; -		//dist_squared += dist_vec_squared(old_scale, target_scale); -	} +	if (translated || rotated || scaled) +	{  +		if (scaled) +		{ +			mCurrentScale = target_scale; +		} -	LLVector3 vec = mCurrentScale-target_scale; -	 -	if (vec*vec > MIN_INTERPOLATE_DISTANCE_SQUARED) -	{ //scale change requires immediate rebuild -		mCurrentScale = target_scale; -		gPipeline.markRebuild(this, LLDrawable::REBUILD_POSITION, TRUE); -	} -	else if (!isRoot() &&  -		 (!mVObjp->getAngularVelocity().isExactlyZero() || -			dist_squared > 0.f)) -	{ //child prim moving relative to parent, tag as needing to be rendered atomically and rebuild  		dist_squared = 1.f; //keep this object on the move list -		if (!isState(LLDrawable::ANIMATED_CHILD)) + +		//child prim moving relative to parent, tag as needing to be rendered atomically +		// +		if (!isRoot() && !isState(LLDrawable::ANIMATED_CHILD))  		{			  			setState(LLDrawable::ANIMATED_CHILD); -			gPipeline.markRebuild(this, LLDrawable::REBUILD_ALL, TRUE); -			mVObjp->dirtySpatialGroup();  		} + +		// Mark any components that need to be rebuilt based on what change transpired +		// +		if (!rotated && !scaled) +			gPipeline.markRebuild(this, LLDrawable::REBUILD_POSITION, TRUE); +		else +			gPipeline.markRebuild(this, LLDrawable::REBUILD_ALL, TRUE); + +		mVObjp->dirtySpatialGroup();  	} -	else if (!isRoot() -		&& (   dist_vec_squared(old_pos, target_pos) > 0.f -			|| (1.f - dot(old_rot, target_rot)) > 0.f)) -        { // update child prims moved from LSL -                gPipeline.markRebuild(this, LLDrawable::REBUILD_POSITION, TRUE); -        }  	else if (!getVOVolume() && !isAvatar())  	{  		movePartition(); @@ -781,7 +767,7 @@ void LLDrawable::updateDistance(LLCamera& camera, bool force_update)  		}  		pos -= camera.getOrigin();	 -		mDistanceWRTCamera = llround(pos.magVec(), 0.01f); +		mDistanceWRTCamera = 20.0f;//llround(pos.magVec(), 0.01f);  		mVObjp->updateLOD();  	}  } diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp index 86e5f20812..c3cb914120 100755 --- a/indra/newview/llface.cpp +++ b/indra/newview/llface.cpp @@ -53,6 +53,12 @@  #include "llviewershadermgr.h"  #include "llvoavatar.h" +#if LL_LINUX +// Work-around spurious used before init warning on Vector4a +// +#pragma GCC diagnostic ignored "-Wuninitialized" +#endif +  extern BOOL gGLDebugLoggingEnabled;  #define LL_MAX_INDICES_COUNT 1000000 @@ -1982,6 +1988,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,  			//_mm_prefetch((char*)dst, _MM_HINT_NTA); +  			LLVector4a res0; //,res1,res2,res3;  			LLVector4a texIdx; diff --git a/indra/newview/llfasttimerview.cpp b/indra/newview/llfasttimerview.cpp index e7a3f9b390..643ce63f29 100644 --- a/indra/newview/llfasttimerview.cpp +++ b/indra/newview/llfasttimerview.cpp @@ -940,7 +940,7 @@ void LLFastTimerView::draw()  			}  			//interpolate towards new maximum -			last_max = (U64) lerp((F32)last_max, (F32) cur_max, LLCriticalDamp::getInterpolant(0.1f)); +			last_max = (U64) lerp((F32)last_max, (F32) cur_max, LLCriticalDamp::getInterpolant(InterpDeltaSmaller));  			if (last_max - cur_max <= 1 ||  cur_max - last_max  <= 1)  			{  				last_max = cur_max; @@ -948,7 +948,7 @@ void LLFastTimerView::draw()  			F32 alpha_target = last_max > cur_max ?  								llmin((F32) last_max/ (F32) cur_max - 1.f,1.f) :  								llmin((F32) cur_max/ (F32) last_max - 1.f,1.f); -			alpha_interp = lerp(alpha_interp, alpha_target, LLCriticalDamp::getInterpolant(0.1f)); +			alpha_interp = lerp(alpha_interp, alpha_target, LLCriticalDamp::getInterpolant(InterpDeltaSmaller));  			if (mHoverID != NULL)  			{ diff --git a/indra/newview/llfloatercolorpicker.cpp b/indra/newview/llfloatercolorpicker.cpp index d6ebe44daa..10d31df22c 100644 --- a/indra/newview/llfloatercolorpicker.cpp +++ b/indra/newview/llfloatercolorpicker.cpp @@ -525,11 +525,11 @@ void LLFloaterColorPicker::draw()  	if (gFocusMgr.childHasMouseCapture(getDragHandle()))  	{ -		mContextConeOpacity = lerp(mContextConeOpacity, gSavedSettings.getF32("PickerContextOpacity"), LLCriticalDamp::getInterpolant(CONTEXT_FADE_TIME)); +		mContextConeOpacity = lerp(mContextConeOpacity, gSavedSettings.getF32("PickerContextOpacity"), LLCriticalDamp::getInterpolant(InterpDeltaContextFadeTime));  	}  	else  	{ -		mContextConeOpacity = lerp(mContextConeOpacity, 0.f, LLCriticalDamp::getInterpolant(CONTEXT_FADE_TIME)); +		mContextConeOpacity = lerp(mContextConeOpacity, 0.f, LLCriticalDamp::getInterpolant(InterpDeltaContextFadeTime));  	}  	mPipetteBtn->setToggleState(LLToolMgr::getInstance()->getCurrentTool() == LLToolPipette::getInstance()); @@ -1113,3 +1113,4 @@ void LLFloaterColorPicker::stopUsingPipette()  		LLToolMgr::getInstance()->clearTransientTool();  	}  } + diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp index ea839e6f5a..07c36b9f1b 100755 --- a/indra/newview/llfloatermodelpreview.cpp +++ b/indra/newview/llfloatermodelpreview.cpp @@ -290,6 +290,22 @@ bool ll_is_degenerate(const LLVector4a& a, const LLVector4a& b, const LLVector4a  bool validate_face(const LLVolumeFace& face)  { + +	for (U32 v = 0; v < face.mNumVertices; v++) +	{ +		if(face.mPositions && !face.mPositions[v].isFinite3()) +		{ +			llwarns << "NaN position data in face found!" << llendl; +			return false; +		} + +		if(face.mNormals && !face.mNormals[v].isFinite3()) +		{ +			llwarns << "NaN normal data in face found!" << llendl; +			return false; +		} +	} +  	for (U32 i = 0; i < face.mNumIndices; ++i)  	{  		if (face.mIndices[i] >= face.mNumVertices) @@ -305,8 +321,10 @@ bool validate_face(const LLVolumeFace& face)  		return false;  	} +  	/*const LLVector4a scale(0.5f); +  	for (U32 i = 0; i < face.mNumIndices; i+=3)  	{  		U16 idx1 = face.mIndices[i]; @@ -323,7 +341,6 @@ bool validate_face(const LLVolumeFace& face)  			return false;  		}  	}*/ -  	return true;  } @@ -5934,3 +5951,5 @@ void LLFloaterModelPreview::setPermissonsErrorStatus(U32 status, const std::stri  	LLNotificationsUtil::add("MeshUploadPermError");  } + + diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp index d8d62e5bbb..103eaace88 100644 --- a/indra/newview/llfloatersnapshot.cpp +++ b/indra/newview/llfloatersnapshot.cpp @@ -478,7 +478,7 @@ void LLSnapshotLivePreview::draw()  		{  			if (mFlashAlpha < 1.f)  			{ -				mFlashAlpha = lerp(mFlashAlpha, 1.f, LLCriticalDamp::getInterpolant(0.02f)); +				mFlashAlpha = lerp(mFlashAlpha, 1.f, LLCriticalDamp::getInterpolant(InterpDeltaTeenier));  			}  			else  			{ @@ -487,7 +487,7 @@ void LLSnapshotLivePreview::draw()  		}  		else  		{ -			mFlashAlpha = lerp(mFlashAlpha, 0.f, LLCriticalDamp::getInterpolant(0.15f)); +			mFlashAlpha = lerp(mFlashAlpha, 0.f, LLCriticalDamp::getInterpolant(InterpDeltaSmallish) * 0.5f);  		}  		// Draw shining animation if appropriate. @@ -2500,3 +2500,4 @@ BOOL LLSnapshotFloaterView::handleHover(S32 x, S32 y, MASK mask)  	}  	return TRUE;  } + diff --git a/indra/newview/llfolderviewitem.cpp b/indra/newview/llfolderviewitem.cpp index 3aa16b4413..23241b57c4 100644 --- a/indra/newview/llfolderviewitem.cpp +++ b/indra/newview/llfolderviewitem.cpp @@ -1293,7 +1293,7 @@ S32 LLFolderViewFolder::arrange( S32* width, S32* height, S32 filter_generation)  	// animate current height towards target height  	if (llabs(mCurHeight - mTargetHeight) > 1.f)  	{ -		mCurHeight = lerp(mCurHeight, mTargetHeight, LLCriticalDamp::getInterpolant(mIsOpen ? FOLDER_OPEN_TIME_CONSTANT : FOLDER_CLOSE_TIME_CONSTANT)); +		mCurHeight = lerp(mCurHeight, mTargetHeight, LLCriticalDamp::getInterpolant(mIsOpen ? InterpDeltaFolderOpenTime : InterpDeltaFolderCloseTime));  		requestArrange(); @@ -2538,11 +2538,11 @@ void LLFolderViewFolder::draw()  	}  	else if (mIsOpen)  	{ -		mControlLabelRotation = lerp(mControlLabelRotation, -90.f, LLCriticalDamp::getInterpolant(0.04f)); +		mControlLabelRotation = lerp(mControlLabelRotation, -90.f, LLCriticalDamp::getInterpolant(InterpDeltaTeeny));  	}  	else  	{ -		mControlLabelRotation = lerp(mControlLabelRotation, 0.f, LLCriticalDamp::getInterpolant(0.025f)); +		mControlLabelRotation = lerp(mControlLabelRotation, 0.f, LLCriticalDamp::getInterpolant(InterpDeltaTeenier));  	}  	bool possibly_has_children = false; @@ -2899,3 +2899,4 @@ bool LLInventorySort::operator()(const LLFolderViewItem* const& a, const LLFolde  		}  	}  } + diff --git a/indra/newview/llfollowcam.cpp b/indra/newview/llfollowcam.cpp index b670af1782..a3c1996512 100644 --- a/indra/newview/llfollowcam.cpp +++ b/indra/newview/llfollowcam.cpp @@ -148,14 +148,16 @@ LLFollowCamParams::~LLFollowCamParams() { }  //---------------------------------------------------------  void LLFollowCamParams::setPositionLag( F32 p )   {  -	mPositionLag = llclamp(p, FOLLOW_CAM_MIN_POSITION_LAG, FOLLOW_CAM_MAX_POSITION_LAG);  +	mPositionLag = llclamp(p, FOLLOW_CAM_MIN_POSITION_LAG, FOLLOW_CAM_MAX_POSITION_LAG); +	LLCriticalDamp::setInterpolantConstant(InterpDeltaPositionLag, mPositionLag);  }  //---------------------------------------------------------  void LLFollowCamParams::setFocusLag( F32 f )   {  -	mFocusLag = llclamp(f, FOLLOW_CAM_MIN_FOCUS_LAG, FOLLOW_CAM_MAX_FOCUS_LAG);  +	mFocusLag = llclamp(f, FOLLOW_CAM_MIN_FOCUS_LAG, FOLLOW_CAM_MAX_FOCUS_LAG); +	LLCriticalDamp::setInterpolantConstant(InterpDeltaFocusLag, mFocusLag);  } @@ -184,6 +186,7 @@ void LLFollowCamParams::setPitch( F32 p )  void LLFollowCamParams::setBehindnessLag( F32 b )   {   	mBehindnessLag = llclamp(b, FOLLOW_CAM_MIN_BEHINDNESS_LAG, FOLLOW_CAM_MAX_BEHINDNESS_LAG);  +	LLCriticalDamp::setInterpolantConstant(InterpDeltaBehindnessLag, mBehindnessLag);  }  //--------------------------------------------------------- @@ -328,11 +331,11 @@ void LLFollowCam::update()  				F32 force = focusOffsetDistance - focusThresholdNormalizedByDistance;  			*/ -			F32 focusLagLerp = LLCriticalDamp::getInterpolant( mFocusLag ); +			F32 focusLagLerp = LLCriticalDamp::getInterpolant(InterpDeltaFocusLag);  			focus_pt_agent = lerp( focus_pt_agent, whereFocusWantsToBe, focusLagLerp );  			mSimulatedFocusGlobal = gAgent.getPosGlobalFromAgent(focus_pt_agent);  		} -		mRelativeFocus = lerp(mRelativeFocus, (focus_pt_agent - mSubjectPosition) * ~mSubjectRotation, LLCriticalDamp::getInterpolant(0.05f)); +		mRelativeFocus = lerp(mRelativeFocus, (focus_pt_agent - mSubjectPosition) * ~mSubjectRotation, LLCriticalDamp::getInterpolant(InterpDeltaTeeny));  	}// if focus is not locked --------------------------------------------- @@ -415,7 +418,7 @@ void LLFollowCam::update()  		//-------------------------------------------------------------------------------------------------  		if ( distanceFromPositionToIdealPosition > mPositionThreshold )  		{ -			F32 positionPullLerp = LLCriticalDamp::getInterpolant( mPositionLag ); +			F32 positionPullLerp = LLCriticalDamp::getInterpolant(InterpDeltaPositionLag);  			simulated_pos_agent = lerp( simulated_pos_agent, whereCameraPositionWantsToBe, positionPullLerp );  		} @@ -435,7 +438,7 @@ void LLFollowCam::update()  		updateBehindnessConstraint(gAgent.getPosAgentFromGlobal(mSimulatedFocusGlobal), simulated_pos_agent);  		mSimulatedPositionGlobal = gAgent.getPosGlobalFromAgent(simulated_pos_agent); -		mRelativePos = lerp(mRelativePos, (simulated_pos_agent - mSubjectPosition) * ~mSubjectRotation, LLCriticalDamp::getInterpolant(0.05f)); +		mRelativePos = lerp(mRelativePos, (simulated_pos_agent - mSubjectPosition) * ~mSubjectRotation, LLCriticalDamp::getInterpolant(InterpDeltaTeeny));  	} // if position is not locked ----------------------------------------------------------- @@ -490,7 +493,7 @@ BOOL LLFollowCam::updateBehindnessConstraint(LLVector3 focus, LLVector3& cam_pos  		if ( cameraOffsetAngle > mBehindnessMaxAngle )  		{ -			F32 fraction = ((cameraOffsetAngle - mBehindnessMaxAngle) / cameraOffsetAngle) * LLCriticalDamp::getInterpolant(mBehindnessLag); +			F32 fraction = ((cameraOffsetAngle - mBehindnessMaxAngle) / cameraOffsetAngle) * LLCriticalDamp::getInterpolant(InterpDeltaBehindnessLag);  			cam_position = focus + horizontalSubjectBack * (slerp(fraction, camera_offset_rotation, LLQuaternion::DEFAULT));  			cam_position.mV[VZ] = cameraZ; // clamp z value back to what it was before we started messing with it  			constraint_active = TRUE; diff --git a/indra/newview/llhudnametag.cpp b/indra/newview/llhudnametag.cpp index 482294c8a6..b94681b340 100644 --- a/indra/newview/llhudnametag.cpp +++ b/indra/newview/llhudnametag.cpp @@ -980,7 +980,7 @@ void LLHUDNameTag::updateAll()  //		{  //			continue;  //		} -		(*this_object_it)->mPositionOffset = lerp((*this_object_it)->mPositionOffset, (*this_object_it)->mTargetPositionOffset, LLCriticalDamp::getInterpolant(POSITION_DAMPING_TC)); +		(*this_object_it)->mPositionOffset = lerp((*this_object_it)->mPositionOffset, (*this_object_it)->mTargetPositionOffset, LLCriticalDamp::getInterpolant(InterpDeltaPositionDampingTC));  	}  } @@ -1083,3 +1083,4 @@ F32 LLHUDNameTag::LLHUDTextSegment::getWidth(const LLFontGL* font)  		return width;  	}  } + diff --git a/indra/newview/llmaniprotate.cpp b/indra/newview/llmaniprotate.cpp index 826e8d560a..748ac7a16e 100644 --- a/indra/newview/llmaniprotate.cpp +++ b/indra/newview/llmaniprotate.cpp @@ -240,7 +240,7 @@ void LLManipRotate::render()  		if (mManipPart == LL_ROT_Z)  		{ -			mManipulatorScales = lerp(mManipulatorScales, LLVector4(1.f, 1.f, SELECTED_MANIPULATOR_SCALE, 1.f), LLCriticalDamp::getInterpolant(MANIPULATOR_SCALE_HALF_LIFE)); +			mManipulatorScales = lerp(mManipulatorScales, LLVector4(1.f, 1.f, SELECTED_MANIPULATOR_SCALE, 1.f), LLCriticalDamp::getInterpolant(InterpDeltaManipulatorScaleHalfLife));  			gGL.pushMatrix();  			{  				// selected part @@ -251,7 +251,7 @@ void LLManipRotate::render()  		}  		else if (mManipPart == LL_ROT_Y)  		{ -			mManipulatorScales = lerp(mManipulatorScales, LLVector4(1.f, SELECTED_MANIPULATOR_SCALE, 1.f, 1.f), LLCriticalDamp::getInterpolant(MANIPULATOR_SCALE_HALF_LIFE)); +			mManipulatorScales = lerp(mManipulatorScales, LLVector4(1.f, SELECTED_MANIPULATOR_SCALE, 1.f, 1.f), LLCriticalDamp::getInterpolant(InterpDeltaManipulatorScaleHalfLife));  			gGL.pushMatrix();  			{  				gGL.rotatef( 90.f, 1.f, 0.f, 0.f ); @@ -262,7 +262,7 @@ void LLManipRotate::render()  		}  		else if (mManipPart == LL_ROT_X)  		{ -			mManipulatorScales = lerp(mManipulatorScales, LLVector4(SELECTED_MANIPULATOR_SCALE, 1.f, 1.f, 1.f), LLCriticalDamp::getInterpolant(MANIPULATOR_SCALE_HALF_LIFE)); +			mManipulatorScales = lerp(mManipulatorScales, LLVector4(SELECTED_MANIPULATOR_SCALE, 1.f, 1.f, 1.f), LLCriticalDamp::getInterpolant(InterpDeltaManipulatorScaleHalfLife));  			gGL.pushMatrix();  			{  				gGL.rotatef( 90.f, 0.f, 1.f, 0.f ); @@ -273,13 +273,13 @@ void LLManipRotate::render()  		}  		else if (mManipPart == LL_ROT_ROLL)  		{ -			mManipulatorScales = lerp(mManipulatorScales, LLVector4(1.f, 1.f, 1.f, SELECTED_MANIPULATOR_SCALE), LLCriticalDamp::getInterpolant(MANIPULATOR_SCALE_HALF_LIFE)); +			mManipulatorScales = lerp(mManipulatorScales, LLVector4(1.f, 1.f, 1.f, SELECTED_MANIPULATOR_SCALE), LLCriticalDamp::getInterpolant(InterpDeltaManipulatorScaleHalfLife));  		}  		else if (mManipPart == LL_NO_PART)  		{  			if (mHighlightedPart == LL_NO_PART)  			{ -				mManipulatorScales = lerp(mManipulatorScales, LLVector4(1.f, 1.f, 1.f, 1.f), LLCriticalDamp::getInterpolant(MANIPULATOR_SCALE_HALF_LIFE)); +				mManipulatorScales = lerp(mManipulatorScales, LLVector4(1.f, 1.f, 1.f, 1.f), LLCriticalDamp::getInterpolant(InterpDeltaManipulatorScaleHalfLife));  			}  			LLGLEnable cull_face(GL_CULL_FACE); @@ -294,7 +294,7 @@ void LLManipRotate::render()  				{  					if (mHighlightedPart == LL_ROT_Z)  					{ -						mManipulatorScales = lerp(mManipulatorScales, LLVector4(1.f, 1.f, SELECTED_MANIPULATOR_SCALE, 1.f), LLCriticalDamp::getInterpolant(MANIPULATOR_SCALE_HALF_LIFE)); +						mManipulatorScales = lerp(mManipulatorScales, LLVector4(1.f, 1.f, SELECTED_MANIPULATOR_SCALE, 1.f), LLCriticalDamp::getInterpolant(InterpDeltaManipulatorScaleHalfLife));  						gGL.scalef(mManipulatorScales.mV[VZ], mManipulatorScales.mV[VZ], mManipulatorScales.mV[VZ]);  						// hovering over part  						gl_ring( mRadiusMeters, width_meters, LLColor4( 0.f, 0.f, 1.f, 1.f ), LLColor4( 0.f, 0.f, 1.f, 0.5f ), CIRCLE_STEPS, i); @@ -312,7 +312,7 @@ void LLManipRotate::render()  					gGL.rotatef( 90.f, 1.f, 0.f, 0.f );  					if (mHighlightedPart == LL_ROT_Y)  					{ -						mManipulatorScales = lerp(mManipulatorScales, LLVector4(1.f, SELECTED_MANIPULATOR_SCALE, 1.f, 1.f), LLCriticalDamp::getInterpolant(MANIPULATOR_SCALE_HALF_LIFE)); +						mManipulatorScales = lerp(mManipulatorScales, LLVector4(1.f, SELECTED_MANIPULATOR_SCALE, 1.f, 1.f), LLCriticalDamp::getInterpolant(InterpDeltaManipulatorScaleHalfLife));  						gGL.scalef(mManipulatorScales.mV[VY], mManipulatorScales.mV[VY], mManipulatorScales.mV[VY]);  						// hovering over part  						gl_ring( mRadiusMeters, width_meters, LLColor4( 0.f, 1.f, 0.f, 1.f ), LLColor4( 0.f, 1.f, 0.f, 0.5f ), CIRCLE_STEPS, i); @@ -330,7 +330,7 @@ void LLManipRotate::render()  					gGL.rotatef( 90.f, 0.f, 1.f, 0.f );  					if (mHighlightedPart == LL_ROT_X)  					{ -						mManipulatorScales = lerp(mManipulatorScales, LLVector4(SELECTED_MANIPULATOR_SCALE, 1.f, 1.f, 1.f), LLCriticalDamp::getInterpolant(MANIPULATOR_SCALE_HALF_LIFE)); +						mManipulatorScales = lerp(mManipulatorScales, LLVector4(SELECTED_MANIPULATOR_SCALE, 1.f, 1.f, 1.f), LLCriticalDamp::getInterpolant(InterpDeltaManipulatorScaleHalfLife));  						gGL.scalef(mManipulatorScales.mV[VX], mManipulatorScales.mV[VX], mManipulatorScales.mV[VX]);  						// hovering over part @@ -346,7 +346,7 @@ void LLManipRotate::render()  				if (mHighlightedPart == LL_ROT_ROLL)  				{ -					mManipulatorScales = lerp(mManipulatorScales, LLVector4(1.f, 1.f, 1.f, SELECTED_MANIPULATOR_SCALE), LLCriticalDamp::getInterpolant(MANIPULATOR_SCALE_HALF_LIFE)); +					mManipulatorScales = lerp(mManipulatorScales, LLVector4(1.f, 1.f, 1.f, SELECTED_MANIPULATOR_SCALE), LLCriticalDamp::getInterpolant(InterpDeltaManipulatorScaleHalfLife));  				}  			} diff --git a/indra/newview/llmanipscale.cpp b/indra/newview/llmanipscale.cpp index 00a0bf8894..9802d5503e 100644 --- a/indra/newview/llmanipscale.cpp +++ b/indra/newview/llmanipscale.cpp @@ -535,11 +535,11 @@ void LLManipScale::highlightManipulators(S32 x, S32 y)  	{  		if (mHighlightedPart == MANIPULATOR_IDS[i])  		{ -			mManipulatorScales[i] = lerp(mManipulatorScales[i], SELECTED_MANIPULATOR_SCALE, LLCriticalDamp::getInterpolant(MANIPULATOR_SCALE_HALF_LIFE)); +			mManipulatorScales[i] = lerp(mManipulatorScales[i], SELECTED_MANIPULATOR_SCALE, LLCriticalDamp::getInterpolant(InterpDeltaManipulatorScaleHalfLife));  		}  		else  		{ -			mManipulatorScales[i] = lerp(mManipulatorScales[i], 1.f, LLCriticalDamp::getInterpolant(MANIPULATOR_SCALE_HALF_LIFE)); +			mManipulatorScales[i] = lerp(mManipulatorScales[i], 1.f, LLCriticalDamp::getInterpolant(InterpDeltaManipulatorScaleHalfLife));  		}  	} @@ -2082,3 +2082,4 @@ BOOL LLManipScale::canAffectSelection()  	}  	return can_scale;  } + diff --git a/indra/newview/llmaniptranslate.cpp b/indra/newview/llmaniptranslate.cpp index 0228807dc8..9d287e7a03 100644 --- a/indra/newview/llmaniptranslate.cpp +++ b/indra/newview/llmaniptranslate.cpp @@ -1922,18 +1922,18 @@ void LLManipTranslate::renderTranslationHandles()  			{  				if (index == mManipPart - LL_X_ARROW || index == mHighlightedPart - LL_X_ARROW)  				{ -					mArrowScales.mV[index] = lerp(mArrowScales.mV[index], SELECTED_ARROW_SCALE, LLCriticalDamp::getInterpolant(MANIPULATOR_SCALE_HALF_LIFE )); -					mPlaneScales.mV[index] = lerp(mPlaneScales.mV[index], 1.f, LLCriticalDamp::getInterpolant(MANIPULATOR_SCALE_HALF_LIFE )); +					mArrowScales.mV[index] = lerp(mArrowScales.mV[index], SELECTED_ARROW_SCALE, LLCriticalDamp::getInterpolant(InterpDeltaManipulatorScaleHalfLife)); +					mPlaneScales.mV[index] = lerp(mPlaneScales.mV[index], 1.f, LLCriticalDamp::getInterpolant(InterpDeltaManipulatorScaleHalfLife));  				}  				else if (index == mManipPart - LL_YZ_PLANE || index == mHighlightedPart - LL_YZ_PLANE)  				{ -					mArrowScales.mV[index] = lerp(mArrowScales.mV[index], 1.f, LLCriticalDamp::getInterpolant(MANIPULATOR_SCALE_HALF_LIFE )); -					mPlaneScales.mV[index] = lerp(mPlaneScales.mV[index], SELECTED_ARROW_SCALE, LLCriticalDamp::getInterpolant(MANIPULATOR_SCALE_HALF_LIFE )); +					mArrowScales.mV[index] = lerp(mArrowScales.mV[index], 1.f, LLCriticalDamp::getInterpolant(InterpDeltaManipulatorScaleHalfLife)); +					mPlaneScales.mV[index] = lerp(mPlaneScales.mV[index], SELECTED_ARROW_SCALE, LLCriticalDamp::getInterpolant(InterpDeltaManipulatorScaleHalfLife));  				}  				else  				{ -					mArrowScales.mV[index] = lerp(mArrowScales.mV[index], 1.f, LLCriticalDamp::getInterpolant(MANIPULATOR_SCALE_HALF_LIFE )); -					mPlaneScales.mV[index] = lerp(mPlaneScales.mV[index], 1.f, LLCriticalDamp::getInterpolant(MANIPULATOR_SCALE_HALF_LIFE )); +					mArrowScales.mV[index] = lerp(mArrowScales.mV[index], 1.f, LLCriticalDamp::getInterpolant(InterpDeltaManipulatorScaleHalfLife)); +					mPlaneScales.mV[index] = lerp(mPlaneScales.mV[index], 1.f, LLCriticalDamp::getInterpolant(InterpDeltaManipulatorScaleHalfLife));  				}  			} @@ -2323,3 +2323,4 @@ BOOL LLManipTranslate::canAffectSelection()  	}  	return can_move;  } + diff --git a/indra/newview/llnetmap.cpp b/indra/newview/llnetmap.cpp index 1bda7640bd..274497f2b5 100644 --- a/indra/newview/llnetmap.cpp +++ b/indra/newview/llnetmap.cpp @@ -162,7 +162,7 @@ void LLNetMap::draw()  	static LLUICachedControl<bool> auto_center("MiniMapAutoCenter", true);  	if (auto_center)  	{ -		mCurPan = lerp(mCurPan, mTargetPan, LLCriticalDamp::getInterpolant(0.1f)); +		mCurPan = lerp(mCurPan, mTargetPan, LLCriticalDamp::getInterpolant(InterpDeltaSmaller));  	}  	// Prepare a scissor region @@ -987,3 +987,4 @@ void LLNetMap::handleStopTracking (const LLSD& userdata)  		LLTracker::stopTracking ((void*)LLTracker::isTracking(NULL));  	}  } + diff --git a/indra/newview/llpolymesh.cpp b/indra/newview/llpolymesh.cpp index 5f5258bbce..916f3d8e06 100644 --- a/indra/newview/llpolymesh.cpp +++ b/indra/newview/llpolymesh.cpp @@ -983,12 +983,26 @@ LLVector4a *LLPolyMesh::getScaledBinormals()  //-----------------------------------------------------------------------------  void LLPolyMesh::initializeForMorph()  { -    LLVector4a::memcpyNonAliased16((F32*) mCoords, (F32*) mSharedData->mBaseCoords, sizeof(LLVector4a) * mSharedData->mNumVertices); -	LLVector4a::memcpyNonAliased16((F32*) mNormals, (F32*) mSharedData->mBaseNormals, sizeof(LLVector4a) * mSharedData->mNumVertices); -	LLVector4a::memcpyNonAliased16((F32*) mScaledNormals, (F32*) mSharedData->mBaseNormals, sizeof(LLVector4a) * mSharedData->mNumVertices); -	LLVector4a::memcpyNonAliased16((F32*) mBinormals, (F32*) mSharedData->mBaseNormals, sizeof(LLVector4a) * mSharedData->mNumVertices); -	LLVector4a::memcpyNonAliased16((F32*) mScaledBinormals, (F32*) mSharedData->mBaseNormals, sizeof(LLVector4a) * mSharedData->mNumVertices); -	LLVector4a::memcpyNonAliased16((F32*) mTexCoords, (F32*) mSharedData->mTexCoords, sizeof(LLVector2) * (mSharedData->mNumVertices + mSharedData->mNumVertices%2)); +	// Must insure that src and dst of copies below +	// are actually 16b aligned...the 16b mod 0 size +	// is assumed from the data being LLVector4a +	// +	ll_assert_aligned(mCoords,16); +	ll_assert_aligned(mNormals,16); +	ll_assert_aligned(mScaledNormals,16); +	ll_assert_aligned(mBinormals,16); +	ll_assert_aligned(mScaledBinormals,16); +	ll_assert_aligned(mTexCoords,16); +	ll_assert_aligned(mSharedData->mBaseCoords,16); +	ll_assert_aligned(mSharedData->mBaseNormals,16); +	ll_assert_aligned(mSharedData->mTexCoords,16); + +        ll_memcpy_nonaliased_aligned_16((char*)mCoords, (char*)mSharedData->mBaseCoords, sizeof(LLVector4a) * mSharedData->mNumVertices); +	ll_memcpy_nonaliased_aligned_16((char*)mNormals, (char*)mSharedData->mBaseNormals, sizeof(LLVector4a) * mSharedData->mNumVertices); +	ll_memcpy_nonaliased_aligned_16((char*)mScaledNormals, (char*)mSharedData->mBaseNormals, sizeof(LLVector4a) * mSharedData->mNumVertices); +	ll_memcpy_nonaliased_aligned_16((char*)mBinormals, (char*)mSharedData->mBaseNormals, sizeof(LLVector4a) * mSharedData->mNumVertices); +	ll_memcpy_nonaliased_aligned_16((char*)mScaledBinormals, (char*)mSharedData->mBaseNormals, sizeof(LLVector4a) * mSharedData->mNumVertices); +	ll_memcpy_nonaliased_aligned_16((char*)mTexCoords, (char*)mSharedData->mTexCoords, sizeof(LLVector2) * (mSharedData->mNumVertices + mSharedData->mNumVertices%2));  	for (U32 i = 0; i < mSharedData->mNumVertices; ++i)  	{ diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp index 343316d30a..cf9d95455e 100644 --- a/indra/newview/llselectmgr.cpp +++ b/indra/newview/llselectmgr.cpp @@ -6108,6 +6108,14 @@ void LLSelectNode::renderOneSilhouette(const LLColor4 &color)  			gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);  			gGL.begin(LLRender::LINES);  			{ +				// Lines require an even number of verts so repeat the first +				// vert if we don't meet that requirement +				// +				if (mSilhouetteVertices.size() & 0x1) +				{ +					mSilhouetteVertices.push_back(mSilhouetteVertices[0]); +				} +  				for(S32 i = 0; i < mSilhouetteVertices.size(); i += 2)  				{  					u_coord += u_divisor * LLSelectMgr::sHighlightUScale; @@ -7547,3 +7555,4 @@ void LLSelectMgr::sendSelectionMove()  	//saveSelectedObjectTransform(SELECT_ACTION_TYPE_PICK);  } + diff --git a/indra/newview/lltexturectrl.cpp b/indra/newview/lltexturectrl.cpp index ec36cf48c2..8c5844eca7 100644 --- a/indra/newview/lltexturectrl.cpp +++ b/indra/newview/lltexturectrl.cpp @@ -549,11 +549,11 @@ void LLFloaterTexturePicker::draw()  	if (gFocusMgr.childHasMouseCapture(getDragHandle()))  	{ -		mContextConeOpacity = lerp(mContextConeOpacity, gSavedSettings.getF32("PickerContextOpacity"), LLCriticalDamp::getInterpolant(CONTEXT_FADE_TIME)); +		mContextConeOpacity = lerp(mContextConeOpacity, gSavedSettings.getF32("PickerContextOpacity"), LLCriticalDamp::getInterpolant(InterpDeltaContextFadeTime));  	}  	else  	{ -		mContextConeOpacity = lerp(mContextConeOpacity, 0.f, LLCriticalDamp::getInterpolant(CONTEXT_FADE_TIME)); +		mContextConeOpacity = lerp(mContextConeOpacity, 0.f, LLCriticalDamp::getInterpolant(InterpDeltaContextFadeTime));  	}  	updateImageStats(); diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp index 9ffc64312d..3f97659c66 100644 --- a/indra/newview/llviewerdisplay.cpp +++ b/indra/newview/llviewerdisplay.cpp @@ -1033,7 +1033,7 @@ void render_hud_attachments()  	// clamp target zoom level to reasonable values  	gAgentCamera.mHUDTargetZoom = llclamp(gAgentCamera.mHUDTargetZoom, 0.1f, 1.f);  	// smoothly interpolate current zoom level -	gAgentCamera.mHUDCurZoom = lerp(gAgentCamera.mHUDCurZoom, gAgentCamera.mHUDTargetZoom, LLCriticalDamp::getInterpolant(0.03f)); +	gAgentCamera.mHUDCurZoom = lerp(gAgentCamera.mHUDCurZoom, gAgentCamera.mHUDTargetZoom, LLCriticalDamp::getInterpolant(InterpDeltaTeenier));  	if (LLPipeline::sShowHUDAttachments && !gDisconnected && setup_hud_matrices())  	{ @@ -1593,3 +1593,4 @@ void display_cleanup()  {  	gDisconnectedImagep = NULL;  } + diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index 4efd59685e..d28da507ea 100755 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -2913,7 +2913,7 @@ void LLVOAvatar::idleUpdateWindEffect()  		LLVector3 velocity = getVelocity();  		F32 speed = velocity.length();  		//RN: velocity varies too much frame to frame for this to work -		mRippleAccel.clearVec();//lerp(mRippleAccel, (velocity - mLastVel) * time_delta, LLCriticalDamp::getInterpolant(0.02f)); +		mRippleAccel.clearVec();//lerp(mRippleAccel, (velocity - mLastVel) * time_delta, LLCriticalDamp::getInterpolant(InterpDeltaTeenier));  		mLastVel = velocity;  		LLVector4 wind;  		wind.setVec(getRegion()->mWind.getVelocityNoisy(getPositionAgent(), 4.f) - velocity); @@ -2934,13 +2934,10 @@ void LLVOAvatar::idleUpdateWindEffect()  		wind.mV[VW] = llmin(0.025f + (speed * 0.015f) + hover_strength, 0.5f);  		F32 interp; -		if (wind.mV[VW] > mWindVec.mV[VW]) +		interp = LLCriticalDamp::getInterpolant(InterpDeltaSmall); +		if (wind.mV[VW] <= mWindVec.mV[VW])  		{ -			interp = LLCriticalDamp::getInterpolant(0.2f); -		} -		else -		{ -			interp = LLCriticalDamp::getInterpolant(0.4f); +			interp *= 2.0f;  		}  		mWindVec = lerp(mWindVec, wind, interp); @@ -3801,7 +3798,6 @@ BOOL LLVOAvatar::updateCharacter(LLAgent &agent)  			// Set the root rotation, but do so incrementally so that it  			// lags in time by some fixed amount. -			//F32 u = LLCriticalDamp::getInterpolant(PELVIS_LAG);  			F32 pelvis_lag_time = 0.f;  			if (self_in_mouselook)  			{ diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 0df0e653ae..e39d2862fb 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -1271,7 +1271,7 @@ BOOL LLVOVolume::calcLOD()  	else  	{  		distance = mDrawable->mDistanceWRTCamera; -		radius = getVolume()->mLODScaleBias.scaledVec(getScale()).length(); +		radius = getVolume() ? getVolume()->mLODScaleBias.scaledVec(getScale()).length() : getScale().length();  	}  	//hold onto unmodified distance for debugging @@ -2993,7 +2993,8 @@ void LLVOVolume::generateSilhouette(LLSelectNode* nodep, const LLVector3& view_p  		//transform view vector into volume space  		view_vector -= getRenderPosition(); -		mDrawable->mDistanceWRTCamera = view_vector.length(); +		// WTF...why is silhouette generation touching a variable used all over the place?! +		//mDrawable->mDistanceWRTCamera = view_vector.length();  		LLQuaternion worldRot = getRenderRotation();  		view_vector = view_vector * ~worldRot;  		if (!isVolumeGlobal()) diff --git a/indra/newview/llwlanimator.h b/indra/newview/llwlanimator.h index 5223b45343..810f4cf7e5 100644 --- a/indra/newview/llwlanimator.h +++ b/indra/newview/llwlanimator.h @@ -137,3 +137,4 @@ private:  };  #endif // LL_WL_ANIMATOR_H + diff --git a/indra/newview/llwlparammanager.h b/indra/newview/llwlparammanager.h index 72422500fc..e13aed98ed 100644 --- a/indra/newview/llwlparammanager.h +++ b/indra/newview/llwlparammanager.h @@ -412,3 +412,4 @@ inline LLVector4 LLWLParamManager::getRotatedLightDir(void) const  }  #endif + diff --git a/indra/newview/llwlparamset.cpp b/indra/newview/llwlparamset.cpp index 745cdae441..b307f19e8a 100644 --- a/indra/newview/llwlparamset.cpp +++ b/indra/newview/llwlparamset.cpp @@ -406,4 +406,5 @@ void LLWLParamSet::updateHashedNames()  	{  		mParamHashedNames.push_back(LLStaticHashedString(iter->first));  	} -}
\ No newline at end of file +} + diff --git a/indra/newview/llwlparamset.h b/indra/newview/llwlparamset.h index 3e9f77ba6c..6e5f1d3a4b 100644 --- a/indra/newview/llwlparamset.h +++ b/indra/newview/llwlparamset.h @@ -243,3 +243,4 @@ inline F32 LLWLParamSet::getCloudScrollY() {  #endif // LL_WLPARAM_SET_H + diff --git a/indra/newview/llworldmapview.cpp b/indra/newview/llworldmapview.cpp index ccc513b80d..7c3bc5988c 100644 --- a/indra/newview/llworldmapview.cpp +++ b/indra/newview/llworldmapview.cpp @@ -302,8 +302,8 @@ void LLWorldMapView::draw()  	mVisibleRegions.clear();  	// animate pan if necessary -	sPanX = lerp(sPanX, sTargetPanX, LLCriticalDamp::getInterpolant(0.1f)); -	sPanY = lerp(sPanY, sTargetPanY, LLCriticalDamp::getInterpolant(0.1f)); +	sPanX = lerp(sPanX, sTargetPanX, LLCriticalDamp::getInterpolant(InterpDeltaSmaller)); +	sPanY = lerp(sPanY, sTargetPanY, LLCriticalDamp::getInterpolant(InterpDeltaSmaller));  	const S32 width = getRect().getWidth();  	const S32 height = getRect().getHeight(); @@ -1795,3 +1795,5 @@ BOOL LLWorldMapView::handleDoubleClick( S32 x, S32 y, MASK mask )  	}  	return FALSE;  } + + diff --git a/indra/test/io.cpp b/indra/test/io.cpp index ce747f667d..7f26ac6724 100644 --- a/indra/test/io.cpp +++ b/indra/test/io.cpp @@ -1141,6 +1141,7 @@ namespace tut  		ensure("Connected to server", connected);  		lldebugs << "connected" << llendl;  		F32 elapsed = pump_loop(mPump,0.1f); +		(void)elapsed;  		count = mPump->runningChains();  		ensure_equals("server chain onboard", count, 2);  		lldebugs << "** Client is connected." << llendl; diff --git a/indra/test/llstreamtools_tut.cpp b/indra/test/llstreamtools_tut.cpp index a93f2e8f65..68e56b5ee2 100644 --- a/indra/test/llstreamtools_tut.cpp +++ b/indra/test/llstreamtools_tut.cpp @@ -386,15 +386,17 @@ namespace tut  		std::string actual_result;  		std::istringstream is;  		bool ret; -  		is.clear();  		is.str(str = "  First Second \t \r  \n Third  Fourth-ShouldThisBePartOfFourth  Fifth\n");  		actual_result = "";  		ret = get_word(actual_result, is); // First +		(void)ret;  		actual_result = "";  		ret = get_word(actual_result, is); // Second +		(void)ret;  		actual_result = "";  		ret = get_word(actual_result, is); // Third +		(void)ret;  		// the current implementation of get_word seems inconsistent with  		// skip_to_next_word. skip_to_next_word treats any character other @@ -486,6 +488,7 @@ namespace tut  		is.str(str = "First Second \t \r\n Third  Fourth-ShouldThisBePartOfFourth  IsThisFifth\n");  		actual_result = "";  		ret = get_line(actual_result, is); +		(void)ret;  		expected_result = "First Second \t \r\n";  		ensure_equals("get_line: 1", actual_result, expected_result); @@ -551,6 +554,7 @@ namespace tut  		is.str(str = "Should not skip lone \r.\r\n");  		actual_result = "";  		ret = get_line(actual_result, is); +		(void)ret;  		expected_result = "Should not skip lone \r.\r\n";  		ensure_equals("get_line: carriage return skipped even though not followed by newline", actual_result, expected_result);  	} @@ -569,6 +573,7 @@ namespace tut  		is.str(str = "\n");  		actual_result = "";  		ret = get_line(actual_result, is); +		(void)ret;  		expected_result = "\n";  		ensure_equals("get_line: Just newline", actual_result, expected_result);  	} @@ -588,6 +593,7 @@ namespace tut  		is.str(str = "First Line.\nSecond Line.\n");  		actual_result = "";  		ret = get_line(actual_result, is, 255); +		(void)ret;  		expected_result = "First Line.\n";  		ensure_equals("get_line: Basic Operation", actual_result, expected_result); diff --git a/indra/test/lltemplatemessagebuilder_tut.cpp b/indra/test/lltemplatemessagebuilder_tut.cpp index 6e1c82bb24..0aad3cbc15 100644 --- a/indra/test/lltemplatemessagebuilder_tut.cpp +++ b/indra/test/lltemplatemessagebuilder_tut.cpp @@ -958,11 +958,13 @@ namespace tut  		reader->validateMessage(buffer, builtSize, LLHost());  		reader->readMessage(buffer, LLHost());  		reader->getU32(_PREHASH_Test0, _PREHASH_Test0, outValue); +		(void)outValue;  		char outBuffer[bufferSize];  		memset(buffer, 0xcc, bufferSize);  		reader->getString(_PREHASH_Test1, _PREHASH_Test0, bufferSize,   						  outBuffer);  		outValue2 = reader->getNumberOfBlocks(_PREHASH_Test1); +		(void)outValue2;  		ensure_equals("Ensure present value ", outValue, inValue);  		ensure_equals("Ensure unchanged buffer ", strlen(outBuffer), 0);  		delete reader;  | 
