docs(api): deepen OpenGL helper backend docs

This commit is contained in:
2026-03-27 23:44:21 +08:00
parent 837a4ce631
commit 6d0a61e70d
46 changed files with 639 additions and 822 deletions

View File

@@ -6,38 +6,63 @@
**头文件**: `XCEngine/RHI/OpenGL/OpenGLVertexArray.h`
**描述**: 定义 `XCEngine/RHI/OpenGL` 子目录中的 `OpenGLVertexArray` public API
**描述**: OpenGL 后端的轻量 VAO 封装,用于保存顶点属性布局和索引缓冲绑定
## 概
## 概
`OpenGLVertexArray.h` `XCEngine/RHI/OpenGL` 子目录 下的 public header当前页面作为平行目录中的 canonical 总览,用于汇总该头文件暴露的主要声明。
`OpenGLVertexArray`一个相对旧式、直接的 OpenGL 工具封装。它做的事情很简单:
## 声明概览
- 创建一个 VAO
- 把顶点属性描述写入这个 VAO
- 记录一个索引缓冲绑定
| 声明 | 类型 | 说明 |
|------|------|------|
| `VertexAttributeType` | `enum class` | 头文件中的公开声明。 |
| `VertexAttributeNormalized` | `enum class` | 头文件中的公开声明。 |
| `VertexAttribute` | `struct` | 头文件中的公开声明。 |
| `OpenGLVertexArray` | `class` | 头文件中的公开声明。 |
它并不尝试成为完整的跨后端输入布局系统。更现代的路径已经更多依赖 `OpenGLCommandList` 和 pipeline / input layout 的组合去驱动属性配置。
## 公共方法
## 设计定位
| 方法 | 描述 |
|------|------|
| [OpenGLVertexArray()](Constructor.md) | 构造对象。 |
| [~OpenGLVertexArray()](Destructor.md) | 销毁对象并释放相关资源。 |
| [Initialize](Initialize.md) | 初始化内部状态。 |
| [AddVertexBuffer](AddVertexBuffer.md) | 添加元素或建立关联。 |
| [SetIndexBuffer](SetIndexBuffer.md) | 设置相关状态或配置。 |
| [Shutdown](Shutdown.md) | 关闭并清理内部状态。 |
| [Bind](Bind.md) | 公开方法,详见头文件声明。 |
| [Unbind](Unbind.md) | 公开方法,详见头文件声明。 |
| [GetID](GetID.md) | 获取相关状态或对象。 |
| [GetIndexBuffer](GetIndexBuffer.md) | 获取相关状态或对象。 |
| [GetIndexCount](GetIndexCount.md) | 获取相关状态或对象。 |
可以把它看成“对原生 VAO 的薄封装”,适合:
- 单元测试
- OpenGL 集成样例
- 较直接的后端实验代码
但它不是一个高度完备的商业级输入装配抽象,当前实现里仍有明显的简化点。
## 生命周期
- 构造后为空对象。
- [Initialize](Initialize.md) 创建原生 VAO。
- [AddVertexBuffer](AddVertexBuffer.md) / [SetIndexBuffer](SetIndexBuffer.md) 向 VAO 写入状态。
- [Shutdown](Shutdown.md) 删除 VAO。
## 线程语义
- 无锁。
- 所有操作依赖 OpenGL 上下文,应在渲染线程或拥有当前上下文的线程执行。
## 当前实现的真实行为
- `AddVertexBuffer()` 总是用 `glVertexAttribPointer()` 写属性。
- `SetIndexBuffer()` 会绑定 `GL_ELEMENT_ARRAY_BUFFER`,但 `type` 参数当前被忽略。
- `m_indexCount` 从未被更新,因此 [GetIndexCount](GetIndexCount.md) 目前基本没有实际意义。
- `Shutdown()` 只删除 VAO不清理缓存的索引缓冲字段。
- 单元测试 `tests/RHI/OpenGL/unit/test_vertex_array.cpp` 覆盖了初始化、顶点缓冲添加、索引缓冲设置、绑定/解绑和多属性场景。
## 当前限制
- 不区分整数属性和浮点属性写入路径。
- 不维护真实索引数量。
- 不是当前 RHI 输入布局路径的唯一或最终方案。
## 关键方法
- [Initialize](Initialize.md)
- [AddVertexBuffer](AddVertexBuffer.md)
- [SetIndexBuffer](SetIndexBuffer.md)
- [Bind](Bind.md)
- [Shutdown](Shutdown.md)
## 相关文档
- [当前目录](../OpenGL.md) - 返回 `OpenGL` 平行目录
- [API 总索引](../../../../main.md) - 返回顶层索引
- [OpenGL](../OpenGL.md)
- [OpenGLCommandList](../OpenGLCommandList/OpenGLCommandList.md)