Método ID3D11Device::OpenSharedResource (d3d11.h)

Dê a um dispositivo acesso a um recurso compartilhado criado em um dispositivo diferente.

Sintaxe

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

Parâmetros

[in] hResource

Tipo: HANDLE

Um identificador de recurso. Consulte Observações.

[in] ReturnedInterface

Tipo: REFIID

O GUID (identificador global exclusivo) para a interface de recurso. Consulte Observações.

[out, optional] ppResource

Tipo: void**

Endereço de um ponteiro para o recurso ao qual estamos obtendo acesso.

Valor retornado

Tipo: HRESULT

Esse método retorna um dos seguintes códigos de retorno do Direct3D 11.

Comentários

O REFIID, ou GUID, da interface para o recurso pode ser obtido usando a macro __uuidof(). Por exemplo, __uuidof(ID3D11Buffer) obterá o GUID da interface para um recurso de buffer.

O identificador exclusivo do recurso é obtido de forma diferente dependendo do tipo de dispositivo que originalmente criou o recurso.

Para compartilhar um recurso entre dois dispositivos Direct3D 11, o recurso deve ter sido criado com o sinalizador D3D11_RESOURCE_MISC_SHARED , se ele foi criado usando a interface ID3D11Device. Se ele tiver sido criado usando uma interface de dispositivo DXGI, o recurso será sempre compartilhado.

O REFIID, ou GUID, da interface para o recurso pode ser obtido usando a macro __uuidof(). Por exemplo, __uuidof(ID3D11Buffer) obterá o GUID da interface para um recurso de buffer.

Ao compartilhar um recurso entre dois dispositivos Direct3D 10/11, o identificador exclusivo do recurso pode ser obtido consultando o recurso para a interface IDXGIResource e chamando GetSharedHandle.


IDXGIResource* pOtherResource(NULL);
hr = pOtherDeviceResource->QueryInterface( __uuidof(IDXGIResource), (void**)&pOtherResource );
HANDLE sharedHandle;
pOtherResource->GetSharedHandle(&sharedHandle);
      

Os únicos recursos que podem ser compartilhados são texturas 2D não mipmapped.

Para compartilhar um recurso entre um dispositivo Direct3D 9 e um dispositivo Direct3D 11, a textura deve ter sido criada usando o argumento pSharedHandle de CreateTexture.
O identificador compartilhado do Direct3D 9 é então passado para OpenSharedResource no argumento hResource .

O código a seguir ilustra as chamadas de método envolvidas.


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   
      

As texturas que estão sendo compartilhadas de D3D9 a D3D11 têm as seguintes restrições.

  • Texturas devem ser 2D
  • Somente 1 nível de mip é permitido
  • A textura deve ter o uso padrão
  • A textura deve ser somente gravação
  • Texturas MSAA não são permitidas
  • Os sinalizadores de associação devem ter SHADER_RESOURCE e RENDER_TARGET definidos
  • Somente formatos R10G10B10A2_UNORM, R16G16B16A16_FLOAT e R8G8B8A8_UNORM são permitidos
Se uma textura compartilhada for atualizada em um dispositivo ID3D11DeviceContext::Flush deverá ser chamada nesse dispositivo.

Requisitos

   
Plataforma de Destino Windows
Cabeçalho d3d11.h
Biblioteca D3D11.lib

Confira também

ID3D11Device