glBeginQuery: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
(neu erstellt)
 
K (Siehe auch)
 
(5 dazwischenliegende Versionen von 4 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
= glBeginQuery =
+
= glBeginQuery, glEndQuery =
  
 
== Name ==
 
== Name ==
 
'''glBeginQuery''' - Kennzeichnet den Anfang einer [[Occlusion Query]].
 
'''glBeginQuery''' - Kennzeichnet den Anfang einer [[Occlusion Query]].
  
<br>
+
'''glEndQuery''' - Kennzeichnet das Ende einer [[Occlusion Query]].
 +
 
 +
 
 +
 
 
== Delphi-Spezifikation ==
 
== Delphi-Spezifikation ==
  procedure '''glBeginQuery'''(''target'' : GLenum; ''id'' : GLuint)
+
  procedure '''glBeginQuery'''(''target'' : GLenum; ''id'' : GLuint);
 +
procedure '''glEndQuery'''(''target'' : GLenum);
  
 
== Parameter ==
 
== Parameter ==
Zeile 18: Zeile 22:
 
|}
 
|}
  
<br>
+
 
 +
 
 
== Beschreibung ==  
 
== Beschreibung ==  
Eine [[Occlusion Query]] wird mit '''glBeginQuery''' gestartet und mit [[glEndQuery]] beendet, wobei der Parameter ''target'' stets '''GL_SAMPLES_PASSED''' sein muss. Falls '''glBeginQuery''' mit einer unbenutzten ''id'' aufgerufen wird, wird dieser Name als ''benutzt'' gekennzeichnet und einem neuen Query-Objekt zugewiesen.
+
Eine [[Occlusion Query]] wird mit '''glBeginQuery''' gestartet und mit '''glEndQuery''' beendet, wobei der Parameter ''target'' stets '''GL_SAMPLES_PASSED''' sein muss. Falls '''glBeginQuery''' mit einer unbenutzten ''id'' aufgerufen wird, wird dieser Name als ''benutzt'' gekennzeichnet und einem neuen Query-Objekt zugewiesen.
  
 
'''glBeginQuery''' mit dem ''target'' '''GL_SAMPLES_PASSED''' setzt den aktuellen Sample-Zähler auf 0 zurück, die interne Variable ''Aktivstatus'' auf '''GL_TRUE''' und die aktive Query-ID auf ''id''.
 
'''glBeginQuery''' mit dem ''target'' '''GL_SAMPLES_PASSED''' setzt den aktuellen Sample-Zähler auf 0 zurück, die interne Variable ''Aktivstatus'' auf '''GL_TRUE''' und die aktive Query-ID auf ''id''.
  
Wenn eine Occlusion-Query aktiv ist, erhöht sich der Sample-Zähler für jedes [[Fragment]], welches den [[Tiefentest]] besteht, um einen bestimmten Wert. Falls der Wert von '''GL_SAMPLE_BUFFERS''' 0 ist, dann erhöht sich der Sample-Zähler um den Wert 1 für jedes Fragment. Falls der Wert von '''GL_SAMPLE_BUFFERS''' 1 ist, erhöht sich der Sample-Zähler um die Anzahl der Samples, dessen Überdeckungs-Bit gesetzt ist. Implementation sind nach ihrem Ermessen jedoch befugt stattdessen den Sample-Zähler um den Wert von '''GL_SAMPLES''' zu erhöhen, falls irgendein Sample im Fragment überdeckt wird. Falls der Sample-Zähler überläuft, z.B. den Wert 2<sup>n</sup> - 1 überschreitet (wobei n die Anzahl der Bits des Zählers ist), wird sein Wert undefiniert. Es wird empfohlen, ist jedoch nicht erforderlich, dass OpenGL-Implementationen diesen Überlauf behandeln.
+
'''glEndQuery''' mit ''target'' '''GL_SAMPLES PASSED''' initialisiert eine Kopie der aktuellen Sample-Pass-Zahl in den Ergebniswert des aktiven Query-Objektes, setzt die Erreichbarkeit des aktiven Occlusion-Query-Objekt Ergebnisses auf '''GL_FALSE''' (siehe [[glGetQueryObject]]), setzt ''Aktivstatus'' auf '''GL_FALSE''' (d.h. das aktuelle Query-Objekt ist nicht mehr aktiv) und die aktive Query-Id auf 0.
 +
 
 +
 
 +
