TiXL 的 ScreenCapture 运算符:基于 DXGI 的实时屏幕捕获与录屏实战指南
2026/9/21 14:02:47 网站建设 项目流程
  • 音视频
  • 图形学
  • 桌面应用

【免费下载链接】t3

TiXL is an open source software to create realtime motion graphics.

项目地址:https://gitcode.com/GitHub_Trending/t3/t3
点击查看免费下载

ScreenCapture 是 TiXL 图形化编程框架中位于Lib.io.video命名空间的屏幕捕获运算符,它能够像 OBS(Open Broadcaster Software)一样加载并渲染整个屏幕的内容,输出为可直接接入渲染管线的Texture2D。在实时动效创作中,它常用于录制 TiXL 自身 UI、配合 ScreenCloseUp 模拟“真实摄像机拍摄显示器”的视觉错觉,以及为捕获画面叠加 Pixelate、SortPixel 等 2D 特效。读完本文,你将掌握 ScreenCapture 的参数含义、底层 DXGI 实现原理及其在项目中的典型组合用法。

功能概述:一个可以接入渲染图的“屏幕源”

ScreenCapture 在 TiXL 运算符体系中扮演着“输入源(Source)”的角色:它不产生几何体,也不做图像处理,而是把操作系统层面的整块屏幕内容转成一个可继续向下游传递的纹理。官方描述将其定位为“类似 OBS 的屏幕捕捉软件”,因此它天然适合需要把桌面画面当作素材来驱动动效的场景。

从运算符库的归属来看,它收录于 Lib.io.video 命名空间,与 NdiInput、SpoutInput、VideoDeviceInput 等视频/图像输入类运算符并列,共同构成 TiXL 的“外部画面接入”能力家族。

输入参数详解

ScreenCapture 只暴露两个输入参数,接口非常精简,官方文档定义如下:

名称类型说明
ScreenIndexInt32指定录制哪一块屏幕(例如多显示器系统)
TimeOutInt32定义超时时间

从运算符定义文件 ScreenCapture.t3 可以看到,两个输入在图形化界面中均已提供默认值:

  • ScreenIndex 默认值为 0:即默认捕获主显示器。在多显示器环境下,可以通过切换该值选择其他输出。
  • TimeOut 默认值为 0:对应底层桌面复制 API 的等待超时(毫秒级)。值为 0 时表示尝试立即抓取一帧,不阻塞等待新帧。

参数含义可以在仓库内的 ScreenCapture 源码中得到印证——Update方法中分别通过ScreenIndex.GetValue(context)TimeOut.GetValue(context)读取这两个输入,并直接将其传递给底层的屏幕复制调用(详见下文实现原理一节)。

输出

名称类型
TextureOutputT3.Core.DataTypes.Texture2D

ScreenCapture 只有一个输出TextureOutput,类型为标准 2D 纹理。该输出声明了DirtyFlagTrigger = DirtyFlagTrigger.Always(见源码第 10 行),意味着它每帧都会被强制更新,从而保证桌面画面能以实时帧率持续流入渲染管线——这正是“实时动效”场景所必需的行为。下游任何接受Texture2D的运算符(如 2D 特效、混合节点、输出节点)都可以直接消费这个输出。

源码级实现原理:DXGI Desktop Duplication API

ScreenCapture 的底层实现并不依赖 GDI 位图抓屏,而是使用 DirectX 的桌面复制(Desktop Duplication)机制,这是 Windows 上高效获取屏幕帧的标准方案。完整实现位于 ScreenCapture.cs,核心调用链可以概括为:

DXGI Device ──QueryInterface──> DXGI.Device ──GetParent──> DXGI.Adapter ──GetOutput(ScreenIndex)──> Output ──QueryInterface──> Output1 ──DuplicateOutput(device)──> OutputDuplication ──TryAcquireNextFrame(TimeOut)──> 获取桌面纹理 ──CopyResource──> 拷贝到自建 ShaderResource 纹理 ──ReleaseFrame──> 释放帧

