Texturobjekt
In Direct3D 10 geben Sie die Sampler und Texturen unabhängig an. Textursampling wird mithilfe eines Objekts mit Vorlagentextur implementiert. Dieses Vorlagentexturobjekt hat ein bestimmtes Format, gibt einen bestimmten Typ zurück und implementiert mehrere Methoden.
Unterschiede zwischen Direct3D9 und Direct3D10:
- In Direct3D 9 sind Sampler an bestimmte Texturen gebunden.
- In Direct3D 10 sind Texturen und Sampler unabhängige Objekte. Jedes Vorlagentexturobjekt implementiert Textursamplingmethoden, die sowohl die Textur als auch den Sampler als Eingabeparameter verwenden.
Hier ist die Syntax zum Erstellen aller Texturobjekte (mit Ausnahme von Multisampled-Objekten).
| [ < Object1-Typname > ] ; |
|---|
Für Multisampled-Objekte (Texture2DMS und Texture2DMSArray) muss die Texturgröße explizit angegeben und als Anzahl von Stichproben ausgedrückt werden.
| [ < Object2-Typ, > ] Beispielname; |
|---|
Parameter
| Element | Beschreibung | ||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Objekt |
Ein Texturobjekt. Muss einer der folgenden Typen sein.
|
||||||||||||||||||||||||
Typ |
Optional. Jeder HLSL-Skalartyp oder HLSL-Vektortyp,umschlossen von spitzen Klammern. Der Standardtyp ist float4. |
||||||||||||||||||||||||
Namen |
Eine ASCII-Zeichenfolge, die den Namen des Texturobjekts angibt. |
||||||||||||||||||||||||
Proben |
Die Anzahl der Stichproben (zwischen 1 und 128). |
Beispiel 1
Hier ist ein Beispiel für das Deklarieren eines Texturobjekts.
Texture2D <float4> MyTex;
Texture2DMS <float4, 128> MyMSTex;
Texturobjektmethoden
Jedes Texturobjekt implementiert bestimmte Methoden. Hier ist die Tabelle, in der alle Methoden aufgelistet sind. Auf der Referenzseite für jede Methode können Sie sehen, welche Objekte diese Methode verwenden können.
| Texturmethode | Beschreibung | Vs _ 4 _ 0 | Vs _ 4 _ 1 | ps _ 4 _ 0 | ps _ 4 _ 1 | gs _ 4 _ 0 | gs _ 4 _ 1 |
|---|---|---|---|---|---|---|---|
| CalculateLevelOfDetail | Berechnen Sie die LOD, und geben Sie ein klammertes Ergebnis zurück. | x | |||||
| CalculateLevelOfDetailUnclamped | Berechnen Sie die LOD, und geben Sie ein ergebnisloses Ergebnis zurück. | x | |||||
| Versammeln | Ruft die vier Stichproben (nur rote Komponente) ab, die beim Sampling einer Textur für die bilineare Interpolation verwendet werden. | x | x | x | |||
| GetDimensions | Abrufen der Texturdimension für eine angegebene Mipmapebene. | x | x | x | x | x | x |
| GetDimensions (MultiSample) | Abrufen der Texturdimension für eine angegebene Mipmapebene. | x | x | x | |||
| GetSamplePosition | Abrufen der Position des angegebenen Beispiels. | x | x | x | |||
| Load | Laden von Daten ohne Filterung oder Stichproben. | x | x | x | x | x | x |
| Laden (Multisample) | Laden von Daten ohne Filterung oder Stichproben. | x | x | x | x | ||
| Beispiel | Probieren Sie eine Textur aus. | x | x | ||||
| SampleBias | Probieren Sie eine Textur aus, nachdem Sie den Biaswert auf die Mipmapebene angewendet haben. | x | x | ||||
| SampleCmp | Probieren Sie eine Textur mithilfe eines Vergleichswerts aus, um Stichproben abzulehnen. | x | x | ||||
| SampleCmpLevelZero | Probieren Sie eine Textur (nur Mipmapebene 0) mithilfe eines Vergleichswerts aus, um Stichproben abzulehnen. | x | x | x | x | x | x |
| SampleGrad | Probieren Sie eine Textur mithilfe eines Farbverlaufs aus, um die Art und Weise zu beeinflussen, wie die Stichprobenposition berechnet wird. | x | x | x | x | x | x |
| SampleLevel | Probieren Sie eine Textur auf der angegebenen Mipmapebene aus. | x | x | x | x | x | x |
Rückgabetyp
Der Rückgabetyp einer Texturobjektmethode ist float4, sofern nichts anderes angegeben ist, mit Ausnahme der Multisampling-Texturobjekte mit Antialiasing, für die immer der angegebene Typ und die Stichprobenanzahl erforderlich sind. Der Rückgabetyp ist identisch mit dem Texturressourcentyp (DXGI _ FORMAT). Mit anderen Worten: Es kann sich um einen der folgenden Typen ausdingen.
| type | BESCHREIBUNG |
|---|---|
| float | 32-Bit-Gleitkommawert (Unterschiede zu IEEE float finden Sie unter Gleitkommaregeln) |
| INT | 32-Bit-Ganzzahl mit Vorzeichen |
| unsigned int | 32-Bit-Ganzzahl ohne Vorzeichen |
| snorm | 32-Bit-Gleitkommawert im Bereich von -1 bis einschließlich 1 (Unterschiede zu IEEE float finden Sie unter Gleitkommaregeln). |
| unorm | 32-Bit-Gleitkommawert im Bereich von 0 bis einschließlich 1 (Unterschiede zu IEEE float finden Sie unter Gleitkommaregeln) |
| beliebiger Texturtyp oder -struktur | Die Anzahl der zurückgegebenen Komponenten muss zwischen 1 und 3 einschließlich liegen. |
Darüber hinaus kann der Rückgabetyp ein beliebiger Texturtyp sein, einschließlich einer -Struktur, aber er muss weniger als 4 Komponenten sein, z. B. ein float1-Typ, der eine Komponente zurückgibt.
Standardwerte für fehlende Komponenten in einer Textur
Der Standardwert für fehlende Komponenten in einem Texturressourcentyp ist für alle Komponenten mit Ausnahme der Alphakomponente (A) 0 (null). Der Standardwert für das fehlende A ist 1. Die Art und Weise, wie diese dem Shader angezeigt wird, hängt vom Texturressourcentyp ab. Sie hat die Form der ersten typisierten Komponente, die tatsächlich im Texturressourcentyp vorhanden ist (beginnend von links in RGBA-Reihenfolge). Wenn dieses Formular UNORM oder FLOAT ist, ist der Standardwert für das fehlende A 1,0f. Wenn das Formular SINT oder UINT ist, wird der Standardwert für das fehlende A 0x1.
Wenn ein Shader beispielsweise den Texturressourcentyp DXGI _ FORMAT _ R24 _ UNORM _ X8 _ TYPELESS liest, Die Standardwerte für G und B sind null, und der Standardwert für A ist 1,0f. Wenn ein Shader das DXGI _ FORMAT _ R16G16 _ UINT-Texturressourcentyp liest, ist der Standardwert für B 0 und der Standardwert für A 0x00000001. Wenn ein Shader den DXGI FORMAT _ _ R16 _ SINT-Texturressourcentyp liest, sind die Standardwerte für G und B 0 und der Standardwert für A 0x00000001.
Beispiel 2
Im Folgenden finden Sie ein Beispiel für die Texturstichprobenentnahme mithilfe einer Texturmethode.
sampler MySamp;
Texture2D <float4> MyTex;
float4 main( float2 TexCoords[2] : TEXCOORD ) : SV_Target
{
return MyTex.Sample( MySamp, TexCoords[0] ));
}
Shader-Mindestmodell
Dieses Objekt wird in den folgenden Shadermodellen unterstützt.
| Shadermodell | Unterstützt |
|---|---|
| Shadermodell 4 und höhere Shadermodelle | ja |