我已經獲得了下面的着色器(爲了長度和清晰度而刪除了這些作品),並且希望找到更好的方法來完成此操作。我想將大小可變的紋理數組發送到我的金屬着色器。我將對頂點位置進行一些計算,然後確定要使用的紋理。向金屬發送紋理數組的最佳方法
目前我剛硬編碼的東西,並使用幾個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;
}