У меня есть нижний шейдер (фрагменты удалены для длины и четкости) и хотели бы найти лучший способ сделать это. Я хотел бы отправить массив текстур, размер которых является переменным, на мой металлический шейдер. Я сделаю некоторые вычисления на вершинных позициях, а затем выясню, какую текстуру использовать.Лучший способ отправить массив текстур на Металл
В настоящее время у меня только что закодированные вещи и используются несколько операторов if, но это уродливо (и я догадываюсь не быстро). Есть ли способ, который я могу вычислить i
, а затем использовать i
в качестве индекса текстуры (например, tex[i].sample
)?
// Current code - its ugly
fragment half4 SimpleTextureFragment(VertextOut inFrag [[stage_in]],
texture2d<half> tex0 [[ texture(0) ]]
texture2d<half> tex1 [[ texture(1) ]]
texture2d<half> tex2 [[ texture(2) ]]
...
texture2d<half> texN [[ texture(N) ]]
)
{
constexpr sampler quad_sampler;
int i = (Compute_Correct_Texture_to_Use);
if(i==0)
{
half4 color = tex0.sample(quad_sampler, inFrag.tex_coord);
}
else if(i==1)
{
half4 color = tex1.sample(quad_sampler, inFrag.tex_coord);
}
...
else if(i==n)
{
half4 color = texN.sample(quad_sampler, inFrag.tex_coord);
}
return color;
}