Share via


fonction glSelectBuffer

La fonction glSelectBuffer établit une mémoire tampon pour les valeurs du mode de sélection.

Syntaxe

void WINAPI glSelectBuffer(
   GLsizei size,
   GLuint  *buffer
);

Paramètres

size

Taille de la mémoire tampon.

Tampon

Retourne les données de sélection.

Valeur renvoyée

Cette fonction ne retourne pas de valeur.

Codes d’erreur

Les codes d’erreur suivants peuvent être récupérés par la fonction glGetError .

Name Signification
GL_INVALID_VALUE
la taille était négative.
GL_INVALID_OPERATION
La fonction a été appelée alors que le mode de rendu était GL_SELECT.
GL_INVALID_OPERATION
La fonction a été appelée entre un appel à glBegin et l’appel correspondant à glEnd.

Notes

La fonction glSelectBuffer a deux paramètres : buffer est un pointeur vers un tableau d’entiers non signés et la taille indique la taille du tableau. Le paramètre buffer retourne des valeurs de la pile de noms (voir glInitNames, glLoadName, glPushName) lorsque le mode de rendu est GL_SELECT (voir glRenderMode). La fonction glSelectBuffer doit être émise avant l’activation du mode de sélection, et elle ne doit pas être émise tant que le mode de rendu est GL_SELECT.

La sélection est utilisée par un programmeur pour déterminer quelles primitives sont dessinées dans une zone d’une fenêtre. La région est définie par les matrices modelview et perspective actuelles.

En mode sélection, aucun fragment de pixel n’est produit à partir de la rastérisation. Au lieu de cela, si une primitive croise le volume de clip défini par le frustum d’affichage et les plans de découpage définis par l’utilisateur, cette primitive provoque une sélection. (Avec les polygones, aucune correspondance ne se produit si le polygone est abattu.) Lorsqu’une modification est apportée à la pile de noms, ou quand glRenderMode est appelé, un enregistrement de correspondance est copié dans la mémoire tampon si des correspondances se sont produites depuis le dernier événement de ce type (soit un changement de pile de noms, soit un appel glRenderMode ). L’enregistrement de correspondance se compose du nombre de noms dans la pile de noms au moment de l’événement ; suivi des valeurs de profondeur minimale et maximale de tous les sommets qui ont atteint depuis l’événement précédent ; suivi du contenu de la pile de noms, nom inférieur en premier.

Les valeurs de profondeur retournées sont mappées de sorte que la plus grande valeur entière non signée correspond à la profondeur de coordonnées de la fenêtre 1.0, et zéro correspond à la profondeur de coordonnées de la fenêtre 0.0.

Un index interne dans la mémoire tampon est réinitialisé à zéro chaque fois que le mode de sélection est entré. Chaque fois qu’un enregistrement de correspondance est copié dans la mémoire tampon, l’index est incrémenté pour pointer vers la cellule juste après la fin du bloc de noms qui est, vers la cellule disponible suivante. Si l’enregistrement d’accès est supérieur au nombre d’emplacements restants dans la mémoire tampon, autant de données que possible sont copiées et l’indicateur de dépassement de capacité est défini. Si la pile de noms est vide lorsqu’un enregistrement de correspondance est copié, cet enregistrement se compose de zéro suivi des valeurs de profondeur minimale et maximale.

Le mode de sélection est arrêté en appelant glRenderMode avec un argument autre que GL_SELECT. Chaque fois que glRenderMode est appelé alors que le mode de rendu est GL_SELECT, il retourne le nombre d’enregistrements de correspondances copiés dans la mémoire tampon, réinitialise l’indicateur de dépassement de capacité et le pointeur de mémoire tampon de sélection, et initialise la pile de noms pour qu’elle soit vide. Si le bit de dépassement a été défini lors de l’appel de glRenderMode , un nombre d’enregistrements d’accès négatif est retourné.

Le contenu de la mémoire tampon n’est pas défini jusqu’à ce que glRenderMode soit appelé avec un argument autre que GL_SELECT.

Les primitives glEnd glBegin/ et les appels à glRasterPos peuvent entraîner des accès.

La fonction suivante récupère les informations relatives à glSelectBuffer :

glGet avec argument GL_NAME_STACK_DEPTH

Spécifications

Condition requise Valeur
Client minimal pris en charge
Windows 2000 Professionnel [applications de bureau uniquement]
Serveur minimal pris en charge
Windows 2000 Server [applications de bureau uniquement]
En-tête
Gl.h
Bibliothèque
Opengl32.lib
DLL
Opengl32.dll

Voir aussi

glBegin

glEnd

glFeedbackBuffer

glInitNames

glLoadName

glPushName

glRenderMode