次の方法で共有


ID3D11Device::OpenSharedResource

デバイス上に作成した共有リソースに他のデバイスからアクセスできるようにします。

HRESULT 
OpenSharedResource(
  HANDLE hResource,
  REFIID ReturnedInterface,
  void **ppResource
);

パラメータ

  • hResource
    リソース ハンドルです。「解説」を参照してください。
  • ReturnedInterface
    リソース インターフェイスのグローバル一意識別子 (GUID) です。「解説」を参照してください。
  • ppResource
    アクセスを取得するリソースへのポインターのアドレスです。

戻り値

このメソッドは、「Direct3D 11 のリターン コード」のいずれかを返します。

解説 

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

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

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

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

Direct3D 10 と Direct3D 11 の 2 つの デバイス間でリソースを共有している場合、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 つのみです。
  • テクスチャーには既定の使用法があることが必要です。
  • テクスチャーは書き込み専用にする必要があります
  • MSAA テクスチャーは使用できません
  • バインド フラグには、SHADER_RESOURCE および RENDER_TARGET が設定されている必要があります
  • R10G10B10A2_UNORM、R16G16B16A16_FLOAT、および R8G8B8A8_UNORM の各フォーマットのみが使用できます

共有しているテクスチャーを共有元のいずれかのデバイスで更新する場合、そのデバイスで ID3D11DeviceContext::Flush を呼び出す必要があります。

要件

ヘッダー: D3D11.h 宣言

ライブラリ: D3D11.lib 内容

関連項目

ID3D11Device