23 draw(m, model, view, projection, texture);
28 draw(m,
Identity(), camera, texture);
47 draw(m, model, view, projection);
72 draw(group, m, model, view, projection);
97 draw(group, m, model, view, projection, texture);
102 draw(group, m,
Identity(), camera, texture);
112 GLuint
DrawParam::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 )
114 std::string definitions;
117 definitions.append(
"#define USE_TEXCOORD\n");
119 definitions.append(
"#define USE_NORMAL\n");
121 definitions.append(
"#define USE_COLOR\n");
123 definitions.append(
"#define USE_LIGHT\n");
124 if(use_texcoord && use_alpha_test)
125 definitions.append(
"#define USE_ALPHATEST\n");
128 const char *filename=
smart_path(
"data/shaders/mesh.glsl");
129 bool use_mesh_color= (primitives == GL_POINTS || primitives == GL_LINES || primitives == GL_LINE_STRIP || primitives == GL_LINE_LOOP);
131 filename=
smart_path(
"data/shaders/mesh_color.glsl");
134 return program->program;
137 GLuint DrawParam::create_debug_normals_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 )
139 const char *filename=
smart_path(
"data/shaders/normals.glsl");
140 bool use_mesh_color= (primitives == GL_POINTS || primitives == GL_LINES || primitives == GL_LINE_STRIP || primitives == GL_LINE_LOOP);
146 return program->program;
149 GLuint DrawParam::create_debug_texcoords_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 )
151 const char *filename=
smart_path(
"data/shaders/texcoords.glsl");
153 return program->program;
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();
167 if(m_debug_texcoords)
169 program= create_debug_texcoords_program(mesh.
primitives(), use_texcoord, use_normal, use_color, m_use_light, m_use_alpha_test);
171 m_use_texture=
false;
172 m_use_alpha_test=
false;
177 glUseProgram(program);
182 mesh.
draw(program,
true, use_texcoord,
false,
false,
false);
188 glUseProgram(program);
199 if(use_texcoord && m_texture > 0)
212 mesh.
draw(program,
true, use_texcoord, use_normal, use_color,
false);
217 program= create_debug_normals_program(mesh.
primitives(), use_texcoord, use_normal, use_color, m_use_light, m_use_alpha_test);
219 m_use_texture=
false;
220 m_use_alpha_test=
false;
225 static float scale= 1;
233 glUseProgram(program);
238 mesh.
draw(program,
true,
false, use_normal,
false,
false);
244 bool use_texcoord= m_use_texture && m_texture > 0 && mesh.has_texcoord();
245 bool use_normal= mesh.has_normal();
246 bool use_color= mesh.has_color();
249 GLuint program=
create_program(mesh.
primitives(), use_texcoord, use_normal, use_color, m_use_light, m_use_alpha_test);
251 glUseProgram(program);
267 if(use_texcoord && m_texture > 0)
280 mesh.
draw(group.
first, group.
n, program,
true, use_texcoord, use_normal, use_color,
false);
DrawParam & view(const Transform &m)
modifie la transformation view utilisee pour afficher l'objet.
DrawParam & model(const Transform &m)
modifie la transformation model utilisee pour afficher l'objet.
void draw(Mesh &mesh)
dessine l'objet avec l'ensemble des parametres definis.
DrawParam & projection(const Transform &m)
modifie la transformation projection utilisee pour afficher l'objet.
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)
DrawParam & texture(const GLuint t)
plaque une texture opaque a la surface de l'objet.
representation d'un objet / maillage.
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, const bool use_position, const bool use_texcoord, const bool use_normal, const bool use_color, const bool use_material_index)
dessine l'objet avec un shader program.
GLenum primitives() const
renvoie le type de primitives.
const Materials & materials() const
renvoie la description des matieres.
representation de la camera, type orbiter, placee sur une sphere autour du centre de l'objet.
Transform projection(const int width, const int height, const float fov)
fixe la projection reglee pour une image d'aspect width / height, et une demi ouverture de fov degres...
Transform view() const
renvoie la transformation vue.
static PipelineCache & manager()
access au singleton.
PipelineProgram * find(const char *filename, const char *definitions="")
renvoie un shader program compile.
description d'un shader program compile.
int window_height()
renvoie la hauteur de la fenetre de l'application.
int key_state(const SDL_Keycode key)
renvoie l'etat d'une touche du clavier. cf la doc SDL2 pour les codes.
int window_width()
renvoie la largeur de la fenetre de l'application.
const char * smart_path(const char *filename)
renvoie le chemin(path) vers le fichier 'filename' apres l'avoir cherche dans un repertoire standard....
Transform Identity()
construit la transformation identite.
int first
premier triangle du groupe
int index
indice de la "propriete"du groupe de triangles, par defaut : indice de la matiere
int n
nombre de triangles du groupe
representation d'un ensemble de triangles de meme matiere.
void program_uniform(const GLuint program, const char *uniform, const std::vector< unsigned > &v)
affecte un tableau de valeurs a un uniform du shader program.
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,...
Color diffuse
couleur diffuse / de base.
const Material & material(const int id) const
renvoie la ieme matiere.
int count() const
nombre de matieres.
const Material & default_material()
renvoie une matiere par defaut.