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.
Související témata