Sintassi della dichiarazione di frammento (Direct3D 9 HLSL)
Ogni funzione Microsoft High Level Shader Language (HLSL) può essere convertita in un frammento shader con l'aggiunta di una dichiarazione di frammento.
Sintassi
fragmentKeyword FragmentName = compile_fragment shaderProfile FunctionName();
dove:
Valore | Descrizione |
---|---|
fragmentKeyword | Parola chiave obbligatoria. Pixelfragment o vertexfragment. |
FragmentName | Stringa di testo ASCII che specifica il nome del frammento compilato. |
compile_fragment | Parola chiave obbligatoria. |
shaderProfile | Modello shader da compilare su. Qualsiasi profilo di vertex shader valido (vedere D3DXGetVertexShaderProfile) o profilo pixel shader (vedere D3DXGetPixelShaderProfile). |
FunctionName() | Nome della funzione shader, seguito da parentesi. |
I parametri dei frammenti condivisi sono contrassegnati aggiungendo un prefisso "r_" alla semantica.
void AmbientDiffuse( float3 vPosWorld: r_PosWorld,
float3 vNormalWorld: r_NormalWorld,
out float4 vColor: COLOR0 )
{
// Compute the light vector
float3 vLight = normalize( g_vLightPosition - vPosWorld );
// Compute the ambient and diffuse components of illumination
vColor = g_vLightColor * g_vMaterialAmbient;
vColor += g_vLightColor * g_vMaterialDiffuse * saturate( dot( vLight, vNormalWorld ) );
}
vertexfragment AmbientDiffuseFragment = compile_fragment vs_1_1 AmbientDiffuse();
In questo esempio, la semantica r_PosWorld e r_NormalWorld identificano che questi due parametri sono parametri condivisi tra altri frammenti.
Nota
Il linker frammento era una tecnologia Microsoft Direct3D 9 in D3DX 9. Il linker di frammento è stato uno strumento (Flink.exe), un'API D3DX 9 e un miglioramento di HLSL. Il linker di frammento è stato eliminato a partire dalla versione directX SDK di agosto 2009. Linker frammento non applicato mai a Microsoft Direct3D 10, Microsoft Direct3D 10.1 o Microsoft Direct3D 11.
Argomenti correlati