diff options
author | Adrian Kummerlaender | 2019-02-25 19:57:11 +0100 |
---|---|---|
committer | Adrian Kummerlaender | 2019-02-25 19:57:11 +0100 |
commit | 26c1cf58f483e64d80703fe37c4bd3923d1ff5b7 (patch) | |
tree | 7cfd9a7a6a919d0879a096ff1f9b27200800ec56 /src/main.cc | |
parent | dbac2c0b8722e17ea211fc47a6fd92f8db48402e (diff) | |
download | compustream-26c1cf58f483e64d80703fe37c4bd3923d1ff5b7.tar compustream-26c1cf58f483e64d80703fe37c4bd3923d1ff5b7.tar.gz compustream-26c1cf58f483e64d80703fe37c4bd3923d1ff5b7.tar.bz2 compustream-26c1cf58f483e64d80703fe37c4bd3923d1ff5b7.tar.lz compustream-26c1cf58f483e64d80703fe37c4bd3923d1ff5b7.tar.xz compustream-26c1cf58f483e64d80703fe37c4bd3923d1ff5b7.tar.zst compustream-26c1cf58f483e64d80703fe37c4bd3923d1ff5b7.zip |
Merge streaming into collide shaderpattern/ab
i.e. implement the A-B pattern.
Dispatching only one compute shader per interaction-less simulation step
already yields very noticeable performance gains. All cell types are now
fully handled by the collide shader which further simplifies the code.
Diffstat (limited to 'src/main.cc')
-rw-r--r-- | src/main.cc | 15 |
1 files changed, 3 insertions, 12 deletions
diff --git a/src/main.cc b/src/main.cc index 71fbc88..fb3bfd0 100644 --- a/src/main.cc +++ b/src/main.cc @@ -20,7 +20,6 @@ #include "shader/code/interact.glsl" #include "shader/code/collide.glsl" -#include "shader/code/stream.glsl" #include "timer.h" @@ -100,7 +99,6 @@ int render(bool open_boundaries) { std::unique_ptr<ComputeShader> interact_shader; std::unique_ptr<ComputeShader> collide_shader; - std::unique_ptr<ComputeShader> stream_shader; window.init([&]() { scene_shader = std::make_unique<GraphicShader>( @@ -112,10 +110,9 @@ int render(bool open_boundaries) { interact_shader = std::make_unique<ComputeShader>(INTERACT_SHADER_CODE); collide_shader = std::make_unique<ComputeShader>(COLLIDE_SHADER_CODE); - stream_shader = std::make_unique<ComputeShader>(STREAM_SHADER_CODE); }); - if ( !interact_shader->isGood() || !collide_shader->isGood() || !stream_shader->isGood() ) { + if ( !interact_shader->isGood() || !collide_shader->isGood() ) { std::cerr << "Compute shader error." << std::endl; return -1; } @@ -151,14 +148,12 @@ int render(bool open_boundaries) { if ( update_lattice ) { if ( timer::millisecondsSince(last_frame) >= 1000/lups ) { if ( tick ) { - collide_shader->workOn(tick_buffers); - stream_shader->workOn(tick_buffers); interact_shader->workOn(tick_buffers); + collide_shader->workOn(tick_buffers); tick = false; } else { - collide_shader->workOn(tock_buffers); - stream_shader->workOn(tock_buffers); interact_shader->workOn(tock_buffers); + collide_shader->workOn(tock_buffers); tick = true; } @@ -193,10 +188,6 @@ int render(bool open_boundaries) { auto guard = collide_shader->use(); collide_shader->dispatch(nX, nY); } - { - auto guard = stream_shader->use(); - stream_shader->dispatch(nX, nY); - } last_frame = timer::now(); } |