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