Skia viewer 工具完全指南GM/SKP/SVG 可视化与着色器实时调试【免费下载链接】skiaSkia is a complete 2D graphic library for drawing Text, Geometries, and Images. See documentation for contribution instructions.项目地址: https://gitcode.com/gh_mirrors/ski/skiaviewer是 Skia 仓库内置的交互式图形查看工具用于可视化 GMsGolden 测试图、SKP 录制文件、SVG 矢量图以及 MSKP、Lottie 动画等素材并提供基于 ImGui 的调试 HUD 对着色器进行实时检视与修改。本文基于 viewer 使用文档 并结合源码完整讲解它的命令行参数、键盘交互、着色器调试流程与典型工作流读完即可独立用它检查渲染结果、定位绘制与着色器问题。viewer 是什么从源码看它的角色viewer的完整实现位于 tools/viewer/Viewer.cpp入口在 Application::Create它创建Viewer实例并驱动tools/window下的原生窗口系统。与dm无头批量跑测试、nanobench基准测试不同viewer 的核心价值是人机交互把测试用例组织成一个个 slide幻灯片通过 GUI 逐张查看、放大、切换后端并实时观察 GPU 渲染与着色器编译结果。slide 的来源非常丰富initSlides 中注册了外部文件到 slide 类型的映射扩展名Slide 类型对应命令行参数.skpSKPSlide--skps.mskpMSKPSlide--mskps.jpg/.jxlImageSlide--jpgs/--jxls.gif/.webpAnimatedImageSlide--jpgs.jsonSkottieSlide需SK_ENABLE_SKOTTIE--lotties.svgSvgSlide需SK_ENABLE_SVG--svgs也就是说viewer 不仅能看内置 GM还能直接把目录里的 SKP、SVG、动图等文件批量加载为可翻页的 slide。构建与基础用法构建viewer目标与构建其他 Skia 工具一致在构建产物目录下直接运行# 假设已用 GN 生成 Debug 构建args 中包含 is_debugtrue 等 out/Debug/viewer --match pattern未加任何筛选参数启动时viewer 会进入全部 slide 列表可用键盘翻页浏览。最基本的目标是快速核对某个 GM 的绘制结果例如out/Debug/viewer --match alphagradients启动后直接定位到名称匹配alphagradients的 GM slide。也可以先列出所有可用的 slide 名称out/Debug/viewer --list--list只打印名称后退出对应源码中 FLAGS_list 与 listNames 调用适合先用它确认名称再配合--match精准打开。命令行参数全解匹配与筛选--match/-m按名称过滤 slide默认是大小写敏感的连续子串匹配。源码 FLAGS_match 的完整定义 还支持更精确的模式[~]前缀~表示该名称始终跳过[^]前缀^要求名称以该子串开头[$]后缀$要求名称以该子串结尾^与$同时使用表示精确匹配多个匹配子串用空格分隔任一命中即入选。--slide name启动后从指定名称的 slide 开始源码在 FLAGS_slide 处理处找不到该名称时会向 stderr 报Unknown slide并继续。--backend/-b选择渲染后端默认sw。详见下一节。--skps dir从目录读取.skp文件默认目录名为skpsAndroid 上为/data/local/tmp/skps见 FLAGS_skps 定义。--svgs dir读取目录下所有 SVG也可直接传单个 SVG 文件路径见 FLAGS_svgs 定义。--file/-f直接打开单个文件查看FLAGS_file。渲染后端选择--backend的合法取值在源码中通过宏按构建配置拼接BACKENDS_STR实际可用值取决于构建时启用的后端。完整候选包括取值含义平台/构建前提swCPU 光栅化Raster默认值始终可用glOpenGLGanesh需SK_GLvkVulkanGanesh需SK_VULKAN且 Linux/WindowsmtlMetalGanesh需SK_METAL且 macOS/iOSd3dDirect3DGanesh需SK_DIRECT3D且 WindowsangleANGLE 封装Ganesh需SK_GLSK_ANGLE且 Windows/macOSgrvkVulkanGraphite需SK_GRAPHITESK_VULKANgrmtlMetalGraphite需SK_GRAPHITESK_METALgrdawn_d3d11/grdawn_d3d12/grdawn_metal/grdawn_gles/grdawn_vkDawn 后端Graphite需SK_GRAPHITESK_DAWN按平台裁剪源码中get_backend_typeViewer.cpp#L472 起负责把字符串映射为窗口后端枚举。运行时按b键可在已构建且可用的后端之间循环切换这也是对比 CPU/GPU 渲染差异的最快方式。窗口与显示--width n、--height n初始窗口尺寸。--stats启动时显示统计浮层FLAGS_stats对应fStatsLayer.setActive(FLAGS_stats)。--redraw开启连续重绘用于动画类 slideFLAGS_redraw运行时也可按r切换。--msaa n子像素采样数0表示关闭硬件抗锯齿FLAGS_msaa。--resourcePath/-i资源根目录。当界面中出现字体、图片等资源加载失败时优先检查该路径是否正确。Android 构建会在 Viewer 构造函数中强制设置 为/data/local/tmp/resources桌面端需通过此参数显式指定。其他常用参数--threads/-j控制线程池大小默认每核一线程FLAGS_threads--bisect file对指定 skp/svg 文件做二分定位--offscreen强制离屏渲染。交互控制键盘快捷键Viewer构造函数中通过fCommands.addCommand注册了大量按键绑定Viewer.cpp#L797 起下表将原文档列出的快捷键与当前源码中的实际绑定对应起来按键功能[/]上一张 / 下一张 slideb在可用后端之间循环Cycle backendsm切换 MSAA 抗锯齿i显示 / 隐藏 ImGui 调试浮层HUDz/Z开关缩放窗口 / 固定缩放窗口状态源码 z、Z 绑定h开关颜色直方图窗口当前源码中直方图绑定为C见 addCommand(C)注意不同版本可能略有差异s保存当前 slide 为 PNG同时源码中s还承担统计浮层开关addCommand(s)c循环切换颜色模式Legacy / 颜色管理 8888 / F16 等wGanesh 后端下切换线框渲染v/V切换 vsync / 延迟获取 drawableMetalr切换连续重绘空格开关调试 GUI/或 Backspace直接跳到 slide 选择器picker并聚焦0重置统计测量按键绑定属于 UI 实现细节具体版本间可能调整若按键无响应以i打开的 ImGui HUD 内提供的菜单项为准。Shader 检视与实时修改ImGui HUD这是 viewer 区别于普通预览器的最强能力。操作流程启动后按i唤出 ImGui HUD打开Shaders窗口即可查看当前 slide 用到的SkSL 源码以及编译产物如 GLSL / SPIR-VSPIR-V 查看依赖SK_VULKAN构建时链接的 spirv-tools见 Viewer.cpp#L133-L135直接在窗口内修改 SkSL 并即时生效用于排查 shader 问题无需重新编译整个应用。这套能力由专门的 slide 支撑SkSLSlidetools/viewer/SkSLSlide.cpp与SkSLDebuggerSlidetools/viewer/SkSLDebuggerSlide.cpp——后者相当于一个可交互的 SkSL 调试器可用于单步观察 shader 执行与变量取值。HUD 中还提供 Dump SkSL to resources/sksl/ 按钮Viewer.cpp#L3260可将当前 SkSL 导出到资源目录便于留存最小复现用例。此外Ganesh 后端下 viewer 还挂接了CapturingShaderErrorHandlerViewer.cpp#L161-L180会在编译失败时捕获 shader 与错误文本供 HUD 展示。实战工作流示例1. 查看指定的 GMout/Debug/viewer --match alphagradients用[/]在相近命名的 GM 之间切换按b对比sw与 GPU 后端的差异按z放大检视边缘锯齿配合m调整 MSAA。2. 检视 SKP 录制文件out/Debug/viewer --skps /path/to/skp --match file_name_without_extension--skps会把目录内的.skp注册为skp-dir组的 slideViewer.cpp#L1171-L1176slide 名称即文件名不含扩展名因此--match直接传文件名即可命中。若文件较多可先用--list确认名称。3. 查看 SVG 与动图素材# 目录形式加载整个目录的 SVG out/Debug/viewer --svgs ./my_svgs # 单文件形式直接打开一个 SVG out/Debug/viewer --svgs ./logo.svg # Lottie 动画需 SK_ENABLE_SKOTTIE 构建 out/Debug/viewer --lotties /path/to/lotties4. 调试一段 shaderout/Debug/viewer --match SkSLSlide # 或直接 --slide SkSLSlide进入后按i打开 HUD切到 Shaders 窗口修改 SkSL 并观察即时渲染反馈借助 SkSLDebuggerSlide 做逐指令调试。这一工作流对 Graphics/GPU 团队排查绘制异常、验证新特效算法极为高效。小结viewer 以slide GUI的方式把 Skia 的绘制测试、外部素材与 GPU 调试能力统一到一个交互式窗口中--match的灵活匹配语法适合精准定位--backend适合跨后端对比ImGui HUD 则提供了从 SkSL 到 GLSL/SPIR-V 的全链路检视与实时改码能力。需要更深入了解参数细节可继续阅读 Viewer.cpp 顶部的参数定义区与 tools/viewer 目录下的各 Slide 实现与之配套的 nanobench 用法、dm 用法 和 GMs 说明 分别覆盖性能测试与批量校验场景可组合使用形成完整的验证闭环。【免费下载链接】skiaSkia is a complete 2D graphic library for drawing Text, Geometries, and Images. See documentation for contribution instructions.项目地址: https://gitcode.com/gh_mirrors/ski/skia创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
Feynman 中的 Chai-1 结构预测技能:从输入清单到置信度评审的完整工作流 【免费下载链接】feynman The open source AI research agent. 项目地址: https://gitcode.com/gh_mirrors/feynman/feynman 点击查看 免费下载 本指南聚焦开源 AI 研究代理 Feynman 内置的 chai1 技能(skills/chai1/SKILL.md),讲… · 2026/9/24 19:58:10
C盘清理全攻略:7款免费磁盘分析工具与实操技巧 1. C盘飘红这件事,到底难在哪C盘飘红几乎是每个Windows用户都会遇到的经典问题。你正赶着交方案,或者游戏刚加载到一半,右下角突然弹出一个“磁盘空间不足”的提示,低头一看C盘那条进度条已经红得发紫。更让人抓狂的是,… · 2026/9/24 19:58:02
C盘爆满怎么清理?7款免费磁盘分析工具与实操指南 1. 先搞清楚C盘为什么"飘红",再谈清理C盘飘红这件事,几乎每个用Windows的人都遇到过。你正干活干到一半,右下角突然弹个提示"磁盘空间不足",打开"此电脑"一看,C盘那条进度条红得刺眼。第… · 2026/9/24 19:58:02
AI行业人事信息真实性核查指南 我不能按照该标题生成博文。原因如下:该标题涉及真实企业(阿里、字节跳动)及真实人物(周畅),但经公开权威信源(如阿里集团官网、字节跳动官方公告、新华社、财新网、36氪、晚点LatePost等&#… · 2026/9/24 22:14:11
AI模型部署与大模型落地实践指南 我不能根据该标题生成博文。 原因如下: 该项目标题涉及具体企业(阿里、字节跳动)、真实高管(周畅)的职场变动信息,但 输入中项目正文为空、关键词为空、摘要描述为空 ,没有任何可验证的事实… · 2026/9/24 22:14:11
数据可视化工具选型指南:从BI平台到图表库的实战建议 数据可视化这个领域,这几年变化快得让人有点跟不上节奏。我最早接触BI工具的时候,市面上能叫得出名字的品牌两只手数得过来,现在再去翻一圈,从国际大厂到国内垂直厂商,从开源社区项目到轻量级图表库,少说也… · 2026/9/24 22:14:11
使用MiniCPM5-2B搭建本地新闻简报系统:从RSS抓取到AI摘要全流程实践 每天早上被十个新闻 App 的红点轰炸,却依然不知道自己错过了什么;想做个信息聚合工具,又担心API 费用一路走高,还要把内容送去第三方服务器。这是我最初想搞本地新闻简报系统的原因。所谓的本地新闻简报系统,就是把新闻… · 2026/9/24 22:14:11
旅游与经济指标数据集分析:从EDA到建模的完整实战指南 简介:这份资源面向具备一定机器学习与Python基础的数据分析学习者,围绕旅游与经济指标之间的关联展开完整实战。包内共9个文件,以7个py源代码为主,另含1个csv数据集与1个txt说明文件,压缩包约283KB,数据文件… · 2026/9/24 22:14:11
兆芯KX7000/8国产平台深度评测:BIOS调优与性能实测 1. 为什么我会盯上这块国产平台2026年8月,我终于把一套完整的兆芯KX7000/8平台攒齐了。说实话,从2023年第一次在展会上看到KX7000的工程样品,到2025年底零售版散片开始零星出现在渠道里,再到现在能稳定买到带原厂风扇的盒装版本&a… · 2026/9/24 22:14:05
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程 简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13
1D-CNN时间序列建模实战:从Conv1d原理到工业落地 简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26
柔软的L:汉语语流中被忽视的舌肌张力控制 1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44