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

进度报告(2026-08-18):接口类基类化与整体复查

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

本日里程碑
#

21 个接口类全部基类化——平台层类从"纯接口(纯虚方法)“升级为"完整基类(成员变量 + 属性 + 前端逻辑 + Platform* 虚方法钩子)",并完成整体复查。

背景:为什么要基类化
#

此前平台层 partial 类被移植为"接口类”(只含 Platform* 纯虚方法契约)。复查发现这是遗漏的根源:接口化只提取了钩子契约,而 GraphicsDevice 等完整类的成员变量与前端逻辑(600+ 行)被跳过了。经确认,改为"移植为基类而非接口类"。

完成内容
#

批 1:GraphicsDevice 基类化(igraphics_device.hpp → graphics_device.hpp)
#

  • 53 个成员变量(_viewport/_blendState 族/预置状态/集合)照抄 C# L37-200
  • 属性访问器(Viewport/BlendState/ScissorRectangle/IsRenderTargetBound 等)
  • 前端逻辑(Clear×3/Present/Reset/Dispose/ApplyState
  • 32 个 Platform* 虚方法钩子

批 2-3:资源类与状态类基类化
#

  • Texture2D(构造链 + SetData/GetData 前端 8 重载)、VertexBuffer/IndexBuffer/Shader/ConstantBuffer
  • 4 个状态类(BlendState/DepthStencilState/RasterizerState/SamplerState,状态属性全集)
  • 集合类(TextureCollection/SamplerStateCollection,索引器 + 槽位数组)

C++ 语言映射确立
#

基类构造内不能调用纯虚函数(UB)——C# 构造里 PlatformConstruct(...) 的调用点,C++ 改由平台层派生类构造完成后显式调用(语义等价)。

整体复查(对照 C# 逐类核对)
#

  • GraphicsDevice 预置状态 10 个(_blendStateAdditive 等)+ EffectCache/集合 4 个/ResourcesLost
  • Shader HashKey/Samplers/Attributes(修正 Stage 注释行号)
  • ConstantBuffer _buffer/_parameters 等 6 成员
  • 补 3 个状态类 _defaultStateObject/StencilOperation 系列等 10 项

验证
#

  • 145 头文件独立包含零警告 + 33 cpp 链接成功
  • ✅ 提交:feat(graphics) 基类化 + docs 同步

下一步
#

  • 新增《下一步工作计划》文档(8 章节:进度快照/收尾/A6-A9/B1-B5/C 阶段/优先级/里程碑/风险)
  • 剩余 11 个接口类基类化收尾 → 阶段 A6(Reader 家族)+ A8/A9(GraphicsResource/Adapter/DeviceManager + 状态枚举)
MonoGame 鸿蒙移植 - 这篇文章属于一个选集。
§ : 本文

相关文章

How_to_wr

·45 字·1 分钟