我有ID3D11Texture2D的句柄,但无法访问它的ID3D11DeviceContext或ID3D11Device。我想将该纹理复制到其他ID3D11Device上的其他纹理。不使用任何共享标志创建纹理。如果我尝试使用ID3D11DeviceContext :: CopyResource进行复制,我会收到警告“D3D11 CORRUPTION参数与设备不匹配”。如何复制纹理或其内容?我想这是可能的,因为例如OpenVR API仅使用没有任何上下文的纹理句柄。
答案 0 :(得分:4)
如果未使用共享标志创建纹理,则无法在两个设备之间使用它。
但你有纹理对象,即ID3D11DeviceChild
,只需访问ID3D11DeviceChild::GetDevice
即可检索设备,扩展名为ID3D11Device::GetImmediateContext
现在您可以访问设备和上下文了,您可以在原始设备或您自己的设备上创建一个带有共享标志D3D11_RESOURCE_MISC_SHARED
的额外纹理,并使用{{1}检索另一个上的对象}}。最后使用ID3D11Device::OpenSharedResource
不要忘记所有这些CopyResource
添加对完成后需要释放的对象的引用。