首页/新闻资讯/正文详情

RenderDoc Python 脚本入门:在 UI 中编写并运行你的第一个自动化分析脚本

发布时间:2026/9/24 0:30:27 来源:云帆数科 栏目:资讯中心
RenderDoc Python 脚本入门:在 UI 中编写并运行你的第一个自动化分析脚本
开发工具调试器图形学GPU【免费下载链接】renderdocRenderDoc is a stand-alone graphics debugging tool.项目地址https://gitcode.com/gh_mirrors/re/renderdoc点击查看免费下载本文是 RenderDoc 内置 Python 脚本能力的零基础实战指南。围绕官方教程docs/python_api/first_steps.rst与配套脚本docs/python_api/first_steps.py你将学会如何打开 Python Scripting 面板、借助预置全局变量pyrenderdoc访问当前捕获与事件信息、查询管线颜色输出与深度目标并在 REPL 与输出面板之间完成交互式调试。读完本文你将掌握用 Python 快速巡检任一捕获文件的核心套路为后续编写一键式 UI 扩展与自动化分析脚本打下基础。打开 Python Scripting 面板在 RenderDoc 主界面中通过菜单Window→Python Scripting即可打开 Python 脚本面板。这是所有脚本工作的入口无论是临时执行一段分析代码还是编辑、加载、运行保存的脚本文件都在这里完成。面板由三个核心区域组成与源码qrenderdoc/Windows/PythonShell.cpp中PythonShell类的实现一一对应主区域脚本编辑器一个多标签的代码编辑器支持编写 Python 代码、加载和保存脚本、一键运行。编辑器内置语法检查与自动补全autocomplete源码中通过doSyntaxCheck()定时器与m_SyntaxCheckTimer实现延迟语法检查并在退出自动补全后触发避免在用户编辑过程中打扰输入。左侧项目浏览器展示最近加载过的文件、已安装的 UI 扩展UI extensions以及若干随 RenderDoc 预置的示例脚本可直接加载并运行。底部交互式 REPLread-evaluate-print loop可以逐行交互式地执行 Python 语句同区域还有标签页分别展示脚本的文本输出、错误信息以及帮助信息。源码中对应的replGroup标题即为 Interactive REPL。运行脚本时脚本内print()语句的输出会被送往底部输出面板如果该面板当前处于隐藏状态运行脚本时会自动显示。Python 异常同样会打印到该输出面板。你的第一个脚本巡检当前事件与输出目标打开任意一个捕获文件例如一个 Vulkan 捕获然后编写下面这段脚本。你可以直接复制粘贴也可以逐字敲一遍以体验编辑器实时提供的自动补全信息。这段代码同样以Tutorial: First Steps with Python为名预置在项目浏览器的Examples部分加载即可运行。if not pyrenderdoc.IsCaptureLoaded(): filename pyrenderdoc.Extensions().OpenFileName(Choose a capture, , *.rdc) pyrenderdoc.LoadCapture(filename, renderdoc.ReplayOptions(), filename, False, True) eid pyrenderdoc.CurEvent() name pyrenderdoc.GetEventBrowser().GetEventName(eid) print(fCurrently we are at EID {eid} named: {name}) if eid 1: prevname pyrenderdoc.GetEventBrowser().GetEventName(eid - 1) print(f the previous event {eid-1} is named: {prevname}) pipe pyrenderdoc.CurPipelineState() outputs pipe.GetOutputTargets() for idx, out in enumerate(outputs): if out.resource ! renderdoc.ResourceId.Null(): name pyrenderdoc.GetResourceName(out.resource) print(fOutput {idx} is: {name}) depth pipe.GetDepthTarget() name pyrenderdoc.GetResourceName(depth.resource) print(fDepth is: {name})点击Run之后输出窗口会得到类似下面的结果Currently we are at EID 9408 named: vkCmdDrawIndexed(123, 2) the previous event 9407 is named: vkCmdBindDescriptorSets(1, { Descriptor Set 692529 }) Output 0 is: 2D Color Attachment 690491 Output 1 is: 2D Color Attachment 690493 Output 2 is: 2D Color Attachment 690496 Output 3 is: 2D Color Attachment 690498 Output 4 is: 2D Color Attachment 690500 Depth is: 2D Depth Attachment 690502逐段拆解理解背后的 APIpyrenderdocUI 侧 API 的入口在 RenderDoc UI 中运行脚本时存在一个预填充的全局变量pyrenderdoc它是访问 API 的入口。该变量是qrenderdoc.CaptureContext的实例完整成员见 API 参考qrenderdoc 主接口提供当前事件、加载/关闭捕获等通用数据也持有事件浏览器等面板的句柄。这一点在源码中有直接印证qrenderdoc/Windows/PythonShell.cpp的PythonShell::scriptHeader()在启动控制台时打印的提示文本明确写道The pyrenderdoc object is the current CaptureContext instance. The renderdoc and qrenderdoc modules are available.也就是说脚本环境中renderdoc与qrenderdoc两个模块都已预先导入renderdoc是底层核心 API对应docs/python_api/renderdoc/index.rstqrenderdoc是 UI 专用接口。脚本中可以直接使用而无需import不过为了在 VS Code 等外部 IDE 中获得正确的自动补全与类型检查官方示例仍会在文件头部加上一段前置声明参见 Python FAQ为什么示例带有 pyrenderdoc 前置声明# these imports are not strictly necessary, but are convenient import renderdoc import qrenderdoc # this is here to give autocomplete when editing the example # in VS Code where it doesnt know about this global from typing import TYPE_CHECKING if TYPE_CHECKING: pyrenderdoc qrenderdoc.CaptureContext()这段代码在真实运行时什么都不做TYPE_CHECKING在运行时为False仅用于让 IDE 的静态检查器认识pyrenderdoc的类型。确保有捕获文件可分析if not pyrenderdoc.IsCaptureLoaded(): filename pyrenderdoc.Extensions().OpenFileName(Choose a capture, , *.rdc) pyrenderdoc.LoadCapture(filename, renderdoc.ReplayOptions(), filename, False, True)脚本的第一步是检查当前是否已加载捕获IsCaptureLoaded()返回布尔值若未加载则通过Extensions().OpenFileName()弹出文件选择对话框标题为 Choose a capture过滤*.rdc文件随后用LoadCapture()加载该文件。注意LoadCapture需要传入renderdoc.ReplayOptions()——一个用于控制回放行为的配置对象默认构造即可其余参数依次为文件名、以及控制加载方式与是否显示日志等标志。查询当前事件及其名称eid pyrenderdoc.CurEvent() name pyrenderdoc.GetEventBrowser().GetEventName(eid) print(fCurrently we are at EID {eid} named: {name}) if eid 1: prevname pyrenderdoc.GetEventBrowser().GetEventName(eid - 1) print(f the previous event {eid-1} is named: {prevname})pyrenderdoc.CurEvent()返回当前事件 IDEIDEvent ID。关于事件 ID 的语义参见 事件 ID 详解捕获内的事件都被分配整型 EID捕获中第一个真实事件的 EID 为 1EID 0 表示第一个事件发生之前的那个时刻。绘制draw、分发dispatch、拷贝copy等动作也都是事件同样获得 EID。EID 通常与应用的函数调用一一对应但并不保证例如多绘制multi-draw或间接执行中一次 CPU 侧函数调用可能对应多个 GPU 事件因此会产生多个 EID。而 当前事件 的含义参见 当前帧事件RenderDoc 中所有信息纹理/缓冲区内容、管线状态等都反映在某个虚拟时刻——即 GPU 上某个事件执行完毕之后的瞬间。当前事件就是该时刻所在的位置其 EID 由CurEvent()给出。当选中一个包含大量子事件的标记区域marker region时selected 事件是该区域的根事件而 current 事件是区域内最后一个子事件执行完毕后的有效事件。拿到 EID 后pyrenderdoc.GetEventBrowser()返回qrenderdoc.EventBrowser其GetEventName(eid)可查询事件的格式化名称例如vkCmdDrawIndexed(123, 2)。读取管线状态与输出目标pipe pyrenderdoc.CurPipelineState() outputs pipe.GetOutputTargets()CurPipelineState()返回renderdoc.PipeState这是对当前管线状态的一个子集的抽象屏蔽了底层 APIVulkan / D3D11 / D3D12 / OpenGL 等的差异对所有捕获都可用。它并不覆盖所有状态——尤其是各 API 之间差异较大的部分——但对简单用法非常方便。PipeState.GetOutputTargets()返回颜色输出目标列表。需要特别注意的是某些 API 拥有固定数量的输出槽位且可能稀疏填充因此该列表中可能包含未绑定的资源。脚本中通过out.resource ! renderdoc.ResourceId.Null()跳过未绑定项ResourceId.Null()是空资源 ID 的哨兵值资源 ID 的详细说明见 资源 ID再调用pyrenderdoc.GetResourceName(out.resource)把资源 ID 翻译成可读名称打印出来for idx, out in enumerate(outputs): if out.resource ! renderdoc.ResourceId.Null(): name pyrenderdoc.GetResourceName(out.resource) print(fOutput {idx} is: {name})这里enumerate()是 Python 内置函数对列表中的每个元素返回(下标, 元素)成对结果从而在打印时同时给出输出槽位索引与资源名称。深度目标用同样的机制单独查询并打印depth pipe.GetDepthTarget() name pyrenderdoc.GetResourceName(depth.resource) print(fDepth is: {name})输出面板、异常与sys.exit()脚本运行期间print()的内容会送到底部输出面板面板隐藏时会自动弹出未捕获的 Python 异常同样打印到该面板。一个常见疑问是脚本中途退出在 UI 中运行脚本时调用sys.exit()是安全的它只会中止当前脚本而不会关闭 RenderDoc 本身。这一点与命令行模式有重要区别——参见 Python FAQ以--py path/to/script.py启动 RenderDoc UI脚本会在初始化早期、UI 创建并显示之前执行可用于无头headless执行或批处理此场景下调用sys.exit()会导致 RenderDoc 进程退出。以--ui-py path/to/script.py启动则会等 UI 显示后打开 Python 脚本窗口并把指定脚本作为新标签页加载运行。编写脚本时的几个实用提醒结合 Python FAQ 与源码行为初学时值得注意以下几点API 是 C 的薄封装错误校验有限。RenderDoc 的 Python 绑定是对 C API 的轻量包装传入语义无效的数据例如把纹理的 ResourceId 传给期望着色器的函数可能导致崩溃或数据损坏脚本中不应依赖健壮的错误检查。注意对象生命周期。Python 引用计数与 C 对象生命周期不一定一致捕获关闭后即使 Python 仍持有句柄底层 C 对象可能已被清理继续使用可能导致崩溃。常见场景是缓存了关闭前的捕获信息。部分对象只读不可修改。大多数返回给 Python 的列表与对象是拷贝、可自由修改但ShaderReflection、捕获的ActionDescription其兄弟/子节点按引用关联、以及SDFile中的SDObject与缓冲区是按引用返回的修改这些对象可能破坏内部数据甚至导致崩溃。REPL 中对象预览不友好时可使用renderdoc.DumpObject。直接打印对象可能得到Swig Object of type FooBar * at 0x...这类无意义输出用DumpObject(obj)可以展示结构体的属性内容。调试器集成RenderDoc 支持 VS Code 调试但需按 IDE 集成指南 配置注意 RenderDoc 只监听一个固定端口多个 UI 实例同时打开时只有第一个能调试 Python 代码。从一次性脚本走向 UI 扩展本文只是 5 分钟的极简入门pyrenderdocCaptureContext上下文中还有大量能力没有展开你可以通过浏览 Python API 文档 或直接在编辑器中体验自动补全来探索。接下来推荐两条进阶路径阅读示例库查看 Python 示例索引 中预置的show_buffer、show_texture、iter_actions、pipe_state、mesh_output、event_filter等示例它们覆盖了常见的分析工作流缓冲区查看、纹理查看、动作遍历、网格输出、事件过滤等每个示例的源码都可从脚本面板的Examples部分直接加载运行。编写 UI 扩展如果不想每次都手动打开并运行脚本下一步就是创建一个 UI 扩展——在扩展目录Windows 为%APPDATA%\qrenderdoc\extensionsLinux 为~/.local/share/qrenderdoc/extensions下通过extension.json与__init__.py注册即可把脚本固化为一键可用的界面功能。完整的开发流程见 UI 扩展教程 与 深入话题覆盖回放控制器、远程回放、结构化数据、shader 反射等。如果你需要脱离 UI、在独立 Python 解释器中加载renderdoc模块做最底层的自动化控制可以参考 手动使用 Python 模块——不过官方明确提示这是高级用法编写脚本或扩展定制 UI 并不需要它。以上所有脚本行为均可在本仓库源码中验证面板实现位于 qrenderdoc/Windows/PythonShell.cpppyrenderdoc全局变量的来源与说明见其中的scriptHeader()约第 2419-2426 行完整教程原文与配套脚本分别位于 docs/python_api/first_steps.rst 与 docs/python_api/first_steps.py。赞分享开发工具调试器图形学GPU【免费下载链接】renderdocRenderDoc is a stand-alone graphics debugging tool.项目地址https://gitcode.com/gh_mirrors/re/renderdoc点击查看免费下载相关推荐Tampermonkey脚本编写入门从零开始创建你的第一个用户脚本Tampermonkey用户脚本管理器是全球最受欢迎的浏览器扩展之一拥有超过1000万用户。它能让你轻松创建和管理自定义脚本为任何网页添加个性化功能。无论你前端插件系统Nextflow入门指南编写你的第一个数据处理脚本Nextflow入门指南编写你的第一个数据处理脚本 前言 Nextflow是一个强大的工作流框架专为数据密集型计算而设计。它结合了DSL领域特定语言的强Vue3-Vant-Mobile一站式移动端H5应用开发解决方案Vue3 Vant Mobile一站式移动端H5应用开发解决方案 在移动互联网时代如何快速构建高质量的H5应用是前端开发者和产品经理面临的核心挑战。传统移动前端示例工程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

