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
Si se actualiza una textura compartida en un dispositivo ID3D11DeviceContext::Flush debe llamarse a en ese dispositivo.

Requisitos

   
Plataforma de destino Windows
Encabezado d3d11.h
Library D3D11.lib

Consulte también

ID3D11Device