未定义的TEXCOORD数量

时间:2016-04-02 18:09:22

标签: direct3d hlsl

如何声明TEXCOORD数组? 在不同的结构中,我有:

float2 foo : TEXCOORD0 
float3 bar : TEXCOORD1

现在我需要

float4 Positions[NUMBER_OF_FLOATS]
float3 OtherPositions[NUMBER_OF_FLOATS_2]

我希望这些数组由TEXCOORD组成(如果省略TEXCOORD语义,我会因此而收到错误)。但无论我如何写它,我都会遇到重复错误,我多次使用TEXCOORD0和TEXCOORD1。

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

问题在于像TEXCOORD这样的预定义语义具有特定类型(见doc)。因此编译器希望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
...

当然,如果数字发生变化并且顶点布局必须适合,则需要重新编译着色器,但是尽管它不是最适合我的解决方案:)