void ShaderParamSet::setupGlobalParam( IShaderParamInput* input , ShaderParamGroup& paramGroup ) { for ( ShaderParamList::iterator iter( paramGroup.paramList.begin() ), itEnd( paramGroup.paramList.end() ); iter != itEnd ; ++iter ) { switch( iter->content ) { case SP_WORLD: input->setUniform( iter->varName.c_str() , getWorldMatrix() ); break; case SP_VIEW : input->setUniform( iter->varName.c_str() , getViewMatrix() ); break; case SP_PROJ : input->setUniform( iter->varName.c_str() , getProjectMatrix() ); break; case SP_WORLD_INV : input->setUniform( iter->varName.c_str() , getInvWorldMatrix() ); break; case SP_VIEW_PROJ : input->setUniform( iter->varName.c_str() , getViewProjMatrix() ); break; case SP_WVP : input->setUniform( iter->varName.c_str() , getWVPMatrix() ); break; case SP_WORLD_VIEW: input->setUniform( iter->varName.c_str() , getWorldViewMatrix() ); break; //case SP_AMBIENT_LIGHT: // input->setUniform( iter->varName.c_str() , scene->setAmbientLight() ); } } }
Matrix4 const& ShaderParamSet::getWVPMatrix() { if ( mDirtyBit & DIRTY_WVP ) { mWVP = getWorldViewMatrix() * getProjectMatrix(); mDirtyBit &= ~DIRTY_WVP; } return mWVP; }
//----------------------------------------------------------------------------- const Matrix4& AutoParamDataSource::getInverseWorldViewMatrix(void) const { if (mInverseWorldViewMatrixDirty) { mInverseWorldViewMatrix = getWorldViewMatrix().inverseAffine(); mInverseWorldViewMatrixDirty = false; } return mInverseWorldViewMatrix; }
//----------------------------------------------------------------------------- const Matrix4& AutoParamDataSource::getWorldViewProjMatrix(void) const { if (mWorldViewProjMatrixDirty) { mWorldViewProjMatrix = getProjectionMatrix() * getWorldViewMatrix(); mWorldViewProjMatrixDirty = false; } return mWorldViewProjMatrix; }