c++ - DirectX 11 将多个纹理加载到Texture2DArray中

标签 c++ arrays com loading directx-11

有没有一种方法可以获取 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/

相关文章:

c++ - 多边形线碰撞检测

c++ - 将文件的元素加载到 C++ 中的二维数组中

c# - 如何在 .NET C# WinService 中使用 COM 服务器(ATL、DLL 代理)?

c++ - 将 _bstr_t com 属性分配给 LPCTSTR 是否安全?

c++ - 引用成员函数?

c++ - native C++ 和 Windows 平板电脑

javascript - 将数组绑定(bind)到 AngularJS 中的对象属性时忽略虚假值

php - 如何计算 php 中的重复数组值?

delphi - 如何实现类型安全的 COM 枚举?

c++ - 包含一些 foo_subclass 元素的 vector<foo> 的内存布局