From 4aa7fe9fc26a738cfe0207ebce05639100f98829 Mon Sep 17 00:00:00 2001 From: s2s <12202580+standard-two-simplex@users.noreply.github.com> Date: Tue, 6 Apr 2021 18:57:56 +0200 Subject: [PATCH] Change heuristic to render texture rectangles --- .../GLSL/glsl_CombinerProgramBuilder.cpp | 6 ++--- .../glsl_CombinerProgramUniformFactory.cpp | 22 ++++++++++--------- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/src/Graphics/OpenGLContext/GLSL/glsl_CombinerProgramBuilder.cpp b/src/Graphics/OpenGLContext/GLSL/glsl_CombinerProgramBuilder.cpp index 15556183..5d1c8860 100644 --- a/src/Graphics/OpenGLContext/GLSL/glsl_CombinerProgramBuilder.cpp +++ b/src/Graphics/OpenGLContext/GLSL/glsl_CombinerProgramBuilder.cpp @@ -957,7 +957,7 @@ public: "uniform lowp vec2 uTexMirrorEn1; \n" "uniform lowp vec2 uTexClampEn0; \n" "uniform lowp vec2 uTexClampEn1; \n" - "uniform highp vec2 uTexCoordOffset; \n" + "uniform highp vec2 uTexCoordOffset[2]; \n" "uniform lowp int uUseTexCoordBounds; \n" "uniform highp vec4 uTexCoordBounds0; \n" "uniform highp vec4 uTexCoordBounds1; \n" @@ -2596,8 +2596,8 @@ public: m_part += " highp vec2 mTexCoord0 = vTexCoord0 + vec2(0.0001); \n" " highp vec2 mTexCoord1 = vTexCoord1 + vec2(0.0001); \n" - " mTexCoord0 += uTexCoordOffset; \n" - " mTexCoord1 += uTexCoordOffset; \n" + " mTexCoord0 += uTexCoordOffset[0]; \n" + " mTexCoord1 += uTexCoordOffset[1]; \n" " if (uUseTexCoordBounds != 0) { \n" " mTexCoord0 = clamp(mTexCoord0, uTexCoordBounds0.xy, uTexCoordBounds0.zw); \n" " mTexCoord1 = clamp(mTexCoord1, uTexCoordBounds1.xy, uTexCoordBounds1.zw); \n" diff --git a/src/Graphics/OpenGLContext/GLSL/glsl_CombinerProgramUniformFactory.cpp b/src/Graphics/OpenGLContext/GLSL/glsl_CombinerProgramUniformFactory.cpp index c6ece785..1b8b02bd 100644 --- a/src/Graphics/OpenGLContext/GLSL/glsl_CombinerProgramUniformFactory.cpp +++ b/src/Graphics/OpenGLContext/GLSL/glsl_CombinerProgramUniformFactory.cpp @@ -221,7 +221,8 @@ class URasterInfo : public UniformGroup { public: URasterInfo(GLuint _program) { LocateUniform(uVertexOffset); - LocateUniform(uTexCoordOffset); + LocateUniform(uTexCoordOffset[0]); + LocateUniform(uTexCoordOffset[1]); LocateUniform(uUseTexCoordBounds); LocateUniform(uTexCoordBounds0); LocateUniform(uTexCoordBounds1); @@ -245,14 +246,14 @@ public: /* effective. Still, an heuristic is applied to render texture rectangles as correctly as possible */ /* in higher resolutions too. See issue #2324 for details. */ const float vertexOffset = isNativeRes ? 0.5f : 0.0f; - float texCoordOffset[2] = { 0.0f, 0.0f }; + float texCoordOffset[2][2] = { 0.0f, 0.0f }; if (isTexRect && !isNativeRes) { - if (gDP.otherMode.textureFilter != G_TF_POINT && gDP.otherMode.cycleType != G_CYC_COPY) { - texCoordOffset[0] = -0.5f * gDP.lastTexRectInfo.dsdx; - texCoordOffset[1] = -0.5f * gDP.lastTexRectInfo.dtdy; - } else { - texCoordOffset[0] = (gDP.lastTexRectInfo.dsdx >= 0.0f ? -0.5f / scale[0] : -1.0f + 0.5f / scale[0]) * gDP.lastTexRectInfo.dsdx; - texCoordOffset[1] = (gDP.lastTexRectInfo.dtdy >= 0.0f ? -0.5f / scale[1] : -1.0f + 0.5f / scale[1]) * gDP.lastTexRectInfo.dtdy; + for (int t = 0; t < 2; t++) { + const CachedTexture* _pTexture = textureCache().current[t]; + if (_pTexture != nullptr) { + texCoordOffset[t][0] = (gDP.lastTexRectInfo.dsdx >= 0.0f ? -0.5f / scale[0] : -1.0f + 0.5f / scale[0]) * gDP.lastTexRectInfo.dsdx * _pTexture->hdRatioS; + texCoordOffset[t][1] = (gDP.lastTexRectInfo.dtdy >= 0.0f ? -0.5f / scale[1] : -1.0f + 0.5f / scale[1]) * gDP.lastTexRectInfo.dtdy * _pTexture->hdRatioT; + } } } float tcbounds[2][4] = {}; @@ -305,7 +306,8 @@ public: } uVertexOffset.set(vertexOffset, vertexOffset, _force); - uTexCoordOffset.set(texCoordOffset[0], texCoordOffset[1], _force); + uTexCoordOffset[0].set(texCoordOffset[0][0], texCoordOffset[0][1], _force); + uTexCoordOffset[1].set(texCoordOffset[1][0], texCoordOffset[1][1], _force); uUseTexCoordBounds.set(useTexCoordBounds ? 1 : 0, _force); uTexCoordBounds0.set(tcbounds[0], _force); uTexCoordBounds1.set(tcbounds[1], _force); @@ -313,7 +315,7 @@ public: private: fv2Uniform uVertexOffset; - fv2Uniform uTexCoordOffset; + fv2Uniform uTexCoordOffset[2]; iUniform uUseTexCoordBounds; fv4Uniform uTexCoordBounds0; fv4Uniform uTexCoordBounds1;