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
Requisitos
Requisito | Valor |
---|---|
Plataforma de Destino | Windows |
Cabeçalho | d3d10.h |