shader_type canvas_item; uniform sampler2D glyph_atlas : hint_normal; uniform vec2 tilemap_size = vec2(32.0, 20.0); // Update this to match the texture size // tile_atlas hardcoded to 64x4 tiles for now void fragment() { // GLES2 vec2 xy = UV * tilemap_size; // Texel-space coord of our texture float t = texture(TEXTURE, UV).r; int tile_idx = int(t * 255.0); // Luminosity channel (any RGB channel works) // Convert tile_idx to a texel coordinate, then to a UV coordinate ivec2 tile_xy = ivec2(tile_idx%64, tile_idx/64); vec2 tile_uv = vec2(tile_xy)/64.0; // Get sub-tile UV vec2 sub_tile_uv = fract(xy); vec2 uv = tile_uv + (sub_tile_uv/64.0); COLOR = texture(glyph_atlas, uv); }