【发布时间】:2012-11-08 21:03:49
【问题描述】:
我将texture2d 设置为设备渲染目标。绘制完成后,如何直接从渲染目标读取和写入像素,然后呈现出来。
【问题讨论】:
-
您的意思是将像素读回 CPU,还是作为另一个着色器的输入?
标签: graphics textures direct3d direct3d11
我将texture2d 设置为设备渲染目标。绘制完成后,如何直接从渲染目标读取和写入像素,然后呈现出来。
【问题讨论】:
标签: graphics textures direct3d direct3d11
如果您的意图是将其用作另一个着色器的输入: - 只需确保您使用 D3D11_BIND_RENDER_TARGET 和 D3D11_BIND_SHADER_RESOURCE 创建了 texture2D。
如果您的意图是使用 C++ 作为像素数组访问 CPU 上的纹理,那么您必须做一些工作。不幸的是,由于当前的 GPU 架构,无法直接访问纹理 2D 的像素,因为这些像素实际上以特殊格式(swizzled 格式)存在于 GPU 内存潜力中。
如您所见,这肯定不是一组微不足道的操作,并且与当今 GPU 架构的优化目标背道而驰。我当然不会推荐它。
如果您最终走上了这条路,请务必阅读 GPU 内存回读带来的所有性能问题:http://msdn.microsoft.com/en-us/library/windows/desktop/bb205132(v=vs.85).aspx#Performance_Considerations
【讨论】:
RowPitch 成员而不是根据行的实际字节宽度来增加映射纹理的数据指针(D3D11_MAPPED_SUBRESOURCE)。