Freigeben über


Vertextexttexturen in vs_3_0 (DirectX HLSL)

Das Vertex-Shader 3.0-Modell unterstützt die Textursuche im Vertex-Shader mithilfe der texldl - vs Texturlade-Anweisung. Das Vertexmodul enthält vier Textur-Samplerphasen mit dem Namen D3DVERTEXTEXTURESAMPLER0, D3DVERTEXTEXTURESAMPLER1, D3DVERTEXTEXTURESAMPLER2 und D3DVERTEXTEXTURESAMPLER3. Diese unterscheiden sich von den Vertreibungszuordnungs-Samplern und Textur-Samplern im Pixelmodul.

Zum Beispiel für Texturen, die auf diesen vier Stufen festgelegt sind, können Sie das Vertexmodul verwenden und die Phasen mit der CheckDeviceFormat--Methode programmieren. Legen Sie Texturen in diesen Phasen mithilfe SetTexture-fest, wobei der Phasenindex bis D3DVERTEXTEXTURESAMPLER3 D3DVERTEXTEXTURESAMPLER0. Im Vertex-Shader wurde ein neues Register eingeführt, das Samplerregister (z. B. in ps_2_0), das den Vertextext-Sampler darstellt. Dieses Register muss im Shader definiert werden, bevor es verwendet wird.

Eine Anwendung kann abfragen, ob ein Format als Vertextextur unterstützt wird, indem CheckDeviceFormat- mit D3DUSAGE_QUERY_VERTEXTEXTUREaufgerufen wird.

Anmerkung

Dies ist ein Abfrageflagge, sodass es in keiner Createxxx-Funktion akzeptiert wird. Eine im Standardpool erstellte Vertextextur kann als Pixeltextur und umgekehrt festgelegt werden. Um jedoch die Software-Vertexverarbeitung zu verwenden, muss die Vertextextur im Scratch-Pool erstellt werden (unabhängig davon, ob es sich um ein Gerät mit gemischtem Modus oder ein Software-Vertexverarbeitungsgerät handelt).

 

Die Funktionalität ist identisch mit den Pixeltexturen, mit Ausnahme der folgenden:

  • Die anisotrope Texturfilterung wird nicht unterstützt, daher wird D3DSAMP_MAXANISOTROPY ignoriert, und D3DTEXF_ANISOTROPIC können nicht für die Vergrößerung festgelegt oder für diese Phasen minimiert werden.
  • Die Änderungsrate ist nicht verfügbar, daher muss die Anwendung die Detailebene berechnen und diese Informationen als Parameter für texldl - vsbereitstellen.

Zu den Einschränkungen gehören:

  • Wie bei Pixelshadern wird D3DSAMP_ELEMENTINDEX verwendet, um herauszufinden, von welchem Element ein Beispiel verwendet werden soll, wenn Multielementtexturen unterstützt werden.
  • Der Status D3DSAMP_DMAPOFFSET wird für diese Phasen ignoriert.
  • Verwenden Sie CheckDeviceFormat- mit D3DUSAGE_QUERY_VERTEXTEXTURE"-, um eine Textur abzufragen, um festzustellen, ob sie als Vertextextur verwendet werden kann.
  • VertexTextureFilterCaps gibt an, welche Art von Filtern bei den Vertextexttext-Samplern zulässig sind. D3DPTFILTERCAPS_MINFANISOTROPIC und D3DPTFILTERCAPS_MAGFANISOTROPIC sind unzulässig.

Stichprobenstufenregister

Ein Samplingstufenregister identifiziert eine Samplingeinheit, die in Texturladeanweisungen verwendet werden kann. Eine Samplingeinheit entspricht der Textursamplingstufe und kapselt den samplingspezifischen Zustand, der in SetSamplerStatebereitgestellt wird.

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

Zum Zeichnen kann eine Textur nicht gleichzeitig als Renderziel und textur in einer Phase festgelegt werden.

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

Wenn Sie in vs_3_0 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 bei der Softwarevertexverarbeitung unterstützt. Die unterstützten Filtertypen können überprüft werden, indem sie GetDeviceCaps- aufrufen und VertexTextureFilterCaps überprüfen. Alle veröffentlichten Texturformate werden als Vertextexttexturen in der Softwarevertexverarbeitung unterstützt.

Anwendungen können überprüfen, ob ein bestimmtes Texturformat im Software-Vertexverarbeitungsmodus unterstützt wird, indem CheckDeviceFormat- aufgerufen und (D3DVERTEXTEXTURESAMPLER | D3DUSAGE_SOFTWAREPROCESSING) als Verwendung bereitgestellt wird. Alle Formate werden für die Softwarevertexverarbeitung unterstützt. Der Scratch-Pool 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-