片段声明语法 (Direct3D 9 HLSL)

每个 Microsoft 高级着色器语言 (HLSL) 函数都可以通过添加片段声明转换为着色器片段。

语法

fragmentKeyword FragmentName = compile_fragment shaderProfile FunctionName();

其中:

说明
fragmentKeyword 必需的关键字 (keyword) 。 pixelfragment 或顶点fragment。
FragmentName 指定已编译片段名称的 ASCII 文本字符串。
compile_fragment 必需的关键字 (keyword) 。
shaderProfile 要编译的着色器模型。 任何有效的顶点着色器配置文件 (请参阅 D3DXGetVertexShaderProfile) 或像素着色器配置文件 (请参阅 D3DXGetPixelShaderProfile) 。
FunctionName () 着色器函数名称,后跟括号。

 

共享片段参数通过向其语义添加“r_”前缀进行标记。

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

在此示例中,r_PosWorld和r_NormalWorld语义确定这两个参数是其他片段之间的共享参数。

注意

片段链接器是 D3DX 9 中的 Microsoft Direct3D 9 技术。 片段链接器是工具 (Flink.exe) 、D3DX 9 API 和 HLSL 增强功能。 自 2009 年 8 月 DirectX SDK 发布起,已删除片段链接器。 片段链接器从未应用于 Microsoft Direct3D 10、Microsoft Direct3D 10.1 或 Microsoft Direct3D 11。

 

着色器模型 3 (DirectX HLSL)