mirror of
https://github.com/blawar/GLideN64.git
synced 2024-07-07 03:13:49 +00:00
Fix scissor related problems:
- scissor dissable/enable in FrameBuffer_RenderBuffer() - scissor height in OGL_UpdateStates()
This commit is contained in:
parent
8f9584440e
commit
92eb61572e
|
@ -454,6 +454,9 @@ void FrameBuffer_RenderBuffer( u32 address )
|
||||||
dstY1 -= partHeight;
|
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_READ_FRAMEBUFFER, current->fbo);
|
||||||
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
|
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
|
||||||
//glDrawBuffer( GL_BACK );
|
//glDrawBuffer( GL_BACK );
|
||||||
|
@ -480,9 +483,11 @@ void FrameBuffer_RenderBuffer( u32 address )
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
glEnable(GL_SCISSOR_TEST);
|
||||||
glBindFramebuffer(GL_READ_FRAMEBUFFER, 0);
|
glBindFramebuffer(GL_READ_FRAMEBUFFER, 0);
|
||||||
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, frameBuffer.top->fbo);
|
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, frameBuffer.top->fbo);
|
||||||
OGL_SwapBuffers();
|
OGL_SwapBuffers();
|
||||||
|
gDP.changed |= CHANGED_SCISSOR;
|
||||||
}
|
}
|
||||||
#else
|
#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_DrawTexturedRect( 0.0f, 0.0f, width, height, 0.0f, 0.0f, width-1.0f, height-1.0f, false );
|
||||||
OGL_SwapBuffers();
|
OGL_SwapBuffers();
|
||||||
frameBuffer.drawBuffer = GL_FRAMEBUFFER;
|
frameBuffer.drawBuffer = GL_FRAMEBUFFER;
|
||||||
|
glEnable(GL_SCISSOR_TEST);
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, frameBuffer.top->fbo);
|
glBindFramebuffer(GL_FRAMEBUFFER, frameBuffer.top->fbo);
|
||||||
gSP.changed |= CHANGED_TEXTURE | CHANGED_VIEWPORT;
|
gSP.changed |= CHANGED_TEXTURE | CHANGED_VIEWPORT;
|
||||||
gDP.changed |= CHANGED_COMBINE;
|
gDP.changed |= CHANGED_COMBINE;
|
||||||
|
|
|
@ -796,7 +796,7 @@ void OGL_UpdateStates()
|
||||||
|
|
||||||
if (gDP.changed & CHANGED_SCISSOR)
|
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),
|
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 );
|
(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();
|
DepthBuffer_ClearBuffer();
|
||||||
|
|
||||||
glDisable( GL_SCISSOR_TEST );
|
|
||||||
|
|
||||||
OGL_UpdateStates();
|
OGL_UpdateStates();
|
||||||
|
glDisable( GL_SCISSOR_TEST );
|
||||||
glDepthMask( TRUE );
|
glDepthMask( TRUE );
|
||||||
glClear( GL_DEPTH_BUFFER_BIT );
|
glClear( GL_DEPTH_BUFFER_BIT );
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user