如何在HLSL DirectX11 C ++中使用Texture2DArray

时间:2013-12-21 17:40:33

标签: c++ directx shader hlsl

我只是想知道如何在HLSL中使用Texture2DArray。

我正在尝试实现一个模型加载器,其中模型具有不同的纹理量。目前我的HLSL使用尺寸为2的Texture2D(纹理和普通纹理),但由于我的模型具有不同数量的纹理,我希望使用Texture2DArray,但不知道从哪里开始。我一直试图在互联网上找到例子,但没有运气:(

我加载了编译为'ID3D11ShaderResourceView *'的纹理,所以我应该创建一个变量ID3D11ShaderResourceView **,我创建了一个纹理点数组,然后将其传递给着色器或什么?

任何帮助?

1 个答案:

答案 0 :(得分:7)

您只需在创建ArraySize时设置D3D11_TEXTURE2D_DESC字段。

一个ShaderResourceView查看整个数组,您不需要多个视图。如果您没有在创建时提供自己的D3D11_SHADER_RESOURCE_VIEW_DESC(而是传递nullptr),那么您已经设置好了。

如果您要传递自己的D3D11_SHADER_RESOURCE_VIEW_DESC,请将ViewDimension字段设置为D3D11_SRV_DIMENSION_TEXTURE2DARRAY,然后填写视图说明的Texture2DArray字段的所有4个成员({ {1}},MostDetailedMipMipLevelsFirstArraySlice)。

在HLSL中,您只需指定:

ArraySize

而不是

Texture2DArray myTexture;

当采样时,uv坐标是三维的。 x和y正常,但z是要读取的数组切片的索引。

如果您使用Texture2D myTexture;结构在创建时初始化纹理,那么您只需要将指针传递给D3D11_SUBRESOURCE_DATA的数组,每个切片对应一个数组。< / p>