2

我需要将一个数组作为 Direct3D 中的参数传递给我的顶点着色器。着色器函数的签名如下所示:

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

签名正常吗?如何定义输入布局描述?

提前致谢。

4

1 回答 1

2

HLSL 参考页面,函数参数只支持内在类型和用户定义类型,用户定义类型也依赖于内在类型,不支持原生数组类型,向量类型或结构类型可能是您的选择。

这是一个使用 struct 的示例,您可以简单地构建一个 struct 并像 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 回答