데스크톱 창 관리자
Desktop Window Manager![]() |
개발자 | 마이크로소프트 |
---|---|
초기 릴리즈 | 2006년 11월 | , 전(
운영 체제 | Microsoft Windows |
서비스명 | UxSms |
Desktop Window Manager(DWM, 이전에는 Desktop Compositing Engine(DCE))는 Windows Vista 이후 Microsoft Windows에서 하드웨어 액셀러레이션을 사용하여 Windows의 그래피컬 사용자 인터페이스를 렌더링할 수 있는 컴포지팅 창 관리자입니다.
이것은 원래 투명성, 3D 창 전환 등의 효과를 가능하게 하는 새로운 "Windows Aero" 사용자 경험의 일부를 가능하게 하기 위해 만들어졌습니다.Windows Server 2008에도 포함되어 있습니다만, 「데스크탑 익스피리언스」기능과 호환성이 있는 그래픽·드라이버를 [1]인스톨 할 필요가 있습니다.
아키텍처
데스크톱 창 관리자는 컴포지트 창 관리자입니다.즉, 각 프로그램에는 데이터를 쓰는 버퍼가 있습니다.DWM은 각 프로그램의 버퍼를 최종 이미지로 컴포지트합니다.이에 비해 Windows XP 이전의 스태킹 창 매니저(Windows Aero가 비활성화되어 있는 Windows Vista 및 Windows 7도 마찬가지)는 모든 프로그램이 쓰기 위한 단일 디스플레이 버퍼로 구성됩니다.
DWM은, operating system(Windows 7 또는 Windows Vista)과 사용하고 있는 그래픽 드라이버의 버전(WDM 1.0 또는 1.1)에 의해서 다른 방법으로 동작합니다.Windows 7 및 WDM 1.1 드라이버에서는 DWM은 그래픽스 디바이스 인터페이스(GDI) 프로그램이라도 프로그램의 버퍼를 비디오 RAM에만 씁니다.이는 Windows 7이 GDI에[2] 대해 하드웨어 액셀러레이션을 지원(제한적)하기 때문에 CPU가 버퍼에 쓸 수 있도록 버퍼 복사본을 시스템 RAM에 보관할 필요가 없기 때문입니다.
컴포지터는 모든 어플리케이션의 그래픽에 액세스 할 수 있기 때문에, 투명도등의 복수의 어플리케이션의 비주얼을 조합하는 시각 효과를 간단하게 실현할 수 있습니다.DWM은 DirectX를 사용하여 GPU에서 컴포지트 및 렌더링 기능을 수행하므로 렌더링 관리 태스크의 CPU가 오프스크린 버퍼에서 디스플레이로 이동하지 않아도 됩니다.다만, 오프스크린 버퍼에의 애플리케이션 페인팅에는 영향을 주지 않습니다.사용하는 테크놀로지에 따라서는, CPU에 바인드 되어 있는 경우가 있습니다.GDI와 같은 DWM에 의존하지 않는 렌더링 기술은 사용자 인터페이스(UI)를 비트맵으로 렌더링함으로써 버퍼로 리다이렉트됩니다.WPF와 같은 DWM 인식 렌더링 기술을 통해 내부 데이터 구조를 DWM 호환 형식으로 직접 사용할 수 있습니다.버퍼 내의 창 내용은 DirectX 텍스처로 변환됩니다.
데스크톱 자체는 전체 화면 Direct3D 표면이며, 창은 2D 직사각형을 나타내도록 변환된 2개의 인접한(및 상호 반전된) 삼각형으로 구성된 메시로 표시됩니다.UI 크롬을 나타내는 텍스처가 이러한 직사각형에 매핑됩니다.윈도우 전환은 셰이더 [3]프로그램을 사용하여 메시의 변환으로 구현됩니다.Windows Vista 에서는, 트랜스포메이션이 실장되어 있는 빌트인 셰이더 세트로 제한됩니다.Microsoft의 개발자인 Greg Schechter는 향후 릴리즈에서 [4]개발자와 사용자가 각자의 효과를 이용할 수 있도록 개방할 것을 제안했습니다.DWM은 프라이머리 데스크톱 오브젝트를 3D 서페이스로만 매핑합니다.가상 데스크톱이나 사용자 계정 컨트롤에서 사용되는 보안 데스크톱 등 다른 데스크톱 오브젝트는 매핑되지 않습니다.[5]


모든 애플리케이션이 오프스크린 버퍼로 렌더링되기 때문에 다른 애플리케이션에 내장된 버퍼에서도 읽을 수 있습니다.오프스크린 버퍼는 어플리케이션에 의해 지속적으로 갱신되므로 임베디드 렌더링은 어플리케이션창의 동적 표현이며 스태틱 렌더링이 아닙니다.Windows Vista 및 Windows 7 에서는 라이브 섬네일 미리보기와 Windows 플립이 이렇게 동작합니다.DWM 에서는, 애플리케이션이 이러한 섬네일 [6]표현에 액세스 할 수 있는 퍼블릭 API 가 공개됩니다.썸네일의 크기는 일정하지 않습니다.애플리케이션은 원래 창보다 작거나 같은 크기 또는 더 큰 크기 등 임의의 크기로 썸네일을 요구할 수 있습니다.DWM은 썸네일을 적절히 스케일링한 후 되돌립니다.Aero Flip은 공개 섬네일 API를 사용하지 않습니다.이는 Direct3D [7]텍스처에 직접 액세스할 수 없기 때문입니다.대신 Aero Flip은 DWM 엔진에 직접 구현됩니다.
데스크톱 창 관리자는 Windows Presentation Foundation과 공유하는 관리되지 않는 컴포지터인 MIL(Media Integration Layer)을 사용하여 창을 구성 트리의 구성 노드로 나타냅니다.컴포지션 트리는 데스크톱과 데스크톱에 호스트되는 모든 창을 나타냅니다.이 창은 장면의 배면에서 [8]전면으로 MIL에 의해 렌더링됩니다.모든 창이 최종 화상에 기여하기 때문에 여러 창에 의해 결과 화소의 색상을 결정할 수 있다.이것은 픽셀 단위의 투명도와 같은 효과를 구현하기 위해 사용됩니다.DWM 에서는, 커스텀 쉐이더를 기동해, 복수의 애플리케이션의 픽셀을 사용해 표시되는 픽셀을 작성하는 방법을 제어할 수 있습니다.DWM에는 픽셀 셰이더 2.0 프로그램이 내장되어 있습니다.픽셀 셰이더 2.0 프로그램은 픽셀의 색상을 창 뒤에 있는 창과 그 주변 픽셀에 의해 결정됩니다.이러한 셰이더는 DWM에 의해 관리되는 창의 테두리에서 흐림 효과를 얻기 위해 DWM에 의해 사용됩니다.또, 필요에 따라서,[3] 애플리케이션이 요구하는 영역에 대해서도 사용됩니다.
MIL은 컴포지션 트리를 캐시하여 유지 모드 그래픽 시스템을 제공하므로 윈도우 이동 시 화면 재도장 및 리프레시 작업이 DWM과 MIL에 의해 처리되므로 책임 적용이 자유로워집니다.배경 데이터는 이미 구성 트리와 오프스크린 버퍼에 있으며 배경을 렌더링하는 데 직접 사용됩니다.Vista 이전의 Windows OS에서는, 백그라운드 애플리케이션의 재렌더링을 요구해 왔습니다.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 사전 설치 환경 내에서 볼 수 있습니다.잠금 화면에는 DWM이 필요하기 때문에 DWM을 사용하지 않고 Windows를 기동해도 동작하지 않습니다.따라서, 즉석에서 실행할 수 있을 뿐만 아니라, 실용적인 목적도 없습니다.Windows 10부터는 이러한 방식으로 DWM을 비활성화하면 태스크바 및 새로운 시작 메뉴에 유니버설 앱 구현으로 [citation needed]인해 기존 데스크톱 애플리케이션까지 전체 컴포지팅 엔진이 고장납니다.이전 버전과 달리 Windows 8은 WARP(Windows Advanced Rasterization Platform)를 통해 기본적인 디스플레이 어댑터를 지원합니다.WARP는 그래픽 카드가 아닌 소프트웨어 렌더링과 CPU를 사용하여 인터페이스를 렌더링합니다.이것에 의해, DWM 는 호환성이 있는 드라이버 없이도 동작할 수 있습니다만, 통상의 그래픽 카드와 같은 퍼포먼스 레벨에서는 동작할 수 없습니다.Windows 8의 DWM은 입체 [9]3D 지원도 추가합니다.
리다이렉트
DWM 인식이 아닌 렌더링 기술의 경우 출력을 DWM 버퍼로 리다이렉트해야 합니다.Windows 에서는, 렌더링에 GDI 또는 DirectX 를 사용할 수 있습니다.이들 2개를 DWM과 연동시키기 위해 양쪽의 리다이렉션테크놀로지가 준비되어 있습니다.
Microsoft Windows에서 가장 많이 사용되는 UI 렌더링 기술인 GDI를 사용하면 각 응용 프로그램 창에 해당 창 또는 그 일부가 표시되었을 때 알림이 표시되며 응용 프로그램이 자체적으로 렌더링해야 합니다.DWM을 사용하지 않을 경우 렌더링에 의해 UI가 렌더링된 위치에서 화면까지 비디오 메모리의 버퍼에 래스터라이즈됩니다.DWM에서 GDI 콜은 소프트웨어 렌더러인 Canical Display Driver([10]cdd.dll)를 사용하도록 리다이렉트 됩니다.시스템 메모리 및 CDD에는 윈도 사이즈와 동일한 버퍼가 할당된다.비디오 메모리가 아닌 이 버퍼로의 DLL 출력.비디오 메모리에는 DirectX 서페이스를 나타내기 위해 다른 버퍼가 할당되어 윈도 메쉬의 텍스처로 사용됩니다.시스템 메모리 버퍼는 개별적으로 DirectX 표면으로 변환되어 동기화 상태로 유지됩니다.GDI는 DirectX 픽셀 형식으로 직접 출력할 수 없기 때문에 이 우회 경로가 필요합니다.서페이스는 컴포지터로 판독되어 비디오 메모리의 데스크탑에 합성됩니다.시스템 메모리에 GDI 출력을 쓰는 것은 하드웨어 가속이 되지 않으며 DirectX 표면으로의 변환도 이루어지지 않습니다.GDI 창이 전체 화면 DirectX 응용 프로그램과 같은 모니터에서 최소화되거나 보이지 않거나 표시되는 경우, GDI의 제한으로 인해 GDI 비트맵 버퍼가 더 이상 응용 프로그램에 의해 수신되지 않습니다(이것은 GDI 조작이 한 창에서 다른 창으로 복사될 때 나타날 수 있습니다).예상되는 창 내용 대신 검은색 또는 빈 영역)을 클릭합니다.따라서 DWM은 응용 프로그램이 [11]최소화되기 전에 버퍼에 렌더링된 마지막 비트맵을 사용합니다.
Windows 7 에서는, WDM 1.1/DXGI 1.1 준거 비디오 드라이버가 존재하는 경우, Canical Display Driver 는 시스템 메모리 카피에 렌더링 할 수 없게 됩니다.
DirectX를 사용하여 3D 표면에 쓰는 응용 프로그램의 경우 Windows Vista의 DirectX 구현에서는 WDM을 사용하여 DWM과 표면을 공유합니다. 그런 다음 DWM은 표면을 직접 사용하여 창 메시에 매핑합니다.Windows Presentation Foundation (WPF) 어플리케이션(DirectX 어플리케이션)의 경우 컴포지터는 공유된 표면에 렌더링하여 최종 [11]데스크톱으로 컴포지트합니다.GDI와 DirectX를 모두 사용하여 같은 창을 렌더링하지 않는 한 응용 프로그램은 여러 하위 창에서 렌더링 기술을 혼합할 수 있습니다.이 경우 DirectX와 GDI 렌더링의 순서를 보증할 수 없기 때문에 시스템 메모리로부터의 GDI 비트맵이 비디오 메모리 표면으로 변환되었음을 보증할 수 없습니다.즉, 최종 구성에는 GDI 렌더링 요소가 포함되지 [11]않을 수 있습니다.이를 방지하기 위해 같은 창에서 GDI와 DirectX를 혼합하는 응용 프로그램이 실행되고 있는 한 DWM은 일시적으로 꺼집니다.
하드웨어 요건
Windows Vista 에서는, DWM 에 호환성이 있는 물리 하드웨어 [12]또는 가상 하드웨어가 필요합니다.
- Windows 디스플레이 드라이버 모델(WDM)을 지원하는 GPU
- Direct3D9 지원
- 픽셀 셰이더 2.0 지원
- 픽셀당 32비트 지원
- Windows 드라이버 키트(WDK)의 Windows Aero 승인 테스트에 합격했습니다.
Windows 7 에서는, 데스크탑 윈도우 매니저가 Direct3D 10.1 을 사용하도록 변경되고 있습니다만, 하드웨어 요건은 Windows Vista 와 같습니다.Direct3D 9 하드웨어는 Direct3D 11 런타임에 도입된 「10 Level 9」레이어에서 지원됩니다.Windows 8은 7과 같은 요건을 가지고 있지만 호환되는 비디오 하드웨어가 없는 경우에도 소프트웨어 렌더링을 [9]사용할 수 있습니다.
DWM에 필요한 하드웨어를 에뮬레이트하는 하드웨어 가상화 소프트웨어로는 VirtualBox 4.1 이후, VMware Fusion 3.0 이후 및 VMware Workstation 7.0 이후가 있습니다.또한 Windows Virtual PC에서는 Remote Desktop Protocol을 사용하여 구성할 수 있습니다.
「 」를 참조해 주세요.
레퍼런스
- ^ "How to enable Windows Vista user experience features on a computer that is running Windows Server 2008 (MSKB947036)". Knowledge Base. Microsoft. January 15, 2008. Retrieved 2008-04-21.
- ^ "Engineering Windows 7".
- ^ a b c Greg Schechter. "DWM's use of DirectX, GPU and hardware acceleration". Greg Schechter's Blog. MSDN Blogs. Retrieved 2007-10-14.
- ^ Greg Schechter. "Responding to Comments from "DWM's use of DirectX, GPU and hardware acceleration"". Greg Schechter's Blog. MSDN Blogs. Retrieved 2008-04-20.
- ^ Chris Jackson. "Desktop Window Manager only runs on the primary desktop". Chris Jackson's Semantic Consonance. MSDN Blogs. Retrieved 2007-10-14.
- ^ a b c Greg Schechter. "Under the hood of Desktop Window Manager". Greg Schechter's Blog. MSDN Blogs. Retrieved 2021-05-27.
- ^ http://msdn2.microsoft.com/en-us/library/aa969541.aspx
- ^ a b c Greg Schechter. "How underlying WPF concepts and technology are being used in the DWM". Greg Schechter's Blog. MSDN Blogs. Retrieved 2007-10-14.
- ^ a b "Desktop Window Manager is always on". Windows 8 and Windows Server 2012 Compatibility Cookbook. MSDN. Retrieved 4 September 2012.
- ^ "Comparing Direct2D and GDI - DirectX Developer Blog". Archived from the original on 2014-04-08. Retrieved 2014-08-19.
- ^ a b c Greg Schechter. "Redirecting GDI, DirectX, and WPF applications". Archived from the original on 2010-03-05. Retrieved 2007-10-14.
- ^ "System requirements for Windows Vista". Microsoft. 2007-11-13. Retrieved 2009-02-11.