gKit2 light
Loading...
Searching...
No Matches
ComputeImage Struct Reference
Inheritance diagram for ComputeImage:

Public Member Functions

int init ()
 a deriver pour creer les objets openGL. renvoie -1 pour indiquer une erreur, 0 sinon.
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.
Public Member Functions inherited from App
 App (const int width, const int height, const int major=3, const int minor=3)
 constructeur, dimensions de la fenetre et version d'openGL.
virtual int update (const float time, const float delta)
 a deriver et redefinir pour animer les objets en fonction du temps.
int run ()
 execution de l'application.

Public Attributes

Image m_data
GLuint m_gpu_image1
GLuint m_gpu_image2
GLuint m_program

Additional Inherited Members

Protected Member Functions inherited from App
virtual int prerender ()
virtual int postrender ()
void vsync_off ()
Protected Attributes inherited from App
Window m_window
Context m_context
bool sync

Detailed Description

Definition at line 10 of file tuto_compute_image.cpp.

Constructor & Destructor Documentation

◆ ComputeImage()

ComputeImage::ComputeImage ( )
inline

Definition at line 12 of file tuto_compute_image.cpp.

12: App(1280, 768, 4,3) {}
App(const int width, const int height, const int major=3, const int minor=3)
constructeur, dimensions de la fenetre et version d'openGL.
Definition app.cpp:11

Member Function Documentation

◆ init()

int ComputeImage::init ( )
inlinevirtual

a deriver pour creer les objets openGL. renvoie -1 pour indiquer une erreur, 0 sinon.

Implements App.

Definition at line 14 of file tuto_compute_image.cpp.

15 {
16 m_program= read_program("gkit2_tutos/M2/compute_image.glsl");
17 program_print_errors(m_program);
18
19 // initialise une image
20 m_data= read_image("data/monde.jpg");
21
22 // cree les textures/images pour les parametres du shader
23 glGenTextures(1, &m_gpu_image1);
24 glBindTexture(GL_TEXTURE_2D, m_gpu_image1);
25 {
26 // fixe les parametres de filtrage par defaut
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);
31
32 // 1 seul mipmap
33 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 0);
34
35 // transfere les donnees dans la texture, 4 float par texel
36 glTexImage2D(GL_TEXTURE_2D, 0,
37 GL_RGBA32F, m_data.width(), m_data.height(), 0,
38 GL_RGBA, GL_FLOAT, m_data.data());
39 }
40 // ou :
41 // m_gpu_image1= make_vec4_texture(0, m_data);
42
43 // texture/image resultat, meme taille, mais pas de donnees...
44 glGenTextures(1, &m_gpu_image2);
45 glBindTexture(GL_TEXTURE_2D, m_gpu_image2);
46 {
47 // fixe les parametres de filtrage par defaut
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);
52
53 // 1 seul mipmap
54 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 0);
55
56 // transfere les donnees dans la texture, 4 float par texel
57 glTexImage2D(GL_TEXTURE_2D, 0,
58 GL_RGBA32F, m_data.width(), m_data.height(), 0,
59 GL_RGBA, GL_FLOAT, nullptr);
60 }
61 // ou :
62 // m_gpu_image2= make_vec4_texture(0, width, height);
63
64 return 0;
65 }
Image read_image(const char *filename, const bool flipY)
Definition image_io.cpp:191
GLuint read_program(const char *filename, const char *definitions)
Definition program.cpp:217
int program_print_errors(const GLuint program, const char *filename)
affiche les erreurs de compilation.
Definition program.cpp:461

◆ quit()

int ComputeImage::quit ( )
inlinevirtual

a deriver pour detruire les objets openGL. renvoie -1 pour indiquer une erreur, 0 sinon.

Implements App.

Definition at line 67 of file tuto_compute_image.cpp.

68 {
69 release_program(m_program);
70 glDeleteTextures(1, &m_gpu_image1);
71 glDeleteTextures(1, &m_gpu_image2);
72
73 return 0;
74 }
int release_program(const GLuint program)
detruit les shaders et le program.
Definition program.cpp:240

◆ render()

int ComputeImage::render ( )
inlinevirtual

a deriver pour afficher les objets. renvoie 1 pour continuer, 0 pour fermer l'application.

Implements App.

Definition at line 76 of file tuto_compute_image.cpp.

77 {
78 glBindImageTexture( 0, m_gpu_image1, /* level*/ 0,
79 /* layered */ GL_TRUE, /* layer */ 0,
80 /* access */ GL_READ_ONLY, /* format*/ GL_RGBA32F );
81
82 glBindImageTexture( 1, m_gpu_image2, /* level*/ 0,
83 /* layered */ GL_TRUE, /* layer */ 0,
84 /* access */ GL_WRITE_ONLY, /* format*/ GL_RGBA32F );
85
86 // execute les shaders
87 glUseProgram(m_program);
88
89 // recupere le nombre de threads declare par le shader
90 int threads[3]= {};
91 glGetProgramiv(m_program, GL_COMPUTE_WORK_GROUP_SIZE, threads);
92
93 int nx= m_data.width() / threads[0];
94 // nombre de groupes de threads, arrondi...
95 if(m_data.width() % threads[0])
96 nx++;
97
98 int ny= m_data.height() / threads[1];
99 // nombre de groupes de threads, arrondi...
100 if(m_data.height() % threads[1])
101 ny++;
102 // oui on peut calculer ca de maniere plus directe...
103 // ou utiliser directement 8, comme dans le shader...
104
105 // go !
106 glDispatchCompute(nx, ny, 1);
107
108 // attendre que les resultats soient disponibles
109 glMemoryBarrier(GL_TEXTURE_UPDATE_BARRIER_BIT);
110
111 // relire le resultat
112 Image tmp(m_data.width(), m_data.height());
113 glBindTexture(GL_TEXTURE_2D, m_gpu_image2);
114 glGetTexImage(GL_TEXTURE_2D, /* mipmap */ 0, GL_RGBA, GL_FLOAT, tmp.data());
115
116 // enregistre le resultat
117 write_image(tmp, "out.png");
118 return 0;
119 }
bool write_image(const Image &image, const char *filename, const bool flipY)
enregistre une image au format .png
Definition image_io.cpp:245

Member Data Documentation

◆ m_data

Image ComputeImage::m_data

Definition at line 121 of file tuto_compute_image.cpp.

◆ m_gpu_image1

GLuint ComputeImage::m_gpu_image1

Definition at line 122 of file tuto_compute_image.cpp.

◆ m_gpu_image2

GLuint ComputeImage::m_gpu_image2

Definition at line 123 of file tuto_compute_image.cpp.

◆ m_program

GLuint ComputeImage::m_program

Definition at line 124 of file tuto_compute_image.cpp.


The documentation for this struct was generated from the following file: