ssdfasd 7028027adc Fix Equalizer::ComputeCoefficients pointer arithmetic bug
The band index was incorrectly calculated using pointer arithmetic on a
local parameter address, which is meaningless. Now uses the band index
passed as a parameter instead.
2026-03-22 13:36:10 +08:00
2026-03-18 03:07:29 +08:00

XCEngine

基于 DirectX 12 的游戏引擎项目,支持体积渲染、跨平台渲染后端和核心模块单元测试。

项目概述

XCEngine 是一个正在开发中的游戏引擎,采用 RHIRender Hardware Interface抽象层设计支持 DirectX 12 和 OpenGL 多种渲染 API。项目采用模块化设计包含核心库、示例程序和单元测试。

技术栈

  • 渲染 API: DirectX 12, OpenGL 4.6+
  • 语言: C++17
  • 构建系统: CMake
  • 测试框架: Google Test

项目结构

XCEngine/
├── engine/                         # 核心引擎库
│   ├── include/XCEngine/
│   │   ├── Audio/                 # 音频系统
│   │   │   ├── AudioSystem.h      # 音频系统主类
│   │   │   ├── AudioTypes.h       # 音频类型定义
│   │   │   ├── AudioConfig.h      # 音频配置
│   │   │   ├── AudioMixer.h      # 音频混音器
│   │   │   ├── AudioSourceComponent.h  # 音频源组件
│   │   │   ├── AudioListenerComponent.h # 音频监听器组件
│   │   │   ├── HRTF.h            # HRTF 空间音频
│   │   │   ├── FFTFilter.h       # FFT 滤波器
│   │   │   ├── Reverbation.h     # 混响效果
│   │   │   ├── Equalizer.h       # 均衡器
│   │   │   ├── WASAPI/           # WASAPI 后端实现
│   │   │   └── IAudioBackend.h   # 音频后端接口
│   │   ├── Components/           # 游戏组件系统
│   │   │   ├── Component.h       # 组件基类
│   │   │   ├── GameObject.h      # 游戏对象
│   │   │   └── TransformComponent.h # 变换组件
│   │   ├── Containers/           # 容器模块
│   │   │   ├── Array.h           # 动态数组
│   │   │   ├── String.h          # 字符串类
│   │   │   ├── HashMap.h         # 哈希表
│   │   │   └── Containers.h      # 模块统一头文件
│   │   ├── Core/                # 核心基础模块
│   │   │   ├── Types.h           # 基础类型别名
│   │   │   ├── RefCounted.h      # 引用计数基类
│   │   │   ├── SmartPtr.h        # 智能指针
│   │   │   ├── Event.h           # 事件系统
│   │   │   └── FileWriter.h      # 文件写入
│   │   ├── Debug/               # 调试与日志模块
│   │   │   ├── Logger.h          # 日志系统
│   │   │   ├── LogLevel.h        # 日志级别
│   │   │   ├── LogCategory.h     # 日志分类
│   │   │   ├── LogEntry.h        # 日志条目
│   │   │   ├── ConsoleLogSink.h  # 控制台输出
│   │   │   ├── FileLogSink.h     # 文件输出
│   │   │   ├── ILogSink.h        # 日志槽接口
│   │   │   ├── Debug.h           # 调试宏
│   │   │   └── Profiler.h        # 性能分析
│   │   ├── Math/                 # 数学库
│   │   │   ├── Vector2.h         # 二维向量
│   │   │   ├── Vector3.h         # 三维向量
│   │   │   ├── Vector4.h         # 四维向量
│   │   │   ├── Matrix3.h         # 3x3 矩阵
│   │   │   ├── Matrix4.h         # 4x4 矩阵
│   │   │   ├── Quaternion.h      # 四元数
│   │   │   ├── Transform.h       # 变换
│   │   │   ├── Color.h           # 颜色
│   │   │   ├── Rect.h            # 矩形
│   │   │   ├── Sphere.h          # 球体
│   │   │   ├── Box.h             # 盒子
│   │   │   ├── Plane.h           # 平面
│   │   │   ├── Ray.h             # 射线
│   │   │   ├── AABB.h            # 轴对齐包围盒
│   │   │   ├── Bounds.h          # 包围体
│   │   │   ├── OBB.h             # 方向包围盒
│   │   │   ├── Frustum.h         # 视锥体
│   │   │   └── Math.h            # 数学库统一头文件
│   │   ├── Memory/              # 内存管理模块
│   │   │   ├── Allocator.h       # 分配器接口
│   │   │   ├── LinearAllocator.h # 线性分配器
│   │   │   ├── PoolAllocator.h   # 内存池分配器
│   │   │   ├── ProxyAllocator.h  # 代理分配器
│   │   │   └── MemoryManager.h   # 全局内存管理器
│   │   ├── Threading/           # 线程模块
│   │   │   ├── Thread.h          # 线程类
│   │   │   ├── Mutex.h           # 互斥锁
│   │   │   ├── SpinLock.h        # 自旋锁
│   │   │   ├── ReadWriteLock.h   # 读写锁
│   │   │   ├── Task.h            # 任务基类
│   │   │   ├── LambdaTask.h      # Lambda 任务
│   │   │   ├── TaskGroup.h       # 任务组
│   │   │   ├── TaskSystem.h      # 任务系统
│   │   │   └── Threading.h       # 线程模块统一头文件
│   │   ├── Resources/           # 资源管理模块
│   │   │   ├── ResourceTypes.h   # 资源类型定义
│   │   │   ├── IResource.h       # 资源接口
│   │   │   ├── ResourceHandle.h  # 资源句柄
│   │   │   ├── ResourceManager.h # 资源管理器
│   │   │   ├── ResourceCache.h   # 资源缓存
│   │   │   ├── ResourcePackage.h # 资源包
│   │   │   ├── ResourceFileSystem.h # 资源文件系统
│   │   │   ├── ResourcePath.h    # 资源路径
│   │   │   ├── FileArchive.h     # 文件归档
│   │   │   ├── DependencyGraph.h # 依赖图
│   │   │   ├── ImportSettings.h  # 导入设置基类
│   │   │   ├── IResourceLoader.h # 资源加载器接口
│   │   │   ├── AsyncLoader.h     # 异步加载器
│   │   │   ├── Texture.h         # 纹理资源
│   │   │   ├── TextureLoader.h   # 纹理加载器
│   │   │   ├── TextureImportSettings.h # 纹理导入设置
│   │   │   ├── Mesh.h            # 网格资源
│   │   │   ├── MeshLoader.h      # 网格加载器
│   │   │   ├── MeshImportSettings.h # 网格导入设置
│   │   │   ├── Shader.h          # 着色器资源
│   │   │   ├── ShaderLoader.h    # 着色器加载器
│   │   │   ├── Material.h        # 材质资源
│   │   │   ├── MaterialLoader.h  # 材质加载器
│   │   │   ├── AudioClip.h       # 音频资源
│   │   │   ├── AudioLoader.h     # 音频加载器
│   │   │   └── Resources.h       # 资源模块统一头文件
│   │   ├── Scene/               # 场景管理模块
│   │   │   ├── Scene.h           # 场景类
│   │   │   └── SceneManager.h    # 场景管理器
│   │   └── RHI/                  # 渲染硬件接口抽象层
│   │       ├── RHITypes.h        # RHI 类型定义
│   │       ├── RHIEnums.h        # RHI 枚举
│   │       ├── RHICapabilities.h # 硬件能力查询
│   │       ├── RHIFactory.h      # 设备工厂
│   │       ├── RHIDevice.h        # 渲染设备抽象
│   │       ├── RHICommandQueue.h  # 命令队列抽象
│   │       ├── RHICommandList.h   # 命令列表抽象
│   │       ├── RHIBuffer.h       # 缓冲区抽象
│   │       ├── RHITexture.h       # 纹理抽象
│   │       ├── RHIShader.h        # 着色器抽象
│   │       ├── RHISampler.h       # 采样器抽象
│   │       ├── RHIFence.h         # 同步栅栏抽象
│   │       ├── RHISwapChain.h     # 交换链抽象
│   │       ├── RHIPipelineState.h # 管线状态抽象
│   │       ├── RHIPipelineLayout.h # 管线布局抽象
│   │       ├── RHIDescriptorPool.h # 描述符池抽象
│   │       ├── RHIDescriptor.h    # 描述符抽象
│   │       ├── OpenGL/           # OpenGL 后端实现
│   │       │   ├── OpenGLDevice.h
│   │       │   ├── OpenGLCommandQueue.h
│   │       │   ├── OpenGLCommandList.h
│   │       │   ├── OpenGLSwapChain.h
│   │       │   ├── OpenGLPipelineState.h
│   │       │   ├── OpenGLBuffer.h
│   │       │   ├── OpenGLTexture.h
│   │       │   ├── OpenGLShader.h
│   │       │   ├── OpenGLSampler.h
│   │       │   ├── OpenGLFence.h
│   │       │   ├── OpenGLVertexArray.h
│   │       │   ├── OpenGLRenderTargetView.h
│   │       │   └── OpenGLDepthStencilView.h
│   │       └── D3D12/            # DirectX 12 后端实现
│   │           ├── D3D12Device.h
│   │           ├── D3D12CommandQueue.h
│   │           ├── D3D12CommandAllocator.h
│   │           ├── D3D12CommandList.h
│   │           ├── D3D12SwapChain.h
│   │           ├── D3D12PipelineState.h
│   │           ├── D3D12Buffer.h
│   │           ├── D3D12Texture.h
│   │           ├── D3D12Shader.h
│   │           ├── D3D12Sampler.h
│   │           ├── D3D12Fence.h
│   │           ├── D3D12DescriptorHeap.h
│   │           ├── D3D12RootSignature.h
│   │           ├── D3D12RenderTargetView.h
│   │           ├── D3D12DepthStencilView.h
│   │           ├── D3D12ShaderResourceView.h
│   │           ├── D3D12UnorderedAccessView.h
│   │           ├── D3D12ConstantBufferView.h
│   │           ├── D3D12QueryHeap.h
│   │           ├── D3D12Screenshot.h
│   │           ├── D3D12Types.h
│   │           ├── D3D12Enum.h
│   │           └── D3D12Common.h
│   ├── src/                      # 实现文件
│   │   ├── Audio/
│   │   ├── Containers/
│   │   ├── Core/
│   │   ├── Debug/
│   │   ├── Math/
│   │   ├── Memory/
│   │   ├── Threading/
│   │   ├── Resources/
│   │   ├── Scene/
│   │   └── RHI/
│   └── third_party/            # 第三方库
│       ├── kissfft/             # FFT 库
│       └── stb/                  # 图像处理库
│
├── tests/                        # 单元测试
│   ├── containers/               # 容器测试
│   ├── memory/                  # 内存管理测试
│   ├── threading/               # 线程模块测试
│   ├── core/                    # 核心模块测试
│   ├── debug/                   # 调试模块测试
│   ├── math/                    # 数学库测试
│   ├── Components/              # 组件测试
│   ├── Scene/                   # 场景测试
│   ├── Resources/               # 资源管理测试
│   └── RHI/                     # RHI 抽象层测试
│       ├── OpenGL/              # OpenGL 后端测试
│       │   ├── unit/            # 单元测试 (14)
│       │   └── integration/     # 集成测试 (5)
│       └── D3D12/               # D3D12 后端测试
│           ├── unit/            # 单元测试 (15)
│           └── integration/     # 集成测试 (8)
│
├── mvs/                         # 示例程序
│   ├── D3D12/                   # DirectX 12 渲染示例
│   ├── OpenGL/                  # OpenGL 渲染示例
│   ├── Music fluctuations/       # 音频可视化示例
│   ├── VolumeRenderer/          # 体积渲染器NanoVDB
│   └── ui/                     # 编辑器 UI 示例
│
├── ui_editor/                   # 编辑器 UI 应用程序
│   ├── src/                     # 编辑器源代码
│   ├── bin/                     # 资源文件
│   └── build/                   # 构建目录
│
├── 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 文档
│   │   └── main.md             # API 文档总索引
│   └── plan/                   # 开发计划与架构设计
│
├── scripts/                     # 构建和测试脚本
│
└── build/                      # 构建目录

