#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;
// 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;

View file

@ -539,6 +539,10 @@ const void *RB_TakeScreenshotCmd( const void *data ) {
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
@ -821,6 +825,10 @@ const void *RB_TakeVideoFrameCmd( const void *data )
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);