orca/samples/fluid/src/shaders/divergence.glsl

42 lines
881 B
GLSL

#version 300 es
precision highp float;
precision highp sampler2D;
in vec2 texCoord;
out vec4 fragColor;
uniform sampler2D src;
vec2 u(ivec2 coord)
{
return (texelFetch(src, coord, 0).xy);
}
void main()
{
ivec2 pixelCoord = ivec2(floor(gl_FragCoord.xy));
if(pixelCoord.x <= 0
|| pixelCoord.x >= textureSize(src, 0).x
|| pixelCoord.y <= 0
|| pixelCoord.y >= textureSize(src, 0).y)
{
fragColor = vec4(0, 0, 0, 1);
}
else
{
vec2 tl = u(pixelCoord + ivec2(-1, 0));
vec2 tr = u(pixelCoord);
vec2 bl = u(pixelCoord + ivec2(-1, -1));
vec2 br = u(pixelCoord + ivec2(0, -1));
float r = (tr.x + br.x) / 2.;
float l = (tl.x + bl.x) / 2.;
float t = (tl.y + tr.y) / 2.;
float b = (bl.y + br.y) / 2.;
fragColor = vec4(-2. * (r - l + t - b), 0, 0, 1);
}
}