3. 图形合成核心概念

在车载多屏显示系统中,图形合成并不是“把画面画出来”这么简单,而是围绕一组核心对象和时序机制,把来自不同应用、不同安全等级、不同刷新需求的画面,稳定地组织到多个屏幕上。理解图层、窗口、表面、缓冲区、合成器、显示管线与帧同步,是后续做多屏布局、性能优化和故障排查的基础。

一、从“画什么”到“怎么送到屏幕”:七个核心对象

可以把整个显示链路理解为一条从内容生产到像素输出的流水线。应用并不直接操作屏幕,而是先产生“表面”,再由“合成器”把多个“图层”按“窗口”区域组织起来,写入“缓冲区”,最后通过“显示管线”扫描输出,并由“帧同步”保证节奏一致。

  • 图层(Layer):合成器可独立控制的最小视觉单元,拥有自己的位置、大小、透明度、Z序和可见性。车载中常见的有地图层、仪表层、报警层、视频层。
  • 窗口(Window):面向应用或系统的逻辑显示区域,通常对应一个矩形范围,内部可以包含一个或多个图层。窗口决定“内容放在哪里”,图层决定“内容怎么叠”。
  • 表面(Surface):应用实际绘制内容的像素载体,是图形库(如 OpenGL ES、Vulkan、Skia)的渲染目标。一个窗口可以绑定一个或多个表面。
  • 缓冲区(Buffer):表面背后的内存块,通常采用多缓冲机制(双缓冲或三缓冲)。前台缓冲用于显示,后台缓冲用于绘制,避免撕裂。
  • 合成器(Compositor):负责把多个图层按规则合并成最终帧。它决定谁在上、谁在下、是否混合、是否缩放、是否旋转。
  • 显示管线(Display Pipeline):从合成帧到物理屏幕的扫描输出路径,包含色彩空间转换、Gamma、缩放、时序控制等。
  • 帧同步(Frame Sync):用 VSync、Fence、Present 时间等机制,让绘制、合成、显示三个环节按同一节拍推进,避免撕裂、卡顿和延迟累积。

一句话理解:应用画到“表面”,表面由“缓冲区”承载,多个表面被组织成“窗口”和“图层”,由“合成器”合并,经“显示管线”输出,并由“帧同步”统一节奏。

车载多屏图形合成:对象关系与数据流 应用 / 内容源 仪表应用 地图导航 视频 / 摄像头 表面 Surface 像素载体 / 渲染目标 前台缓冲 后台缓冲 窗口 Window 逻辑显示区域 图层 L1 图层 L2 合成器 Compositor 混合 / 缩放 / 旋转 Z序 / 透明度 绘制 绑定 提交 显示管线 Display Pipeline 色彩空间转换 → Gamma → 缩放 → 时序控制 → 扫描输出 对应物理屏幕:仪表屏 / 中控屏 / 副驾屏 / HUD 合成帧 帧同步 Frame Sync VSync / Fence / Present 统一绘制、合成、显示节拍 节拍 关键关系: 1. 应用 → 表面:应用把内容绘制到 Surface 的后台缓冲; 2. 表面 → 窗口/图层:Surface 被绑定到 Window 中的 Layer,决定位置与叠放; 3. 图层 → 合成器 → 显示管线:Compositor 合并图层,Pipeline 扫描输出到屏幕; 4. 帧同步贯穿全链路:VSync/Fence 保证绘制、合成、显示按同一节拍推进,避免撕裂与延迟累积。

二、合成器如何工作:从图层到最终帧

合成器的核心任务是“按规则合并”。它通常维护一棵图层树或图层列表,每个图层带有自己的属性:位置、尺寸、Z序、透明度、裁剪区域、变换矩阵、混合模式。合成时,合成器从最底层开始,依次把每个图层的像素写入目标缓冲区,遇到透明区域则进行 Alpha 混合,遇到缩放或旋转则调用 GPU 采样。

在车载场景中,合成器还要处理安全等级。例如仪表报警层必须始终位于最上层,且不能被其他应用遮挡;倒车影像层需要在挂入倒挡后快速切入,并覆盖中控屏的大部分区域。这些规则通常由显示策略服务或窗口管理器配置,合成器只负责执行。

图层属性示例(伪配置):
layer: instrument_warning
  z_order: 100
  position: (0, 0)
  size: 1920x720
  alpha: 1.0
  blend: premultiplied
  secure: true

layer: navigation_map
  z_order: 20
  position: (200, 100)
  size: 1280x600
  alpha: 0.95
  blend: premultiplied
  secure: false

三、缓冲区与帧同步:为什么画面会撕裂或卡顿

如果只有一个缓冲区,应用一边画、屏幕一边读,就会出现上半屏是旧帧、下半屏是新帧的撕裂现象。双缓冲通过前台缓冲和后台缓冲交替解决撕裂,但若交换时机与 VSync 不匹配,仍可能产生卡顿。三缓冲进一步增加一个缓冲,让 GPU 在等待 VSync 时仍有任务可做,但会引入一帧左右的延迟。

帧同步的关键是“对齐节拍”。VSync 是显示器的垂直同步信号,Fence 是 GPU 完成渲染的同步点,Present 是合成帧提交给显示控制器的时间。三者对齐后,应用在后台缓冲绘制,合成器在 VSync 前完成合成,显示控制器在 VSync 时切换前台缓冲,画面就能稳定输出。

常见误区:把“帧率”等同于“流畅度”。实际上,帧率稳定比帧率高更重要。如果帧同步没做好,即使平均帧率很高,也会出现周期性卡顿或撕裂。车载多屏场景中,不同屏幕的刷新率可能不同(如仪表 60Hz、中控 60Hz、HUD 120Hz),需要为每个显示管线独立配置帧同步策略。

四、案例:倒车影像的合成链路

以倒车影像为例,摄像头输出视频帧到视频表面,该表面被绑定到一个高 Z 序图层,合成器将其与中控屏的导航图层、状态栏图层合并,最终通过中控屏的显示管线输出。挂入倒挡时,系统需要在 200ms 内完成图层切换和首帧显示,否则用户会感到明显延迟。

环节 关键对象 典型参数 风险点
视频采集 摄像头 / 视频表面 30fps、YUV 采集延迟、色彩空间转换
图层绑定 窗口 / 图层 Z序 90、全屏 被其他图层遮挡
合成 合成器 Alpha 混合、缩放 GPU 负载过高
显示 显示管线 60Hz、VSync 帧同步错位、撕裂

五、复盘:建立“对象—时序”双视角

学习图形合成,建议同时建立两个视角。第一个是对象视角:图层、窗口、表面、缓冲区、合成器、显示管线分别是什么,彼此如何引用。第二个是时序视角:一帧从应用绘制开始,经过缓冲区交换、合成、Present,到最终扫描输出,每个阶段的时间预算和同步点在哪里。