简介#
我们很高兴地宣布 LVGL v9.5 正式发布。在过去几个版本中,我们一直在系统性地拓展 MPU 级硬件上的能力边界——引入 3D 渲染、GPU 后端和更完善的驱动支持,同时不损害 LVGL 在资源受限 MCU 上的轻量与高效。v9.5 延续了这一方向。
本次发布新增了纯软件实现的模糊和阴影渲染,引入了 RISC-V SIMD 加速以提升支持向量扩展的处理器上的软件渲染性能。同时带来了全新重写的 Wayland 驱动(支持 EGL)、基于 NanoVG 的完整 OpenGL 渲染后端,以及运行时 glTF 模型操控能力。此外,控件 API 也得到了进一步完善——新增属性接口、更灵活的主题基础设施和输入处理改进,无论 MCU 还是 MPU,裸机还是 Linux,都能从中受益。
无论你是在 Cortex-M 上构建智能家居面板,还是在 Linux SBC 上开发成熟的 HMI 系统,这个版本都有值得关注的内容。接下来让我们看看具体更新了什么。
视觉与渲染#
模糊和阴影:全面提升视觉表现#
这是一个重量级的更新。v9.5 原生支持模糊和阴影效果,而且完全通过软件实现,无需 GPU。
阴影可以为悬浮层、模态框和卡片赋予立体感,无需任何额外技巧。

模糊效果则打开了毛玻璃特效、背景虚化和平滑过渡的大门——这些效果以往需要变通方案或自定义绘制回调函数才能实现。这些功能可以在 LVGL 支持的所有目标平台上直接使用,无论是 MCU 还是 MPU,裸机还是 Linux。

这类功能的加入让基于 LVGL 构建的 UI 在视觉品质上实现了质的飞跃。
贝塞尔曲线图表#
通过新增的 LV_CHART_TYPE_CURVE 类型,可以在图表中使用平滑的贝塞尔曲线连接数据点,替代传统的直线段。需要矢量图形支持。

驱动与后端#
Wayland:从零重写#
Wayland 驱动已经完全重写,更简洁、更高效,并且支持完整的渲染后端体系:
SHM(共享内存)后端现在支持双缓冲直接模式渲染,在 GPU 不可用或不适用的系统上可实现更流畅的合成和更低的延迟。
EGL 后端是本次发布新增的。通过 EGL,Wayland 驱动获得了完整的硬件加速 OpenGL 渲染能力,使 3D 内容可以在 Wayland 上原生运行,无需任何额外处理。
重写后的驱动不再内置客户端窗口装饰支持。如果你的应用需要标题栏、关闭按钮或窗口边框,可以直接使用 LVGL 控件来构建——lv_win 就非常适合这一用途。
NanoVG:完整的 OpenGL 渲染后端#
新增了 NanoVG 渲染后端,为 LVGL 提供了完整的 OpenGL 绘制单元。这意味着矢量渲染、抗锯齿图形、渐变和图像合成都可以在 GPU 上完成,无需软件回退。
NanoVG 后端兼容 OpenGL ES 和桌面 GL,当 OpenGL 上下文可用时会自动初始化。结合 Wayland、DRM、SDL 和 GLFW 全面支持的 EGL,LVGL 在 Linux 级目标平台上拥有了完整的 GPU 渲染方案。
SDL:新增 EGL 支持#
SDL 现在支持 EGL 作为渲染后端。对于面向桌面或嵌入式 Linux 平台的开发者来说,这补全了最后一块拼图:SDL、Wayland、DRM 和 GLFW 现在都支持 EGL,任何一个都可以一致地承载硬件加速或 3D 内容。
3D 渲染:覆盖所有主流 Linux 后端#
随着 EGL 在各主要显示后端的全面落地,在 Linux 上构建支持 3D 的 LVGL 应用变得非常简单。
完整的 3D 渲染支持后端列表:SDL、Wayland、DRM 和 GLFW。
在后端工作之外,v9.5 还对 3D 体验本身做了重要升级:
运行时 glTF 模型操控:现在可以在应用运行时读取和修改 glTF 模型节点。缩放、旋转、平移和动画状态都可以在运行时访问和修改,从而实现动态 3D 场景,而不仅仅是静态模型查看器。
射线投射工具:新增的一组函数可以方便地在 3D 世界空间与 2D 屏幕坐标之间进行转换,以及计算 3D 空间中的射线与对象交叉。这是实现触摸输入命中测试 3D 对象、跟随 3D 几何体的工具提示,或任何需要桥接 2D UI 和 3D 场景的交互的基础。

