Bonjour,
Je suis sur un nouveau programme OpenGL. À la base, tout objets OpenGL est identifiable avec un GLuint. Pour chaque type d'objet OpenGL, nous avons une fonction associée, créant l'objet du coté de la bibliothèque et nous retournant l'identifiant.
Je cherche en quelque sorte à encapsuler ce design.
Au début, je pensais faire un objet GLObject parent de tous, de la façon suivante :
Comme cela, une classe Texture hérite de GLObject et doit réimplémenté les fonctions create() et destroy() en appelant les fonctions OpenGL appropriées.
Code c : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 #ifndef GLOBJECT_HPP #define GLOBJECT_HPP #include <GL/glew.h> class GLObject { protected: GLuint m_glID; virtual void create()=0; virtual void destroy()=0; protected: GLObject():m_glID(0) { create(); } virtual ~GLObject() { destroy(); } }; #endif
Mais, le compilateur a voulu s'en mêler et m'a signalé que je faisais surement un truc de mal avec mes appels à des fonctions pure dans le constructeur / destructeur.
Du coup, j'imagine que j'ai un problème de design.
Pourquoi ne pas vouloir faire l'appel des fonctions OpenGL dans les constructeurs / destructeurs, à vrai dire je ne suis pas trop sur. Principalement, car je souhaitais avoir une fonction séparée pour la gestion de OpenGL (séparée de la construction de l'objet). Enfin bref, cela est surement idiot, surtout que je l'appel dans le constructeur afin d'être bien sur qu'elle soit appelée.
Par contre, je me demande comment vous feriez ?
L'avantage d'avoir une classe GLObject, c'est que je pourrai avoir une banque d'objet qui pourrait même indiquer l'utilisation faite des objects OpenGL et permettre leurs destruction automatiquement.
Partager