Metodo ID3D10Device::OpenSharedResource (d3d10.h)

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

Sintassi

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

Parametri

[in] hResource

Tipo: HANDLE

Handle di risorsa. Vedere la sezione Osservazioni.

[in] ReturnedInterface

Tipo: REFIID

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

[out] 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 10 seguenti.

Commenti

Per condividere una risorsa tra due dispositivi Direct3D 10, è necessario che la risorsa sia stata creata con il flag D3D10_RESOURCE_MISC_SHARED , se è stata creata usando l'interfaccia ID3D10Device. Se è stato creato usando l'interfaccia IDXGIDevice, la risorsa viene sempre condivisa.

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

Quando si condivide una risorsa tra due dispositivi Direct3D 10, è 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 10, è necessario che la trama sia 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); 
... 
pDevice10->OpenSharedResource(sharedHandle, __uuidof(ID3D10Resource), (void**)(&tempResource10)); 
tempResource10->QueryInterface(__uuidof(ID3D10Texture2D), (void**)(&pTex2D_10)); 
tempResource10->Release(); 
// now use pTex2D_10 with pDevice10   
      

Le trame condivise da D3D9 a D3D10 presentano le restrizioni seguenti.

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

Requisiti

Requisito Valore
Piattaforma di destinazione Windows
Intestazione d3d10.h

Vedi anche

Interfaccia ID3D10Device