XCEngine

XCEngine 是一个 Windows 优先、编辑器优先的模块化 C++ 游戏引擎工作区。当前主线已经形成 RHI -> Rendering -> Editor Viewport -> AssetDatabase/Library -> Mono Scripting 的可运行闭环,不再只是示例代码集合。

这份 README 面向引擎用户:关注怎么进入项目、怎么构建、当前仓库各目录分别负责什么。面向构建本引擎的 coding agent请看 AGENT.md

项目定位

  • engine/ 提供静态库 XCEngine,包含 RHIRenderingResourcesSceneScripting 等核心模块。
  • editor/ 提供桌面编辑器 XCEditor,输出文件名为 XCEngine.exe,默认打开仓库内的 project/
  • project/ 是当前随仓库维护的示例工程,已经采用 Assets/ + .meta + Library/ 的工程布局。
  • managed/ 负责 XCEngine.ScriptCore.dll、示例 GameScripts.dll 以及项目脚本程序集构建。
  • tests/ 已覆盖 Engine、RHI、Rendering、Editor、Scripting 等主要模块。

环境要求

当前推荐在 Windows 上使用和构建。

  • Windows 10/11
  • Visual Studio 2022 / MSVC v143
  • CMake 3.15+
  • Vulkan SDK
  • .NET SDK
  • Git LFS

启用 Mono 脚本运行时时,还需要:

  • 参考/Fermion/Fermion/external/mono 下可用的 Mono 头文件、静态库与 mscorlib.dll

补充说明:

  • engine/CMakeLists.txt 当前对 Vulkan 是硬依赖,未配置 Vulkan SDK 时无法完成配置。
  • editor/tests/ 首次配置会通过 FetchContent 从 Gitee 镜像拉取 ImGuigoogletest;离线环境请确保已有可复用的 _deps 缓存。
  • 如果需要 mvs/3DGS-Unity/room.ply 这类大文件示例,请先执行 Git LFS 拉取。

快速开始

1. 配置

cmake -S . -B build -A x64

如果本地暂时没有 Mono 依赖,可以先关闭脚本运行时:

cmake -S . -B build -A x64 -DXCENGINE_ENABLE_MONO_SCRIPTING=OFF

2. 构建常用目标

cmake --build build --config Debug --target XCEngine
cmake --build build --config Debug --target XCEditor
cmake --build build --config Debug --target xcengine_managed_assemblies
cmake --build build --config Debug --target xcengine_project_managed_assemblies

说明:

  • XCEngine 是引擎静态库。
  • XCEditor 是编辑器 target输出文件名仍为 editor/bin/<Config>/XCEngine.exe
  • xcengine_managed_assemblies 生成 managed/ 示例托管程序集。
  • xcengine_project_managed_assemblies 会扫描 project/Assets/**/*.cs,并把结果输出到 project/Library/ScriptAssemblies/

3. 启动编辑器

.\editor\bin\Debug\XCEngine.exe

默认情况下,编辑器会自动把仓库内的 project/ 识别为工程根目录。也可以显式指定其他工程:

.\editor\bin\Debug\XCEngine.exe --project D:\Path\To\MyProject

如果 Inspector 里看不到 C# 脚本类,先确认 project/Library/ScriptAssemblies/ 中已经生成:

  • XCEngine.ScriptCore.dll
  • GameScripts.dll
  • mscorlib.dll

4. 当前推荐验证入口

ctest --test-dir build -N -C Debug
ctest --test-dir build -C Debug --output-on-failure

按模块常用的构建 / 验证 target

cmake --build build --config Debug --target rhi_all_tests
cmake --build build --config Debug --target rendering_all_tests
cmake --build build --config Debug --target rendering_phase_regression
cmake --build build --config Debug --target editor_tests
cmake --build build --config Debug --target scripting_tests

当前仓库状态