PX4 中 AMOVLAB Flycore 板级支持的开源许可证全景解析:BSD、Apache、MIT 与 CC-BY 的合规边界
PX4 中 AMOVLAB Flycore 板级支持的开源许可证全景解析:BSD、Apache、MIT 与 CC-BY 的合规边界

嵌入式物联网机器人自动驾驶智能硬件 【免费下载链接】PX4-Autopilot PX4 Autopilot Software 项目地址: https://gitcode.com/gh_mirrors/px/PX4-Autopilot 点击查看 免费下载 AMOVLAB Flycore 是 PX4 支持的一款 STM32H7 飞控硬件,其固件镜像由 PX4 板… · 2026/9/24 0:30:08

OpenStock开源项目:手把手搭建A股行情数据采集与展示系统
OpenStock开源项目:手把手搭建A股行情数据采集与展示系统

要说最近在金融数据这个圈子里有什么值得自己动手玩一玩的开源项目,OpenStock绝对算一个。简单来说,OpenStock是一套开源的股票行情数据采集、存储与展示系统,它把A股行情源、数据库、API服务和前端展示整个链路的代码全部开放出来&#xff0… · 2026/9/24 0:30:02

GC-MS气相色谱质谱联用技术全解析:从原理到应用实践
GC-MS气相色谱质谱联用技术全解析:从原理到应用实践

