2016-11-11 197 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

相關問題