在 D3D10 中,我将暂存纹理加载到我的 GPU 内存中,然后对其进行映射,以便在 CPU 上访问其纹理数据。这是在一个单独的线程上完成的,而不是我渲染的线程。我只是调用设备方法,它可以工作。
在 D3D11 中,我将暂存纹理加载到我的 GPU 上,但要访问它(即映射它),我需要使用上下文,而不是设备。不能使用即时上下文,因为即时上下文一次只能由单个线程使用。但我也不能使用延迟上下文从纹理读取到 CPU:
“如果在延迟上下文中调用 Map,则只能将 D3D11_MAP_WRITE_DISCARD、D3D11_MAP_WRITE_NO_OVERWRITE 或两者都传递给 MapType 参数。延迟上下文不支持其他 D3D11_MAP 类型的值。”
http://msdn.microsoft.com/en-us/library/ff476457.aspx
好的,那我现在该怎么办?使用纹理来存储某些数据(例如高度图)是很常见的,显然您必须能够访问该数据才能使其有用。我没有办法在 D3D11 的单独线程中执行此操作吗?