2016-04-02 7 views
0

Как объявить массив TEXCOORD? В разных структурах у меня есть:Неопределенное количество TEXCOORDs

float2 foo : TEXCOORD0 
float3 bar : TEXCOORD1 

И теперь мне нужен

float4 Positions[NUMBER_OF_FLOATS] 
float3 OtherPositions[NUMBER_OF_FLOATS_2] 

Я хочу, чтобы эти массивы состоят из TEXCOORDs (если опустить TEXCOORD семантическим, я получаю сообщение об ошибке из-за этого). Но независимо от того, как я его пишу, я получаю дублирующую ошибку, что я использую TEXCOORD0 и TEXCOORD1 несколько раз.

Любая помощь приветствуется.

ответ

0

Проблема состоит в том, что предопределенная семантика, такая как TEXCOORD, имеет определенный тип (см. В doc). Поэтому компилятор ожидает, что TEXCOORD будет float-вектором, а не массивом векторов float. Возможно, он работает с пользовательской семантикой, но не нашел ссылок и никогда не тестировал его сам.

Я также наткнулся на эту проблему и решил ее (довольно уродливый) с препроцессором. В вашем случае это будет выглядеть

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

Конечно, это было бы нужно recompling шейдера, если изменения номера и макет вершин должны соответствовать, но, несмотря на это не лучшее решение, это работает для меня:)

Смежные вопросы