Поделиться через


Синтаксис переменной эффекта (Direct3D 11)

Переменная эффекта объявляется с помощью синтаксиса, описанного в этом разделе.

Синтаксис

Базовый синтаксис:

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

Полный синтаксис см. в разделе Синтаксис переменных (DirectX HLSL).

Имя Описание
DataType Любой базовый тип, тип текстуры, неупорядоченного представления доступа, шейдера или блока состояния.
VariableName Строка ASCII, однозначно идентифицирующая имя переменной эффекта.
SemanticName Строка ASCII, обозначающая дополнительные сведения об использовании переменной. Семантика — это строка ASCII, которая может быть либо предопределенной системной, либо пользовательской строкой.
Заметки Один или несколько фрагментов предоставленных пользователем сведений (метаданных), которые игнорируются системой эффектов. Синтаксис см. в разделе Синтаксис заметки (Direct3D 11).
InitialValue Значение переменной по умолчанию.

 

Переменная эффекта, объявленная вне всех функций, считается глобальной в область; переменные, объявленные в функции, являются локальными для этой функции.

Пример

В этом примере показаны числовые переменные глобального эффекта.

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

В этом примере показаны переменные эффекта, которые являются локальными для функции шейдера.

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

    // shader body
}

В этом примере показаны параметры функции с семантикой.

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

В этом примере показано объявление глобальной переменной текстуры.

Texture2D g_MeshTexture;            // Color texture for mesh

Выборка текстуры выполняется с помощью выборки текстуры. Сведения о том, как настроить дискретизатор в эффекте, см. в разделе Тип выборки.

В этом примере показано объявление глобальных переменных представления неупорядоченного доступа.

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

Формат эффекта