Sdílet prostřednictvím


Syntaxe deklarace fragmentu (Direct3D 9 HLSL)

Každou funkci jazyka HLSL (Microsoft High Level Shader Language) je možné převést na fragment shaderu s přidáním deklarace fragmentu.

Syntaxe

fragmentKeyword FragmentName = compile_fragment shaderProfile FunctionName();

kde:

Hodnota Popis
klíčové slovo fragmentu Povinné klíčové slovo. Buď pixelfragment, nebo vrcholový fragment.
FragmentName Textový řetězec ASCII, který určuje zkompilovaný název fragmentu.
kompilovat_fragment Povinné klíčové slovo.
profil shaderu Model shaderu pro kompilaci. Jakýkoli platný profil vrcholového shaderu (viz D3DXGetVertexShaderProfile) nebo profil pixelového shaderu (viz D3DXGetPixelShaderProfile).
FunctionName() Název funkce shaderu následovaný závorky.

 

Parametry sdíleného fragmentu jsou označené přidáním předpony r_ do sémantické.

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();

V tomto příkladu r_PosWorld a sémantika r_NormalWorld identifikují, že tyto dva parametry jsou sdíleny mezi dalšími fragmenty.

Poznámka

Fragment linker byl technologie Direct3D 9 od Microsoftu v D3DX 9. Fragment linker byl nástroj (Flink.exe), rozhraní API D3DX 9 a vylepšení HLSL. S vydáním sady DirectX SDK v srpnu 2009 byl vyřazen fragment linker. Linker fragmentů se nikdy nepoužil na Microsoft Direct3D 10, Microsoft Direct3D 10.1 nebo Microsoft Direct3D 11.

 

model shaderu 3 (DirectX HLSL)