Skip to content

Fix opaque rendering of TilemapGPULayer empty cells#7336

Open
moufmouf wants to merge 1 commit into
phaserjs:masterfrom
moufmouf:fix/tilemapgpulayer-empty-tiles-transparent
Open

Fix opaque rendering of TilemapGPULayer empty cells#7336
moufmouf wants to merge 1 commit into
phaserjs:masterfrom
moufmouf:fix/tilemapgpulayer-empty-tiles-transparent

Conversation

@moufmouf

Copy link
Copy Markdown
Contributor

This PR (delete as applicable)

  • Fixes a bug

Empty cells were not discarded in the fragment shader. getTileTexelCoord() returns (0, 0) for an empty tile, so it sampled the top-left texel of tile 0 (opaque for most tilesets) painting tile 0 over everything drawn beneath the layer. This also made stacked GPU layers hide one another: an upper layer's empty cells covered the layer below.

Discard empty fragments in main() and regenerate the bundled shader.

You can view a repro of the error in this fork of the examples repository:

https://github.com/moufmouf/examples/blob/5ba9594ebf6a5405309cdf6e887f86980b36083d/public/src/tilemaps/tilemap%20gpu%20layer/gpu%20tile%20layer%20empty%20cells.js

Before the fix:

bugC-empty-before-annotated

After the fix:

bugC-empty-after-annotated

Empty cells were not discarded in the fragment shader. getTileTexelCoord()
returns (0, 0) for an empty tile, so it sampled the top-left texel of tile 0 -
opaque for most tilesets - painting tile 0 over everything drawn beneath the
layer. This also made stacked GPU layers hide one another: an upper layer's
empty cells covered the layer below.

Discard empty fragments in main() and regenerate the bundled shader.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant