命令窗格

“命令”窗格显示应用程序发出的调用,按帧和绘图调用或按用户标记进行分组。

Initial View of either an OpenGL or Vulkan trace
图 1. OpenGL 或 Vulkan 跟踪的初始视图
Viewing an OpenGL trace
图 2. 查看 OpenGL 跟踪
Viewing a Vulkan trace
图 3. 查看 Vulkan 跟踪
Viewing a Vulkan trace
图 4. 在 Vulkan 跟踪中搜索命令

操作

您可以在此窗格中执行以下操作

操作 说明
显示结果 点击命令或组以更新其他窗格,使其反映所选命令或组之后的状态。
展开或收起命令层次结构 点击分组左侧的灰色三角形或双击分组以展开或收起它。
搜索 在窗格顶部的搜索栏中输入字符串,然后按 Return(请参见上图)。要查找下一个匹配项,请确保选中搜索栏并再次按 Return

选中 Regex 框以使用正则表达式搜索模式。例如,glClear.* 匹配命令 glClear()glClearColor()。您还可以搜索命令参数值,例如缓冲区:2,其在 glBindBuffer() 中使用。
编辑 右键点击命令并选择编辑。在编辑对话框中,更改一个或多个值,然后点击确定。注意:这仅对 Vulkan 命令有效,对 OpenGL 命令无效。
查看状态或内存信息 点击引用状态参数(例如纹理 ID)的命令参数。状态窗格会显示附加信息。点击内存地址或指针以打开内存窗格。注意:这仅对 Vulkan 命令有效,对 OpenGL 命令无效。
复制命令 选择窗格中的项目,然后按 Control+C(或 Command+C)以复制带有参数值的命令。您可以将此信息粘贴到文本文件中。
放大缩略图 缩略图显示在调用的左侧,如下图所示。将光标悬停在缩略图上以将其放大。
CAPTION

OpenGL ES 命令层次结构

OpenGL ES 命令被转换为 Vulkan,并对 Vulkan 命令进行分析。因此,OpenGL ES 命令显示为在展开的层次结构中同时包含 OpenGL ES 和 Vulkan 命令。在前面的示例中,您可以看到 RenderPass 下有多个 glDrawElement 命令。第二个 glDrawElements 命令层次结构已展开,并显示OpenGL ES CommandsDrawIndexed。您可以展开这两个层次结构以显示相关的 OpenGL ES 命令,以及它们所转换成的 Vulkan 命令。

由于 OpenGL ES 和 Vulkan 之间不存在一对一关系,因此可能存在一些差异。例如,在第一个 glDraw* 命令之前发生的 glClear 命令显示在 RenderPass 之前。如果您展开 glClear 的层次结构,将没有 Vulkan 命令。这是因为清除将被推迟并作为启动 Vulkan RenderPass 的一部分完成。

调试标记

根据您的应用,命令窗格可能包含一个帧内非常长的命令列表。为了更好地导航和可读性,您可以定义调试标记,将调用分组到树中的标题下。这可以包括一个分组,例如,命名为“Setup”或“Render World”。

如果启用了调试标记,请点击命令窗格以显示指向此信息的链接。OpenGL ES 具有以下 API 来分组命令

扩展名/版本 PUSH POP
KHR_debug glPushDebugGroupKHR() glPopDebugGroupKHR()
EXT_debug_marker 字符串 字符串
OpenGL ES 3.2 字符串 字符串

Vulkan 具有以下 API 来分组命令

扩展名/版本 PUSH POP
VK_EXT_debug_marker glPushDebugGroupKHR() glPopDebugGroupKHR()