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
Configuration requise
Condition requise | Valeur |
---|---|
Plateforme cible | Windows |
En-tête | d3d10.h |