public void RenderScene(idRenderView renderView)
{
#if ID_DEDICATED
#else
if(idE.RenderSystem.IsRunning == false)
{
return;
}
// skip front end rendering work, which will result
// in only gui drawing
if(idE.CvarSystem.GetBool("r_skipFrontEnd") == true)
{
return;
}
if((renderView.FovX <= 0) || (renderView.FovY <= 0))
{
idConsole.Error("idRenderWorld::RenderScene: bad FOVS: {0}, {1}", renderView.FovX, renderView.FovY);
}
idRenderView copy = renderView.Copy();
// close any gui drawing
idE.RenderSystem.GuiModel.EmitFullScreen();
idE.RenderSystem.GuiModel.Clear();
int startTime = idE.System.Milliseconds;
// setup view parms for the initial view
//
View parms = new View();
parms.RenderView = copy;
// TODO: screenshot
/*if ( tr.takingScreenshot ) {
parms->renderView.forceUpdate = true;
}*/
// set up viewport, adjusted for resolution and OpenGL style 0 at the bottom
parms.ViewPort = idE.RenderSystem.RenderViewToViewPort(parms.RenderView);
// the scissor bounds may be shrunk in subviews even if
// the viewport stays the same
// this scissor range is local inside the viewport
parms.Scissor.X1 = 0;
parms.Scissor.Y1 = 0;
parms.Scissor.X2 = (short) (parms.ViewPort.X2 - parms.ViewPort.X1);
parms.Scissor.Y2 = (short) (parms.ViewPort.Y2 - parms.ViewPort.Y1);
parms.IsSubview = false;
parms.InitialViewAreaOrigin = renderView.ViewOrigin;
parms.FloatTime = parms.RenderView.Time * 0.001f;
parms.RenderWorld = this;
// use this time for any subsequent 2D rendering, so damage blobs/etc
// can use level time
idE.RenderSystem.FrameShaderTime = parms.FloatTime;
// see if the view needs to reverse the culling sense in mirrors
// or environment cube sides
Vector3 tmp = new Vector3(parms.RenderView.ViewAxis.M21, parms.RenderView.ViewAxis.M22, parms.RenderView.ViewAxis.M23);
Vector3 tmp2 = new Vector3(parms.RenderView.ViewAxis.M31, parms.RenderView.ViewAxis.M32, parms.RenderView.ViewAxis.M33);
Vector3 tmp3 = new Vector3(parms.RenderView.ViewAxis.M11, parms.RenderView.ViewAxis.M12, parms.RenderView.ViewAxis.M13);
Vector3 cross = Vector3.Cross(tmp, tmp2);
if((cross * tmp3).Length() > 0)
{
parms.IsMirror = false;
}
else
{
parms.IsMirror = true;
}
if(idE.CvarSystem.GetBool("r_lockSurfaces") == true)
{
idConsole.Warning("TODO: R_LockSurfaceScene( parms );");
return;
}
// save this world for use by some console commands
idE.RenderSystem.PrimaryRenderWorld = this;
idE.RenderSystem.PrimaryRenderView = copy;
idE.RenderSystem.PrimaryView = parms;
// rendering this view may cause other views to be rendered
// for mirrors / portals / shadows / environment maps
// this will also cause any necessary entities and lights to be
// updated to the demo file
idE.RenderSystem.RenderView(parms);
// now write delete commands for any modified-but-not-visible entities, and
// add the renderView command to the demo
// TODO: demo
/*if ( session->writeDemo ) {
WriteRenderView( renderView );
}*/
int endTime = idE.System.Milliseconds;
// TODO: tr.pc.frontEndMsec += endTime - startTime;
// prepare for any 2D drawing after this
idE.RenderSystem.GuiModel.Clear();
#endif
}
#endregion