将数组作为参数传递给HLSL顶点着色器?

时间:2014-03-20 06:56:19

标签: directx direct3d hlsl direct3d11

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

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

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

先谢谢。

1 个答案:

答案 0 :(得分:1)

HLSL references页面,函数参数仅支持内部类型和用户定义类型,用户定义类型也依赖于内部类型,它不支持本机数组类型,矢量类型或结构类型可能是你的选择。

这是一个使用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;
}