Condividi tramite


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.

 

Modello shader 3 (DirectX HLSL)