본문 바로가기

Fun,Fun,Fun

DWM(Desktop Window Manager)

Desktop Window Manager


Windows Vista 및 Windows 7에서는 Windows 테마로 Windows Aero 또는 Windows Vista 표준, Windows 7 표준을 선택할때 사용된다. Windows 8은 모든 경우에 DWM이 사용된다.


Windows Vista 및 Windows 7 에서 DWM의 실행에는 Direct3D 9.0Ex과 쉐이더 모델 2.0을 지원하는 비디오 카드가 필요하다. Windows 8에서는 비디오 카드가 지원하지 않을 경우 소프트웨어 DWM의 처리를한다.


DWM 은 Windows Vista Starter 버전에는 탑재 되지 않는다. Windows Vista Home Basic 에디션에는 DWM이 탑재되고 있지만, 투명한 유리 효과와 플립 3D등 일부 기능을 사용할 수 있다. 또한 Windows Server 2008 및 Server 2008 R2 에서도 대응하는 비디오 카드를 이용해 " 데스크톱 경험 " 기능을 사용 하여 DWM 이 사용 가능하다.




아키텍처
DWM 에서는 응용 프로그램 소프트웨어 그리기 출력은 직접 비디오 메모리 ( VRAM )로 라우팅되지 않고 시스템 메모리의 오프 스크린 버퍼링 된다. 그리고 각 응용 프로그램 창의 내용을 DWM이 궁극적으로 합성 하여 출력한다. 또한 Mac OS X의 Quartz Compositor도 같은 구조를 이용하고있다. DWM이 모든 응용 프로그램의 그리기 내용을 유지하기 위해 투명 효과와 같은 여러 응용 프로그램 창에 걸치는 효과가 쉽게 적용 할 수있다. DWM은 Direct3D 9.0Ex 통해 GPU를 이용하여 오프 스크린 버퍼에서 화면에 그리기에 이용하는 과정에 CPU를 이용하지 않는 구조로되어 있다. 그러나 응용 프로그램이 화면 버퍼에 그리는 단계에서는 Graphics Device Interface ( GDI )와 같은 DWM과 밀접 하게 제휴 없는 그림 기술을 사용하는 경우, 오프 스크린 버퍼에 CPU를 사용하여 비트맵으로 그릴 수 있게 된다. Windows Presentation Foundation ( WPF ) 같은 DWM 지원 묘화 기술은 DWM 호환 형식의 내부 데이터를 직접 생성 한다. 어쨌든, 창의 내용 은 Direct3D의 텍스처로 변환 된다.


데스크탑은 전체 화면 Direct3D 서페이스가되고 있다. 2D 직사각형을 표현하는 두개의 삼각형 메쉬로되어 있어 데스크탑 화면 전체를 나타내는 텍스처가 맵으로 형성된다. 창의 변화는 쉐이더 프로그램에서 메쉬 의 변화로 실현되고 있다. Windows Vista 에서의 변화는 DWM 내장에서 밖에 이용할 수 없다. 마이크로 소프트의 개발자인 Greg Schechter는 미래에 플러그인 방식으로 효과를 적용 할 수 있도록 할지도 모른다고 시사하고있다. DWM은 기본 데스크톱 개체만  3D 서페이스로서 취급한다. 사용자 계정 컨트롤 ( UAC ) 보안 데스크톱등 다른 데스크탑 객체는 사용할 수 없습니다.




모든 응용 프로그램 그리기가 오프 스크린 버퍼에 이루어지게된 결과 다른 응용 프로그램이 그려진 내용을 넣을 수있게 했다. 오프 스크린 버퍼는 응용 프로그램이 지속적으로 업데이트 하기 위해 가져온 그림 내용도 동적으로 변화한다. 그러면 라이브 썸네일 미리보기 및 Windows 전환 3D가 실현되고 있다. DWM은 미리 취득하는 API 를 공개하고있다. 썸네일의 크기는 고정되어 있지 않고, 좋아하는 크기로 조절한 이미지를 얻을 수있다. Windows 전환 3D는 썸네일 API를 사용하여 창의 내용을 비트 맵 이미지로 가져오고 2D 사각형 텍스처로 변환하여 사용자 지정 셰이더에 의해 3D 메쉬로 변환하여 3D에서 회전의 동작을 실현하고있다.


