glSelectBuffer: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
(Siehe auch)
K (Kategorisierung)
 
Zeile 4: Zeile 4:
  
 
== Name ==
 
== Name ==
'''glSelectBuffer''' - Setzt einen Puffer um Werte im Selektionsmodus zu speichern.
+
'''glSelectBuffer''' - Setzt einen Puffer, um Werte im Selektionsmodus zu speichern.
  
  
Zeile 10: Zeile 10:
 
== Delphi-Spezifikation ==
 
== Delphi-Spezifikation ==
  
  procedure '''glSelectBuffer'''(''size'' : GLSizei; ''buffer'' : PGLUint)
+
  procedure '''glSelectBuffer'''(''size'' : GLSizei; ''buffer'' : PGLUint);
  
  
Zeile 29: Zeile 29:
  
 
== Beschreibung ==  
 
== Beschreibung ==  
'''glSelectBuffer''' benötigt zwei Argumente : ''buffer'' ist ein Zeiger auf eine Reihe von vorzeichnelosen Ganzzahlwert, und ''size'' gibt an wie groß diese Reihe ist. ''buffer'' liefert dann die Werte auf dem Namensstapel (siehe [[glInitNames]], [[glLoadName]] und [[glPushName]]) zurück, sobald der Rendermodus auf '''GL_SELECT''' steht (siehe [[glRenderMode]]). '''glSelectBuffer''' muss vor dem Aktivieren des Selektionsmodus aufgerufen werden und darf nicht während des Renderns im Modus '''GL_SELECT''' aufgerufen werden.
+
'''glSelectBuffer''' benötigt zwei Argumente: ''buffer'' ist ein Zeiger auf eine Reihe von vorzeichnelosen Ganzzahlwert, und ''size'' gibt an, wie groß diese Reihe ist. ''buffer'' liefert dann die Werte auf dem Namensstapel (siehe [[glInitNames]], [[glLoadName]] und [[glPushName]]) zurück, sobald der Rendermodus auf '''GL_SELECT''' steht (siehe [[glRenderMode]]). '''glSelectBuffer''' muss vor dem Aktivieren des Selektionsmodus aufgerufen werden und darf nicht während des Renderns im Modus '''GL_SELECT''' aufgerufen werden.
  
Die Selektion kann genutzt werden um zu ermitteln, welche [[Primitive|Primitiven]] in welcher Region eines Bildausschnittes gerendert wurden. Diese Region wird durch die aktuelle Modelansichts- und Perspektivenmatrix festgelegt.
+
Die Selektion kann genutzt werden, um zu ermitteln, welche [[Primitive|Primitiven]] in welcher Region eines Bildausschnittes gerendert wurden. Diese Region wird durch die aktuelle Modelansichts- und Perspektivenmatrix festgelegt.
  
Im Selektionsmodus werden keine Pixelfragmente durch die Rasterisierung generiert. Stattdessen erzeugt eine Primitive (oder Rasterposition), die dass durch das Betrachterfrustum (und nutzerdefinierte Schnittflächen) festgelegte Schnittvolumen schneidet, einen Selektionstreffer (Polygone die gecullt werden erzeugen keine Treffer). Wenn der Namensstapel verändert wird, oder wenn [[glRenderMode]] aufgerufen wird, werden die Treffer in ''buffer'' kopriert, sofern Treffer seit dem letzten passenden Ereignis (Änderung des Namensstapels oder [[glRenderMode]]-Aufruf) Treffer stattfanden. Die Trefferlist besteht aus der Nummer der Namen auf dem Stapel zum Zeitpunkt des Treffer, gefolgt von dem kleinsten und größten Tiefenwert aller Eckpunkte seit dem letzten Treffer und dem Inhalt des Namensstapels, mit dem untersten Namen an erster Stelle.
+
Im Selektionsmodus werden keine Pixelfragmente durch die Rasterisierung generiert. Stattdessen erzeugt eine Primitive (oder Rasterposition), die das durch das Betrachterfrustum (und nutzerdefinierte Schnittflächen) festgelegte Schnittvolumen schneidet, einen Selektionstreffer (Polygone, die gecullt werden, erzeugen keine Treffer). Wenn der Namensstapel verändert wird, oder wenn [[glRenderMode]] aufgerufen wird, werden die Treffer in ''buffer'' kopriert, sofern Treffer seit dem letzten passenden Ereignis (Änderung des Namensstapels oder [[glRenderMode]]-Aufruf) Treffer stattfanden. Die Trefferlist besteht aus der Nummer der Namen auf dem Stapel zum Zeitpunkt des Treffer, gefolgt von dem kleinsten und größten Tiefenwert aller Eckpunkte seit dem letzten Treffer und dem Inhalt des Namensstapels, mit dem untersten Namen an erster Stelle.
  