快速开始

前置要求

  • Windows 10/11
  • Visual Studio 2019 或更高版本
  • CMake 3.15+

构建项目

# 创建构建目录
mkdir build && cd build

# 配置 CMake
cmake .. -A x64

# 编译
cmake --build . --config Debug

运行测试

cd build/tests
ctest -C Debug --output-on-failure

或直接运行测试可执行文件:

build/tests/containers/Debug/xcengine_containers_tests.exe
build/tests/memory/Debug/xcengine_memory_tests.exe
build/tests/threading/Debug/xcengine_threading_tests.exe

核心模块说明

Audio音频系统

  • AudioSystem: 音频系统主类,管理所有音频设备
  • HRTF: 头部相关传输函数,支持空间音频定位
  • FFTFilter: 快速傅里叶变换滤波器
  • Reverbation: 混响效果
  • Equalizer: 音频均衡器
  • WASAPI: Windows 音频会话 API 后端实现
  • AudioSourceComponent: 音频源组件(用于游戏对象)
  • AudioListenerComponent: 音频监听器组件(用于游戏对象)

Components游戏组件系统

  • Component: 组件基类,提供生命周期管理
  • GameObject: 游戏对象,支持层级结构
  • TransformComponent: 变换组件,管理位置、旋转、缩放

Containers容器

  • String: 动态字符串类,支持常用字符串操作
  • Array: 模板动态数组,自动内存管理
  • HashMap: 模板哈希表,支持自定义键类型

