可以从基于 DirectX 的应用程序捕获图形信息,以便使用 Visual Studio 图形诊断工具来诊断呈现问题。
捕获方法
在 Windows 8.1 中,DirectX 11.2 运行时可代表调试工具(例如图形诊断)从内部捕获图形信息,这种方法称为可靠捕获。 在此支持添加到 DirectX 运行时之前,可通过截获某些 DirectX 函数调用,以在将这些调用转发到 DirectX 的过程完成之前记录参数和其他信息捕获图形信息,这种方法称为旧版捕获。
因为 DirectX 运行时独自负责捕获 Windows 8.1 中的图形信息,所以无需更新旧版捕获即可支持 DirectX 11.2;因此,将弃用旧版捕获。 但是,因为 DirectX 11.2 运行时不支持低于 Windows 8.1 的 Windows 版本,所以 Visual Studio 2013 仍然支持对面向 Windows 8 和 Windows 7 的应用使用旧版捕获。
这两种方法都将记录相似的信息,并且不会更改捕获图形信息或使用图形诊断工具的方式。
可靠捕获
可靠捕获支持 Windows 8.1、Windows RT 8.1 和 Windows Phone 8.1 上的 Visual Studio 2013 图形诊断。 它通过 DirectX 11.2 支持 DirectX 10.0,并且可以捕获有关 Direct3D 11.2 新功能的图形信息(例如,磁贴资源)。 但是,它无法完全支持所有 Direct3D 11.2 功能,例如,你无法调试使用 HLSL 着色器链接功能创建的 HLSL 着色器。 可靠捕获使用新的捕获 API 以支持其编程捕获方案。
旧版捕获
旧版捕获支持 Windows 8、Windows RT 8 和 Windows 7 上的 Visual Studio 2013 和 Visual Studio 2012 图形诊断。 它通过 DirectX 11.1 支持 DirectX 10.0。 旧版捕获不支持任何 Direct3D 11.2 功能,已弃用旧版捕获,不可使用可靠捕获的方案除外。 旧版捕获使用在 vsgcapture.h 头文件中定义的捕获 API 支持其编程捕获方案。 这种编程捕获也已弃用,不可使用可靠捕获的方案除外。
捕获图形信息
捕获图形信息的过程分为两步。 首先,在图形诊断下运行应用程序,然后指定要从中捕获详细信息的一个或多个帧。
在图形诊断下运行应用程序
在菜单栏上,依次选择**“调试”、“图形”、“启动诊断”**。 (键盘:按 Alt+F5)
在**“图形诊断”工具栏上,选择“启动诊断”**按钮。
当应用程序在图形诊断下运行时,将始终捕获某些类型的图形信息;这包括设备设置、交换链的创建、图形对象和资源的创建以及其他影响多个帧的重要事件。 同时,你可以捕获有关特定帧的详细信息;这包括绘图调用和计算着色器调度,以及支持它们的 Direct3D 对象和资源。
捕获帧
在 Visual Studio 的**“图形诊断”工具栏上,选择“捕获帧”**按钮
。
在键盘上,按 Print Screen。
备注
当应用程序在图形诊断下运行时,Print Screen 键只能用于捕获图形信息的帧;不执行其常规功能。这将一直有效,直到你停止捕获图形信息(通常通过停止调试或正常退出应用程序),即使另一应用程序具有焦点时也是如此。
在 Visual Studio 2013 Update 3 中,捕获帧的界面已更改。 在 Visual Studio 捕获接口中,选择位于诊断会话时间线上方的捕获帧按钮,也可选择位于每秒钟帧数泳道下方和之前捕获到的帧右边的捕获帧按钮。 两个按钮均突出显示在下方的图像中。
当您准备检查您捕获的帧时,请按照图像缩略图上方的帧...链接启动 Visual Studio 图形分析,或通过双击该缩略图启动。
只能捕获整帧,因此当你启动捕获时,实际上将记录下一帧中的图形信息。 记录将在显示你从中启动捕获的帧后立即开始,在显示捕获的帧后结束。 应用程序在图形诊断下运行时,可以捕获你所需的多个帧。 如果未捕获任何帧,将丢弃图形日志。
首次捕获帧时,Visual Studio 将显示图形日志 (.vsglog) 文档窗口。 如果关闭图形日志窗口、停止调试或关闭应用程序,则无法继续将任何帧捕获到该日志。 若要捕获更多图形信息,必须在图形诊断下再次运行应用程序以启动新的图形日志。
图形诊断捕获选项
你可以通过配置捕获来收集所有图形事件或有限子集的调用堆栈,禁用捕获 HUD,也可以启用或禁用捕获兼容模式。
配置图形诊断捕获选项
在菜单栏上,依次选择**“工具”、“选项”。 这将显示“选项”**对话框。
在左侧的选项类别列表中选择图形诊断,然后配置所需的图形诊断选项。
在捕获过程中收集调用堆栈(将使捕获速度变慢)
选中该复选框以收集调用堆栈。 默认情况下,调用堆栈将被收集,“用于绘制、调度、呈现和性能标记”将被选定。 如果要捕获所有事件的调用堆栈,请选择“用于全部”。 如果不收集调用堆栈,取消勾选“捕获过程中收集调用堆栈”(将使捕获速度变慢)。捕获过程中禁用游戏中的 HUD
选中此框以禁用在图形诊断下运行的应用通常会显示的 HUD 覆盖。 取消选中以显示 HUD 覆盖。在兼容性模式下捕获
选中此框以在兼容模式下捕获图形信息。 在兼容模式下捕获是默认设置。 在兼容模式下,Direct3D 不会报告 GPU 会支持基本功能级别中所定义的功能范围以外的任何其他功能。 这样可以防止使用特定于硬件的 GPU 扩展将应用捕获到这个 GPU 上,同时确保图形日志可以通过任何支持相同或更高功能级别的 GPU 进行播放。 取消选中此框可禁用兼容模式;兼容模式被禁用时所捕获的日志将不能在任何不支持与应用程序在捕获期间使用的其他功能相同的功能的 GPU 上播放。
远程捕获图形信息
可以从本地计算机或者远程计算机或设备上运行的应用程序捕获图形信息。 Windows 8.1 计算机和 Windows RT 8.1 设备支持远程捕获。 若要从远程运行的应用程序捕获图形信息,请配置你的项目以进行远程调试,然后如之前所述,在图形诊断下运行应用程序。 应用程序在远程计算机上运行,捕获的图形信息将记录在你的开发计算机上。
配置项目以进行远程调试的方式取决于你开发的应用程序类型以及你使用的编程语言。 有关如何对 Windows 应用商店应用配置远程调试的信息,请参阅在远程计算机上从 Visual Studio 运行 Windows 应用商店应用。 有关如何对 Windows 桌面应用程序配置远程调试的信息,请参阅为 Visual Studio 项目设置远程调试。
之后,可以使用远程计算机或设备播放图形信息,而无论信息从何处捕获。 有关详细信息,请参阅如何:更改图形诊断播放机。
从命令行捕获图形信息
可使用命令行工具从应用捕获图形信息。 DXCap.exe 这一工具可以快速捕获和播放图形信息,而不使用 Visual Studio 或编程捕获。 具体而言,你可以使用 DXCap.exe 来实现自动化,或在测试环境中使用。 有关 DXCap.exe 的详细信息,请参阅 命令行捕获工具