From bff574e04e0532678a458762f37245564c381196 Mon Sep 17 00:00:00 2001 From: SmileTheory Date: Tue, 12 Feb 2013 20:53:59 -0800 Subject: [PATCH] #5878: Ensure surfaces are drawn before executing full-screen render commands, and when at the end of the render command list. --- code/rend2/tr_backend.c | 21 +++++++++++++++++++++ code/rend2/tr_init.c | 12 ++++++++++-- 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/code/rend2/tr_backend.c b/code/rend2/tr_backend.c index 0834176b..fd61ee76 100644 --- a/code/rend2/tr_backend.c +++ b/code/rend2/tr_backend.c @@ -1410,6 +1410,10 @@ const void *RB_DrawBuffer( const void *data ) { cmd = (const drawBufferCommand_t *)data; + // finish any 2D drawing if needed + if(tess.numIndexes) + RB_EndSurface(); + if (glRefConfig.framebufferObject) FBO_Bind(NULL); @@ -1493,6 +1497,10 @@ const void *RB_ColorMask(const void *data) { const colorMaskCommand_t *cmd = data; + // finish any 2D drawing if needed + if(tess.numIndexes) + RB_EndSurface(); + if (glRefConfig.framebufferObject) { // reverse color mask, so 0 0 0 0 is the default @@ -1517,6 +1525,7 @@ const void *RB_ClearDepth(const void *data) { const clearDepthCommand_t *cmd = data; + // finish any 2D drawing if needed if(tess.numIndexes) RB_EndSurface(); @@ -1648,6 +1657,10 @@ const void *RB_CapShadowMap(const void *data) { const capShadowmapCommand_t *cmd = data; + // finish any 2D drawing if needed + if(tess.numIndexes) + RB_EndSurface(); + if (cmd->map != -1) { GL_SelectTexture(0); @@ -1680,6 +1693,10 @@ const void *RB_PostProcess(const void *data) FBO_t *srcFbo; qboolean autoExposure; + // finish any 2D drawing if needed + if(tess.numIndexes) + RB_EndSurface(); + if (!glRefConfig.framebufferObject || !r_postProcess->integer) { // do nothing @@ -1812,6 +1829,10 @@ void RB_ExecuteRenderCommands( const void *data ) { break; case RC_END_OF_LIST: default: + // finish any 2D drawing if needed + if(tess.numIndexes) + RB_EndSurface(); + // stop rendering t2 = ri.Milliseconds (); backEnd.pc.msec = t2 - t1; diff --git a/code/rend2/tr_init.c b/code/rend2/tr_init.c index 3f73160e..df7ffed6 100644 --- a/code/rend2/tr_init.c +++ b/code/rend2/tr_init.c @@ -538,7 +538,11 @@ const void *RB_TakeScreenshotCmd( const void *data ) { const screenshotCommand_t *cmd; cmd = (const screenshotCommand_t *)data; - + + // finish any 2D drawing if needed + if(tess.numIndexes) + RB_EndSurface(); + if (cmd->jpeg) RB_TakeScreenshotJPEG( cmd->x, cmd->y, cmd->width, cmd->height, cmd->fileName); else @@ -820,7 +824,11 @@ const void *RB_TakeVideoFrameCmd( const void *data ) size_t memcount, linelen; int padwidth, avipadwidth, padlen, avipadlen; GLint packAlign; - + + // finish any 2D drawing if needed + if(tess.numIndexes) + RB_EndSurface(); + cmd = (const videoFrameCommand_t *)data; qglGetIntegerv(GL_PACK_ALIGNMENT, &packAlign);