Core核心基础

  • Types: 基础类型别名int8、uint32 等)
  • RefCounted: 引用计数基类,支持多线程安全释放
  • SmartPtr: 智能指针实现Ref、UniqueRef
  • Event: 事件系统,支持订阅/发布模式
  • FileWriter: 文件写入工具

Debug调试与日志

  • Logger: 分级日志系统Info、Warning、Error
  • ConsoleLogSink: 控制台日志输出
  • FileLogSink: 文件日志输出
  • Profiler: 性能分析工具

Memory内存管理

  • IAllocator: 内存分配器接口
  • LinearAllocator: 线性分配器,适合帧分配
  • PoolAllocator: 内存池分配器,适合固定大小对象
  • ProxyAllocator: 代理分配器,跟踪内存使用统计
  • MemoryManager: 全局内存管理器

Threading线程

  • Thread: 线程封装类
  • Mutex: 互斥锁
  • SpinLock: 自旋锁,适合短临界区
  • ReadWriteLock: 读写锁
  • TaskSystem: 多线程任务系统
  • Task/TaskGroup: 任务和任务组管理

Math数学库

  • Vector2/3/4: 向量运算
  • Matrix3/4: 矩阵运算
  • Quaternion: 四元数
  • Transform: 变换(位姿)
  • Color: 颜色
  • Rect: 矩形
  • Sphere/Box/Plane: 基本几何体
  • Ray: 射线
  • AABB/Bounds/OBB: 包围体
  • Frustum: 视锥体

