#5878: Ensure surfaces are drawn before executing full-screen render commands, and when at the end of the render command list.

This commit is contained in:
SmileTheory 2013-02-12 20:53:59 -08:00
parent c0d5ba9e06
commit bff574e04e
2 changed files with 31 additions and 2 deletions

View file

@ -1410,6 +1410,10 @@ const void *RB_DrawBuffer( const void *data ) {
cmd = (const drawBufferCommand_t *)data; cmd = (const drawBufferCommand_t *)data;
// finish any 2D drawing if needed
if(tess.numIndexes)
RB_EndSurface();
if (glRefConfig.framebufferObject) if (glRefConfig.framebufferObject)
FBO_Bind(NULL); FBO_Bind(NULL);
@ -1493,6 +1497,10 @@ const void *RB_ColorMask(const void *data)
{ {
const colorMaskCommand_t *cmd = data; const colorMaskCommand_t *cmd = data;
// finish any 2D drawing if needed
if(tess.numIndexes)
RB_EndSurface();
if (glRefConfig.framebufferObject) if (glRefConfig.framebufferObject)
{ {
// reverse color mask, so 0 0 0 0 is the default // 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; const clearDepthCommand_t *cmd = data;
// finish any 2D drawing if needed
if(tess.numIndexes) if(tess.numIndexes)
RB_EndSurface(); RB_EndSurface();
@ -1648,6 +1657,10 @@ const void *RB_CapShadowMap(const void *data)
{ {
const capShadowmapCommand_t *cmd = data; const capShadowmapCommand_t *cmd = data;
// finish any 2D drawing if needed
if(tess.numIndexes)
RB_EndSurface();
if (cmd->map != -1) if (cmd->map != -1)
{ {
GL_SelectTexture(0); GL_SelectTexture(0);
@ -1680,6 +1693,10 @@ const void *RB_PostProcess(const void *data)
FBO_t *srcFbo; FBO_t *srcFbo;
qboolean autoExposure; qboolean autoExposure;
// finish any 2D drawing if needed
if(tess.numIndexes)
RB_EndSurface();
if (!glRefConfig.framebufferObject || !r_postProcess->integer) if (!glRefConfig.framebufferObject || !r_postProcess->integer)
{ {
// do nothing // do nothing
@ -1812,6 +1829,10 @@ void RB_ExecuteRenderCommands( const void *data ) {
break; break;
case RC_END_OF_LIST: case RC_END_OF_LIST:
default: default:
// finish any 2D drawing if needed
if(tess.numIndexes)
RB_EndSurface();
// stop rendering // stop rendering
t2 = ri.Milliseconds (); t2 = ri.Milliseconds ();
backEnd.pc.msec = t2 - t1; backEnd.pc.msec = t2 - t1;

View file

@ -538,7 +538,11 @@ const void *RB_TakeScreenshotCmd( const void *data ) {
const screenshotCommand_t *cmd; const screenshotCommand_t *cmd;
cmd = (const screenshotCommand_t *)data; cmd = (const screenshotCommand_t *)data;
// finish any 2D drawing if needed
if(tess.numIndexes)
RB_EndSurface();
if (cmd->jpeg) if (cmd->jpeg)
RB_TakeScreenshotJPEG( cmd->x, cmd->y, cmd->width, cmd->height, cmd->fileName); RB_TakeScreenshotJPEG( cmd->x, cmd->y, cmd->width, cmd->height, cmd->fileName);
else else
@ -820,7 +824,11 @@ const void *RB_TakeVideoFrameCmd( const void *data )
size_t memcount, linelen; size_t memcount, linelen;
int padwidth, avipadwidth, padlen, avipadlen; int padwidth, avipadwidth, padlen, avipadlen;
GLint packAlign; GLint packAlign;
// finish any 2D drawing if needed
if(tess.numIndexes)
RB_EndSurface();
cmd = (const videoFrameCommand_t *)data; cmd = (const videoFrameCommand_t *)data;
qglGetIntegerv(GL_PACK_ALIGNMENT, &packAlign); qglGetIntegerv(GL_PACK_ALIGNMENT, &packAlign);