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


Объекты точечных рисунков

Примечание

Для приложений на Windows 10 рекомендуется использовать API Windows.UI.Composition вместо DirectComposition. Дополнительные сведения см. в статье Модернизация классического приложения с помощью визуального слоя.

Microsoft DirectComposition — это подсистема создания точечных изображений. Это позволяет разработчикам приложений объединять несколько растровых изображений и управлять ими различными способами для получения интересных визуальных эффектов и анимаций в пользовательском интерфейсе приложения. В этом разделе описываются типы точечных изображений, поддерживаемые DirectComposition.

Содержимое растрового изображения

Приложения предоставляют DirectComposition с содержимым растрового рисунка для создания и анимации путем создания визуальных объектов и последующего задания свойства Content этих объектов. DirectComposition не предлагает никаких служб растеризации. Приложение должно использовать какую-либо другую программную библиотеку или библиотеку растеризации с аппаратным ускорением, например Direct2D или Direct3D , для заполнения точечных изображений, которые должны быть составлены. После создания DirectComposition передает содержимое точечных рисунков в диспетчер окон рабочего стола (DWM) для отрисовки на экране.

Поддерживаемые типы содержимого растровых рисунков Microsoft DirectComposition поддерживает следующие типы растровых изображений:

Растровые изображения в видеопамях

Растровое изображение видеопамяти растеризуется на оборудовании с помощью методов Microsoft DirectX (включая модель взаимодействия DX-to-GDI). Он поддерживается общими поверхностями между процессами, которые видны вызывающему приложению и DirectComposition. Растровое изображение видеопамять не подлежит разрыву, так как приложение может считывать только с поверхностей, с помощью текстур DirectComposition.

Содержимое видео

Приложения могут использовать DirectComposition для создания видеокадров, использующих цепочки буферов без окон DirectX, привязанные к поверхности DirectComposition. По сути, DirectComposition рассматривает видеосодержимое как последовательность растровых изображений. DirectComposition не предоставляет средства представления видеокадров.

DirectComposition поддерживает цепочки буферов без окон DirectX, то есть цепочки буферов, которые не привязаны к определенному окну, и позволяет двум разным приложениям совместно использовать цепочки буферов без окон в пределах процесса. Совместное использование цепочек буферов без окон позволяет реализовать сценарии видео, в которых цепочка буферов создается в одном процессе и используется с DirectComposition во втором процессе. Цепочки буферов без окон создаются с помощью метода IDXGIFactory2::CreateSwapChainForCompositionSurface .

Дополнительные сведения о цепочках буферов DirectX см. в статье Обзор DXGI.

Стереосодержимые

По сути, цепочка буферов стерео состоит из поверхностей Инфраструктуры графики Microsoft DirectX (DXGI), которые представляют левый и правый каналы для стерео трехмерного содержимого. Если цепочка буферов стерео используется в качестве ресурса растрового изображения для визуального элемента, DirectComposition создает стерео. Все не стереофоническое содержимое (моносодержимое) считается одинаковым содержимым левого и правого каналов; то есть для обоих каналов используется одно и то же растровое содержимое. DirectComposition создает все левое и правое содержимое отдельно. Если устройство отображения не поддерживает стерео, DirectComposition обрабатывает левый или правый стереоканал (в зависимости от приложения) как моносодержимое и создает только эти данные для ресурса растрового изображения.

DirectComposition не поддерживает создание стереосодержимого или управление ими и не может повысить уровень цепочки буферов моно до стереопары. Приложение должно выполнить эти задачи перед представлением стереосодержимого DirectX в DirectComposition. Кроме того, приложение должно предоставлять смещения левого и правого каналов для восприятия глубины; DirectComposition не может настроить смещение левого и правого каналов, чтобы изменить воспринимаемую глубину стереосодержимого DirectX.

Стереосодержимое DirectX создается и сохраняется в DWM при наличии оборудования, поддерживающего стерео.

Точечные изображения окна

"Точечный рисунок окна" не является реальным растровым изображением, а является заполнителем, который DirectComposition заменяет в режиме реального времени растеризацией многоуровневых окон верхнего уровня или дочерних окон. Растровое изображение окна похоже на эскиз DWM, за исключением того, что эскиз может содержать вклады из многих окон, например принадлежащих не дочерних окон, тогда как растровый рисунок окна DirectComposition всегда представляет только одно окно и его дочерние элементы.

Так как DirectComposition имеет доступ к поверхностям перенаправления всех окон и всех визуальных деревьев, он может повторно использовать содержимое одного окна в нескольких визуальных деревьях. Окно должно быть слоистым, так как неслойное окно не имеет выделенной поверхности перенаправления и, следовательно, его растеризация не всегда доступна для DirectComposition.

Чтобы использовать точечный рисунок окна, приложение связывает визуальный элемент с дескриптором окна (HWND). После этого DirectComposition повторно создает визуальный элемент при каждом изменении содержимого окна, в том числе при изменении содержимого в результате изменений деревьев визуальных элементов, связанных с окном. Другими словами, как и эскизы DWM, точечные изображения окна DirectComposition являются "динамическими".

Связывание содержимого растрового изображения с визуальным элементом

Для всех трех типов растровых рисунков приложение может связать одно и то же растровое изображение с несколькими визуальными элементами. Это означает, что одно выделение памяти можно использовать для отображения одного и того же содержимого несколько раз.

Альфа-канал

Все растровые изображения имеют формат 32 бита на пиксель (BPP), который включает восемь битов для прозрачности каждого пикселя. Однако приложение может указать, как DirectComposition должен использовать альфа-канал. В частности, DirectComposition может учитывать альфа-канал или вообще игнорировать альфа-канал. В этом случае растровое изображение считается полностью непрозрачным.

Дополнительный альфа-режим игнорирует альфа-канал, но рассматривает красные, зеленые и синие значения как альфа-значения по каналу вместо нормальной интерпретации этих каналов как интенсивности цвета. Этот режим полезен для отрисовки ClearType, для которой требуются сведения о области покрытия в субпиксельном режиме. Чтобы использовать альфа-режим для каждого канала, приложение должно сначала использовать Direct2D, а DirectWrite записывать данные покрытия в виде вложенных пикселей в точечный рисунок. Затем приложение должно задать правильный альфа-режим и указать цвет текста при связывании растрового изображения с визуальным элементом. DirectComposition смешивает цвет текста с данными покрытия, что приводит к наложению ClearType в фоновом режиме.

В ситуациях, когда алгоритм ClearType неприменим, например, если растровое изображение не выровнено по пикселям и по оси или если его необходимо отрисовать на промежуточной поверхности, DirectComposition может использовать данные покрытия вложенных пикселей в растровом рисунке, чтобы создать растрирование в оттенках серого, вместо этого автоматически и без дополнительных затрат.

Дополнительные сведения см. в описании параметра alphaMode функции IDCompositionDevice::CreateSurface или IDCompositionDevice::CreateVirtualSurface .

Основные понятия DirectComposition