Поделиться через


Синтаксис объявления фрагмента (Direct3D 9 HLSL)

Каждую функцию HLSL (Microsoft High Level Shader Language) можно преобразовать в фрагмент шейдера с добавлением объявления фрагмента.

Синтаксис

fragmentKeyword FragmentName = compile_fragment shaderProfile FunctionName();

где:

Значение Описание
fragmentKeyword Обязательный ключевое слово. Либо pixelfragment, либо vertexfragment.
FragmentName Текстовая строка ASCII, указывающая скомпилированное имя фрагмента.
compile_fragment Обязательный ключевое слово.
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 определяет, что эти два параметра являются общими для других фрагментов.

Примечание

Компоновщик фрагментов — это технология Microsoft Direct3D 9 в D3DX 9. Компоновщик фрагментов был инструментом (Flink.exe), API D3DX 9 и усовершенствованием HLSL. Компоновщик фрагментов был удален в выпуске пакета SDK Для DirectX за август 2009 г. Компоновщик фрагментов никогда не применялся к Microsoft Direct3D 10, Microsoft Direct3D 10.1 или Microsoft Direct3D 11.

 

Модель шейдера 3 (DirectX HLSL)