gsp: Fix setbufferswap framebuffer selection

This commit is contained in:
GPUCode 2023-08-09 11:49:19 +03:00
parent ca3c2550f2
commit 9417c75ca7
3 changed files with 11 additions and 8 deletions

View file

@ -462,13 +462,17 @@ void RendererGL::display() {
gl.disableClipPlane(1);
using namespace PICA::ExternalRegs;
const u32 topScreenAddr = externalRegs[Framebuffer0AFirstAddr];
const u32 bottomScreenAddr = externalRegs[Framebuffer1AFirstAddr];
const u32 topActiveFb = externalRegs[Framebuffer0Select] & 1;
const u32 topScreenAddr = externalRegs[topActiveFb == 0 ? Framebuffer0AFirstAddr : Framebuffer0ASecondAddr];
const u32 bottomActiveFb = externalRegs[Framebuffer1Select] & 1;
const u32 bottomScreenAddr = externalRegs[bottomActiveFb == 0 ? Framebuffer1AFirstAddr : Framebuffer1ASecondAddr];
auto topScreen = colourBufferCache.findFromAddress(topScreenAddr);
auto bottomScreen = colourBufferCache.findFromAddress(bottomScreenAddr);
screenFramebuffer.bind(OpenGL::DrawFramebuffer);
OpenGL::clearColor();
if (topScreen) {
topScreen->get().texture.bind();
OpenGL::setViewport(0, 240, 400, 240); // Top screen viewport