stringtranslate.com

Диспетчер окон рабочего стола

Диспетчер окон рабочего стола ( DWM , ранее Desktop Compositing Engine или DCE ) — это менеджер окон композитинга в Microsoft Windows, начиная с Windows Vista , который позволяет использовать аппаратное ускорение для визуализации графического пользовательского интерфейса Windows.

Первоначально он был создан для реализации некоторых частей нового пользовательского интерфейса « Windows Aero », который позволял использовать такие эффекты, как прозрачность, переключение 3D-окна и многое другое. Он также включен в состав Windows Server 2008 , но требует установки функции «Возможности рабочего стола» и совместимых графических драйверов. [1]

Архитектура

Диспетчер окон рабочего стола — это композитный оконный менеджер , что означает, что каждая программа имеет буфер, в который она записывает данные; Затем DWM объединяет буфер каждой программы в окончательное изображение. Для сравнения, стековый оконный менеджер в Windows XP и более ранних версиях (а также в Windows Vista и Windows 7 с отключенной Windows Aero) включает один буфер дисплея, в который все программы записывают данные.

DWM работает по-разному в зависимости от операционной системы (Windows 7 или Windows Vista) и версии используемых графических драйверов ( WDDM 1.0 или 1.1). В Windows 7 и с драйверами WDDM 1.1 DWM записывает в видеопамять только буфер программы, даже если это программа интерфейса графического устройства (GDI). Это связано с тем, что Windows 7 поддерживает (ограниченное) аппаратное ускорение для GDI [2] и при этом не требуется хранить копию буфера в системной оперативной памяти, чтобы ЦП мог писать в него.

Поскольку композитор имеет доступ к графике всех приложений, он легко позволяет создавать визуальные эффекты, объединяющие визуальные эффекты из нескольких приложений, например прозрачность (которая была удалена в Windows 8). DWM использует DirectX для выполнения функций компоновки и рендеринга в графическом процессоре, освобождая центральный процессор от задачи управления рендерингом из внеэкранных буферов на дисплей. Однако это не влияет на отображение приложений во внеэкранных буферах — в зависимости от используемых для этого технологий это все равно может быть связано с нагрузкой на процессор. Методы рендеринга, не зависящие от DWM, такие как GDI , перенаправляются в буферы путем рендеринга пользовательского интерфейса (UI) в виде растровых изображений . Технологии рендеринга с поддержкой DWM, такие как WPF, напрямую делают внутренние структуры данных доступными в формате, совместимом с DWM. Содержимое окна в буферах затем преобразуется в текстуры DirectX.

Сам рабочий стол представляет собой полноэкранную поверхность Direct3D с окнами, представленными в виде сетки, состоящей из двух соседних (и взаимно перевернутых) треугольников, которые преобразуются в двухмерный прямоугольник. Текстура, представляющая хром пользовательского интерфейса, затем отображается на эти прямоугольники. Переходы окон реализованы как преобразования сеток с использованием шейдерных программ. [3] В Windows Vista переходы ограничены набором встроенных шейдеров, реализующих преобразования. Грег Шехтер, разработчик из Microsoft, предположил, что разработчикам и пользователям может быть предоставлена ​​возможность подключать свои собственные эффекты в будущих выпусках. [4] DWM отображает только основной объект рабочего стола как 3D-поверхность; другие объекты рабочего стола, включая виртуальные рабочие столы, а также защищенный рабочий стол, используемый контролем учетных записей пользователей, не являются. [5]

Aero Flip демонстрирует множество функций DWM: 3D-преобразование 2D-плоскостей, масштабирование и перевод плоскостей в другое положение, встраивание динамических представлений одного приложения в другое и использование пользовательских программ шейдеров .
Функция Aero Flip используется в Windows 7

Поскольку все приложения обрабатывают данные во внеэкранном буфере, их можно считывать и из буфера, встроенного в другие приложения. Поскольку внеэкранный буфер постоянно обновляется приложением, встроенный рендеринг будет динамическим представлением окна приложения, а не статическим рендерингом. Именно так работают предварительный просмотр миниатюр в реальном времени и Windows Flip в Windows Vista и Windows 7 . DWM предоставляет общедоступный API, который позволяет приложениям получать доступ к этим миниатюрам. [6] Размер миниатюры не фиксирован; приложения могут запрашивать миниатюры любого размера — меньше исходного окна, того же размера или даже больше — и DWM правильно масштабирует их перед возвратом. Aero Flip не использует общедоступные API миниатюр, поскольку они не позволяют напрямую обращаться к текстурам Direct3D. [7] Вместо этого Aero Flip реализован непосредственно в движке DWM.

