main.cpp 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. /* std */
  2. #include <iostream>
  3. #include <vector>
  4. #include <string>
  5. #include <stdlib.h>
  6. #include <unistd.h>
  7. /* OpenGL */
  8. #include "glad/glad.h"
  9. #include <GLFW/glfw3.h>
  10. /* Project classes */
  11. #include "ComputeShader.hpp"
  12. #include "Application.hpp"
  13. #include "Buffer.hpp"
  14. int main(int argc, char *argv[]){
  15. std::string filename;
  16. Application app;
  17. ComputeShader compute_shader;
  18. Buffer buffer;
  19. int n_value = 10000;
  20. int max_value = 120;
  21. app = Application(800, 600);
  22. app.init();
  23. app.createWindow();
  24. compute_shader.load("particle_update.comp");
  25. compute_shader.compile();
  26. compute_shader.activate();
  27. compute_shader.set_uniform("count", n_value);
  28. compute_shader.set_uniform("max_val", max_value);
  29. std::vector<int> data_in(n_value);
  30. std::vector<int> data_out(n_value);
  31. for(size_t i = 0 ; i < n_value ; ++i){
  32. data_in[i] = i % (2 * max_value);
  33. }
  34. buffer.create();
  35. buffer.set(data_in.data(), data_in.size(), sizeof(data_in[0]));
  36. compute_shader.activate();
  37. buffer.bind();
  38. buffer.bindBase(compute_shader.get_program(), "dataBuffer", 1);
  39. compute_shader.execute(n_value);
  40. compute_shader.wait();
  41. buffer.unbind();
  42. compute_shader.deactivate();
  43. buffer.get(data_out.data(), data_in.size(), sizeof(data_in[0]));
  44. for(size_t i = 0 ; i < n_value ; ++i){
  45. if(data_in[i] > max_value){
  46. if(data_out[i] != 0){
  47. std::cout << "Data too big not set to 0 by shader i=" << i << std::endl;
  48. break;
  49. }
  50. } else if(data_in[i] != data_out[i]){
  51. std::cout << "Data lower should be the same.... i=" << i << std::endl;
  52. break;
  53. }
  54. }
  55. for(size_t i = 118 ; i < 130 ; ++i){
  56. std::cout << "[" << i << "]" << "-in:" << data_in[i] << "-out:" << data_out[i] << std::endl;
  57. }
  58. while(app.running()){
  59. app.render();
  60. }
  61. return 0;
  62. }