………… CPU 渲染器是什么鬼提案
他们都被 opengl 吸引了,忘记了这是个 XY Problem
而且 2D 游戏怎么还能扯到 PBR 的
其实游戏引擎(尤其是 2D )跟图形 API 关系没那么紧密
2D 引擎不知道你考虑的功能有哪些,切图、变换、物理、对象管理?
如果你想写的真的是 2D 引擎,那么考虑问题的顺序应该是 top-down 的,先计划最终能达到什么效果,然后再把每一层的抽象定好,然后在往抽象出来的框架里塞代码。
比如假设我的目标是,没有引擎 UI,用代码来创建对象,没有 UI 系统,没有预设物理,那么我可能至少需要下面这些东西:
- 事件循环(渲染和计算至少要异步化对吧)
- 输入管理器(「游戏操作」和「物理输入」的映射,比如组合键)
- sprite (对象)管理器(切图、对象关系和变换、shader 或材质、包围盒、碰撞检测……)
- 动画管理器(图片组、动画混合)
- 渲染器
每个组件都有很多工作要做,因此强烈建议参考成熟引擎的代码结构,你能一目了然地从文件名就看出需要做什么:
https://github.com/cocos2d/cocos2d-x/tree/v4/cocos/2d 具体到你提到的 opengl/图形 API 上,如果你是自顶而下考虑的,自然会想在渲染器和图形 API 之间抽多一个虚拟层,让引擎本身诸如创建 texture,应用 shader 这些事与具体 API 隔离开。所以具体到图形 API 这一层要考虑的就是
- 怎么(分别用 opengl/dx/vulkan )画图片
- 怎么(……)正确混合半透明的图片
- 怎么( )画文字
- 怎么变换摄像机
- ……
那方向就清晰了,先搞清楚怎么用 opengl 把图画出来,然后就可以开始撸了。如果怕 opengl 要凉,那就用 dx 呗,反正到这一层无论用什么 api 要干的活都是同样的那些而已