这是一个非常有趣且实用的技术,它不仅仅是“显示多个桌面”,而是实现类似 Windows 多任务视图、虚拟显示器、远程桌面流式传输以及游戏串流等高级功能的核心基础。

什么是桌面融合?
我们抛开技术术语,用一个简单的比喻来理解:
想象一下,你有一张透明的玻璃板(一个独立的图形表面),你可以在上面画任何东西(窗口、视频、游戏画面),你有多张这样的玻璃板,桌面融合技术就像一个“投影仪”,它会将所有这些玻璃板上的内容,按照你设定的顺序(从最下面的板到最上面的板),精确地投射并叠加到最终的屏幕上。
关键点:
- 源: 多个独立的图形表面(比如游戏窗口、浏览器窗口、一个全屏视频)。
- 操作: 叠加、合成、混合。
- 目标: 生成一个单一的、最终呈现给用户的图像帧。
DirectX 桌面融合,就是利用 DirectX 的图形能力,高效地在 GPU 上完成这个“投影”和“叠加”的过程。

为什么需要 DirectX 桌面融合?—— 核心优势
传统的窗口管理(GDI 或简单的复制)效率极低,每个窗口都是一个独立的进程,如果要让它们看起来是“融合”在一起的,传统的做法是:
- CPU 从每个窗口的内存中抓取像素数据。
- CPU 在内存中进行逐像素的混合计算(透明度、颜色等)。
- CPU 将混合后的最终图像数据写回显存。
- GPU 再将显存中的图像显示到屏幕上。
这个过程涉及大量的CPU-GPU 数据传输,并且CPU 承担了繁重的混合计算任务,性能瓶颈非常明显,尤其是在窗口多、内容复杂(如视频、游戏)的情况下。
DirectX 桌面融合的优势在于:
- GPU 加速: 所有的叠加、混合、缩放、特效(如模糊、淡入淡出)等操作,都在 GPU 上通过 GPU-Driven Rendering 的方式完成,CPU 只需要告诉 GPU “把 A 画面放在这里,把 B 画面放在那里,B 是半透明的”,GPU 就会高效地执行。
- 降低 CPU 负担: 将计算密集型任务从 CPU 转移到 GPU,极大地解放了 CPU,使其可以处理其他逻辑任务。
- 高性能和低延迟: 由于避免了 CPU-GPIO 之间的频繁数据拷贝,整个过程非常高效,能够实现接近实时的帧率,这对于游戏串流、VR/AR 等低延迟场景至关重要。
- 丰富的视觉效果: 可以轻松实现窗口的透明、模糊、动画、3D 变换等复杂的视觉效果,因为这些正是 GPU 擅长的。
DirectX 桌面融合的技术实现
要实现桌面融合,你需要一个“管理者”来协调所有的“玻璃板”,在 DirectX 中,这个管理者就是 Desktop Window Manager (DWM)。

