3.3.1 Le header

La classe FrameBuffer constitue évidemment le cœur des FBO, elle devra gérer la création et l'utilisation de tous les buffers. Elle appellera par la méthode chargerTextureVide() que nous avons codée dans la partie précédente.

Son header de base est celui-ci :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#ifndef DEF_FRAMEBUFFER
#define DEF_FRAMEBUFFER

#define GL3_PROTOTYPES 1
#include <GL3/gl3.h>

class FrameBuffer{
	public:
		
	private:
		
};

#endif

Cette classe possédera pas mal d'attributs pour fonctionner correctement :

  • \texbf{GLuint m_id} : identifiant OpenGL représentant le FBO
  • float m_largeur : largeur du FBO. On peut comparer cet attribut à la largeur de la fenêtre SDL
  • float m_hauteur : même chose pour la hauteur
  • vector m_couleursBuffers : tableau dynamique qui contiendra tous les Colors Buffers désirés
  • GLuint m_depthBufferID : identifiant du Depth Buffer

On ne crée par d'attribut pour le Stencil Buffer ?

Non nous n'en avons pas besoin, vous verrez pourquoi dans la partie suivante.

Cette petite flopée d’attributs permettra de gérer tous les aspects de nos futurs FBO. Nous en rajouterons quelques-uns dans la dernière partie consacrée aux améliorations.

1
2
3
4
5
6
// Attributs
GLuint m_id;
int m_largeur;
int m_hauteur;
std::vector<Texture> m_colorBuffers;
GLuint m_depthBufferID;

Le header comportera aussi son constructeur par défaut :

1
FrameBuffer();

Ainsi qu'un second constructeur qui prendra en paramètres la largeur et la hauteur du FBO. Nous passerons leur valeur aux attributs du même nom :

1
FrameBuffer(int largeur, int hauteur);

Ce sera ce constructeur que l'on utilisera principalement.

Enfin, nous ajoutons aussi le destructeur qui ne change décidément pas de forme :

1
virtual ~FrameBuffer();

Si on résume tout ça :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#ifndef DEF_FRAMEBUFFER
#define DEF_FRAMEBUFFER


// Include Windows

#ifdef WIN32
#include <GL/glew.h>

#define GL3_PROTOTYPES 1
#include <GL3/gl3.h>

#include <vector>
#include "Texture.h"

class FrameBuffer{
	public:
		FrameBuffer();
		FrameBuffer(int largeur, int hauteur);
		virtual ~FrameBuffer();

	private:
		GLuint m_id;
		int m_largeur;
		int m_hauteur;
		std::vector<Texture> m_colorBuffers;
		GLuint m_depthBufferID;
};

#endif