Freigeben über


Texturen mit mehreren Elementen (Direct3D 9)

Herkömmliche Texturen gelten als Einelementtexturen. Texturen mit mehreren Elementen ermöglichen Es Anwendungen, gleichzeitig auf mehrere Elemente einer Textur aus dem Pixel-Shader zu schreiben. Das Ergebnis des nächsten Renderingdurchlaufs ist, dass eine Anwendung ein oder mehrere der Elemente als Einzelne-Elementtextur verwenden kann, d. h. als Eingaben für den Pixel-Shader. Diese zusätzlichen Elemente können als temporärer Speicher für Zwischenergebnisse betrachtet werden, die in einem späteren Durchlauf von der Anwendung verwendet werden.

Die erste Hardwaregeneration, die dieses Feature verfügbar macht, weist die folgenden Einschränkungen auf:

  • Alle Texturoberflächen mit mehreren Elementen werden automatisch zugeordnet. Diese Einschränkung wird behoben, indem sie als neue Art von Oberflächenformat mit mehreren RGBA-Kanälen ineinandergreifen.
  • Alle Elemente der Textur mit mehreren Elementen können die gleiche Bittiefe aufweisen. Diese Einschränkung wird durch den Namen der neuen Oberflächenformate ausgedrückt.
  • Eine Textur mit mehreren Elementen kann nicht die primäre/anzeigebare sein. Mit anderen Worten, es muss nur außerhalb des Bildschirms sein. Diese Einschränkung wird durch die Surface-Format-Enumeration ausgedrückt.
  • Es ist kein Dithering, Alphatest, Fogging, Blending, Rasterbetrieb oder Maskierung zulässig. Es wird keine Post-Pixel-Shaderverarbeitung durchgeführt, mit Ausnahme des Z-Tests und des Schablonentests.
  • Die Textur darf keine mipmap sein. Die Erstellung der MIP-Kette schlägt fehl.
  • Dasselbe Element kann nicht als Textur festgelegt werden, wenn es sich um ein Renderziel handelt. Verschiedene Elemente derselben Texturoberfläche mit mehreren Elementen können jedoch gleichzeitig Texturen und Renderziele sein.
  • Es wird kein Antialiasing unterstützt.
  • Texturoberflächen mit mehreren Elementen können nicht gefiltert werden, wenn sie als Textur verwendet werden. Diese Einschränkung kann mit CheckDeviceFormat überprüft werden.
  • Texturoberflächen mit mehreren Elementen können nicht gesperrt werden.
  • Mehr als eine Texturoberfläche mit mehreren Elementen kann gleichzeitig verwendet werden, indem jede einzelne wie bei normalen Texturen verschiedenen Phasen zugewiesen wird.
  • Texturoberflächen mit mehreren Elementen unterstützen die Konvertierung von Gamma von der Konvertierung von 2.2 in 1.0 bei einem Lesevorgang, genau wie bei anderen Texturformaten.
  • Bei einigen Implementierungen wird die Ausgabeschreibmaske (D3DRS_COLORWRITEENABLE) nicht angewendet. Solche, die über unabhängige Farbschreibmasken verfügen können. Dies wird mithilfe eines neuen Funktionsbits ausgedrückt. Die Anzahl der verfügbaren unabhängigen Farbschreibmasken entspricht der maximalen Anzahl von Elementen, von denen das Gerät fähig ist.
  • Clear löscht alle Elemente der Textur mit mehreren Elementen, die als Renderziel festgelegt ist.

Die Verwendung von Texturen mit mehreren Elementen führt die folgenden Schritte aus:

  1. Anwendungen ermitteln die Unterstützung für dieses Feature, indem sie die Verfügbarkeit von Texturformaten mit mehreren Elementen überprüfen.
  2. Die Anwendung erstellt diese Oberflächen durch Aufrufen von CreateTexture.
  3. Die Anwendung legt die Oberfläche mithilfe des SetRenderTarget-Aufrufs als Renderziel fest. Der Pixel-Shader stellt die Ausgabe für die Oberflächen mithilfe der Anweisung mov - ps bereit.
  4. SetTexture wird aufgerufen, um eine Texturoberfläche mit mehreren Elementen auf eine bestimmte Phase festzulegen. Wie bei anderen Texturen kann dieselbe Oberfläche auf mehrere Phasen gleichzeitig festgelegt werden.
  5. SetSamplerState wird aufgerufen, um D3DSAMP_ELEMENTINDEX auf die entsprechende Elementnummer in der Textur mit mehreren Elementen festzulegen, aus der der Sampler beispielet. Der Standardwert für diesen Zustand ist 0. Dies bedeutet, dass Texturen mit nicht mehreren Elementen funktionieren. Das Festlegen dieses Zustands auf eine unangemessene Zahl führt zu einem nicht definierten Verhalten, wenn die Textur mit mehreren Elementen nur zwei Elemente breit ist, der Sampler jedoch aufgefordert wird, ein Beispiel für das vierte Element zu erstellen.

API-Unterstützung

Im Folgenden sehen Sie eine Zusammenfassung der API-Elemente, die Texturen mit mehreren Elementen unterstützen:

  • Das D3DFMT_MULTI2_ARGB8 Oberflächenformat drückt die verschachtelte Natur des Formats aus.

  • Der D3DSAMP_ELEMENTINDEX Samplerzustand gibt an, welcher Elementindex verwendet werden soll.

  • Die folgenden Renderzustände unterstützen Texturen mit mehreren Elementen:

    • D3DRS_COLORWRITEENABLE1
    • D3DRS_COLORWRITEENABLE2
    • D3DRS_COLORWRITEENABLE3

    D3DRS_COLORWRITEENABLE gilt für das Renderziel (oder Element) null.

  • Das flag D3DPMISCCAPS_INDEPENDENTWRITEMASKS gibt an, dass das Gerät unabhängige Schreibmasken für mehrere Elementtexturen oder mehrere Renderziele unterstützt.

Pixelpipeline