Поделиться через


Функция 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

См. также

Функции