我需要将一个数组传递给我的顶点着色器作为Direct3D中的参数。着色器函数的签名如下所示:
ReturnDataType main(float3 QuadPos : POSITION0, float4 OffsetArray[4] : COLOR0)
签名好吗?如何定义输入布局描述?
先谢谢。
答案 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;
}