Vertextexturen in _ vs. _ 3 0 (DirectX HLSL)
Das Vertex-Shader 3.0-Modell unterstützt texturbasiertes Lookup im Vertex-Shader mithilfe der Texldl - vs texture load-Anweisung. Die Vertex-Engine enthält vier Textursamplerstufen mit den Namen D3DVERTEXTEXTURESAMPLER0,D3DVERTEXTEXTURESAMPLER1, D3DVERTEXTEXTURESAMPLER2 und D3DVERTEXTEXTURESAMPLER3. Diese unterscheiden sich von den Verschiebungszuordnungs-Samplern und Texturs samplern in der Pixel-Engine.
Zum Beispiel für Texturen, die in diesen vier Phasen festgelegt sind, können Sie die Scheitelpunkt-Engine verwenden und die Phasen mit der CheckDeviceFormat-Methode programmieren. Legen Sie Texturen in diesen Phasen mithilfe von SetTexturemit dem Stufenindex D3DVERTEXTEXTURESAMPLER0 bis D3DVERTEXTEXTURESAMPLER3 fest. Im Vertex-Shader, dem Samplerregister (wie in PS 2 0), wurde ein neues Register eingeführt, das den _ _ Vertextextur-Sampler darstellt. Dieses Register muss im Shader definiert werden, bevor es verwendet wird.
Eine Anwendung kann abfragen, ob ein Format als Scheitelpunkttextur unterstützt wird, indem sie CheckDeviceFormat mit D3DUSAGE _ QUERY _ VERTEXTEXTURE aufruft.
Hinweis
Dies ist ein Abfrageflag, sodass es in einer Createxxx-Funktion nicht akzeptiert wird. Eine im Standardpool erstellte Scheitelpunkttextur kann als Pixeltextur festgelegt werden und umgekehrt. Um die Softwarevertexverarbeitung zu verwenden, muss die Scheitelpunkttextur jedoch im Scratchpool erstellt werden (unabhängig davon, ob es sich um ein Gerät im gemischten Modus oder ein Software-Scheitelpunktverarbeitungsgerät handelt).
Die Funktionalität ist mit den Pixeltexturen identisch, mit Ausnahme der folgenden:
- Die anisotrope Texturfilterung wird nicht unterstützt, daher wird _ D3DSAMP MAXANISOTROPY ignoriert, und D3DTEXF ANISOTROPIC kann nicht für die Vergrößerung oder Vergrößerung für diese Phasen festgelegt _ werden.
- Die Rate der Änderungsinformationen ist nicht verfügbar, daher muss die Anwendung die Detailebene berechnen und diese Informationen als Parameter für texldl - imVergleich zu bereitstellen.
Es gelten folgende Beschränkungen:
- Wie bei Pixel-Shadern wird D3DSAMP ELEMENTINDEX verwendet, um herauszufinden, aus welchem Element Stichproben erstellt werden sollen, wenn _ Mehrelementtexturen unterstützt werden.
- Der Zustand D3DSAMP _ DMAPOFFSET wird für diese Phasen ignoriert.
- Verwenden Sie CheckDeviceFormat mit D3DUSAGE _ QUERY _ VERTEXTEXTURE" zum Abfragen einer Textur, um zu prüfen, ob sie als Scheitelpunkttextur verwendet werden kann.
- VertexTextureFilterCaps gibt an, welche Arten von Filtern an den Vertextextur-Samplern zulässig sind. D3DPTFILTERCAPS _ MINFANISOTROPIC und D3DPTFILTERCAPS _ MAGFANISOTROPIC sind nichtig.
Register der Samplingphase
Ein Samplingstufenregister identifiziert eine Samplingeinheit, die in Texturlade-Anweisungen verwendet werden kann. Eine Samplingeinheit entspricht der Textursamplerphase und kapselt den in SetSamplerStatebereitgestellten samplingspezifischen Zustand.
Jeder Sampler identifiziert eindeutig eine einzelne Texturoberfläche, die mithilfe von SetTexture auf den entsprechenden Sampler festgelegt wird. Die gleiche Texturoberfläche kann jedoch bei mehreren Samplern festgelegt werden.
Zur Zeichnen-Zeit 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 einzelnen _ _ Shader-Durchgang gelesen werden. Ein Samplerregister wird möglicherweise nur als Argument in der Texturlade-Anweisung angezeigt: texldl - vs.
Im Vergleich zu 3 0 muss ein Sampler am Anfang des Shaderprogramms mit dem _ _ dcl _ samplerType (sm3 – vs asm) deklariert werden (wie in ps _ 2 _ 0).
Softwareverarbeitung
Dieses Feature wird bei der Softwarevertexverarbeitung unterstützt. Die unterstützten Filtertypen können durch Aufrufen von GetDeviceCaps und Überprüfen von VertexTextureFilterCaps überprüft werden. Alle veröffentlichten Texturformate werden als Scheitelpunkttexturen bei der Softwarevertexverarbeitung unterstützt.
Anwendungen können überprüfen, ob ein bestimmtes Texturformat im Softwarevertexverarbeitungsmodus unterstützt wird, indem sie CheckDeviceFormat aufrufen und (D3DVERTEXTEXTURESAMPLER | D3DUSAGE _ SOFTWAREPROCESSING)als Verwendung bereitstellen. 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;