ID3D11Device::OpenSharedResource 方法 (d3d11.h)
讓裝置能夠存取在不同裝置上建立的共用資源。
語法
HRESULT OpenSharedResource(
[in] HANDLE hResource,
[in] REFIID ReturnedInterface,
[out, optional] void **ppResource
);
參數
[in] hResource
類型: HANDLE
資源控制碼。 請參閱<備註>。
[in] ReturnedInterface
類型: REFIID
資源介面的全域唯一識別碼 (GUID) 。 請參閱<備註>。
[out, optional] ppResource
類型: void**
我們取得存取權之資源的指標位址。
傳回值
類型: HRESULT
此方法會傳回下列其中一個 Direct3D 11 傳回碼。
備註
您可以使用 __uuidof () 宏來取得資源的介面 REFIID 或 GUID。 例如,__uuidof (ID3D11Buffer) 會取得緩衝區資源的介面 GUID。
資源的唯一控制碼會根據最初建立資源的裝置類型而有所不同。
若要在兩個 Direct3D 11 裝置之間共用資源,則必須使用 D3D11_RESOURCE_MISC_SHARED 旗標建立資源,如果使用 ID3D11Device 介面建立資源。 如果使用 DXGI 裝置介面建立,則資源一律會共用。
您可以使用 __uuidof () 宏來取得資源的介面 REFIID 或 GUID。 例如,__uuidof (ID3D11Buffer) 會取得緩衝區資源的介面 GUID。
在兩個 Direct3D 10/11 裝置之間共用資源時,可以藉由查詢 IDXGIResource 介面的資源,然後呼叫 GetSharedHandle來取得資源的唯一控制碼。
IDXGIResource* pOtherResource(NULL);
hr = pOtherDeviceResource->QueryInterface( __uuidof(IDXGIResource), (void**)&pOtherResource );
HANDLE sharedHandle;
pOtherResource->GetSharedHandle(&sharedHandle);
唯一可以共用的資源是 2D 非誤用紋理。
若要在 Direct3D 9 裝置與 Direct3D 11 裝置之間共用資源,紋理必須使用CreateTexture的pSharedHandle引數來建立。
然後,共用的 Direct3D 9 控制碼會傳遞至 hResource 引數中的 OpenSharedResource。
下列程式碼說明涉及的方法呼叫。
sharedHandle = NULL; // must be set to NULL to create, can use a valid handle here to open in D3D9
pDevice9->CreateTexture(..., pTex2D_9, &sharedHandle);
...
pDevice11->OpenSharedResource(sharedHandle, __uuidof(ID3D11Resource), (void**)(&tempResource11));
tempResource11->QueryInterface(__uuidof(ID3D11Texture2D), (void**)(&pTex2D_11));
tempResource11->Release();
// now use pTex2D_11 with pDevice11
從 D3D9 到 D3D11 共用的紋理有下列限制。
- 紋理必須是 2D
- 只允許 1 個 mip 層級
- 紋理必須有預設的使用方式
- 紋理只能寫入
- 不允許 MSAA 紋理
- 系結旗標必須設定SHADER_RESOURCE和RENDER_TARGET
- 只允許R10G10B10A2_UNORM、R16G16B16A16_FLOAT和R8G8B8A8_UNORM格式
規格需求
目標平台 | Windows |
標頭 | d3d11.h |
程式庫 | D3D11.lib |