/* ==================== RB_ExecuteRenderCommands This function will be called synchronously if running without smp extensions, or asynchronously by another thread. ==================== */ void RB_ExecuteRenderCommands( const void *oldData ) { int t1, t2; commandHeader_t *header; const void* data; t1 = ri.Milliseconds (); if ( !r_smp->integer || oldData == backEndData[0]->data ) { backEnd.smpFrame = 0; } else { backEnd.smpFrame = 1; } again: data = oldData; header = (commandHeader_t *)data; backEnd.doneBloom = qfalse; while ( 1 ) { int cmd = header->commandId; data = header + 1; header = (commandHeader_t *)(((char *)header) + header->size); switch ( cmd ) { case RC_SET_COLOR: RB_SetColor( data ); break; case RC_STRETCH_PIC: R_BloomScreen(); RB_StretchPic( data ); break; case RC_DRAW_SURFS: backEnd.doneSurfaces = qtrue; RB_DrawSurfs( data ); break; case RC_DRAW_BUFFER: RB_DrawBuffer( data ); break; case RC_SWAP_BUFFERS: R_BloomScreen(); if ( RB_SwapBuffers( data ) ) goto again; break; case RC_SCREENSHOT: RB_ScreenShotCmd( data ); break; case RC_CAPTURE: R_MME_CaptureShotCmd( data ); break; case RC_CAPTURE_STEREO: R_MME_CaptureShotCmdStereo( data ); break; case RC_ALLOC: break; case RC_END_OF_LIST: default: // stop rendering on this thread t2 = ri.Milliseconds (); backEnd.pc.msec = t2 - t1; return; } } }
/* ==================== RB_ExecuteRenderCommands This function will be called synchronously if running without smp extensions, or asynchronously by another thread. ==================== */ void RB_ExecuteRenderCommands( const void *data ) { int t1, t2; t1 = ri.Milliseconds (); if ( !r_smp->integer || data == backEndData[0]->commands.cmds ) { backEnd.smpFrame = 0; } else { backEnd.smpFrame = 1; } while ( 1 ) { data = PADP(data, sizeof(void *)); switch ( *(const int *)data ) { case RC_SET_COLOR: data = RB_SetColor( data ); break; case RC_STRETCH_PIC: //Check if it's time for BLOOM! R_PostprocessScreen(); R_BloomScreen(); data = RB_StretchPic( data ); break; case RC_DRAW_SURFS: data = RB_DrawSurfs( data ); break; case RC_DRAW_BUFFER: data = RB_DrawBuffer( data ); break; case RC_SWAP_BUFFERS: //Check if it's time for BLOOM! R_PostprocessScreen(); R_BloomScreen(); data = RB_SwapBuffers( data ); break; case RC_SCREENSHOT: data = RB_TakeScreenshotCmd( data ); break; case RC_VIDEOFRAME: data = RB_TakeVideoFrameCmd( data ); break; case RC_COLORMASK: data = RB_ColorMask(data); break; case RC_CLEARDEPTH: data = RB_ClearDepth(data); break; case RC_END_OF_LIST: default: // stop rendering on this thread t2 = ri.Milliseconds (); backEnd.pc.msec = t2 - t1; return; } } }
/* ==================== RB_ExecuteRenderCommands ==================== */ void RB_ExecuteRenderCommands( const void *data ) { int t1, t2; t1 = ri.Milliseconds(); while ( 1 ) { data = PADP(data, sizeof(void *)); switch ( *(const int *)data ) { case RC_SET_COLOR: data = RB_SetColor( data ); break; case RC_STRETCH_PIC: #ifdef USE_BLOOM //Check if it's time for BLOOM! R_BloomScreen(); #endif data = RB_StretchPic( data ); break; case RC_ROTATED_PIC: #ifdef USE_BLOOM //Check if it's time for BLOOM! R_BloomScreen(); #endif data = RB_RotatedPic( data ); break; case RC_STRETCH_PIC_GRADIENT: #ifdef USE_BLOOM //Check if it's time for BLOOM! R_BloomScreen(); #endif data = RB_StretchPicGradient( data ); break; case RC_DRAW_SURFS: data = RB_DrawSurfs( data ); break; case RC_DRAW_BUFFER: data = RB_DrawBuffer( data ); break; case RC_SWAP_BUFFERS: #ifdef USE_BLOOM //Check if it's time for BLOOM! R_BloomScreen(); #endif data = RB_SwapBuffers( data ); break; case RC_SCREENSHOT: data = RB_TakeScreenshotCmd( data ); break; case RC_VIDEOFRAME: data = RB_TakeVideoFrameCmd( data ); break; case RC_COLORMASK: data = RB_ColorMask(data); break; case RC_CLEARDEPTH: data = RB_ClearDepth(data); break; case RC_END_OF_LIST: default: // stop rendering t2 = ri.Milliseconds(); backEnd.pc.msec = t2 - t1; return; } } }