Initialiser OpenGL, libérer les ressources utilisées par OpenGL

 

 

Initialiser OpenGL:

Maintenant que nous nous sommes créés notre fenêtre, nous devons initialiser OpenGL.

Tout d'abord, nous savons que pour dessiner, il faut définir un format d'affichage, cad le nombre de couleurs, le double buffer, ...

Encore appelé le pixel format.

Pour cela, il faut renseigner une structure:

PIXELFORMATDESCRIPTOR pfd =
{

sizeof(PIXELFORMATDESCRIPTOR), //taille du descripteur de format
1, //version
PFD_SUPPORT_OPENGL |
PFD_DRAW_TO_WINDOW |
PFD_DOUBLEBUFFER, // Activer un écran logique
PFD_TYPE_RGBA, //Mode de couleurs RGBA
16, //Bits de couleur
0, 0, 0, 0, 0, 0, //Paramètres des couleurs
0,0, //Paramètres alpha
0,0, 0, 0, 0, //Paramètres du buffer d'accumulation
32, //Bits de profondeur
0, //Bits du buffer stencil
0, //Nombre de buffers auxiliaires
0, //ignoré (obsolète)
0, //réservé/code>
0, //ignoré (obsolète)
0, //Couleur de transparence
0 //Ignoré (obsolète)

};

On pourra vérifier que le format est compatible avec la carte à partir de la fonction ChoosePixelFormat()
int pixelFormat;
pixelFormat = ChoosePixelFormat(hDC, &pfd);
if (!pixelFormat)
{
// Erreur !
}

Ensuite, on enregistre tout cela via SetPixelFormat()

if (!SetPixelFormat(hDC, pixelFormat, &pfd))
{
// Erreur !
}

Bien entendu, on pourra passer les valeurs que l'on veut !

 

Il faut un handle de contexte de périphérique. Donc OpenGL en aura aussi besoin et...

En effet, il y a une fonction HGLRC wglCreateContext(HDC) qui va permettre d'attacher un contexte de périphérique à une session OpenGL. En échange, cette fonction va retourner un handle sur le Rendering Context (de type HGLRC) qui sera enregistré globalement d'où le nom ! La fonction retourne 0 si problème.

Pour tous les appels suivants, vous aurez besoin de ce handle de Rendering Context. Il sera possible le rendre courant grâce à wglMakeCurrent(HDC, HGLRC);

Voilà OpenGL actif et prêt à dessiner !

 

Arrêter OpenGL:

Enfin, avant de quitter ve programme, il faudra arrêter OpenGL:

Vous avez transformé le Rendering Context courant pour votre session OpenGL, il faudra donc cesser cela:

wglMakeCurrent(NULL, NULL);

Enfin, détruire ce contexte:

wglDeleteContext (HGLRC);

 

Exemple d'initialisation:

Image non trouvée !N'oubliez pas de configurer votre environnement de développement !

Vous pouvez toujours le lancer, mais cela ne fera pas grand chose à l'écran !

Ce bout de code sera toujours le même (ou à peu de chose prêt) pour vos applications OpenGL !

 

Remarque:

Le contexte de périphérique ou le contexte de rendu sont connus de toutes les fonctions dans mon exemple. Il était tout aussi possible de récupérer ces valeurs en le demandant à OpenGL et donc de les mémoriser localement ! Dans ce cas, pour connaître ces valeurs courantes, vous utiliserez les fonctions suivantes:

Pour récupérer le contexte de périphérique:

hDC = wglGetCurrentDC;

Pour récupérer le contexte de rendu:

hRC = wglGetCurrentContext;

Pour ma part, je trouve que les deux solutions sont bonnes...pas de préférence pour l'une ou pour l'autre.