Диспетчер окон рабочего стола использует уровень интеграции мультимедиа (MIL), неуправляемый наборщик, который он использует совместно с Windows Presentation Foundation , для представления окон как узлов композиции в дереве композиции . Дерево композиции представляет рабочий стол и все окна, размещенные на нем, которые затем визуализируются MIL от задней части сцены к передней. [8] Поскольку все окна формируют окончательное изображение, цвет результирующего пикселя может определяться более чем одним окном. Это используется для реализации таких эффектов, как попиксельная прозрачность. DWM позволяет вызывать пользовательские шейдеры для управления тем, как пиксели из нескольких приложений используются для создания отображаемого пикселя. DWM включает в себя встроенные программы Pixel Shader 2.0, которые вычисляют цвет пикселя в окне путем усреднения цвета пикселя, определенного окном за ним и соседними пикселями. Эти шейдеры используются DWM для достижения эффекта размытия границ окон, управляемых DWM, и, при необходимости, для областей, где это запрашивается приложением. [3]

Поскольку MIL обеспечивает графическую систему с сохраненным режимом путем кэширования деревьев композиции, работа по перерисовке и обновлению экрана при перемещении окон выполняется DWM и MIL, освобождая приложение от ответственности. Фоновые данные уже находятся в дереве композиции и внеэкранных буферах и напрямую используются для рендеринга фона. В ОС Windows до Vista фоновым приложениям приходилось запрашивать повторную визуализацию, отправляя им сообщение WM_PAINT. [6] DWM использует графику с двойной буферизацией для предотвращения мерцания и разрывов изображения при перемещении окон. [3] [6] Механизм композитинга использует такие оптимизации, как отсечение , чтобы улучшить производительность, а также не перерисовывать области, которые не изменились. [8] Поскольку наборщик поддерживает работу с несколькими мониторами, DWM также поддерживает это. [8]

Во время полноэкранных приложений, таких как игры, DWM не выполняет компоновку окон, поэтому производительность существенно не снизится.

В Windows 8 и Windows Server 2012 DWM используется постоянно и не может быть отключен из-за реализованного нового «начального экрана». Поскольку процесс DWM обычно должен запускаться постоянно в Windows 8, пользователи, испытывающие проблемы с этим процессом, отмечают уменьшение использования памяти после перезагрузки системы. Часто это первый шаг в длинном списке задач по устранению неполадок, которые могут помочь. В Windows 8 можно запретить временный перезапуск DWM, в результате чего рабочий стол станет черным, панель задач станет серой и сломается стартовый экран/современные приложения, но настольные приложения продолжат работать и выглядеть так же, как Windows 7 и Vista Basic. тема, основанная на однобуферном рендерере, используемом в XP. Они также используют центрированную строку заголовка Windows 8, видимую в среде предустановки Windows . Запустить Windows без DWM не получится, поскольку для экрана блокировки требуется DWM, поэтому это можно сделать только на лету и не имеет никаких практических целей. Начиная с Windows 10, такое отключение DWM приведет к поломке всего механизма композитинга, даже традиционных настольных приложений, из-за реализации универсальных приложений на панели задач и нового меню «Пуск». [ нужна цитация ] В отличие от своих предшественников, Windows 8 поддерживает базовые адаптеры дисплея через Windows Advanced Rasterization Platform (WARP), которая использует программный рендеринг и центральный процессор для рендеринга интерфейса, а не видеокарты. Это позволяет DWM работать без совместимых драйверов, но не на том уровне производительности, как с обычной видеокартой. DWM в Windows 8 также добавляет поддержку стереоскопического 3D . [9]

Перенаправление

Для методов рендеринга, не поддерживающих DWM, вывод должен быть перенаправлен в буферы DWM. В Windows для рендеринга можно использовать GDI или DirectX . Чтобы эти два компонента работали с DWM, предусмотрены методы перенаправления для обоих.

Благодаря GDI, который является наиболее часто используемым методом рендеринга пользовательского интерфейса в Microsoft Windows , каждое окно приложения уведомляется, когда оно или его часть появляется в поле зрения, и задача приложения — отрисовывать себя. Без DWM рендеринг растрирует пользовательский интерфейс в буфере видеопамяти, откуда он отображается на экране. В DWM вызовы GDI перенаправляются на использование Canonical Display Driver (cdd.dll), программного средства визуализации. [10] В системной памяти выделяется буфер, равный размеру окна, и CDD.DLL выводит данные в этот буфер, а не в видеопамять. Другой буфер выделяется в видеопамяти для представления поверхности DirectX, которая используется в качестве текстуры для оконных сеток. Буфер системной памяти преобразуется в поверхность DirectX отдельно и синхронизируется. Этот обходной маршрут необходим, поскольку GDI не может выводить напрямую в формате пикселей DirectX. Поверхность считывается наборщиком и компонуется на рабочий стол в видеопамяти. Запись вывода GDI в системную память не ускоряется аппаратно, как и преобразование в поверхность DirectX. Когда окно GDI свернуто, невидимо или видно на том же мониторе, что и полноэкранное приложение DirectX, из-за ограничения GDI буфер растрового изображения GDI больше не принимается приложением при запросе контекста устройства во время рисования или обновления (это иногда можно увидеть, когда операция GDI, копирующая из одного окна в другое, выводит черные или пустые области вместо ожидаемого содержимого окна). Таким образом, DWM использует последнее растровое изображение, отображаемое в буфере перед свертыванием приложения. [11]

