GL ARB occlusion query: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
 
(Beispiel)
 
(5 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 6: Zeile 6:
 
GL_ARB_occlusion_query
 
GL_ARB_occlusion_query
  
<br>
+
 
 +
 
 
== Beschreibung ==
 
== Beschreibung ==
GL_ARB_occlusion_query bietet eine Möglichkeit, festzustellen, wieviele Samples (Pixel) einer [[Primitive]] gezeichnet wird.
+
GL_ARB_occlusion_query bietet eine Möglichkeit festzustellen, wieviele Samples (Pixel) einer [[Primitive]] gezeichnet werden.
 
<br>
 
<br>
  
 
== Neue Prozeduren ==
 
== Neue Prozeduren ==
  
  procedure <b>glGenQueriesARB</b>(n : integer; ids : PGLuint);
+
  procedure '''glGenQueriesARB'''(n : integer; ids : PGLuint);
  procedure <b>glDeleteQueriesARB</b>(n : integer; const ids : PGLuint);
+
  procedure '''glDeleteQueriesARB'''(n : integer; const ids : PGLuint);
  function  <b>glIsQueryARB</b>(id : Cardinal) : Boolean;
+
  function  '''glIsQueryARB'''(id : Cardinal) : Boolean;
  procedure <b>glBeginQueryARB</b>(target : Cardinal; id : Cardinal);
+
  procedure '''glBeginQueryARB'''(target : Cardinal; id : Cardinal);
  procedure <b>glEndQueryARB</b>(target : Cardinal);
+
  procedure '''glEndQueryARB'''(target : Cardinal);
  procedure <b>glGetQueryivARB</b>(target : Cardinal; pname : Cardinal; params : PGLInt);
+
  procedure '''glGetQueryivARB'''(target : Cardinal; pname : Cardinal; params : PGLInt);
  procedure <b>glGetQueryObjectivARB</b>(id : Cardinal; pname : Cardinal; params : PGLInt);
+
  procedure '''glGetQueryObjectivARB'''(id : Cardinal; pname : Cardinal; params : PGLInt);
  procedure <b>glGetQueryObjectuivARB</b>(id : Cardinal, pname : Cardinal; params : PGLuint);
+
  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 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.
+
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 ==
  
  <b>var</b> Query : Gluint;
+
  '''var''' Query : Gluint;
 
     Pixel : Integer;
 
     Pixel : Integer;
 
  <br />
 
  <br />
 
  [...]
 
  [...]
 
  <br />
 
  <br />
  <font color="#000080"><i>//== Query erzeugen</i></font>
+
  <font color="#000080">''//== Query erzeugen''</font>
  glGenQueriesARB<b>(</b>1,@Query<b>)</b>;
+
  glGenQueriesARB'''('''1,@Query''')''';
  <font color="#000080"><i>//== mit dem Zählen beginnen</i></font>
+
  <font color="#000080">''//== mit dem Zählen beginnen''</font>
  glBeginQueryARB<b>(</b>GL_SAMPLES_PASSED_ARB,Query<b>)</b>;
+
  glBeginQueryARB'''('''GL_SAMPLES_PASSED_ARB,Query''')''';
 
  <br />
 
  <br />
  <font color="#000080"><i>//== Szene/Primitive zeichnen</i></font>
+
  <font color="#000080">''//== Szene/Primitive zeichnen''</font>
 
  <br />
 
  <br />
  <font color="#000080"><i>//== aufhören zu Zählen</i></font>
+
  <font color="#000080">''//== aufhören zu Zählen''</font>
  glEndQueryARB<b>(</b>GL_SAMPLES_PASSED_ARB<b>)</b>;
+
  glEndQueryARB'''('''GL_SAMPLES_PASSED_ARB''')''';
  <font color="#000080"><i>//== Ergebnis wird nach Pixel zurückgeliefert</i></font>
+
  <font color="#000080">''//== Ergebnis wird nach Pixel zurückgeliefert''</font>
  glGetQueryObjectivARB<b>(</b>Query,GL_QUERY_RESULT_ARB,@Pixel<b>)</b>;
+
  glGetQueryObjectivARB'''('''Query,GL_QUERY_RESULT_ARB,@Pixel''')''';
  <font color="#000080"><i>//== Query wieder freigeben</i></font>
+
  <font color="#000080">''//== Query wieder freigeben''</font>
  glDeleteQueriesARB<b>(</b>1,@Pixel<b>)</b>;
+
  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://oss.sgi.com/projects/ogl-sample/registry/ARB/occlusion_query.txt Original Extension-Spezifikation]
+
[http://opengl.org/registry/specs/ARB/occlusion_query.txt Original Extension-Spezifikation]

Aktuelle Version vom 21. Mai 2010, 22:11 Uhr

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