8.2 KiB
XCEngine Agent Guide
这个文件面向进入当前仓库的开发者 / Codex / Agent。目标不是介绍项目,而是快速建立对“当前工程状态、真实约束、推荐入口与协作方式”的统一认知。
项目介绍与目录总览看 README.md;设计原则与当前测试规则以本文为准。
1. 先看什么
进入仓库后,优先读这几份文档:
- AGENT.md
- README.md
- docs/plan/end/RHI模块设计与实现/RHI模块总览.md
- docs/plan/Renderer模块设计与实现.md
- tests/TEST_SPEC.md
其中:
RHI模块总览.md是 RHI 设计原则基线Renderer模块设计与实现.md是当前渲染层演进方向TEST_SPEC.md是测试组织、GT 图规则和 CMake/CTest 入口基线
2. 当前工程状态
2.1 引擎整体
当前仓库已经不再处于“先把底层跑起来”的阶段,而是处于:
RHI已具备可维护的三后端基线Rendering已形成正式模块,不再只是零散 sample 代码Editor已能通过引擎渲染链路驱动 viewportScripting已具备 Mono 托管程序集构建和基础运行时测试
当前主线工作不应继续封闭式堆 RHI,而应在不破坏测试基线的前提下,继续推进渲染、编辑器和脚本三者的对接。
2.2 RHI
当前正式支持的后端:
D3D12OpenGLVulkan
当前 RHI 的基本判断:
- 抽象层已经可用
- 后端差异路径已经被一轮轮集成测试逼出了很多真实问题并修过
- 但它仍然不是“完全封顶”的模块
看到上层新问题时,不要本能地用“测试特判 / 测试绕过 / include 私有头”来糊过去;优先判断是不是 RHI 根因。
2.3 Rendering
当前 engine/include/XCEngine/Rendering/ 与 engine/src/Rendering/ 已经落地:
RenderSceneExtractorRenderResourceCacheRenderSurfaceCameraRendererSceneRendererBuiltinForwardPipelineRenderMaterialUtility
这意味着:
- 当前已经存在正式的场景渲染运行时
- 不要再把真实渲染逻辑塞回
mvs/样例里长期存活 - 新渲染功能优先落在
Rendering模块与配套测试中
2.4 Editor
当前 editor 的关键事实:
- 它仍然是
D3D12宿主应用 - Scene/Game viewport 已通过离屏纹理接入引擎
SceneRenderer editor/src/Viewport/ViewportHostService.h当前直接依赖RHI::D3D12Device- Scene view 相机控制已经有独立控制器与单测
因此当前要注意:
- 引擎渲染逻辑应继续收敛在
engine/Rendering - editor 只是宿主,不应复制一套独立 renderer
- editor 侧若要继续做 viewport 能力,应尽量围绕
RenderSurface和引擎场景渲染入口扩展
2.5 Scripting
当前脚本链路:
managed/XCEngine.ScriptCore/:托管 APImanaged/GameScripts/:托管测试 / 示例脚本engine/include/XCEngine/Scripting/与engine/src/Scripting/:原生运行时桥接
当前脚本构建依赖:
- .NET SDK
参考/Fermion/Fermion/external/mono下的 Mono 依赖
如果环境不完整,可以通过 -DXCENGINE_ENABLE_MONO_SCRIPTING=OFF 暂时关闭。
3. 当前测试基线
3.1 测试树
当前主要测试模块:
tests/Core/tests/Memory/tests/Threading/tests/Debug/tests/Components/tests/Scene/tests/Scripting/tests/Rendering/tests/RHI/tests/Resources/tests/Input/tests/Editor/
3.2 RHI 测试分层
tests/RHI/ 当前分为五块:
tests/RHI/unit/tests/RHI/integration/tests/RHI/D3D12/tests/RHI/OpenGL/tests/RHI/Vulkan/
边界规则:
tests/RHI/unit/和tests/RHI/integration/只能依赖公共 RHI 抽象- 后端私有 API / 原生句柄 / 后端特有断言,只能进对应后端目录
- 如果抽象层测试必须 include 后端头才能过,优先修 RHI
3.3 RHI 抽象层集成测试
当前抽象层场景:
minimaltrianglequadspherebackpack
必须遵守:
- 每个场景目录只维护一张
GT.ppm D3D12 / OpenGL / Vulkan都与同一张GT.ppm做比对- 运行输出可以按后端区分命名,但 GT 不能拆成多份
- 场景测试代码只能使用公共 RHI 接口
3.4 Rendering 测试
当前 tests/Rendering/ 已经存在:
unit/integration/backpack_sceneintegration/textured_quad_sceneintegration/transparent_material_sceneintegration/cull_material_sceneintegration/depth_sort_sceneintegration/material_state_sceneintegration/offscreen_scene
结论:
- 新渲染功能不需要再从零搭测试体系
- 直接往现有
tests/Rendering扩展即可
4. 已知关键约束
4.1 始终遵循 RHI 设计文档
涉及 RHI 抽象、后端收敛、接口新增时,始终以:
作为原则基线,而不是局部方便优先。
4.2 功能正确优先于抽象表面整洁
允许为了功能正确做必要重构,但不允许:
- 测试特判掩盖真实后端缺陷
- 为了不改底层而污染抽象层测试
- 为了“少动代码”保留明显错误的对象边界
4.3 backpack 资源导入行为必须统一
这是当前仓库里已经踩过的真实坑。
规则:
- editor / runtime / rendering tests / rhi abstraction tests 的 backpack 导入行为必须保持一致
- 不要只在某个测试路径里额外加
MeshImportFlags::FlipUVs - 否则很容易出现 editor 显示正确、测试里 UV 错乱的假分叉
4.4 editor 是宿主,不是第二套渲染器
如果 editor viewport 有问题,优先判断:
- 是
Rendering模块问题 - 是
RenderSurface/ RHI 输出问题 - 还是 editor 宿主接线问题
不要把问题简单归因为“editor 特殊”,然后在 editor 里复制一份独立渲染逻辑。
5. 推荐构建入口
5.1 配置
cmake -S . -B build -A x64
如果缺 Mono:
cmake -S . -B build -A x64 -DXCENGINE_ENABLE_MONO_SCRIPTING=OFF
5.2 常用构建 target
cmake --build build --config Debug --target XCEngine
cmake --build build --config Debug --target XCVolumeRendererUI2
cmake --build build --config Debug --target xcengine_managed_assemblies
cmake --build build --config Debug --target rhi_all_tests
cmake --build build --config Debug --target rendering_unit_tests
cmake --build build --config Debug --target editor_tests
cmake --build build --config Debug --target scripting_tests
补充:
- 编辑器 target 名称是
XCVolumeRendererUI2 - 输出文件名是
editor/bin/<Config>/XCEngine.exe
6. 推荐验证入口
6.1 全量
ctest --test-dir build -C Debug --output-on-failure
6.2 RHI
cmake --build build --config Debug --target rhi_abstraction_tests
cmake --build build --config Debug --target rhi_backend_tests
6.3 Rendering
cmake --build build --config Debug --target rendering_unit_tests
cmake --build build --config Debug --target rendering_integration_backpack_scene
6.4 Editor / Scripting
cmake --build build --config Debug --target editor_tests
cmake --build build --config Debug --target scripting_tests
7. 当前最合理的工作方式
适用于当前仓库的协作方式:
- 先在现有模块边界里定位问题,不要绕开体系补 sample 代码
- 改动后立即补或更新测试
- 先跑和改动最相关的测试,再决定是否扩大全量验证
- 每个阶段完成后尽快提交,保持工作区清晰
特别是涉及:
RHIRenderingEditor viewportScripting runtime
这些模块时,必须避免“表面修好了,但测试基线退化”的情况。
8. 文档入口
- 项目概览与目录树:README.md
- RHI 设计基线:docs/plan/end/RHI模块设计与实现/RHI模块总览.md
- Renderer 设计文档:docs/plan/Renderer模块设计与实现.md
- 测试规范:tests/TEST_SPEC.md