Начиная с Windows 7, драйвер дисплея Canonical больше не выполняет рендеринг в копию системной памяти при наличии видеодрайвера, совместимого с WDDM 1.1/DXGI 1.1.

Для приложений, использующих DirectX для записи на трехмерную поверхность, реализация DirectX в Windows Vista использует WDDM для совместного использования поверхности с DWM. Затем DWM напрямую использует поверхность и сопоставляет ее с сетками окон. Для приложений Windows Presentation Foundation (WPF) (которые являются приложениями DirectX) наборщик выполняет рендеринг таких общих поверхностей, которые затем объединяются в окончательный рабочий стол. [11] Приложения могут сочетать любые методы рендеринга в нескольких дочерних окнах, если для рендеринга одного и того же окна не используются GDI и DirectX. В этом случае порядок между рендерингом DirectX и GDI не может быть гарантирован, и поэтому не может быть гарантировано, что растровое изображение GDI из системной памяти было преобразовано на поверхность видеопамяти. Это означает, что окончательная композиция может не содержать элементы, отображаемые с помощью GDI. [11] Чтобы предотвратить это, DWM временно отключается, пока работает приложение, которое смешивает GDI и DirectX в одном окне.

Требования к оборудованию

В Windows Vista для работы DWM требуется совместимое физическое или виртуальное оборудование: [12]

В Windows 7 диспетчер окон рабочего стола был переработан для использования Direct3D 10.1, но требования к оборудованию остались такими же, как и в Windows Vista; Аппаратное обеспечение Direct3D 9 поддерживается слоем « 10 Level 9 », представленным в среде выполнения Direct3D 11 . Windows 8 предъявляет те же требования, что и Windows 7, но она также может использовать программный рендеринг при отсутствии совместимого видеооборудования. [9]

Программное обеспечение для аппаратной виртуализации , которое имитирует оборудование, необходимое для DWM, включает VirtualBox 4.1 и более поздних версий, VMware Fusion 3.0 и более поздних версий, а также VMware Workstation 7.0 и более поздних версий. Кроме того, Windows Virtual PC позволяет осуществлять композицию с использованием протокола удаленного рабочего стола .

Опыт разработчика

Функциональные возможности разработчика, связанные с диспетчером окон рабочего стола, предоставляются в заголовочном файле Windowsdwmapi.h SDK .

Смотрите также

Примечания

  1. ^ Начиная с Windows 8 , где DWM является обязательным компонентом, который должен работать постоянно, он больше не является службой.

Рекомендации

  1. ^ «Как включить функции взаимодействия с пользователем Windows Vista на компьютере под управлением Windows Server 2008 (MSKB947036)» . База знаний . Майкрософт. 15 января 2008 года . Проверено 21 апреля 2008 г.
  2. ^ «Разработка Windows 7» .
  3. ^ abc Грег Шехтер. «Использование DWM DirectX, графического процессора и аппаратного ускорения». Блог Грега Шехтера . Блоги MSDN . Проверено 14 октября 2007 г.
  4. ^ Грег Шехтер. «Ответ на комментарии «Использование DWM DirectX, графического процессора и аппаратного ускорения»». Блог Грега Шехтера . Блоги MSDN . Проверено 20 апреля 2008 г.
  5. ^ Крис Джексон. «Диспетчер окон рабочего стола работает только на основном рабочем столе». Семантическое созвучие Криса Джексона . Блоги MSDN . Проверено 14 октября 2007 г.
  6. ^ abc Грег Шехтер. «Под капотом диспетчера окон рабочего стола». Блог Грега Шехтера . Блоги MSDN . Проверено 27 мая 2021 г.
  7. ^ «Обзор миниатюр DWM» . MSDN . Архивировано из оригинала 17 июля 2012 года.
  8. ^ abc Грег Шехтер. «Как базовые концепции и технологии WPF используются в DWM». Блог Грега Шехтера . Блоги MSDN . Проверено 14 октября 2007 г.
  9. ^ ab «Диспетчер окон рабочего стола всегда включен». Справочник по совместимости Windows 8 и Windows Server 2012 . MSDN . Проверено 4 сентября 2012 г.
  10. ^ «Сравнение Direct2D и GDI - Блог разработчиков DirectX» . Архивировано из оригинала 8 апреля 2014 г. Проверено 19 августа 2014 г.
  11. ^ abc Грег Шехтер. «Перенаправление приложений GDI, DirectX и WPF». Архивировано из оригинала 5 марта 2010 г. Проверено 14 октября 2007 г.
  12. ^ «Системные требования для Windows Vista». Майкрософт . 13 ноября 2007 г. Проверено 11 февраля 2009 г.

Внешние ссылки