Syntaxe de variable d’effet (Direct3D 11)
Une variable d’effet est déclarée avec la syntaxe décrite dans cette section.
Syntaxe
Syntaxe de base :
DataTypeVariableName [ : SemanticName ] <Annotations> [ = InitialValue ];
Pour connaître la syntaxe complète, consultez Syntaxe variable (DirectX HLSL).
Nom | Description |
---|---|
DataType | Tout type de bloc de base, de texture, d’accès non ordonné, de nuanceur ou d’état. |
VariableName | Chaîne ASCII qui identifie de manière unique le nom de la variable d’effet. |
SemanticName | Chaîne ASCII qui indique des informations supplémentaires sur la façon dont une variable doit être utilisée. Une sémantique est une chaîne ASCII qui peut être une valeur système prédéfinie ou une chaîne d’utilisateur personnalisée. |
Annotations | Un ou plusieurs éléments d’informations fournis par l’utilisateur (métadonnées) qui sont ignorés par le système d’effets. Pour la syntaxe, consultez Syntaxe d’annotation (Direct3D 11). |
InitialValue | Valeur par défaut de la variable. |
Une variable d’effet déclarée en dehors de toutes les fonctions est considérée comme globale dans l’étendue ; les variables déclarées dans une fonction sont locales à cette fonction.
Exemple
Cet exemple illustre des variables numériques d’effet 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
Cet exemple illustre les variables d’effet locales d’une fonction de nuanceur.
VS_OUTPUT RenderSceneVS( ... )
{
float3 vNormalWorldSpace;
float4 vAnimatedPos;
// shader body
}
Cet exemple illustre les paramètres de fonction qui ont une sémantique.
VS_OUTPUT RenderSceneVS( float4 vPos : SV_POSITION,
float3 vNormal : NORMAL,
float2 vTexCoord0 : TEXCOORD0,
uniform int nNumLights,
uniform bool bTexture,
uniform bool bAnimate )
{
...
}
Cet exemple illustre la déclaration d’une variable de texture globale.
Texture2D g_MeshTexture; // Color texture for mesh
L’échantillonnage d’une texture est effectué avec un échantillonneur de texture. Pour configurer un échantillonneur dans un effet, consultez le type d’échantillonneur.
Cet exemple illustre la déclaration de variables globales d’affichage d’accès non ordonné.
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;
}
};
Rubriques connexes