23 glGenTextures(1, &m_gpu_image1);
24 glBindTexture(GL_TEXTURE_2D, m_gpu_image1);
27 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
28 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
29 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
30 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
33 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 0);
36 glTexImage2D(GL_TEXTURE_2D, 0,
38 GL_RGBA, GL_FLOAT, m_data.
data());
44 glGenTextures(1, &m_gpu_image2);
45 glBindTexture(GL_TEXTURE_2D, m_gpu_image2);
48 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
49 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
50 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
51 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
54 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 0);
57 glTexImage2D(GL_TEXTURE_2D, 0,
59 GL_RGBA, GL_FLOAT,
nullptr);
70 glDeleteTextures(1, &m_gpu_image1);
71 glDeleteTextures(1, &m_gpu_image2);
78 glBindImageTexture( 0, m_gpu_image1, 0,
80 GL_READ_ONLY, GL_RGBA32F );
82 glBindImageTexture( 1, m_gpu_image2, 0,
84 GL_WRITE_ONLY, GL_RGBA32F );
87 glUseProgram(m_program);
91 glGetProgramiv(m_program, GL_COMPUTE_WORK_GROUP_SIZE, threads);
93 int nx= m_data.
width() / threads[0];
95 if(m_data.
width() % threads[0])
98 int ny= m_data.
height() / threads[1];
100 if(m_data.
height() % threads[1])
106 glDispatchCompute(nx, ny, 1);
109 glMemoryBarrier(GL_TEXTURE_UPDATE_BARRIER_BIT);
113 glBindTexture(GL_TEXTURE_2D, m_gpu_image2);
114 glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_FLOAT, tmp.
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.
representation d'une image.
int height() const
renvoie la hauteur de l'image.
const void * data() const
renvoie un pointeur sur le stockage des couleurs des pixels.
int width() const
renvoie la largeur de l'image.
int write_image(const Image &image, const char *filename)
enregistre une image dans un fichier png.
Image read_image(const char *filename)
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.