Direct3d 未定义的TEXCOORDs数
如何声明TEXCOORDs数组? 在不同的结构中,我有:Direct3d 未定义的TEXCOORDs数,direct3d,hlsl,Direct3d,Hlsl,如何声明TEXCOORDs数组? 在不同的结构中,我有: float2 foo : TEXCOORD0 float3 bar : TEXCOORD1 现在我需要 float4 Positions[NUMBER_OF_FLOATS] float3 OtherPositions[NUMBER_OF_FLOATS_2] 我希望这些数组由TEXCOORDs组成(如果我省略TEXCOORD语义,我会因此得到一个错误)。但无论我如何编写,我都会得到一个重复的错误,即我多次使用TEXCOORD0和TEX
float2 foo : TEXCOORD0
float3 bar : TEXCOORD1
现在我需要
float4 Positions[NUMBER_OF_FLOATS]
float3 OtherPositions[NUMBER_OF_FLOATS_2]
我希望这些数组由TEXCOORDs组成(如果我省略TEXCOORD语义,我会因此得到一个错误)。但无论我如何编写,我都会得到一个重复的错误,即我多次使用TEXCOORD0和TEXCOORD1
非常感谢您的帮助。问题在于预定义的语义(如TEXCOORD)具有特定的类型(如中所示)。因此,编译器希望TEXCOORD是浮点向量,而不是浮点向量数组。也许它可以使用自定义语义,但没有找到任何引用,也从未亲自测试过 我还偶然发现了这个问题,并用预处理器解决了它(相当难看)。就你的情况来看
#if NUMBER_OF_FLOATS > 0
float4 Position_1 : TEXCOORD0;
#endif
#if NUMBER_OF_FLOATS > 1
float4 Position_2 : TEXCOORD1;
#endif
#if NUMBER_OF_FLOATS > 2
float4 Position_3 : TEXCOORD2;
#endif
...
当然,如果数量发生变化,并且必须适应顶点布局,则需要对着色器进行重新组合,但尽管这不是最佳解决方案,但它对我来说仍然有效:)