X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=demos%2Fforestpond%2Fdata%2Fwater_variance_x.glsl;fp=demos%2Fforestpond%2Fdata%2Fwater_variance_x.glsl;h=9f4c5540d0c80693c20073860b71e72a9f5ec14f;hp=0000000000000000000000000000000000000000;hb=7efe2d35f5d53c0f086a1b85b7d3dea6a6c709ab;hpb=813301f2b342cd166461b2d266023d0292ba0f87 diff --git a/demos/forestpond/data/water_variance_x.glsl b/demos/forestpond/data/water_variance_x.glsl new file mode 100644 index 00000000..9f4c5540 --- /dev/null +++ b/demos/forestpond/data/water_variance_x.glsl @@ -0,0 +1,23 @@ +#pragma MSP stage(compute) +layout(local_size_x=8, local_size_y=8) in; + +uniform sampler2D surface_in; +uniform sampler2D bottom_in; +uniform sampler2D normals_in; +layout(r16f) uniform image2D variance_out; + +void main() +{ + ivec2 coord = ivec2(gl_GlobalInvocationID.xy)+ivec2(4, 1); + float variance = 0.0; + for(int i=-3; i<=3; ++i) + { + ivec2 c = coord+ivec2(i, 0); + float depth = texelFetch(surface_in, c, 0).x-texelFetch(bottom_in, c, 0).x; + vec2 normal_xy = texelFetch(normals_in, c, 0).xy*2.0-1.0; + float xy_sq = dot(normal_xy, normal_xy); + float slope_sq = xy_sq/max(1-xy_sq, 0.001); + variance += slope_sq*clamp(depth, 0.0, 1.0); + } + imageStore(variance_out, coord, vec4(variance/7.0, 0.0, 0.0, 0.0)); +}