GL ARB occlusion query: Unterschied zwischen den Versionen
Ireyon (Diskussion | Beiträge) (→Beispiel) |
|||
(5 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt) | |||
Zeile 6: | Zeile 6: | ||
GL_ARB_occlusion_query | GL_ARB_occlusion_query | ||
− | + | ||
+ | |||
== Beschreibung == | == Beschreibung == | ||
− | GL_ARB_occlusion_query bietet eine Möglichkeit | + | GL_ARB_occlusion_query bietet eine Möglichkeit festzustellen, wieviele Samples (Pixel) einer [[Primitive]] gezeichnet werden. |
<br> | <br> | ||
== Neue Prozeduren == | == Neue Prozeduren == | ||
− | procedure | + | procedure '''glGenQueriesARB'''(n : integer; ids : PGLuint); |
− | procedure | + | procedure '''glDeleteQueriesARB'''(n : integer; const ids : PGLuint); |
− | function | + | function '''glIsQueryARB'''(id : Cardinal) : Boolean; |
− | procedure | + | procedure '''glBeginQueryARB'''(target : Cardinal; id : Cardinal); |
− | procedure | + | procedure '''glEndQueryARB'''(target : Cardinal); |
− | procedure | + | procedure '''glGetQueryivARB'''(target : Cardinal; pname : Cardinal; params : PGLInt); |
− | procedure | + | procedure '''glGetQueryObjectivARB'''(id : Cardinal; pname : Cardinal; params : PGLInt); |
− | procedure | + | procedure '''glGetQueryObjectuivARB'''(id : Cardinal, pname : Cardinal; params : PGLuint); |
Zeile 36: | Zeile 37: | ||
== Anwendung == | == Anwendung == | ||
− | Bevor der Occlusion Test zur Verfügung steht, muss erst einmal eine Query mit glGenQueriesARB() erzeugt werden. Danach wird das Zählen der Samples mit glBeginQueryARB() und GL_SAMPLES_PASSED_ARB als <target> Parameter gestartet. Dann Szene | + | Bevor der Occlusion Test zur Verfügung steht, muss erst einmal eine Query mit glGenQueriesARB() erzeugt werden. Danach wird das Zählen der Samples mit glBeginQueryARB() und GL_SAMPLES_PASSED_ARB als <target> Parameter gestartet. Dann wird die Szene gerendert. Um den Test auszuwerten, muss das Zählen erst einmal mit glEndQueryARB() beendet werden. Anschließend kann man sich das Ergebnis des Test, also die gezeichneten Pixel, mittels glGetQueryObjectivARB() (QUERY_RESULT_ARB als <pname> Parameter) zurückliefern lassen. |
== Beispiel == | == Beispiel == | ||
− | + | '''var''' Query : Gluint; | |
Pixel : Integer; | Pixel : Integer; | ||
<br /> | <br /> | ||
[...] | [...] | ||
<br /> | <br /> | ||
− | <font color="#000080"> | + | <font color="#000080">''//== Query erzeugen''</font> |
− | glGenQueriesARB | + | glGenQueriesARB'''('''1,@Query''')'''; |
− | <font color="#000080"> | + | <font color="#000080">''//== mit dem Zählen beginnen''</font> |
− | glBeginQueryARB | + | glBeginQueryARB'''('''GL_SAMPLES_PASSED_ARB,Query''')'''; |
<br /> | <br /> | ||
− | <font color="#000080"> | + | <font color="#000080">''//== Szene/Primitive zeichnen''</font> |
<br /> | <br /> | ||
− | <font color="#000080"> | + | <font color="#000080">''//== aufhören zu Zählen''</font> |
− | glEndQueryARB | + | glEndQueryARB'''('''GL_SAMPLES_PASSED_ARB''')'''; |
− | <font color="#000080"> | + | <font color="#000080">''//== Ergebnis wird nach Pixel zurückgeliefert''</font> |
− | glGetQueryObjectivARB | + | glGetQueryObjectivARB'''('''Query,GL_QUERY_RESULT_ARB,@Pixel''')'''; |
− | <font color="#000080"> | + | <font color="#000080">''//== Query wieder freigeben''</font> |
− | glDeleteQueriesARB | + | glDeleteQueriesARB'''('''1,@Query''')'''; |
== Ressourcen == | == Ressourcen == | ||
[http://delphigl.com/script/do_show.php?name=nv_occlusion_query&action=2 Occlusion Query Tutorial mit GL_OCCLUSION_QUERY_NV]<br> | [http://delphigl.com/script/do_show.php?name=nv_occlusion_query&action=2 Occlusion Query Tutorial mit GL_OCCLUSION_QUERY_NV]<br> | ||
− | [http:// | + | [http://opengl.org/registry/specs/ARB/occlusion_query.txt Original Extension-Spezifikation] |
Aktuelle Version vom 21. Mai 2010, 22:11 Uhr
Inhaltsverzeichnis
GL_ARB_occlusion_query
Die Orginalspezifikation finden Sie unter "Ressourcen" am Ende des Artikels. |
Abfragestring
GL_ARB_occlusion_query
Beschreibung
GL_ARB_occlusion_query bietet eine Möglichkeit festzustellen, wieviele Samples (Pixel) einer Primitive gezeichnet werden.
Neue Prozeduren
procedure glGenQueriesARB(n : integer; ids : PGLuint); procedure glDeleteQueriesARB(n : integer; const ids : PGLuint); function glIsQueryARB(id : Cardinal) : Boolean; procedure glBeginQueryARB(target : Cardinal; id : Cardinal); procedure glEndQueryARB(target : Cardinal); procedure glGetQueryivARB(target : Cardinal; pname : Cardinal; params : PGLInt); procedure glGetQueryObjectivARB(id : Cardinal; pname : Cardinal; params : PGLInt); procedure glGetQueryObjectuivARB(id : Cardinal, pname : Cardinal; params : PGLuint);
Neue Tokens
Für glBeginQueryARB, glEndQueryARB oder glGetQueryivARB als <target> Parameter
GL_SAMPLES_PASSED_ARB
Für glGetQueryivARB als <pname> Parameter
GL_QUERY_COUNTER_BITS_ARB
GL_CURRENT_QUERY_ARB
Für glGetQueryObjectivARB oder glGetQueryObjectuivARB als <pname> Parameter
QUERY_RESULT_ARB
QUERY_RESULT_AVAILABLE_ARB
Anwendung
Bevor der Occlusion Test zur Verfügung steht, muss erst einmal eine Query mit glGenQueriesARB() erzeugt werden. Danach wird das Zählen der Samples mit glBeginQueryARB() und GL_SAMPLES_PASSED_ARB als <target> Parameter gestartet. Dann wird die Szene gerendert. Um den Test auszuwerten, muss das Zählen erst einmal mit glEndQueryARB() beendet werden. Anschließend kann man sich das Ergebnis des Test, also die gezeichneten Pixel, mittels glGetQueryObjectivARB() (QUERY_RESULT_ARB als <pname> Parameter) zurückliefern lassen.
Beispiel
var Query : Gluint; Pixel : Integer;
[...]
//== Query erzeugen glGenQueriesARB(1,@Query); //== mit dem Zählen beginnen glBeginQueryARB(GL_SAMPLES_PASSED_ARB,Query);
//== Szene/Primitive zeichnen
//== aufhören zu Zählen glEndQueryARB(GL_SAMPLES_PASSED_ARB); //== Ergebnis wird nach Pixel zurückgeliefert glGetQueryObjectivARB(Query,GL_QUERY_RESULT_ARB,@Pixel); //== Query wieder freigeben glDeleteQueriesARB(1,@Query);
Ressourcen
Occlusion Query Tutorial mit GL_OCCLUSION_QUERY_NV
Original Extension-Spezifikation