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

How to use Texture2DArray in HLSL DirectX11 C++

本文关键字:Texture2DArray C++ DirectX11 HLSL      更新时间:2023-10-16

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

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

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

有什么帮助吗?

您只需

在创建时设置D3D11_TEXTURE2D_DESCArraySize字段。

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

如果要传递自己的D3D11_SHADER_RESOURCE_VIEW_DESC则将ViewDimension字段设置为 D3D11_SRV_DIMENSION_TEXTURE2DARRAY ,然后填写视图描述的 Texture2DArray 字段的所有 4 个成员(MostDetailedMipMipLevelsFirstArraySliceArraySize)。

在 HLSL 中,您只需要指定:

Texture2DArray myTexture;

而不是

Texture2D myTexture;

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

如果您在创建时使用D3D11_SUBRESOURCE_DATA结构初始化纹理,则只需传递一个指向D3D11_SUBRESOURCE_DATA数组的指针,数组中的每个切片对应一个。