void SceneManager::renderScene( ScenePassType passType, U32 objectMask ) { SceneCameraState cameraState = SceneCameraState::fromGFX(); // Handle frustum locking. const bool lockedFrustum = ( smLockDiffuseFrustum && passType == SPT_Diffuse ); if( lockedFrustum ) cameraState = smLockedDiffuseCamera; else if( passType == SPT_Diffuse ) { // Store the camera state so if we lock, this will become the // locked state. if( passType == SPT_Diffuse ) smLockedDiffuseCamera = cameraState; } // Create the render state. SceneRenderState renderState( this, passType, cameraState ); // If we have locked the frustum, reset the view transform // on the render pass which the render state has just set // to the view matrix corresponding to the locked frustum. For // rendering, however, we need the true view matrix from the // GFX state. if( lockedFrustum ) { RenderPassManager* rpm = renderState.getRenderPass(); rpm->assignSharedXform( RenderPassManager::View, GFX->getWorldMatrix() ); } // Render. renderScene( &renderState, objectMask ); }
void GuiMaterialPreview::renderWorld(const RectI &updateRect) { // nothing to render, punt if ( !mModel && !mMountedModel ) return; S32 time = Platform::getVirtualMilliseconds(); //S32 dt = time - lastRenderTime; lastRenderTime = time; F32 left, right, top, bottom, nearPlane, farPlane; bool isOrtho; GFX->getFrustum( &left, &right, &bottom, &top, &nearPlane, &farPlane, &isOrtho); Frustum frust( isOrtho, left, right, bottom, top, nearPlane, farPlane, MatrixF::Identity ); FogData savedFogData = gClientSceneGraph->getFogData(); gClientSceneGraph->setFogData( FogData() ); // no fog in preview window RenderPassManager* renderPass = gClientSceneGraph->getDefaultRenderPass(); SceneRenderState state ( gClientSceneGraph, SPT_Diffuse, SceneCameraState( GFX->getViewport(), frust, GFX->getWorldMatrix(), GFX->getProjectionMatrix() ), renderPass, true ); // Set up our TS render state here. TSRenderState rdata; rdata.setSceneState( &state ); // We might have some forward lit materials // so pass down a query to gather lights. LightQuery query; query.init( SphereF( Point3F::Zero, 1.0f ) ); rdata.setLightQuery( &query ); // Set up pass transforms renderPass->assignSharedXform(RenderPassManager::View, MatrixF::Identity); renderPass->assignSharedXform(RenderPassManager::Projection, GFX->getProjectionMatrix()); LIGHTMGR->unregisterAllLights(); LIGHTMGR->setSpecialLight( LightManager::slSunLightType, mFakeSun ); if ( mModel ) mModel->render( rdata ); if ( mMountedModel ) { // render a weapon /* MatrixF mat; GFX->pushWorldMatrix(); GFX->multWorld( mat ); GFX->popWorldMatrix(); */ } renderPass->renderPass( &state ); gClientSceneGraph->setFogData( savedFogData ); // restore fog setting // Make sure to remove our fake sun LIGHTMGR->unregisterAllLights(); }