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

sup*_*erg 3 direct3d11

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

gal*_*p1n 5

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

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

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

不要忘记,所有这些都Get添加了对使用完毕后需要释放的对象的引用。