gKit2 light
Loading...
Searching...
No Matches
StorageBuffer Class Reference
Inheritance diagram for StorageBuffer:

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.

Protected Attributes

Mesh m_mesh
Orbiter m_camera
GLuint m_vao
GLuint m_buffer
GLuint m_program
GLuint m_texture
Protected Attributes inherited from App
Window m_window
Context m_context
bool sync

Additional Inherited Members

Protected Member Functions inherited from App
virtual int prerender ()
virtual int postrender ()
void vsync_off ()

Detailed Description

Definition at line 69 of file tuto_storage_buffer.cpp.

Constructor & Destructor Documentation

◆ StorageBuffer()

StorageBuffer::StorageBuffer ( )
inline

Definition at line 73 of file tuto_storage_buffer.cpp.

73: App(1024, 640, 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 StorageBuffer::init ( )
inlinevirtual

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

Implements App.

Definition at line 75 of file tuto_storage_buffer.cpp.

76 {
77 m_mesh= read_mesh("data/cube.obj");
78
79 #if 1
80 // construit le storage buffer contenant les positions, les normales et les texcoords, en utilisant les types alignes
81 struct vertex
82 {
83 glsl::vec3 position;
84 glsl::vec3 normal;
85 glsl::vec2 texcoord;
86
87 vertex( ) : position(), normal(), texcoord() {}
88 };
89
90 #else
91 // ou a la main
92 struct vertex
93 {
94 vec3 position; // vec3 aligne sur 4 float
95 float pad0;
96 vec3 normal;
97 float pad1;
98 vec2 texcoord; // vec2 aligne sur 2 float
99
100 float pad2;
101 float pad3; // donc la taille totale de la structure doit etre un mulitple de 4 floats
102
103 vertex( ) : position(), normal(), texcoord() {}
104 };
105 #endif
106
107
108 // recupere les attributs du mesh
109 std::vector<vertex> data(m_mesh.vertex_count());
110 for(int i= 0; i < m_mesh.vertex_count(); i++)
111 {
112 data[i].position= m_mesh.positions().at(i);
113 data[i].normal= m_mesh.normals().at(i);
114 data[i].texcoord= m_mesh.texcoords().at(i);
115 }
116
117 // vao par defaut
118 glGenVertexArrays(1, &m_vao);
119 glBindVertexArray(m_vao);
120
121 // storage buffer
122 glGenBuffers(1, &m_buffer);
123
124 glBindBuffer(GL_SHADER_STORAGE_BUFFER, m_buffer);
125 glBufferData(GL_SHADER_STORAGE_BUFFER, sizeof(vertex) * data.size(), data.data(), GL_STREAM_READ);
126
127 //
128 m_program= read_program("gkit2_tutos/tuto_storage_buffer.glsl");
129 program_print_errors(m_program);
130
131 //
132 Point pmin, pmax;
133 m_mesh.bounds(pmin, pmax);
134 m_camera.lookat(pmin, pmax);
135
136 m_texture= read_texture(0, "data/debug2x2red.png");
137
138 // etat openGL par defaut
139 glClearColor(0.2f, 0.2f, 0.2f, 1.f); // couleur par defaut de la fenetre
140
141 glClearDepth(1.f); // profondeur par defaut
142 glDepthFunc(GL_LESS); // ztest, conserver l'intersection la plus proche de la camera
143 glEnable(GL_DEPTH_TEST); // activer le ztest
144
145 return 0; // ras, pas d'erreur
146 }
Mesh read_mesh(const char *filename)
charge un fichier wavefront .obj et renvoie un mesh compose de triangles non indexes....
Definition wavefront.cpp:14
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
GLuint read_texture(const int unit, const char *filename, const GLenum texel_type)
Definition texture.cpp:133

◆ quit()

int StorageBuffer::quit ( )
inlinevirtual

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

Implements App.

Definition at line 149 of file tuto_storage_buffer.cpp.

150 {
151 m_mesh.release();
152 release_program(m_program);
153 glDeleteTextures(1, &m_texture);
154 glDeleteBuffers(1, &m_buffer);
155 glDeleteVertexArrays(1, &m_vao);
156 return 0;
157 }
int release_program(const GLuint program)
detruit les shaders et le program.
Definition program.cpp:240

◆ render()

int StorageBuffer::render ( )
inlinevirtual

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

Implements App.

Definition at line 160 of file tuto_storage_buffer.cpp.

161 {
162 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
163
164 // gestion mouvements camera
165 update_camera( m_camera );
166
167 glBindVertexArray(m_vao);
168 glUseProgram(m_program);
169
170 Transform model= RotationY(global_time() / 20);
171 Transform view= m_camera.view();
172 Transform projection= m_camera.projection(window_width(), window_height(), 45);
173 Transform mv= view * model;
174 Transform mvp= projection * mv;
175
176 program_uniform(m_program, "mvMatrix", mv);
177 program_uniform(m_program, "normalMatrix", mv.normal());
178 program_uniform(m_program, "mvpMatrix", mvp);
179
180 program_use_texture(m_program, "diffuse_color", 0, m_texture, 0);
181
182 // selectionne le buffer comme storage buffer, numero 0
183 glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 0, m_buffer);
184
185 glDrawArrays(GL_TRIANGLES, 0, m_mesh.vertex_count());
186
187 return 1;
188 }
int window_height()
renvoie la hauteur de la fenetre de l'application.
Definition window.cpp:27
int window_width()
renvoie la largeur de la fenetre de l'application.
Definition window.cpp:23
float global_time()
renvoie le temps ecoule depuis le lancement de l'application, en millisecondes.
Definition window.cpp:139
Transform RotationY(const float a)
renvoie la matrice representation une rotation de a degree autour de l'axe Y.
Definition mat.cpp:242
void program_use_texture(const GLuint program, const char *uniform, const int unit, const GLuint texture, const GLuint sampler)
configure le pipeline et le shader program pour utiliser une texture, et des parametres de filtrage,...
Definition uniforms.cpp:198
Transform normal() const
renvoie la transformation a appliquer aux normales d'un objet transforme par la matrice m.
Definition mat.cpp:181

Member Data Documentation

◆ m_mesh

Mesh StorageBuffer::m_mesh
protected

Definition at line 191 of file tuto_storage_buffer.cpp.

◆ m_camera

Orbiter StorageBuffer::m_camera
protected

Definition at line 192 of file tuto_storage_buffer.cpp.

◆ m_vao

GLuint StorageBuffer::m_vao
protected

Definition at line 194 of file tuto_storage_buffer.cpp.

◆ m_buffer

GLuint StorageBuffer::m_buffer
protected

Definition at line 195 of file tuto_storage_buffer.cpp.

◆ m_program

GLuint StorageBuffer::m_program
protected

Definition at line 196 of file tuto_storage_buffer.cpp.

◆ m_texture

GLuint StorageBuffer::m_texture
protected

Definition at line 197 of file tuto_storage_buffer.cpp.


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