Engine

  • RHI 正式维护 D3D12 / OpenGL / Vulkan 三后端。
  • Rendering 已形成 SceneRenderer -> CameraRenderer -> RenderPipeline 主链,包含 ObjectIdInfiniteGridOutlineoverlayPasses 等能力。
  • ResourcesCore/Asset 已不只是简单加载器,当前已经具备 Assets/.meta/Library 风格的 AssetDatabase 与 artifact 缓存。

Editor

  • 当前 editor 是 D3D12 宿主应用,但 Scene/Game viewport 已通过引擎 Rendering + RHI 链路渲染到离屏纹理,再接入 ImGui。
  • Viewport 相关代码已经进入 overlay/gizmo 正规化阶段,SceneViewportOverlayBuilderSceneViewportEditorOverlayPassObjectId picking 都已落地。
  • Inspector 已支持 ScriptComponent 的脚本类选择、字段元数据读取、字段重置与基础编辑。

Project & Scripting

  • 示例工程位于 project/,当前工程文件是 Project.xcproject,启动场景为 Assets/Scenes/Main.xc
  • project/Assets/ 现已包含 .meta 文件,project/Library/ 则维护 SourceAssetDBArtifactDBArtifactsScriptAssemblies
  • managed/ 会生成引擎脚本 API 与示例脚本程序集,项目资产下的 .cs 文件也会被单独编译为项目脚本程序集。

Tests

  • tests/ 已覆盖 CoreMemoryThreadingSceneResourcesRHIRenderingEditorScripting 等模块。
  • tests/Rendering/ 当前已包含 backpack_scenebackpack_lit_scenecamera_stack_sceneoffscreen_scene 等集成场景。
  • tests/RHI/ 同时维护抽象层测试与后端专用测试,D3D12 / OpenGL / Vulkan 都有独立子树。

完整目录结构

以下目录树以当前工程入口为准,保留了当前 workflow 已经实际使用的生成目录;省略 .git/build/_deps/ 与临时文件。

