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

6

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

我正在尝试实现一个模型加载器,在这个模型加载器中,模型拥有不同数量的纹理。目前,我的HLSL使用大小为2的Texture2D(纹理和法线贴图),但由于我的模型具有不同数量的纹理,因此我希望使用Texture2DArray,但我不知道从哪里开始。我一直在尝试在互联网上找到示例之类的东西,但是没有任何运气:(

我加载的纹理被编译为“ID3D11ShaderResourceView*”,所以我应该创建一个变量“ID3D11ShaderResourceView **”,创建一个指向纹理的数组,然后将其传递给着色器吗?

需要任何帮助吗?

1个回答

10
创建 D3D11_TEXTURE2D_DESC 时,只需设置 ArraySize 字段。
一个 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 数组的指针。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接