Partager via


ID3D10Device ::OpenSharedResource, méthode (d3d10.h)

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

Syntaxe

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

Paramètres

[in] hResource

Type : HANDLE

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] 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 10 suivants.

Remarques

Pour partager une ressource entre deux appareils Direct3D 10, la ressource doit avoir été créée avec l’indicateur D3D10_RESOURCE_MISC_SHARED , si elle a été créée à l’aide de l’interface ID3D10Device. Si elle a été créée à l’aide de l’interface IDXGIDevice, 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(ID3D10Buffer) obtient le GUID de l’interface vers une ressource de mémoire tampon.

Lors du partage d’une ressource entre deux appareils Direct3D 10, 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 des textures non mipmappées en 2D.

Pour partager une ressource entre un appareil Direct3D 9 et un appareil Direct3D 10, 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); 
... 
pDevice10->OpenSharedResource(sharedHandle, __uuidof(ID3D10Resource), (void**)(&tempResource10)); 
tempResource10->QueryInterface(__uuidof(ID3D10Texture2D), (void**)(&pTex2D_10)); 
tempResource10->Release(); 
// now use pTex2D_10 with pDevice10   
      

Les textures partagées de D3D9 à D3D10 ont les restrictions suivantes.

  • Les textures doivent être 2D
  • Seul un niveau de 1 mip est autorisé
  • La 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 ID3D10Device ::Flush doit être appelée sur cet appareil.

Configuration requise

Condition requise Valeur
Plateforme cible Windows
En-tête d3d10.h

Voir aussi

ID3D10Device Interface