Cocos GFX抽象层

GFX 层一句话总结:它是一种面向 Vulkan 概念设计的 RHI(Render Hardware Interface),用抽象基类定义接口,各后端通过继承实现自己的版本,上层代码通过虚函数 dispatch 自动调用正确的后端实现,完全不需要关心底层是 Vulkan 还是 OpenGL。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
┌──────────────────────────────────────────────────────────────┐
│ 第一层:基类 Device (GFXDevice.h) │
│ ┌────────────────────────────────────────────────────────┐ │
│ │ public: initialize(info) ← 模板方法,调用 doInit │ │
│ │ public: createBuffer(info) ← 非虚,调用 doCreate │ │
│ │ protected: doInit() = 0 ← 纯虚,各后端实现 │ │
│ │ protected: createBuffer() = 0 │ │
│ └────────────────────────────────────────────────────────┘ │
│ ▲ │
│ │ 继承 │
│ ┌────────────────────┼────────────────────┐ │
│ ▼ ▼ ▼ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ CCVKDevice │ │ GLES2Device │ │ CCMTLDevice │ │
│ │ (Vulkan) │ │ (OpenGL ES) │ │ (Metal) │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
└──────────────────────────────────────────────────────────────┘
│
DeviceManager::create() ← 工厂,编译期选择

Cocos Creator 拥有两套引擎内核,C++ 内核 和 TypeScript 内核。C++ 内核用于原生平台,TypeScript 内核用于 Web 和小游戏平台。 在引擎内核之上,是用 TypeScript 编写的引擎框架层,用以统一两套内核的差异,让开发更便捷。