Files
XCEngine/docs/api/XCEngine/RHI/OpenGL/OpenGLVertexArray/OpenGLVertexArray.md

66 lines
2.4 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.
# OpenGLVertexArray
**命名空间**: `XCEngine::RHI`
**类型**: `class`
**头文件**: `XCEngine/RHI/OpenGL/OpenGLVertexArray.h`
**描述**: OpenGL 后端的轻量 VAO 封装,用于保存顶点属性布局和索引缓冲绑定。
## 概览
`OpenGLVertexArray` 是一个非常直接的原生 VAO 包装器。它主要负责三件事:
- 创建 VAO
- 往 VAO 里写顶点属性描述
- 记录一个索引缓冲对象 ID
它不是完整的现代输入装配系统,也不是跨后端 `InputLayout` 的全部落地点。当前引擎里更完整的绘制路径仍然依赖 `OpenGLCommandList``OpenGLPipelineState` 和更高层的输入布局描述。
## 当前实现的真实行为
- [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
## 当前限制
- 不区分浮点、整数、双精度属性专用写入路径
- 不维护真实索引数量
- `type` 参数只保留接口形状,没有参与行为
- 缺少错误处理和状态校验
## 关键方法
- [Initialize](Initialize.md)
- [AddVertexBuffer](AddVertexBuffer.md)
- [SetIndexBuffer](SetIndexBuffer.md)
- [Bind](Bind.md)
- [Shutdown](Shutdown.md)
## 相关文档
- [OpenGLCommandList](../OpenGLCommandList/OpenGLCommandList.md)
- [OpenGLBuffer](../OpenGLBuffer/OpenGLBuffer.md)
- [OpenGLPipelineState](../OpenGLPipelineState/OpenGLPipelineState.md)