Функция DCompositionCreateDevice (dcomp.h)
Создает новый объект устройства, который можно использовать для создания других объектов Microsoft DirectComposition.
Синтаксис
HRESULT DCompositionCreateDevice(
[in] IDXGIDevice *dxgiDevice,
[in] REFIID iid,
[out] void **dcompositionDevice
);
Параметры
[in] dxgiDevice
Тип: IDXGIDevice*
Устройство DXGI, используемое для создания объектов поверхности DirectComposition.
[in] iid
Тип: REFIID
Идентификатор извлекаемого интерфейса.
[out] dcompositionDevice
Тип: void**
Получает указатель интерфейса на только что созданный объект устройства. Указатель имеет тип, заданный параметром iid . Этот параметр не должен иметь значение NULL.
Возвращаемое значение
Тип: HRESULT
Если функция завершается успешно, она возвращает S_OK. В противном случае возвращается код ошибки HRESULT . Список кодов ошибок см. в разделе Коды ошибок DirectComposition .
Комментарии
Объект устройства служит фабрикой для всех остальных объектов DirectComposition. Он также управляет транзакционной композицией с помощью метода IDCompositionDevice::Commit .
Устройство DXGI, указанное dxgiDevice , используется для создания всех объектов поверхности DirectComposition. В частности, метод IDCompositionSurface::BeginDraw возвращает указатель интерфейса на поверхность DXGI, которая принадлежит устройству, указанному параметром dxgiDevice .
При создании устройства DXGI разработчики должны указать флаг D3D11_CREATE_DEVICE BGRA_SUPPORT или D3D10_CREATE_DEVICE_BGRA_SUPPORT для взаимодействия Direct2D с ресурсами Microsoft Direct3D.
Параметр iid должен иметь значение __uuidof(IDCompositionDevice)
, а параметр dcompositionDevice получает указатель на интерфейс IDCompositionDevice .
Примеры
В следующем примере показано, как создать объект устройства при инициализации объектов DirectComposition.
#include <dcomp.h>
#include <d3d11.h>
HRESULT InitializeDirectCompositionDevice(HWND hwndTarget,
ID3D11Device **ppD3D11Device, IDCompositionDevice **ppDevice,
IDCompositionTarget **ppCompTarget)
{
HRESULT hr = S_OK;
D3D_FEATURE_LEVEL featureLevelSupported;
IDXGIDevice *pDXGIDevice = nullptr;
// Verify that the arguments are valid.
if (hwndTarget == NULL || ppD3D11Device == nullptr || ppDevice == nullptr ||
ppCompTarget == nullptr)
{
return E_INVALIDARG;
}
// Create the D3D device object. Note that the
// D3D11_CREATE_DEVICE_BGRA_SUPPORT flag is needed for rendering
// on surfaces using Direct2D.
hr = D3D11CreateDevice(
nullptr,
D3D_DRIVER_TYPE_HARDWARE,
NULL,
D3D11_CREATE_DEVICE_BGRA_SUPPORT, // needed for rendering on surfaces using Direct2D
NULL,
0,
D3D11_SDK_VERSION,
ppD3D11Device,
&featureLevelSupported,
NULL);
if (SUCCEEDED(hr))
{
// Create the DXGI device used to create bitmap surfaces.
hr = (*ppD3D11Device)->QueryInterface(&pDXGIDevice);
}
if (SUCCEEDED(hr))
{
// Create the DirectComposition device object.
hr = DCompositionCreateDevice(pDXGIDevice, __uuidof(IDCompositionDevice),
reinterpret_cast<void **>(ppDevice));
}
if (SUCCEEDED(hr))
{
// Bind the DirectComposition device to the target window.
hr = (*ppDevice)->CreateTargetForHwnd(hwndTarget, TRUE, ppCompTarget);
}
return hr;
}
Требования
Минимальная версия клиента | Windows 8 [только классические приложения] |
Минимальная версия сервера | Windows Server 2012 [только классические приложения] |
Целевая платформа | Windows |
Header | dcomp.h |
Библиотека | Dcomp.lib |
DLL | Dcomp.dll |