次の方法で共有


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 リターン コードを返します

解説

リソースへのインターフェイスの REFIID (GUID) は、__uuidof() マクロを使用して取得できます。 たとえば、__uuidof(ID3D11Buffer) はインターフェイスの GUID をバッファー リソースに取得します。

リソースの一意のハンドルは、最初にリソースを作成したデバイスの種類によって異なる方法で取得されます。

2 つの Direct3D 11 デバイス間でリソースを共有するには、リソースが ID3D11Device インターフェイスを使用して作成された場合は、 D3D11_RESOURCE_MISC_SHARED フラグを使用して作成されている必要があります。 DXGI デバイス インターフェイスを使用して作成された場合、リソースは常に共有されます。

リソースへのインターフェイスの REFIID (GUID) は、__uuidof() マクロを使用して取得できます。 たとえば、__uuidof(ID3D11Buffer) はインターフェイスの GUID をバッファー リソースに取得します。

2 つの Direct3D 10/11 デバイス間でリソースを共有する場合、 IDXGIResource インターフェイスのリソースに対してクエリを実行し、 GetSharedHandle を呼び出すことで、リソースの一意のハンドルを取得できます。


IDXGIResource* pOtherResource(NULL);
hr = pOtherDeviceResource->QueryInterface( __uuidof(IDXGIResource), (void**)&pOtherResource );
HANDLE sharedHandle;
pOtherResource->GetSharedHandle(&sharedHandle);
      

共有できるリソースは、mipmapped 以外の 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形式のみが許可されます
共有テクスチャが 1 つのデバイス ID3D11DeviceContext::Flush で更新された場合は、そのデバイスでを呼び出す必要があります。

必要条件

   
対象プラットフォーム Windows
ヘッダー d3d11.h
Library D3D11.lib

関連項目

ID3D11Device