Resources资源管理

  • ResourceManager: 全局资源管理器,资源加载/卸载
  • ResourceCache: 资源缓存,支持引用计数
  • ResourceHandle: 资源句柄,安全引用资源
  • ResourcePackage: 资源包批量管理
  • AsyncLoader: 异步资源加载器
  • ImportSettings: 资源导入设置(纹理/网格/材质)
  • IResourceLoader: 资源加载器接口
  • Texture/Mesh/Shader/Material/AudioClip: 各类资源类型

Scene场景管理

  • Scene: 场景类,管理场景内的所有游戏对象
  • SceneManager: 场景管理器,处理场景切换

RHI渲染硬件接口

XCEngine 采用 RHIRender Hardware Interface抽象层设计支持多渲染后端。

设计原则

  • 求同存异: 提取各 API 共同特性,统一抽象接口
  • 分层抽象: 核心抽象层 → 后端实现层 → 平台适配层
  • 特性降级: 后端不支持的特性优雅降级
  • 底层逃逸: 后端特有方法通过重载暴露

抽象接口

  • RHIDevice: 渲染设备抽象
  • RHICommandQueue: 命令队列抽象
  • RHICommandList: 命令列表抽象
  • RHISwapChain: 交换链抽象
  • RHIPipelineState: 渲染管线状态抽象
  • RHIBuffer/RHITexture: 资源抽象
  • RHIShader: 着色器抽象
  • RHISampler: 采样器抽象
  • RHIFence: 同步栅栏抽象

后端实现

  • OpenGL 后端: OpenGL 4.6+ 支持
  • D3D12 后端: DirectX 12 支持

测试覆盖

模块 测试用例数
Containers 51+
Memory 19
Threading 13
Math 5+
Components 2+
Scene 2+
Resources 4+
RHI (OpenGL) 41 (unit 14 + integration 5)
RHI (D3D12) 23 (unit 15 + integration 8)

mvs 示例程序

mvsMultiple Version Samples展示游戏引擎的各类功能。所有示例均基于 RHI 抽象层开发,可无缝切换 DirectX 12 或 OpenGL 后端。

D3D12 / OpenGL

跨平台渲染示例,展示如何:

  • 初始化 RHI 渲染环境(支持 D3D12/OpenGL
  • 加载和渲染静态网格
  • 纹理映射
  • 常量缓冲区更新

VolumeRenderer

XCEngine 的体积渲染模块,基于 NanoVDB 实现云、烟雾等体积数据的实时渲染:

  • NanoVDB 格式体积数据加载
  • 光线步进Ray Marching渲染
  • HDDA 空间跳跃加速
  • 体积阴影Volumetric Shadow
  • 动态光照参数调节

Music fluctuations

音频可视化示例,基于 FFT 实时分析音频频谱:

  • 音频播放与 FFT 分析
  • 频谱可视化渲染
  • 音频与视觉效果同步

UI Editor

Unity 风格的编辑器 UI基于 ImGui 实现:

  • 场景层级面板
  • 属性检查器
  • 游戏视图与场景视图
  • 项目资源浏览器
  • 控制台日志面板

文档

API 文档位于 docs/api/ 目录,包含各模块的完整 API 参考。

详细设计文档请参考 docs/plan/ 目录。

许可证

MIT License

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