| ||||||||||||
Maintenant que nous avons un squelette de classe défini, nous allons pouvoir passer à la troisième tâche que nous attend sur la liste : la création des Render Buffers. Comme je vous l'ai dit tout à l'heure, les Render Buffers ne seront pas codés dans une classe dédiée, ils ne sont pas aussi importants que les textures donc ils n'ont pas besoin d'être séparés du reste. Nous les utiliserons pour gérer le Depth et le Stencil Buffer qui, contrairement au Color, ne sont pas représentables par des textures (souvenez-vous du petit schéma dans l'introduction). Pour les créer, nous allons implémenter une méthode qui se chargera de générer et de configurer un Render Buffer à partir d'un identifiant OpenGL. De cette façon, nous initialiserons un buffer très simplement en utilisant seulement une lignes de code. La méthode en question s'appellera creerRenderBuffer() et prendra 2 paramètres :
Génération de l'identifiant L'avantage des Render Buffers c'est que ce sont des objets OpenGL, ils se gèrent donc de la même façon que les VBO, les VAO et les textures. C'est-à-dire qu'ils ont besoin d'un identifiant et d'un verrouillage pour leur configuration (et à fortiori pour leur utilisation). Nous retrouverons ainsi, une fois de plus, toutes les fonctions du type glGenXXX(), glBindXXX() etc. Je vais passer rapidement sur ces deux notions que nous avons l'habitude de voir maintenant. La première est la génération d'identifiant, elle se fait ici avec la fonction glGenRenderbuffers() :
Nous appellerons cette fonction en donnant en paramètre la valeur 1 ainsi que l'adresse de la variable id (qui est elle-même un paramètre de la méthode creerRenderBuffer()) :
On profite de cette génération pour inclure la vérification d'un "précédent chargement" qui s'applique à tous les objets OpenGL, et donc aux Render Buffers, afin d'éviter d'éventuelles fuites de mémoire. Nous utiliserons pour cela la fonction glIsRenderbuffer() :
La fonction renvoie la valeur GL_FALSE si aucun chargement n'a été effectué sur l'objet donné ou GL_TRUE si c'est le cas. Si nous tombons sur la première valeur, nous n'aurons rien à faire. En revanche, si la fonction nous renvoie GL_TRUE il faudra faire attention à détruire le Render Buffer avant de le charger à nouveau. La fonction permettant cette destruction s'appelle glDeleteRenderbuffers() :
Elle prend exactement les mêmes paramètres que glGenRenderbuffers(), à savoir :
Comme à l'accoutumé, nous appellerons les deux fonctions que nous venons de voir juste avant la génération d'ID :
| ||||||||||||
|