19 m_data= std::vector<int>(1024);
22 glGenBuffers(1, &m_gpu_buffer1);
23 glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 0, m_gpu_buffer1);
24 glBufferData(GL_SHADER_STORAGE_BUFFER,
sizeof(
int) * m_data.size(), m_data.data(), GL_STATIC_COPY);
27 glGenBuffers(1, &m_gpu_buffer2);
28 glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 1, m_gpu_buffer2);
29 glBufferData(GL_SHADER_STORAGE_BUFFER,
sizeof(
int) * m_data.size(),
nullptr, GL_STATIC_COPY);
37 glDeleteBuffers(1, &m_gpu_buffer1);
38 glDeleteBuffers(1, &m_gpu_buffer2);
45 glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 0, m_gpu_buffer1);
46 glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 1, m_gpu_buffer2);
49 glUseProgram(m_program);
53 glGetProgramiv(m_program, GL_COMPUTE_WORK_GROUP_SIZE, threads);
55 int n= m_data.size() / threads[0];
57 if(m_data.size() % threads[0])
63 glDispatchCompute(n, 1, 1);
66 glMemoryBarrier(GL_BUFFER_UPDATE_BARRIER_BIT);
69 std::vector<int> tmp(1024);
70 glBindBuffer(GL_SHADER_STORAGE_BUFFER, m_gpu_buffer2);
71 glGetBufferSubData(GL_SHADER_STORAGE_BUFFER, 0,
sizeof(
int) * tmp.size(), tmp.data());
73 for(
unsigned i= 0; i < tmp.size(); i++)
80 std::vector<int> m_data;
App(const int width, const int height, const int major=3, const int minor=3, const int samples=0)
constructeur, dimensions de la fenetre et version d'openGL.
int run()
execution de l'application.
void printf(Text &text, const int px, const int py, const char *format,...)
affiche un texte a la position x, y. meme utilisation que printf().
GLuint read_program(const char *filename, const char *definitions)
int program_print_errors(const GLuint program)
affiche les erreurs de compilation.
int release_program(const GLuint program)
detruit les shaders et le program.
int quit()
a deriver pour detruire les objets openGL. renvoie -1 pour indiquer une erreur, 0 sinon.
int render()
a deriver pour afficher les objets. renvoie 1 pour continuer, 0 pour fermer l'application.
int init()
a deriver pour creer les objets openGL. renvoie -1 pour indiquer une erreur, 0 sinon.