dessine l'objet avec l'ensemble des parametres definis.
158{
159 bool use_texcoord= m_use_texture && m_texture > 0 && mesh.has_texcoord();
160 bool use_normal= mesh.has_normal();
161 bool use_color= mesh.has_color();
162
163 Transform mv= m_view * m_model;
164 Transform mvp= m_projection * mv;
165
166 GLuint program= 0;
167 if(m_debug_texcoords)
168 {
169 program= create_debug_texcoords_program(mesh.
primitives(), use_texcoord, use_normal, use_color, m_use_light, m_use_alpha_test);
170 m_use_light= false;
171 m_use_texture= false;
172 m_use_alpha_test= false;
173 use_color= false;
174 use_normal= false;
175 use_texcoord= true;
176
177 glUseProgram(program);
178
179 program_uniform(program, "mvpMatrix", mvp);
180 program_uniform(program, "mvMatrix", mv);
181
183 return;
184 }
185
187
188 glUseProgram(program);
189 if(!use_color)
190 program_uniform(program,
"mesh_color", mesh.
default_color());
191
192 program_uniform(program, "mvpMatrix", mvp);
193 if(use_normal)
194 program_uniform(program,
"normalMatrix", mv.
normal());
195 else
196 program_uniform(program, "mvMatrix", mv);
197
198
199 if(use_texcoord && m_texture > 0)
201
202 if(m_use_light)
203 {
204 program_uniform(program, "light", m_view(m_light));
205 program_uniform(program, "light_color", m_light_color);
206 program_uniform(program, "mvMatrix", mv);
207 }
208
209 if(m_use_alpha_test)
210 program_uniform(program, "alpha_min", m_alpha_min);
211
213
214
215 if(m_debug_normals)
216 {
217 program= create_debug_normals_program(mesh.
primitives(), use_texcoord, use_normal, use_color, m_use_light, m_use_alpha_test);
218 m_use_light= false;
219 m_use_texture= false;
220 m_use_alpha_test= false;
221 use_color= false;
222 use_normal= true;
223 use_texcoord= false;
224
225 static float scale= 1;
227 scale+= 0.02f;
229 scale-= 0.02f;
230 if(scale < 0.1f)
231 scale= 0.1f;
232
233 glUseProgram(program);
234 program_uniform(program, "mvpMatrix", mvp);
235 program_uniform(program,
"normalMatrix", mv.
normal());
236 program_uniform(program, "scale", scale * m_normals_scale);
237
239 }
240}
GLuint create_program(const GLenum primitives, const bool use_texcoord, const bool use_normal, const bool use_color, const bool use_light, const bool use_alpha_test)
Color default_color() const
renvoie la couleur par defaut du mesh, utilisee si les sommets n'ont pas de couleur associee.
void draw(const GLuint program)
dessine l'objet avec un shader program.
GLenum primitives() const
renvoie le type de primitives.
int key_state(const SDL_Keycode key)
renvoie l'etat d'une touche du clavier. cf la doc SDL2 pour les codes.
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,...