mirror of
https://github.com/blawar/GLideN64.git
synced 2024-07-04 10:03:36 +00:00
Correct texture coordinates calculation in OGLRender::drawTexturedRect :
add dsdx/dtdy instead of 1.0f Fixed issues #27, #128, #209
This commit is contained in:
parent
bbf8ad91e6
commit
4484bb5623
|
@ -932,7 +932,7 @@ void FrameBufferList::renderBuffer(u32 _address)
|
|||
|
||||
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
||||
|
||||
OGLRender::TexturedRectParams params(0.0f, 0.0f, width, height, 0.0f, 0.0f, width - 1.0f, height - 1.0f, false, false, pFilteredBuffer);
|
||||
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, pFilteredBuffer);
|
||||
ogl.getRender().drawTexturedRect(params);
|
||||
|
||||
glBindFramebuffer(GL_READ_FRAMEBUFFER, 0);
|
||||
|
@ -1782,7 +1782,7 @@ void RDRAMtoFrameBuffer::CopyFromRDRAM(u32 _address, bool _bCFB)
|
|||
|
||||
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, m_pCurBuffer->m_FBO);
|
||||
OGLRender::TexturedRectParams params((float)x0, (float)y0, (float)width, (float)height,
|
||||
0.0f, 0.0f, width - 1.0f, height - 1.0f,
|
||||
0.0f, 0.0f, width - 1.0f, height - 1.0f, 1.0f, 1.0f,
|
||||
false, true, m_pCurBuffer);
|
||||
video().getRender().drawTexturedRect(params);
|
||||
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, frameBufferList().getCurrent()->m_FBO);
|
||||
|
|
|
@ -1147,18 +1147,18 @@ void OGLRender::drawTexturedRect(const TexturedRectParams & _params)
|
|||
f32 shiftScaleT = 1.0f;
|
||||
getTextureShiftScale(t, cache, shiftScaleS, shiftScaleT);
|
||||
if (_params.uls > _params.lrs) {
|
||||
texST[t].s0 = (_params.uls + 1.0f) * shiftScaleS - gSP.textureTile[t]->fuls;
|
||||
texST[t].s0 = (_params.uls + _params.dsdx) * shiftScaleS - gSP.textureTile[t]->fuls;
|
||||
texST[t].s1 = _params.lrs * shiftScaleS - gSP.textureTile[t]->fuls;
|
||||
} else {
|
||||
texST[t].s0 = _params.uls * shiftScaleS - gSP.textureTile[t]->fuls;
|
||||
texST[t].s1 = (_params.lrs + 1.0f) * shiftScaleS - gSP.textureTile[t]->fuls;
|
||||
texST[t].s1 = (_params.lrs + _params.dsdx) * shiftScaleS - gSP.textureTile[t]->fuls;
|
||||
}
|
||||
if (_params.ult > _params.lrt) {
|
||||
texST[t].t0 = (_params.ult + 1.0f) * shiftScaleT - gSP.textureTile[t]->fult;
|
||||
texST[t].t0 = (_params.ult + _params.dtdy) * shiftScaleT - gSP.textureTile[t]->fult;
|
||||
texST[t].t1 = _params.lrt * shiftScaleT - gSP.textureTile[t]->fult;
|
||||
} else {
|
||||
texST[t].t0 = _params.ult * shiftScaleT - gSP.textureTile[t]->fult;
|
||||
texST[t].t1 = (_params.lrt + 1.0f) * shiftScaleT - gSP.textureTile[t]->fult;
|
||||
texST[t].t1 = (_params.lrt + _params.dtdy) * shiftScaleT - gSP.textureTile[t]->fult;
|
||||
}
|
||||
|
||||
if (cache.current[t]->frameBufferTexture) {
|
||||
|
|
|
@ -86,13 +86,16 @@ public:
|
|||
{
|
||||
float ulx, uly, lrx, lry;
|
||||
float uls, ult, lrs, lrt;
|
||||
float dsdx, dtdy;
|
||||
bool flip, forceAjustScale;
|
||||
const FrameBuffer * pBuffer;
|
||||
TexturedRectParams(float _ulx, float _uly, float _lrx, float _lry,
|
||||
float _uls, float _ult, float _lrs, float _lrt,
|
||||
float _dsdx, float _dtdy,
|
||||
bool _flip, bool _forceAjustScale, const FrameBuffer * _pBuffer) :
|
||||
ulx(_ulx), uly(_uly), lrx(_lrx), lry(_lry),
|
||||
uls(_uls), ult(_ult), lrs(_lrs), lrt(_lrt),
|
||||
dsdx(_dsdx), dtdy(_dtdy),
|
||||
flip(_flip), forceAjustScale(_forceAjustScale), pBuffer(_pBuffer)
|
||||
{}
|
||||
};
|
||||
|
|
|
@ -867,7 +867,8 @@ void gDPTextureRectangle( f32 ulx, f32 uly, f32 lrx, f32 lry, s32 tile, f32 s, f
|
|||
lrt = t + (lry - uly - 1) * dtdy;
|
||||
}
|
||||
|
||||
OGLRender::TexturedRectParams params(ulx, uly, lrx, lry, s, t, lrs, lrt, (RSP.cmd == G_TEXRECTFLIP), false, frameBufferList().getCurrent());
|
||||
OGLRender::TexturedRectParams params(ulx, uly, lrx, lry, s, t, lrs, lrt, fabsf(dsdx), fabsf(dtdy),
|
||||
(RSP.cmd == G_TEXRECTFLIP), false, frameBufferList().getCurrent());
|
||||
video().getRender().drawTexturedRect(params);
|
||||
|
||||
gSP.textureTile[0] = textureTileOrg[0];
|
||||
|
|
Loading…
Reference in New Issue
Block a user