GStreamer:支持摄像头流和无音频源#
GStreamer 集成现在支持没有音频轨道的媒体源。虽然听起来是个小改动,但实际上这意味着你现在可以将摄像头流或任何纯视频源直接嵌入 LVGL 应用中,而不会导致管线失败。这对于很多基于摄像头的 HMI 应用来说曾是一个真正的障碍,在本次版本中得到了妥善解决。
控件、样式与平台#
样式与主题系统:更丰富、更灵活#
样式系统收到了多项体验改进:
LV_STATE_ALT 是一个专为深色/浅色模式切换设计的新控件状态。无需管理两套完整的主题树,只需用 LV_STATE_ALT 标记样式,就可以通过一次调用切换整个 UI 的模式。

lv_obj_remove_theme 和 lv_obj_bind_style_prop 完善了主题操作 API。前者可以将主题从对象上干净地移除;后者实现了数据驱动的样式绑定,适用于样式属性需要跟踪运行时数值的场景。

RISC-V 向量扩展支持#
LVGL 现在支持 RISC-V V 扩展用于软件渲染操作。这为实现了向量扩展的 RISC-V 平台带来了 SIMD 加速,可以提升混合、填充等常见绘制任务的性能。
在 lv_conf.h 中将 LV_USE_DRAW_SW_ASM 设置为 LV_DRAW_SW_ASM_RISCV_V 即可启用 RISC-V 向量加速。
属性接口:统一的跨控件数据绑定#
大量控件现在暴露了属性接口:arc、bar、switch、checkbox、LED、line、scale、spinbox、spinner、table、tabview、buttonmatrix、span、menu 和 chart。
属性接口使得外部系统(如数据绑定层或 UI 框架)能够以统一的方式读写控件状态。如果你正在 LVGL 之上构建自己的数据绑定或响应式 UI 层,这个版本会让工作轻松许多——所有主要控件现在都使用相同的接口。
输入处理改进#
本次版本包含多项值得关注的输入相关改进:
按键重映射:现在可以在驱动层重映射键盘按键,适用于物理键盘布局与 UI 期望不匹配的场景,不再需要在应用代码中处理重映射。
手势阈值 API:滑动和手势识别的阈值现在可以针对每个输入设备单独配置,不再是编译时常量。这使得针对不同屏幕尺寸和使用场景调整手势灵敏度变得更加容易。
单选按钮:lv_obj_set_radio_button 让构建单选按钮组变得简单,无需手动管理组内互斥。
无组分配时的键盘事件:以前,如果没有分配组,键盘事件会被静默丢弃。现在无论是否分配了组,都会作为输入设备事件发出,为应用代码处理原始按键输入提供了更大的灵活性。
WebP 解码器#
LVGL 现在可以原生解码 WebP 图像。结合已有的 JPEG(包括方向和 CMYK 支持)、PNG、GIF 等格式支持,v9.5 的图像格式覆盖达到了历史最全面的水平。
破坏性变更#
移除了 Wayland 客户端窗口装饰。 重写后的 Wayland 驱动不再支持客户端窗口装饰。如需标题栏等窗口元素,请使用 LVGL 控件(如 lv_win)来实现。
XML 引擎已从仓库中移除。 XML UI 引擎的开发仍在继续,但已移至 LVGL 主仓库之外。我们会在单独的文章中详细说明这一决定及其对路线图的影响。
以下变更在升级到 v9.5 时可能需要更新你的应用代码。
弃用项#
lv_fragment 已弃用。 如果你目前正在使用 lv_fragment 进行视图生命周期管理,请计划迁移。它将在未来的版本中移除。
lv_wayland_display_close_cb_t 已弃用。 请改为在 lv_wayland_window_create 返回的显示对象上绑定 LV_EVENT_DELETE 事件。
以下 API 已弃用,将在未来的版本中移除。请相应地规划迁移工作。
总结#
v9.5 是 LVGL 近期历史上最大的版本之一。GPU 渲染方案比以往更加完善,模糊和阴影的加入让库的视觉能力实现了真正的飞跃,控件 API 也变得更加广泛和一致。
完整的更新日志一如既往地在 GitHub 上提供,包含每一条提交记录。如果你遇到问题或有疑问,论坛和 GitHub Issues 是联系团队的最佳途径。
感谢每一位贡献者——无论是问题报告者、代码审查者还是开发者。
