DGL
https://delphigl.com/forum/

Pimp My Wiki
https://delphigl.com/forum/viewtopic.php?f=21&t=6815
Seite 3 von 3

Autor:  Lossy eX [ Mo Aug 11, 2008 08:44 ]
Betreff des Beitrags: 

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.

Autor:  Flash [ Mo Aug 11, 2008 09:00 ]
Betreff des Beitrags: 

Das sollte man unter der Überschrift "Unterschiede zu VertexBufferArrays (VBO)" mal festhalten. 8)

Autor:  Lossy eX [ Mo Aug 11, 2008 09:48 ]
Betreff des Beitrags: 

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.

Autor:  Philip [ Mo Aug 11, 2008 11:11 ]
Betreff des Beitrags: 

Könntest du das einbauen? Ich hab die leider noch nie angefasst, da ich erst seit kurzem ein Rechner habe, der das auch kann. ;)

Autor:  Lossy eX [ Mo Aug 11, 2008 14:26 ]
Betreff des Beitrags: 

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. ;)

Autor:  Philip [ Mo Aug 11, 2008 14:51 ]
Betreff des Beitrags: 

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?

Autor:  Lossy eX [ Mo Aug 11, 2008 15:48 ]
Betreff des Beitrags: 

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.

Seite 3 von 3 Alle Zeiten sind UTC + 1 Stunde
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/