From 7b3e700eedd45bc39e702118192c2a50ccc21e94 Mon Sep 17 00:00:00 2001 From: Sergey Lipskiy Date: Thu, 9 Mar 2017 21:54:37 +0700 Subject: [PATCH] Fix FrameBufferList::renderBuffer() when MSAA enabled. --- src/FrameBuffer.cpp | 26 +++++++++----------------- 1 file changed, 9 insertions(+), 17 deletions(-) diff --git a/src/FrameBuffer.cpp b/src/FrameBuffer.cpp index 0f6dab3b..75ffcf79 100644 --- a/src/FrameBuffer.cpp +++ b/src/FrameBuffer.cpp @@ -1081,29 +1081,21 @@ void FrameBufferList::renderBuffer() hOffset + dstX1, vOffset + (s32)(dstY1*dstScaleY) }; - gfxContext.bindFramebuffer(bufferTarget::DRAW_FRAMEBUFFER, ObjectHandle::null); - - float clearColor[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; - drawer.clearColorBuffer(clearColor); - - TextureParam filter = textureParameters::FILTER_LINEAR; ObjectHandle readBuffer; if (pFilteredBuffer->m_pTexture->frameBufferTexture == CachedTexture::fbMultiSample) { - if (dstX0 > 0 || dstPartHeight > 0 || - (srcCoord[2] - srcCoord[0]) != (dstCoord[2] - dstCoord[0]) || - (srcCoord[3] - srcCoord[1]) != (dstCoord[3] - dstCoord[1])) { - pFilteredBuffer->resolveMultisampledTexture(true); - readBuffer = pFilteredBuffer->m_resolveFBO; - } else { - readBuffer = pFilteredBuffer->m_FBO; - filter = textureParameters::FILTER_NEAREST; - } + pFilteredBuffer->resolveMultisampledTexture(true); + readBuffer = pFilteredBuffer->m_resolveFBO; + pBufferTexture = pFilteredBuffer->m_pResolveTexture; } else { readBuffer = pFilteredBuffer->m_FBO; } + gfxContext.bindFramebuffer(bufferTarget::DRAW_FRAMEBUFFER, ObjectHandle::null); + float clearColor[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; + drawer.clearColorBuffer(clearColor); + GraphicsDrawer::BlitOrCopyRectParams blitParams; blitParams.srcX0 = srcCoord[0]; blitParams.srcY0 = srcCoord[1]; @@ -1138,12 +1130,12 @@ void FrameBufferList::renderBuffer() if (pFilteredBuffer->m_pTexture->frameBufferTexture == CachedTexture::fbMultiSample) { pFilteredBuffer->resolveMultisampledTexture(); readBuffer = pFilteredBuffer->m_resolveFBO; + pBufferTexture = pFilteredBuffer->m_pResolveTexture; } else { readBuffer = pFilteredBuffer->m_FBO; + pBufferTexture = pFilteredBuffer->m_pTexture; } - pBufferTexture = pFilteredBuffer->m_pTexture; - blitParams.srcY0 = 0; blitParams.srcY1 = min((s32)(srcY1*srcScaleY), (s32)pFilteredBuffer->m_pTexture->realHeight); blitParams.srcWidth = pBufferTexture->realWidth;