Condividi tramite


Sintassi della variabile di effetto (Direct3D 11)

Una variabile di effetto viene dichiarata con la sintassi descritta in questa sezione.

Sintassi

Sintassi di base:

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

Per la sintassi completa, vedere Sintassi delle variabili (DirectX HLSL ).

Nome Descrizione
DataType Qualsiasi tipo di blocco di base, trama, accesso non ordinato, shader o stato.
VariableName Stringa ASCII che identifica in modo univoco il nome della variabile dell'effetto.
SemanticName Stringa ASCII che indica informazioni aggiuntive sulla modalità di utilizzo di una variabile. Una semantica è una stringa ASCII che può essere un valore di sistema predefinito o una stringa utente personalizzata.
Annotazioni Una o più informazioni fornite dall'utente (metadati) ignorate dal sistema dell'effetto. Per la sintassi, vedere Sintassi delle annotazioni (Direct3D 11).For syntax, see Annotation Syntax (Direct3D 11).
InitialValue Valore predefinito della variabile.

 

Una variabile di effetto dichiarata all'esterno di tutte le funzioni viene considerata globale nell'ambito; le variabili dichiarate all'interno di una funzione sono locali per tale funzione.

Esempio

In questo esempio vengono illustrate le variabili numeriche dell'effetto globale.

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

In questo esempio vengono illustrate le variabili di effetto locali di una funzione shader.

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

    // shader body
}

In questo esempio vengono illustrati i parametri di funzione con semantica.

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

Questo esempio illustra la dichiarazione di una variabile di trama globale.

Texture2D g_MeshTexture;            // Color texture for mesh

Il campionamento di una trama viene eseguito con un campionatore di trama. Per configurare un campionatore in un effetto, vedere il tipo di campionatore.

Questo esempio illustra la dichiarazione delle variabili di visualizzazione di accesso non ordinate globali.

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;
    }
};
  
  

Formato effetto