Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Заметка
Для приложений в 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.
Связанные разделы