桌面窗口治理器的其余消息 (桌面窗口治理工作总结)

本文目录导航:
桌面窗口治理器的其余消息
(1)、双缓冲窗口。
如今,双缓冲技术显示的窗口特意多,它能有效的防止闪动。
确实,在经常使用了双缓冲的GDI窗口中,它自身就有两个内存块,一个在系统,一个在显卡。
所以疑问来了:为什么重定向时不间接经常使用双缓冲中的显示内存块呢?这样做关键有两个疑问:一是格局不相反,GDI显示的格局和DirectX的格局不相反。
GDI不支持以DirectX格局启动提交。
二是很多GDI操作(XOR、文本、Alpha混合等等)是一种“读取-修正-写回”这样的三步操作。
假设重定向时间接经常使用显存块,GDI显示的时刻必定从显存读取原来的显示内容到CPU(或许系统内存),而后再修正,最后写回到显存。
这样的操作效率十分低。
所以没有驳回。
(2)、最小化窗口。
理论,最小化后的窗口只显示在义务栏的一个很小范畴内,咱们要求画窗口的大小预计也只要130X30。
然而,在DWM中没有驳回这种用法。
由于,假设窗口最小化后咱们把Surface的大小修正为130x30再按需显示,这样会在Filp3D或许取缩略图时有疑问,因此窗口曾经被修正。
所以,DWM在窗口最小化后保留了最后一次性降级的Sureface内容。
由于DirectX运行程序理论是经过调用Present()函数启动Surface的提交,所以这类运行程序理论只要要一个窗口缓冲就可以成功重定向。
这种DirectX窗口的重定向是由DirectX系统(实践上是DirectX 10)处置的,当DirectX10选择显示某个Surface时,它会调用DWM的接口,以此成功跨进程的共享。
DirectX 10的“Furface共享”是一个十分共同的配置,其建设在WDDM之上。
这也是运转DWM必定要WDDM的关键要素之一。
当Present()显示Surface时,DWM会获取通知,示意应该降级其原来的窗口Surface,降级后DWM再从新启动分解。
留意WPF运行程序也是DirectX运行程序。
它们也是驳回这种重定向模式。
如今,有很多的Top-level窗口驳回了GDI+DirectX的模式启动内容显示。
依据混合的模式不同结果也不同。
假设Top-Level窗口以及它的每个子窗口是用惟一的模式启动显示,比如主窗口只用DirectX,子窗口只用了GDI,DWM对这样的窗口会构老自己的“分解”树。
没有子窗口独自显示,而后整个Tree的Surface被分解为传递给桌面。
这样的混合模式能很好的成功。
关于独自一个Top-level窗口同时经常使用GDI+DirectX显示,比拟费事。
特意是GDI+DirectX对窗口的某个区域启动重复显示的状况。
DWM理论不支持这样的窗口。
桌面窗口治理器的好处
从窗口系统的显示角度上看,这可以给咱们带来很大的繁难,协助成功更高品质的视觉成果,比如:1、访问窗口:如今一切的窗口都显示到离屏外表,这些离屏外表就可以用于其余的中央了。
例如前面提到的Alt-Tab组合键所看到的缩略图,用户还可以据此成功一些其余需求。
2、窗口操作中不再触及到背景运行程序:在Vista之前,假设暗藏的窗口变得从新可见,这局部区域只要在运行程序醒来后并照应了WM_PAINT能力被重画,这就惹起了很多美观的成果。
在Vista中,背景窗口不会收到WM_PAINT,也不会被要求提交,由于他们的内容曾经在离屏外表当中了,可以被间接拿来启动从新分解。
3、更炫的用户体验,这个不用多说了,大家可以有自己的体验感触。
4、高分辨率支持:大局部运行程序不知道它所运转的显示器的分辨率。
随着高分辨率显示器的遍及,这会使运行程序在物理空间看起来越来越小,成果很差。
由于DWM访问了窗口的离屏外表,其不凡的位置可以调整运行程序的显示分辨率,使它在高分辨率显示器上有更好的成果。
在DWM中,咱们的每个窗口都用一个Surface示意,都可以看到为是3D的网格。
只管每个窗口还是一个矩形,但它们都位于一个3D空间之中。
窗口的操作,比如最大化,恢复等等,都出现了变动,它们都是对网格启动3D变换成功的。
与以往有了很大的区别。
在Windows Vista或Windows7中窗口的毛玻璃成果十分缤纷。
在窗口的边界,咱们可以看到窗口上方的内容。
这其中同时具备一个的透明和含糊成果。
然而,在成功毛玻璃时,为了不让上方的窗口内容过于明晰影响上方的窗口,DWM组还对上方的窗口成功了含糊成果。
1、含糊上方的内容,这是由自定义的象素Shader成功,这个Shader是一个齐全运转在GPU的小程序,它可以并行处置多个象素。
2、含糊只是针对窗口边界下的局部内容。
这些内容要求从不同的缓冲提取进去。
3、探索的方法相似于平均值处置:一个象素的值等于其街坊象素的平局值。
妇孺皆知,Direct3D支持多个Surface,最后显示不同Surface时是经过Flip(翻转)成功的,DWM也是如此。
这样成功的结果就是不会在出现以前的Tearing。
使得桌面变得更平滑。
如今,咱们的桌面只管称得上是一个全屏幕的Direct3D运行程序。
不论是老式只支持帖图减速的图形处置器还是新型的高速图形处置器,咱们都要求操作图形处置器的存储系统。
这就出现了两个关键的疑问:1、在窗口很多时,运转DWM要求的内存将是一个疑问,它随着用户的窗口数参与而参与。
2、DWM会与其它的运行程序共享内存资源。
比如DirectX运行程序、视频回放和WPF运行程序等等。
处置这些疑问,微软提出了Windows显示驱动模型(Display Driver Model)。
WDDM是Vista及以后操作系统的新的DirectX驱动模型。
WDDM关键提供三项配置:1、虚构化视频内存。
2、准许与GPU的交互。
3、准许DirectX外表可以跨进程共享。
在WDDM中,显示内容是虚构化的。
这就示意显示内容与系统内存一样。
咱们知道,在系统内存中假设内存调配终了,此时还有新的调配要求,就会发生第二存储页面,而后由系统治理存储页面和主存储的页面算法和机制。
如今,主存储是显示内存,而第二存储页面是系统内存。
在显示存储和系统内存都调配完后,将经常使用磁盘作为视频内存外表。
当然,这种状况比拟少见。
然而这样的设计使得WDDM足够的强健,运行程序的牢靠性也获取增强。
在WDDM而言,它将成功十分关键的配置:口头内存的调配、成功调配内存和真正的显示内存的控制。
WDDM自身也在始终的改良中。
既然WDDM曾经成功了显示内存的虚构化,那么这就象征着WDDM具备调整运行程序的GPU命令优先级的配置。
这种配置理论是由WDDM调度程序成功。
因此WDDM必定能终止GPU的某些操作,并保留操作的高低文,以备在必要时恢复操作继续运转。
基于这项配置,WDDM提供了两种级别的调度支持:1、基本调度。
它是基于DirectX9的WDDM驱动和配件所支持的调度粒度。
也就是说独自的Primitive和Shader程序不能被终止,高低文替换必定在它们成功后启动。
2、初级调度。
它是基于DirectX10的WDDM驱动和配件所支持的调度粒度。
这种调用支持比Primitive和Shader更细粒度的终止。
留意,只管DirectX10支持初级调度,然而它并不是DirecX10所必定的。
也就是说,只要局部配件支持初级调度。
桌面窗口治理器经常使用DirectX9,因此它是支持基本调度。
前面曾经提到过,经过WDDM可以支持Surface的跨进程共享。
共享DirectX外表关于重定向DirectX运行程序十分关键。
由于Vista必定要和以前的运行程序兼容,就必定支持以前用GDI、、DirectX编写的运行程序。
WDM必定把这些运行程序的窗口重定向到Surface,而后由WDM一致分解、最后显示一个繁多的Surface。
要求留意的一点是:WDM只重定向Top-level的窗口。
而关于MDI运行程序,它的一切Top-level窗口、子窗口会被分解为独自的一个Surface,而后交给DWM分解。
依据以前的Windows图形系统。
重定向关键分为以下三类:1、只用GDI显示的窗口毫无不懂,GDI运行程序在当今任是干流。
WDM在重定向基于GDI的运行程序时,基本环节如下:A、在系统内存中调配一个和窗口大小一样的内存块,而后和窗口关联。
B、显示内存中也调配一个雷同大小、指定象素格局的显存块。
C、而后,当运行程序取得窗口的DC时,由于这个窗口还没有介入到WDM的分解,所以如今,它优惠的DC不在是主视频内存中,而且前面在系统内存中调配的内存块。
D、经过GDI的操作后,在系统内存构成一个Surface。
E、系统会依据窗口的各种参数、适当的从系统内存复制显示内容到视频内存中。
F、这样,视频内存的数据就和窗口坚持分歧,剩下的上班就由WDM成功:分解各个Surface,构成最终的桌面。
文章评论