Wenn eine Occlusion-Query aktiv ist, erhöht sich für jedes [[Fragment]], welches den [[Tiefentest]] besteht, der Sample-Zähler um einen bestimmten Wert.<br>
 +
Falls der Wert von '''GL_SAMPLE_BUFFERS''' 0 ist, erhöht sich für jedes Fragment der Sample-Zähler um den Wert 1.<br>
 +
Falls der Wert von '''GL_SAMPLE_BUFFERS''' 1 ist, erhöht sich der Sample-Zähler um die Anzahl der Samples, dessen [[Coverage Bit|Überdeckungs-Bit]] gesetzt ist.  
 +
 
 +
OpenGL-Implementationen ist es jedoch nach ihrem eigenen Ermessen erlaubt, stattdessen den Sample-Zähler um den Wert von '''GL_SAMPLES''' zu erhöhen, falls irgendein [[Sample]] im Fragment überdeckt wird. Falls der Sample-Zähler überläuft, z.B. den Wert 2<sup>n</sup> - 1 überschreitet (wobei n die Anzahl der Bits des Zählers ist), wird sein Wert undefiniert.
 +
OpenGL-Implementationen können, müssen jedoch nicht, diesen Überlauf behandeln.
 +
 
 +
 
  
 
== Hinweise ==
 
== Hinweise ==
 
'''glGenQueries''' ist erst ab OpenGL 1.5 oder höher verfügbar.
 
'''glGenQueries''' ist erst ab OpenGL 1.5 oder höher verfügbar.
 +
 +
  
 
== Fehlermeldungen ==
 
== Fehlermeldungen ==
 
;'''GL_INVALID_ENUM''': ''target'' ist nicht '''GL_SAMPLES_PASSED.
 
;'''GL_INVALID_ENUM''': ''target'' ist nicht '''GL_SAMPLES_PASSED.
  
;'''GL_INVALID_OPERATION''': '''glBeginQuery''' wurde mit ''id'' gleich 0 aufgerufen, während eine andere Query mit demselben ''target''-Wert ausgeführt wird oder ''id'' gleich dem Namen einer aktuell ausgeführten Query ist.<br>
+
;'''GL_INVALID_OPERATION''': '''glBeginQuery''' wurde mit ''id'' gleich 0 aufgerufen, während eine andere Query mit demselben ''target''-Wert ausgeführt wird oder ''id'' gleich dem Namen einer aktuell ausgeführten Query ist.
 +
 
 +
;'''GL_INVALID_OPERATION''': '''glEndQuery''' wurde aufgerufen, ohne dass eine Query mit demselben ''target''-Wert gestartet wurde.
 +
 
 +
 
  
 
== Zugehörige Wertrückgaben ==
 
== Zugehörige Wertrückgaben ==
[[glGetQuery]] mit Token '''GL_CURRENT_QUERY''' gibt die momentan aktive Query-ID zurück.<br>
+
[[glGetQuery]] mit Token '''GL_CURRENT_QUERY''' gibt die momentan aktive Query-ID zurück.
[[glGetQuery]] mit Token '''GL_QUERY_COUNTER_BITS''' gibt die Anzahl der Bits des Occlusion-Query-Zählers zurück.<br>
+
 
 +
[[glGetQuery]] mit Token '''GL_QUERY_COUNTER_BITS''' gibt die Anzahl der Bits des Occlusion-Query-Zählers zurück.
 +
 
 +
 
  
 
== Siehe auch ==
 
== Siehe auch ==
[[glDeleteQueries]], [[glEndQuery]], [[glGenQueries]], [[glGetQuery]], [[glGetQueryObject]], [[glIsQuery]]
+
[[glDeleteQueries]], [[glGenQueries]], [[glGetQuery]], [[glGetQueryObject]], [[glIsQuery]]
  
 
[[Kategorie:GL|BeginQuery]]
 
