关键节点: - 当前阶段项目侧目录收敛为 Assets / Settings / Library - 移除 Content 相关落地表述 - 重构顺序调整为先 target/API 边界,再做目录迁移 - 每阶段验收统一为 XCEditor 编译 + 12 秒冒烟测试
8.6 KiB
8.6 KiB
XCEngine 重构计划
1. 目标
这份计划用于定义 XCEngine 当前一轮重构的执行顺序和架构边界。
本轮重构的目标是:
- 在代码和构建层面拆开 runtime、pipeline、shared 三类职责
- 在拆分过程中保持 editor 日常迭代路径稳定
- 先理顺依赖和 API,再做物理目录调整
- 每个阶段结束后都执行一次
XCEditor编译和 12 秒冒烟测试
2. 本轮范围
这份计划描述的是当前引擎重构阶段,不是最终交付产物布局。
当前阶段的项目侧数据根目录是:
project/Assetsproject/Settingsproject/Library
当前阶段的基本要求是:
- editor 日常迭代继续基于现有项目工作流
- import、cache、rebuild 等职责逐步从 runtime 侧 API 中拆出去
- 顶层
editor目录结构在前几个阶段保持稳定 - 物理目录调整放到依赖边界稳定之后再做
打包输出路径和产物布局放到单独的交付阶段再定义。
3. 架构规则
3.1 阶段划分
代码库按执行阶段拆分为:
engine/foundation:基础设施层engine/shared:跨阶段稳定契约层engine/runtime:运行时系统pipeline:导入、构建、烘焙系统editor:当前编辑器应用树programs:各类可执行入口
3.2 依赖方向
目标依赖关系收敛为:
foundation
^
|
shared
^ ^
| |
runtime pipeline
^ ^
| |
+--------editor
programs -> runtime / pipeline
约束如下:
runtime只向下依赖foundation和sharedpipeline只向下依赖foundation和sharededitor负责编排 runtime 和 pipelineshared只保留稳定数据契约
3.3 项目数据职责
当前阶段的项目侧数据职责为:
project/Assets:源资源project/Settings:项目配置project/Library:导入缓存、中间产物、索引、日志、脚本编译输出
Library 归 pipeline 侧职责管理。
runtime 可以消费现有工作流准备好的资源数据,但 import 和 build 编排必须继续往 pipeline 侧收拢。
4. 目标目录结构
XCEngine/
CMakeLists.txt
cmake/
engine/
foundation/
base/
containers/
memory/
threading/
diagnostics/
filesystem/
math/
serialization/
shared/
asset/
AssetRef/
LocalID/
ResourceType/
CatalogFormat/
PackageFormat/
cooked/
CompiledTexture/
CompiledMaterial/
CompiledShader/
CompiledModel/
CompiledUIDocument/
CompiledVolume/
CompiledGaussianSplat/
runtime/
platform/
asset/
AssetManager/
ResourceStore/
AsyncLoad/
Catalog/
Package/
CookedReaders/
resources/
Texture/
Mesh/
Material/
Shader/
Model/
UI/
Volume/
GaussianSplat/
scene/
rendering/
core/
passes/
pipelines/
frame_graph/
gpu_cache/
audio/
physics/
scripting/
pipeline/
core/
SourceAssetDB/
ArtifactDB/
SourceIndex/
DependencyGraph/
BuildCache/
BuildGraph/
ImportService/
importers/
TextureImporter/
MaterialImporter/
ShaderImporter/
ModelImporter/
UIDocumentImporter/
VolumeImporter/
GaussianSplatImporter/
compilers/
ShaderCompiler/
UIDocumentCompiler/
writers/
ArtifactWriter/
CatalogWriter/
PackageWriter/
cook/
tools/
editor/
programs/
xcgame/
xcassetbuild/
xccook/
xcshadercook/
managed/
runtime/
editor/
project/
Assets/
Settings/
Library/
SourceDB/
ArtifactDB/
Artifacts/
ImportLogs/
ScriptAssemblies/
tests/
foundation/
shared/
runtime/
pipeline/
editor/
e2e/
docs/
tools/
third_party/
5. 各层职责
5.1 engine/foundation
基础设施层承载全仓通用能力:
- 基础类型
- 日志与诊断
- 字符串和容器
- 数学库
- 线程和同步
- 内存管理
- 序列化
- 文件系统封装
5.2 engine/shared
共享契约层承载跨阶段稳定数据结构:
- 资源标识
- 本地标识
- 资源类型枚举
- catalog / package 描述结构
- 各类 cooked payload 结构
- 版本常量
这一层只放数据契约,不放 manager、loader、cache、importer、orchestrator。
5.3 engine/runtime
运行时层负责:
- 资源加载与解析
- 运行时对象缓存
- 异步加载调度
- scene 系统
- rendering
- audio
- physics
- scripting
runtime 侧收敛原则:
- 面向运行时消费资源
- 不承载源资源导入
- 不承载构建缓存管理
- 不直接持有 pipeline 服务实现
5.4 pipeline
pipeline 层负责:
- 源资源数据库
- 中间产物数据库
- 源资源索引
- 依赖关系图
- 构建缓存
- 构建图
- import service
- 各类 importer 和 compiler
- 中间产物写入和后续打包写入
project/Library 下的导入和构建状态由这一层统一负责。
5.5 editor
当前阶段保留现有顶层 editor 应用树,职责包括:
- workspace / project 相关交互
- runtime 与 pipeline 的编排
- editor 场景和工具工作流
editor 内部目录重组不属于第一阶段工作。
5.6 programs
各类可执行入口统一放在这里,例如:
- 游戏程序
- 资源构建工具
- 烘焙工具
- shader 工具
6. 当前系统到目标结构的映射
当前主要系统映射如下:
ResourceManager->engine/runtime/asset/AssetManagerResourceCache->engine/runtime/asset/ResourceStoreAsyncLoader->engine/runtime/asset/AsyncLoadProjectAssetIndex->pipeline/core/SourceIndexAssetImportService->pipeline/core/ImportServiceAssetDatabase->pipeline/core/SourceAssetDB+pipeline/core/ArtifactDBRenderResourceCache->engine/runtime/rendering/gpu_cache
重构过程中,editor 迭代路径先保持在现有项目工作流上,再逐步完成职责分拆。
7. 构建目标规划
建议的目标族如下:
xc_foundation
xc_shared_asset
xc_shared_cooked
xc_runtime_platform
xc_runtime_asset
xc_runtime_resources
xc_runtime_scene
xc_runtime_rendering
xc_runtime_audio
xc_runtime_physics
xc_runtime_scripting
xc_runtime
xc_pipeline_core
xc_pipeline_importers
xc_pipeline_compilers
xc_pipeline_writers
xc_pipeline_cook
xc_pipeline
xcgame
xcassetbuild
xccook
xcshadercook
构建侧落地原则:
- 运行时可执行程序链接
xc_runtime - 资源工具链接
xc_pipeline - editor 入口结构在前几个阶段保持现状
8. 分阶段执行计划
阶段一:构建边界拆分
目标:
- 先把现有代码拆成 foundation、shared、runtime、pipeline 四类目标
- 这一阶段尽量少动物理文件位置
工作项:
- 拆分 CMake target
- 收敛公共头文件暴露面
- 消除 target 级别的 runtime / pipeline 混杂依赖
阶段验收:
- 编译
XCEditor - 执行 12 秒 editor 冒烟测试
阶段二:API 边界拆分
目标:
- 把 runtime 侧资源访问接口和 pipeline 侧导入/构建职责拆开
工作项:
- 将 import / build 逻辑收拢到 pipeline 服务
- 将 runtime manager 收窄到 load / resolve / cache 范围
- 保持 editor 当前迭代工作流稳定
阶段验收:
- 编译
XCEditor - 执行 12 秒 editor 冒烟测试
阶段三:物理目录迁移
目标:
- 让磁盘目录结构和依赖边界对齐
工作项:
- 把文件迁移到
engine/foundation、engine/shared、engine/runtime、pipeline - 更新 include、CMake 和测试
- 除非前置拆分强依赖,否则不在这一阶段重组 editor 内部树
阶段验收:
- 编译
XCEditor - 执行 12 秒 editor 冒烟测试
阶段四:交付与打包阶段
目标:
- 在 runtime、pipeline、editor 职责已经清晰之后,再引入独立交付流程
工作项:
- 增加专用 cook / build 可执行工具
- 明确交付产物格式和输出路径
- 将交付流程与 editor 日常迭代流程分离
阶段验收:
- 编译
XCEditor - 执行 12 秒 editor 冒烟测试
9. 硬性规则
整个重构过程都遵守以下规则:
Library是 pipeline 侧的缓存和中间状态。- runtime API 只收敛到运行时资源访问职责。
- 大规模文件迁移必须排在 target 和 API 边界稳定之后。
- shared 层只保留稳定数据契约。
- phases 1 到 3 期间,editor 日常迭代路径保持连续可用。
- 每个阶段完成后都要先编译
XCEditor,再执行 12 秒冒烟测试。