2016-11-11 198 views
1

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

+0

如果你不使用共享,你必须通过CPU内存复制它,这将是非常缓慢。 –

+0

@ChuckWalbourn复制纹理​​到CPU我需要先将它复制到分段纹理中?要做到这一点,我需要设备环境,我没有? – superg

+0

如果没有直接的设备上下文,则不能执行任何复制。 –

回答

2

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

但你有纹理对象,这是一个ID3D11DeviceChild,这是足以让访问ID3D11DeviceChild::GetDevice检索设备,并通过扩展ID3D11Device::GetImmediateContext

现在,您可以访问设备和上下文,你可以使用原始设备上的共享标志D3D11_RESOURCE_MISC_SHARED或您自己的创建额外纹理,并使用ID3D11Device::OpenSharedResource检索另一个上的对象。最后将原始纹理复制到新对象中CopyResource

不要忘记,所有这些文章Get都会在您完成这些操作后,添加对需要释放的对象的引用。

+1

工程就像一个魅力,完美地解决我的问题。非常感谢! – superg

相关问题