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/
│   │   ├── Containers/            # 容器模块
│   │   │   ├── String.h          # 字符串类
│   │   │   ├── Array.h           # 动态数组
│   │   │   └── HashMap.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     # 任务系统
│   │   │   └── TaskSystemConfig.h # 任务系统配置
│   │   ├── Math/                 # 数学库
│   │   │   ├── Vector.h
│   │   │   ├── Matrix.h
│   │   │   ├── Quaternion.h
│   │   │   └── ...
│   │   ├── RHI/                  # 渲染硬件接口抽象层
│   │   │   ├── RHIDevice.h
│   │   │   ├── RHICommandQueue.h
│   │   │   ├── RHICommandList.h
│   │   │   ├── RHISwapChain.h
│   │   │   ├── RHIPipelineState.h
│   │   │   ├── RHIBuffer.h
│   │   │   ├── RHITexture.h
│   │   │   ├── RHIShader.h
│   │   │   ├── RHISampler.h
│   │   │   ├── RHIFence.h
│   │   │   ├── RHITypes.h
│   │   │   ├── RHICapabilities.h
│   │   │   ├── RHIEnums.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
│   │   │       ├── D3D12CommandList.h
│   │   │       ├── D3D12CommandAllocator.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
│   │   └── Core/                 # 核心模块
│   │
│   └── src/                      # 实现文件
│       ├── Containers/
│       ├── Memory/
│       ├── Threading/
│       ├── Math/
│       └── RHI/
│
├── tests/                         # 单元测试
│   ├── containers/               # 容器测试
│   ├── memory/                  # 内存管理测试
│   ├── threading/               # 线程模块测试
│   ├── core/                    # 核心模块测试
│   ├── math/                    # 数学库测试
│   └── RHI/                     # RHI 抽象层测试
│       ├── OpenGL/              # OpenGL 后端测试
│       └── D3D12/                # D3D12 后端测试
│
├── MVS/                         # 多个示例版本(开发中)
│   ├── HelloEarth/              # 基础渲染示例
│   └── VolumeRenderer/          # 体积渲染器
│
├── docs/                         # 设计文档
│   ├── XCEngine渲染引擎架构设计.md
│   └── ...
│
└── 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

核心模块说明

Containers容器

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

Memory内存管理

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

Threading线程

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

Math数学库

  • Vector: 向量运算
  • Matrix: 矩阵运算
  • Quaternion: 四元数
  • Transform: 变换
  • Color: 颜色
  • Frustum: 视锥体
  • Bounds: 边界框

RHI渲染硬件接口

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

设计原则

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

抽象接口

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

后端实现

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

测试覆盖

  • OpenGL 后端: 41 个测试用例通过
  • D3D12 后端: 编译通过

测试覆盖

  • Containers: 51+ 测试用例
  • Memory: 19 测试用例
  • Threading: 13 测试用例
  • Math: 通过
  • RHI (OpenGL): 41 测试用例通过
  • RHI (D3D12): 编译通过

MVS 示例版本

MVSMultiple Version Samples是项目的渲染示例部分展示各种渲染技术。所有示例均基于 RHI 抽象层开发,可无缝切换 DirectX 12 或 OpenGL 后端。

HelloEarth开发中

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

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

VolumeRenderer开发中

基于 NanoVDB 的体积渲染器,支持:

  • NanoVDB 格式体积数据加载
  • 光线步进Ray Marching渲染
  • HDDA 空间跳跃加速
  • 体积阴影
  • 多种渲染参数配置

文档

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

许可证

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%