glSelectBuffer, fonction

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 .

Nom Signification
GL_INVALID_VALUE
la taille était négative.
GL_INVALID_OPERATION
La fonction a été appelée pendant 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 : la mémoire tampon est un pointeur vers un tableau d’entiers non signés, et la taille indique la taille du tableau. Le paramètre de mémoire tampon 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 pendant 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 certaine région d’une fenêtre. La région est définie par les matrices de modelview et de perspective actuelles.

En mode sélection, aucun fragment de pixels n’est produit à partir de la ratérisation. Au lieu de cela, si une primitive croise le volume clip défini par le frustum d’affichage et les plans de découpage définis par l’utilisateur, cette primitive provoque une frappe de sélection. (Avec les polygones, aucune frappe ne se produit si le polygone est culqué.) Lorsqu’une modification est apportée à la pile de noms ou lorsque glRenderMode est appelé, un enregistrement d’accès est copié dans la mémoire tampon si des accès ont eu lieu depuis le dernier événement de ce type (une modification de pile de noms ou un appel glRenderMode ). L’enregistrement d’accès se compose du nombre de noms dans la pile de noms au moment de l’événement ; suivi des valeurs minimales et maximales de toutes les sommets qui ont atteint depuis l’événement précédent ; suivi du contenu de la pile de noms, prénom du nom inférieur.

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ée de fenêtre 1.0, et zéro correspond à la profondeur de coordonnée de 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 d’accès 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, 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 que l’indicateur de dépassement est défini. Si la pile de noms est vide lorsqu’un enregistrement d’accès est copié, cet enregistrement se compose de zéro suivi des valeurs minimales et maximales de profondeur.

Le mode de sélection est quitté en appelant glRenderMode avec un argument autre que GL_SELECT. Chaque fois que glRenderMode est appelé pendant que le mode de rendu est GL_SELECT, il retourne le nombre d’enregistrements d’accès copiés dans la mémoire tampon, réinitialise l’indicateur de dépassement et le pointeur de mémoire tampon de sélection et initialise la pile de noms à vider. Si le bit de dépassement a été défini lorsque glRenderMode a été appelé, 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 glBeginglEnd/ et les appels à glRasterPos peuvent entraîner des coups.

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

glGet avec l’argument GL_NAME_STACK_DEPTH

Configuration requise

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