[[Kategorie:GL|BeginQuery]]
 +
[[Kategorie:GL1.5|BeginQuery]]
 +
[[Kategorie:GL3|BeginQuery]]

Aktuelle Version vom 21. Februar 2014, 17:46 Uhr

glBeginQuery, glEndQuery

Name

glBeginQuery - Kennzeichnet den Anfang einer Occlusion Query.

glEndQuery - Kennzeichnet das Ende einer Occlusion Query.


Delphi-Spezifikation

procedure glBeginQuery(target : GLenum; id : GLuint);
procedure glEndQuery(target : GLenum);

Parameter

target Muss GL_SAMPLES_PASSED sein.
id Name des Query-Objektes, welches neu begonnen werden soll.


Beschreibung

Eine Occlusion Query wird mit glBeginQuery gestartet und mit glEndQuery beendet, wobei der Parameter target stets GL_SAMPLES_PASSED sein muss. Falls glBeginQuery mit einer unbenutzten id aufgerufen wird, wird dieser Name als benutzt gekennzeichnet und einem neuen Query-Objekt zugewiesen.

glBeginQuery mit dem target GL_SAMPLES_PASSED setzt den aktuellen Sample-Zähler auf 0 zurück, die interne Variable Aktivstatus auf GL_TRUE und die aktive Query-ID auf id.

glEndQuery mit target GL_SAMPLES PASSED initialisiert eine Kopie der aktuellen Sample-Pass-Zahl in den Ergebniswert des aktiven Query-Objektes, setzt die Erreichbarkeit des aktiven Occlusion-Query-Objekt Ergebnisses auf GL_FALSE (siehe glGetQueryObject), setzt Aktivstatus auf GL_FALSE (d.h. das aktuelle Query-Objekt ist nicht mehr aktiv) und die aktive Query-Id auf 0.


Wenn eine Occlusion-Query aktiv ist, erhöht sich für jedes Fragment, welches den Tiefentest besteht, der Sample-Zähler um einen bestimmten Wert.
Falls der Wert von GL_SAMPLE_BUFFERS 0 ist, erhöht sich für jedes Fragment der Sample-Zähler um den Wert 1.
Falls der Wert von GL_SAMPLE_BUFFERS 1 ist, erhöht sich der Sample-Zähler um die Anzahl der Samples, dessen Überdeckungs-Bit gesetzt ist.

OpenGL-Implementationen ist es jedoch nach ihrem eigenen Ermessen erlaubt, stattdessen den Sample-Zähler um den Wert von GL_SAMPLES zu erhöhen, falls irgendein Sample im Fragment überdeckt wird. Falls der Sample-Zähler überläuft, z.B. den Wert 2n - 1 überschreitet (wobei n die Anzahl der Bits des Zählers ist), wird sein Wert undefiniert. OpenGL-Implementationen können, müssen jedoch nicht, diesen Überlauf behandeln.


Hinweise

glGenQueries ist erst ab OpenGL 1.5 oder höher verfügbar.


Fehlermeldungen

GL_INVALID_ENUM
target ist nicht GL_SAMPLES_PASSED.
GL_INVALID_OPERATION
glBeginQuery wurde mit id gleich 0 aufgerufen, während eine andere Query mit demselben target-Wert ausgeführt wird oder id gleich dem Namen einer aktuell ausgeführten Query ist.
GL_INVALID_OPERATION
glEndQuery wurde aufgerufen, ohne dass eine Query mit demselben target-Wert gestartet wurde.


Zugehörige Wertrückgaben

glGetQuery mit Token GL_CURRENT_QUERY gibt die momentan aktive Query-ID zurück.

glGetQuery mit Token GL_QUERY_COUNTER_BITS gibt die Anzahl der Bits des Occlusion-Query-Zählers zurück.


Siehe auch

glDeleteQueries, glGenQueries, glGetQuery, glGetQueryObject, glIsQuery