Effect-Variablensyntax (Direct3D 11)

Eine Effect-Variable wird mit der in diesem Abschnitt beschriebenen Syntax deklariert.

Syntax

Grundlegende Syntax:

DataType VariableName [ : SemanticName ] < Annotations = > [ InitialValue ] ;

Die vollständige Syntax finden Sie unter Variablensyntax (DirectX HLSL).

Name Beschreibung
DataType Alle grundlegendenTypen, Texturen,ungeordnete Zugriffsansichten, Shader oder Zustandsblocktypen.
VariableName Eine ASCII-Zeichenfolge, die den Namen der Effektvariablen eindeutig identifiziert.
SemanticName Eine ASCII-Zeichenfolge, die zusätzliche Informationen zur Verwendung einer Variablen angibt. Eine Semantik ist eine ASCII-Zeichenfolge, die entweder ein vordefinierter Systemwert oder eine benutzerdefinierte Benutzerzeichenfolge sein kann.
Anmerkungen Mindestens ein Teil der vom Benutzer bereitgestellten Informationen (Metadaten), die vom Effektsystem ignoriert werden. Informationen zur Syntax finden Sie unter Anmerkungssyntax (Direct3D 11).
InitialValue Der Standardwert der Variablen.

Eine Effect-Variable, die außerhalb aller Funktionen deklariert wird, wird im Gültigkeitsbereich als global betrachtet. Variablen, die innerhalb einer Funktion deklariert werden, sind lokal für diese Funktion.

Beispiel

In diesem Beispiel werden numerische Variablen für globale Auswirkungen veranschaulicht.

float4 g_MaterialAmbientColor;      // Material's ambient color
float4 g_MaterialDiffuseColor;      // Material's diffuse color
float3 g_LightDir[3];               // Light's direction in world space
float4x4 g_mWorld;                  // World matrix for object

Dieses Beispiel veranschaulicht Effektvariablen, die lokal für eine Shaderfunktion sind.

VS_OUTPUT RenderSceneVS( ... )
{
    float3 vNormalWorldSpace;
    float4 vAnimatedPos;

    // shader body
}

Dieses Beispiel veranschaulicht Funktionsparameter mit Semantik.

VS_OUTPUT RenderSceneVS( float4 vPos : SV_POSITION,
                         float3 vNormal : NORMAL,
                         float2 vTexCoord0 : TEXCOORD0,
                         uniform int nNumLights,
                         uniform bool bTexture,
                         uniform bool bAnimate )
{
  ...
}

Dieses Beispiel veranschaulicht das Deklarieren einer globalen Texturvariablen.

Texture2D g_MeshTexture;            // Color texture for mesh

Das Sampling einer Textur erfolgt mit einem Texturs sampler. Informationen zum Einrichten eines Samplers in einem Effekt finden Sie unter dem Samplertyp.

Dieses Beispiel veranschaulicht das Deklarieren globaler ungeordneter Zugriffsansichtsvariablen.

RWStructuredBuffer<uint> bc : register(u2) < string name="bc"; >;
RWBuffer<uint> bRW;
struct S
{
   uint key;
   uint value;
};
AppendStructuredBuffer<S> asb : register(u5);
RWByteAddressBuffer rwbab : register(u1);
RWStructuredBuffer<uint> rwsb : register(u3);
RWTexture1D<float> rwt1d : register(u1);
RWTexture1DArray<uint> rwt1da : register(u4);
RWTexture2D<uint> rwt2d : register(u2);
RWTexture2DArray<uint> rwt2da : register(u6);
RWTexture3D<uint> rwt3d : register(u7); 
 This example illustrates declaring global shader variables.
VertexShader pVS = CompileShader( vs_5_0, VS() );
HullShader pHS = NULL;
DomainShader pDS = NULL;
GeometryShader pGS = ConstructGSWithSO( CompileShader( gs_5_0, VS() ), 
                                        "0:Position.xy; 1:Position.zw; 2:Color.xy", 
                                        "3:Texcoord.xyzw; 3:$SKIP.x;", 
                                        NULL, 
                                        NULL, 
                                        1 );
PixelShader pPS = NULL;
ComputeShader pCS = NULL;
This example illustrates declaring global state block variables.
BlendState myBS[2] < bool IsValid = true; >
{
  {
    BlendEnable[0] = false;
  },
  {
    BlendEnable[0] = true;
    SrcBlendAlpha[0] = Inv_Src_Alpha;
  }
};

RasterizerState myRS
{
      FillMode = Solid;
      CullMode = NONE;
      MultisampleEnable = true;
      DepthClipEnable = false;
};

DepthStencilState myDS
{
    DepthEnable = false;
    DepthWriteMask = Zero;
    DepthFunc = Less;
};
sampler mySS[2] : register(s3) 
{
    {
        Filter = ANISOTROPIC;
        MaxAnisotropy = 3;
    },
    {
        Filter = ANISOTROPIC;
        MaxAnisotropy = 4;
    }
};
  
  

Effect-Format