2009-07-10 6 views
1

Das über DirectX ist 9.DirectX 9: Vertex-Shader-Attribut Quelle

Im typischen Fall mit Vertex-Shader-Rendering, gibt es einen oder mehrere Stream im Gerät festgelegt Quellen, und das Format der Quelldaten unter Verwendung Vertex Deklaration definiert.

Wenn nun ein Vertex-Shader ein Attribut benötigt (z. B. eins mit D3DDECLUSAGE_NORMAL und UsageIndex 1 oder 2), enthält die angegebene Vertex-Deklaration dieses Attribut jedoch nicht (dh Daten, die in Stream-Quellen bereitgestellt werden. t dieses Attribut enthalten), und DrawPrimitive wird aufgerufen, woher erhält DirectX den Wert für dieses Attribut?

Antwort

0

"Wenn die Daten im Vertex-Stream weniger Komponenten enthalten als der entsprechende Shader-Datentyp, werden die fehlenden Komponenten auf 0 initialisiert (außer für w, das auf 1 initialisiert wird)."

Entnommen aus "Windows DirectX Graphics Dokumentation (August 2009)"

Inhalt> HLSL> Programming Guide> Schreiben HLSL Shaders in Direct3D 9> Wechselnde Shader-Eingänge und Semantics

0

Die DirectX 9-Spezifikation definiert "Standardwerte" für nicht deklarierte Attribute, normalerweise (0,0,0,1). Entweder der Gerätetreiber oder die GPU erstellt sie.

+0

Wo kann ich diese Spezifikation finden? Es scheint nicht überall verfügbar zu sein, wo Google es finden kann - und ich brauche spezifische Werte für alle Semantiken. Ich bin mir bewusst, dass im Falle fehlender Attribut-Komponenten sie mit 0s und 1 für w gefüllt sind, aber ich konnte keine Doucmentation für Werte von ganzen fehlenden Attributen finden. Außerdem scheint der Wine-Code anzuzeigen, dass sie vom Anfang des Vertexpuffers übernommen wurden - wenn Wine diesen Teil korrekt simuliert. –

+0

Es ist wahrscheinlich nicht im SDK (oder öffentlich). Es soll nicht ein Feature sein, das Anwendungen verwenden sollen, sondern das Verhalten von GPUs unter diesen Bedingungen definieren. Dies wird vom WLK getestet. Ich habe es in den DX-Dateien und der WDK gesehen. Es ist Teil der Spezifikation für IHVs, ihre Hardware und Treiber zu entwickeln, nicht Anwendungsentwickler. So wird Wine implementiert. Jedes IHV wird seine eigene einzigartige Lösung haben. – gatorfax

+0

Die Anwendung, die ich entwickle, muss in dieser Hinsicht DirectX-Verhalten simulieren, deshalb brauche ich diese Informationen. Naja, ich schätze, ich werde Testprogramme schreiben, um es zu bekommen. –