做分析这行的人,手机里十个有八个装着跟GC-MS有关的文档,但真被问起“气相色谱质谱法到底是怎么一回事”,能一气儿说清楚的还真不多。GC-MS,全称Gas Chromatography-Mass Spectrometry,中文叫气相色谱质谱联用仪&#… · 2026/9/24 0:29:56

微博热点舆情聚类实战:从爬虫清洗到TF-IDF与KMeans的完整链路
微博热点舆情聚类实战:从爬虫清洗到TF-IDF与KMeans的完整链路

简介:面向对Python文本挖掘与舆情分析感兴趣的学习者,资源以微博热点话题为对象,完整提供了从数据采集、分词处理到聚类分析的项目源码与配套数据。核心依赖包括jieba分词、pandas数据处理、scikit-learn机器学习、matplotlib可视化与request… · 2026/9/24 1:04:28

GMM运动目标检测实战:RGB背景建模与OpenCV跟踪
GMM运动目标检测实战:RGB背景建模与OpenCV跟踪

简介:这份资源面向计算机视觉入门与进阶学习者,聚焦基于混合高斯模型(GMM)的运动目标检测与目标跟踪实现,适合需要理解背景建模、前景分离与多帧目标定位的读者参考。压缩包共2个文件,包含1个m脚本与1个txt… · 2026/9/24 1:04:10

