From 0338f272254f58d0940e5421412642027dffdcc7 Mon Sep 17 00:00:00 2001 From: Sergey Lipskiy Date: Mon, 7 Oct 2019 17:25:22 +0700 Subject: [PATCH] Do not shift texture coordinates by 0.5 for point-sampled textures. Attempt to fix texture mapping issue from #2097. --- .../OpenGLContext/GLSL/glsl_CombinerProgramBuilder.cpp | 5 ++++- src/Textures.cpp | 8 ++++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/Graphics/OpenGLContext/GLSL/glsl_CombinerProgramBuilder.cpp b/src/Graphics/OpenGLContext/GLSL/glsl_CombinerProgramBuilder.cpp index 2f631184..b6763d99 100644 --- a/src/Graphics/OpenGLContext/GLSL/glsl_CombinerProgramBuilder.cpp +++ b/src/Graphics/OpenGLContext/GLSL/glsl_CombinerProgramBuilder.cpp @@ -257,6 +257,7 @@ public: "IN highp vec4 aModify; \n" " \n" "uniform int uTexturePersp; \n" + "uniform lowp int uTextureFilterMode; \n" " \n" "uniform lowp int uFogUsage; \n" "uniform mediump vec2 uFogScale; \n" @@ -278,7 +279,9 @@ public: "{ \n" " vec2 texCoordOut = texCoord*uCacheShiftScale[idx]; \n" " texCoordOut -= uTexOffset[idx]; \n" - " return (uCacheOffset[idx] + texCoordOut)* uCacheScale[idx];\n" + " texCoordOut += uCacheOffset[idx]; \n" + " if (uTextureFilterMode != 0) texCoordOut += vec2(0.5); \n" + " return texCoordOut* uCacheScale[idx]; \n" "} \n" " \n" "void main() \n" diff --git a/src/Textures.cpp b/src/Textures.cpp index 9e8160dd..d11f6b06 100644 --- a/src/Textures.cpp +++ b/src/Textures.cpp @@ -1401,8 +1401,8 @@ void TextureCache::_updateBackground() pCurrent->shiftScaleS = 1.0f; pCurrent->shiftScaleT = 1.0f; - pCurrent->offsetS = 0.5f; - pCurrent->offsetT = 0.5f; + pCurrent->offsetS = 0.0f; + pCurrent->offsetT = 0.0f; _loadBackground(pCurrent); activateTexture(0, pCurrent); @@ -1553,8 +1553,8 @@ void TextureCache::update(u32 _t) pCurrent->scaleS = 1.0f / (pCurrent->maskS ? f32(pow2(pCurrent->width)) : f32(pCurrent->width)); pCurrent->scaleT = 1.0f / (pCurrent->maskT ? f32(pow2(pCurrent->height)) : f32(pCurrent->height)); - pCurrent->offsetS = 0.5f; - pCurrent->offsetT = 0.5f; + pCurrent->offsetS = 0.0f; + pCurrent->offsetT = 0.0f; _load(_t, pCurrent); activateTexture( _t, pCurrent );