本日里程碑#
完整移植审查 + 一文件一类型拆分——确立了项目标准并据此重构了文件结构。
确立的标准#
完整 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 对照表/下一步工作计划/进度日志
下一步#
- 移植 10 个状态依赖枚举(解除状态类 void* 占位并补全缺失属性)
- TargetBlendState/GraphicsResource/Texture 基类
- 阶段 B:窗口(B1)→ Vulkan 后端首帧(B2,前置调研 MGFX→SPIR-V 工具链)→ 输入/音频/内容流