示例#1
0
/*
====================
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;
		}
	}
}
示例#2
0
/*
====================
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;
		}
	}

}
示例#3
0
/*
====================
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;
		}
	}

}