GL ARB occlusion query

Aus DGL Wiki
Version vom 21. Mai 2010, 22:11 Uhr von Ireyon (Diskussion | Beiträge) (Beispiel)

(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

GL_ARB_occlusion_query

Info DGL.png 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