docs: update README to reflect current project structure after refactoring
- Correct directory structure (ui_editor -> editor, remove scripts/) - Add Platform/ module (cross-platform abstraction layer) - Add Input/ module - Add Layer/LayerStack to Core module - Add missing RHI abstraction files (DescriptorPool, DescriptorSet, RenderPass, Framebuffer, etc.) - Add missing D3D12 backend files - Add missing OpenGL backend files - Add GLAD to third_party - Add reference/ directory - Add Res/ to mvs/ - Update editor directory structure
This commit is contained in:
217
README.md
217
README.md
@@ -1,17 +1,18 @@
|
||||
# XCEngine
|
||||
|
||||
基于 DirectX 12 的游戏引擎项目,支持体积渲染、跨平台渲染后端和核心模块单元测试。
|
||||
基于 DirectX 12 的模块化游戏引擎,支持体积渲染、跨平台渲染后端和核心模块单元测试。
|
||||
|
||||
## 项目概述
|
||||
|
||||
XCEngine 是一个正在开发中的游戏引擎,采用 RHI(Render Hardware Interface)抽象层设计,支持 DirectX 12 和 OpenGL 多种渲染 API。项目采用模块化设计,包含核心库、示例程序和单元测试。
|
||||
XCEngine 是一个正在开发中的模块化 C++ 游戏引擎,采用 RHI(Render Hardware Interface)抽象层设计,支持 DirectX 12 和 OpenGL 4.6+ 多种渲染 API。项目采用模块化设计,包含核心库、示例程序和单元测试。
|
||||
|
||||
## 技术栈
|
||||
|
||||
- **渲染 API**: DirectX 12, OpenGL 4.6+
|
||||
- **语言**: C++17
|
||||
- **构建系统**: CMake
|
||||
- **构建系统**: CMake 3.15+
|
||||
- **测试框架**: Google Test
|
||||
- **UI**: ImGui(用于编辑器)
|
||||
|
||||
## 项目结构
|
||||
|
||||
@@ -29,8 +30,8 @@ XCEngine/
|
||||
│ │ │ ├── Reverbation.h # 混响效果
|
||||
│ │ │ ├── Equalizer.h # 均衡器
|
||||
│ │ │ ├── IAudioEffect.h # 音频效果接口
|
||||
│ │ │ ├── WindowsAudioBackend.h # Windows 音频后端
|
||||
│ │ │ └── IAudioBackend.h # 音频后端接口
|
||||
│ │ │ ├── IAudioBackend.h # 音频后端接口
|
||||
│ │ │ └── WindowsAudioBackend.h # Windows 音频后端
|
||||
│ │ ├── Components/ # 游戏组件系统
|
||||
│ │ │ ├── Component.h # 组件基类
|
||||
│ │ │ ├── GameObject.h # 游戏对象
|
||||
@@ -76,6 +77,8 @@ XCEngine/
|
||||
│ │ │ │ ├── Bounds.h # 包围体
|
||||
│ │ │ │ ├── Frustum.h # 视锥体
|
||||
│ │ │ │ └── Math.h # 数学库统一头文件
|
||||
│ │ │ ├── Layer.h # 层级
|
||||
│ │ │ ├── LayerStack.h # 层级栈
|
||||
│ │ │ ├── Types.h # 基础类型别名
|
||||
│ │ │ ├── RefCounted.h # 引用计数基类
|
||||
│ │ │ ├── SmartPtr.h # 智能指针
|
||||
@@ -108,6 +111,28 @@ XCEngine/
|
||||
│ │ │ ├── TaskSystem.h # 任务系统
|
||||
│ │ │ ├── TaskSystemConfig.h # 任务系统配置
|
||||
│ │ │ └── Threading.h # 线程模块统一头文件
|
||||
│ │ ├── Platform/ # 平台抽象层
|
||||
│ │ │ ├── PlatformTypes.h # 平台类型
|
||||
│ │ │ ├── IPlatform.h # 平台接口
|
||||
│ │ │ ├── IWindow.h # 窗口接口
|
||||
│ │ │ ├── IFileSystem.h # 文件系统接口
|
||||
│ │ │ ├── IClock.h # 时钟接口
|
||||
│ │ │ ├── IDynamicLibrary.h # 动态库接口
|
||||
│ │ │ ├── IDisplayEnumerator.h # 显示枚举接口
|
||||
│ │ │ ├── GameTime.h # 游戏时间
|
||||
│ │ │ ├── Window.h # 窗口类
|
||||
│ │ │ ├── Windows/ # Windows 平台实现
|
||||
│ │ │ │ ├── WindowsWindow.h
|
||||
│ │ │ │ └── WindowsInputModule.h
|
||||
│ │ │ ├── Linux/ # Linux 平台实现
|
||||
│ │ │ ├── Android/ # Android 平台实现
|
||||
│ │ │ └── macOS/ # macOS 平台实现
|
||||
│ │ ├── Input/ # 输入模块
|
||||
│ │ │ ├── InputTypes.h # 输入类型
|
||||
│ │ │ ├── InputEvent.h # 输入事件
|
||||
│ │ │ ├── InputAxis.h # 输入轴
|
||||
│ │ │ ├── InputModule.h # 输入模块基类
|
||||
│ │ │ └── InputManager.h # 输入管理器
|
||||
│ │ ├── Resources/ # 资源管理模块 (按类型分目录)
|
||||
│ │ │ ├── Texture/ # 纹理资源
|
||||
│ │ │ │ ├── Texture.h
|
||||
@@ -147,6 +172,11 @@ XCEngine/
|
||||
│ │ ├── RHIPipelineState.h # 管线状态抽象
|
||||
│ │ ├── RHIPipelineLayout.h # 管线布局抽象
|
||||
│ │ ├── RHIDescriptorPool.h # 描述符池抽象
|
||||
│ │ ├── RHIDescriptorSet.h # 描述符集抽象
|
||||
│ │ ├── RHIRenderPass.h # 渲染通道抽象
|
||||
│ │ ├── RHIFramebuffer.h # 帧缓冲抽象
|
||||
│ │ ├── RHIResource.h # 资源基类
|
||||
│ │ ├── RHIResourceView.h # 资源视图抽象
|
||||
│ │ ├── OpenGL/ # OpenGL 后端实现
|
||||
│ │ │ ├── OpenGLDevice.h
|
||||
│ │ │ ├── OpenGLCommandQueue.h
|
||||
@@ -161,6 +191,13 @@ XCEngine/
|
||||
│ │ │ ├── OpenGLVertexArray.h
|
||||
│ │ │ ├── OpenGLRenderTargetView.h
|
||||
│ │ │ ├── OpenGLDepthStencilView.h
|
||||
│ │ │ ├── OpenGLFramebuffer.h
|
||||
│ │ │ ├── OpenGLRenderPass.h
|
||||
│ │ │ ├── OpenGLResourceView.h
|
||||
│ │ │ ├── OpenGLDescriptorPool.h
|
||||
│ │ │ ├── OpenGLDescriptorSet.h
|
||||
│ │ │ ├── OpenGLTextureUnitAllocator.h
|
||||
│ │ │ ├── OpenGLUniformBufferManager.h
|
||||
│ │ │ └── OpenGLScreenshot.h
|
||||
│ │ └── D3D12/ # DirectX 12 后端实现
|
||||
│ │ ├── D3D12Device.h
|
||||
@@ -175,16 +212,21 @@ XCEngine/
|
||||
│ │ ├── D3D12Sampler.h
|
||||
│ │ ├── D3D12Fence.h
|
||||
│ │ ├── D3D12DescriptorHeap.h
|
||||
│ │ ├── D3D12DescriptorSet.h
|
||||
│ │ ├── D3D12RootSignature.h
|
||||
│ │ ├── D3D12PipelineLayout.h
|
||||
│ │ ├── D3D12RenderTargetView.h
|
||||
│ │ ├── D3D12DepthStencilView.h
|
||||
│ │ ├── D3D12ShaderResourceView.h
|
||||
│ │ ├── D3D12UnorderedAccessView.h
|
||||
│ │ ├── D3D12ConstantBufferView.h
|
||||
│ │ ├── D3D12ResourceView.h
|
||||
│ │ ├── D3D12QueryHeap.h
|
||||
│ │ ├── D3D12RenderPass.h
|
||||
│ │ ├── D3D12Framebuffer.h
|
||||
│ │ ├── D3D12Screenshot.h
|
||||
│ │ ├── D3D12Enum.h
|
||||
│ │ ├── D3D12Types.h
|
||||
│ │ ├── D3D12Enums.h
|
||||
│ │ └── D3D12Common.h
|
||||
│ ├── src/ # 实现文件
|
||||
│ │ ├── Audio/
|
||||
@@ -196,6 +238,9 @@ XCEngine/
|
||||
│ │ ├── Math/
|
||||
│ │ ├── Memory/
|
||||
│ │ ├── Threading/
|
||||
│ │ ├── Platform/
|
||||
│ │ │ └── Windows/
|
||||
│ │ ├── Input/
|
||||
│ │ ├── Resources/
|
||||
│ │ │ ├── Texture/
|
||||
│ │ │ ├── Mesh/
|
||||
@@ -204,68 +249,84 @@ XCEngine/
|
||||
│ │ │ └── AudioClip/
|
||||
│ │ ├── Scene/
|
||||
│ │ └── RHI/
|
||||
│ │ ├── D3D12/
|
||||
│ │ ├── OpenGL/
|
||||
│ │ └── RHIFactory.cpp
|
||||
│ └── third_party/ # 第三方库
|
||||
│ ├── kissfft/ # FFT 库
|
||||
│ └── stb/ # 图像处理库
|
||||
│ ├── stb/ # 图像处理库 (stb_image, stb_image_write)
|
||||
│ ├── GLAD/ # OpenGL 加载器
|
||||
│ └── renderdoc/ # RenderDoc 调试库
|
||||
│
|
||||
├── editor/ # 编辑器 UI 应用程序
|
||||
│ ├── src/ # 编辑器源代码
|
||||
│ │ ├── Application.cpp/h # 编辑器应用入口
|
||||
│ │ ├── main.cpp # 主函数
|
||||
│ │ ├── Core/ # 编辑器核心
|
||||
│ │ ├── Layers/ # 编辑器层级
|
||||
│ │ ├── Managers/ # 管理器
|
||||
│ │ ├── panels/ # 编辑器面板
|
||||
│ │ └── UI/ # UI 控件
|
||||
│ ├── bin/ # 资源文件和可执行文件
|
||||
│ └── build/ # 构建目录
|
||||
│
|
||||
├── tests/ # 单元测试
|
||||
│ ├── math/ # 数学库测试
|
||||
│ ├── core/ # 核心模块测试
|
||||
│ │ ├── Asset/ # Core/Asset 模块测试
|
||||
│ │ └── IO/ # Core/IO 模块测试
|
||||
│ ├── containers/ # 容器测试
|
||||
│ ├── memory/ # 内存管理测试
|
||||
│ ├── threading/ # 线程模块测试
|
||||
│ ├── debug/ # 调试模块测试
|
||||
│ ├── core/ # 核心模块测试
|
||||
│ │ ├── Asset/ # Core/Asset 模块测试
|
||||
│ │ └── IO/ # Core/IO 模块测试
|
||||
│ ├── Components/ # 组件测试
|
||||
│ ├── Scene/ # 场景测试
|
||||
│ ├── Resources/ # 资源管理测试
|
||||
│ │ ├── Texture/ # 纹理资源测试
|
||||
│ │ ├── Mesh/ # 网格资源测试
|
||||
│ │ ├── Material/ # 材质资源测试
|
||||
│ │ ├── Shader/ # 着色器资源测试
|
||||
│ │ └── AudioClip/ # 音频资源测试
|
||||
│ ├── input/ # 输入模块测试
|
||||
│ │ ├── Texture/
|
||||
│ │ ├── Mesh/
|
||||
│ │ ├── Material/
|
||||
│ │ ├── Shader/
|
||||
│ │ └── AudioClip/
|
||||
│ ├── Input/ # 输入模块测试
|
||||
│ └── RHI/ # RHI 抽象层测试
|
||||
│ ├── unit/ # RHI 抽象层测试
|
||||
│ ├── OpenGL/ # OpenGL 后端测试
|
||||
│ │ ├── unit/ # 单元测试 (14)
|
||||
│ │ └── integration/ # 集成测试 (5)
|
||||
│ └── D3D12/ # D3D12 后端测试
|
||||
│ ├── unit/ # 单元测试 (15)
|
||||
│ └── integration/ # 集成测试 (8)
|
||||
│ ├── unit/ # RHI 抽象层单元测试 (10 files)
|
||||
│ ├── D3D12/ # D3D12 后端测试
|
||||
│ │ ├── unit/ # D3D12 单元测试 (14 files)
|
||||
│ │ └── integration/ # D3D12 集成测试 (minimal, quad, sphere, triangle)
|
||||
│ └── OpenGL/ # OpenGL 后端测试
|
||||
│ ├── unit/ # OpenGL 单元测试 (12 files)
|
||||
│ └── integration/ # OpenGL 集成测试 (minimal, quad, sphere, triangle)
|
||||
│
|
||||
├── mvs/ # 示例程序
|
||||
│ ├── D3D12/ # DirectX 12 渲染示例
|
||||
│ ├── OpenGL/ # OpenGL 渲染示例
|
||||
│ ├── Music fluctuations/ # 音频可视化示例
|
||||
│ ├── VolumeRenderer/ # 体积渲染器(NanoVDB)
|
||||
│ └── ui/ # 编辑器 UI 示例
|
||||
│
|
||||
├── ui_editor/ # 编辑器 UI 应用程序
|
||||
│ ├── src/ # 编辑器源代码
|
||||
│ ├── bin/ # 资源文件
|
||||
│ └── build/ # 构建目录
|
||||
│ ├── RenderDoc/ # RenderDoc 集成示例
|
||||
│ ├── ui/ # 编辑器 UI 示例
|
||||
│ └── Res/ # 示例资源文件
|
||||
│
|
||||
├── docs/ # 文档
|
||||
│ ├── api/ # API 文档
|
||||
│ │ ├── rhi/ # RHI API 文档
|
||||
│ │ ├── math/ # Math API 文档
|
||||
│ │ ├── containers/ # Containers API 文档
|
||||
│ │ ├── threading/ # Threading API 文档
|
||||
│ │ ├── memory/ # Memory API 文档
|
||||
│ │ ├── core/ # Core API 文档
|
||||
│ │ ├── debug/ # Debug API 文档
|
||||
│ │ ├── resources/ # Resources API 文档
|
||||
│ │ ├── audio/ # 音频系统 API
|
||||
│ │ ├── components/ # 组件系统 API
|
||||
│ │ ├── containers/ # 容器 API
|
||||
│ │ ├── core/ # 核心 API
|
||||
│ │ ├── d3d12/ # D3D12 API
|
||||
│ │ ├── debug/ # 调试 API
|
||||
│ │ ├── math/ # 数学库 API
|
||||
│ │ ├── memory/ # 内存管理 API
|
||||
│ │ ├── resources/ # 资源管理 API
|
||||
│ │ └── main.md # API 文档总索引
|
||||
│ └── plan/ # 开发计划与架构设计
|
||||
│ ├── plan/ # 开发计划与架构设计
|
||||
│ └── api-skill.md # API 技能文档
|
||||
│
|
||||
├── scripts/ # 构建和测试脚本
|
||||
├── 参考/ # 参考资料
|
||||
│ └── Fermion/ # 参考项目
|
||||
│
|
||||
├── engine/tools/ # 工具脚本
|
||||
│ └── renderdoc_parser/ # RenderDoc 捕获分析工具(Python 3.6)
|
||||
├── build/ # 构建目录
|
||||
│
|
||||
└── build/ # 构建目录
|
||||
└── imgui.ini # ImGui 配置文件
|
||||
```
|
||||
|
||||
## 快速开始
|
||||
@@ -309,11 +370,12 @@ build/tests/threading/Debug/xcengine_threading_tests.exe
|
||||
### Audio(音频系统)
|
||||
|
||||
- **AudioSystem**: 音频系统主类,管理所有音频设备
|
||||
- **AudioMixer**: 音频混音器,多通道混合与效果处理
|
||||
- **HRTF**: 头部相关传输函数,支持空间音频定位
|
||||
- **FFTFilter**: 快速傅里叶变换滤波器
|
||||
- **Reverbation**: 混响效果
|
||||
- **Equalizer**: 音频均衡器
|
||||
- **WASAPI**: Windows 音频会话 API 后端实现
|
||||
- **WindowsAudioBackend**: Windows WASAPI 音频后端实现
|
||||
- **AudioSourceComponent**: 音频源组件(用于游戏对象)
|
||||
- **AudioListenerComponent**: 音频监听器组件(用于游戏对象)
|
||||
|
||||
@@ -322,6 +384,8 @@ build/tests/threading/Debug/xcengine_threading_tests.exe
|
||||
- **Component**: 组件基类,提供生命周期管理
|
||||
- **GameObject**: 游戏对象,支持层级结构
|
||||
- **TransformComponent**: 变换组件,管理位置、旋转、缩放
|
||||
- **AudioSourceComponent**: 音频源组件
|
||||
- **AudioListenerComponent**: 音频监听器组件
|
||||
|
||||
### Containers(容器)
|
||||
|
||||
@@ -336,6 +400,26 @@ build/tests/threading/Debug/xcengine_threading_tests.exe
|
||||
- **SmartPtr**: 智能指针实现(Ref、UniqueRef)
|
||||
- **Event**: 事件系统,支持订阅/发布模式
|
||||
- **FileWriter**: 文件写入工具
|
||||
- **Layer/LayerStack**: 层级与层级栈管理
|
||||
|
||||
### Platform(平台抽象层)
|
||||
|
||||
跨平台抽象接口,支持 Windows、Linux、Android、macOS:
|
||||
|
||||
- **IPlatform**: 平台接口
|
||||
- **IWindow**: 窗口接口
|
||||
- **IFileSystem**: 文件系统接口
|
||||
- **IClock**: 时钟接口
|
||||
- **IDynamicLibrary**: 动态库加载接口
|
||||
- **IDisplayEnumerator**: 显示设备枚举接口
|
||||
- **Window**: 窗口实现类
|
||||
|
||||
### Input(输入模块)
|
||||
|
||||
- **InputManager**: 输入管理器
|
||||
- **InputModule**: 输入模块基类
|
||||
- **InputEvent**: 输入事件定义
|
||||
- **InputAxis**: 输入轴配置
|
||||
|
||||
### Debug(调试与日志)
|
||||
|
||||
@@ -372,7 +456,7 @@ build/tests/threading/Debug/xcengine_threading_tests.exe
|
||||
- **Rect**: 矩形
|
||||
- **Sphere/Box/Plane**: 基本几何体
|
||||
- **Ray**: 射线
|
||||
- **AABB/Bounds/OBB**: 包围体
|
||||
- **AABB/Bounds**: 包围体
|
||||
- **Frustum**: 视锥体
|
||||
|
||||
### Resources(资源管理)
|
||||
@@ -380,6 +464,7 @@ build/tests/threading/Debug/xcengine_threading_tests.exe
|
||||
XCEngine 资源系统采用分层架构:
|
||||
|
||||
#### Core/Asset(资源系统核心)
|
||||
|
||||
- **IResource**: 资源接口基类
|
||||
- **ResourceTypes**: 资源类型定义(GUID、状态等)
|
||||
- **ResourceHandle**: 资源句柄,安全引用资源
|
||||
@@ -389,6 +474,7 @@ XCEngine 资源系统采用分层架构:
|
||||
- **ResourceDependencyGraph**: 资源依赖图管理
|
||||
|
||||
#### Core/IO(资源 IO 系统)
|
||||
|
||||
- **IResourceLoader**: 资源加载器接口
|
||||
- **ResourceFileSystem**: 资源文件系统
|
||||
- **ResourcePath**: 资源路径解析
|
||||
@@ -396,6 +482,7 @@ XCEngine 资源系统采用分层架构:
|
||||
- **ResourcePackage**: 资源包批量管理
|
||||
|
||||
#### Resources/<Type>(具体资源类型)
|
||||
|
||||
- **Texture**: 纹理资源(Texture.h、TextureLoader.h、TextureImportSettings.h)
|
||||
- **Mesh**: 网格资源(Mesh.h、MeshLoader.h、MeshImportSettings.h)
|
||||
- **Shader**: 着色器资源(Shader.h、ShaderLoader.h)
|
||||
@@ -425,10 +512,16 @@ XCEngine 采用 RHI(Render Hardware Interface)抽象层设计,支持多渲
|
||||
- **RHICommandList**: 命令列表抽象
|
||||
- **RHISwapChain**: 交换链抽象
|
||||
- **RHIPipelineState**: 渲染管线状态抽象
|
||||
- **RHIPipelineLayout**: 管线布局抽象
|
||||
- **RHIBuffer/RHITexture**: 资源抽象
|
||||
- **RHIShader**: 着色器抽象
|
||||
- **RHISampler**: 采样器抽象
|
||||
- **RHIFence**: 同步栅栏抽象
|
||||
- **RHIDescriptorPool**: 描述符池抽象
|
||||
- **RHIDescriptorSet**: 描述符集抽象
|
||||
- **RHIRenderPass**: 渲染通道抽象
|
||||
- **RHIFramebuffer**: 帧缓冲抽象
|
||||
- **RHIResourceView**: 资源视图抽象
|
||||
|
||||
#### 后端实现
|
||||
|
||||
@@ -439,23 +532,19 @@ XCEngine 采用 RHI(Render Hardware Interface)抽象层设计,支持多渲
|
||||
|
||||
| 模块 | 测试用例数 |
|
||||
|------|-----------|
|
||||
| Math | 140 |
|
||||
| Core | 25 |
|
||||
| Containers | 51 |
|
||||
| Memory | 19 |
|
||||
| Threading | 13 |
|
||||
| Debug | 8 |
|
||||
| Components | 39 |
|
||||
| Scene | 14 |
|
||||
| Resources/Texture | 36 |
|
||||
| Resources/Mesh | 29 |
|
||||
| Resources/Material | 14 |
|
||||
| Resources/Shader | 13 |
|
||||
| Resources/AudioClip | 15 |
|
||||
| Input | 40 |
|
||||
| RHI (OpenGL) | 41 (unit 14 + integration 5) |
|
||||
| RHI (D3D12) | 23 (unit 15 + integration 8) |
|
||||
| **总计** | **852 (+1 disabled)** |
|
||||
| Math | ~4 |
|
||||
| Containers | ~3 |
|
||||
| Memory | ~3 |
|
||||
| Threading | ~3 |
|
||||
| Debug | ~3 |
|
||||
| Core | ~10 |
|
||||
| Components | ~3 |
|
||||
| Scene | ~2 |
|
||||
| Resources | ~12 |
|
||||
| Input | ~2 |
|
||||
| RHI/unit | ~10 |
|
||||
| RHI/D3D12 | ~18 (unit + integration) |
|
||||
| RHI/OpenGL | ~16 (unit + integration) |
|
||||
|
||||
## mvs 示例程序
|
||||
|
||||
@@ -478,10 +567,6 @@ D3D12 + RenderDoc 集成示例,展示如何使用 RenderDoc API 进行 GPU 帧
|
||||
|
||||
> 注意:renderdoc.dll 需单独放置于 `engine/third_party/renderdoc/renderdoc.dll`
|
||||
|
||||
### renderdoc_parser
|
||||
|
||||
RenderDoc 捕获分析工具(Python 3.6)。详见 `engine/tools/renderdoc_parser/README.md`。
|
||||
|
||||
### VolumeRenderer
|
||||
|
||||
XCEngine 的体积渲染模块,基于 NanoVDB 实现云、烟雾等体积数据的实时渲染:
|
||||
@@ -498,7 +583,7 @@ XCEngine 的体积渲染模块,基于 NanoVDB 实现云、烟雾等体积数
|
||||
- 频谱可视化渲染
|
||||
- 音频与视觉效果同步
|
||||
|
||||
### UI Editor
|
||||
### Editor UI
|
||||
|
||||
Unity 风格的编辑器 UI,基于 ImGui 实现:
|
||||
- 场景层级面板
|
||||
|
||||
Reference in New Issue
Block a user