GL ARB occlusion query
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 Szene wird 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,@Pixel);
Ressourcen
Occlusion Query Tutorial mit GL_OCCLUSION_QUERY_NV
Original Extension-Spezifikation