Texture-Objekt

In Direct3D 10 geben Sie die Sampler und Texturen unabhängig an; Texture Sampling wird mithilfe eines Vorlagentexturobjekts implementiert. Dieses Vorlagentexturobjekt verfügt über 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 Templated-Texture-Objekt implementiert Textur-Samplingmethoden, die sowohl die Textur als auch den Sampler als Eingabeparameter verwenden.

Dies ist die Syntax zum Erstellen aller Texturobjekte (außer 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.

Object2 [<Type, Samples>] Name;

Parameter

Element BESCHREIBUNG
Objekt
Ein Texturobjekt. Muss eine der folgenden Typen sein.
Objekt1-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
Objekt2-Typ BESCHREIBUNG
Texture2DMS 2D-Multisampled-Textur
Texture2DMSArray Array von 2D-Multisampled-Texturen

  1. Der Puffertyp unterstützt die meisten Texturobjektmethoden außer 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 skalare HLSL-Typ oder Vektor-HLSL-Typ, umgeben von Winkelklammern. Der Standardtyp ist float4.

Namen

Eine ASCII-Zeichenfolge, die den Texturobjektnamen angibt.

Proben

Die Anzahl der Beispiele (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 den LOD, geben Sie ein geklammertes Ergebnis zurück. w
CalculateLevelOfDetailUnclamped Berechnen Sie den LOD, geben Sie ein nicht gelampesendes Ergebnis zurück. w
Versammeln Ruft die vier Beispiele (nur rote Komponente) ab, die beim Sampling einer Textur für bilineare Interpolation verwendet werden würden. 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 Rufen Sie die Position des angegebenen Beispiels ab. x x x
Load Laden Sie Daten ohne Filterung oder Sampling. x x x x x x
Laden (Multisample) Laden Sie Daten ohne Filterung oder Stichproben. x x x x
Beispiel Beispiel für eine Textur. x x
SampleBias Beispiel für eine Textur, nachdem der Bias-Wert auf die mipmap-Ebene angewendet wurde. x x
SampleCmp Beispiel für eine Textur mithilfe eines Vergleichswerts zum Ablehnen von Beispielen. x x
SampleCmpLevelZero Beispiel für eine Textur (nur mipmap-Ebene 0), indem Sie einen Vergleichswert verwenden, um Beispiele abzulehnen. x x x x x x
SampleGrad Beispiel einer Textur mit einem Farbverlauf, um die Art und Weise zu beeinflussen, wie der Beispielspeicherort berechnet wird. 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 Texturobjektmethode ist float4, sofern nicht anders angegeben, mit Ausnahme der multisampelten Anti-Alias-Texturobjekte, die immer den Typ und die Beispielanzahl angeben. Der Rückgabetyp entspricht dem Texturressourcentyp (DXGI_FORMAT). Mit anderen Worten, es kann eine 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 1 inklusive (siehe Gleitkommaregeln für Unterschiede von IEEE Float)
unorm 32-Bit-Float im Bereich 0 bis 1 inklusive (siehe Gleitkommaregeln für Unterschiede von IEEE Float)
beliebiger Texturtyp oder -struktur Die Anzahl der zurückgegebenen Komponenten muss zwischen 1 und 3 inklusive liegen.

Darüber hinaus kann der Rückgabetyp ein beliebiger Texturtyp sein, einschließlich einer Struktur, aber es 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 null für jede Komponente außer der Alphakomponente (A); Der Standardwert für den fehlenden A ist eine. Die Art und Weise, wie dieser auf dem Shader angezeigt wird, hängt vom Texturressourcentyp ab. Es nimmt die Form der ersten typierten 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 den fehlenden A 1,0f. Wenn das Formular SINT oder UINT ist, ist der Standardwert für den fehlenden A 0x1.

Wenn ein Shader beispielsweise 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 den DXGI_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 die Texturabnahme mithilfe einer Texturmethode.

sampler MySamp;
Texture2D <float4> MyTex;
 
float4 main( float2 TexCoords[2] : TEXCOORD ) : SV_Target
{
    return MyTex.Sample( MySamp, TexCoords[0] ));
}

Mindest-Shadermodell

Dieses Objekt wird in den folgenden Shadermodellen unterstützt.

Shadermodell Unterstützt
Shadermodell 4 und höhere Shadermodelle Ja

Siehe auch

Shadermodell 4