Fonctions de contexte de rendu
Cinq fonctions WGL gèrent les contextes de rendu, comme décrit dans le tableau ci-dessous.
Fonction de la bibliothèque WGL | Description |
---|---|
wglCreateContext | Crée un contexte de rendu. |
wglMakeCurrent | Définit le contexte de rendu actuel d’un thread. |
wglGetCurrentContext | Obtient un descripteur pour le contexte de rendu actuel d’un thread. |
wglGetCurrentDC | Obtient un descripteur pour le contexte de périphérique associé au contexte de rendu actuel d’un thread. |
wglDeleteContext | Supprime un contexte de rendu. |
La fonction wglCreateContext prend un descripteur de contexte de périphérique comme paramètre et renvoie un descripteur de contexte de rendu. Le contexte de rendu créé convient au dessin sur le périphérique par le descripteur de contexte de périphérique. Son format de pixel est notamment identique au format de pixel du contexte de périphérique. Après avoir créé un contexte de rendu, vous pouvez libérer ou supprimer le contexte de périphérique. Pour obtenir plus d’informations sur la création, l’obtention, la libération et la suppression d’un contexte de périphérique, consultez Contextes de périphérique.
Remarque
Le contexte de périphérique envoyé à wglCreateContext doit être un contexte de périphérique d’affichage, un contexte de périphérique de mémoire ou un contexte de périphérique d’imprimante couleur qui utilise quatre bits ou plus par pixel. Le contexte de périphérique ne peut pas être un contexte de périphérique d’imprimante monochrome.
La fonction wglMakeCurrent prend un descripteur de contexte de rendu et un descripteur de contexte de périphérique en tant que paramètres. Tous les appels OpenGL suivants effectués par le thread sont effectués via ce contexte de rendu et sont dessinés sur le périphérique référencé par ce contexte de périphérique. Le contexte de périphérique ne doit pas être le même que celui transmis à wglCreateContext lorsque le contexte de rendu a été créé, mais il doit se trouver sur le même périphérique et avoir le même format de pixel. L’appel à wglMakeCurrent crée une association entre le contexte de rendu fourni et le contexte de périphérique. Vous ne pouvez pas libérer ou supprimer le contexte de périphérique associé à un contexte de rendu actuel tant que vous n’avez pas rendu le contexte de rendu inactif.
Une fois qu’un thread possède un contexte de rendu actuel, il peut effectuer des appels graphiques OpenGL. Tous les appels doivent passer par un contexte de rendu. Rien ne se passe si vous effectuez des appels graphiques OpenGL à partir d’un thread qui ne dispose pas d’un contexte de rendu actuel.
La fonction wglGetCurrentContext ne prend aucun paramètre et retourne un descripteur au contexte de rendu actuel du thread appelant. Si le thread ne possède pas de contexte de rendu actuel, la valeur renvoyée est NULL.
Lorsque vous obtenez un descripteur vers le contexte de périphérique associé au contexte de rendu actuel d’un thread en appelant wglGetCurrentDC, l’association est créée lorsqu’un contexte de rendu est rendu actif.
Vous pouvez interrompre l’association entre un contexte de rendu actuel et un thread en appelant wglMakeCurrent avec l’un des deux descripteurs suivants :
- Descripteur de contexte de rendu null
- Descripteur autre que celui appelé à l’origine
Après avoir appelé wglMakeCurrent avec le paramètre de descripteur de contexte de rendu défini sur NULL, le thread appelant n’a pas de contexte de rendu actuel. Le contexte de rendu est libéré de sa connexion au thread et l’association du contexte de rendu à un contexte de périphérique se termine. OpenGL vide toutes les commandes de dessin et peut libérer certaines ressources. Aucun dessin OpenGL n’est effectué jusqu’à l’appel suivant à wglMakeCurrent, car le thread ne peut pas effectuer d’appels graphiques OpenGL jusqu’à ce qu’il récupère un contexte de rendu actuel.
La deuxième façon d’interrompre l’association entre un contexte de rendu et un thread consiste à appeler wglMakeCurrent avec un contexte de rendu différent. Après un tel appel, le thread appelant a un nouveau contexte de rendu actuel, l’ancien contexte de rendu actuel est libéré de sa connexion au thread et l’association de l’ancien contexte de rendu actuel à un contexte de périphérique se termine.
La fonction wglDeleteContext prend un seul paramètre : le descripteur vers le contexte de rendu à supprimer. Avant d’appeler wglDeleteContext, rendez le contexte de rendu inactif en appelant wglMakeCurrent, puis supprimez ou libérez le contexte de périphérique associé en appelant DeleteDC ou ReleaseDC selon ce qui convient.
Il s’agit d’une erreur lorsqu’un thread supprime un contexte de rendu qui est le contexte de rendu actuel d’un autre thread. Toutefois, si un contexte de rendu est le contexte de rendu actuel du thread appelant, wglDeleteContext vide toutes les commandes de dessin OpenGL et rend le contexte de rendu inactif avant de le supprimer. Dans ce cas, en utilisant wglDeleteContext pour rendre un contexte de rendu inactif, le programmeur doit supprimer ou libérer le contexte de périphérique associé.