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
Requisiti
Requisito | Valore |
---|---|
Piattaforma di destinazione | Windows |
Intestazione | d3d10.h |