Método ID3D11Device::OpenSharedResource (d3d11.h)
Conceda a un dispositivo acceso a un recurso compartido creado en otro dispositivo.
Sintaxis
HRESULT OpenSharedResource(
[in] HANDLE hResource,
[in] REFIID ReturnedInterface,
[out, optional] void **ppResource
);
Parámetros
[in] hResource
Tipo: HANDLE
Identificador de recursos. Vea Notas.
[in] ReturnedInterface
Tipo: REFIID
Identificador único global (GUID) de la interfaz de recursos. Vea Notas.
[out, optional] ppResource
Tipo: void**
Dirección de un puntero al recurso al que estamos obteniendo acceso.
Valor devuelto
Tipo: HRESULT
Este método devuelve uno de los siguientes códigos de retorno de Direct3D 11.
Comentarios
El REFIID, o GUID, de la interfaz al recurso se puede obtener mediante la macro __uuidof(). Por ejemplo, __uuidof(ID3D11Buffer) obtendrá el GUID de la interfaz en un recurso de búfer.
El identificador único del recurso se obtiene de forma diferente según el tipo de dispositivo que creó originalmente el recurso.
Para compartir un recurso entre dos dispositivos direct3D 11, el recurso debe haberse creado con la marca D3D11_RESOURCE_MISC_SHARED , si se creó con la interfaz ID3D11Device. Si se creó con una interfaz de dispositivo DXGI, el recurso siempre se comparte.
El REFIID, o GUID, de la interfaz al recurso se puede obtener mediante la macro __uuidof(). Por ejemplo, __uuidof(ID3D11Buffer) obtendrá el GUID de la interfaz en un recurso de búfer.
Al compartir un recurso entre dos dispositivos Direct3D 10/11, se puede obtener el identificador único del recurso consultando el recurso para la interfaz IDXGIResource y llamando a GetSharedHandle.
IDXGIResource* pOtherResource(NULL);
hr = pOtherDeviceResource->QueryInterface( __uuidof(IDXGIResource), (void**)&pOtherResource );
HANDLE sharedHandle;
pOtherResource->GetSharedHandle(&sharedHandle);
Los únicos recursos que se pueden compartir son texturas no mipmapped 2D.
Para compartir un recurso entre un dispositivo Direct3D 9 y un dispositivo Direct3D 11, la textura debe haberse creado con el argumento pSharedHandle de CreateTexture.
El identificador compartido de Direct3D 9 se pasa a OpenSharedResource en el argumento hResource .
En el código siguiente se muestran las llamadas al método implicadas.
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
Las texturas que se comparten de D3D9 a D3D11 tienen las restricciones siguientes.
- Las texturas deben ser 2D
- Solo se permite un nivel mip
- La textura debe tener un uso predeterminado
- La textura debe ser de solo escritura
- No se permiten texturas MSAA
- Las marcas de enlace deben tener SHADER_RESOURCE y RENDER_TARGET establecer
- Solo se permiten los formatos de R10G10B10A2_UNORM, R16G16B16A16_FLOAT y R8G8B8A8_UNORM
Requisitos
Plataforma de destino | Windows |
Encabezado | d3d11.h |
Library | D3D11.lib |