void EditTSCtrl::renderWorld(const RectI & updateRect) { // Make sure that whatever the editor does, it doesn't // dirty the GFX transform state. GFXTransformSaver saver; updateGizmo(); gClientSceneGraph->setDisplayTargetResolution(getExtent()); // Use a render instance to do editor 3D scene // rendering after HDR is processed and while the depth // buffer is still intact. RenderPassManager *rpm = gClientSceneGraph->getDefaultRenderPass(); ObjectRenderInst *inst = rpm->allocInst<ObjectRenderInst>(); inst->type = RenderPassManager::RIT_Editor; inst->renderDelegate.bind(this, &EditTSCtrl::_renderScene); rpm->addInst(inst); if( mDisplayType == DisplayTypePerspective ) gClientSceneGraph->renderScene( SPT_Diffuse ); else { // If we are in an orthographic mode, do a special render // with AL, fog, and PostFX disabled. FogData savedFogData = gClientSceneGraph->getFogData(); gClientSceneGraph->setFogData( FogData() ); SceneRenderState renderState ( gClientSceneGraph, SPT_Diffuse ); gClientSceneGraph->renderScene( &renderState ); gClientSceneGraph->setFogData( savedFogData ); } }
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(); }