diff options
author | Adrian Kummerlaender | 2018-05-25 23:47:27 +0200 |
---|---|---|
committer | Adrian Kummerlaender | 2018-05-25 23:48:59 +0200 |
commit | f728e4c8d202de241673a13ce61570b6acb4bba7 (patch) | |
tree | a7e29c4319f0e6d667b98f359ddf089c0565c15a /src/shader/compute.glsl | |
parent | 5157658ec0cc07d2c56c978ca010cbb78236439f (diff) | |
download | computicle-f728e4c8d202de241673a13ce61570b6acb4bba7.tar computicle-f728e4c8d202de241673a13ce61570b6acb4bba7.tar.gz computicle-f728e4c8d202de241673a13ce61570b6acb4bba7.tar.bz2 computicle-f728e4c8d202de241673a13ce61570b6acb4bba7.tar.lz computicle-f728e4c8d202de241673a13ce61570b6acb4bba7.tar.xz computicle-f728e4c8d202de241673a13ce61570b6acb4bba7.tar.zst computicle-f728e4c8d202de241673a13ce61570b6acb4bba7.zip |
Restructure source directory
Diffstat (limited to 'src/shader/compute.glsl')
-rw-r--r-- | src/shader/compute.glsl | 62 |
1 files changed, 0 insertions, 62 deletions
diff --git a/src/shader/compute.glsl b/src/shader/compute.glsl deleted file mode 100644 index eaf5579..0000000 --- a/src/shader/compute.glsl +++ /dev/null @@ -1,62 +0,0 @@ -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; - -// ODE solver - -vec2 f(vec2); // field definition is to be appended - -vec2 explicitEuler(float h, vec2 v) { - return v + h * f(v); -} - -vec2 classicalRungeKutta(float h, vec2 v) { - const vec2 k1 = f(v); - const vec2 k2 = f(v + h/2. * k1); - const vec2 k3 = f(v + h/2. * k2); - const vec2 k4 = f(v + h * k3); - - return v + h * (1./6.*k1 + 1./3.*k2 + 1./3.*k3 + 1./6.*k4); -} - -// pseudo random numbers for particle placement - -float rand(vec2 v){ - return fract(sin(dot(v, vec2(12.9898,78.233))) * 43758.5453); -} - -float mapUnitToWorldX(float s) { - return -(world.x/2.) + s * world.x; -} - -float mapUnitToWorldY(float s) { - return -(world.y/2.) + s * world.y; -} - -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() { - const uint i = 3*gl_GlobalInvocationID.x; - const vec2 v = vec2(data[i+0], data[i+1]); - const vec2 w = classicalRungeKutta(0.01, v); - - if ( data[i+2] < 5. && insideWorld(v) ) { - data[i+0] = w.x; - data[i+1] = w.y; - data[i+2] += 0.01; - } else { - data[i+0] = mapUnitToWorldX(rand(v)); - data[i+1] = mapUnitToWorldY(rand(w)); - data[i+2] = rand(v+w) * 5.; - } -} -)"; |