DWM은 Media Integration Layer ( MIL )를 이용하고있다. 이것은 WPF와 공동으로 사용하는 네이티브 코드에서 각 창을 합성 트리의 합성 노드로 취급 최종 데스크톱 화면을 렌더링 하는 시스템이다. 최종 출력 할 때 여러창에서 출력 픽셀의 색상을 결정하는 경우도 있다. 즉, 픽셀 마다의 투명도가 구현 되어 있다. DWM 은 실현 하기 위해 사용자 지정 쉐이더를 사용 하고있다. 이 쉐이더는 창 흐림 효과등에 DWM이 사용하는 다른 응용 프로그램 내부 그리기도 선택적으로 사용 가능하다.


MIL은 합성 트리 캐시라는 형태로 유지 모드 그래픽 기구이다. 창 이동에 따른 그리기, 새로 고침 응용 프로그램의 관여 없이 DWM 및 MIL가 통제하고 있다. 이때 창의 내용은 오프 스크린 버퍼의 것을 사용하기 때문에 예전처럼 WM_PAINT를 던지고 응용 프로그램에 다시 그리기를 요구 없게되어 있다. 따라서 DWM 은 더블 버퍼로 창 이동시 깜박임을 제거, 변화가없는 영역을 다시 그리기 하지 않는등의 최적화도 이루어지고있다. 합성 처리가 다중 모니터 환경에 대응하고 있기 때문에 DWM도 여러 모니터에 대응하고있다.




재 지정
DWM 지원하지 않는 그리기 기술은 출력을 DWM 오프 스크린 버퍼에 전송 해야 한다. Windows 에서는 GDI 또는 Direct3D를 그리는데 이용되지만, 함께 DWM에 전송하는기구가 준비되어 있다.


Windows 에서 UI를 그리는데 가장 자주 사용 되는 GDI는 각 응용 프로그램 창이 표시되는 상태가되었을 때 알림을 받아 스스로 그리는 형태를 취하고있다. DWM 없는 상태에서는 VRAM의 버퍼에서 그리게 된다. DWM 아래에서는 창과 같은 크기의 버퍼가 시스템 메모리에 확보되어 GDI 의 그리기에 이루어지게 된다. 또한 VRAM 에 Direct3D 서페이스가 확보되어 시스템 메모리 버퍼의 내용이 거기에 Direct3D 형식으로 변환 하면서 전송 되도록 되어있다. 시스템 메모리 버퍼와 VRAM의 내용은 항상 동기화 되도록 되어있다. 시스템 메모리에 GDI 그리기에 어떠한 하드웨어 가속이 일어나지 않는다. GDI 의 제한으로 인해 창이 최소화 하면서, 버퍼의 내용을 업데이트 할 수 없다.


3D 서페이스에 기록 DirectX 응용 프로그램의 경우 Windows Vista의 DirectX 구현이 DWM 와 공유 하도록 WDDM 을 이용하고있어 DWM은 응용 프로그램의 평탄화를 직접 전개한다. GDI 와 Direct3D 와 같은 여러 렌더링 기술을 하나의 창에서 사용하는 것은 불가능하지만 하나의 메인창에 있는 여러 자식창들 사이에서는 각각 다른것을 사용할 수있다. 이 경우 GDI 와 Direct3D 사이의 그리기 순서 보장은 없다. 시스템 메모리 GDI 비트맵이 이미 VRAM의 평탄화로 변환 되었는지 여부를 보장 할 수 없기 때문이다. 이를 금지 했기때문에 GDI 와 DirectX 를 하나의 창에서 혼합하여 사용할 창을 가진 응용 프로그램이 실행중인 경우 DWM 은 일시적으로 멈춘다.




하드웨어 요구 사항
Windows Display Driver Model ( WDDM ) 대응 의 GPU
DirectX 9 지원
픽셀 쉐이더 2.0 지원
32 비트 컬러
Windows Driver Kit ( WDK )에서 Windows Aero 적응 테스트 통과


2013년 10월 현재 Hyper- V 및 VMware와 같은 가상 머신 에서 요구 사항을 충족 하드웨어는 출현 하지 않는다.