void RenderHdrScene ( GameTime gameTime, StereoEye stereoEye, Viewport viewport, RenderTargetSurface targetSurface )
{
// clear g-buffer and hdr-buffers:
ClearBuffers( viewHdrFrame );
// single pass for stereo rendering :
if (stereoEye!=StereoEye.Right) {
// simulate particles BEFORE lighting
// to make particle lit (position is required) and
// get simulated particles for shadows.
ParticleSystem.Simulate( gameTime, Camera );
// render shadows :
rs.LightRenderer.RenderShadows( this, this.LightSet );
}
// render g-buffer :
rs.SceneRenderer.RenderGBuffer( stereoEye, Camera, viewHdrFrame, this );
// render ssao :
rs.SsaoFilter.Render( stereoEye, Camera, viewHdrFrame.DepthBuffer, viewHdrFrame.NormalMapBuffer );
switch (rs.ShowGBuffer) {
case 1 : rs.Filter.Copy( targetSurface, viewHdrFrame.DiffuseBuffer ); return;
case 2 : rs.Filter.Copy( targetSurface, viewHdrFrame.SpecularBuffer ); return;
case 3 : rs.Filter.Copy( targetSurface, viewHdrFrame.NormalMapBuffer ); return;
case 4 : rs.Filter.Copy( targetSurface, viewHdrFrame.ScatteringBuffer ); return;
case 5 : rs.Filter.Copy( targetSurface, rs.SsaoFilter.OcclusionMap ); return;
case 6 : rs.Filter.StretchRect( targetSurface, rs.LightRenderer.CascadedShadowMap.ParticleShadow ); return;
case 7 : rs.Filter.StretchRect( targetSurface, rs.LightRenderer.CascadedShadowMap.ColorBuffer ); return;
}
// render sky :
rs.Sky.Render( Camera, stereoEye, viewHdrFrame, SkySettings );
rs.Sky.RenderFogTable( SkySettings );
// render lights :
rs.LightRenderer.RenderLighting( stereoEye, Camera, viewHdrFrame, this, Radiance );
// render "solid" DOF :
rs.DofFilter.Render( gameTime, viewHdrFrame.LightAccumulator, viewHdrFrame.HdrBuffer, viewHdrFrame.DepthBuffer, this );
// render and simulate particles :
ParticleSystem.Render( gameTime, Camera, stereoEye, viewHdrFrame );
// apply tonemapping and bloom :
rs.HdrFilter.Render( gameTime, TempFXBuffer.Surface, viewHdrFrame.HdrBuffer, this );
// apply FXAA
if (rs.UseFXAA) {
rs.Filter.Fxaa( targetSurface, TempFXBuffer );
} else {
rs.Filter.Copy( targetSurface, TempFXBuffer );
}
// draw debug lines :
Debug.Render( targetSurface, Camera );
}