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
Configuration requise
Plateforme cible | Windows |
En-tête | d3d11.h |
Bibliothèque | D3D11.lib |
Voir aussi
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour