#version 150 #define MILLIS_PER_TILE 4000u in vec2 v_uv; flat in uint v_tileidx; out vec4 pixcolor; uniform sampler2DArray t_tiles; uniform b_constants { uvec4 anim; float R1; float R2; float R3; }; uniform b_locals { uint millis; float treadmill_x; float treadmill_y; }; void main() { vec2 anim_uv = v_uv; if (v_tileidx < 128u && bool(anim[v_tileidx / 32u] & 1u << v_tileidx % 32u)) { anim_uv = vec2(v_uv.x, v_uv.y + float(millis % MILLIS_PER_TILE) / MILLIS_PER_TILE); } pixcolor = texture(t_tiles, vec3(anim_uv.x, 1.0 - anim_uv.y, v_tileidx)); }