関数宣言の構文

HLSL 関数は、次の構文で宣言されます。

[StorageClass][clipplanes()][precise]Return_Value ( [ArgumentList] ) [: Semantic] { [StatementBlock] };

 

パラメーター

StorageClass

関数宣言を再定義する修飾子。 現在、inline は唯一の修飾子値です。 修飾子の値も既定値であるため、 インライン である必要があります。 したがって、関数はインラインで指定するかどうかに関係なく インラインであり、HLSL 内のすべての関数はインラインです。 インライン関数は、関数呼び出しごとに関数本体のコピーを生成します (コンパイル時)。 これは、関数を呼び出すオーバーヘッドを減らすために行われます。

クリッププレーン

クリップ プレーンのオプションリスト。ユーザー指定のクリップ プレーンは最大 6 個です。 これは、機能レベル9_x 以上で動作するSV_ClipDistanceの代替メカニズムです。

名前

シェーダー関数の名前を一意に識別する ASCII 文字列。

ArgumentList

省略可能な引数リスト。関数に渡される 引数 のコンマ区切りのリストです。

セマンティック

戻りデータの目的の使用法を識別する省略可能な文字列 ( 「セマンティクス (DirectX HLSL)」を参照)。

StatementBlock

関数の本体を構成する省略可能な ステートメント 。 本体なしで定義された関数は、関数プロトタイプと呼ばれます。プロトタイプ関数の本体は、関数を呼び出す前に他の場所で定義する必要があります。

戻り値

戻り値の型には、これらの HLSL 型のいずれかを指定できます。

解説

このページの構文では、ほぼすべての種類の HLSL 関数について説明します。これには頂点シェーダー、ピクセル シェーダー、ヘルパー関数が含まれます。 ジオメトリ シェーダーも関数と共に実装されますが、その構文はもう少し複雑なので、ジオメトリ シェーダー関数宣言を定義する別のページがあります ( 「Geometry-Shader Object (DirectX HLSL)」を参照してください)。

関数は、パラメーター型やパラメーターの順序の一意の組み合わせが指定されている限り、オーバーロードできます。 HLSL には、組み込み関数または 組み込み関数も多数実装されています。

clipplanes 属性を使用して、ユーザー固有のクリップ プレーンを指定できます。 Windows は、描画されたすべてのプリミティブにこれらのクリップ プレーンを適用します。 clipplanes 属性はSV_ClipDistanceと同様に機能しますが、9_x以降のすべてのハードウェア機能レベルで動作します。 詳細については、「 機能レベル 9 ハードウェアのユーザー クリップ プレーン」を参照してください。

この例は、BasicHLSL10 サンプルの BasicHLSL10.fx のものです

struct VS_OUTPUT
{
    float4 Position   : SV_POSITION; 
    float4 Diffuse    : COLOR0;
    float2 TextureUV  : TEXCOORD0;
};

VS_OUTPUT RenderSceneVS( float4 vPos : POSITION,
                         float3 vNormal : NORMAL,
                         float2 vTexCoord0 : TEXCOORD,
                         uniform int nNumLights,
                         uniform bool bTexture,
                         uniform bool bAnimate )
{
    VS_OUTPUT Output;
    ...
    return Output;    
}

AdvancedParticles サンプルの AdvancedParticles.fx のこの例は、戻り値の型にセマンティックを使用する方法を示しています。

//
// PS for particles
//
float4 PSPointSprite(PSSceneIn input) : SV_Target
{   
    return g_txDiffuse.Sample( g_samLinear, input.tex ) * input.color;
}

Functions (DirectX HLSL)