Compartilhar via


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

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

Sintaxe

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

Tipo: void**

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

Retornar valor

Tipo: HRESULT

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

Comentários

Para compartilhar um recurso entre dois dispositivos Direct3D 10, o recurso deve ter sido criado com o sinalizador D3D10_RESOURCE_MISC_SHARED , se ele foi criado usando a interface ID3D10Device. Se ele tiver sido criado usando a interface IDXGIDevice, o recurso será sempre compartilhado.

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

Ao compartilhar um recurso entre dois dispositivos Direct3D 10, 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 10, 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); 
... 
pDevice10->OpenSharedResource(sharedHandle, __uuidof(ID3D10Resource), (void**)(&tempResource10)); 
tempResource10->QueryInterface(__uuidof(ID3D10Texture2D), (void**)(&pTex2D_10)); 
tempResource10->Release(); 
// now use pTex2D_10 with pDevice10   
      

As texturas que estão sendo compartilhadas de D3D9 a D3D10 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 ID3D10Device::Flush deverá ser chamada nesse dispositivo.

Requisitos

Requisito Valor
Plataforma de Destino Windows
Cabeçalho d3d10.h

Confira também

ID3D10Device Interface