2016-04-02 9 views
0

TEXCOORDの配列を宣言するにはどうすればよいですか? は、私が持っている別の構造体では:未定義のTEXCOORD数

float2 foo : TEXCOORD0 
float3 bar : TEXCOORD1 

そして今、私は

float4 Positions[NUMBER_OF_FLOATS] 
float3 OtherPositions[NUMBER_OF_FLOATS_2] 

を必要とする私は(私はTEXCOORDがセマンティック省略した場合、私はそれのためにエラーが発生します)これらの配列は、TEXCOORDsから構成します。しかし、私はそれをどのように書くにしても、私は重複したエラーが出る、私はTEXCOORD0とTEXCOORD1を何度も使用する。

何か助けていただければ幸いです。

答えて

0

問題は、TEXCOORDのような定義済みセマンティクスが特定のタイプ(docに見られる)であることです。したがって、TEXCOORDは浮動小数点型の配列ではなく、浮動小数点型のベクトルであるとコンパイラは期待しています。たぶんそれはカスタムセマンティクスで動作しますが、参照を見つけられず、自分でテストしたこともありません。

私はこの問題を偶然見つけ、プリプロセッサで解決しました(かなり醜い)。あなたのケースでは、これが数の変化とあなたの頂点レイアウトが合うように持っている必要があります場合は、シェーダのrecomplingが必要ですが、それはそれは私の作品最善の解決策ではないにも関わらず、です。もちろん、

#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 
... 

次のようになります。 )