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.
Objekt1-Typ Beschreibung
Buffer Puffer
Texture1D 1D-Textur
Texture1DArray Array von 1D-Texturen
Texture2D 2D-Textur
Texture2DArray Array von 2D-Texturen
Texture3D 3D-Textur
TextureCube Cube-Textur
TextureCubeArray Array von Cubetexturen
Object2-Typ Beschreibung
Texture2DMS 2D-Multisampling-Textur
Texture2DMSArray Array von 2D-Multisampling-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 oderVektor-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

Siehe auch

Shadermodell 4