From 6babd376c92fbc7c6060eba9c508e44d28eecea3 Mon Sep 17 00:00:00 2001 From: ChestnutYueyue <952134128@qq.com> Date: Tue, 17 Feb 2026 22:53:41 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E6=9B=B4=E6=96=B0=20README=20=E6=96=87?= =?UTF-8?q?=E6=A1=A3=E4=BB=A5=E5=8F=8D=E6=98=A0=E6=9C=80=E6=96=B0=E6=9E=B6?= =?UTF-8?q?=E6=9E=84=E5=8F=98=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加资源抽象层和显存管理功能说明 - 更新模块优先级和架构图 - 完善目录结构描述 - 新增性能优化策略说明 --- README.md | 98 +++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 81 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index f44e230..460b782 100644 --- a/README.md +++ b/README.md @@ -43,11 +43,13 @@ - **跨平台支持**:Windows、Linux、macOS、Nintendo Switch - **模块化架构**:模块系统 + 服务系统,灵活可扩展 - **多后端渲染**:OpenGL / Vulkan 支持,易于扩展新后端 +- **资源抽象层**:统一的 Buffer、Pipeline、Framebuffer 接口 - **高性能批处理**:独立 Batch 层,TrigLookup 优化,支持 10000 精灵/批次 - **场景图系统**:树形节点结构,支持变换继承 - **输入系统**:键盘、鼠标、手柄、触摸,事件驱动 - **渲染系统**:OpenGL ES 3.2,支持自定义着色器 - **视口适配**:多种适配模式,自动响应窗口大小变化 +- **显存管理**:VRAM 预算追踪,内存泄漏防护 - **音频系统**:高质量音频播放(规划中) - **UI 系统**:完整的 UI 控件支持(规划中) @@ -70,15 +72,9 @@ flowchart TB subgraph Modules["Modules (模块系统)"] direction TB - subgraph CoreModules["Core Modules"] - CONFIG[Config Module
配置管理] - PLATFORM[Platform Module
平台检测] - WINDOW[Window Module
窗口管理] - end - subgraph OtherModules["Feature Modules"] - INPUT[Input Module
输入处理] - RENDER[Render Module
渲染系统] - end + WINDOW["Window Module
窗口管理 P0"] + RENDER["Render Module
渲染系统 P10"] + INPUT["Input Module
输入处理 P20"] end subgraph Services["Services (服务系统)"] @@ -99,12 +95,14 @@ flowchart TB subgraph Graphics["Graphics (图形系统)"] direction TB + RESOURCES[Resources
资源抽象层] BACKEND[RenderBackend
渲染后端] BATCH[Batch Layer
批处理层] - GL[OpenGL Renderer
OpenGL 渲染器] - VK[Vulkan Renderer
Vulkan 渲染器] + GL[OpenGL Backend
OpenGL 后端] + VK[Vulkan Backend
Vulkan 后端] SHADER[ShaderManager
着色器管理] TEXTURE[TexturePool
纹理池] + MEMORY[Memory
显存管理] end subgraph Platform["Platform (平台层)"] @@ -125,8 +123,10 @@ flowchart TB BACKEND --> BATCH BATCH --> GL BATCH --> VK + GL --> RESOURCES GL --> SHADER GL --> TEXTURE + GL --> MEMORY WINDOW --> SDL2 INPUT --> INPUT_SYS INPUT_SYS --> SDL2 @@ -136,11 +136,9 @@ flowchart TB | 模块 | 职责 | 优先级 | |-----|------|-------| -| Config | 配置管理 | Core (0) | -| Platform | 平台检测 | Core (0) | -| Window | 窗口管理 | Core (0) | -| Input | 输入处理 | Input (50) | -| Render | 渲染系统 | Graphics (100) | +| Window | 窗口管理 | 0 | +| Render | 渲染系统 | 10 | +| Input | 输入处理 | 20 | ### 服务系统 @@ -165,6 +163,13 @@ Extra2D 采用分层架构支持多渲染后端: ├─────────────────────────────────────┤ │ Renderer (渲染命令) │ ├─────────────────────────────────────┤ +│ Resources (resources/) │ ← 资源抽象层(后端无关) +│ - Buffer 接口 │ +│ - Pipeline 接口 │ +│ - Framebuffer 接口 │ +│ - Shader 接口 │ +│ - FontAtlas 接口 │ +├─────────────────────────────────────┤ │ Batch Layer (batch/) │ ← 后端无关的批处理 │ - 顶点缓存管理 │ │ - 批次策略 (10000 精灵/批次) │ @@ -173,11 +178,37 @@ Extra2D 采用分层架构支持多渲染后端: ├─────────────────────────────────────┤ │ Backend Layer (backends/) │ ← 具体 GPU 实现 │ - OpenGL / Vulkan / Metal / D3D │ -│ - VAO/VBO 创建 │ +│ - GLBuffer / GLPipeline / GLFramebuffer │ - GPU 提交 │ └─────────────────────────────────────┘ ``` +### 资源抽象层 + +统一的资源接口,支持多后端实现: + +| 接口 | 功能 | OpenGL 实现 | +|-----|------|------------| +| Buffer | 顶点/索引/统一缓冲 | GLBuffer | +| Pipeline | 渲染状态管理 | GLPipeline | +| Framebuffer | 离屏渲染目标 | GLFramebuffer | +| Shader | 着色器程序 | GLShader | +| FontAtlas | 字体图集 | GLFontAtlas | + +### 显存管理 + +```cpp +// VRAM 预算管理(Switch 默认 400MB) +VRAMMgr::get().setVRAMBudget(400 * 1024 * 1024); + +// 自动追踪显存使用 +// - GLTexture 自动追踪纹理显存 +// - GLBuffer 自动追踪缓冲区显存 + +// 打印显存统计 +VRAMMgr::get().printStats(); +``` + ### 着色器系统 支持多后端的 JSON 元数据着色器系统: @@ -207,6 +238,8 @@ Extra2D 采用分层架构支持多渲染后端: | **批量绘制** | `drawBatch()` 一次性处理多个精灵 | CPU 开销减少 20-30% | | **静态索引** | 预生成索引缓冲区,避免运行时分配 | 内存分配开销消除 | | **着色器缓存** | 二进制着色器缓存,加速启动 | 启动时间减少 | +| **状态缓存** | GLPipeline 缓存状态,避免冗余 GL 调用 | 状态切换开销减少 | +| **Orphaning** | 动态缓冲区 orphaning 策略 | GPU 同步开销减少 | --- @@ -455,13 +488,32 @@ Extra2D/ │ │ │ ├── graphics/ # 图形渲染 │ │ │ │ ├── backends/ # 渲染后端 │ │ │ │ │ ├── opengl/ # OpenGL 实现 +│ │ │ │ │ │ ├── gl_context.h # OpenGL 上下文 +│ │ │ │ │ │ ├── gl_buffer.h # 缓冲区实现 +│ │ │ │ │ │ ├── gl_pipeline.h # 管线状态 +│ │ │ │ │ │ ├── gl_framebuffer.h # 帧缓冲 +│ │ │ │ │ │ ├── gl_renderer.h # 渲染器 +│ │ │ │ │ │ ├── gl_texture.h # 纹理 +│ │ │ │ │ │ ├── gl_shader.h # 着色器 +│ │ │ │ │ │ ├── gl_sprite_batch.h # 精灵批处理 +│ │ │ │ │ │ └── gl_font_atlas.h # 字体图集 │ │ │ │ │ └── vulkan/ # Vulkan 实现 │ │ │ │ ├── batch/ # 批处理层(后端无关) +│ │ │ │ │ ├── sprite_batch.h +│ │ │ │ │ └── shape_batch.h +│ │ │ │ ├── resources/ # 资源抽象层(新增) +│ │ │ │ │ ├── buffer.h # 缓冲区接口 +│ │ │ │ │ ├── pipeline.h # 管线接口 +│ │ │ │ │ ├── framebuffer.h # 帧缓冲接口 +│ │ │ │ │ ├── shader.h # 着色器接口 +│ │ │ │ │ └── font_atlas.h # 字体接口 │ │ │ │ ├── core/ # 渲染核心 │ │ │ │ ├── camera/ # 相机和视口 │ │ │ │ ├── shader/ # Shader 系统 │ │ │ │ ├── texture/ # 纹理系统 │ │ │ │ └── memory/ # GPU 内存管理 +│ │ │ │ ├── gpu_context.h # GPU 上下文状态 +│ │ │ │ └── vram_manager.h # 显存管理器 │ │ │ ├── platform/ # 平台抽象 │ │ │ ├── scene/ # 场景系统 │ │ │ ├── services/ # 服务接口 @@ -481,13 +533,25 @@ Extra2D/ │ ├── graphics/ # 图形实现 │ │ ├── backends/ # 渲染后端实现 │ │ │ ├── opengl/ # OpenGL 实现 +│ │ │ │ ├── gl_context.cpp +│ │ │ │ ├── gl_buffer.cpp +│ │ │ │ ├── gl_pipeline.cpp +│ │ │ │ ├── gl_framebuffer.cpp +│ │ │ │ ├── gl_renderer.cpp +│ │ │ │ ├── gl_texture.cpp +│ │ │ │ ├── gl_shader.cpp +│ │ │ │ ├── gl_sprite_batch.cpp +│ │ │ │ └── gl_font_atlas.cpp │ │ │ └── vulkan/ # Vulkan 实现 │ │ ├── batch/ # 批处理层实现 +│ │ ├── resources/ # 资源抽象层(接口定义) │ │ ├── core/ # 渲染核心 │ │ ├── camera/ # 相机和视口 │ │ ├── shader/ # Shader 系统 │ │ ├── texture/ # 纹理系统 │ │ └── memory/ # GPU 内存管理 +│ │ ├── gpu_context.cpp +│ │ └── vram_manager.cpp │ ├── platform/ # 平台实现 │ │ └── backends/ # 后端实现 │ │ ├── sdl2/ # SDL2 后端