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 デバイスの間でリソースを共有するには、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 |
Library | D3D11.lib |