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

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
компонент Windows
Диспетчер окон рабочего стола
Тип компонента программное обеспечение и компонент Microsoft Windows[d]
Включён в Windows Vista
Windows 7
Windows 8
Windows 8.1
Windows 10
Windows 11
Windows Server 2008[1]
Windows Server 2008 R2[1]
Заменил Microsoft GDI+
Название сервиса UxSms (Только в Windows Vista/7)
Описание сервиса Диспетчер сеансов диспетчера окон рабочего стола

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

Изначально был создан для графического интерфейса Windows Aero, включавшего в себя такие функции как прозрачность окон и др. Также менеджер окон рабочего стола включён в Windows Server 2008 и Server 2008 R2, но должен быть установлен пользователем компонент «Возможности рабочего стола».[2]

Архитектура[править | править код]

Диспетчер окон рабочего стола — композитный оконный диспетчер. Это означает, что у каждой программы есть буфер, в который она записывает данные; затем 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[3] и при этом не требуется сохранять копию буфера в системной памяти, чтобы процессор мог записывать в неё.

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

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

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

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

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

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

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

Перенаправление[править | править код]

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

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

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

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

Системные требования[править | править код]

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

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

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

См. также[править | править код]

Примечания[править | править код]

  1. 1 2 Ошибка в сносках?: Неверный тег <ref>; для сносок DeskExp не указан текст
  2. Deland-Han. How to enable Windows Vista user experience features on a computer that is running Windows Server 2008 (англ.) ?. Microsoft Knowledge Base. Дата обращения: 27 марта 2022. Архивировано 6 апреля 2012 года.
  3. Engineering Windows 7 | Microsoft Docs
  4. 1 2 3 Greg Schechter. DWM's use of DirectX, GPU and hardware acceleration. Greg Schechter's Blog. MSDN Blogs. Дата обращения: 14 октября 2007.
  5. Greg Schechter. Responding to Comments from "DWM's use of DirectX, GPU and hardware acceleration". Greg Schechter's Blog. MSDN Blogs. Дата обращения: 20 апреля 2008.
  6. Chris Jackson. Desktop Window Manager only runs on the primary desktop. Chris Jackson's Semantic Consonance. MSDN Blogs. Дата обращения: 14 октября 2007.
  7. 1 2 Greg Schechter. Under the hood of Desktop Window Manager. Greg Schechter's Blog. MSDN Blogs. Дата обращения: 14 октября 2007.
  8. DWM Thumbnail Overview — Win32 apps | Microsoft Docs
  9. 1 2 Greg Schechter. How underlying WPF concepts and technology are being used in the DWM. Greg Schechter's Blog. MSDN Blogs. Дата обращения: 14 октября 2007.
  10. 1 2 Desktop Window Manager is always on. Windows 8 and Windows Server 2012 Compatibility Cookbook. MSDN. Дата обращения: 4 сентября 2012.
  11. Comparing Direct2D and GDI - DirectX Developer Blog. Дата обращения: 19 августа 2014. Архивировано 8 апреля 2014 года.
  12. 1 2 Greg Schechter. Redirecting GDI, DirectX, and WPF applications. Дата обращения: 14 октября 2007. Архивировано 5 марта 2010 года.
  13. System requirements for Windows Vista. Microsoft (13 ноября 2007). Дата обращения: 11 февраля 2009.