Функция DCompositionCreateDevice2 (dcomp.h)
Создает новый объект устройства, который можно использовать для создания других объектов Microsoft DirectComposition.
Синтаксис
HRESULT DCompositionCreateDevice2(
[in, optional] IUnknown *renderingDevice,
[in] REFIID iid,
[out] void **dcompositionDevice
);
Параметры
[in, optional] renderingDevice
Необязательный указатель на устройство DirectX, используемое для создания объектов поверхности DirectComposition. Должен быть указателем на объект, реализующий интерфейсы IDXGIDevice или ID2D1Device .
[in] iid
Идентификатор извлекаемого интерфейса. Это должен быть __uuidof(IDCompositionDevice) или __uuidof(IDCompositionDesktopDevice).
[out] dcompositionDevice
Получает указатель интерфейса на созданный объект устройства. Указатель имеет тип, заданный параметром iid . Этот параметр не должен иметь значение NULL.
Возвращаемое значение
Если функция выполняется успешно, она возвращает S_OK. В противном случае возвращается код ошибки HRESULT . Список кодов ошибок см. в разделе Коды ошибок DirectComposition .
Комментарии
Объект устройства служит фабрикой для всех остальных объектов DirectComposition. Он также управляет транзакционной композицией с помощью метода IDCompositionDevice2::Commit.
Параметр renderingDevice может указывать на объект устройства DXGI, Direct3D, Direct2D или иметь значение NULL. Этот параметр влияет на поведение методов IDCompositionDevice2::CreateSurface, IDCompositionDevice2::CreateVirtualSurface и IDCompositionSurface::BeginDraw.
Если параметр renderingDevice имеет значение NULL, то возвращенное устройство DirectComposition не может напрямую создавать объекты поверхности DirectComposition. В частности, методы IDCompositionDevice2::CreateSurface и IDCompositionDevice2::CreateVirtualSurface возвращают E_INVALIDARG независимо от предоставленных параметров. Однако такой объект устройства DirectComposition по-прежнему можно использовать для косвенного создания поверхностей, если приложение создает объект фабрики surface с помощью метода IDCompositionDevice2::CreateSurfaceFactory.
Если параметр renderingDevice указывает на устройство DXGI, это устройство используется для выделения всей видеопамячи, необходимой для методов IDCompositionDevice2::CreateSurface и IDCompositionDevice2::CreateVirtualSurface. Кроме того, метод IDCompositionSurface::BeginDraw возвращает указатель интерфейса на поверхность DXGI, принадлежающую тому же устройству DXGI.
Если параметр renderingDevice указывает на объект устройства Direct2D, DirectComposition извлекает из него базовый объект устройства DXGI и использует его, как если бы этот объект устройства DXGI был передан в качестве параметра renderingDevice . Однако передача объекта Direct2D приводит к тому, что IDCompositionSurface::BeginDraw принимает __uuidof(ID2D1DeviceContext) для его параметра iid для всех объектов, созданных с помощью методов IDCompositionDevice2::CreateSurface или IDCompositionDevice2::CreateVirtualSurface. В этом случае объект контекста устройства Direct2D, возвращенный IDCompositionSurface::BeginDraw, будет принадлежать тому же устройству Direct2D, которое передается в качестве параметра renderingDevice .
Если параметр iid имеет значение __uuidof(IDCompositionDevice), то параметр dcompositionDevice получает указатель на интерфейс IDCompositionDevice версии 1, но базовым объектом является объект классического устройства версии 2. Позже приложение может получить указатель на интерфейсы IDCompositionDevice2 или IDCompositionDesktopDevice, вызвав метод QueryInterface на этом устройстве. Аналогичным образом, все объекты DirectComposition, созданные на таком устройстве, являются объектами версии 2. Например, метод IDCompositionDevice::CreateVisual возвращает интерфейс IDCompositionVisual созданному визуальному элементу, но приложение может получить указатель на интерфейс IDCompositionVisual2 с помощью метода QueryInterface. Это позволяет приложению, записанному в API DirectComposition версии 1, постепенно внедрять функции DirectComposition V2, изменяя метод создания устройства с DCompositionCreateDevice на DCompositionCreateDevice2, при этом по-прежнему запрашивая интерфейс IDCompositionDevice2. Это позволяет остаться без изменений остальной части кода, а приложение может использовать QueryInterface только в тех местах, где требуются новые функции.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 8.1 [только классические приложения] |
Минимальная версия сервера | Windows Server 2012 R2 [только классические приложения] |
Целевая платформа | Windows |
Header | dcomp.h |
Библиотека | Dcomp.lib |
DLL | Dcomp.dll |
См. также раздел
IDCompositionDesktopDevice
IDCompositionDevice2
IDCompositionDevice2::CreateSurface
IDCompositionDevice2::CreateSurfaceFactory
IDCompositionDevice2::CreateVirtualSurface
IDCompositionSurface::BeginDraw