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:
parent
4cb53d9675
commit
7ad11627d6
|
@ -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)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue
Block a user