次の方法で共有


ID3D10Device::OpenSharedResource メソッド (d3d10.h)

別の Direct3d デバイスで作成された共有リソースへのアクセス権をデバイスに付与します。

構文

HRESULT OpenSharedResource(
  [in]  HANDLE hResource,
  [in]  REFIID ReturnedInterface,
  [out] void   **ppResource
);

パラメーター

[in] hResource

型: HANDLE

リソース ハンドル。 「解説」を参照してください。

[in] ReturnedInterface

種類: REFIID

リソース インターフェイスのグローバル一意識別子 (GUID)。 「解説」を参照してください。

[out] ppResource

型: void**

アクセス権を取得しているリソースへのポインターのアドレス。

戻り値

種類: HRESULT

このメソッドは、次の Direct3D 10 リターン コードのいずれかを返します

注釈

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

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

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


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

共有できるリソースは、mipmapped 以外の 2D テクスチャのみです。

Direct3D 9 デバイスと Direct3D 10 デバイスの間でリソースを共有するには、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); 
... 
pDevice10->OpenSharedResource(sharedHandle, __uuidof(ID3D10Resource), (void**)(&tempResource10)); 
tempResource10->QueryInterface(__uuidof(ID3D10Texture2D), (void**)(&pTex2D_10)); 
tempResource10->Release(); 
// now use pTex2D_10 with pDevice10   
      

D3D9 から D3D10 に共有されるテクスチャには、次の制限があります。

  • テクスチャは 2D である必要があります
  • 1 mip レベルのみが許可されます
  • テクスチャには既定の使用法が必要です
  • テクスチャは書き込み専用である必要があります
  • MSAA テクスチャは使用できません
  • バインド フラグには、SHADER_RESOURCEとRENDER_TARGETが設定されている必要があります
  • R10G10B10A2_UNORM、R16G16B16A16_FLOAT、およびR8G8B8A8_UNORM形式のみが許可されます
共有テクスチャが 1 つのデバイス ID3D10 で更新された場合、そのデバイスでDevice::Flush を呼び出す必要があります。

要件

要件
対象プラットフォーム Windows
ヘッダー d3d10.h

こちらもご覧ください

ID3D10Device インターフェイス