From 8343fd05c9a01ce2d73f7e32bb8355036759a05b Mon Sep 17 00:00:00 2001 From: Sergey Lipskiy Date: Tue, 21 Dec 2021 00:54:17 +0700 Subject: [PATCH] Restore logic for uTexOffset uniform. fixed #2621 Mario tennis broken shadows in accurate path --- ..._CombinerProgramUniformFactoryAccurate.cpp | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/Graphics/OpenGLContext/GLSL/glsl_CombinerProgramUniformFactoryAccurate.cpp b/src/Graphics/OpenGLContext/GLSL/glsl_CombinerProgramUniformFactoryAccurate.cpp index 9cb64616..c85e8736 100644 --- a/src/Graphics/OpenGLContext/GLSL/glsl_CombinerProgramUniformFactoryAccurate.cpp +++ b/src/Graphics/OpenGLContext/GLSL/glsl_CombinerProgramUniformFactoryAccurate.cpp @@ -1,6 +1,7 @@ #include "glsl_CombinerProgramUniformFactoryAccurate.h" #include +#include #include #include #include @@ -249,7 +250,7 @@ public: if (!m_useTile[t]) continue; - const gDPTile * pTile = gSP.textureTile[t]; + gDPTile * pTile = gSP.textureTile[t]; CachedTexture * pTexture = cache.current[t]; if (pTile == nullptr || pTexture == nullptr) continue; @@ -261,8 +262,21 @@ public: aShiftScale[t][1] = calcShiftScaleT(*pTile); if (pTile->textureMode != TEXTUREMODE_BGIMAGE && pTile->textureMode != TEXTUREMODE_FRAMEBUFFER_BG) { - aTexOffset[t][0] = pTile->fuls; - aTexOffset[t][1] = pTile->fult; + float fuls = pTile->fuls; + float fult = pTile->fult; + if (pTile->frameBufferAddress > 0u) { + FrameBuffer * pBuffer = frameBufferList().getBuffer(pTile->frameBufferAddress); + if (pBuffer != nullptr) { + if (pTile->masks > 0 && pTile->clamps == 0u) + fuls = float(pTile->uls % (1 << pTile->masks)); + if (pTile->maskt > 0 && pTile->clampt == 0u) + fult = float(pTile->ult % (1 << pTile->maskt)); + } else { + pTile->frameBufferAddress = 0u; + } + } + aTexOffset[t][0] = fuls; + aTexOffset[t][1] = fult; } aHDRatio[t][0] = pTexture->hdRatioS;