Диспетчер вікон робочого столу («Desktop Window Manager», «DWM», раніше «Desktop Compositing Engine», «DCE») — це менеджер вікон у Windows Vista, Windows 7, Windows 8 і Windows 10, який дозволяє використовувати апаратне прискорення для візуалізації графічного інтерфейсу користувача Windows.
Спочатку створений, щоб включити частину нового призначеного для користувача інтерфейсу «Windows Aero», який враховував такі ефекти, як прозорість, перемикання 3D-вікон і багато іншого. Також входить до складу Windows Server 2008, але вимагає наявності функції «Desktop Experience» і сумісних графічних драйверів. [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] та при цьому не потрібно зберігати копію буфера в системній пам'яті, щоб процесор міг записувати в неї.
Оскільки композитор має доступ до графіки всіх застосунків, то він легко допускає візуальні ефекти, які об'єднують візуальні елементи з декількох застосунків, наприклад прозорість. DWM використовує DirectX 9 для виконання функції компонування і відмальовування в графічному процесорі, звільняючи центральний процесор від завдання управління відмальовуванням з екранних буферів на дисплей. Однак, це не впливає на малювання застосунків за межами екранних буферів - в залежності від технологій, що використовуються для цього - воно все ще може бути прив'язане до процесора. DWM-незалежні методи відмальовування, такі як GDI, перенаправляються в буфери шляхом відмальовування призначеного для користувача інтерфейсу (UI) у вигляді растрових зображень. Технології відмальовування з підтримкою DWM, такі як WPF, роблять внутрішні структури даних доступними в форматі, сумісному з DWM. Вміст вікна в буферах потім перетворюється в текстури DirectX.
Сам робочий стіл являє собою повноекранну поверхню Direct3D, вікна якої представлені у вигляді сітки, що складається з двох суміжних (і взаємно інвертованих) трикутників, які перетворені в двомірний прямокутник. Текстура, що представляє хром призначеного для користувача інтерфейсу, потім відображається на ці прямокутники. Віконні переходи реалізуються як перетворення сіток з використанням шейдерних програм. [3] У Windows Vista переходи обмежені набором вбудованих шейдеров, які реалізують перетворення. Грег Шехтер (Greg Schechter), розробник з Microsoft, припустив, що це може бути відкрито для розробників і користувачів, щоб вони включили свої власні ефекти в майбутньому випуску. [4] DWM відображає тільки основний об'єкт робочого стола як тривимірну поверхню; інші об'єкти робочого столу, включаючи віртуальні робочі столи, а також безпечний робочий стіл, який використовується контролем облікових записів, не є. [5]
Оскільки всі програми відображаються у поза екранному буфері, вони також можуть зчитуватися з буфера, вбудованого в інші додатки. Оскільки поза екранний буфер постійно оновлюється додатком, вбудований відмальовування буде динамічним поданням вікна програми, а не статичним відмальовуванням. Так працюють попередні перегляди мініатюр і Windows Flip в Windows Vista і Windows 7. DWM надає загальнодоступний API, який дозволяє додаткам отримувати доступ до цих ескізним уявленням. [6] Розмір мініатюри не фіксований; додатки можуть запитувати ескізи в будь-якому розмірі - меншому, ніж вихідне вікно, в тому ж розмірі або навіть більше - і DWM буде коректно масштабувати їх перед поверненням. Windows Flip 3D не використовує загальнодоступні мініатюрні API-інтерфейси, оскільки вони не допускають прямого доступу до текстур Direct3D. [7] Замість цього Flip 3D реалізований безпосередньо в движку DWM.
Диспетчер вікон робочого столу використовує Media Integration Layer (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] Механізм компонування використовує оптимізації, такі як відбір, для підвищення продуктивності, а також не перемальовує області, які не змінилися. [8] Оскільки композитор підтримує кілька моніторів, 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. [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 Display Driver більше не обробляє копію системної пам'яті при наявності відеодрайвера, сумісного з 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. Щоб запобігти цьому, DWM тимчасово відключений, поки працює програма, яка змішує GDI та DirectX в одному вікні.
Вимоги до обладнання
У Windows Vista для DWM Використовуйте сумісні фізична або віртуальне обладнання: [12]
У Windows 7 диспетчер вікон робочого столу був перероблений для використання Direct3D 10.1, але вимоги до обладнання залишаються такими ж, як в Windows Vista; Апаратне забезпечення Direct3D 9 підтримується шаром "10 Level 9 ", представленим під час виконання Direct3D 11. Windows 8 пред'являє ті ж вимоги, що і 7, але вона також може використовувати програмний відмальовування при відсутності сумісного відеообладнання. [9]
Програмне забезпечення для віртуалізації обладнання, що емулює обладнання, необхідне для DWM, включає VirtualBox 4.1 і пізніші версії, VMware Fusion 3.0 і пізніші версії і VMware Workstation 7.0 і пізніших версій. Крім того, Windows Virtual PC дозволяє компонувати з використанням протоколу віддаленого робочого столу.
Див. також
Примітки
Посилання