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

use*_*037 4 c++ directx shader hlsl

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

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

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

有帮助吗?

Ada*_*les 7

您只需在创建时设置ArraySize字段即可D3D11_TEXTURE2D_DESC.

一个人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;

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

如果你在创建时使用D3D11_SUBRESOURCE_DATA结构初始化纹理,那么你只需要将一个指针传递给一个数组D3D11_SUBRESOURCE_DATA,一个用于数组中的每个切片.