1
0
mirror of https://github.com/blawar/GLideN64.git synced 2024-07-02 09:03:37 +00:00

Fix scissor related problems:

- scissor dissable/enable in FrameBuffer_RenderBuffer()
- scissor height in OGL_UpdateStates()
This commit is contained in:
Sergey Lipskiy 2014-06-09 11:26:43 +07:00
parent 8f9584440e
commit 92eb61572e
2 changed files with 8 additions and 3 deletions

View File

@ -454,6 +454,9 @@ void FrameBuffer_RenderBuffer( u32 address )
dstY1 -= partHeight;
}
// glDisable(GL_SCISSOR_TEST) does not affect glBlitFramebuffer, at least on AMD
glScissor( 0, 0, OGL.width, OGL.height );
glDisable(GL_SCISSOR_TEST);
glBindFramebuffer(GL_READ_FRAMEBUFFER, current->fbo);
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
//glDrawBuffer( GL_BACK );
@ -480,9 +483,11 @@ void FrameBuffer_RenderBuffer( u32 address )
);
}
}
glEnable(GL_SCISSOR_TEST);
glBindFramebuffer(GL_READ_FRAMEBUFFER, 0);
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, frameBuffer.top->fbo);
OGL_SwapBuffers();
gDP.changed |= CHANGED_SCISSOR;
}
#else
@ -520,6 +525,7 @@ void FrameBuffer_RenderBuffer( u32 address )
OGL_DrawTexturedRect( 0.0f, 0.0f, width, height, 0.0f, 0.0f, width-1.0f, height-1.0f, false );
OGL_SwapBuffers();
frameBuffer.drawBuffer = GL_FRAMEBUFFER;
glEnable(GL_SCISSOR_TEST);
glBindFramebuffer(GL_FRAMEBUFFER, frameBuffer.top->fbo);
gSP.changed |= CHANGED_TEXTURE | CHANGED_VIEWPORT;
gDP.changed |= CHANGED_COMBINE;

View File

@ -796,7 +796,7 @@ void OGL_UpdateStates()
if (gDP.changed & CHANGED_SCISSOR)
{
const u32 screenHeight = (frameBuffer.top == NULL || frameBuffer.drawBuffer == GL_BACK) ? VI.height : frameBuffer.top->height;
const u32 screenHeight = (frameBuffer.top == NULL || frameBuffer.top->height == 0 || frameBuffer.drawBuffer == GL_BACK) ? VI.height : frameBuffer.top->height;
glScissor( gDP.scissor.ulx * OGL.scaleX, (screenHeight - gDP.scissor.lry) * OGL.scaleY + (frameBuffer.drawBuffer == GL_BACK ? OGL.heightOffset : 0),
(gDP.scissor.lrx - gDP.scissor.ulx) * OGL.scaleX, (gDP.scissor.lry - gDP.scissor.uly) * OGL.scaleY );
}
@ -1206,9 +1206,8 @@ void OGL_ClearDepthBuffer()
DepthBuffer_ClearBuffer();
glDisable( GL_SCISSOR_TEST );
OGL_UpdateStates();
glDisable( GL_SCISSOR_TEST );
glDepthMask( TRUE );
glClear( GL_DEPTH_BUFFER_BIT );