gKit2 light
écrire une application openGL

cf tuto1.cpp

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

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 :

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'))
{
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...