Computergrafik

OpenGL Vertex Arrays

Batching | | GL Indexed Face Sets

Jeder Vertex wird unmittelbar an die Hardware geschickt.

  • Overhead für viele Vertices am Stück (Batches).
  • Bus Traffic von CPU zu GPU

Ein Batch kann zu einem Array von Vertices (Vertex Array) zusammengefasst werden. Man spezifiziert einen Zeiger auf den Anfang eines Arrays von 3D Punkten, welche den Positionen der Vertices entsprechen.

GLfloat point_array[]={0,0,0, ...};

glVertexPointer(3,GL_FLOAT,0,point_array);
glEnableClientState(GL_VERTEX_ARRAY);

Für jedes Attribut eines Vertex existiert ein Zeiger auf das entsprechende Array, z.B. für die Farbwerte:

glColorPointer(4,GL_FLOAT,0,rgba_array);
glEnableClientState(GL_COLOR_ARRAY);

Weitere Arrays: GL_NORMAL_ARRAY, GL_TEXTURE_COORD_ARRAY, etc.

Zeichnen durch indizierte Angabe eines Vertex Strips:

glDrawArrays(GL_TRIANGLE_STRIP,
             index,count);

Dadurch werden die Vertices des Arrays mit den Indices index,..,index+count-1 gezeichnet.

Vertex-Arrays können auch im Speicher der Grafikhardware resident gehalten werden, so dass für mehrere Triangle Strips nur noch der Befehl zum Zeichnen der entsprechenden Indices über den Bus geschickt werden muss.

Batching | | GL Indexed Face Sets

Options: