gKit2 light
Loading...
Searching...
No Matches
tuto3GL.cpp File Reference

passer des parametres a un shader program, afficher quelques triangles et les deplacer... More...

#include "window.h"
#include "program.h"
#include "mesh.h"
#include "wavefront.h"
#include <stdio.h>

Go to the source code of this file.

Functions

int init ()
int quit ()
int draw ()
int main (int argc, char **argv)

Variables

GLuint program
GLuint vao

Detailed Description

passer des parametres a un shader program, afficher quelques triangles et les deplacer...

Definition in file tuto3GL.cpp.

Function Documentation

◆ init()

int init ( )

Definition at line 18 of file tuto3GL.cpp.

19{
20 // charge 12 triangles, soit un cube...
21 Mesh cube= read_mesh("data/flat_bbox.obj");
22 printf(" %d positions\n", cube.vertex_count());
23
24 // compile le shader program, le program est selectionne
25 program= read_program("gkit2_tutos/tuto3GL.glsl");
26
27 /* affiche les erreurs de compilation des shaders
28 program_print_errors(program);
29 */
30
31 // transfere les 36 positions dans le tableau declare par le vertex shader
32 // etape 1 : recuperer l'identifiant de l'uniform
33 GLint location= glGetUniformLocation(program, "positions"); // uniform vec3 positions[36];
34 // etape 2 : modifier sa valeur
35 glUniform3fv(location, cube.vertex_count(), cube.vertex_buffer());
36
37 // mesh n'est plus necessaire
38 cube.release();
39
40 // creer un vertex array object
41 glGenVertexArrays(1, &vao);
42
43 // etat openGL par defaut
44 glClearColor(0.2, 0.2, 0.2, 1); // definir la couleur par defaut
45 glClearDepth(1.f); // profondeur par defaut
46
47 glDepthFunc(GL_LESS); // ztest, conserver l'intersection la plus proche de la camera
48 glEnable(GL_DEPTH_TEST); // activer le ztest
49
50 return 0;
51}
representation d'un objet / maillage.
Definition mesh.h:121
const float * vertex_buffer() const
renvoie l'adresse de la position du premier sommet. permet de construire les vertex buffers openGL....
Definition mesh.h:305
int vertex_count() const
renvoie le nombre de sommets.
Definition mesh.h:300
void release()
detruit les objets openGL.
Definition mesh.cpp:50
void printf(Text &text, const int px, const int py, const char *format,...)
affiche un texte a la position x, y. meme utilisation que printf().
Definition text.cpp:140
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

◆ quit()

int quit ( )

Definition at line 53 of file tuto3GL.cpp.

54{
55 release_program(program);
56 glDeleteVertexArrays(1, &vao);
57 return 0;
58}
int release_program(const GLuint program)
detruit les shaders et le program.
Definition program.cpp:240

◆ draw()

int draw ( void )

Definition at line 62 of file tuto3GL.cpp.

63{
64 // effacer la fenetre : copier la couleur par defaut dans tous les pixels de la fenetre
65 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // "effacer"
66
67 // configurer le pipeline, selectionner le vertex array a utiliser
68 glBindVertexArray(vao);
69
70 // configurer le pipeline, selectionner le shader program a utiliser
71 glUseProgram(program);
72
73 // modifier les valeurs des parametres uniforms du shader program
74 GLint location;
75 location= glGetUniformLocation(program, "color"); // declare dans le fragment shader
76 glUniform4f(location, 1, 0.5, 0, 1); // cf fragment shader vec4 color;
77
78/*
79 modifiez la valeur de time, declare dans le vertex shader pour modifier la position du cube dans le repere du monde,
80 en fonction du temps. vous pouvez utiliser la fonction mod ou modf pour creer un mouvement cyclique
81
82 utilisez la fonction SDL_GetTicks( ), pour connaitre l'heure exprimee en milli secondes
83
84 float time= SDL_GetTicks();
85 location= glGetUniformLocation(program, "time");
86 glUniform1f(location, time);
87 */
88
89 // dessiner 12 triangles, indices gl_VertexID de 0 a 36
90 glDrawArrays(GL_TRIANGLES, 0, 36);
91
92 return 1; // on continue, renvoyer 0 pour sortir de l'application
93}

◆ main()

int main ( int argc,
char ** argv )

Definition at line 96 of file tuto3GL.cpp.

97{
98 // etape 1 : creer la fenetre
99 Window window= create_window(1024, 640);
100 if(window == NULL)
101 return 1; // erreur lors de la creation de la fenetre ou de l'init de sdl2
102
103 // etape 2 : creer un contexte opengl pour pouvoir dessiner
104 Context context= create_context(window);
105 if(context == NULL)
106 return 1; // erreur lors de la creation du contexte opengl
107
108 // etape 3 : creation des objets
109 if(init() < 0)
110 {
111 printf("[error] init failed.\n");
112 return 1;
113 }
114
115 // etape 4 : affichage de l'application, tant que la fenetre n'est pas fermee. ou que draw() ne renvoie pas 0
116 run(window, draw);
117
118 // etape 5 : nettoyage
119 quit();
120 release_context(context);
121 release_window(window);
122 return 0;
123}
Context create_context(Window window)
cree et configure un contexte opengl
Definition window.cpp:358
void release_window(Window window)
destruction de la fenetre.
Definition window.cpp:328
int run(Window window, int(*draw)())
boucle de gestion des evenements de l'application.
Definition window.cpp:158
Window create_window(const int w, const int h, const int major, const int minor)
creation d'une fenetre pour l'application.
Definition window.cpp:262
void release_context(Context context)
detruit le contexte openGL.
Definition window.cpp:439
int init(std::vector< const char * > &options)

Variable Documentation

◆ program

GLuint program

Definition at line 12 of file tuto3GL.cpp.

◆ vao

GLuint vao

Definition at line 15 of file tuto3GL.cpp.