Windows 对全屏应用的优化
全屏应用对应的是窗口模式应用,全屏应用指的是整个屏幕都是被咱一个应用独占了,屏幕上没有显示其他的应用,此时的应用就叫全屏应用。如希沃白板这个程序。本文主要告诉大家从微软官方的文档以及考古了解到的 Windows 对全屏应用的优化,以及是如何进行的优化,方便小伙伴在撕的时候可以找到根据
当然,很多小伙伴只是需要依据,所以我就先贴出一篇特别好的官方文档,当然本文大部分内容都是从这篇文档抄的
- 解密Windows对全屏的优化: Demystifying Fullscreen Optimizations
- Direct3D 9Ex Improvements - Win32 apps
- For best performance, use DXGI flip model
- Windowed, Fullscreen, and Borderless Modes: Which One Is Best?
- fullscreen mode and windowed mode_网络_安柏霖的专栏-CSDN博客
在开始聊 Windows 对全屏应用的优化之前,需要先聊聊窗口的显示方式。在 Windows 上运行的应用,如游戏等有三个不同的显示模式(考古发现还有一些特别的显示模式,但是太诡异了我就不敢说了)包括 全拼独占模式(FSE Fullscreen Exclusive)、窗口模式(Windowed)、无边框窗口。全屏独占窗口可以让应用独占显示和拥有更多(不是全部占有,但也差不多)的显卡资源。而在进入窗口模式的应用需要和其他的应用共享显示和计算资源,其他窗口在后台运行的依然需要使用显卡计算资源。此时的窗口模式应用需要依靠桌面管理器(DWM Desktop Window Manager)进行调度,此时的显卡资源也就需要将资源共享给其他所有的应用,而不是和独占全屏一样。而第三个模式无边框模式的窗口,应用依然是窗口运行,但是这个窗口没有边框,这意味着窗口可以调整大小用来做全屏,但此时的其他应用依然在后台运行
在微软的这篇文档 Demystifying Fullscreen Optimizations 说在 win10 发布之后,微软进行了全拼窗口优化。但是考古发现其实在 win7 的 dx9 就有这样的优化,详细请看 Direct3D 9Ex Improvements - Win32 apps 官方文档
在微软官方文档说 win10 的一个优化是对无边框窗口进行全屏显示的应用的优化,对于无边框的窗口可以让用户体验和全屏独占应用一样的方法,但是会比独占全屏模式更加有利。原因在于独占全屏模式会出现切换的等待,虽然在大部分设备上有显卡的优化,这部分的时间非常短,但是如果想要做频繁的切换,效果也不是很好。而微软 win10 的优化另一部分就是对提供了更快的应用命令,如 alt+tab 切换窗口和多个屏幕的显示效果。通过大量的测试微软对全屏的无边框窗口的性能优化基本达到了全屏独占窗口的性能
什么全屏独占窗口能具有更高的性能?其实在上文有提到的是可以独占所有的显示,也就是屏幕的每个像素都是由这个应用控制的,此时的显卡可以使用更多的计算资源给到这个应用。但是为什么后面又提出了让无边框窗口通过修改大小做到全屏?然后花大量的资源优化无边框全屏窗口的性能。原因在于以下:
- 全屏独占应用在分辨率切换的时候的处理相对复杂,有大量的应用没有对这方面进行支持
- 全屏独占应用的显卡支持也是需要具体显卡的
- 如果有需求让其他的窗口,如游戏工具栏,如 xbox 游戏工具栏覆盖在全屏独占窗口时,就需要拦截全屏独占窗口的渲染。这个拦截会出现比较多性能问题和不稳定问题
- 全屏独占窗口对于多个屏幕的设备不够友好,如果使用 DWM 管理另一个屏幕,那么当另一个屏幕的应用获取焦点又需要如何处理。在 windows 的几个版本里面的处理是在其他窗口获取焦点的时候自动最小化全屏独占窗口,这样就让玩全屏独占应用的小伙伴很难同时一边玩全屏游戏一边看电影
- 上文说到的如果是窗口模式,那么渲染此时由 DWM 做的,但是如果有应用进入全屏独占模式,此时 DWM 需要将显示交给应用,此时会出现屏幕切换。如果进行频繁的切换如 alt+tab 那么这个效果比较差
此时小伙伴应该就能了解到为什么微软对全屏应用的优化将不仅是对全屏独占应用的优化,还包括对无边框窗口的全屏显示优化了。其实无边框窗口本身也是一个窗口,此时的屏幕依然是 DWM 管理显示
在 windows xp 开始,在有硬件设备的支持下,微软能给全屏独占应用特别好的支持,可以让几乎所有的显卡资源用在了全屏独占应用,同时停掉后台运行窗口的实际渲染(古老渲染方式的窗口请忽略)而在没有硬件设备的支持下,微软也能做到让计算资源大部分放在全屏独占应用
在 Windows 10 开始(我记得 win7 dx9 就有这个功能)微软不仅可以对全屏独占应用提供性能优化支持,同时对无边框的全屏窗口提供几乎同等的性能优化,此时更多的应用都选择使用无边框的全屏窗口而不是全屏独占窗口
但如果是进行更多的性能优化,可以考虑进入全屏独占窗口
如果是 WPF 程序,那么设置无边框然后设置窗口大小和屏幕一样大,也能在 win10 下拿到这部分优化效果。更多关于 WPF 的优化请看 从 DX 层面讲 WPF 渲染卡顿
注:有小伙伴对于独占全屏应用的多屏幕处理觉得有点迷,我换句话告诉大家,请打开一个 UWP 的视频应用,让他进入全屏。这个应用进入全屏就是独占模式,此时你在另一个屏幕移动一个窗口,逐步移动到视频应用的屏幕上,你可以看到要么视频的屏幕依然播放视频,要么就是你移动过去了,视频应用就最小化了
另外在 win7 下的对无边框的全屏应用的优化也是有坑的,要求你的应用需要覆盖屏幕的每一个像素才会隐藏任务栏。在一些有趣的设备上,不会给无边框的全屏应用设置前台焦点,因为窗口没有焦点所以此时的任务栏依然可以显示,解决方法请看 WPF 让窗口激活作为前台最上层窗口的方法
更多博客
Windows桌面实现之七(DirectX HOOK 方式截取特殊的全屏程序之一)
Windows 对全屏应用的优化的更多相关文章
- Unity3D在Windows的全屏和跨屏(双屏)方案
方案1 unity中2个摄像机场景显示在两个显示器屏幕上(一个窗口跨屏) 1.设置场景中的两个摄像机 摄像机1 摄像机2 2.设置发布的平台及分辨率 3.全屏运行游戏,没有标题栏还可以通过-popup ...
- 背水一战 Windows 10 (3) - UI: 窗口全屏, 窗口尺寸
[源码下载] 背水一战 Windows 10 (3) - UI: 窗口全屏, 窗口尺寸 作者:webabcd 介绍背水一战 Windows 10 之 UI 窗口全屏 窗口尺寸 示例1.窗口全屏UI/F ...
- Windows中检测当前是否有窗口全屏
不时看到有人问起如何判断当前是否有窗口正处于全屏状态? 不过, 在解决这个问题之前先来解决一个简单的问题? 什么是全屏? 相当一部分人认为: 窗口如果是最大化的, 那么它就是最 ...
- Windows 7 下玩游戏不能全屏
问题描述:许多用户反映,在 Windows 7 环境下,全屏游戏时两边屏幕都是黑的,只好窗口运行了.其实这是正常现象:有些游戏本身并没有提供宽屏分辨率支持.其图形界面都是按照一定比例(如 4:3)来设 ...
- Windows 7 蓝屏代码大全 & 蓝屏全攻略
关于Windows 7.Vista等系统的蓝屏,之前软媒在Win7之家和Vista之家都有很多文章讨论过,但是都是筛选的常见的一些问题,今天这个文章是个大全,希望大家看着别头痛,文章收藏下来以后待查即 ...
- Windows 7 蓝屏代码大全 & 蓝屏全攻略
关于Windows 7.Vista等系统的蓝屏.之前软媒在Win7之家和Vista之家都有非常多文章讨论过,可是都是筛选的常见的一些问题,今天这个文章是个大全.希望大家看着别头痛.文章收藏下来以后待查 ...
- H5项目常见问题及注意事项,视频全屏,定位,屏幕旋转和触摸,偏页面重构向 来源joacycode的github
Meta基础知识: H5页面窗口自动调整到设备宽度,并禁止用户缩放页面 //一.HTML页面结构 <meta name="viewport" content="wi ...
- Blazor组件提交全记录: FullScreen 全屏按钮/全屏服务 (BootstrapBlazor - Bootstrap 风格的 Blazor UI 组件库)
Blazor 简介 Blazor 是一个使用 .NET 生成的交互式客户端 Web UI 的框架.和前端同学所熟知的 Vue.React.Angular 有巨大差异. 其最大的特色是使用 C# 代码( ...
- fullpage.js全屏滚动插件使用小结
刚做好公司网站,通过全屏滚动,显著提高了官网的浏览体验.遂总结一下使用fullpage.js的方法.欢迎指正 一. fullpage.js简介 fullpage.js是一套实现浏览器全屏滚动的js插件 ...
- 原生JS实现全屏切换以及导航栏滑动隐藏及显示——重构前
思路分析: 向后滚动鼠标滚轮,页面向下全屏切换:向前滚动滚轮,页面向上全屏切换.切换过程为动画效果. 第一屏时,导航栏固定在页面顶部,切换到第二屏时,导航条向左滑动隐藏.切换回第一屏时,导航栏向右滑动 ...
随机推荐
- HDU 2045:不容易系列之(3)—— LELE的RPG难题(动态规划)
一.原题链接 Problem - 2045 (hdu.edu.cn) 二.题面 人称"AC女之杀手"的超级偶像LELE最近忽然玩起了深沉,这可急坏了众多"Cole&quo ...
- 「AntV」全球AQI数据获取与L7可视化
1. 引言 L7 地理空间数据可视分析引擎是一种基于 WebGL 技术的地理空间数据可视化引擎,可以用于实现各种地理空间数据可视化应用.L7 引擎支持多种数据源和数据格式,包括 GeoJSON.CSV ...
- 记录--一行代码修复100vh bug
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 你知道奇怪的移动视口错误(也称为100vh bug)吗?或者如何以正确的方式创建全屏块? 一.100vh bug 什么是移动视口错误? 你 ...
- FPGA之PLD的简单设计
FPGA之PLD的简单设计 1.实验原理 PLD是可编程逻辑器件的简称,是FPGA的前身(FPGA是在PLD的基础上发展出来的).从PLD设计可以感受早期可编程逻辑器件的特点,了解FPGA在器件层的原 ...
- ARM之AXI总线协议初试
AXI总线协议的学习 1.AXI总线的初步认识 What is AXI? AXI is part of ARM AMBA, a family of micro controller buses fir ...
- KingbaseES checkpoint_timeout参数对wal日志量的影响
前言 在KingbaseESV8R6数据库中,必须先将更改写入WAL日志(老版本称为 xlog),然后才能将这些更改从内存shared_buffer 写入到磁盘. 前两天有个同事遇到一个问题,wal日 ...
- KingbaseES 支持自定义异常
KingbaseES PLSQL 从 V8R6C4 版本开始,支持用户自定义异常.具体例子如下: create or replace procedure p_test() as error_numbe ...
- KingabseES例程之巧用QueryMapping解决查询硬解析问题
什么是QueryMapping KingbaseES Query Mapping 是一种查询映射功能.有过SQL优化经历的人都知道,对于有些SQL性能问题,可能需要涉及到SQL层面的修改,这不仅麻烦, ...
- 基于rv1126 rkmeida 一路多出 原理
基于rv1126 rkmeida 一路多出的坑 首先说要的是介绍一下rkmedia 相关内容 RKMedia提供了一种媒体处理方案,可支持应用软件快速开发.RKMedia在各模块基础API上做进一 ...
- 数据解析之Beautifulsoup
一.BeautifulSoup的简单使用 简单来说,Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据.官方解释如下: Beautiful Soup提供一些简单的.pyt ...