PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : F: OpenGL,VBO und vertexformat


Chris Lux
2003-05-25, 16:17:54
hi, problem:

pseudocode:
vertex
{
float position[3];
float normal[3];
float color[4];
};

ist es besser, in verbindung mit oder ohne VBO, diese vertices in ein array zu packen und bei den funktionen gl*Pointer() einen stride anzugeben oder die einzelnen komponenten in einzelne arrays zu packen (ohne stride) und hintereinander in den vbo buffer zu packen (dann mit offset zum anfang des buffers)?

mit stride:
[p,n,c,p,n,c,.....,p,n,c]

ohne:

[p,p,p,p,..,p,n,n,n,...n,c,c,c...c]

zeckensack
2003-05-25, 17:49:38
Es kommt darauf an :D

Wenn das Vertex Array komplett statisch oder komplett dynamisch ist, dann mach interleaving.
Aus einem 'gemischten' Array können die Chips etwas effizienter streamen.

Die Trennung der Komponenten macht erst dann Sinn, wenn du teilweise dynamische Arrays hast. ZB in einem (zugegeben altmodischen, weil nicht VS-basierten) Animationssystem:
Farben und Texturkoordinaten bleiben gleich, Vertex-Positionen verändern sich jedes Frame (müssen von der CPU ins VBO geschrieben werde).

Dann packt man (theoretisch) am sinnvollsten die Geometrie in ein eigenes, getrenntes VBO, und weist GL_DYNAMIC_DRAW_ARB als 'usage' zu.
Die statischen Elemente kommen in ein anderes VBO, das man mit GL_STATIC_DRAW_ARB markiert. Dort kann man weiterhin Interleaving machen.

Disclaimer: ich habe mit VBO noch nicht gearbeitet. Theoretisch sollte dies jedoch die sinnvollste Nutzung sein.

Chris Lux
2003-05-25, 18:16:30
alles klar danke.
bin nur drauf gekommen, da in den vbo examples immer die komponenten getrennt hintereinander geschrieben wurden (aber im selben vbo). also test ich mal interleaving.