几个值得关注的实现细节:

  1. 屏幕索引的取模处理:源码通过Utilities.InfiniteModIndexer(screenIndex, dxgiAdapter.GetOutputCount())对屏幕索引做取模运算,因此即使传入超出显示器数量的索引(或负值),也会被安全地映射到有效输出上,不会越界崩溃。

  2. 屏幕切换时的资源重建Update方法中缓存了_currentScreenIndex,当 ScreenIndex 输入发生变化时,会先释放旧的OutputDuplication对象再重建,避免跨显示器残留。

  3. 纹理尺寸/格式自适应:当捕获到的桌面纹理分辨率或像素格式发生变化时(例如用户切换分辨率),代码会比较新旧纹理的WidthHeightFormat,不一致时自动重新创建目标纹理(源码第 50-56 行),保证输出始终与当前桌面状态匹配。

  4. 资源生命周期管理:捕获到的桌面资源在using块内完成查询、拷贝,最后通过Utilities.Dispose释放,并在运算符Dispose时统一回收_currentScreen_dup,避免 GPU 资源泄漏。

典型应用场景与运算符组合

官方文档明确给出了三类高频用法,均以 ScreenCapture 的TextureOutput作为链路起点:

1. 录制 TiXL 自身的 UI(Render To File)

ScreenCapture 的输出可以被送入 TiXL 的Render To File窗口,将 TiXL 的界面渲染为文件或图像序列,从而得到一段 TiXL 操作过程的录屏。这在制作教学演示、演出彩排存档等场景中非常实用。Render To File 相关实现位于 Editor/Gui/Windows/RenderExport/RenderWindow.cs(同目录下还有 RenderProcess.cs 与 FfmpegVideoExportWriter.cs,负责视频编码与导出),可作为后续深入了解导出管线的入口。

2. 模拟“真实摄像机拍摄显示器”(ScreenCloseUp)

将 ScreenCapture 的画面喂给 ScreenCloseUp 运算符,它会把 2D 图像贴到 3D 场景中的虚拟 LCD/屏幕上,并通过虚拟相机参数(Zoom、Tilt、DepthOfField、Glossy、FogStrength 等)营造出“用真实摄像机拍摄显示器”的临场感。官方还建议进一步叠加 ChromaticAbberation、ColorGrade、Grain 等运算符来强化真实相机的质感。ScreenCloseUp 的实现位于 Operators/Lib/Symbols/image/fx/stylize/,其.t3ui文件明确注明“Works great with … ScreenCapture”。

3. 为捕获画面叠加 2D 特效

ScreenCapture 的输出是标准Texture2D,因此可以直接串联任意 2D 图像处理运算符,例如:

  • Pixelate(马赛克):实现于 Operators/Lib/Symbols/image/fx/stylize/Pixelate.cs,可对桌面画面做像素化处理,常用于隐私遮挡或风格化表达。
  • SortPixel(像素排序故障效果):对应运算符 Operators/Lib/Symbols/image/fx/glitch/SortPixelGlitch.cs,可以为捕获画面注入赛博故障风。

以 ScreenCapture 为源头,配合 TiXL 节点图的数据流连接方式,用户可以自由构建“桌面画面 → 特效 → 输出”的任意处理链路。

小结

ScreenCapture 是 TiXL 接入桌面画面的最直接入口:参数仅有 ScreenIndex 与 TimeOut 两个整数输入,输出为每帧强制更新的Texture2D;底层基于 DXGI Desktop Duplication 实现,具备屏幕切换自动重建、分辨率自适应、索引取模保护等健壮性设计。无论是用于录屏、模拟摄像机拍摄,还是作为 2D 特效的素材源,它都能以极低的接入成本融入 TiXL 的实时渲染流程。若想继续深入,可阅读 ScreenCapture.cs 的完整实现,或参考 Lib.io.video 运算符清单 中其他视频输入类运算符进行横向对比。

  • 音视频
  • 图形学
  • 桌面应用

【免费下载链接】t3

TiXL is an open source software to create realtime motion graphics.

项目地址:https://gitcode.com/GitHub_Trending/t3/t3
点击查看免费下载
上一篇:从0到1开发FIDO2应用:基于libfido2的认证流程设计与最佳实践
下一篇:New-Bing-Anywhere 未来路线图:ChatGPT 集成与多级缓存策略

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询