本文同时发布于本人的知乎专栏:https://zhuanlan.zhihu.com/p/403395505
前言
近几年我的工作主要集中在渲染引擎方面。随着工作时间的增长,接触和学习到的相关知识也逐渐增多,并且有着渐渐变杂的趋势。我也想着我所掌握的对相关知识进行总结,将这些知识串联起来,形成体系。于是,从本篇文章开始,我打算从零开始,一步步搭建一个跨平台的渲染引擎,并就着代码逐步总结。
本篇文章将对跨平台渲染引擎做了简要的需求分析,以及基础架构的简要设计。
需求分析
- 跨平台:需要符合“一次编写,随处运行”的主旨;在现在初始阶段,首先选择移动端的两大主流平台Android和iOS来实现,后续会考虑适配Windows、WASM。(MacOS和iOS的实现比较接近,可以在完成iOS端的同时进行适配)
- 嵌入式:非独立运行的应用,由其他应用以控件的方式将引擎嵌入;
- 提供脚本运行时环境:对上层开发者(如游戏开发者等)提供脚本接口,如JavaScript或Lua等。
技术分析
有了大概的引擎需求,现在我们开始分析一下需要什么样的技术栈来实现这些需求。
整体的技术架构
渲染引擎的整体架构如下图所示:
- 底层的Platform层对应着各个系统平台,如Android、iOS、Web、Windows等。
- Container层对应着系统平台容器层。其作用是抹平系统API差异,并使引擎可以运行与各个平台上。
- Graphic Engine层和Graphic Wrapper层对应着图形引擎及其包装。其作用是底层的图形绘制,以及向上提供绘制接口。图形引擎包括但不限于:OpenGL、Metal、Vulkan等。
- Script Engine和Runtime Wrapper层对应脚本引擎及其包装。其作用是解析运行脚本,向上提供脚本运行接口及扩展API能力。脚本引擎包括但不限于:V8、JSCore、WASM、QuickJS等。