2

Direct3D の引数として頂点シェーダーに配列を渡す必要があります。シェーダー関数のシグネチャは次のようになります。

ReturnDataType main(float3 QuadPos : POSITION0, float4 OffsetArray[4] : COLOR0)

サインはOK?入力レイアウトの説明を定義するにはどうすればよいですか?

前もって感謝します。

4

1 に答える 1

2

HLSL 参照ページから、関数の引数は組み込み型のみをサポートし、ユーザー定義型も組み込み型に依存します。これはネイティブ配列型、ベクトル型、または構造体型をサポートしていません。

これは構造体を使用する例です。単純に構造体を構築して、VS_INPUT のように以下のように渡すことができます。

//--------------------------------------------------------------------------------------
// Input / Output structures
//--------------------------------------------------------------------------------------
struct VS_INPUT
{
    float4 vPosition    : POSITION;
    float3 vNormal      : NORMAL;
    float2 vTexcoord    : TEXCOORD0;
};

struct VS_OUTPUT
{
    float3 vNormal      : NORMAL;
    float2 vTexcoord    : TEXCOORD0;
    float4 vPosition    : SV_POSITION;
};

//--------------------------------------------------------------------------------------
// Vertex Shader
//--------------------------------------------------------------------------------------
VS_OUTPUT VSMain( VS_INPUT Input )
{
    VS_OUTPUT Output;

    Output.vPosition = mul( Input.vPosition, g_mWorldViewProjection );
    Output.vNormal = mul( Input.vNormal, (float3x3)g_mWorld );
    Output.vTexcoord = Input.vTexcoord;

    return Output;
}
于 2014-03-20T11:08:32.457 に答える