2.4 KiB
2.4 KiB
OpenGLVertexArray
命名空间: XCEngine::RHI
类型: class
头文件: XCEngine/RHI/OpenGL/OpenGLVertexArray.h
描述: OpenGL 后端的轻量 VAO 封装,用于保存顶点属性布局和索引缓冲绑定。
概览
OpenGLVertexArray 是一个非常直接的原生 VAO 包装器。它主要负责三件事:
- 创建 VAO
- 往 VAO 里写顶点属性描述
- 记录一个索引缓冲对象 ID
它不是完整的现代输入装配系统,也不是跨后端 InputLayout 的全部落地点。当前引擎里更完整的绘制路径仍然依赖 OpenGLCommandList、OpenGLPipelineState 和更高层的输入布局描述。
当前实现的真实行为
- Initialize 只调用
glGenVertexArrays - AddVertexBuffer 统一走
glVertexAttribPointer - SetIndexBuffer 会绑定
GL_ELEMENT_ARRAY_BUFFER,但type参数当前被忽略 - GetIndexCount 当前没有实际意义,因为
m_indexCount从未更新 - Shutdown 只删除 VAO,不会清空
m_indexBuffer、m_indexCount或m_vertexBufferCount
设计背景
VAO 属于典型的 OpenGL 原生状态对象。把它保留为一个单独的小封装,有两个实际好处:
- 测试和 OpenGL 专用样例代码可以直接操作它
- 上层不必每次都重复写一遍 VAO 创建与属性配置样板代码
但从商业级引擎角度看,它更像“后端工具层”,而不是长期唯一的输入装配抽象。
生命周期
- OpenGLVertexArray() 初始化为空对象
- Initialize 创建原生 VAO
- AddVertexBuffer / SetIndexBuffer 写入状态
- Bind / Unbind 切换当前 VAO
- Shutdown 删除原生 VAO
当前限制
- 不区分浮点、整数、双精度属性专用写入路径
- 不维护真实索引数量
type参数只保留接口形状,没有参与行为- 缺少错误处理和状态校验