DWM 是 Windows Vista 引入的现代桌面合成器,它本身就是桌面融合技术的最大应用者,当你使用 Windows 的 Aero 效果、窗口拖动动画、多任务视图(Win + Tab)时,你就在体验 DWM 的工作成果。
核心 DirectX API 和组件:
-
IDXGIOutputDuplication (最核心的 API):
- 这是实现桌面融合的“秘密武器”,它允许你捕获整个显示器输出的图像流,而不仅仅是单个窗口。
- 工作流程:
- 你的应用程序(如游戏串流客户端)创建一个 IDXGIOutputDuplication 对象。
- 它调用
AcquireNextFrame()来获取当前屏幕的下一帧图像。 - 这帧图像是一个包含了所有已合成窗口的最终结果,你可以把它看作是 DWM 交给你的“成品玻璃板”。
- 你的应用可以将这个捕获的帧作为纹理,与自己的 UI 界面(如控制按钮、状态栏)进行二次融合,然后再显示出来,这正是游戏串流(如 Steam Link, Xbox app)的工作原理:远程游戏画面 + 本地 UI 叠加 = 最终看到的画面。
-
DirectComposition / Windows.UI.Composition (现代化的 API):
- 这是比 DWM 更底层、更灵活的合成 API,它允许应用程序直接创建和管理自己的视觉层,并将它们融合到桌面上。
- 你可以创建一个
Visual树,每个Visual都可以关联一个 DirectX 纹理(比如一个视频、一个游戏画面)。 - 你可以精确控制每个
Visual的位置、大小、透明度、旋转、3D 变换和特效(如模糊)。 - 应用场景:
- 自定义 Shell: 开发自己的桌面环境。
- 高级窗口效果: 创建具有复杂动画和透明效果的自定义窗口。
- 混合现实: 将虚拟物体(来自 DirectX 应用)与真实桌面环境进行融合。
-
Windows Graphics Capture API (现代的替代方案):
- 这是较新(Windows 10 1903+)且更推荐的 API,用于替代老旧的 Screen Capturing API。
- 它提供了更精细的控制,可以指定捕获整个屏幕、单个窗口、甚至是窗口的一个区域。
- 它与 DirectX 12 的互操作性更好,性能更高,虽然它的名字是“捕获”,但它获取到的帧也是经过 DWM 合成的结果,因此是实现桌面融合数据输入的理想选择。
典型应用场景
理解了技术原理,我们来看看它到底用在哪些地方:
-
游戏串流:
- 场景: 你在客厅的电视上玩 PC 游戏。
- 流程: PC 上的游戏程序 -> DWM 将游戏窗口融合到桌面 -> Steam Link/Xbox App 使用
IDXGIOutputDuplication捕获整个游戏桌面 -> 将捕获的帧与自己的控制 UI 进行融合 -> 通过网络串流到电视上的客户端 -> 客户端显示最终融合后的画面。
-
远程桌面 / 虚拟化:
- 场景: 你通过远程桌面连接到办公室的电脑。
- 流程: 远程电脑的桌面环境 -> DWM 在远程电脑上融合所有窗口 -> 远程桌面客户端捕获融合后的桌面帧 -> 压缩 -> 传输 -> 本地客户端解压并显示,你看到的是一个完整的、已合成的桌面,而不是一个个独立的窗口流。
-
多任务视图 (Timeline / Task View -
Win + Tab):- 场景: 你按下
Win + Tab,看到所有打开窗口的缩略图。 - 流程: DWM 捕获每个窗口的内容 -> DWM(或专门的 UI 框架)将这些缩略图与背景、文字等 UI 元素融合 -> 最终呈现在你面前。
- 场景: 你按下
-
虚拟显示器:
- 场景: 你开发了一个应用,需要在不连接物理显示器的情况下运行。
- 流程: 应用创建一个虚拟的 IDXGIFactory 和输出 -> DWM 将这个虚拟输出视为一个显示器 -> 应用可以在上面绘制内容 -> 其他应用可以通过
IDXGIOutputDuplication捕获这个虚拟显示器的内容。
-
直播推流软件 (如 OBS, Streamlabs):
- 场景: 你在玩游戏的同时,想将游戏画面和你的摄像头画面、聊天弹幕叠加在一起进行直播。
- 流程: OBS 使用 Windows Graphics Capture API 分别捕获游戏窗口和摄像头窗口 -> OBS 的场景编辑器将这些来源作为独立的图层进行排列和融合 -> OBS 的输出模块将最终融合的画面进行编码并推送到直播平台。
DirectX 桌面融合技术并非一个单一的 API,而是一套基于 DirectX、由 DWM 作为核心执行者,利用 GPU 加速来高效地合成、叠加多个图形源的底层架构和理念。
它的核心价值在于:
- 性能: 将复杂的图像合成任务交给 GPU,实现高性能和低延迟。
- 统一: 为所有需要处理多窗口、多源图像的应用提供了一个统一、高效的底层解决方案。
无论是你体验 Windows 日常的窗口动画,还是在享受流畅的游戏串流,背后都有 DirectX 桌面融合技术的强大支持,对于开发者而言,掌握 IDXGIOutputDuplication 和 DirectComposition 等技术,是构建现代、高性能图形应用的关键。
