[D3D9] Wie viele Vertexbuffer?



  • Hallo,
    momentan habe ich in meine Anwendung für jedes Objekt einen Vertexbuffer, denn ich immer nur locke, um neue Daten hineinzukopieren.
    Nun habe ich aber in anderen Sources gesehen, dass man auch einen universellen Vertexbuffer benutzen kann, der ständig locked ist und nur für das Rendern unlocked wird.
    Dabei wird zwar etwas Grafikspeicher gespart, da ich eh alle Informationen zur logischen Bearbeitung auch im Arbeitsspeicher halten muss.
    Doch wie sieht es da mit der Performance aus. Lohnt sich das oder ist das nur ein unnötiger Zeit-Killer?



  • Hängt davon ab was du machen willst...



  • Also momentan bastel ich momentan an einem kleinen Spiel.
    Aber ich habe mal gerechnet, wenn ich ein Vekotor mit einer Größe von 28 Byte habe, werden ja bei Variante 1 nur ein paar MB Grafikspeicher belegt.
    Nun meine Frage ist jetzt eben, ob Variante 2 in Relation zu Variante 1 steht, was besser ist (wobei ich hier zu Variante 1 tendiere) und warum man das so oft sieht.



  • Es gibt keine Variante die immer besser ist. Es hängt extrem davon ab was du wie rendern willst. Man kann nicht einfach pauschal sagen: Das ist besser und das ist weniger gut.



  • Also momentan habe ich einfach eine Schleife, in der in jedem Durchlauf ein Frame gerendert wird.
    Dabei wird bisher für jeden Vertexbuffer der passende Rendercall aufgerufen und vorher vielleicht bei den logischen Berechnungen neue Daten in den Buffer kopiert.
    Bei der zweiten Methode schreibe ich mir eine Funktion, die die Daten vorher jedes mal in den Universalbuffer kopiert und dann den passenden Rendercall aufruft.
    Das wird wie gesagt mit VSync z.B. 60 mal die Sekunde durchgeführt.

    Ich hoffe da ist es, wo du drauf hinaus willst.



  • Nein. Die Frage ist WAS willst du rendern. Es macht einen Unterschied ob du 10.000 dynamische 2D Sprites oder ein 3D Terrain, einen Ozean oder Wolken, ein Haus oder 1000 animierte Aliens rendern willst...



  • Doch wie sieht es da mit der Performance aus. Lohnt sich das oder ist das nur ein unnötiger Zeit-Killer?

    Ich denke das kommt darauf an, wie oft du Vertex-Daten änderst.
    Wenn du sehr oft Vertex-Daten in "kleinen Stücken" änderst, dann ist vermutlich die Variante mit einem Grossen-Vertex-Buffer-Für-Alles besser.

    Wenn du eher nicht so oft Vertex-Daten änderst und/oder immer in ausreichend grossen Stücken, dann vermutlich eher die Variante mit 1 Vertex Buffer pro Mesh.


Anmelden zum Antworten