| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- /* std */
- #include <iostream>
- #include <vector>
- #include <string>
- #include <stdlib.h>
- #include <unistd.h>
- /* OpenGL */
- #include "glad/glad.h"
- #include <GLFW/glfw3.h>
- /* 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<int> data_in(n_value);
- std::vector<int> 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;
- }
|