Метод ID3D11Device::OpenSharedResource (d3d11.h)
Предоставьте устройству доступ к общему ресурсу, созданному на другом устройстве.
Синтаксис
HRESULT OpenSharedResource(
[in] HANDLE hResource,
[in] REFIID ReturnedInterface,
[out, optional] void **ppResource
);
Параметры
[in] hResource
Тип: HANDLE
Дескриптор ресурса. См. примечания.
[in] ReturnedInterface
Тип: REFIID
Глобальный уникальный идентификатор (GUID) для интерфейса ресурса. См. примечания.
[out, optional] ppResource
Тип: void**
Адрес указателя на ресурс, к который мы получаем доступ.
Возвращаемое значение
Тип: HRESULT
Этот метод возвращает один из следующих кодов возврата Direct3D 11.
Комментарии
Идентификатор REFIID или GUID интерфейса ресурса можно получить с помощью макроса __uuidof(). Например, __uuidof(ID3D11Buffer) получит GUID интерфейса к ресурсу буфера.
Уникальный дескриптор ресурса получается по-разному в зависимости от типа устройства, которое изначально создало ресурс.
Для совместного использования ресурса между двумя устройствами Direct3D 11 ресурс должен быть создан с флагом D3D11_RESOURCE_MISC_SHARED , если он был создан с помощью интерфейса ID3D11Device. Если он был создан с помощью интерфейса устройства DXGI, ресурс всегда является общим.
Идентификатор REFIID или GUID интерфейса ресурса можно получить с помощью макроса __uuidof(). Например, __uuidof(ID3D11Buffer) получит GUID интерфейса к ресурсу буфера.
При совместном использовании ресурса между двумя устройствами Direct3D 10/11 уникальный дескриптор ресурса можно получить, запросив к ресурсу интерфейс IDXGIResource и вызвав Метод GetSharedHandle.
IDXGIResource* pOtherResource(NULL);
hr = pOtherDeviceResource->QueryInterface( __uuidof(IDXGIResource), (void**)&pOtherResource );
HANDLE sharedHandle;
pOtherResource->GetSharedHandle(&sharedHandle);
Единственными ресурсами, которые можно совместно использовать, являются двухd-текстуры без mipmapped.
Для совместного использования ресурса между устройством Direct3D 9 и устройством Direct3D 11 текстура должна быть создана с помощью аргумента pSharedHandlecreateTexture.
Затем общий дескриптор Direct3D 9 передается в OpenSharedResource в аргументе hResource .
В следующем коде показаны задействованные вызовы методов.
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
К текстурам, совместно используемым из D3D9 в D3D11, действуют следующие ограничения.
- Текстуры должны быть двухd
- Допускается только 1 MIP-уровень
- Использование текстуры должно быть по умолчанию
- Текстура должна быть только для записи
- Текстуры MSAA не разрешены
- Флаги привязки должны иметь SHADER_RESOURCE и RENDER_TARGET
- Разрешены только форматы R10G10B10A2_UNORM, R16G16B16A16_FLOAT и R8G8B8A8_UNORM
Требования
Целевая платформа | Windows |
Header | d3d11.h |
Библиотека | D3D11.lib |