序言
在云游戏、云桌面等领域,会经常应用到windows虚拟显示器。在windows设备管理角度,windows的画面是需要输出到显示器设备,通过显示器的面板显示到用户的眼睛。
云游戏、云桌面的windows运行环境是虚拟机,它本身并没有显示器,因此需要借助虚拟显示器技术来帮助云游戏、云桌面的画面输出。
接下来的系列文章是从该项目的源码层面分析windows虚拟显示器的实现,面向的读者是windows开发工程师。如果只是需要使用该项目在windows上创建虚拟显示器,可直接参考项目使用帮助文档。
项目信息介绍
本系列文章基于Mtt Virtual Display项目进行描述,简称MttVDD。这个项目是目前开源的虚拟显示器项目中,功能最完整(支持SDR/HDR,支持x86和/ARM64)。
MttVDD是一个虚拟显示器驱动程序,它能在你的 Windows 电脑中凭空“变出”一个或多个不存在的显示器。
你可以像配置真实硬件一样,通过一个简单的 XML 配置文件来自由定制这些虚拟显示器的所有参数,例如要创建几个显示器、支持哪些分辨率和刷新率,甚至是否启用 HDR 等高级色彩功能。
驱动程序的核心任务是高效地从操作系统接收图像画面,并“假装”将它们显示出来,从而让其他应用程序(如远程桌面、流媒体软件)相信真的有这样一个显示器存在并加以利用。
整体介绍
flowchart TD
A0["间接设备上下文 (IndirectDeviceContext)
"]
A1["交换链处理器 (SwapChainProcessor)
"]
A2["配置与设置管理
"]
A3["EDID与显示器模拟
"]
A4["驱动回调与入口点 (WDF/IddCx Callbacks)
"]
A5["命名管道IPC通信
"]
A6["高级色彩与HDR管理
"]
A7["驱动程序日志系统 (WPP Tracing)
"]
A4 -- "调用核心逻辑" --> A0
A0 -- "创建并管理" --> A1
A2 -- "提供配置" --> A0
A2 -- "决定EDID来源" --> A3
A3 -- "提供色彩元数据" --> A6
A4 -- "设置HDR元数据" --> A6
A5 -- "发送控制命令" --> A0
A0 -- "记录运行状态" --> A7