在其他 D3D11 设备上复制 Direct3D11 纹理
Copying Direct3D11 texture on other D3D11 device
我有 ID3D11Texture2D 的句柄,但无法访问它的 ID3D11DeviceContext 或 ID3D11Device。我想将该纹理复制到其他 ID3D11Device 上的其他纹理。纹理不是使用任何共享标志创建的。如果我尝试使用 ID3D11DeviceContext::CopyResource 进行复制,我会收到警告 "D3D11 CORRUPTION parameter does not match device"。如何复制纹理或其内容?我想这是可能的,因为例如 OpenVR API 只使用没有任何上下文的纹理句柄。
如果纹理不是使用共享标志创建的,则不能在两个设备之间使用它。
但是你有纹理对象,它是一个 ID3D11DeviceChild
,足以访问 ID3D11DeviceChild::GetDevice
以检索设备并扩展 ID3D11Device::GetImmediateContext
现在您可以访问设备和上下文,您可以在原始设备或您自己的设备上使用共享标志 D3D11_RESOURCE_MISC_SHARED
创建一个额外的纹理,并使用 ID3D11Device::OpenSharedResource
。最后使用 CopyResource
将原始纹理复制到新对象
不要忘记所有这些 Get
添加对完成后需要释放的对象的引用。
我有 ID3D11Texture2D 的句柄,但无法访问它的 ID3D11DeviceContext 或 ID3D11Device。我想将该纹理复制到其他 ID3D11Device 上的其他纹理。纹理不是使用任何共享标志创建的。如果我尝试使用 ID3D11DeviceContext::CopyResource 进行复制,我会收到警告 "D3D11 CORRUPTION parameter does not match device"。如何复制纹理或其内容?我想这是可能的,因为例如 OpenVR API 只使用没有任何上下文的纹理句柄。
如果纹理不是使用共享标志创建的,则不能在两个设备之间使用它。
但是你有纹理对象,它是一个 ID3D11DeviceChild
,足以访问 ID3D11DeviceChild::GetDevice
以检索设备并扩展 ID3D11Device::GetImmediateContext
现在您可以访问设备和上下文,您可以在原始设备或您自己的设备上使用共享标志 D3D11_RESOURCE_MISC_SHARED
创建一个额外的纹理,并使用 ID3D11Device::OpenSharedResource
。最后使用 CopyResource
不要忘记所有这些 Get
添加对完成后需要释放的对象的引用。