gKit2 light
Public Member Functions | Public Attributes | List of all members
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. More...
 
int quit ()
 a deriver pour detruire les objets openGL. renvoie -1 pour indiquer une erreur, 0 sinon. More...
 
int render ()
 a deriver pour afficher les objets. renvoie 1 pour continuer, 0 pour fermer l'application. More...
 
- Public Member Functions inherited from App
 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. More...
 
virtual int update (const float time, const float delta)
 a deriver et redefinir pour animer les objets en fonction du temps. More...
 
int run ()
 execution de l'application. More...
 

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.

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("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  }
int height() const
renvoie la hauteur de l'image.
Definition: image.h:100
const void * data() const
renvoie un pointeur sur le stockage des couleurs des pixels.
Definition: image.h:84
int width() const
renvoie la largeur de l'image.
Definition: image.h:98
Image read_image(const char *filename)
Definition: image_io.cpp:18
GLuint read_program(const char *filename, const char *definitions)
Definition: program.cpp:204
int program_print_errors(const GLuint program)
affiche les erreurs de compilation.
Definition: program.cpp:432

◆ 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:211

◆ 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  }
representation d'une image.
Definition: image.h:21
int write_image(const Image &image, const char *filename)
enregistre une image dans un fichier png.
Definition: image_io.cpp:85

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