all repos — mgba @ 6c1bc5548cf61da25f1fc70fe961fbbadff2b714

mGBA Game Boy Advance Emulator

GBA Video: Fix scale/rot sprite mosaic in GL
Vicki Pfau vi@endrift.com
Tue, 21 May 2019 15:17:42 -0700
commit

6c1bc5548cf61da25f1fc70fe961fbbadff2b714

parent

57a7a0a2911aaf28241efce70b12fc9add585dc3

1 files changed, 6 insertions(+), 4 deletions(-)

jump to
M src/gba/renderers/gl.csrc/gba/renderers/gl.c

@@ -404,13 +404,15 @@

"void main() {\n" " vec2 incoord = texCoord;\n" " if (mosaic.x > 1) {\n" - " incoord.x = clamp(incoord.x - int(mod(mosaic.z + incoord.x, mosaic.x)), 0, dims.z - 1);\n" + " int x = int(incoord.x);\n" + " incoord.x = clamp(x - int(mod(mosaic.z + x, mosaic.x)), 0, dims.z - 1);\n" " } else if (mosaic.x < -1) {\n" - " incoord.x = dims.z - incoord.x - 1;" - " incoord.x = clamp(dims.z - incoord.x + int(mod(mosaic.z + incoord.x, -mosaic.x)) - 1, 0, dims.z - 1);\n" + " int x = dims.z - int(incoord.x) - 1;\n" + " incoord.x = clamp(dims.z - x + int(mod(mosaic.z + x, -mosaic.x)) - 1, 0, dims.z - 1);\n" " }\n" " if (mosaic.y > 1) {\n" - " incoord.y = clamp(incoord.y - int(mod(mosaic.w + incoord.y, mosaic.y)), 0, dims.w - 1);\n" + " int y = int(incoord.y);\n" + " incoord.y = clamp(y - int(mod(mosaic.w + y, mosaic.y)), 0, dims.w - 1);\n" " }\n" " ivec2 coord = ivec2(transform * (incoord - dims.zw / 2) + dims.xy / 2);\n" " if ((coord & ~(dims.xy - 1)) != ivec2(0, 0)) {\n"