Files
XCEngine/docs/blueprint.md

1021 lines
27 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# XCEngine 蓝图
---
# SYSTEM_META
```yaml
name: XCEngine
version: 0.1.0
type: game-engine
description: "模块化的 C++17 游戏引擎,支持 D3D12 和 OpenGL 双图形后端"
target_runtime: C++17
```
---
# SYSTEM_STRUCTURE
```yaml
root: XCEngine
subsystems:
- name: Core
responsibilities:
- "提供基础类型别名和断言机制"
- "实现引用计数智能指针"
- "提供线程安全的事件发布/订阅系统"
- "提供文件写入 RAII 封装"
provides: [RefCounted, Event, FileWriter, SmartPtr]
depends_on: []
boundary:
inputs: []
outputs: [类型系统]
- name: Math
responsibilities:
- "实现向量、矩阵、四元数数学运算"
- "提供变换Transform层次组合"
- "实现几何基元(平面、球体、盒子、射线、视锥体)"
provides: [Vector, Matrix, Quaternion, Transform, Geometry]
depends_on: [Core]
boundary:
inputs: [Core 类型]
outputs: [数学计算结果]
- name: Containers
responsibilities:
- "提供动态数组模板"
- "提供字符串处理功能"
- "提供基于开放寻址的哈希表"
provides: [Array, String, HashMap]
depends_on: [Core, Memory]
boundary:
inputs: [Core 类型]
outputs: [容器实例]
- name: Memory
responsibilities:
- "定义内存分配器抽象接口"
- "实现线性分配器(栈式)"
- "实现池分配器(固定大小块)"
- "提供代理分配器(统计追踪)"
- "管理全局内存系统"
provides: [IAllocator, LinearAllocator, PoolAllocator, ProxyAllocator, MemoryManager]
depends_on: [Core]
boundary:
inputs: [分配请求]
outputs: [内存块]
- name: Threading
responsibilities:
- "封装线程 RAII 管理"
- "提供互斥锁、自旋锁、读写锁"
- "实现任务系统和线程池"
- "支持任务依赖和优先级调度"
provides: [Thread, Mutex, TaskSystem, TaskGroup]
depends_on: [Core, Containers]
boundary:
inputs: [任务函数]
outputs: [执行结果]
- name: Debug
responsibilities:
- "提供多层级分类日志系统"
- "支持多种日志输出目标(控制台、文件)"
- "实现性能分析器和 Chrome 追踪导出"
provides: [Logger, Profiler, ILogSink]
depends_on: [Core, Containers, Threading]
boundary:
inputs: [日志消息]
outputs: [日志输出]
- name: Resources
responsibilities:
- "管理所有游戏资源的生命周期"
- "实现资源加载器框架和多种格式支持"
- "提供 LRU 缓存和内存预算控制"
- "支持异步加载和依赖图管理"
- "管理资源文件系统路径和资源包"
provides: [IResource, ResourceManager, ResourceHandle, AsyncLoader]
depends_on: [Core, Containers, Memory, Threading, Math, Debug]
boundary:
inputs: [资源路径]
outputs: [资源对象]
- name: RHI
responsibilities:
- "抽象渲染硬件接口,统一不同图形 API"
- "封装 GPU 资源(缓冲区、纹理、着色器)"
- "提供命令列表录制和提交机制"
- "管理描述符堆和管线状态"
provides: [RHIDevice, RHIBuffer, RHITexture, RHIShader, RHICommandList]
depends_on: [Core]
boundary:
inputs: [渲染命令]
outputs: [GPU 调用]
- name: RHI_D3D12
responsibilities:
- "实现 DirectX 12 后端"
- "封装 D3D12 设备和资源"
- "管理描述符堆和根签名"
provides: [D3D12Device, D3D12Buffer, D3D12Texture]
depends_on: [Core, RHI]
boundary:
inputs: [RHI 调用]
outputs: [D3D12 API]
- name: RHI_OpenGL
responsibilities:
- "实现 OpenGL 4.6+ 后端"
- "封装 OpenGL 设备和资源"
- "管理 VAO 和采样器状态"
provides: [OpenGLDevice, OpenGLBuffer, OpenGLTexture]
depends_on: [Core, RHI]
boundary:
inputs: [RHI 调用]
outputs: [OpenGL API]
modules:
- name: CoreTypes
parent_subsystem: Core
responsibility: "定义基础类型别名int8、uint32 等)和断言宏"
public_api:
- fn: Assert
params:
- name: condition
type: bool
- name: message
type: const char*
returns: type: void
- name: CoreSmartPtr
parent_subsystem: Core
responsibility: "实现引用计数智能指针 Ref<T> 和 UniqueRef<T>"
public_api:
- fn: MakeRef
params:
- name: args
type: Args...
returns: type: Ref<T>
- fn: MakeUnique
params:
- name: args
type: Args...
returns: type: UniqueRef<T>
- name: CoreEvent
parent_subsystem: Core
responsibility: "提供线程安全的事件发布/订阅系统"
public_api:
- fn: Subscribe
params:
- name: callback
type: std::function<void(Args...)>
returns: type: uint32
- fn: Unsubscribe
params:
- name: id
type: uint32
returns: type: void
- fn: Invoke
params:
- name: args
type: Args...
returns: type: void
- name: MathVector
parent_subsystem: Math
responsibility: "实现 Vector2、Vector3、Vector4 及其运算"
public_api:
- fn: Dot
params:
- name: a
type: const Vector3&
- name: b
type: const Vector3&
returns: type: float
- fn: Cross
params:
- name: a
type: const Vector3&
- name: b
type: const Vector3&
returns: type: Vector3
- fn: Normalize
params:
- name: v
type: const Vector3&
returns: type: Vector3
- fn: Lerp
params:
- name: a
type: const Vector3&
- name: b
type: const Vector3&
- name: t
type: float
returns: type: Vector3
- name: MathMatrix
parent_subsystem: Math
responsibility: "实现 Matrix3x3、Matrix4x4 及其运算"
public_api:
- fn: Perspective
params:
- name: fov
type: float
- name: aspect
type: float
- name: near
type: float
- name: far
type: float
returns: type: Matrix4x4
- fn: LookAt
params:
- name: eye
type: const Vector3&
- name: target
type: const Vector3&
- name: up
type: const Vector3&
returns: type: Matrix4x4
- fn: Inverse
params:
- name: m
type: const Matrix4x4&
returns: type: Matrix4x4
- name: MathQuaternion
parent_subsystem: Math
responsibility: "实现四元数和旋转变换"
public_api:
- fn: FromAxisAngle
params:
- name: axis
type: const Vector3&
- name: angle
type: float
returns: type: Quaternion
- fn: FromEulerAngles
params:
- name: pitch
type: float
- name: yaw
type: float
- name: roll
type: float
returns: type: Quaternion
- fn: Slerp
params:
- name: a
type: const Quaternion&
- name: b
type: const Quaternion&
- name: t
type: float
returns: type: Quaternion
- name: MathTransform
parent_subsystem: Math
responsibility: "实现位置/旋转/缩放变换层次"
public_api:
- fn: Translate
params:
- name: position
type: const Vector3&
returns: type: Transform&
- fn: Rotate
params:
- name: rotation
type: const Quaternion&
returns: type: Transform&
- fn: Scale
params:
- name: scale
type: const Vector3&
returns: type: Transform&
- fn: ToMatrix
returns: type: Matrix4x4
- name: MathGeometry
parent_subsystem: Math
responsibility: "实现几何基元Plane、Sphere、Box、Ray、Frustum、AABB、OBB"
public_api:
- fn: Intersects
params:
- name: ray
type: const Ray&
- name: sphere
type: const Sphere&
returns: type: bool
- fn: Contains
params:
- name: frustum
type: const Frustum&
- name: point
type: const Vector3&
returns: type: bool
- name: ContainersArray
parent_subsystem: Containers
responsibility: "提供模板动态数组"
public_api:
- fn: push
params:
- name: value
type: const T&
returns: type: void
- fn: emplace
params:
- name: args
type: Args...
returns: type: T&
- fn: Size
returns: type: uint32
- name: ContainersString
parent_subsystem: Containers
responsibility: "提供字符串处理功能"
public_api:
- fn: Substring
params:
- name: start
type: uint32
- name: length
type: uint32
returns: type: String
- fn: Trim
returns: type: String
- fn: Find
params:
- name: str
type: const String&
returns: type: int32
- name: ContainersHashMap
parent_subsystem: Containers
responsibility: "提供基于开放寻址的哈希表"
public_api:
- fn: Insert
params:
- name: key
type: const K&
- name: value
type: const V&
returns: type: bool
- fn: Find
params:
- name: key
type: const K&
returns: type: Iterator
- fn: Remove
params:
- name: key
type: const K&
returns: type: bool
- name: MemoryAllocators
parent_subsystem: Memory
responsibility: "实现线性分配器、池分配器、代理分配器"
public_api:
- fn: Allocate
params:
- name: size
type: size_t
returns: type: void*
- fn: Free
params:
- name: ptr
type: void*
returns: type: void
- fn: Clear
returns: type: void
- name: MemoryManager
parent_subsystem: Memory
responsibility: "管理全局内存分配器和追踪统计"
public_api:
- fn: Get
returns: type: MemoryManager&
- fn: CreateLinearAllocator
params:
- name: size
type: size_t
returns: type: LinearAllocator
- fn: CreatePoolAllocator
params:
- name: blockSize
type: size_t
- name: blockCount
type: uint32
returns: type: PoolAllocator
- name: ThreadingPrimitives
parent_subsystem: Threading
responsibility: "提供线程、互斥锁、自旋锁、读写锁"
public_api:
- fn: Thread
params:
- name: func
type: std::function<void()>
returns: type: void
- fn: Lock
returns: type: void
- fn: Unlock
returns: type: void
- name: ThreadingTaskSystem
parent_subsystem: Threading
responsibility: "实现任务调度和线程池"
public_api:
- fn: Get
returns: type: TaskSystem&
- fn: ParallelFor
params:
- name: begin
type: uint32
- name: end
type: uint32
- name: func
type: std::function<void(uint32)>
returns: type: void
- fn: Submit
params:
- name: task
type: ITask*
returns: type: void
- fn: Wait
returns: type: void
- name: DebugLogger
parent_subsystem: Debug
responsibility: "提供多层级分类日志系统"
public_api:
- fn: Get
returns: type: Logger&
- fn: Log
params:
- name: category
type: const char*
- name: level
type: LogLevel
- name: message
type: const char*
returns: type: void
- name: DebugProfiler
parent_subsystem: Debug
responsibility: "实现性能分析器"
public_api:
- fn: Get
returns: type: Profiler&
- fn: BeginSession
params:
- name: name
type: const char*
returns: type: void
- fn: EndSession
returns: type: void
- fn: ExportChromeTracing
params:
- name: path
type: const char*
returns: type: void
- name: ResourcesIResource
parent_subsystem: Resources
responsibility: "定义资源基接口"
public_api:
- fn: GetType
returns: type: ResourceType
- fn: GetName
returns: type: const String&
- fn: GetPath
returns: type: const String&
- fn: GetGUID
returns: type: const ResourceGUID&
- name: ResourcesManager
parent_subsystem: Resources
responsibility: "管理资源生命周期、加载、卸载"
public_api:
- fn: Get
returns: type: ResourceManager&
- fn: Load
params:
- name: path
type: const String&
returns: type: LoadResult
- fn: LoadAsync
params:
- name: path
type: const String&
- name: callback
type: std::function<void(ResourceHandle<IResource>)>
returns: type: void
- fn: Unload
params:
- name: guid
type: const ResourceGUID&
returns: type: void
- name: ResourcesLoaders
parent_subsystem: Resources
responsibility: "实现各类资源加载器"
public_api:
- fn: Load
params:
- name: path
type: const String&
returns: type: IResource*
- fn: GetSupportedExtensions
returns: type: Array<String>
- fn: CanLoad
params:
- name: path
type: const String&
returns: type: bool
- name: ResourcesFileSystem
parent_subsystem: Resources
responsibility: "管理资源路径和资源包"
public_api:
- fn: Get
returns: type: ResourceFileSystem&
- fn: RegisterLoader
params:
- name: loader
type: IResourceLoader*
returns: type: void
- fn: LoadPackage
params:
- name: path
type: const String&
returns: type: bool
- name: RHIDevice
parent_subsystem: RHI
responsibility: "创建和管理 RHI 设备及资源"
public_api:
- fn: CreateBuffer
params:
- name: desc
type: const RHIBufferDesc&
returns: type: RHIBuffer*
- fn: CreateTexture
params:
- name: desc
type: const RHITextureDesc&
returns: type: RHITexture*
- fn: CreateShader
params:
- name: desc
type: const RHIShaderDesc&
returns: type: RHIShader*
- fn: CreateCommandList
returns: type: RHICommandList*
- fn: GetCapabilities
returns: type: const RHICapabilities&
- name: RHICommandList
parent_subsystem: RHI
responsibility: "录制和提交图形命令"
public_api:
- fn: Draw
params:
- name: vertexCount
type: uint32
- name: instanceCount
type: uint32
returns: type: void
- fn: DrawIndexed
params:
- name: indexCount
type: uint32
- name: instanceCount
type: uint32
returns: type: void
- fn: Dispatch
params:
- name: x
type: uint32
- name: y
type: uint32
- name: z
type: uint32
returns: type: void
- fn: SetPipelineState
params:
- name: state
type: RHIPipelineState*
returns: type: void
- name: RHIFactory
parent_subsystem: RHI
responsibility: "静态工厂创建后端设备"
public_api:
- fn: CreateRHIDevice
params:
- name: type
type: RHIDeviceType
returns: type: RHIDevice*
- name: RHIBuffer
parent_subsystem: RHI
responsibility: "封装 GPU 缓冲区"
public_api:
- fn: Map
params:
- name: offset
type: size_t
- name: size
type: size_t
returns: type: void*
- fn: Unmap
returns: type: void
- name: RHITexture
parent_subsystem: RHI
responsibility: "封装 GPU 纹理"
public_api:
- fn: GetWidth
returns: type: uint32
- fn: GetHeight
returns: type: uint32
- fn: GetFormat
returns: type: PixelFormat
```
---
# EVOLUTION_MODE
```yaml
mode: build
description: "XCEngine 处于早期构建阶段,核心基础设施正在逐步完善"
context: |
XCEngine 是一个正在开发中的游戏引擎项目,当前版本 0.1.0 专注于建立核心基础设施。
核心模块Core、Math、Containers、Memory已基本完成提供了游戏引擎所需的基础构建块。
渲染系统RHI已完成双后端支持D3D12 和 OpenGL但高级渲染特性如光线追踪、
网格着色器)尚未实现。
资源管理系统Resources已具备完整的加载框架支持异步加载、缓存和依赖管理
但仅支持基础格式(纹理、网格、着色器)。
缺少的子系统物理系统、脚本系统、实体组件系统ECS、音频系统、UI 系统。
这些将在后续迭代中逐步添加。
```
---
# REQUIREMENTS
- id: REQ-001
title: "核心数学库完善"
description: "扩展数学库以支持 SIMD 优化,提供更高效的向量/矩阵运算"
source: user
type: non-functional
acceptance_criteria:
- "向量运算支持 SSE/AVX 加速"
- "矩阵运算支持 SIMD 优化"
- "性能基准测试显示 2x 以上的性能提升"
priority: P1
- id: REQ-002
title: "资源系统扩展"
description: "增加更多资源格式支持,包括音频、动画、骨骼网格"
source: user
type: functional
acceptance_criteria:
- "支持 WAV 音频加载"
- "支持 glTF 格式模型导入"
- "支持骨骼动画数据"
priority: P1
- id: REQ-003
title: "异步任务系统增强"
description: "支持任务优先级、任务亲和性、任务追踪"
source: user
type: functional
acceptance_criteria:
- "支持高/中/低三档任务优先级"
- "支持将任务分配到特定线程"
- "提供任务执行状态查询接口"
priority: P2
- id: REQ-004
title: "内存追踪和泄漏检测"
description: "增强内存管理器,提供分配追踪和泄漏检测功能"
source: user
type: non-functional
acceptance_criteria:
- "记录每次分配的调用栈"
- "检测并报告内存泄漏"
- "生成内存使用报告"
priority: P1
- id: REQ-005
title: "渲染管线扩展"
description: "增加 Compute Shader 支持、GPU 驱动的剔除、延迟渲染管线"
source: user
type: functional
acceptance_criteria:
- "支持 Compute Shader 执行"
- "实现视锥体剔除"
- "提供延迟渲染模板"
priority: P2
- id: REQ-006
title: "日志系统国际化"
description: "支持多语言日志输出"
source: user
type: functional
acceptance_criteria:
- "支持日志消息参数化"
- "支持格式化字符串"
- "提供本地化接口"
priority: P2
---
# MVS_DEFINITION
```yaml
mvs_solutions:
- id: MVS-001
name: "SIMD 数学优化"
goal: "为数学库添加 SIMD 加速,提升渲染和物理计算性能"
verification_criteria:
- "矩阵乘法性能提升 2x 以上"
- "向量点积/叉积性能提升 2x 以上"
- "不破坏现有 API 兼容性"
scope:
- subsystem: Math
components: [Vector, Matrix, Quaternion]
- external: [SSE4.2, AVX2]
code_structure:
- file: "engine/include/XCEngine/Math/Vector3.inl"
purpose: "SIMD 向量实现"
contains:
- "SSE/AVX 向量运算内联函数"
- "跨平台 SIMD 选择宏"
standalone: true
- file: "engine/include/XCEngine/Math/Matrix4x4.inl"
purpose: "SIMD 矩阵实现"
contains:
- "SSE/AVX 矩阵乘法"
- "SIMD 矩阵求逆"
standalone: true
integration_plan:
- step: "定义 SIMD 抽象层选择宏XC_USE_SSE/AVX"
- step: "在 Vector3.h 中引入条件编译的 SIMD 实现"
- step: "在 Matrix4x4.h 中引入 SIMD 乘法实现"
- step: "添加性能基准测试"
status: pending
- id: MVS-002
name: "音频资源加载器"
goal: "实现 WAV 格式音频加载,为后续音频系统打基础"
verification_criteria:
- "成功加载标准 WAV 文件"
- "正确解析音频参数(采样率、声道、位深)"
- "提供 AudioClip 资源对象"
scope:
- subsystem: Resources
components: [AudioLoader, AudioClip]
- external: [stb_vorbis, libwav]
code_structure:
- file: "engine/include/XCEngine/Resources/AudioClip.h"
purpose: "音频数据资源"
contains:
- "AudioClip 类定义"
- "音频格式枚举"
standalone: true
- file: "engine/src/Resources/AudioLoader.cpp"
purpose: "WAV 加载器实现"
contains:
- "WAV 文件解析"
- "音频数据解码"
standalone: false
integration_plan:
- step: "创建 AudioClip 资源类"
- step: "实现 WAV 解析器"
- step: "注册 AudioLoader 到 ResourceManager"
- step: "添加单元测试"
status: pending
- id: MVS-003
name: "内存泄漏检测器"
goal: "为 Memory 模块添加分配追踪和泄漏报告功能"
verification_criteria:
- "记录所有分配操作和调用栈"
- "在程序结束时输出泄漏报告"
- "支持泄漏检测白名单"
scope:
- subsystem: Memory
components: [AllocationTracker, MemoryReport]
- external: [DbgHelp.dll, walkmacros]
code_structure:
- file: "engine/include/XCEngine/Memory/AllocationTracker.h"
purpose: "分配追踪器"
contains:
- "AllocationTracker 单例"
- "调用栈记录器"
standalone: true
- file: "engine/src/Memory/AllocationTracker.cpp"
purpose: "追踪器实现"
contains:
- "DbgHelp 调用栈捕获"
- "泄漏检测算法"
standalone: false
integration_plan:
- step: "创建 AllocationTracker 类"
- step: "修改 ProxyAllocator 集成追踪器"
- step: "实现泄漏报告生成器"
- step: "在程序退出时自动输出报告"
status: pending
```
---
# DATA_MODELS
```yaml
- name: ResourceHandle
description: "类型安全的资源智能指针,自动引用计数"
fields:
- name: m_resource
type: T*
default: nullptr
constraints: optional
- name: m_refCount
type: uint32*
default: nullptr
constraints: optional
- name: ResourceGUID
description: "资源的全局唯一标识符,由路径哈希生成"
fields:
- name: m_hash
type: uint64
default: 0
constraints: required
- name: LoadResult
description: "资源加载结果"
fields:
- name: success
type: bool
default: false
constraints: required
- name: resource
type: IResource*
default: nullptr
constraints: optional
- name: errorMessage
type: String
default: ""
constraints: optional
- name: RHICapabilities
description: "GPU 硬件能力查询"
fields:
- name: raytracing
type: bool
default: false
constraints: optional
- name: meshShaders
type: bool
default: false
constraints: optional
- name: tessellation
type: bool
default: false
constraints: optional
- name: maxTextureSize
type: uint32
default: 4096
constraints: optional
- name: Transform
description: "位置、旋转、缩放的三维变换"
fields:
- name: m_position
type: Vector3
default: (0,0,0)
constraints: required
- name: m_rotation
type: Quaternion
default: identity
constraints: required
- name: m_scale
type: Vector3
default: (1,1,1)
constraints: required
- name: Frustum
description: "视锥体,用于裁剪检测"
fields:
- name: m_planes
type: Array<Plane, 6>
default: []
constraints: required
- name: m_corners
type: Array<Vector3, 8>
default: []
constraints: required
- name: IResource
description: "所有资源的基接口"
fields:
- name: m_type
type: ResourceType
constraints: required
- name: m_name
type: String
constraints: required
- name: m_path
type: String
constraints: required
- name: m_guid
type: ResourceGUID
constraints: required
```
---
# EVOLUTION_PLAN
```yaml
fix_plan:
- issue_id: BUG-001
description: "LinearAllocator Clear 后重新分配时可能返回重叠内存"
root_cause: "Clear 仅重置指针,未清理旧内存映射"
minimal_change:
- file: "engine/src/Memory/LinearAllocator.cpp"
verification: "连续 Clear 和分配,检查内存区域不重叠"
- issue_id: BUG-002
description: "Event 在多线程同时订阅/取消订阅时存在竞态条件"
root_cause: "订阅列表操作未加锁保护"
minimal_change:
- file: "engine/include/XCEngine/Core/Event.h"
verification: "压力测试多线程订阅场景,无崩溃和数据错误"
refactor_plan:
- target: "统一内存分配接口"
constraints:
- "保持向后兼容"
- "不引入运行时开销"
steps:
- "提取 IAllocator 接口的最小子集"
- "将 MakeRef/MakeUnique 重构为使用分配器参数"
- "添加便捷宏 XE_NEW/T_XE_DELETE"
- target: "RHI 资源状态转换自动化"
constraints:
- "保持性能"
- "兼容现有渲染器"
steps:
- "引入资源状态跟踪器"
- "自动插入转换 barriers"
- "暴露手动控制接口"
feature_plan:
- feature_id: FEAT-001
name: "实体组件系统ECS"
addition: "实现高性能 ECS 架构,支持 archetypes 和 query"
integration_point: "Engine 层,位于 Resources 和 Gameplay 之间"
steps:
- "定义 Component、Entity、World 接口"
- "实现 Archetype 存储"
- "实现 Query 系统"
- "集成到引擎主循环"
- feature_id: FEAT-002
name: "物理子系统"
addition: "集成物理引擎,支持刚体、碰撞体"
integration_point: "Core 层下方,独立子系统"
steps:
- "评估物理引擎集成Bullet/PhysX"
- "封装物理世界接口"
- "实现碰撞检测和响应"
- "集成到渲染管线"
- feature_id: FEAT-003
name: "脚本系统"
addition: "支持 Lua 脚本和自定义脚本语言绑定"
integration_point: "Core 层上方,独立子系统"
steps:
- "集成 Lua 虚拟机"
- "绑定核心引擎 API"
- "实现脚本组件"
- "支持热重载"
```
---