Tiefenwerte (die zwischen 0 und 1 liegen) werden mit 232-1 multipliziert, bevor sie im Trefferpuffer abgelegt werden.
+
Tiefenwerte (die zwischen 0 und 1 liegen) werden mit 2<sup>32</sup>-1 multipliziert, bevor sie im Trefferpuffer abgelegt werden.
  
Ein interner Index in den Puffer wird immer auf 0 gesetzt, sobald man in den Selektionsmodus wechsel. Jedesmal wenn ein Treffer nach ''buffer'' kopiert wird, wird dieser Index erhöht und zeigt auf die Zelle direkt nach dem Ende des Namensblockes, also auf die nächste verfügbare Zelle. Wenn das Trefferregister größer als der verfügbare Platz in ''buffer'' ist, werden so viele Daten kopiert bis dieser Platz aufgebraucht ist, und das Overflow-Flag wird gesetzt. Wenn der Namensstapel beim Kopieren des Trefferregisters leer ist, dann besteht dieser Treffer aus 0, gefolgt von dem kleinsten und größten Tiefenwert.
+
Ein interner Index in den Puffer wird immer auf 0 gesetzt, sobald man in den Selektionsmodus wechselt. Jedesmal wenn ein Treffer nach ''buffer'' kopiert wird, wird dieser Index erhöht und zeigt auf die Zelle direkt nach dem Ende des Namensblockes, also auf die nächste verfügbare Zelle. Wenn das Trefferregister größer als der verfügbare Platz in ''buffer'' ist, werden so viele Daten kopiert bis dieser Platz aufgebraucht ist, und das Overflow-Flag wird gesetzt. Wenn der Namensstapel beim Kopieren des Trefferregisters leer ist, dann besteht dieser Treffer aus 0, gefolgt von dem kleinsten und größten Tiefenwert.
  
Um den Selektionsmodus zu verlssen, ruft man [[glRenderMode]] mit einem Argument ungleich '''GL_SELECT''' auf. Sobald [[glRenderMode]] aufgerufen wird wenn der Modus '''GL_SELECT''' ist, liefert diese Funktion die Zahl der Treffer die in den Puffer kopiert wurden zurück, setzt das Overflow-Flag und den Zeiger des Selektionspuffers zurück und leert den Namenssstapel. Wenn das Overflow-Flag beim Aufruf von [[glRenderMode]] gesetzt ist, wird für die Zahl der Treffer ein negativer Wert zurückgeliefert.
+
Um den Selektionsmodus zu verlssen, ruft man [[glRenderMode]] mit einem Argument ungleich '''GL_SELECT''' auf. Sobald [[glRenderMode]] aufgerufen wird, wenn der Modus '''GL_SELECT''' ist, liefert diese Funktion die Zahl der Treffer, die in den Puffer kopiert wurden, zurück, setzt das Overflow-Flag und den Zeiger des Selektionspuffers zurück und leert den Namenssstapel. Wenn das Overflow-Flag beim Aufruf von [[glRenderMode]] gesetzt ist, wird für die Zahl der Treffer ein negativer Wert zurückgeliefert.
  
  
Zeile 45: Zeile 45:
  
 
== Hinweise ==
 
== Hinweise ==
Der Inhalt von ''buffer'' ist solange undefiniert, bis [[glRenderMode]] mit einem Argument ungleich ''GL_SELECT'' aufgerufen wird.
+
Der Inhalt von ''buffer'' ist solange undefiniert, bis [[glRenderMode]] mit einem Argument ungleich '''GL_SELECT''' aufgerufen wird.
  
 
[[glBegin]]/[[glEnd]]-Primitiven und Aufrufe von [[glRasterPos]] können Treffer erzeugen.
 
[[glBegin]]/[[glEnd]]-Primitiven und Aufrufe von [[glRasterPos]] können Treffer erzeugen.
Zeile 61: Zeile 61:
  
 
==  Zugehörige Wertrückgaben ==
 
