Partager via


ID3D11Device::OpenSharedResource, méthode (d3d11.h)

Donnez à un appareil l’accès à une ressource partagée créée sur un autre appareil.

Syntaxe

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

Paramètres

[in] hResource

Type : HANDLE

Un handle de ressource. Consultez la section Remarques.

[in] ReturnedInterface

Type : REFIID

Identificateur global unique (GUID) pour l’interface de ressource. Consultez la section Remarques.

[out, optional] ppResource

Type : void**

Adresse d’un pointeur vers la ressource à laquelle nous accédons.

Valeur retournée

Type : HRESULT

Cette méthode retourne l’un des codes de retour Direct3D 11 suivants.

Notes

Le REFIID, ou GUID, de l’interface de la ressource peut être obtenu à l’aide de la macro __uuidof(). Par exemple, __uuidof(ID3D11Buffer) obtient le GUID de l’interface vers une ressource de mémoire tampon.

Le handle unique de la ressource est obtenu différemment selon le type d’appareil qui a créé la ressource à l’origine.

Pour partager une ressource entre deux appareils Direct3D 11, la ressource doit avoir été créée avec l’indicateur D3D11_RESOURCE_MISC_SHARED , si elle a été créée à l’aide de l’interface ID3D11Device. Si elle a été créée à l’aide d’une interface d’appareil DXGI, la ressource est toujours partagée.

Le REFIID, ou GUID, de l’interface de la ressource peut être obtenu à l’aide de la macro __uuidof(). Par exemple, __uuidof(ID3D11Buffer) obtient le GUID de l’interface vers une ressource de mémoire tampon.

Lors du partage d’une ressource entre deux appareils Direct3D 10/11, le handle unique de la ressource peut être obtenu en interrogeant la ressource pour l’interface IDXGIResource , puis en appelant GetSharedHandle.


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

Les seules ressources qui peuvent être partagées sont les textures 2D non-mipmapped.

Pour partager une ressource entre un appareil Direct3D 9 et un appareil Direct3D 11, la texture doit avoir été créée à l’aide de l’argument pSharedHandle de CreateTexture.
Le handle Direct3D 9 partagé est ensuite passé à OpenSharedResource dans l’argument hResource .

Le code suivant illustre les appels de méthode impliqués.


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   
      

Les textures partagées de D3D9 à D3D11 présentent les restrictions suivantes.

  • Les textures doivent être 2D
  • Un seul niveau de 1 mip est autorisé
  • Texture doit avoir une utilisation par défaut
  • La texture doit être en écriture uniquement
  • Les textures MSAA ne sont pas autorisées
  • Les indicateurs de liaison doivent avoir SHADER_RESOURCE et RENDER_TARGET définis
  • Seuls les formats R10G10B10A2_UNORM, R16G16B16A16_FLOAT et R8G8B8A8_UNORM sont autorisés
Si une texture partagée est mise à jour sur un appareil ID3D11DeviceContext::Flush doit être appelé sur cet appareil.

Configuration requise

   
Plateforme cible Windows
En-tête d3d11.h
Bibliothèque D3D11.lib

Voir aussi

ID3D11Device