#version 150 #define MILLIS_PER_TILE 3000u in vec2 v_uv; flat in uint v_tileidx; in float v_fade; out vec4 pixcolor; uniform sampler2DArray t_tiles; uniform b_constants { uvec4 anim; float R1; float R2; float R3; float haze; vec4 hazecolor; }; 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); } vec4 texcolor = texture(t_tiles, vec3(anim_uv.x, 1.0 - anim_uv.y, v_tileidx)); pixcolor = mix(texcolor, hazecolor, v_fade); }