HLSL 関数は、次の構文で宣言されます。
[StorageClass][clipplanes()][precise]Return_Value Name ( [ArgumentList] ) [: Semantic] { [StatementBlock] };
パラメーター
-
StorageClass
-
関数宣言を再定義する修飾子。 現在、インライン 唯一の修飾子値です。 修飾子の値も既定値であるため、インライン する必要があります。 したがって、関数はインライン 指定するかどうかに関係なくインラインであり、HLSL 内のすべての関数はインラインです。 インライン関数は、関数呼び出しごとに関数本体のコピーを生成します (コンパイル時)。 これは、関数を呼び出すオーバーヘッドを減らすために行われます。
-
Clipplanes
-
クリッププレーンのオプションリスト。ユーザー指定のクリッププレーンは最大6個です。 これは、機能レベル 9_x 以上で動作する SV_ClipDistance の代替メカニズムです。
-
名の
-
シェーダー関数の名前を一意に識別する ASCII 文字列。
-
ArgumentListの
-
セマンティック
-
戻りデータの目的の使用法を識別する省略可能な文字列 (セマンティクス (DirectX HLSL)を参照)。
-
StatementBlock
-
関数の本体を構成する省略可能な ステートメント。 本体なしで定義された関数は、関数プロトタイプと呼ばれます。プロトタイプ関数の本体は、関数を呼び出す前に他の場所で定義する必要があります。
戻り値
備考
このページの構文では、ほぼすべての種類の HLSL 関数について説明します。これには頂点シェーダー、ピクセル シェーダー、ヘルパー関数が含まれます。 ジオメトリ シェーダーも関数を使用して実装されますが、その構文はもう少し複雑であるため、ジオメトリ シェーダー関数宣言を定義する別のページがあります (Geometry-Shader Object (DirectX HLSL)を参照)。
パラメーター型やパラメーターの順序の一意の組み合わせが与えられている限り、関数はオーバーロードできます。 HLSL には、組み込み関数や 組み込み関数も多数実装されています。
クリッププレーン 属性を使用して、ユーザー固有のクリッププレーンを指定できます。 Windows は、描画されたすべてのプリミティブにこれらのクリッププレーンを適用します。 クリッププレーン 属性は 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;
}
関連トピック