diff --git a/src/FrameBuffer.cpp b/src/FrameBuffer.cpp index 6ab7ffd4..9b480e19 100644 --- a/src/FrameBuffer.cpp +++ b/src/FrameBuffer.cpp @@ -518,6 +518,8 @@ void FrameBufferList::setCurrentDrawBuffer() const { if (m_pCurrent != nullptr) gfxContext.bindFramebuffer(bufferTarget::DRAW_FRAMEBUFFER, m_pCurrent->m_FBO); + else if (!m_list.empty()) + gfxContext.bindFramebuffer(bufferTarget::DRAW_FRAMEBUFFER, m_list.back().m_FBO); } FrameBuffer * FrameBufferList::findBuffer(u32 _startAddress) diff --git a/src/TexrectDrawer.cpp b/src/TexrectDrawer.cpp index 042cc051..0550e4b8 100644 --- a/src/TexrectDrawer.cpp +++ b/src/TexrectDrawer.cpp @@ -104,6 +104,14 @@ void TexrectDrawer::_setViewport() const gfxContext.setViewport(0, 0, bufferWidth, VI_GetMaxBufferHeight(bufferWidth)); } +void TexrectDrawer::_setDrawBuffer() +{ + if (m_pBuffer != nullptr) + gfxContext.bindFramebuffer(bufferTarget::DRAW_FRAMEBUFFER, m_pBuffer->m_FBO); + else + frameBufferList().setCurrentDrawBuffer(); +} + void TexrectDrawer::add() { DisplayWindow & wnd = dwnd(); @@ -278,7 +286,7 @@ bool TexrectDrawer::draw() rect[3].t0 = t1; drawer.updateScissor(m_pBuffer); - gfxContext.bindFramebuffer(bufferTarget::DRAW_FRAMEBUFFER, m_pBuffer != nullptr ? m_pBuffer->m_FBO : ObjectHandle::null); + _setDrawBuffer(); Context::DrawRectParameters rectParams; rectParams.mode = drawmode::TRIANGLE_STRIP; @@ -313,7 +321,7 @@ bool TexrectDrawer::draw() gfxContext.enable(enable::SCISSOR_TEST, true); m_pBuffer = frameBufferList().getCurrent(); - gfxContext.bindFramebuffer(bufferTarget::DRAW_FRAMEBUFFER, m_pBuffer != nullptr ? m_pBuffer->m_FBO : ObjectHandle::null); + _setDrawBuffer(); m_numRects = 0; m_vecRectCoords.clear(); diff --git a/src/TexrectDrawer.h b/src/TexrectDrawer.h index 87d72ca4..3a5bbd88 100644 --- a/src/TexrectDrawer.h +++ b/src/TexrectDrawer.h @@ -24,6 +24,7 @@ public: private: void _setViewport() const; + void _setDrawBuffer(); u32 m_numRects; u64 m_otherMode;