Vertexdaten interleaved oder noninterleaved (DirectX / OpenGL)



  • Hallo zusammen
    Beim Studium von OpenGl ist mit aufgefallen dass die Vertexdaten bei dieser API noninterleaved abgelegt werden, während diese ja bei Direct3D interleaved abgelegt werden. Ich frage mich, was der Vor- bspw. Nachteil dieser Vorgehensweise ist und warum die jeweiligen API's die jeweils Ihre Variante gewählt haben?

    Der Nachteil der Direct3D Variante ist sicherlich, dass es aus diesem Grund die ganze Geschichte mit dem Flexible Vertex Format (FVF) resp. Vertex Declarations benötigt, was bei OpenGl aufgrund des noninterleavten Layout nicht benötigt wird.

    Vielleicht ermöglicht die Interleaved Variante von Direct3D ein besseres Caching? Aber dann müsste ja Direct3D viel schneller als OpenGL, was ja IMHO nicht der Fall ist?

    Gruss Samuel


  • Mod

    ich glaube da hast du dich nicht ausreichend informiert. beide APIs unterstuetzen interleaved und noninterleaved.



  • @rapso
    Bist du dir da sicher? Wie geht denn in diesem Fall noninterleaved bei Direct3D? Und es bleibt die Frage der Vor- bzw. Nachteile?


  • Mod

    ehrlich, was laesst dich denken, dass du der erste bist der diese fragen stellt?



  • Hat dir Mami nicht beigebracht, dass es unhöflich ist, eine Frage mit einer Gegenfarge zu beantworten? :p

    Nein ist schon klar, hast du einen Link zu Literatur, damit ich mir das mal ansehen kann?



  • Uff, das ist jetzt aber ganz schwer rauszubekommen.
    Hat dir Mami denn nicht beigebracht dass es unhöflich ist Dinge zu fragen die man ganz einfach selbst ergoogeln kann? :p



  • OpenGL: Der erste Hit.



  • Ich meine die Vor- bzw. Nachteile. Es muss ja einen Grund geben, dass beide Verfahren angewendet werden?



  • Bei interleaved Streams kann der ganze Vertex von einer Speicherstelle gelesen werden was hinsichtlich Kompaktheit und Alignment vorteilhaft ist.
    Separate Streams koennen beispielsweise sinnvoll sein wenn nur wenige Vertex-Attribute von CPU-Seite veraendert werden sollen und somit nicht die gesamte Datenmenge uebertragen werden muss.


Log in to reply