mirror of
https://github.com/DrBeef/ioq3quest.git
synced 2024-11-30 07:41:16 +00:00
Ensure the correct FBO is bound when drawing. (Fixes bug #5791.)
This commit is contained in:
parent
c4288507e0
commit
262e8e96b6
3 changed files with 33 additions and 14 deletions
|
@ -482,11 +482,19 @@ void RB_BeginDrawingView (void) {
|
|||
if (glRefConfig.framebufferObject)
|
||||
{
|
||||
// FIXME: HUGE HACK: render to the screen fbo if we've already postprocessed the frame and aren't drawing more world
|
||||
if (backEnd.viewParms.targetFbo == tr.renderFbo && backEnd.framePostProcessed && (backEnd.refdef.rdflags & RDF_NOWORLDMODEL))
|
||||
// drawing more world check is in case of double renders, such as skyportals
|
||||
if (backEnd.viewParms.targetFbo == NULL)
|
||||
{
|
||||
if (backEnd.framePostProcessed && (backEnd.refdef.rdflags & RDF_NOWORLDMODEL))
|
||||
{
|
||||
FBO_Bind(tr.screenScratchFbo);
|
||||
}
|
||||
else
|
||||
{
|
||||
FBO_Bind(tr.renderFbo);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
FBO_Bind(backEnd.viewParms.targetFbo);
|
||||
}
|
||||
|
@ -949,7 +957,7 @@ void RE_StretchRaw (int x, int y, int w, int h, int cols, int rows, const byte *
|
|||
}
|
||||
|
||||
// FIXME: HUGE hack
|
||||
if (glRefConfig.framebufferObject && !glState.currentFBO)
|
||||
if (glRefConfig.framebufferObject)
|
||||
{
|
||||
if (backEnd.framePostProcessed)
|
||||
{
|
||||
|
@ -1092,7 +1100,7 @@ const void *RB_StretchPic ( const void *data ) {
|
|||
cmd = (const stretchPicCommand_t *)data;
|
||||
|
||||
// FIXME: HUGE hack
|
||||
if (glRefConfig.framebufferObject && !glState.currentFBO)
|
||||
if (glRefConfig.framebufferObject)
|
||||
{
|
||||
if (backEnd.framePostProcessed)
|
||||
{
|
||||
|
@ -1570,7 +1578,7 @@ const void *RB_ClearDepth(const void *data)
|
|||
|
||||
if (glRefConfig.framebufferObject)
|
||||
{
|
||||
if (backEnd.framePostProcessed && (backEnd.refdef.rdflags & RDF_NOWORLDMODEL))
|
||||
if (backEnd.framePostProcessed)
|
||||
{
|
||||
FBO_Bind(tr.screenScratchFbo);
|
||||
}
|
||||
|
|
|
@ -661,6 +661,8 @@ void FBO_BlitFromTexture(struct image_s *src, vec4i_t inSrcBox, vec2_t inSrcTexS
|
|||
vec2_t texCoords[4];
|
||||
vec2_t invTexRes;
|
||||
FBO_t *oldFbo = glState.currentFBO;
|
||||
matrix_t projection;
|
||||
int width, height;
|
||||
|
||||
if (!src)
|
||||
return;
|
||||
|
@ -726,11 +728,25 @@ void FBO_BlitFromTexture(struct image_s *src, vec4i_t inSrcBox, vec2_t inSrcTexS
|
|||
|
||||
FBO_Bind(dst);
|
||||
|
||||
RB_SetGL2D();
|
||||
if (glState.currentFBO)
|
||||
{
|
||||
width = glState.currentFBO->width;
|
||||
height = glState.currentFBO->height;
|
||||
}
|
||||
else
|
||||
{
|
||||
width = glConfig.vidWidth;
|
||||
height = glConfig.vidHeight;
|
||||
}
|
||||
|
||||
GL_SelectTexture(TB_COLORMAP);
|
||||
qglViewport( 0, 0, width, height );
|
||||
qglScissor( 0, 0, width, height );
|
||||
|
||||
GL_Bind(src);
|
||||
Matrix16Ortho(0, width, height, 0, 0, 1, projection);
|
||||
|
||||
qglDisable( GL_CULL_FACE );
|
||||
|
||||
GL_BindToTMU(src, TB_COLORMAP);
|
||||
|
||||
VectorSet4(quadVerts[0], dstBox[0], dstBox[1], 0, 1);
|
||||
VectorSet4(quadVerts[1], dstBox[2], dstBox[1], 0, 1);
|
||||
|
@ -749,7 +765,7 @@ void FBO_BlitFromTexture(struct image_s *src, vec4i_t inSrcBox, vec2_t inSrcTexS
|
|||
|
||||
GLSL_BindProgram(shaderProgram);
|
||||
|
||||
GLSL_SetUniformMatrix16(shaderProgram, TEXTURECOLOR_UNIFORM_MODELVIEWPROJECTIONMATRIX, glState.modelviewProjection);
|
||||
GLSL_SetUniformMatrix16(shaderProgram, TEXTURECOLOR_UNIFORM_MODELVIEWPROJECTIONMATRIX, projection);
|
||||
GLSL_SetUniformVec4(shaderProgram, TEXTURECOLOR_UNIFORM_COLOR, color);
|
||||
GLSL_SetUniformVec2(shaderProgram, TEXTURECOLOR_UNIFORM_INVTEXRES, invTexRes);
|
||||
GLSL_SetUniformVec2(shaderProgram, TEXTURECOLOR_UNIFORM_AUTOEXPOSUREMINMAX, tr.refdef.autoExposureMinMax);
|
||||
|
|
|
@ -507,11 +507,6 @@ void RE_RenderScene( const refdef_t *fd ) {
|
|||
|
||||
parms.stereoFrame = tr.refdef.stereoFrame;
|
||||
|
||||
if (glRefConfig.framebufferObject)
|
||||
{
|
||||
parms.targetFbo = tr.renderFbo;
|
||||
}
|
||||
|
||||
VectorCopy( fd->vieworg, parms.or.origin );
|
||||
VectorCopy( fd->viewaxis[0], parms.or.axis[0] );
|
||||
VectorCopy( fd->viewaxis[1], parms.or.axis[1] );
|
||||
|
|
Loading…
Reference in a new issue