Compartir a través de


Método ID3D10Device::OpenSharedResource (d3d10.h)

Conceda a un dispositivo acceso a un recurso compartido creado en un dispositivo Direct3d diferente.

Sintaxis

HRESULT OpenSharedResource(
  [in]  HANDLE hResource,
  [in]  REFIID ReturnedInterface,
  [out] 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] 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 10.

Comentarios

Para compartir un recurso entre dos dispositivos direct3D 10, el recurso debe haberse creado con la marca D3D10_RESOURCE_MISC_SHARED , si se creó con la interfaz ID3D10Device. Si se creó con la interfaz IDXGIDevice, el recurso siempre se comparte.

El REFIID, o GUID, de la interfaz al recurso se puede obtener mediante la macro __uuidof(). Por ejemplo, __uuidof(ID3D10Buffer) obtendrá el GUID de la interfaz en un recurso de búfer.

Al compartir un recurso entre dos dispositivos direct3D 10, se puede obtener el identificador único del recurso consultando el recurso para la interfaz IDXGIResource y, a continuación, 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 10, 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); 
... 
pDevice10->OpenSharedResource(sharedHandle, __uuidof(ID3D10Resource), (void**)(&tempResource10)); 
tempResource10->QueryInterface(__uuidof(ID3D10Texture2D), (void**)(&pTex2D_10)); 
tempResource10->Release(); 
// now use pTex2D_10 with pDevice10   
      

Las texturas que se comparten de D3D9 a D3D10 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 ID3D10Device::Flush debe llamarse a en ese dispositivo.

Requisitos

Requisito Value
Plataforma de destino Windows
Encabezado d3d10.h

Consulte también

Id3D10Device (interfaz)