Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Directx 如何在DX12中将多个图像像素数据上载到一个纹理中_Directx_Directx 12 - Fatal编程技术网

Directx 如何在DX12中将多个图像像素数据上载到一个纹理中

Directx 如何在DX12中将多个图像像素数据上载到一个纹理中,directx,directx-12,Directx,Directx 12,我有多个像素阵列形式的图像。我想将它们粘贴到一个大纹理中,然后渲染整个纹理。例如,我有一个汽车像素数据和一个喷气式飞机像素数据。我想在大纹理的顶部复制jet的像素数据,在大纹理的底部复制汽车的像素数据。 我的想法是创建一个大缓冲区并手动复制这些像素数据。手动意味着计算每行开始像素的偏移量,并在循环中复制行。然后将组合的像素数据提交给GPU。然而,我认为这种方法效率很低,因为CPU正在进行循环。所以我想知道有没有其他方法可以改善这一点。例如,任何D3D函数都已经使我能够高效地做类似的事情。另一方面

我有多个像素阵列形式的图像。我想将它们粘贴到一个大纹理中,然后渲染整个纹理。例如,我有一个汽车像素数据和一个喷气式飞机像素数据。我想在大纹理的顶部复制jet的像素数据,在大纹理的底部复制汽车的像素数据。
我的想法是创建一个大缓冲区并手动复制这些像素数据。手动意味着计算每行开始像素的偏移量,并在循环中复制行。然后将组合的像素数据提交给GPU。然而,我认为这种方法效率很低,因为CPU正在进行循环。所以我想知道有没有其他方法可以改善这一点。例如,任何D3D函数都已经使我能够高效地做类似的事情。另一方面,最正式/正确的方法是什么?

到目前为止,您是如何上传纹理数据的?可能来自d3dx12.h。您是否尝试实现类似于此函数的功能?您可以查看源代码-它大致执行以下操作:

  • 映射中间资源(您创建的D3D12_堆_类型_上载资源)
  • 一个
    memcpy()
    序列,用于将像素数据复制到映射的中间资源
  • 取消映射
  • 从中间资源到最终资源的GPU复制(由您创建的D3D12_堆_类型_默认资源)
  • 您应该执行类似的操作,并将所需的偏移计算添加到步骤2中,以便正确布局子图像。没有任何更“正式/正确”的方法可以做到这一点,有时您必须做一些CPU工作