1
0
mirror of https://github.com/blawar/GLideN64.git synced 2024-07-02 09:03:37 +00:00

Fix rendering in widescreen resolutions when fb emulation disabled, #1700

This commit is contained in:
Sergey Lipskiy 2018-01-05 15:27:19 +07:00
parent 210315ec46
commit 9b2f50ca67
2 changed files with 23 additions and 15 deletions

View File

@ -854,11 +854,16 @@ void FrameBufferList::_renderScreenSizeBuffer()
FrameBuffer * pFilteredBuffer = postProcessor.doGammaCorrection(postProcessor.doOrientationCorrection(pBuffer));
CachedTexture * pBufferTexture = pFilteredBuffer->m_pTexture;
const u32 wndWidth = wnd.getWidth();
const u32 wndHeight = wnd.getHeight();
s32 srcCoord[4] = { 0, 0, static_cast<s32>(wndWidth), static_cast<s32>(wndHeight) };
s32 srcCoord[4] = { 0, 0, pBufferTexture->realWidth, pBufferTexture->realHeight };
const s32 hOffset = (wnd.getScreenWidth() - wnd.getWidth()) / 2;
const s32 vOffset = (wnd.getScreenHeight() - wnd.getHeight()) / 2 + wnd.getHeightOffset();
s32 dstCoord[4] = { hOffset, vOffset, hOffset + pBufferTexture->realWidth, vOffset + pBufferTexture->realHeight };
const u32 screenWidth = wnd.getScreenWidth();
const u32 screenHeight = wnd.getScreenHeight();
const u32 wndHeightOffset = wnd.getHeightOffset();
const s32 hOffset = (screenWidth - wndWidth) / 2;
const s32 vOffset = (screenHeight - wndHeight) / 2 + wndHeightOffset;
s32 dstCoord[4] = { hOffset, vOffset, hOffset + static_cast<s32>(wndWidth), vOffset + static_cast<s32>(wndHeight) };
gfxContext.bindFramebuffer(bufferTarget::DRAW_FRAMEBUFFER, ObjectHandle::null);
@ -872,14 +877,14 @@ void FrameBufferList::_renderScreenSizeBuffer()
blitParams.srcY0 = srcCoord[3];
blitParams.srcX1 = srcCoord[2];
blitParams.srcY1 = srcCoord[1];
blitParams.srcWidth = pBufferTexture->realWidth;
blitParams.srcHeight = pBufferTexture->realHeight;
blitParams.srcWidth = wndWidth;
blitParams.srcHeight = wndHeight;
blitParams.dstX0 = dstCoord[0];
blitParams.dstY0 = dstCoord[1];
blitParams.dstX1 = dstCoord[2];
blitParams.dstY1 = dstCoord[3];
blitParams.dstWidth = wnd.getScreenWidth();
blitParams.dstHeight = wnd.getScreenHeight() + wnd.getHeightOffset();
blitParams.dstWidth = screenWidth;
blitParams.dstHeight = screenHeight + wndHeightOffset;
blitParams.filter = filter;
blitParams.mask = blitMask::COLOR_BUFFER;
blitParams.tex[0] = pBufferTexture;

View File

@ -258,19 +258,22 @@ void GraphicsDrawer::_updateViewport() const
void GraphicsDrawer::_updateScreenCoordsViewport() const
{
DisplayWindow & wnd = DisplayWindow::get();
FrameBuffer * pCurrentBuffer = frameBufferList().getCurrent();
const FrameBuffer * pCurrentBuffer = frameBufferList().getCurrent();
u32 bufferWidth;
f32 viewportScale;
u32 bufferWidth, bufferHeight;
f32 viewportScaleX, viewportScaleY;
if (pCurrentBuffer == nullptr) {
bufferWidth = VI.width;
viewportScale = wnd.getScaleX();
bufferHeight = VI.height;
viewportScaleX = wnd.getScaleX();
viewportScaleY = wnd.getScaleY();
} else {
bufferWidth = pCurrentBuffer->m_width;
viewportScale = pCurrentBuffer->m_scale;
bufferHeight = VI_GetMaxBufferHeight(bufferWidth);
viewportScaleX = viewportScaleY = pCurrentBuffer->m_scale;
}
const u32 bufferHeight = VI_GetMaxBufferHeight(bufferWidth);
gfxContext.setViewport(0, 0, (s32)(bufferWidth * viewportScale), (s32)(bufferHeight * viewportScale));
gfxContext.setViewport(0, 0, (s32)(bufferWidth * viewportScaleX), (s32)(bufferHeight * viewportScaleY));
gSP.changed |= CHANGED_VIEWPORT;
}