有没有一种方法可以获取 ID3D11Texture2D* 对象的数组并将它们放在一个 ID3D11Texture2D* 中(具有适当的 ArraySize 值),这样我就可以在 HLSL 中使用它们的 Texture2DArray 了?
至少,在将 ArraySize 设置为大于 1 后,在创建新的 ID3D11Texture2D 对象时如何传入各个纹理?您是否需要将 SUBRESOURCE_DATA 结构数组传递给 CreateTexture2D 函数,其中每个结构都指向一个纹理?我一直在寻找这个问题的答案,但文档似乎严重缺乏。
感谢您提供的任何帮助。
最佳答案
要将现有纹理复制到纹理数组,您可以使用 CopySubresourceRegion使用下面描述的目标子资源索引。
要使用初始数据创建新的纹理数组,您可以使用 SUBRESOURCE_DATA 结构数组指定多个子资源(数组切片/mip 级别)。子资源索引定义为mip slice + array slice * mip levels
。因此,对于 2 切片 3-MIP 纹理数组,您将拥有以下子资源:
[0]: slice 0 mip 0
[1]: slice 0 mip 1
[2]: slice 0 mip 2
[3]: slice 1 mip 0
[4]: slice 1 mip 1
[5]: slice 1 mip 2
以下页面对此进行了更详细的描述:https://learn.microsoft.com/en-us/windows/win32/direct3d11/overviews-direct3d-11-resources-subresources
关于c++ - DirectX 11 将多个纹理加载到Texture2DArray中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21765386/