OpenVG
定义
OpenVG 是一套面向 2D 矢量图形的低层应用程序接口(API)规范,由非营利技术联盟科纳斯组织负责管理。它本身不是绘图程序或图形库,而是规定图形硬件或软件实现应向上层提供哪些绘图功能与参数接口,使上层的矢量内容可以在不同厂商的芯片之间移植[1]。规范以线条、二次与三次贝塞尔曲线、椭圆弧等几何元素构成路径,路径既可填充也可描边[4]。
该接口强调免版税与跨平台,采用与 OpenGL 类似的编程模型,通过句柄管理路径、图像、画布等对象,并用一组设置函数调整填充规则、混合模式、渲染质量等状态[5]。在图形栈中,它通常位于 SVG、Flash、PDF 等矢量格式解析器与底层图形硬件之间,承担光栅化加速的职责[2]。
原理
OpenVG 将绘图任务组织为一条分段式流水线。第 1 阶段接收路径、变换矩阵、描边参数与颜料定义;第 2 阶段根据线宽、端点样式、连接样式与虚线模式生成描边后的路径轮廓;第 3 阶段对路径施加仿射或投影变换;第 4 阶段把路径光栅化为覆盖区域;第 5 阶段完成裁剪与遮罩;第 6 阶段生成颜料,包括纯色、渐变与图像图案;第 7 阶段进行图像插值;第 8 阶段完成颜色变换、混合与抗锯齿[6]。
混合运算遵循 Porter-Duff 模型,并额外提供变亮、变暗、正片叠底、滤色与相加等模式;最终像素还可经过抖动处理以适配较低位深[7]。规范要求抗锯齿默认开启,除非应用显式关闭,并允许实现者在渲染质量与速度之间取舍[4]。图形上下文由EGL接口创建和管理,EGL 1.2 起可同时绑定 OpenGL ES 与 OpenVG 的上下文,实现 2D 与 3D 混合渲染[1]。
实现方可以选择不同的落地方式:把整条流水线做进专用矢量硬件;在 OpenGL ES 之上做包装;用 CPU 完全软件光栅化;或借助 3D GPU 的模板缓冲完成路径覆盖判定。基于 3D GPU 的实现需要先在软件驱动中进行路径细分或三角化,前者的计算量较小但消耗较多显存带宽,后者会带来额外的预处理开销[5]。
发展历程
OpenVG 工作组于 2004 年 7 月 6 日成立,发起方包括 3Dlabs、Bitboys、爱立信、Hybrid Graphics、Imagination Technologies、摩托罗拉、诺基亚、PalmSource、Symbian 与太阳微系统等企业,当年年底公布首份规范草案[8]。2005 年 8 月 1 日,科纳斯组织在洛杉矶举行的 SIGGRAPH 大会上正式发布 OpenVG 1.0,从工作组启动到定稿约用 12 个月;该版本被定位为业界首个面向矢量图形库的开放硬件加速接口标准[1]。
2007 年 3 月,1.0.1 版作为规范修订发布,同时提供一致性测试套件与样本实现,样本实现自 2007 年 2 月 27 日起以 MIT 许可公开[9]。2008 年 12 月 9 日,OpenVG 1.1 在新加坡 SIGGRAPH Asia 上发布,新增用于硬件加速文字渲染的字形接口、对 Adobe Flash 与 Flash Lite 3 的完整加速支持以及多重采样抗锯齿[2]。
2011 年 9 月,OpenVG 工作组决定不再为后续标准化召开定期会议,但继续维护和推广 1.1 版规范[8]。2020 年 5 月 26 日,科纳斯组织发布 OpenVG 1.1 Lite 暂定版,放宽笔画路径光栅化的精度要求并将模板、变淡加深等模式改为可选项,使该接口能在任何兼容 OpenGL ES 2.0 的 GPU 上获得加速,相应一致性测试以 Apache 2.0 许可开源[3]。
应用
规范列出的目标应用包括 SVG 与 Adobe Flash 播放器、便携地图与导航、电子书阅读器、游戏、可缩放用户界面以及低层图形设备接口[6]。在移动设备上,它被用于手机图形界面、GPS 与地图绘制、Flash Lite 播放器和 SVG 移动播放器等场景[5]。科纳斯组织在 2020 年的说明中提到,自 2008 年起该接口在消费电子、手持设备、可穿戴设备与汽车设备上得到较广泛使用[3]。
围绕该规范形成了多种实现:专用矢量核心如 AMD VG Core,基于 OpenGL ES 的实现如 AlexVG FORGE 与 Scaleform VGx,纯软件光栅化器如 AlexVG engine 与官方样本实现,以及 ShivaVG、AmanithVG 等开源或商业方案[9]。此外,图形栈 Mesa 曾在 2009 年 5 月加入 OpenVG 状态跟踪器,使 SVG 矢量图形可经由 Gallium3D 驱动获得硬件加速,该组件后于 2015 年 6 月在 Mesa 10.6 中被移除[8]。
局限
OpenVG 只覆盖 2D 矢量绘图,不提供 3D 几何、着色器编程或通用计算能力,3D 部分需由 OpenGL ES 等接口承担,两者通过 EGL 协同[1]。在缺少专用矢量硬件的平台上,基于 3D GPU 的实现需要在软件驱动中完成路径细分或三角化,前者消耗较多内存带宽,后者带来可观的预处理开销并可能造成帧率不稳[5]。
纯软件实现把全部处理压在 CPU 上,功耗往往接近处理器峰值,这与接口面向低功耗嵌入式设备的初衷存在张力[5]。标准化推进也趋于停滞:原定的 1.2 与 2.0 版路线图包含对 Flash 8 的支持、更严格的精度要求、增强抗锯齿与可编程硬件等内容,但工作组自 2011 年起不再定期开会,后续工作主要停留在维护 1.1 版[7][8]。1.1 Lite 通过降低精度要求换取在通用 3D GPU 上的可加速性,也意味着实现方需在渲染质量与硬件兼容范围之间作出取舍[3]。
参见
参考资料
- khronos-group-releases-openvg-1 [引用日期2026-10-29]
- OpenVG 1.1 Specification Publicly Released by Khronos [引用日期2026-10-29]
- Rel-183-OpenVG-1.1-Lite-May20-FINAL-CN_(PDF) [引用日期2026-10-29]
- Andrzej Mamona [引用日期2026-10-29]
- Khronos Family of Standards [引用日期2026-10-29]
- OpenVG Specification [引用日期2026-10-29]
- Khronos Standards Ecosystem [引用日期2026-10-29]
- OpenVG [引用日期2026-10-29]
- KHRONOS [引用日期2026-10-29]