zengine/README.md
2025-02-11 11:22:57 +08:00

108 lines
6.6 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.

![Logo](engine/assets/logo.png)
# 个人游戏引擎
这是一个模块化的 C++ 游戏引擎旨在帮助学习和实现基本的游戏引擎系统。它包括多个模块如渲染、资源管理、UI 等,并使用 Vulkan 作为主要的渲染 API。该引擎的结构被拆分为多个静态库和动态链接库DLL通过 `xmake` 管理。
## 功能
- **模块化架构**:将引擎拆分成多个独立模块,提高了可维护性和可扩展性。
- **渲染**:使用 Vulkan 实现,且有抽象层支持未来扩展到 OpenGL、DirectX 和 Metal 等其他渲染 API。
- **资源管理**:包括基础的资源管理、加载和序列化功能。
- **UI**:初步集成了 NoesisGUI 和 ImGui 进行 XAML UI 元素的渲染。
- **接口导出**:通过 `engine.dll` 集中管理全局状态,避免模块间不一致。
- **高效内存管理**:通过 `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 系统整合进引擎,创建完整的游戏环境。
- **高级资源管理**:添加更多的资源格式,并优化资源加载管道以提高性能。
- **编辑器开发**:继续开发编辑器,为场景管理、资产创建和调试提供工具。