From 3995a7e1399d4cb71fb761015cc069597863d10a Mon Sep 17 00:00:00 2001 From: Adrian Kummerlaender Date: Sun, 20 May 2018 14:22:38 +0200 Subject: Extract shader code --- src/shader/compute.glsl | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 src/shader/compute.glsl (limited to 'src/shader/compute.glsl') diff --git a/src/shader/compute.glsl b/src/shader/compute.glsl new file mode 100644 index 0000000..8b1deab --- /dev/null +++ b/src/shader/compute.glsl @@ -0,0 +1,34 @@ +static const std::string COMPUTE_SHADER_CODE = R"( +#version 430 + +layout (local_size_x = 1) in; +layout (std430, binding=1) buffer bufferA{ float data[]; }; + +uniform vec2 world; + +float rand(vec2 co){ + return fract(sin(dot(co.xy, vec2(12.9898,78.233))) * 43758.5453); +} + +bool insideWorld(vec2 v) { + return v.x > -world.x/2. + && v.x < world.x/2. + && v.y > -world.y/2. + && v.y < world.y/2.; +} + +void main() { + uint idx = 3*gl_GlobalInvocationID.x; + vec2 v = vec2(data[idx+0], data[idx+1]); + + if ( data[idx+2] < 5. && insideWorld(v) ) { + data[idx+0] += 0.01 * cos(v.x*cos(v.y)); + data[idx+1] += 0.01 * sin(v.x-v.y); + data[idx+2] += 0.01; + } else { + data[idx+0] = -(world.x/2.) + rand(vec2(data[idx+1], data[idx+0])) * world.x; + data[idx+1] = -(world.y/2.) + rand(vec2(data[idx+0], data[idx+1])) * world.y; + data[idx+2] = uint(rand(v) * 5.); + } +} +)"; -- cgit v1.2.3