zengine/README.md

108 lines
6.6 KiB
Markdown
Raw Permalink Normal View History

2025-02-11 11:16:46 +08:00
![Logo](engine/assets/logo.png)
2025-01-01 23:42:55 +08:00
# 个人游戏引擎
这是一个模块化的 C++ 游戏引擎旨在帮助学习和实现基本的游戏引擎系统。它包括多个模块如渲染、资源管理、UI 等,并使用 Vulkan 作为主要的渲染 API。该引擎的结构被拆分为多个静态库和动态链接库DLL通过 `xmake` 管理。
## 功能
- **模块化架构**:将引擎拆分成多个独立模块,提高了可维护性和可扩展性。
- **渲染**:使用 Vulkan 实现,且有抽象层支持未来扩展到 OpenGL、DirectX 和 Metal 等其他渲染 API。
- **资源管理**:包括基础的资源管理、加载和序列化功能。
2025-02-11 11:16:46 +08:00
- **UI**:初步集成了 NoesisGUI 和 ImGui 进行 XAML UI 元素的渲染。
- **接口导出**:通过 `engine.dll` 集中管理全局状态,避免模块间不一致。
2025-01-01 23:42:55 +08:00
- **高效内存管理**:通过 `pmr` 内存资源和模板元编程优化内存分配。
- **编辑器支持**:为编辑器功能提供基本的集成,未来计划使用 ImGui 和 NoesisGUI 开发完整的编辑器工具。
## 安装
[代码生成工具](http://175.24.226.114:3000/ouczbs/cppast.git)
[xmake 第三方库](http://175.24.226.114:3000/ouczbs/xmake.repo.git)
## 项目结构
- **engine.dll**:核心 DLL负责整合所有模块并管理全局状态和模块生命周期。
- **core.lib, render.lib, asset.lib, app.lib, ui.lib**提供不同功能的静态库渲染、资源加载、UI 处理等),链接到 `engine.dll`
- **singleton.dll**:确保全局变量在跨模块时唯一,并集中管理。
- **zlib.lib**:提供压缩、反射和内存管理优化。
- **vulkan.dll**:包含 Vulkan 特定的渲染逻辑,和 `engine.dll`、`editor.dll` 进行交互。
- **editor.dll**:使用 ImGui 和 NoesisGUI 提供编辑器界面(仍在开发中)。
- **zworld.exe**:目标游戏执行文件,当前实现了 Vulkan 渲染三角形,并展示了 NoesisGUI 的 XAML UI。
### 模块工作方式
- **全局变量**:所有全局变量都包含在 `engine.dll` 中,其他模块(如 `core.lib`、`render.lib` 等)可以通过指针引用访问。这减少了重复性并确保模块间的一致性。
- **模块化逻辑**:不是通过 DLL 接口导出所有函数,而是只导出必要的函数,最大限度地减少了冗余,确保代码简洁可维护。
- **生命周期管理**`core` 模块负责其他模块的初始化、生命周期和销毁,确保它们按正确顺序加载,资源安全清理。
## 详细模块描述
### 1. singleton.dll
确保跨模块的全局变量唯一性,使用指针引用进行管理。每个模块都获取这些变量的指针副本,但它们指向相同的内存位置。
- **全局变量管理**:保证跨模块的共享资源保持一致,避免重复或误管理。
- **跨模块访问**:模块可以访问共享变量,而不必担心重复问题。
### 2. zlib.lib
提供多种实用工具,包括压缩支持和高级内存管理。
- **PMR 内存管理**:使用多态内存资源 (`pmr`) 优化内存分配和释放策略。
- **反射**实现基础的运行时反射用于数据序列化和反序列化JSON、YAML
- **模板元编程**:通过模板提供高效的编译时计算和类型操作。
### 3. core.lib
处理引擎的核心功能,包括模块管理、序列化和文件挂载。
- **模块管理**:负责模块的初始化、生命周期和销毁,确保按正确顺序初始化。
- **序列化**:使用 `zlib.lib` 的反射功能实现 JSON 和 YAML 序列化/反序列化。
- **文件挂载**:提供将资源从各种源(如本地文件系统或打包文件)挂载和加载的功能。
### 4. asset.lib
管理游戏资源,包括加载、缓存和序列化。
- **资源管理**:高效管理纹理、模型、声音等资源的生命周期。
- **资源加载**:支持从多种格式加载资源,如图像和 3D 模型。
- **序列化**:实现资源的保存和加载功能。
### 5. render.lib
该模块抽象了渲染硬件接口RHI并处理渲染管线管理包括支持 Vulkan。
- **RHI 抽象**:当前仅实现 Vulkan API但系统设计支持未来扩展到 OpenGL、DirectX 和 Metal 等渲染 API。
- **FrameGraph**:引入 `FrameGraph` 概念来管理渲染通道和资源依赖,优化渲染管线。
- **材质系统**:简单的材质系统,处理渲染用的材质属性和着色器。
- **GPU 动态缓冲区**:实现了 GPU 端的动态缓冲区,供 NoesisGUI 渲染 UI 元素时使用。
- **Vulkan 集成**:完全集成 Vulkan处理命令缓冲区、资源管理和同步。
### 6. ui.lib
处理 UI 集成,最初关注于 NoesisGUI。
- **NoesisGUI 集成**:提供一个基础系统,通过 NoesisGUI 渲染 XAML 文件,支持游戏和编辑器中的 UI 渲染。
- **UI 渲染**:管理 UI 元素的渲染及与 Vulkan 的交互。
- **未来扩展**:计划扩展该模块,支持其他 UI 框架(如 ImGui来处理更复杂的编辑器和游戏内 UI。
### 7. app.lib
包含整个项目的全局设置和事件系统。
- **项目设置**:管理引擎和游戏的全局配置和设置。
- **事件系统**:实现事件驱动系统,处理各种引擎和游戏事件,使不同模块解耦。
### 8. editor.dll
一个进行中的编辑器模块,用于管理游戏开发过程。
- **编辑器 UI**:最终将使用 ImGui 和 NoesisGUI 创建游戏和资产管理的编辑器界面。
- **编辑器工具**:包含早期功能,用于构建场景编辑器、资产查看器等开发工具。
### 9. vulkan.dll
管理 Vulkan 特定的渲染逻辑。
- **Vulkan RHI 实现**:包含所有 Vulkan 特定的代码,管理命令缓冲区、着色器和同步。
- **NoesisGUI 渲染**:将 NoesisGUI 集成到 Vulkan 管道中,进行 UI 元素渲染。
### 10. zworld.exe (目标游戏)
目标游戏的执行文件,当前处于早期阶段,使用 Vulkan 实现了基本渲染。
- **Vulkan 渲染三角形**:演示如何使用 Vulkan 渲染一个简单的三角形到 ImGui 的 image 控件中。
- **NoesisGUI 集成**:通过 Vulkan 和 NoesisGUI 渲染一个简单的 XAML UI 文件,展示游戏中的 UI 渲染。
## 未来计划
- **更多渲染 API**:扩展渲染系统,支持 OpenGL、DirectX 和 Metal实现跨平台兼容性。
- **游戏逻辑与玩法**:将游戏逻辑、物理和 AI 系统整合进引擎,创建完整的游戏环境。
- **高级资源管理**:添加更多的资源格式,并优化资源加载管道以提高性能。
- **编辑器开发**:继续开发编辑器,为场景管理、资产创建和调试提供工具。