/* std */ #include #include #include #include #include /* OpenGL */ #include "glad/glad.h" #include /* Project classes */ #include "ComputeShader.hpp" #include "Application.hpp" #include "Buffer.hpp" int main(int argc, char *argv[]){ std::string filename; Application app; ComputeShader compute_shader; Buffer buffer; int n_value = 10000; int max_value = 120; app = Application(800, 600); app.init(); app.createWindow(); compute_shader.load("particle_update.comp"); compute_shader.compile(); compute_shader.activate(); compute_shader.set_uniform("count", n_value); compute_shader.set_uniform("max_val", max_value); std::vector data_in(n_value); std::vector data_out(n_value); for(size_t i = 0 ; i < n_value ; ++i){ data_in[i] = i % (2 * max_value); } buffer.create(); buffer.set(data_in.data(), data_in.size(), sizeof(data_in[0])); compute_shader.activate(); buffer.bind(); buffer.bindBase(compute_shader.get_program(), "dataBuffer", 1); compute_shader.execute(n_value); compute_shader.wait(); buffer.unbind(); compute_shader.deactivate(); buffer.get(data_out.data(), data_in.size(), sizeof(data_in[0])); for(size_t i = 0 ; i < n_value ; ++i){ if(data_in[i] > max_value){ if(data_out[i] != 0){ std::cout << "Data too big not set to 0 by shader i=" << i << std::endl; break; } } else if(data_in[i] != data_out[i]){ std::cout << "Data lower should be the same.... i=" << i << std::endl; break; } } for(size_t i = 118 ; i < 130 ; ++i){ std::cout << "[" << i << "]" << "-in:" << data_in[i] << "-out:" << data_out[i] << std::endl; } while(app.running()){ app.render(); } return 0; }