27 lines
686 B
GLSL
27 lines
686 B
GLSL
#version 430 core
|
|
|
|
out vec4 FragColor;
|
|
|
|
uniform vec2 u_resolution; // framebuffer size in pixels
|
|
uniform ivec2 u_gridSize; // sand grid size
|
|
uniform usampler2D u_state; // GL_R8UI texture
|
|
|
|
void main() {
|
|
vec2 fragCoord = gl_FragCoord.xy;
|
|
|
|
// Normalized coordinates
|
|
vec2 uv = fragCoord / u_resolution;
|
|
uv.y = 1.0 - uv.y;
|
|
// Map to grid coordinates
|
|
ivec2 cell = ivec2(uv * vec2(u_gridSize));
|
|
cell = clamp(cell, ivec2(0), u_gridSize - ivec2(1));
|
|
|
|
uint v = texelFetch(u_state, cell, 0).r;
|
|
|
|
vec3 color = (v == 1u)
|
|
? vec3(0.9, 0.8, 0.1) // sand
|
|
: vec3(0.05, 0.05, 0.10); // background
|
|
|
|
FragColor = vec4(color, 1.0);
|
|
}
|