gKitGL
|
gk::App peut etre utilisee de plusieurs facons : soit en utilisant son interface bas niveau, soit en la derivant.
exemple 1: utilisation bas niveau
// cree une fenetre de 600 par 600 et initialise un context openGL App app(600, 600); // boucle principale, version decomposee de gk::App::run() while(!app.isClosed()) // isClosed() renvoie vrai tant que la fenetre existe { // traitement des evenements : clavier, souris, fenetre, etc. app.processEvents(); // renvoie l'etat d'une touche if(app.key('q')) { printf("close\n"); // demande a fermer l'application, la prochaine fois isClosed() renverra faux. app.close(); } }
exemple 2: utilisation par derivation
// creation de l'objet application derive de gk::App Tuto app(600, 600); // boucle principale, deriver de App pour redefinir draw() app.run();
La methode gk::App::run() appelle dans l'ordre la methode gk::App::init(), puis execute la boucle telle quelle est presentee dans l'exemple1, gk::App::draw() est appellee a chaque iteration, et enfin appelle gk::App::quit() avant de sortir.
Voici un exemple de classe derivee :
class Tuto : public gk::App { public: Tuto( const int w, const int h ) : gk::App(w, h), {} ~Tuto( ) {} // redefinir init pour charger les objets, construire une scene, etc. // int init( ) {} // redefinir quit pour liberer tout ce qui a ete charge dans init(). // int quit( ) {} // redefinir draw pour faire quelquechose ... int draw( ) { // sortir si l'utilisateur a appuye sur q ou escape, cf. la doc de SDL pour le detail des codes SDLK_xxx if(key('q') || key(SDLK_ESCAPE)) { printf("close\n"); close(); // renvoyer 0 ferme l'application return 0; } // afficher quelquechose ... // renvoyer 1 pour continuer return 1; } };