Umfangreiche Theorie-Fragen zu D3D



  • Hallo,

    habe mich sehr intensiv mit der Render-Pipeline und mit D3D auseinander gesetzt und habe leider viele offene Fragen, denn unglücklicherweise drückt sich die DX-Doku meiner Ansicht nach an manchen Stellen schleierhaft und ungenau aus, außerdem sind manche Stellen widersprüchlich. Bei manchen Dingen wird nicht erklärt, wozu sie überhaupt gedacht sind.

    Vertex Streams

    Was bringen mir mehrere Streams? Aus dem DX-SDK kann man entnehmen, dass das Speichermanagement so unter Umständen effektiver ist (weniger Bandbreite wird benötigt, wenn man Vertizes in Komponenten aufteilt), dass man flexibel VBs austauschen kann, und gleiche Geometrie so effektiv mehrfach gerendert werden kann.
    Außerdem kann ich mir einen weiteren Nutzen selbst denken: Wenn man ein Modell hat, bei dem sich nur Texturkoordinanten ändern, schmeißt man diese in einen VB und den Rest (Position etc.) in einen anderen, rendert dann beide mit zwei Streams. Dann muss man immer nur auf einen zugreifen, um was zu ändern.

    Es wird auch gesagt, dass mit mehreren Streams ein Problem mit multiplen Texturkoordinaten gelöst wird, das entsprechende Beispiel habe ich aber nicht verstanden. Kann mir jemand das Ganze näher erklären?

    ProcessVertices()

    Wozu genau brauche ich die Funktion? So wie ich das verstanden habe, lasse ich damit auf alle Vertizes in den aktuell gesetzten Streams (und VBs) die Render-Pipeline bzw. meinen eigenen Vertex Shader los und erhalte das Ergebnis in einem VB, also transformierte Vertizes (aber nicht geclipped).
    Ich schätze mal, damit kann man Dinge wie einheitliche Trafos usw., die nur einmal auf mehrere Instanzen derselben Geometrie angewendet werden müssen, eben nur einmal ausführen, was ne Menge Zeit spart.
    Wozu braucht man das noch?

    Vertex Buffer

    Was sind Non-FVF-Vertex-Buffer, also VBs, deren FVF auf 0 gesetzt wird? Sind das welche, die mit Vertex-Deklarationen zusammenarbeiten müssen? Oder solche, in die man beliebigen Inhalt schmeißen kann?

    SetStreamSourceFreq()

    Was genau bewirkt diese Funktion (im Zusammenhang mit dem mehrfachen Rendern von Geometrie)? Das was dazu in der DX-Doku steht, hab ich nicht verstanden.

    BaseVertexIndex

    Wozu brauch ich das? Wenn ich vor diesem Index was im VB speichere? Oder damit ich bei riesigen VBs keine Indizes über 65535 angeben muss?

    Die DX-Doku sagt:

    “The base vertex index enables multiple indexed primitives to be packed into a single set of vertex data without requiring the indices to be recomputed based on where the corresponding primitive is placed in the vertex data.”

    Was soll das genau bedeuten?

    Tesselation + Shader

    In einer Vertex-Deklaration für einen Shader darf ich ja auch Infos über die Tesselation mitgeben (wenn ich Patches verwende). Was genau hat es damit auf sich? Ich steuere damit also, wie die Tesselation automatisch durchgeführt wird? Wird das auch angewendet, wenn ich eine entsprechende Vertex-Deklaration mit der fixed-function pipeline verwende?

    Viele Fragen. Aber einige Denkanstöße und/oder Links wären nett.



  • zu 1. Bandbreiten/ Speichereinsparung

    zu 2. Siehe SDK Doku

    zu 3. Nein, die sind für "interleaved data"

    zu 4. Dann solltest du nochmal lesen! Die gleichen Daten werden mehrmals als Eingabe für den VS benutzt

    zu 5. Es bedeutet genau das. Vertex x steht eben an Stelle x + Basebla

    zu 6. Hab ich keine Ahnung

    Bye, TGGC (Dem beste BdT)


Anmelden zum Antworten