2013-12-21 1 views
3

Мне просто интересно, как я могу использовать Texture2DArray в HLSL.Как использовать Texture2DArray в HLSL DirectX11 C++

Я пытаюсь реализовать модельный загрузчик, где модели имеют различное количество текстур. На данный момент мой HLSL использует Texture2D с размером 2 (текстуры и нормальные текстуры), но поскольку мои модели имеют различное количество текстур, я ищу использовать Texture2DArray, но не знаю, с чего начать. Я пытался найти примеры и т. Д. В Интернете, но мне не повезло :(

Загружаю текстуры, которые скомпилированы в 'ID3D11ShaderResourceView *, поэтому я должен создать переменную ID3D11ShaderResourceView **, которую я создаю массив точек для текстур затем передать, что в шейдер или что?

Любая помощь?

ответ

6

Вам нужно только установить ArraySize поле из D3D11_TEXTURE2D_DESC при ее создании.

One ShaderResourceView просматривает весь массив, вам не нужно несколько просмотров. Если вы не предоставляете используя свой собственный D3D11_SHADER_RESOURCE_VIEW_DESC при создании (и вместо этого передавая nullptr), вы уже настроены.

Если вы передаете свой собственный D3D11_SHADER_RESOURCE_VIEW_DESC затем установите ViewDimension поле для D3D11_SRV_DIMENSION_TEXTURE2DARRAY, а затем заполнить все 4 членов Texture2DArray поля описания вида (MostDetailedMip, MipLevels, FirstArraySlice, ArraySize).

В HLSL вам просто нужно указать:

Texture2DArray myTexture;

вместо

Texture2D myTexture;

и когда выборки, координаты уф являются трехмерными. x и y являются нормальными, но z - это индекс среза массива, который вы хотите прочитать.

Если вы инициализируете свои текстуры при создании с использованием структуры D3D11_SUBRESOURCE_DATA, вам просто нужно передать указатель на массив из D3D11_SUBRESOURCE_DATA, по одному для каждого фрагмента в массиве.

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

  • Нет связанных вопросов^_^