glSelectBuffer-Funktion
Die glSelectBuffer-Funktion richtet einen Puffer für Werte des Auswahlmodus ein.
Syntax
void WINAPI glSelectBuffer(
GLsizei size,
GLuint *buffer
);
Parameter
-
size
-
Die Größe des Puffers.
-
Puffer
-
Gibt die Auswahldaten zurück.
Rückgabewert
Diese Funktion gibt keinen Wert zurück.
Fehlercodes
Die folgenden Fehlercodes können von der glGetError-Funktion abgerufen werden.
Name | Bedeutung |
---|---|
|
Die Größe war negativ. |
|
Die Funktion wurde aufgerufen, während der Rendermodus GL_SELECT wurde. |
|
Die Funktion wurde zwischen einem Aufruf von glBegin und dem entsprechenden Aufruf von glEnd aufgerufen. |
Bemerkungen
Die glSelectBuffer-Funktion verfügt über zwei Parameter: Puffer ist ein Zeiger auf ein Array von ganzen Zahlen ohne Vorzeichen, und die Größe gibt die Größe des Arrays an. Der Pufferparameter gibt Werte aus dem Namensstapel zurück (siehe glInitNames, glLoadName, glPushName), wenn der Renderingmodus GL_SELECT ist (siehe glRenderMode). Die glSelectBuffer-Funktion muss ausgestellt werden, bevor der Auswahlmodus aktiviert ist, und sie darf nicht ausgegeben werden, während der Renderingmodus GL_SELECT ist.
Die Auswahl wird von einem Programmierer verwendet, um zu bestimmen, welche Grundtypen in einen Bereich eines Fensters gezeichnet werden. Die Region wird durch die aktuellen Modellansichts- und Perspektivmatrizen definiert.
Im Auswahlmodus werden keine Pixelfragmente aus der Rasterung erzeugt. Wenn stattdessen ein primitives Das clip-Volume überschneidet, das durch das Anzeigen frustum und die benutzerdefinierten Clippingebenen definiert wird, verursacht dieses Primitive einen Auswahltreffer. (Bei Polygonen tritt kein Treffer auf, wenn das Polygon gekullt wird.) Wenn eine Änderung am Namensstapel vorgenommen wird oder glRenderMode aufgerufen wird, wird ein Trefferdatensatz in den Puffer kopiert, wenn seit dem letzten solchen Ereignis Treffer aufgetreten sind (entweder eine Namensstapeländerung oder ein glRenderMode-Aufruf ). Der Trefferdatensatz besteht aus der Anzahl der Namen im Namensstapel zum Zeitpunkt des Ereignisses. gefolgt von den minimalen und maximalen Tiefenwerten aller Scheitelpunkte, die seit dem vorherigen Ereignis erreicht wurden; gefolgt vom Inhalt des Namensstapels, unterer Name zuerst.
Zurückgegebene Tiefenwerte werden so zugeordnet, dass der größte ganzzahlige Wert ohne Vorzeichen der Fensterkoordinatentiefe 1.0 und null der Fensterkoordinatentiefe 0.0 entspricht.
Ein interner Index im Puffer wird bei jedem Eintritt in den Auswahlmodus auf Null zurückgesetzt. Jedes Mal, wenn ein Trefferdatensatz in den Puffer kopiert wird, wird der Index erhöht, um auf die Zelle zu zeigen, die kurz nach dem Ende des Namensblocks auf die nächste verfügbare Zelle verweist. Wenn der Trefferdatensatz größer als die Anzahl der verbleibenden Speicherorte im Puffer ist, werden so viele Daten wie möglich kopiert, und das Überlaufflag ist festgelegt. Wenn der Namensstapel leer ist, wenn ein Trefferdatensatz kopiert wird, besteht dieser Datensatz aus null, gefolgt von den mindesten und maximalen Tiefenwerten.
Der Auswahlmodus wird beendet, indem glRenderMode mit einem anderen Argument als GL_SELECT aufgerufen wird. Wenn glRenderMode aufgerufen wird, während der Rendermodus GL_SELECT ist, gibt es die Anzahl der Trefferdatensätze zurück, die in den Puffer kopiert wurden, setzt das Überlaufflag und den Auswahlpufferzeiger zurück und initialisiert den Namensstapel als leer. Wenn das Überlaufbit festgelegt wurde, wenn glRenderMode aufgerufen wurde, wird eine negative Trefferdatensatzanzahl zurückgegeben.
Der Inhalt des Puffers ist nicht definiert, bis glRenderMode mit einem anderen Argument als GL_SELECT aufgerufen wird.
Die glBegin/glEnd-Grundtypen und Aufrufe von glRasterPos können zu Treffern führen.
Die folgende Funktion ruft Informationen im Zusammenhang mit glSelectBuffer ab:
glGet mit Argument GL_NAME_STACK_DEPTH
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) |
Windows 2000 Professional [nur Desktop-Apps] |
Unterstützte Mindestversion (Server) |
Windows 2000 Server [nur Desktop-Apps] |
Header |
|
Bibliothek |
|
DLL |
|