盘点:还差什么#
移植工程讲究"心里有数"——除了已完成的,还需要一份清晰的未移植清单。最近做了一次系统盘点:
未移植枚举(16 个)#
其中 10 个是状态依赖枚举,补上它们就能解除状态类的 void* 占位并补全缺失属性:
Blend / BlendFunction / CompareFunction / StencilOperation
CullMode / FillMode / TextureAddressMode / TextureFilter / TextureFilterMode / BufferUsage其余:GraphicsDeviceStatus + Effect 家族 3 个(EffectDirtyFlags/EffectParameterClass/EffectParameterType)。
未移植平台无关文件(约 50 个)#
- 根目录:
Texture抽象基类、GraphicsResource基类、GraphicsMetrics、GraphicsExtensions、DxtUtil、SpriteFont、GraphicsDeviceManager等 Model家族(8 个文件)- 异常类(4 个)+ 事件参数类(3 个)
States/TargetBlendState.cs、Vertices/动态缓冲与顶点类型(6 个)Effect/全部(24 个文件)
这些大多属于阶段 A8/B2/C 的计划项,在未完成清单里有记录——不静默省略,全部标注 TODO 或按计划推进。
下一步路线图#
第一步:10 个状态依赖枚举(当前焦点)#
独立小文件,按 C# 的 States/、Vertices/ 源结构移植。收益最大:
// 例:States/Blend.cs → blend.hpp(独立枚举文件)
enum class Blend {
kZero = 0,
kOne,
// ...
};补完后 BlendState/DepthStencilState/RasterizerState/SamplerState/VertexBuffer/IndexBuffer 里的一堆 void* 占位就能换成真实枚举,缺失的属性访问器也能补全。
第二步:TargetBlendState + GraphicsResource/Texture 基类#
B2(Vulkan 后端)的前置依赖。
第三步:阶段 B —— 平台层#
- B1 窗口/生命周期:XComponent → NativeWindow
- B2 Vulkan 后端(最大头):
GraphicsDevice的 28 个Platform*钩子逐一实现- 资源类(Texture2D/VertexBuffer/Shader 等)的钩子
- 前置风险:MGFX → SPIR-V 工具链(MonoGame 官方有
ShaderProfile.Vulkan.cs编译实现可参考)
- B3 输入 / B4 OHAudio / B5 rawfile 内容流
参考:鸿蒙端已有 FrameGenerationVulkan 示例(vulkan_utils/Device/Buffer/Image 等基础设施可直接借鉴),渲染状态对象参考 DirectX 实现(D3D11 显式状态对象与 Vulkan 更接近)。
里程碑#
| 里程碑 | 内容 |
|---|---|
| M1 | 状态依赖枚举 + 资源基类完成(全量编译零警告) |
| M2 | B1 窗口显示 |
| M3 | B2 首帧:Clear + 三角形 |
| M4-M6 | 输入/音频/完整 Game 循环 |