gKit2 light
Functions | Variables
shader_kit.cpp File Reference

shader_kit light, bac a sable fragment shader, cf shader_toy More...

#include <cstdio>
#include <cstring>
#include <chrono>
#include "glcore.h"
#include "window.h"
#include "files.h"
#include "program.h"
#include "uniforms.h"
#include "texture.h"
#include "mesh.h"
#include "wavefront.h"
#include "vec.h"
#include "mat.h"
#include "orbiter.h"
#include "color.h"
#include "image.h"
#include "image_hdr.h"
#include "text.h"
#include "widgets.h"

Go to the source code of this file.

Functions

void reload_program ()
 
const char * option_find (std::vector< const char * > &options, const char *ext)
 
int init (std::vector< const char * > &options)
 
int quit ()
 
int draw (void)
 
int main (int argc, char **argv)
 

Variables

const char * program_filename
 
GLuint program
 
std::string program_log
 
int program_area
 
bool program_failed
 
const char * mesh_filename
 
Mesh mesh
 
Point mesh_pmin
 
Point mesh_pmax
 
int vertex_count
 
GLuint vao
 
bool wireframe = false
 
std::vector< const char * > texture_filenames
 
std::vector< GLuint > textures
 
Orbiter camera
 
Widgets widgets
 
size_t last_load = 0
 

Detailed Description

shader_kit light, bac a sable fragment shader, cf shader_toy

Definition in file shader_kit.cpp.

Function Documentation

◆ init()

int init ( std::vector< const char * > &  options)

compile les shaders et construit le programme + les buffers + le vertex array. renvoie -1 en cas d'erreur.

Definition at line 96 of file shader_kit.cpp.

97 {
98  widgets= create_widgets();
99  camera= Orbiter();
100 
101  program= 0;
102  const char *option;
103  option= option_find(options, ".glsl");
104  if(option != nullptr)
105  {
106  program_filename= option;
107  reload_program();
108  }
109 
110  vao= 0;
111  mesh_pmin= Point(normalize(Vector(-1, -1, 0)) * 2.5f);
112  mesh_pmax= Point(normalize(Vector( 1, 1, 0)) * 2.5f);
113 
114  option= option_find(options, ".obj");
115  if(option != nullptr)
116  {
117  mesh= read_mesh(option);
118  if(mesh.vertex_count() > 0)
119  {
120  mesh_filename= option;
121 
122  vao= mesh.create_buffers(mesh.has_texcoord(), mesh.has_normal(), mesh.has_color(), mesh.has_material_index());
123  vertex_count= mesh.vertex_count();
124 
125  mesh.bounds(mesh_pmin, mesh_pmax);
126  camera.lookat(mesh_pmin, mesh_pmax);
127  }
128 
129  // ou generer une erreur ?
130  }
131 
132  if(vao == 0)
133  {
134  glGenVertexArrays(1, &vao);
135  vertex_count= 3;
136  }
137 
138  // charge les textures, si necessaire
139  for(int i= 0; i < int(options.size()); i++)
140  {
141  if(options[i] == nullptr)
142  continue;
143 
144  GLuint texture= read_texture(0, options[i]);
145  if(texture > 0)
146  {
147  texture_filenames.push_back(options[i]);
148  textures.push_back(texture);
149  }
150  }
151 
152  // nettoyage
153  glUseProgram(0);
154  glBindTexture(GL_TEXTURE_2D, 0);
155  glBindVertexArray(0);
156  glBindBuffer(GL_ARRAY_BUFFER, 0);
157  glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
158 
159  // etat openGL par defaut
160  glClearColor(0.2f, 0.2f, 0.2f, 1.f);
161  glClearDepth(1.f);
162 
163  glCullFace(GL_BACK);
164  glFrontFace(GL_CCW);
165  //~ glEnable(GL_CULL_FACE); // n'affiche que les faces correctement orientees...
166  glDisable(GL_CULL_FACE); // les faces mal orientees sont affichees avec des hachures oranges...
167 
168  glDepthFunc(GL_LESS);
169  glEnable(GL_DEPTH_TEST);
170 
171  return 0;
172 }
GLuint create_buffers(const bool use_texcoord, const bool use_normal, const bool use_color, const bool use_material_index)
construit les buffers et le vertex array object necessaires pour dessiner l'objet avec openGL....
Definition: mesh.cpp:581
void bounds(Point &pmin, Point &pmax) const
renvoie min et max les coordonnees des extremites des positions des sommets de l'objet (boite engloba...
Definition: mesh.cpp:503
int vertex_count() const
renvoie le nombre de sommets.
Definition: mesh.h:291
representation de la camera, type orbiter, placee sur une sphere autour du centre de l'objet.
Definition: orbiter.h:17
void lookat(const Point &center, const float size)
observe le point center a une distance size.
Definition: orbiter.cpp:7
Widgets create_widgets()
cree une interface graphique. a detruire avec release_widgets( ).
Definition: widgets.cpp:12
Vector normalize(const Vector &v)
renvoie un vecteur unitaire / longueur == 1.
Definition: vec.cpp:123
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_texture(const int unit, const char *filename, const GLenum texel_type)
Definition: texture.cpp:148
representation d'un point 3d.
Definition: vec.h:21
representation d'un vecteur 3d.
Definition: vec.h:59