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
Requisitos
Plataforma de Destino | Windows |
Cabeçalho | d3d11.h |
Biblioteca | D3D11.lib |