gKit2 light
app.cpp
Go to the documentation of this file.
1 
3 
4 #include <cstdio>
5 #include <cstring>
6 
7 #include "app.h"
8 #include "glcore.h"
9 
10 
11 App::App( const int width, const int height, const int major, const int minor, const int samples )
12  : m_window(nullptr), m_context(nullptr), sync(true)
13 {
14  m_window= create_window(width, height, major, minor, samples);
15  m_context= create_context(m_window);
16 }
17 
18 App::~App( )
19 {
20  if(m_context)
21  release_context(m_context);
22  if(m_window)
23  release_window(m_window);
24 }
25 
26 void App::vsync_off( )
27 {
28  // desactive vsync pour les mesures de temps
29  SDL_GL_SetSwapInterval(0);
30  printf("sync + vsync OFF...\n");
31 
32  // desactive aussi la synchro cpu / gpu...
33  sync= false;
34 }
35 
36 int App::run( )
37 {
38  if(init() < 0)
39  return -1;
40 
41  // configure openGL
42  glViewport(0, 0, window_width(), window_height());
43 
44  // gestion des evenements
45  while(events(m_window))
46  {
47  if(prerender() < 0)
48  break;
49 
50  if(render() < 1)
51  break;
52 
53  if(postrender() < 0)
54  break;
55 
56  // presenter le resultat
57  SDL_GL_SwapWindow(m_window);
58 
59  // force openGL a finir d'executer toutes les commandes,
60  // cf https://www.khronos.org/opengl/wiki/Swap_Interval#GPU_vs_CPU_synchronization
61  // devrait limiter la consommation sur portable
62  if(sync)
63  glFinish();
64  }
65 
66  if(quit() < 0)
67  return -1;
68 
69  // tout c'est bien passe...
70  return 0;
71 }
virtual int render()=0
a deriver pour afficher les objets. renvoie 1 pour continuer, 0 pour fermer l'application.
App(const int width, const int height, const int major=3, const int minor=3, const int samples=0)
constructeur, dimensions de la fenetre et version d'openGL.
Definition: app.cpp:11
int run()
execution de l'application.
Definition: app.cpp:36
virtual int init()=0
a deriver pour creer les objets openGL. renvoie -1 pour indiquer une erreur, 0 sinon.
virtual int quit()=0
a deriver pour detruire les objets openGL. renvoie -1 pour indiquer une erreur, 0 sinon.
Context create_context(Window window)
cree et configure un contexte opengl
Definition: window.cpp:356
int events(Window window)
fonction interne de gestion d'evenements.
Definition: window.cpp:170
int window_height()
renvoie la hauteur de la fenetre de l'application.
Definition: window.cpp:29
void release_window(Window window)
destruction de la fenetre.
Definition: window.cpp:325
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
Window create_window(const int w, const int h, const int major, const int minor, const int samples)
creation d'une fenetre pour l'application.
Definition: window.cpp:259
void release_context(Context context)
detruit le contexte openGL.
Definition: window.cpp:422
int window_width()
renvoie la largeur de la fenetre de l'application.
Definition: window.cpp:25