Текстурный массив в металле

Первая часть покрыта ответом Торстена ... вам понадобятся array или numarray, чтобы что-либо делать с этими данными.

Что касается% 08X и hex2dec stuff,% 08X - это только формат печати для этих чисел unit32 (8-разрядный шестнадцатеричный, точно такой же, как Python), и hex2dec ('4D445254') - это matlab для 0x4D445254.

Наконец, ~ = в matlab побитовое сравнение; use == в Python.

0
задан Ruban4Axis 18 January 2019 в 05:06
поделиться

1 ответ

Вам не нужно менять код приложения. Поскольку вы используете последовательные текстурные индексы, вы можете просто заменить три отдельных параметра одним параметром массива текстуры, привязанным к индексу 0, и привязки свяжут элементы массива с текстурами, которые вы предоставили из кода приложения. [115 ]

Другими словами, если вы объявляете массив текстур с размером 3 и привязанным к индексу текстуры 0, элементы массива берутся из индексов текстуры 0, 1 и 2.


Обновление для вашего отредактированного вопроса:

Вы путаете массив из текстур (также называемый массивом текстур) и текстуру массива. Терминология запутанно тонкая.

  • Текстура массива - это отдельная текстура с несколькими 2D-плоскостями. Все плоскости имеют одинаковый размер и формат пикселей. Число плоскостей в текстуре не нужно знать во время компиляции шейдера.
  • Массив текстур - это массив независимых текстур, которые могут иметь разные размеры или форматы пикселей. Длина массива является константой времени компиляции.

Вы использовали texture2d_array<...>. Это текстура массива.

Для текстурного массива или массива текстур вы должны использовать array<texture2d<float, access::sample>, 3> clouds [[texture(0)]].

Для выборки из текстуры в массиве вы сначала индексируете массив, а затем вызываете функцию текстуры для этого элемента:

float4 color = clouds[params.index].sample(defaultSampler, float2(params.textureCoordinates)) * float4(1,0,0,1.0);
0
ответ дан Ken Thomases 18 January 2019 в 05:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: