1
0
mirror of https://github.com/blawar/GLideN64.git synced 2024-07-04 10:03:36 +00:00

Use OGLRender::copyTexturedRect in FrameBuffer::renderBuffer

Remove GLES2-specific code.
This commit is contained in:
Sergey Lipskiy 2016-06-23 16:14:04 +06:00
parent 4cb53d9675
commit 7ad11627d6

View File

@ -764,7 +764,6 @@ void FrameBuffer_Destroy()
frameBufferList().destroy();
}
#ifndef GLES2
void FrameBufferList::renderBuffer(u32 _address)
{
static s32 vStartPrev = 0;
@ -866,7 +865,6 @@ void FrameBufferList::renderBuffer(u32 _address)
(srcCoord[3] - srcCoord[1]) != (dstCoord[3] - dstCoord[1])) {
pFilteredBuffer->resolveMultisampledTexture(true);
glBindFramebuffer(GL_READ_FRAMEBUFFER, pFilteredBuffer->m_resolveFBO);
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
} else {
glBindFramebuffer(GL_READ_FRAMEBUFFER, pFilteredBuffer->m_FBO);
filter = GL_NEAREST;
@ -874,14 +872,12 @@ void FrameBufferList::renderBuffer(u32 _address)
} else
glBindFramebuffer(GL_READ_FRAMEBUFFER, pFilteredBuffer->m_FBO);
// glDisable(GL_SCISSOR_TEST) does not affect glBlitFramebuffer, at least on AMD
glScissor(0, 0, ogl.getScreenWidth(), ogl.getScreenHeight() + ogl.getHeightOffset());
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
glBlitFramebuffer(
srcCoord[0], srcCoord[1], srcCoord[2], srcCoord[3],
dstCoord[0], dstCoord[1], dstCoord[2], dstCoord[3],
GL_COLOR_BUFFER_BIT, filter
);
ogl.getRender().copyTexturedRect(srcCoord[0], srcCoord[1], srcCoord[2], srcCoord[3],
pBufferTexture->realWidth, pBufferTexture->realHeight, pBufferTexture->glName,
dstCoord[0], dstCoord[1], dstCoord[2], dstCoord[3],
ogl.getScreenWidth(), ogl.getScreenHeight() + ogl.getHeightOffset(), filter);
if (dstPartHeight > 0) {
const u32 size = *REG.VI_STATUS & 3;
@ -895,14 +891,16 @@ void FrameBufferList::renderBuffer(u32 _address)
if (pFilteredBuffer->m_pTexture->frameBufferTexture == CachedTexture::fbMultiSample) {
pFilteredBuffer->resolveMultisampledTexture();
glBindFramebuffer(GL_READ_FRAMEBUFFER, pFilteredBuffer->m_resolveFBO);
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
} else
glBindFramebuffer(GL_READ_FRAMEBUFFER, pFilteredBuffer->m_FBO);
glBlitFramebuffer(
0, (GLint)(srcY0*srcScaleY), Xwidth, min((GLint)(srcY1*srcScaleY), (GLint)pFilteredBuffer->m_pTexture->realHeight),
hOffset, vOffset + (GLint)(dstY0*dstScaleY), hOffset + X1, vOffset + (GLint)(dstY1*dstScaleY),
GL_COLOR_BUFFER_BIT, filter
);
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
pBufferTexture = pFilteredBuffer->m_pTexture;
ogl.getRender().copyTexturedRect(0, (GLint)(srcY0*srcScaleY), Xwidth, min((GLint)(srcY1*srcScaleY), (GLint)pFilteredBuffer->m_pTexture->realHeight),
pBufferTexture->realWidth, pBufferTexture->realHeight, pBufferTexture->glName,
hOffset, vOffset + (GLint)(dstY0*dstScaleY), hOffset + X1, vOffset + (GLint)(dstY1*dstScaleY),
ogl.getScreenWidth(), ogl.getScreenHeight() + ogl.getHeightOffset(), filter);
}
}
@ -912,62 +910,6 @@ void FrameBufferList::renderBuffer(u32 _address)
ogl.swapBuffers();
gDP.changed |= CHANGED_SCISSOR;
}
#else
void FrameBufferList::renderBuffer(u32 _address)
{
if (VI.width == 0 || *REG.VI_WIDTH == 0 || *REG.VI_H_START == 0) // H width is zero. Don't draw
return;
FrameBuffer *pBuffer = findBuffer(_address);
if (pBuffer == nullptr)
return;
OGLVideo & ogl = video();
ogl.getRender().updateScissor(pBuffer);
FrameBuffer * pFilteredBuffer = PostProcessor::get().doBlur(PostProcessor::get().doGammaCorrection(pBuffer));
ogl.getRender().dropRenderState();
const u32 width = pFilteredBuffer->m_width;
const u32 height = pFilteredBuffer->m_height;
pFilteredBuffer->m_pTexture->scaleS = ogl.getScaleX() / (float)pFilteredBuffer->m_pTexture->realWidth;
pFilteredBuffer->m_pTexture->scaleT = ogl.getScaleY() / (float)pFilteredBuffer->m_pTexture->realHeight;
pFilteredBuffer->m_pTexture->shiftScaleS = 1.0f;
pFilteredBuffer->m_pTexture->shiftScaleT = 1.0f;
pFilteredBuffer->m_pTexture->offsetS = 0;
pFilteredBuffer->m_pTexture->offsetT = (float)height;
textureCache().activateTexture(0, pFilteredBuffer->m_pTexture);
gSP.textureTile[0]->fuls = gSP.textureTile[0]->fult = 0.0f;
gSP.textureTile[0]->shifts = gSP.textureTile[0]->shiftt = 0;
gDP.otherMode.cycleType = G_CYC_COPY;
CombinerInfo::get().setCombine(EncodeCombineMode(0, 0, 0, TEXEL0, 0, 0, 0, TEXEL0, 0, 0, 0, TEXEL0, 0, 0, 0, TEXEL0));
CombinerInfo::get().updateParameters(OGLRender::rsTexRect);
currentCombiner()->disableBlending();
glDisable( GL_BLEND );
glDisable(GL_DEPTH_TEST);
glDisable( GL_CULL_FACE );
glDisable( GL_POLYGON_OFFSET_FILL );
glScissor(0, 0, ogl.getScreenWidth(), ogl.getScreenHeight() + ogl.getHeightOffset());
glBindFramebuffer(GL_FRAMEBUFFER, 0);
OGLRender::TexturedRectParams params(0.0f, 0.0f, width, height, 0.0f, 0.0f, width - 1.0f, height - 1.0f, 1.0f, 1.0f, false, false, false, pFilteredBuffer);
ogl.getRender().drawTexturedRect(params);
glBindFramebuffer(GL_READ_FRAMEBUFFER, 0);
if (m_pCurrent != nullptr)
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, m_pCurrent->m_FBO);
ogl.swapBuffers();
gSP.changed |= CHANGED_VIEWPORT;
gDP.changed |= CHANGED_COMBINE | CHANGED_SCISSOR;
}
#endif
void FrameBuffer_ActivateBufferTexture(u32 t, FrameBuffer *pBuffer)
{