[OpenGL] Indices kommen mit Stride; was tun?
-
Guten Abend
Angenommen ich möchte ein Mesh mittels
glVertexPointer
etc. rendern und dabei Indizes verwenden, dann kann ich bekanntlich aufglDrawElements
zurückgreifen. Nun habe ich eine Quelle, welche mir die Indizes gibt, jedoch an einer 8 Byte Grenze ausgerichtet.Konkret folgen alle 8 Byte 4 Byte lange Indizes (das stimmt eigentlich nicht ganz; die Indizes können theoretisch 8 Byte lang sein, jedoch habe ich dafür ein paar Hundert GB RAM zu wenig ;)), welche ich benötige.
glDrawElements
unterstützt jedoch keine Strides wie etwaglVertexPointer
, mit der ich so etwas spezifizieren könnte; es werden auch keine 8 Byte Indizes unterstützt (auch unter Windows x64 nicht, da dortunsigned int
4 Byte lang bleibt).Welche Möglichkeiten habe ich hier? Mir ist bewusst, dass allein schon die Verwendung von 4 Byte langen Indizes negative Auswirkungen auf die Performance hat, doch die Schnittstellen in Verwendung sind sehr allgemein gehalten und nicht direkt für die Verwendung in Echtzeitgrafik optimiert.
Wäre für Tipps dankbar
MfG
-
Was spricht denn gegen konvertieren?
-
hellihjb schrieb:
Was spricht denn gegen konvertieren?
Ich muss die Sache der Schnittstelle wegen on-the-fly abwickeln können. Die Konvertierung muss bei der ersten Verwendung der Indizes automatisch im Hintergrund erfolgen - und wenn sich die Daten ändern sollte (bei Indizes ist das Glücklicherweise sehr selten), erneut ablaufen.
Am besten ist es wohl, wenn man eine Art Caching programmiert, welches die verdichteten Indizes zwischenspeichert. Mal schauen, ob das praktikabel ist.
Danke.
-
Hast du so riesige Buffer dass du 32bit Indices brauchst? Denn ansonsten würd ich 16bit Indices verwenden wenn du eh schon am umpacken bist...
-
Mit Vertex Arrays geht das nicht. VBOs können das jedoch. Was spricht gegen die Verwendung von VBOs.
-
dot schrieb:
Hast du so riesige Buffer dass du 32bit Indices brauchst? Denn ansonsten würd ich 16bit Indices verwenden wenn du eh schon am umpacken bist...
Ja, das werde ich so machen; leider bekomme ich die Indices mit 8 Byte Länge geliefert und der OpenGL-Port ist nur sekundär von Bedeutung.
Gast00_05 schrieb:
Mit Vertex Arrays geht das nicht. VBOs können das jedoch. Was spricht gegen die Verwendung von VBOs.
Wie denn? Kannst du mir hierfür einen Link oder ein Beispiel geben?
MfG
-
/rant/ schrieb:
Wie denn? Kannst du mir hierfür einen Link oder ein Beispiel geben?
Das würd mich auch interessieren
-
Mich würde auch wundern wenn das geht, das bietet keine mir bekannte API. Den Vertex-Stride kann man angeben, ja, aber den Index-Stride... hm.
-
/rant/ schrieb:
Am besten ist es wohl, wenn man eine Art Caching programmiert, welches die verdichteten Indizes zwischenspeichert. Mal schauen, ob das praktikabel ist.
Bekommst du denn Änderungen an den Indizes explizit mit?
-
gast00_05 schrieb:
Mit Vertex Arrays geht das nicht. VBOs können das jedoch. Was spricht gegen die Verwendung von VBOs.
hustbaer schrieb:
Mich würde auch wundern wenn das geht, das bietet keine mir bekannte API. Den Vertex-Stride kann man angeben, ja, aber den Index-Stride... hm.
Geht auch nicht bei OpenGL.
-
inter2k3 schrieb:
Geht auch nicht bei OpenGL.
Jo, das dacht ich mir schon, kann dazu nur das gleiche sagen wie hustbear: Das wär mir sehr neu denn das kann keine mir bekannte API (weder OGL noch irgendeine D3D Version > 6)...
-
hustbaer schrieb:
Bekommst du denn Änderungen an den Indizes explizit mit?
Vorausgesetzt alle Programmierer und deren Quellcodes halten sich an gewisse Schnittstellen und Spezifikationen kann ich Änderungen feststellen; ich gehe mal davon aus, dass dies der Fall ist
-
Dann sollte die Lösung ja mehr oder weniger offensichtlich sein