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 编写的引擎框架层,用以统一两套内核的差异,让开发更便捷。