==  Zugehörige Wertrückgaben ==
[[glGet]] mit dem Argument '''GL_NAME_STACK_DEPTH'''.
+
[[glGet]] mit dem Argument [[glGet#GL_NAME_STACK_DEPTH|GL_NAME_STACK_DEPTH]]
  
 +
[[glGet]] mit dem Argument [[glGet#GL_SELECTION_BUFFER_SIZE|GL_SELECTION_BUFFER_SIZE]]
 +
 +
[[glGetPointerv]] mit dem Argument '''GL_SELECTION_BUFFER_POINTER'''
  
  
Zeile 70: Zeile 73:
  
 
[[Kategorie:GL|SelectBuffer]]
 
[[Kategorie:GL|SelectBuffer]]
[[Kategorie:GL1.0]]
+
[[Kategorie:GL1.0|SelectBuffer]]

Aktuelle Version vom 27. Juli 2011, 17:55 Uhr

glSelectBuffer

Name

glSelectBuffer - Setzt einen Puffer, um Werte im Selektionsmodus zu speichern.


Delphi-Spezifikation

procedure glSelectBuffer(size : GLSizei; buffer : PGLUint);



Parameter

size Gibt die Größe des Puffers an.
buffer Speichert die Selektionsdaten.



Beschreibung

glSelectBuffer benötigt zwei Argumente: buffer ist ein Zeiger auf eine Reihe von vorzeichnelosen Ganzzahlwert, und size gibt an, wie groß diese Reihe ist. buffer liefert dann die Werte auf dem Namensstapel (siehe glInitNames, glLoadName und glPushName) zurück, sobald der Rendermodus auf GL_SELECT steht (siehe glRenderMode). glSelectBuffer muss vor dem Aktivieren des Selektionsmodus aufgerufen werden und darf nicht während des Renderns im Modus GL_SELECT aufgerufen werden.

Die Selektion kann genutzt werden, um zu ermitteln, welche Primitiven in welcher Region eines Bildausschnittes gerendert wurden. Diese Region wird durch die aktuelle Modelansichts- und Perspektivenmatrix festgelegt.

Im Selektionsmodus werden keine Pixelfragmente durch die Rasterisierung generiert. Stattdessen erzeugt eine Primitive (oder Rasterposition), die das durch das Betrachterfrustum (und nutzerdefinierte Schnittflächen) festgelegte Schnittvolumen schneidet, einen Selektionstreffer (Polygone, die gecullt werden, erzeugen keine Treffer). Wenn der Namensstapel verändert wird, oder wenn glRenderMode aufgerufen wird, werden die Treffer in buffer kopriert, sofern Treffer seit dem letzten passenden Ereignis (Änderung des Namensstapels oder glRenderMode-Aufruf) Treffer stattfanden. Die Trefferlist besteht aus der Nummer der Namen auf dem Stapel zum Zeitpunkt des Treffer, gefolgt von dem kleinsten und größten Tiefenwert aller Eckpunkte seit dem letzten Treffer und dem Inhalt des Namensstapels, mit dem untersten Namen an erster Stelle.

Tiefenwerte (die zwischen 0 und 1 liegen) werden mit 232-1 multipliziert, bevor sie im Trefferpuffer abgelegt werden.

Ein interner Index in den Puffer wird immer auf 0 gesetzt, sobald man in den Selektionsmodus wechselt. Jedesmal wenn ein Treffer nach buffer kopiert wird, wird dieser Index erhöht und zeigt auf die Zelle direkt nach dem Ende des Namensblockes, also auf die nächste verfügbare Zelle. Wenn das Trefferregister größer als der verfügbare Platz in buffer ist, werden so viele Daten kopiert bis dieser Platz aufgebraucht ist, und das Overflow-Flag wird gesetzt. Wenn der Namensstapel beim Kopieren des Trefferregisters leer ist, dann besteht dieser Treffer aus 0, gefolgt von dem kleinsten und größten Tiefenwert.

Um den Selektionsmodus zu verlssen, ruft man glRenderMode mit einem Argument ungleich GL_SELECT auf. Sobald glRenderMode aufgerufen wird, wenn der Modus GL_SELECT ist, liefert diese Funktion die Zahl der Treffer, die in den Puffer kopiert wurden, zurück, setzt das Overflow-Flag und den Zeiger des Selektionspuffers zurück und leert den Namenssstapel. Wenn das Overflow-Flag beim Aufruf von glRenderMode gesetzt ist, wird für die Zahl der Treffer ein negativer Wert zurückgeliefert.



Hinweise

Der Inhalt von buffer ist solange undefiniert, bis glRenderMode mit einem Argument ungleich GL_SELECT aufgerufen wird.

glBegin/glEnd-Primitiven und Aufrufe von glRasterPos können Treffer erzeugen.


Fehlermeldungen

GL_INVALID_VALUE wird generiert, wenn size negativ ist.

GL_INVALID_OPERATION wird generiert, wenn glSelectBuffer aufgerufen wird, solange der Rendermodus GL_SELECT ist, oder wenn glRenderMode mit dem Argument GL_SELECT aufgerufen wird, bevor glSelectBuffer aufgerufen wurde.

GL_INVALID_OPERATION wird generierte wenn glSelectBuffer in einem glBegin/glEnd-Block aufgerufen wird.


Zugehörige Wertrückgaben

glGet mit dem Argument GL_NAME_STACK_DEPTH

glGet mit dem Argument GL_SELECTION_BUFFER_SIZE

glGetPointerv mit dem Argument GL_SELECTION_BUFFER_POINTER


Siehe auch

glFeedbackBuffer, glInitNames, glLoadName, glPushName, glRenderMode