Compartilhar via


Sintaxe de variável de efeito (Direct3D 11)

Uma variável de efeito é declarada com a sintaxe descrita nesta seção.

Sintaxe

Sintaxe básica:

DataTypeVariableName [ : SemanticName ] <Annotations> [ = InitialValue ];

Consulte Sintaxe variável (DirectX HLSL) para obter a sintaxe completa.

Nome Descrição
Tipo de dados Qualquer tipo básico, de textura, de acesso não ordenado, de sombreador ou de bloco de estado.
VariableName Uma cadeia de caracteres ASCII que identifica exclusivamente o nome da variável de efeito.
SemanticName Uma cadeia de caracteres ASCII que indica informações adicionais sobre como uma variável deve ser usada. Uma semântica é uma cadeia de caracteres ASCII que pode ser um valor de sistema predefinido ou uma cadeia de caracteres de usuário personalizado.
Anotações Uma ou mais partes de informações fornecidas pelo usuário (metadados) que são ignoradas pelo sistema de efeito. Para obter sintaxe, consulte Sintaxe de anotação (Direct3D 11).
Initialvalue O valor padrão da variável.

 

Uma variável de efeito declarada fora de todas as funções é considerada global no escopo; variáveis declaradas dentro de uma função são locais para essa função.

Exemplo

Este exemplo ilustra variáveis numéricas de efeito global.

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

Este exemplo ilustra variáveis de efeito que são locais para uma função de sombreador.

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

    // shader body
}

Este exemplo ilustra parâmetros de função que têm semântica.

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

Este exemplo ilustra a declaração de uma variável de textura global.

Texture2D g_MeshTexture;            // Color texture for mesh

A amostragem de uma textura é feita com um amostrador de textura. Para configurar um sampler em um efeito, consulte o tipo de sampler.

Este exemplo ilustra a declaração de variáveis globais de exibição de acesso não ordenado.

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 de efeito