MonoGame 鸿蒙移植项目
项目简介#
将 MonoGame 3.8.x 的运行时引擎逐行移植为 C++20,目标平台鸿蒙 HarmonyOS,渲染后端计划采用 Vulkan。
项目定位:对源项目的完整 C++ 移植——代码结构与上游保持一致,不省略、不替代,最多以
TODO标注待办。不是"做一个可用的 C++ 引擎",而是逐行镜像上游。
技术路线#
| 机制 | 做法 |
|---|---|
| 平台层 partial 类 | C# 前端 partial → C++ 基类(成员+属性+前端逻辑+Platform* 虚方法钩子);平台 partial → 派生类(override) |
| 钩子语义 | C# 跨 partial 文件私有方法 → C++ 纯虚函数强制实现;构造内不调纯虚(UB),改由派生类构造后显式调用 |
| 文件结构 | 一文件一类型(对应 C# 源文件结构,杜绝跨文件合并;唯一豁免 MathHelper+Random 嵌套平台无关 partial) |
| 后端 | Vulkan 第一后端(参考 DirectX 实现为主、OpenGL 脏标记技巧为辅),GLES 可选第二后端 |
当前进度(2026-08-19)#
- ✅ 145+ 头文件 + 34 cpp,编译链接验证通过
- ✅ 21 个平台层类全部基类化(GraphicsDevice/Texture2D/3D/Cube/RenderTarget×3/VertexBuffer/IndexBuffer/Shader/ConstantBuffer/OcclusionQuery + 4 状态类 + 2 集合类 + Adapter×3)
- ✅ 一文件一类型拆分(2026-08-19)
- ✅ 与 C# 源码逐行比对(核心逻辑一致;差异项标注 TODO)
- ⏳ 未移植盘点:枚举 16 个(10 个状态依赖)+ 平台无关文件约 50 个
里程碑#
| 里程碑 | 内容 | 状态 |
|---|---|---|
| M0 | 平台无关核心(数学/几何/Input/Audio 等) | ✅ 完成 |
| M1 | 状态依赖枚举 + 资源基类(全量编译零警告) | ⏳ 进行中 |
| M2 | B1 窗口显示(XComponent → NativeWindow) | 待启动 |
| M3 | B2 首帧:Clear + 三角形(Vulkan) | 待启动 |
| M4-M6 | 输入/音频/完整 Game 循环 | 待启动 |
专栏文章#
(本栏目按进度持续更新:进度报告 + 技术解说)