Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
glBindBuffer gehört zu VertexBufferObjects und das kann man als Erweiterung zu VertexArrays sehen. VertexArrays halten ihre Daten nur Lokal im Speicher der Anwendung wärend VertexBufferObjects die Daten meistens im Speicher der Grafikkarte ablegen. Außer der Treiber kappselt es intern. Bei großen Datenmengen würde man dann einen wirklich markanten Unterschied feststellen. Der Grafikspeicher ist halt schneller und über einen größeren Bus angeschlossen. VertexBufferObjects werden normal auch Asynchron gezeichnet. Was bei VertexArrays große Risiken birgt.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Genau genommen würde ich persönlich sogar sagen, dass VertexArrays nur noch als Fallback dienen sollten, wenn VertexBufferObjects nicht unterstützt werden. Bzw. wenn es sich um wirklich sehr sehr kleine Datenmengen handelt. Denn da kann das Bindes eines Buffers auch länger dauern als das direkte Zeichnen. Wobei es sich dann vermutlich eher lohnt den Code so umzustellen, dass man nicht das ganze VertexBufferObject zeichnet sondern nur kurze Ausschnitte davon. Dann muss man ständig die Buffer wechseln. Evtl sollte man da einen Hinweis unterbringen, dass man wenn möglich zu VertexBufferObjects greift.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Also ein Tutorial zu VertexBufferObjects gibt es bereits. Von daher braucht man das nicht doppelt. Aber ich denke ich schau mal wann ich in der Lage bin einen Hinweis einzufügen.
Hab ein Hinweis zu dem Tutorial eingefügt und warum man lieber VBOs nehmen sollte.
Aber: Was ist der Vorteil von VBOs gegenüber einem Vertexarray in einer Displayliste? Kann man die Vertices beim VBO noch ändern, wenn sie zu der Graka geschickt sind?
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Also, wenn du mit glBegin und glEnd innerhalb einer DisplayListe arbeitest werden auf aktuellen Karten auch VBOs benutzt. Ich denke das Gleiche wäre auch bei VertexArrays der Fall. Deswegen sind DisplayListen teilweise auch so schnell. Weil sie in Wirklichkeit VBOs benutzen.
Der Vorteil bei VBOs liegt unter anderem darin, dass du zum Beispiel ein Model (Vertexdaten) hast und dann 1-3 Indexbuffer. Je nachdem wie weit das Objekt entfernt ist könnte man einen anderen Index mit weniger oder mehr Einträgen benutzen (Level of Detail). Außerdem kannst du Teilbereiche neu übertragen oder eben als WRITE_ONLY mappen und neu befüllen (vertex streaming). Du kannst auch einen 10 MB großen Buffer erstellen und dann verschiedene Objekte rein packen und sie dann zeichnen ohne den Buffer neu binden zu müssen. Du kannst wie beim VertexArray auch verschiedene Elemente erstellen (zum Beispiel 2x TexCoords) und dann benutzt du entweder die TexCoords 1 oder 2. Oder beide etc. Also alles in allem sehr flexibel. Außerdem gibt es ein recht neues Target um die Daten in eine Textur zu schreiben oder zu lesen (Streaming von Texturen).
Und falls OpenGL 3.0 irgendwann mal erscheinen sollte sind VBOs die einzige Möglichkeit mit VertexDaten zu arbeiten.
Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste
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.