gKit2 light

- Main Page
- Related Pages
- Modules
- Classes
- Files

écrire une application openGL

cf tuto1.cpp

une application openGL est composée de plusieurs éléments :

- une fenêtre pour voir ce que l'on dessine,
- un contexte openGL pour dessiner,
- 3 fonctions :
  - init( ) pour créer les objets que l'on veut dessiner,
  - quit( ) pour détruire les objets openGL crées dans init( ), à la fermeture de l'application,
  - draw( ) pour afficher / dessiner quelquechose.

ces 3 fonctions sont appelées dans le main.

La classe App permet également d'écrire une application avec une conception légèrement différente mais avec les mêmes fonctionnalités. cf tuto7.cpp pour un exemple.

## création de la fenêtre et du contexte openGL :

#include "window.h"
int init( ) { ... }
int quit( ) { ... }
int draw( ) { ... }
int main( int argc, char **argv )
{
// etape 1 : creer la fenetre
Window window= create_window(1024, 640); // indiquer les dimensions de la fenêtre
if(window == NULL)
return 1; // erreur lors de la création de la fenetre ou de l'init de SDL2
// etape 2 : creer un contexte opengl pour pouvoir dessiner
Context context= create_context(window);
if(context == NULL)
return 1; // erreur lors de la creation du contexte opengl
// etape 3 : creation des objets openGL de l'application
if(init() < 0)
{
printf("[error] init failed.\n");
return 1;
}
// etape 4 : affichage de l'application, tant que la fenetre n'est pas fermee. ou que draw() ne renvoie pas 0
// appelle draw( ) pour dessiner une nouvelle image, 60 fois par seconde.
run(window, draw);
// etape 5 : nettoyage
quit(); // detruire les objets openGL crees par l'application
release_context(context);
release_window(window);
return 0;
}

ces fonctions sont documentées dans window.h et utilisent la librairie SDL2 pour rester portable sur les mêmes systèmes qu'openGL.

il est aussi possible d'utiliser directement sdl, sans passer par ces fonctions prédéfinies. une application crée une fenêtre et traite les evènements clavier, souris et d'autres générés par le système d'exploitation. la fonction run( ) les traite pour vous.

dans la mesure du possible, les fonctions de window.h ne dupliquent pas / n'abstraient pas les fonctionnalités de sdl2, vous pouvez les utiliser directement. par exemple :

- SDL_GetTicks() pour connaitre le temps écoulé depuis le lancement de l'application,
- SDL_GetMouseState() pour récupérer la position de la souris et l'état de ses boutons.

window.h définit par contre des utilitaires pour simplifier l'écriture d'applications interactives. par exemple, si vous voulez modifier la position d'un objet en appuyant sur une touche, les fonctions key_state( ) et clear_key_state( ) permettent de le faire très simplement.

autre exemple d'utilisation : faire une capture d'écran de l'application

#include "window.h"
#include "texture.h"
int draw( )
{
...
if(key_state('s'))
{
clear_key_state('s');
screenshot("screenshot.png");
}
...
}

à quoi sert le clear_key_state( ) ? vu que draw( ) est appelée 60 fois par seconde, il est probable que la touche reste enfoncée pendant une bonne dixaine d'appels, reinitialiser l'état de la touche permet d'éviter d'enregistrer 10 fois l'image...