diff --git a/src/FrameBuffer.cpp b/src/FrameBuffer.cpp index 2118a747..0a30d960 100644 --- a/src/FrameBuffer.cpp +++ b/src/FrameBuffer.cpp @@ -900,11 +900,8 @@ void FrameBufferList::renderBuffer(u32 _address) glBindFramebuffer(GL_FRAMEBUFFER, 0); - FrameBuffer * pCurrent = m_pCurrent; - m_pCurrent = pBuffer; - OGLRender::TexturedRectParams params(0.0f, 0.0f, width, height, 0.0f, 0.0f, width - 1.0f, height - 1.0f, false); + OGLRender::TexturedRectParams params(0.0f, 0.0f, width, height, 0.0f, 0.0f, width - 1.0f, height - 1.0f, false, pBuffer); ogl.getRender().drawTexturedRect(params); - m_pCurrent = pCurrent; glBindFramebuffer(GL_READ_FRAMEBUFFER, 0); if (m_pCurrent != NULL) @@ -1734,7 +1731,9 @@ void RDRAMtoFrameBuffer::CopyFromRDRAM(u32 _address, bool _bCFB) gSP.changed = gDP.changed = 0; glBindFramebuffer(GL_DRAW_FRAMEBUFFER, m_pCurBuffer->m_FBO); - OGLRender::TexturedRectParams params((float)x0, (float)y0, (float)width, (float)height, 0.0f, 0.0f, width - 1.0f, height - 1.0f, false); + OGLRender::TexturedRectParams params((float)x0, (float)y0, (float)width, (float)height, + 0.0f, 0.0f, width - 1.0f, height - 1.0f, + false, m_pCurBuffer); video().getRender().drawTexturedRect(params); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, frameBufferList().getCurrent()->m_FBO); diff --git a/src/OpenGL.cpp b/src/OpenGL.cpp index fef0c178..605e4faf 100644 --- a/src/OpenGL.cpp +++ b/src/OpenGL.cpp @@ -1066,7 +1066,7 @@ void OGLRender::drawTexturedRect(const TexturedRectParams & _params) if (!_canDraw()) return; - FrameBuffer * pCurrentBuffer = frameBufferList().getCurrent(); + const FrameBuffer * pCurrentBuffer = _params.pBuffer; OGLVideo & ogl = video(); if (pCurrentBuffer == NULL) glViewport( 0, ogl.getHeightOffset(), ogl.getScreenWidth(), ogl.getScreenHeight()); diff --git a/src/OpenGL.h b/src/OpenGL.h index 2f0ddd20..ba113f9f 100644 --- a/src/OpenGL.h +++ b/src/OpenGL.h @@ -87,8 +87,13 @@ public: float ulx, uly, lrx, lry; float uls, ult, lrs, lrt; bool flip; - TexturedRectParams(float _ulx, float _uly, float _lrx, float _lry, float _uls, float _ult, float _lrs, float _lrt, bool _flip) : - ulx(_ulx), uly(_uly), lrx(_lrx), lry(_lry), uls(_uls), ult(_ult), lrs(_lrs), lrt(_lrt), flip(_flip) + const FrameBuffer * pBuffer; + TexturedRectParams(float _ulx, float _uly, float _lrx, float _lry, + float _uls, float _ult, float _lrs, float _lrt, + bool _flip, const FrameBuffer * _pBuffer) : + ulx(_ulx), uly(_uly), lrx(_lrx), lry(_lry), + uls(_uls), ult(_ult), lrs(_lrs), lrt(_lrt), + flip(_flip), pBuffer(_pBuffer) {} }; void drawTexturedRect(const TexturedRectParams & _params); diff --git a/src/gDP.cpp b/src/gDP.cpp index 1163674b..d3217aad 100644 --- a/src/gDP.cpp +++ b/src/gDP.cpp @@ -848,7 +848,7 @@ void gDPTextureRectangle( f32 ulx, f32 uly, f32 lrx, f32 lry, s32 tile, f32 s, f lrt = t + (lry - uly - 1) * dtdy; } - OGLRender::TexturedRectParams params(ulx, uly, lrx, lry, s, t, lrs, lrt, (RSP.cmd == G_TEXRECTFLIP)); + OGLRender::TexturedRectParams params(ulx, uly, lrx, lry, s, t, lrs, lrt, (RSP.cmd == G_TEXRECTFLIP), frameBufferList().getCurrent()); video().getRender().drawTexturedRect(params); gSP.textureTile[0] = textureTileOrg[0];