共用方式為


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 裝置之間共用資源,紋理必須使用CreateTexturepSharedHandle引數來建立。
然後,共用的 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格式
如果在一個裝置 ID3D11DeviceCoNtext::Flush 上更新共用紋理,則必須在該裝置上呼叫。

規格需求

   
目標平台 Windows
標頭 d3d11.h
程式庫 D3D11.lib

另請參閱

ID3D11Device