跳过正文
  1. 项目/
  2. MonoGame 鸿蒙移植项目/

进度报告(2026-08-19):完整移植审查与一文件一类型拆分

·121 字·1 分钟·
FunBocchi
作者
FunBocchi
游戏引擎、图形编程爱好者。正在把 MonoGame 3.8.x 逐行移植为 C++20 并跑在鸿蒙上;也在做 Bocchi House 游戏移植平台与各种经典游戏的 HarmonyOS 移植。
目录
MonoGame 鸿蒙移植 - 这篇文章属于一个选集。
§ : 本文

本日里程碑
#

完整移植审查 + 一文件一类型拆分——确立了项目标准并据此重构了文件结构。

确立的标准
#

完整 C++ 移植(不是"可用的引擎版本"):代码结构与上游保持一致,不省略(最多 TODO 标注待办)、不合并(每个 C# 文件对应一个 C++ 头文件,唯一豁免 MathHelper+Random 嵌套平台无关 partial)。

一文件一类型拆分
#

盘点出 4 个跨文件合并文件,全部拆分为独立文件:

原聚合文件拆分结果
graphics_resources.hpp(12 类型)texture2d/texture3d/texture_cube/render_target_2d/3d/cube/vertex_buffer/index_buffer/occlusion_query 9 个独立文件 + Shader/ConstantBuffer 并入各自文件,原文件改转发头
graphics_states.hpp(6 类)blend_state/depth_stencil_state/rasterizer_state/sampler_state/texture_collection/sampler_state_collection 6 个独立文件,原文件改转发头
graphics_adapter.hpp(4 类型)graphics_adapter(仅 GraphicsAdapter)/graphics_capabilities/graphics_debug/graphics_debug_message 独立
vertex_element.hpp拆出 vertex_element_format.hpp 独立枚举(C# 12 值 = C++ 12 值)

与 C# 源码逐行比对
#

  • ✅ 一致:OcclusionQuery/集合类×2/Shader/ConstantBuffer/Adapter×4/QueryRenderTargetFormat fallback(10 项 = 10 项)/vertex_element_format(12 = 12)
  • ⚠️ 差异盘点:部分类简化重载/构造重载缺失(标注 TODO)、状态类枚举属性依赖未移植枚举(void* 占位)、Texture2D 钩子名差异(PlatformSetData→PlatformData)

未移植盘点
#

  • 枚举 16 个:状态依赖 10 个(Blend/BlendFunction/CompareFunction/StencilOperation/CullMode/FillMode/TextureAddressMode/TextureFilter/TextureFilterMode/BufferUsage,补后解除状态类占位)+ GraphicsDeviceStatus + Effect 家族 3 个
  • 平台无关文件约 50 个:Model 家族/异常/事件参数/Effect 家族/TargetBlendState/动态缓冲/顶点类型等

验证
#

  • ✅ 拆分后 34 cpp 编译链接成功(无未定义符号)
  • ✅ 修复拆分引入的 bug(vertex_element.hpp 悬空 };
  • ✅ 文档同步:未完成移植清单/partial 对照表/下一步工作计划/进度日志

下一步
#

  1. 移植 10 个状态依赖枚举(解除状态类 void* 占位并补全缺失属性)
  2. TargetBlendState/GraphicsResource/Texture 基类
  3. 阶段 B:窗口(B1)→ Vulkan 后端首帧(B2,前置调研 MGFX→SPIR-V 工具链)→ 输入/音频/内容流
MonoGame 鸿蒙移植 - 这篇文章属于一个选集。
§ : 本文

相关文章