Freigeben über


Texturen mit mehreren Elementen (Direct3D 9)

Herkömmliche Texturen werden als Ein-Element-Texturen betrachtet. Mithilfe von Texturen mit mehreren Elementen können Anwendungen gleichzeitig in mehrere Elemente einer Textur aus dem Pixelshader schreiben. Das Ergebnis des nächsten Renderingdurchlaufs besteht darin, dass eine Anwendung ein oder mehrere Elemente als Textur mit einem einzelnen Element verwenden kann, d. h. als Eingaben für den Pixelshader. Diese zusätzlichen Elemente können als temporärer Speicher für Zwischenergebnisse betrachtet werden, die später von der Anwendung verwendet werden.

Die erste Generation von Hardware, die dieses Feature verfügbar macht, hat die folgenden Einschränkungen:

  • Alle Texturoberflächen mit mehreren Elementen werden automatisch zugewiesen. Diese Einschränkung wird durch die Behandlung als neue Art des Oberflächenformats mit mehreren RGBA-Kanälen behandelt, die miteinander verknüpft sind.
  • Alle Elemente der Textur mit mehreren Elementen können dieselbe 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/anzeigefähige Struktur sein. Mit anderen Worten, es muss nur außerhalb des Bildschirms sein. Diese Einschränkung wird durch die Oberflächenformatenumeration ausgedrückt.
  • Es ist kein Dithering, Alphatest, Nebel, Blenden, Raster op oder Maskieren zulässig. Es erfolgt keine Verarbeitung nach dem Pixelshader, mit Ausnahme des Z-Tests und des Schablonentests.
  • Die Textur kann keine Mipmap sein. Die Erstellung der Mip-Kette schlägt fehl.
  • Dasselbe Element kann nicht gleichzeitig als Textur festgelegt werden, da es sich um ein Renderziel handelt. Verschiedene Elemente derselben Texturoberfläche mit mehreren Elementen können jedoch gleichzeitig Texturen und Renderziele sein.
  • Es wird keine Antialiasing unterstützt.
  • Texturoberflächen mit mehreren Elementen können nicht gefiltert werden, wenn sie als Textur verwendet werden. Diese Einschränkung kann mithilfe CheckDeviceFormat-überprüft werden.
  • Texturoberflächen mit mehreren Elementen können nicht gesperrt werden.
  • Mehrere Texturoberflächen mit mehreren Elementen können gleichzeitig verwendet werden, indem sie die einzelnen Phasen wie normale Texturen zuweisen.
  • Texturoberflächen mit mehreren Elementen unterstützen die Konvertierung von Gamma von 2.2 in 1.0-Konvertierung bei einem Lesevorgang genauso wie bei anderen Texturformaten.
  • Einige der Implementierungen wenden das Ausgabeschreibformat (D3DRS_COLORWRITEENABLE) nicht an. Solche, die unabhängige Farbschreibmasken aufweisen können. Dies wird mithilfe eines neuen Funktionsbits ausgedrückt. Die Anzahl der verfügbaren unabhängigen Farbschreibformate entspricht der maximalen Anzahl von Elementen, deren Gerät in der Lage ist.
  • Clear löscht alle Elemente der Struktur mit mehreren Elementen, die als Renderziel festgelegt ist.

Die Verwendung von Texturen mit mehreren Elementen folgt den folgenden Schritten:

  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 CreateTexture.
  3. Die Anwendung legt die Oberfläche als Renderziel mithilfe des SetRenderTarget- Aufrufs fest. Der Pixelshader stellt die Ausgabe für die Oberflächen mithilfe der mov - ps Anweisung bereit.
  4. SetTexture- wird aufgerufen, um eine Texturoberfläche mit mehreren Elementen auf eine bestimmte Stufe festzulegen. Wie bei anderen Texturen darf dieselbe Oberfläche auf mehrere Stufen gleichzeitig festgelegt werden.
  5. SetSamplerState- wird aufgerufen, um D3DSAMP_ELEMENTINDEX auf die entsprechende Elementnummer in der Textur mit mehreren Elementen festzulegen, aus der die Samplerbeispiele stammen. Der Standardwert für diesen Zustand ist 0, was bedeutet, dass nicht-Elementtexturen 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, aber der Sampler wird aufgefordert, aus dem vierten Element zu beispielen.

API-Unterstützung

Es folgt eine Zusammenfassung der API-Elemente, die Texturen mit mehreren Elementen unterstützen:

  • Das D3DFMT_MULTI2_ARGB8 Oberflächenformat drückt die interleavierte Art des Formats aus.

  • Der D3DSAMP_ELEMENTINDEX Samplerstatus 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 Renderziel (oder Element) Null.

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

Pixelpipeline-