Registriert: Mo Dez 03, 2012 11:12 Beiträge: 2
Programmiersprache: C++
Versuche, so ein bisschen mit Vertex-Arrays, VBOs und den VAOs bekannt zu werden. So ganz krieg ich das nicht zusammen. Was Vertey-Arrays sind, habe ich rausbekommen, aber dann gelesen, dass man die nich mehr gebrauchen soll. Also VBOs, ist auch irgendwie klar geworden. Was ich absolut nicht kapiere, dass sind die VBAs. Hab mal gelesen, dass man die gebraucht, wenn man mehrere Vertex-Arrays bereitstellen will. Aber von den Vertex-Arrays sind wir doch runter. Und bei VBOs? Und wozu genau? In einem Tutorial wurde das gemacht, VBOs und ein VBA zusammen, aber ich konnte keine Verbindungslinie zwischen den beiden Sachen entdecken. Also hab ich die VBAs mal rausgeschmissen. Funktionierte dann genau so. Wozu also?
Registriert: Sa Mär 31, 2012 23:14 Beiträge: 26
Programmiersprache: PASCAL
Also Vertex-Arrays sind Speicher im (normalen) RAM, der deine Vertexdaten enthält. Wie du gesagt hast sollte (mit OpenGL3: kann) man sowas (offiziell) nicht mehr machen. Ist ja auch Schwachfug die Daten jeden Frame neu hochzuladen. Dafür gibt es VBOs: Bei denen wird der Speicher in VRAM alloziiert, und du musst (wie bei VAs auch) mit glVertexAttribPointer() u.Ä. die Einstellungen treffen und die Puffer glBindBuffer()-en. Vertex-Array-Objects (VAOs) speichern jetzt diese Pufferbindungen und Einstellungen, sodass du statt 5 mal glVertexAttribPointer() nur noch 1x glBindVertexArray() aufrufst, du kapselst damit also deine Infos, wie OpenGL die Daten verarbeiten soll. Die VAOs funktionieren dabei sowohl mit VBOs als auch (in OpenGL < 3 oder NVidias Interpretation) mit den veralteten VertexArrays. Und nicht VA = Vertex Array und VAO = Vertex-Array-Object durcheinanderbringen ^^
_________________ The force, strong it is in OpenGL.
Registriert: Mo Dez 03, 2012 11:12 Beiträge: 2
Programmiersprache: C++
Danke, ich seh schon klarer. Wenn ich das richtig sehe, dann aktiviere ich in der Init-Phase, nachdem ich die erforderliche Anzahl von VBAs eingerichtet habe, mit glBindVertexArray das gewünschte VBA und bastel darin die gewünschten VBOs zusammen. Zur Laufzeit gebrauche ich wieder glBindVertexArray, nun aber, um das passende Bündel von VBOs auszuwählen. Ist das richtig?
Registriert: Sa Mär 31, 2012 23:14 Beiträge: 26
Programmiersprache: PASCAL
Ja. Das ist dieses (zugegebenermaßen idiotische) Bind-To-Modify-Konzept von OpenGL, dass man Sachen binden muss um sie zu verändern/einzurichten. Wenn dir das nicht schmeckt könntest du auch GL_EXT_direct_state_access verwenden, das ist ein alternatives Konzept dass a) mit der Objekt-ID (also das was glGen*() zurückgibt) statt dem gebundenen Objekt arbeitet und b) mit neueren Objects wie Samplern oder Pipelines schon ohne Extension umgesetzt wurde. Texturen, VBOs, VAOs usw. hinken da noch hinterher, haben aber EXT_dsa. (Achtung: Die Extension muss nicht zwangsläufig vorhanden sein; aber NVidia und AMD haben sie so gut wie auf allen Karten/Treibern drauf)
_________________ The force, strong it is in OpenGL.
Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.