应用于航空仪表的2D软件渲染引擎

116 阅读2分钟

由于个人原因,3年前从 UC 浏览器内核顺利的拿到毕业证,在小鹏重新入学。进入新领域,学习新技能,做些不一样的事情。

在过去10年的浏览器内核生涯中,一直接触的是浏览器相关渲染引擎的技术,经历了从 webkit 及 chrome 内核早期使用的 skia,13年左右开始通过 OpenGL 支持硬件渲染,自己和浏览器内核团队也整理出一些文章,如:

在小鹏也接触过 Unity3D 开发。

所以,现在有这么多优秀的硬件渲染引擎的情况下,为什么还要自己手搓一个基于 CPU 的软件渲染引擎?原因是在某些特定场景下 - 例如航空 - 我们需要基于一个足够安全的渲染引擎实现用户交互界面,如航空仪表。

这里提到足够安全,指的是需要通过民航局发布的软件适航标准 DO-178C,本文对该标准不做展开讨论,读者只需了解你要对系统中每一行代码负责。因此,UI 软件只能有两种方案:

a. UI 程序 + 已过适航的 OpenGL

b. UI 程序 + CPU 软件渲染引擎

对于方案 a,目前已知 CoreAVI 可以提供适航版本的 OpenGL,该方案主要面向商用飞机,国内也有类似面向商用飞机的方案,缺点是价格偏高。因此本文主要讨论方案 b 是否可行。

先给结论,已目前调研结果来看,基于 CPU 的软件渲染引擎可以完成航空仪表目前的需求。

我在 github 上检索了一下,可以参考的项目不太多,github.com/hmwill/GLES… 算一个。这个项目未完成,可以读代码了解一些 OpenGL 接口的设计。另外这个作者还写过一个 GLSC 的项目,这个项目主要接口都已完成,demo 也可以运行。

对于我们航空仪表来说,2D 软件渲染引擎需要提供以下基础功能:

  • 绘制基本元素:
    • 线
    • 三角(矩形)
  • 绘制纹理
    • 支持半透明
  • 绘制特定颜色
  • 绘制特定位置

除上述基础功能外,渲染引擎还需要提供以下业务功能:

  • 纹理旋转
  • 纹理跑马灯
  • 文字渲染

通过上述功能组合,我们可以使用软件渲染引擎完成航空仪表的基本业务。