void RB_ExecuteBackEndCommands( const emptyCommand_t *cmds ) { // r_debugRenderToTexture int c_draw3d = 0, c_draw2d = 0, c_setBuffers = 0, c_swapBuffers = 0, c_copyRenders = 0; if ( cmds->commandId == RC_NOP && !cmds->next ) { return; } backEndStartTime = Sys_Milliseconds(); // needed for editor rendering RB_SetDefaultGLState(); // upload any image loads that have completed globalImages->CompleteBackgroundImageLoads(); for ( ; cmds ; cmds = (const emptyCommand_t *)cmds->next ) { switch ( cmds->commandId ) { case RC_NOP: break; case RC_DRAW_VIEW: RB_DrawView( cmds ); if ( ((const drawSurfsCommand_t *)cmds)->viewDef->viewEntitys ) { c_draw3d++; } else { c_draw2d++; } break; case RC_SET_BUFFER: RB_SetBuffer( cmds ); c_setBuffers++; break; case RC_SWAP_BUFFERS: RB_SwapBuffers( cmds ); c_swapBuffers++; break; case RC_COPY_RENDER: RB_CopyRender( cmds ); c_copyRenders++; break; default: common->Error( "RB_ExecuteBackEndCommands: bad commandId" ); break; } } // go back to the default texture so the editor doesn't mess up a bound image qglBindTexture( GL_TEXTURE_2D, 0 ); backEnd.glState.tmu[0].current2DMap = -1; // stop rendering on this thread backEndFinishTime = Sys_Milliseconds(); backEnd.pc.msec = backEndFinishTime - backEndStartTime; if ( r_debugRenderToTexture.GetInteger() == 1 ) { common->Printf( "3d: %i, 2d: %i, SetBuf: %i, SwpBuf: %i, CpyRenders: %i, CpyFrameBuf: %i\n", c_draw3d, c_draw2d, c_setBuffers, c_swapBuffers, c_copyRenders, backEnd.c_copyFrameBuffer ); backEnd.c_copyFrameBuffer = 0; } }
/* ============= RB_DrawView ============= */ void RB_DrawView( const void *data ) { const drawSurfsCommand_t *cmd; cmd = (const drawSurfsCommand_t *)data; backEnd.viewDef = cmd->viewDef; // we will need to do a new copyTexSubImage of the screen // when a SS_POST_PROCESS material is used backEnd.currentRenderCopied = false; // if there aren't any drawsurfs, do nothing if ( !backEnd.viewDef->numDrawSurfs ) { return; } // skip render bypasses everything that has models, assuming // them to be 3D views, but leaves 2D rendering visible if ( r_skipRender.GetBool() && backEnd.viewDef->viewEntitys ) { return; } // skip render context sets the wgl context to NULL, // which should factor out the API cost, under the assumption // that all gl calls just return if the context isn't valid if ( r_skipRenderContext.GetBool() && backEnd.viewDef->viewEntitys ) { GLimp_DeactivateContext(); } backEnd.pc.c_surfaces += backEnd.viewDef->numDrawSurfs; RB_ShowOverdraw(); // render the scene, jumping to the hardware specific interaction renderers RB_STD_DrawView(); // restore the context for 2D drawing if we were stubbing it out if ( r_skipRenderContext.GetBool() && backEnd.viewDef->viewEntitys ) { GLimp_ActivateContext(); RB_SetDefaultGLState(); } }
/* ============= RB_DrawSSAOView ============= */ void RB_DrawSSAOView( const void *data ) { const drawSurfsCommand_t *cmd; cmd = (const drawSurfsCommand_t *)data; backEnd.viewDef = cmd->viewDef; // we will need to do a new copyTexSubImage of the screen // when a SS_POST_PROCESS material is used backEnd.currentRenderCopied = false; // if there aren't any drawsurfs, do nothing if ( !backEnd.viewDef->numDrawSurfs ) { return; } // skip render bypasses everything that has models, assuming // them to be 3D views, but leaves 2D rendering visible if ( r_skipRender.GetBool() && backEnd.viewDef->viewEntitys ) { return; } // skip render context sets the wgl context to NULL, // which should factor out the API cost, under the assumption // that all gl calls just return if the context isn't valid if ( r_skipRenderContext.GetBool() && backEnd.viewDef->viewEntitys ) { GLimp_DeactivateContext(); } backEnd.pc.c_surfaces += backEnd.viewDef->numDrawSurfs; // RB_ShowOverdraw(); // render the scene, jumping to the hardware specific interaction renderers // RB_STD_DrawView(); drawSurf_t **drawSurfs; int numDrawSurfs; RB_LogComment( "---------- RB_STD_DrawView ----------\n" ); backEnd.depthFunc = GLS_DEPTHFUNC_EQUAL; drawSurfs = (drawSurf_t **)&backEnd.viewDef->drawSurfs[0]; numDrawSurfs = backEnd.viewDef->numDrawSurfs; // clear the z buffer, set the projection matrix, etc RB_BeginDrawingView(); // decide how much overbrighting we are going to do //RB_DetermineLightScale(); // fill the depth buffer and clear color buffer to black except on // subviews RB_STD_FillDepthBuffer( drawSurfs, numDrawSurfs ); // ---> sikk - copy of current depth buffer globalImages->currentDepthImage->CopyDepthbuffer( backEnd.viewDef->viewport.x1, backEnd.viewDef->viewport.y1, backEnd.viewDef->viewport.x2 - backEnd.viewDef->viewport.x1 + 1, backEnd.viewDef->viewport.y2 - backEnd.viewDef->viewport.y1 + 1 ); // <--- sikk - copy of current depth buffer // restore the context for 2D drawing if we were stubbing it out if ( r_skipRenderContext.GetBool() && backEnd.viewDef->viewEntitys ) { GLimp_ActivateContext(); RB_SetDefaultGLState(); } }