找回密码
 加入我们
搜索
      
查看: 15698|回复: 30

[软件] 一直搞不懂无边框模式和全屏有啥区别

[复制链接]
发表于 2023-9-20 12:55 来自手机 | 显示全部楼层
本帖最后由 ysc3839 于 2023-9-20 13:08 编辑

曾经是有较大区别的,DirectX曾经其中一个目的是替换掉Windows中一些老旧的基础设施,比如Direct Sound是想替代Windows Multimedia(winmm),Direct3D+DirectDraw是想替代GDI。
在XP以及更早的系统中,DirectX还没完全替代的时候,DitectX和这些基础设施相对来说是比较独立的,DirectX一般会提供一个“全局”或者“独占”模式,可以绕过传统的那套系统,性能会更好。
直到Vista开始重写基础设施,但是因为兼容性等问题,无边框(窗口)模式还是需要把内容拷回内存再由dwm进行合成,因此全屏模式性能仍然会更好。
Win7的dwm支持GPU合成,不需要再拷回内存,但是窗口仍然是dwm有一个buffer,程序本身有一个buffer,需要把程序中的buffer拷到dwm中。为了解决这个问题,微软推出了flip mode,可以让程序中的buffer直接共享给dwm进行合成。不过Win7只有Direct3D 9EX支持flip mode,D3D10 11仍不支持。
Win8给D3D10 11加入了flip mode支持。
应该是Win10加入了全屏优化功能,当检测到无边框铺满屏幕,且没有其他窗口遮挡的情况下,会绕过dwm的混合直接输出,或者全屏模式下如果有遮挡,会使用dwm进行合成。直到此时无边框才和全屏几乎没有性能差异,之前的flip mode只是减少了拷贝,还是绕不开dwm合成的,仍然有一点点性能损失。全屏优化只需要进行遮挡计算判断是否绕过dwm,理论上性能损失是极小的。如果还是觉得不爽,可以在exe的兼容性选项里禁用全屏优化。

感兴趣的话可以看看 https://learn.microsoft.com/en-u ... ng-direct2d-and-gdi
关于全屏优化可以看这篇文章 https://devblogs.microsoft.com/d ... reen-optimizations/

评分

参与人数 1邪恶指数 +10 收起 理由
reinhard_x + 10 就是NB

查看全部评分

发表于 2023-9-20 13:02 | 显示全部楼层
RenaissanceFlow 发表于 2023-9-20 10:36
这是B站致远的解释,无边框实际还是会渲染桌面资源,只是看不到,可能会有点影响,实际还是全屏好些,Win1 ...

这个图中的文字只是说明了flip mode不需要拷贝。
从Win10开始支持了全屏优化,无边框铺满屏幕且没有遮挡的话是可以绕过dwm合成直接输出的。
发表于 2023-9-21 11:40 来自手机 | 显示全部楼层
pdvc 发表于 2023-9-21 10:56
flip有时会增加一些渲染延迟😂

为什么呢?不是拷贝更慢吗?
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

Archiver|手机版|小黑屋|Chiphell ( 沪ICP备12027953号-5 )沪公网备310112100042806 上海市互联网违法与不良信息举报中心

GMT+8, 2025-6-9 13:10 , Processed in 0.009428 second(s), 7 queries , Gzip On, Redis On.

Powered by Discuz! X3.5 Licensed

© 2007-2024 Chiphell.com All rights reserved.

快速回复 返回顶部 返回列表