Vertex-Texturen in vs_3_0 (DirectX HLSL)

Das Vertex-Shader 3.0-Modell unterstützt die Textursuche im Vertex-Shader mithilfe der Texldl - vs Texture Load-Anweisung. Das Vertexmodul enthält vier Texturbeispielerphasen, benannt D3DVERTEXTEXTURESAMPLER0, D3DVERTEXTEXTURESAMPLER1, D3DVERTEXTEXTURESAMPLER2 und D3DVERTEXTEXTURESAMPLER3. Dies unterscheidet sich von den Verschiebungszuordnungs-Samplern und Texturbeispielern im Pixelmodul.

Um auf diesen vier Phasen festgelegte Texturbeispiele festzulegen, können Sie das Vertexmodul verwenden und die Phasen mit der CheckDeviceFormat-Methode programmieren. Legen Sie Texturen in diesen Phasen mithilfe von SetTexture fest, wobei der Phasenindex D3DVERTEXTEXTURESAMPLER0 über D3DVERTEXTEXTURESAMPLER3 festgelegt wird. Ein neues Register wurde im Vertex-Shader eingeführt, das Samplerregister (wie in ps_2_0), das den Vertex-Textur-Sampler darstellt. Dieses Register muss im Shader definiert werden, bevor sie verwendet wird.

Eine Anwendung kann abfragen, ob ein Format als Vertextextstruktur unterstützt wird, indem Sie CheckDeviceFormat mit D3DUSAGE_QUERY_VERTEXTEXTURE aufrufen.

Hinweis

Dies ist ein Abfrage-Flag, sodass sie in einer Createxxx-Funktion nicht akzeptiert wird. Eine vertex-Textur, die im Standardpool erstellt wurde, kann als Pixeltextur und umgekehrt festgelegt werden. Um jedoch die Software-Vertexverarbeitung zu verwenden, muss die Vertex-Textur im Scratchpool erstellt werden (unabhängig davon, ob es sich um ein gemischtes Gerät oder ein Softwarevertexverarbeitungsgerät handelt).

 

Die Funktionalität ist mit den Pixeltexturen identisch, außer für die folgenden:

  • Die Anisotropische Texturfilterung wird nicht unterstützt, daher wird D3DSAMP_MAXANISOTROPY ignoriert, und D3DTEXF_ANISOTROPIC kann nicht für die Vergrößerung festgelegt werden oder für diese Phasen minifizieren.
  • Die Rate der Änderungsinformationen ist nicht verfügbar, daher muss die Anwendung den Detailgrad berechnen und diese Informationen als Parameter für texldl - vs. bereitstellen.

Es gelten folgende Beschränkungen:

  • Wie in Pixel-Shadern wird D3DSAMP_ELEMENTINDEX verwendet, um herauszufinden, aus welchem Element ein Beispiel verwendet werden soll.
  • Der Zustand D3DSAMP_DMAPOFFSET wird für diese Phasen ignoriert.
  • Verwenden Sie CheckDeviceFormat mit D3DUSAGE_QUERY_VERTEXTEXTURE" , um eine Textur abzufragen, um festzustellen, ob sie als Vertextexttextur verwendet werden kann.
  • VertexTextureFilterCaps gibt an, welche Art von Filtern bei den Vertex-Texturbeispielern zulässig sind. D3DPTFILTERCAPS_MINFANISOTROPIC und D3DPTFILTERCAPS_MAGFANISOTROPIC sind nicht zulässig.

Stichprobenphasenregister

Ein Stichprobenphasenregister identifiziert eine Stichprobeneinheit, die in Texturlastanweisungen verwendet werden kann. Eine Stichprobeneinheit entspricht der Textur-Sampling-Phase, kapselt den in SetSamplerState bereitgestellten Sampling-spezifischen Zustand.

Jeder Sampler identifiziert eindeutig eine einzelne Texturoberfläche, die auf den entsprechenden Sampler mit SetTexture festgelegt ist. Die gleiche Texturoberfläche kann jedoch auf mehreren Samplern festgelegt werden.

Zum Zeichnen kann eine Textur nicht gleichzeitig als Renderziel und Textur auf einer Stufe festgelegt werden.

Da vs_3_0 vier Sampler unterstützt, können bis zu vier Texturoberflächen in einem einzelnen Shaderpass gelesen werden. Ein Samplerregister kann nur als Argument in der Texturlast-Anweisung angezeigt werden: texldl - vs.

vs_3_0 Wenn Sie einen Sampler verwenden, muss sie am Anfang des Shaderprogramms mit dem dcl_samplerType (sm3 - vs asm) ( wie in ps_2_0) deklariert werden.

Softwareverarbeitung

Dieses Feature wird in der Softwarevertexverarbeitung unterstützt. Die unterstützten Filtertypen können überprüft werden, indem GetDeviceCaps aufgerufen und VertexTextureFilterCaps überprüft werden. Alle veröffentlichten Texturformate werden als Vertex-Texturen in der Software-Vertexverarbeitung unterstützt.

Anwendungen können überprüfen, ob ein bestimmtes Texturformat im Software-Vertexverarbeitungsmodus unterstützt wird, indem CheckDeviceFormat aufgerufen und bereitgestellt wird (D3DVERTEXTEXTURESAMPLER | D3DUSAGE_SOFTWAREPROCESSING) als Verwendung. Alle Formate werden für die Softwarevertexverarbeitung unterstützt. Der Scratchpool ist für die Softwarevertexverarbeitung erforderlich.

API-Änderungen

   
// New define
#define D3DVERTEXTEXTURESAMPLER0 (D3DDMAPSAMPLER+1)
#define D3DVERTEXTEXTURESAMPLER1 (D3DDMAPSAMPLER+2)
#define D3DVERTEXTEXTURESAMPLER2 (D3DDMAPSAMPLER+3)
#define D3DVERTEXTEXTURESAMPLER3 (D3DDMAPSAMPLER+4)
    

#define D3DVERTEXTEXTURESAMPLER  (0x00100000L)

// New caps field in D3DCAPS9
DWORD VertexTextureFilterCaps;

Vertexpipeline