XCEngine/
├── .gitattributes
├── .gitignore
├── AGENT.md
├── CMakeLists.txt
├── README.md
├── build/                                      # 本地 CMake 构建输出
├── docs/
│   ├── api/
│   │   ├── XCEngine/
│   │   ├── _guides/
│   │   ├── _meta/
│   │   ├── _tools/
│   │   └── main.md
│   ├── issues/
│   ├── plan/
│   │   ├── end/
│   │   │   ├── RHI模块设计与实现/
│   │   │   │   ├── RHIFence.md
│   │   │   │   └── RHI模块总览.md
│   │   │   └── 编辑器与运行时分层架构设计.md
│   │   ├── 开题报告和任务书/
│   │   ├── 旧版题目/
│   │   ├── API文档并行更新任务池_2026-04-02.md
│   │   ├── C#脚本模块的设计与实现.md
│   │   ├── Editor架构说明.md
│   │   ├── SceneViewport_Overlay_Gizmo_Rework_Plan.md
│   │   ├── Shader与Material系统下一阶段计划.md
│   │   ├── Unity SRP API参考文档.md
│   │   ├── Unity式Library资产导入与缓存系统重构方案.md
│   │   ├── Unity式Tick系统与PlayMode运行时方案.md
│   │   ├── Unity式Tick系统与PlayMode运行时方案-阶段进展.md
│   │   └── Unity绝区零开发文档还原版.md
│   ├── used/
│   ├── api-skill.md
│   ├── blueprint-skill.md
│   └── blueprint.md
├── editor/
│   ├── CMakeLists.txt
│   ├── README.md
│   ├── resources/
│   │   └── Icons/
│   ├── src/
│   │   ├── Actions/
│   │   ├── Commands/
│   │   ├── ComponentEditors/
│   │   ├── Core/
│   │   ├── Layers/
│   │   ├── Layout/
│   │   ├── Managers/
│   │   ├── panels/
│   │   ├── Platform/
│   │   ├── UI/
│   │   ├── Utils/
│   │   ├── Viewport/
│   │   │   ├── Passes/
│   │   │   ├── SceneViewportOverlayBuilder.cpp
│   │   │   ├── SceneViewportOverlayBuilder.h
│   │   │   ├── SceneViewportOverlayRenderer.cpp
│   │   │   ├── SceneViewportOverlayRenderer.h
│   │   │   ├── SceneViewportPicker.cpp
│   │   │   ├── SceneViewportPicker.h
│   │   │   ├── SceneViewportMoveGizmo.cpp
│   │   │   ├── SceneViewportMoveGizmo.h
│   │   │   ├── SceneViewportRotateGizmo.cpp
│   │   │   ├── SceneViewportRotateGizmo.h
│   │   │   ├── SceneViewportScaleGizmo.cpp
│   │   │   ├── SceneViewportScaleGizmo.h
│   │   │   ├── ViewportHostRenderFlowUtils.h
│   │   │   └── ViewportHostService.h
│   │   ├── Application.cpp
│   │   ├── Application.h
│   │   ├── EditorApp.rc
│   │   ├── Theme.cpp
│   │   ├── Theme.h
│   │   └── main.cpp
│   └── bin/                                   # 编辑器输出目录,输出名为 XCEngine.exe
├── engine/
│   ├── CMakeLists.txt
│   ├── include/
│   │   └── XCEngine/
│   │       ├── Audio/
│   │       ├── Components/
│   │       ├── Core/
│   │       │   ├── Asset/
│   │       │   ├── Containers/
│   │       │   ├── IO/
│   │       │   └── Math/
│   │       ├── Debug/
│   │       ├── Input/
│   │       ├── Memory/
│   │       ├── Platform/
│   │       │   └── Windows/
│   │       ├── Rendering/
│   │       │   ├── Passes/
│   │       │   ├── Pipelines/
│   │       │   ├── CameraRenderer.h
│   │       │   ├── CameraRenderRequest.h
│   │       │   ├── ObjectIdEncoding.h
│   │       │   ├── ObjectIdPass.h
│   │       │   ├── RenderCameraData.h
│   │       │   ├── RenderContext.h
│   │       │   ├── RenderMaterialUtility.h
│   │       │   ├── RenderPass.h
│   │       │   ├── RenderPipeline.h
│   │       │   ├── RenderPipelineAsset.h
│   │       │   ├── RenderResourceCache.h
│   │       │   ├── RenderSceneExtractor.h
│   │       │   ├── RenderSceneUtility.h
│   │       │   ├── RenderSurface.h
│   │       │   ├── SceneRenderRequestPlanner.h
│   │       │   ├── SceneRenderRequestUtils.h
│   │       │   ├── SceneRenderer.h
│   │       │   └── VisibleRenderObject.h
│   │       ├── Resources/
│   │       │   ├── AudioClip/
│   │       │   ├── Material/
│   │       │   ├── Mesh/
│   │       │   ├── Shader/
│   │       │   └── Texture/
│   │       ├── RHI/
│   │       │   ├── D3D12/
│   │       │   ├── OpenGL/
│   │       │   └── Vulkan/
│   │       ├── Scene/
│   │       ├── Scripting/
│   │       │   └── Mono/
│   │       └── Threading/
│   ├── src/
│   │   ├── Audio/
│   │   ├── Components/
│   │   ├── Core/
│   │   │   ├── Asset/
│   │   │   ├── Containers/
│   │   │   ├── IO/
│   │   │   └── Math/
│   │   ├── Debug/
│   │   ├── Input/
│   │   ├── Memory/
│   │   ├── Platform/
│   │   │   └── Windows/
│   │   ├── Rendering/
│   │   │   ├── Passes/
│   │   │   └── Pipelines/
│   │   ├── Resources/
│   │   │   ├── AudioClip/
│   │   │   ├── Material/
│   │   │   ├── Mesh/
│   │   │   ├── Shader/
│   │   │   └── Texture/
│   │   ├── RHI/
│   │   │   ├── D3D12/
│   │   │   ├── OpenGL/
│   │   │   └── Vulkan/
│   │   ├── Scene/
│   │   ├── Scripting/
│   │   │   └── Mono/
│   │   └── Threading/
│   ├── third_party/
│   │   ├── assimp/
│   │   ├── GLAD/
│   │   ├── kissfft/
│   │   ├── renderdoc/
│   │   └── stb/
│   └── tools/
│       └── renderdoc_parser/
├── managed/
│   ├── CMakeLists.txt
│   ├── GameScripts/
│   └── XCEngine.ScriptCore/
├── mvs/
│   ├── 3DGS-Unity/
│   ├── D3D12/
│   ├── Music fluctuations/
│   ├── OpenGL/
│   ├── RenderDoc/
│   ├── Res/
│   ├── ui/                                   # 早期 ImGui + D3D12 UI 原型,非当前正式 editor
│   └── VolumeRenderer/
├── project/
│   ├── .xceditor/
│   │   ├── imgui_layout.ini
│   │   └── thumbs/
│   ├── Assets/
│   │   ├── Materials/
│   │   ├── Models/
│   │   │   └── backpack/
│   │   ├── New Folder/
│   │   ├── New Folder 1/
│   │   ├── Scenes/
│   │   │   ├── Backpack.xc
│   │   │   └── Main.xc
│   │   └── Scripts/
│   │       ├── ProjectScriptProbe.cs
│   │       └── Textures/
│   ├── Library/
│   │   ├── ArtifactDB/
│   │   ├── Artifacts/
│   │   ├── ScriptAssemblies/
│   │   │   ├── GameScripts.dll
│   │   │   ├── mscorlib.dll
│   │   │   └── XCEngine.ScriptCore.dll
│   │   └── SourceAssetDB/
│   ├── Assets.meta
│   └── Project.xcproject
├── scripts/
│   └── Run-RendererPhaseRegression.ps1
├── tests/
│   ├── CMakeLists.txt
│   ├── TEST_SPEC.md
│   ├── Components/
│   ├── Core/
│   │   ├── Asset/
│   │   ├── Containers/
│   │   ├── IO/
│   │   └── Math/
│   ├── Debug/
│   ├── Editor/
│   ├── Fixtures/
│   ├── Input/
│   ├── Memory/
│   ├── Rendering/
│   │   ├── integration/
│   │   │   ├── backpack_lit_scene/
│   │   │   ├── backpack_scene/
│   │   │   ├── camera_stack_scene/
│   │   │   ├── cull_material_scene/
│   │   │   ├── depth_sort_scene/
│   │   │   ├── material_state_scene/
│   │   │   ├── offscreen_scene/
│   │   │   ├── textured_quad_scene/
│   │   │   └── transparent_material_scene/
│   │   └── unit/
│   ├── Resources/
│   │   ├── AudioClip/
│   │   ├── Material/
│   │   ├── Mesh/
│   │   ├── Shader/
│   │   └── Texture/
│   ├── RHI/
│   │   ├── D3D12/
│   │   │   ├── integration/
│   │   │   └── unit/
│   │   ├── integration/
│   │   │   ├── backpack/
│   │   │   ├── fixtures/
│   │   │   ├── minimal/
│   │   │   ├── quad/
│   │   │   ├── sphere/
│   │   │   └── triangle/
│   │   ├── OpenGL/
│   │   │   ├── integration/
│   │   │   └── unit/
│   │   ├── unit/
│   │   └── Vulkan/
│   │       ├── integration/
│   │       └── unit/
│   ├── Scene/
│   ├── Scripting/
│   └── Threading/
├── 参考/
│   ├── Fermion/
│   ├── TransformGizmo/
│   ├── unity editor/
│   ├── unity-editor-icons/
│   ├── unity-icons/
│   └── UnityRuntimeSceneGizmo-master/
└── .vscode/

关键文档入口

许可证

当前仓库根目录未看到独立的顶层许可证文件。涉及第三方库时,请分别遵循其所在目录中的许可证或随附说明。

Description
No description provided
Readme 1.4 GiB
Languages
C++ 46.5%
HTML 37.9%
C 9.6%
C# 1.4%
GLSL 1%
Other 3.4%