/* ============= OpenGLModel::PreRender Uses the appropriate program for the model ============= */ void OpenGLModel::PreRender( void ) { if ( !m_visible ) { return; } OpenGLProgramManager::GetInstance()->UseProgramWithFeatures( m_requiredFeatures ); OpenGLProgram* prog = OpenGLProgramManager::GetInstance()->GetActiveProgram(); if ( !prog ) { return; } if ( m_animator ) { m_animator->PreRender(); } for ( unsigned int i = 0; i < m_meshCount; ++i ) { if ( m_meshes[i] ) { m_meshes[i]->PreRender(); } } if ( m_attachedPass & PassType::TRANSPARENCY ) { prog->SetUniform( "u_Opacity", GetOpacity() ); } if ( m_requiredFeatures & ProgramFeatures::NORMALS ) { prog->SetUniform( "u_NormalMatrix", glm::inverse( glm::transpose( glm::mat3( m_renderer->GetCameraData().GetViewMatrix() * GetCompositeMatrix() ) ) ) ); } prog->SetUniform( "u_ModelMatrix", GetCompositeMatrix() ); ( ( const OpenGLRenderModule* )m_renderer )->SendGlobalUniforms(); }
bool FxSystem_c::GetBoundingSphereWld(FxSphere_c* sphere) { if (!m_boundingSphere) { return false; } RwMatrixTag* composite = g_fxMan.FxRwMatrixCreate(); GetCompositeMatrix(composite); RwV3dTransformPoints(&sphere->center, &m_boundingSphere->center, 1, composite); sphere->center = m_boundingSphere->center; g_fxMan.FxRwMatrixDestroy(composite); return true; }