Texture-Objekt
In Direct3D 10 geben Sie die Sampler und Texturen unabhängig voneinander an. Textursampling wird mithilfe eines Texturobjekts mit Vorlagen implementiert. Dieses Vorlagentexturobjekt weist ein bestimmtes Format auf, 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 Templated-Texture-Objekt implementiert Textursamplingmethoden, die sowohl die Textur als auch den Sampler als Eingabeparameter verwenden.
Nicht alle Formate werden für alle Funktionen unterstützt. Sie sollten also CheckFeatureSupport verwenden, um zu überprüfen, ob ein Format für eine bestimmte Verwendung unterstützt wird.
Dies ist die Syntax zum Erstellen aller Texturobjekte (mit Ausnahme von Multisampled-Objekten).
Objekt1 [<Typ>] Name; |
---|
Multisampled-Objekte (Texture2DMS und Texture2DMSArray) erfordern, dass die Texturgröße explizit angegeben und als Anzahl von Beispielen ausgedrückt wird.
Objekt2 [<Typ; Beispiele>] Name; |
---|
Parameter
Element | Beschreibung | ||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Object |
Ein Texturobjekt. Muss einer der folgenden Typen sein.
|
||||||||||||||||||||||||
Typ |
Optional. Jeder skalare HLSL-Typ oder Vektor-HLSL-Typ, umgeben von Winkelklammern. Der Standardtyp ist float4. |
||||||||||||||||||||||||
Name |
Eine ASCII-Zeichenfolge, die den Texturobjektnamen angibt. |
||||||||||||||||||||||||
Beispiele |
Die Anzahl der Stichproben (bereiche zwischen 1 und 128). |
Beispiel 1
Hier ist ein Beispiel zum Deklarieren eines Texturobjekts.
Texture2D <float4> MyTex;
Texture2DMS <float4, 128> MyMSTex;
Texture-Objektmethoden
Jedes Texturobjekt implementiert bestimmte Methoden; Hier ist die Tabelle, in der alle Methoden aufgelistet sind. Sehen Sie sich die Referenzseite für jede Methode an, um zu sehen, welche Objekte diese Methode verwenden können.
Texture-Methode | Beschreibung | vs_4_0 | vs_4_1 | ps_4_0 | ps_4_1 | gs_4_0 | gs_4_1 |
---|---|---|---|---|---|---|---|
CalculateLevelOfDetail | Berechnen Sie die LOD, geben Sie ein geklemmtes Ergebnis zurück. | x | |||||
CalculateLevelOfDetailUnclamped | Berechnen Sie die LOD und geben Sie ein ungeklammertes Ergebnis zurück. | x | |||||
Gather | Ruft die vier Beispiele (nur rote Komponente) ab, die beim Sampling einer Textur für bilineare Interpolation verwendet werden. | x | x | x | |||
GetDimensions | Rufen Sie die Texturdimension für eine angegebene Mipmap-Ebene ab. | x | x | x | x | x | x |
GetDimensions (MultiSample) | Rufen Sie die Texturdimension für eine angegebene Mipmap-Ebene ab. | x | x | x | |||
GetSamplePosition | Ruft die Position des angegebenen Beispiels ab. | x | x | x | |||
Einlesen | Laden Sie Daten ohne Filterung oder Sampling. | x | x | x | x | x | x |
Laden (Multisample) | Laden Sie Daten ohne Filterung oder Sampling. | x | x | x | x | ||
Beispiel | Beispiel für eine Textur. | x | x | ||||
SampleBias | Beispiel für eine Textur nach dem Anwenden des Bias-Werts auf die Mipmap-Ebene. | x | x | ||||
SampleCmp | Beispiel für eine Textur mit einem Vergleichswert zum Ablehnen von Beispielen. | x | x | ||||
SampleCmpLevelZero | Beispiel für eine Textur (nur Mipmap-Ebene 0) mit einem Vergleichswert zum Ablehnen von Beispielen. | x | x | x | x | x | x |
SampleGrad | Beispiel für eine Textur mit einem Farbverlauf, um die Berechnung der Beispielposition zu beeinflussen. | x | x | x | x | x | x |
SampleLevel | Beispiel für eine Textur auf der angegebenen Mipmap-Ebene. | x | x | x | x | x | x |
Rückgabetyp
Der Rückgabetyp einer Texturobjekt-Methode ist float4, sofern nicht anders angegeben, mit Ausnahme der Anti-Alias-Texturobjekte mit mehreren Abtastwerten, bei denen immer der Typ und die Anzahl der Abtastwerte angegeben werden müssen. Der Rückgabetyp ist identisch mit dem Texturressourcentyp (DXGI_FORMAT). Mit anderen Worten, es kann jeder der folgenden Typen sein.
type | BESCHREIBUNG |
---|---|
float | 32-Bit-Float (siehe Gleitkommaregeln für Unterschiede von IEEE float) |
INT | 32-Bit-Ganzzahl mit Vorzeichen |
unsigned int | 32-Bit-Ganzzahl ohne Vorzeichen |
snorm | 32-Bit-Float im Bereich -1 bis einschließlich 1 (siehe Gleitkommaregeln für Unterschiede von IEEE Float) |
unorm | 32-Bit-Float im Bereich 0 bis einschließlich 1 (siehe Gleitkommaregeln für Unterschiede von IEEE Float) |
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, muss jedoch 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 null für jede Komponente außer der Alphakomponente (A); Der Standardwert für das fehlende A ist ein Wert. Die Art und Weise, wie diese dem Shader angezeigt wird, hängt vom Texturressourcentyp ab. Sie verwendet die Form der ersten typierten Komponente, die tatsächlich im Texturressourcentyp vorhanden ist (beginnend von links in RGBA-Reihenfolge). Wenn es sich bei diesem Formular um UNORM oder FLOAT handelt, 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 beispielsweise ein Shader den DXGI_FORMAT_R24_UNORM_X8_TYPELESS Texturressourcentyp liest, sind die Standardwerte für G und B null und der Standardwert für A ist 1,0f. Wenn ein Shader denDXGI_FORMAT_R16G16_UINT Texturressourcentyp liest, ist der Standardwert für B null und der Standardwert für A ist 0x00000001; wenn ein Shader den DXGI_FORMAT_R16_SINT Texturressourcentyp liest, sind die Standardwerte für G und B null und der Standardwert für A ist 0x00000001.
Beispiel 2
Nachfolgend sehen Sie ein Beispiel für das Textursampling mithilfe einer Texturmethode.
sampler MySamp;
Texture2D <float4> MyTex;
float4 main( float2 TexCoords[2] : TEXCOORD ) : SV_Target
{
return MyTex.Sample( MySamp, TexCoords[0] ));
}
Minimales Shadermodell
Dieses Objekt wird in den folgenden Shadermodellen unterstützt.
Shadermodell | Unterstützt |
---|---|
Shadermodell 4 und höhere Shadermodelle | ja |