MIT-BIH心电图转PNG数据集:9万张224×224开箱即用图像
MIT-BIH心电图转PNG数据集:9万张224×224开箱即用图像

简介:本资源是一套面向深度学习初学者与心电信号处理研究者的实用工具包,解决MIT-BIH ECG原始数据(.dat/.hea/.atr等)难以直接用于图像模型训练的痛点。提供完整Python脚本,可一键将原始心电记录转换为标准PNG/JPEG格式… · 2026/9/24 1:04:10

分层负采样HiNS:提升对话系统意图识别准确率的核心技术
分层负采样HiNS:提升对话系统意图识别准确率的核心技术

1. 为什么传统负采样在智能对话系统里“越训越偏”我第一次在工业级对话系统上线分层负采样(HiNS)时,团队里有位做了八年NLP的老同事直接摇头:“你这不就是把简单问题复杂化?负样本不就是随机挑几个错的回复就行&#… · 2026/9/24 1:04:04

CNN-GRU-Attention时间序列预测:原理、实现与踩坑指南
CNN-GRU-Attention时间序列预测:原理、实现与踩坑指南

简介:面向电气领域预测任务的深度学习项目资源包,以Python语言实现卷积神经网络、门控循环单元与注意力机制融合的混合模型,适用于电力需求预测、设备故障诊断等典型时序场景。压缩包共8个文件,包括4个文本说明(模型介… · 2026/9/24 1:03:58

Python实现股价预测:LR、LSTM、ARIMA、KNN模型对比与工程实践
Python实现股价预测:LR、LSTM、ARIMA、KNN模型对比与工程实践

简介:Python实现机器学习股价预测源码包,集成线性回归(LR)、长短期记忆网络(LSTM)、ARIMA、KNN等多种主流模型,覆盖数据预处理、模型训练、回测与可视化全流程,代码含详细注释&#… · 2026/9/24 1:03:58

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13

1D-CNN时间序列建模实战:从Conv1d原理到工业落地
1D-CNN时间序列建模实战:从Conv1d原理到工业落地

简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26

柔软的L:汉语语流中被忽视的舌肌张力控制
柔软的L:汉语语流中被忽视的舌肌张力控制

1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码