From de3c15f8fd270ebcc0ace8b4869ac4b1e42a1995 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Fri, 17 Jul 2026 12:10:22 +0200 Subject: [PATCH] TilemapGPULayer.vert: stride tiles by spacing, not margin The stride between tiles in a tileset image is tileSize + spacing, but the shader used tileSize + margin (.zz instead of .ww). Margin is the one-off border around the sheet and is already added by getFrameCorner(), so it was counted twice while spacing was never counted at all. On any tileset where margin != spacing the sampled frame drifts by (spacing - margin) * index: correct at index 0 and progressively wrong further down the sheet, eventually rendering unrelated tiles. This matches the CPU path in Tileset.updateTileData, which strides by tileWidth + tileSpacing from an origin of tileMargin. Regenerates the bundled vert shader. Co-Authored-By: Claude Opus 4.8 (1M context) --- src/renderer/webgl/shaders/TilemapGPULayer-vert.js | 2 +- src/renderer/webgl/shaders/src/TilemapGPULayer.vert | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/renderer/webgl/shaders/TilemapGPULayer-vert.js b/src/renderer/webgl/shaders/TilemapGPULayer-vert.js index 5ec10cc065..59a8431224 100644 --- a/src/renderer/webgl/shaders/TilemapGPULayer-vert.js +++ b/src/renderer/webgl/shaders/TilemapGPULayer-vert.js @@ -21,7 +21,7 @@ module.exports = [ '{', ' gl_Position = uProjectionMatrix * vec4(inPosition, 1.0, 1.0);', ' outTexCoord = inTexCoord;', - ' outTileStride = uTileWidthHeightMarginSpacing.xy + uTileWidthHeightMarginSpacing.zz;', + ' outTileStride = uTileWidthHeightMarginSpacing.xy + uTileWidthHeightMarginSpacing.ww;', ' #pragma phaserTemplate(vertexProcess)', '}', ].join('\n'); diff --git a/src/renderer/webgl/shaders/src/TilemapGPULayer.vert b/src/renderer/webgl/shaders/src/TilemapGPULayer.vert index 8a436a1c55..ba963cdf68 100644 --- a/src/renderer/webgl/shaders/src/TilemapGPULayer.vert +++ b/src/renderer/webgl/shaders/src/TilemapGPULayer.vert @@ -31,7 +31,7 @@ void main () gl_Position = uProjectionMatrix * vec4(inPosition, 1.0, 1.0); outTexCoord = inTexCoord; - outTileStride = uTileWidthHeightMarginSpacing.xy + uTileWidthHeightMarginSpacing.zz; + outTileStride = uTileWidthHeightMarginSpacing.xy + uTileWidthHeightMarginSpacing.ww; #pragma phaserTemplate(vertexProcess) }