Condividi tramite


Metodo ID3D11Device::OpenSharedResource (d3d11.h)

Concedere a un dispositivo l'accesso a una risorsa condivisa creata in un dispositivo diverso.

Sintassi

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

Parametri

[in] hResource

Tipo: HANDLE

Handle di risorse. Vedere la sezione Osservazioni.

[in] ReturnedInterface

Tipo: REFIID

Identificatore univoco globale (GUID) per l'interfaccia della risorsa. Vedere la sezione Osservazioni.

[out, optional] ppResource

Tipo: void**

Indirizzo di un puntatore alla risorsa a cui si ottiene l'accesso.

Valore restituito

Tipo: HRESULT

Questo metodo restituisce uno dei codici restituiti Direct3D 11 seguenti.

Commenti

È possibile ottenere il GUID REFIID o il GUID dell'interfaccia alla risorsa usando la macro __uuidof(). Ad esempio, __uuidof(ID3D11Buffer) otterrà il GUID dell'interfaccia in una risorsa buffer.

L'handle univoco della risorsa viene ottenuto in modo diverso a seconda del tipo di dispositivo che originariamente ha creato la risorsa.

Per condividere una risorsa tra due dispositivi Direct3D 11, la risorsa deve essere stata creata con il flag di D3D11_RESOURCE_MISC_SHARED , se è stata creata usando l'interfaccia ID3D11Device. Se è stato creato usando un'interfaccia del dispositivo DXGI, la risorsa viene sempre condivisa.

È possibile ottenere il GUID REFIID o il GUID dell'interfaccia alla risorsa usando la macro __uuidof(). Ad esempio, __uuidof(ID3D11Buffer) otterrà il GUID dell'interfaccia in una risorsa buffer.

Quando si condivide una risorsa tra due dispositivi Direct3D 10/11, è possibile ottenere l'handle univoco della risorsa eseguendo una query sulla risorsa per l'interfaccia IDXGIResource e quindi chiamando GetSharedHandle.


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

Le uniche risorse che possono essere condivise sono trame non mipmapped 2D.

Per condividere una risorsa tra un dispositivo Direct3D 9 e un dispositivo Direct3D 11, la trama deve essere stata creata usando l'argomento pSharedHandle di CreateTexture.
L'handle Direct3D 9 condiviso viene quindi passato a OpenSharedResource nell'argomento hResource .

Il codice seguente illustra le chiamate al metodo coinvolte.


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   
      

Le trame condivise da D3D9 a D3D11 hanno le restrizioni seguenti.

  • Le trame devono essere 2D
  • È consentito solo 1 livello mip
  • La trama deve avere un utilizzo predefinito
  • La trama deve essere scritta solo
  • Le trame MSAA non sono consentite
  • I flag di associazione devono avere SHADER_RESOURCE e RENDER_TARGET set
  • Sono consentiti solo R10G10B10A2_UNORM, R16G16B16A16_FLOAT e formati di R8G8B8A8_UNORM
Se una trama condivisa viene aggiornata in un dispositivo ID3D11DeviceContext::Flush deve essere chiamato nel dispositivo.

Requisiti

   
Piattaforma di destinazione Windows
Intestazione d3d11.h
Libreria D3D11.lib

Vedi anche

ID3D11Device