Compartir a través de


Sintaxis de variable de efecto (Direct3D 11)

Una variable de efecto se declara con la sintaxis descrita en esta sección.

Sintaxis

Sintaxis básica:

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

Consulte Sintaxis de variable (DirectX HLSL) para obtener una sintaxis completa.

Nombre Descripción
DataType Cualquier tipo de bloque básico, textura, vista de acceso desordenado, sombreador o bloque de estado.
VariableName Cadena ASCII que identifica de forma única el nombre de la variable de efecto.
SemanticName Cadena ASCII que denota información adicional sobre cómo se debe usar una variable. Una semántica es una cadena ASCII que puede ser un valor del sistema predefinido o una cadena de usuario personalizado.
anotaciones Uno o más fragmentos de información proporcionada por el usuario (metadatos) que el sistema de efectos omite. Para obtener la sintaxis, vea Annotation Syntax (Direct3D 11).
InitialValue Valor predeterminado de la variable.

 

Una variable de efecto que se declara fuera de todas las funciones, se considera global en el ámbito; las variables declaradas dentro de una función son locales para esa función.

Ejemplo

En este ejemplo se muestran variables numéricas de efecto 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

En este ejemplo se muestran las variables de efecto que son locales para una función de sombreador.

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

    // shader body
}

En este ejemplo se muestran los parámetros de función que tienen semántica.

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

En este ejemplo se muestra cómo declarar una variable de textura global.

Texture2D g_MeshTexture;            // Color texture for mesh

El muestreo de una textura se realiza con un muestreador de texturas. Para configurar un sampler en un efecto, consulte el tipo de sampler.

En este ejemplo se muestra cómo declarar variables de vista de acceso no ordenadas globales.

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 efecto