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.
Object1-Typ Beschreibung
Buffer Buffer
Texture1D 1D-Textur
Texture1DArray Array von 1D-Texturen
Texture2D 2D-Textur
Texture2DArray Array von 2D-Texturen
Texture3D 3D-Textur
TextureCube Cubetextur
TextureCubeArray Array von Cubetexturen
Object2-Typ Beschreibung
Texture2DMS 2D-Textur mit mehrerenAmpeln
Texture2DMSArray Array von 2D-Texturen mit mehrerenAmpeln

  1. Der Puffertyp unterstützt die meisten Texturobjektmethoden mit Ausnahme von GetDimensions.
  2. TextureCubeArray ist im Shadermodell 4.1 oder höher verfügbar.
  3. Shadermodell 4.1 ist in Direct3D 10.1 oder höher verfügbar.

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

Siehe auch

Shadermodell 4