在其他D3D11设备上复制Direct3D11纹理

时间:2016-11-11 13:00:48

标签: direct3d11

我有ID3D11Texture2D的句柄,但无法访问它的ID3D11DeviceContext或ID3D11Device。我想将该纹理复制到其他ID3D11Device上的其他纹理。不使用任何共享标志创建纹理。如果我尝试使用ID3D11DeviceContext :: CopyResource进行复制,我会收到警告“D3D11 CORRUPTION参数与设备不匹配”。如何复制纹理或其内容?我想这是可能的,因为例如OpenVR API仅使用没有任何上下文的纹理句柄。

1 个答案:

答案 0 :(得分:4)

如果未使用共享标志创建纹理,则无法在两个设备之间使用它。

但你有纹理对象,即ID3D11DeviceChild,只需访问ID3D11DeviceChild::GetDevice即可检索设备,扩展名为ID3D11Device::GetImmediateContext

现在您可以访问设备和上下文了,您可以在原始设备或您自己的设备上创建一个带有共享标志D3D11_RESOURCE_MISC_SHARED的额外纹理,并使用{{1}检索另一个上的对象}}。最后使用ID3D11Device::OpenSharedResource

将原始纹理复制到新对象

不要忘记所有这些CopyResource添加对完成后需要释放的对象的引用。