docs(api): deepen OpenGL vertex array and view docs

This commit is contained in:
2026-03-28 02:08:28 +08:00
parent ae93952ce0
commit bce938ac58
47 changed files with 799 additions and 657 deletions

View File

@@ -10,49 +10,45 @@
## 概览
`OpenGLVertexArray` 是一个相对旧式、直接的 OpenGL 工具封装。它做的事情很简单:
`OpenGLVertexArray` 是一个非常直接的原生 VAO 包装器。它主要负责三件事:
- 创建一个 VAO
- 把顶点属性描述写入这个 VAO
- 记录一个索引缓冲绑定
- 创建 VAO
- 往 VAO 里写顶点属性描述
- 记录一个索引缓冲对象 ID
并不尝试成为完整的跨后端输入布局系统。更现代的路径已经更多依赖 `OpenGLCommandList` 和 pipeline / input layout 的组合去驱动属性配置
## 设计定位
可以把它看成“对原生 VAO 的薄封装”,适合:
- 单元测试
- OpenGL 集成样例
- 较直接的后端实验代码
但它不是一个高度完备的商业级输入装配抽象,当前实现里仍有明显的简化点。
## 生命周期
- 构造后为空对象。
- [Initialize](Initialize.md) 创建原生 VAO。
- [AddVertexBuffer](AddVertexBuffer.md) / [SetIndexBuffer](SetIndexBuffer.md) 向 VAO 写入状态。
- [Shutdown](Shutdown.md) 删除 VAO。
## 线程语义
- 无锁。
- 所有操作依赖 OpenGL 上下文,应在渲染线程或拥有当前上下文的线程执行。
不是完整的现代输入装配系统,也不是跨后端 `InputLayout` 的全部落地点。当前引擎里更完整的绘制路径仍然依赖 `OpenGLCommandList``OpenGLPipelineState` 和更高层的输入布局描述
## 当前实现的真实行为
- `AddVertexBuffer()` 总是`glVertexAttribPointer()` 写属性。
- `SetIndexBuffer()` 会绑定 `GL_ELEMENT_ARRAY_BUFFER`,但 `type` 参数当前被忽略。
- `m_indexCount` 从未被更新,因此 [GetIndexCount](GetIndexCount.md) 目前基本没有实际意义。
- `Shutdown()` 只删除 VAO不清理缓存的索引缓冲字段。
- 单元测试 `tests/RHI/OpenGL/unit/test_vertex_array.cpp` 覆盖了初始化、顶点缓冲添加、索引缓冲设置、绑定/解绑和多属性场景。
- [Initialize](Initialize.md) 只调`glGenVertexArrays`
- [AddVertexBuffer](AddVertexBuffer.md) 统一走 `glVertexAttribPointer`
- [SetIndexBuffer](SetIndexBuffer.md) 会绑定 `GL_ELEMENT_ARRAY_BUFFER`,但 `type` 参数当前被忽略
- [GetIndexCount](GetIndexCount.md) 当前没有实际意义,因为 `m_indexCount` 从未更新
- [Shutdown](Shutdown.md) 只删除 VAO不会清空 `m_indexBuffer``m_indexCount``m_vertexBufferCount`
## 设计背景
VAO 属于典型的 OpenGL 原生状态对象。把它保留为一个单独的小封装,有两个实际好处:
- 测试和 OpenGL 专用样例代码可以直接操作它
- 上层不必每次都重复写一遍 VAO 创建与属性配置样板代码
但从商业级引擎角度看,它更像“后端工具层”,而不是长期唯一的输入装配抽象。
## 生命周期
- [OpenGLVertexArray()](Constructor.md) 初始化为空对象
- [Initialize](Initialize.md) 创建原生 VAO
- [AddVertexBuffer](AddVertexBuffer.md) / [SetIndexBuffer](SetIndexBuffer.md) 写入状态
- [Bind](Bind.md) / [Unbind](Unbind.md) 切换当前 VAO
- [Shutdown](Shutdown.md) 删除原生 VAO
## 当前限制
- 不区分整数属性和浮点属性写入路径
- 不维护真实索引数量
- 不是当前 RHI 输入布局路径的唯一或最终方案。
- 不区分浮点、整数、双精度属性专用写入路径
- 不维护真实索引数量
- `type` 参数只保留接口形状,没有参与行为
- 缺少错误处理和状态校验
## 关键方法
@@ -64,5 +60,6 @@
## 相关文档
- [OpenGL](../OpenGL.md)
- [OpenGLCommandList](../OpenGLCommandList/OpenGLCommandList.md)
- [OpenGLBuffer](../OpenGLBuffer/OpenGLBuffer.md)
- [OpenGLPipelineState](../OpenGLPipelineState/OpenGLPipelineState.md)