diff --git a/FrameBuffer.cpp b/FrameBuffer.cpp index 4c13223c..90697ddc 100644 --- a/FrameBuffer.cpp +++ b/FrameBuffer.cpp @@ -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; diff --git a/OpenGL.cpp b/OpenGL.cpp index 8959ffb6..2a7be7d9 100644 --- a/OpenGL.cpp +++ b/OpenGL.cpp @@ -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 );