Damit OpenGL auf der GPU rechnen kann, müssen wir alle nötigen Daten (z.B. die Positionen der einzelnen Vertices oder das Indexed Face Set) bereitstellen. Die Daten speichern wir in einem Buffer Object. Das ist einfach Speicher auf der GPU. Auf den haben wir allerdings keinen direkten Zugriff, sondern nur über einen Buffer Binding Point. Diesen Binding Point können wir mit dem Buffer verbinden, um dann Daten über den Zielport an den Buffer zu speichern. Konkret geht das so:
- Buffer auf der GPU erstellen mit glGenBuffers
- Den Buffer an ein Ziel binden mit glBindBuffer
- Die Daten über Ziel an gebundenen Buffer senden mit glBufferData
Beispiel
// Die seien hier mal schon definiert
vector<vec3> vertices;
vector<unsigned> indices;
// 1. Buffer anlegen
GLuint vbo;
GLuint ibo;
glGenBuffers(1, &vbo);
glGenBuffers(1, &ibo);
// 2. Buffer an ein Ziel binden
glBind(GL_ARRAY_BUFFER, vbo);
// 3. Daten über Ziel an Buffer senden
glBufferData(
GL_ARRAY_BUFFER,
vertices.size() * sizeof(vec3),
&vertices[0],
GL_STATIC_DRAW
);
// Bindung lösen
glBind(GL_ARRAY_BUFFER, 0);
// Analog für den Index Buffer
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ibo);
glBufferData(
GL_ELEMENT_ARRAY_BUFFER,
indices.size() * sizeof(unsigned),
&indices[0],
GL_STATIC_DRAW
);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); // Bindung lösen