diff options
| author | Dave Parks <davep@lindenlab.com> | 2012-06-06 17:15:20 -0500 | 
|---|---|---|
| committer | Dave Parks <davep@lindenlab.com> | 2012-06-06 17:15:20 -0500 | 
| commit | 581e7e0c899a596aa4ca8003c9627619f2d86f67 (patch) | |
| tree | 4b2f120111d24281183313c676236fed4ee4c179 | |
| parent | 87c4d45f5f4a029ea1d9913cffe9d36e3a28340b (diff) | |
MAINT-646 Don't spend so much time fetching avatar physics params.
| -rw-r--r-- | indra/newview/llphysicsmotion.cpp | 77 | 
1 files changed, 62 insertions, 15 deletions
| diff --git a/indra/newview/llphysicsmotion.cpp b/indra/newview/llphysicsmotion.cpp index e124916c48..cb6989c9dd 100644 --- a/indra/newview/llphysicsmotion.cpp +++ b/indra/newview/llphysicsmotion.cpp @@ -67,6 +67,19 @@ inline F64 llsgn(const F64 a)  class LLPhysicsMotion  {  public: +	typedef enum +	{ +		SMOOTHING = 0, +		MASS, +		GRAVITY, +		SPRING, +		GAIN, +		DAMPING, +		DRAG, +		MAX_EFFECT, +		NUM_PARAMS +	} eParamName; +          /*            param_driver_name: The param that controls the params that are being affected by the physics.            joint_name: The joint that the body part is attached to.  The joint is @@ -98,6 +111,11 @@ public:                  mPositionLastUpdate_local(0)          {                  mJointState = new LLJointState; + +				for (U32 i = 0; i < NUM_PARAMS; ++i) +				{ +					mParamCache[i] = NULL; +				}          }          BOOL initialize(); @@ -111,16 +129,43 @@ public:                  return mJointState;          }  protected: -        F32 getParamValue(const std::string& controller_key) -        { -                const controller_map_t::const_iterator& entry = mParamControllers.find(controller_key); + +		F32 getParamValue(eParamName param) +		{ +			static std::string controller_key[] =  +			{ +				"Smoothing", +				"Mass", +				"Gravity", +				"Spring", +				"Gain", +				"Damping", +				"Drag", +				"MaxEffect" +			}; + +			if (!mParamCache[param]) +			{ +				const controller_map_t::const_iterator& entry = mParamControllers.find(controller_key[param]);                  if (entry == mParamControllers.end())                  { -                        return sDefaultController[controller_key]; +                        return sDefaultController[controller_key[param]];                  }                  const std::string& param_name = (*entry).second.c_str(); -                return mCharacter->getVisualParamWeight(param_name.c_str()); -        } +                mParamCache[param] = mCharacter->getVisualParam(param_name.c_str()); +			} +				 +			if (mParamCache[param]) +			{ +				return mParamCache[param]->getWeight(); +			} +			else +			{ +				return sDefaultController[controller_key[param]]; +			} +		} + +                  void setParamValue(LLViewerVisualParam *param,                             const F32 new_value_local,                                                     F32 behavior_maxeffect); @@ -150,6 +195,8 @@ private:          F32 mLastTime; +		LLVisualParam* mParamCache[NUM_PARAMS]; +          static default_controller_map_t sDefaultController;  }; @@ -427,7 +474,6 @@ BOOL LLPhysicsMotionController::onUpdate(F32 time, U8* joint_mask)          return TRUE;  } -  // Return TRUE if character has to update visual params.  BOOL LLPhysicsMotion::onUpdate(F32 time)  { @@ -471,15 +517,16 @@ BOOL LLPhysicsMotion::onUpdate(F32 time)          LLJoint *joint = mJointState->getJoint(); -        const F32 behavior_mass = getParamValue("Mass"); -        const F32 behavior_gravity = getParamValue("Gravity"); -        const F32 behavior_spring = getParamValue("Spring"); -        const F32 behavior_gain = getParamValue("Gain"); -        const F32 behavior_damping = getParamValue("Damping"); -        const F32 behavior_drag = getParamValue("Drag"); -        const BOOL physics_test = FALSE; // Enable this to simulate bouncing on all parts. +		const F32 behavior_mass = getParamValue(MASS); +		const F32 behavior_gravity = getParamValue(GRAVITY); +		const F32 behavior_spring = getParamValue(SPRING); +		const F32 behavior_gain = getParamValue(GAIN); +		const F32 behavior_damping = getParamValue(DAMPING); +		const F32 behavior_drag = getParamValue(DRAG); +		F32 behavior_maxeffect = getParamValue(MAX_EFFECT); +		 +		const BOOL physics_test = FALSE; // Enable this to simulate bouncing on all parts. -        F32 behavior_maxeffect = getParamValue("MaxEffect");          if (physics_test)                  behavior_maxeffect = 1.0f; | 
