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

2.3 KiB
Raw Blame History

OpenGLUniformBufferManager

命名空间: XCEngine::RHI

类型: class

头文件: XCEngine/RHI/OpenGL/OpenGLUniformBufferManager.h

描述: OpenGL 后端的 uniform buffer 绑定点管理器,负责槽位分配、整块 UBO 绑定和本地缓存维护。

概览

在统一 RHI 语义里,常量缓冲视图看起来像独立的 CBV但在当前 OpenGL 后端里,这件事最终仍然要落到 uniform buffer binding point。

OpenGLUniformBufferManager 的职责就是管理这些绑定点:

  • 分配和释放 binding point
  • 把某个 OpenGLBuffer 绑定到指定槽位
  • 缓存当前绑定关系,供其他后端封装读取

设计定位

它和 OpenGLTextureUnitAllocator 属于同一层级的基础设施:

  • 本身不代表高层 descriptor
  • 本身也不管理 buffer 生命周期
  • 只是把稀缺的后端绑定点做成可复用服务

对于商业引擎式的 RHI 文档来说,关键不是把它包装成“更高级”的东西,而是把它当前真的只做到哪一步说清楚。

生命周期

线程语义

  • 无锁。
  • 依赖 OpenGL 上下文,应在渲染线程或拥有上下文的线程使用。

当前实现的真实行为

  • 使用线性 first-fit 分配策略。
  • BindBuffer 固定使用 glBindBufferBase(),不会做范围绑定。
  • GetBoundBuffer() 只是本地缓存查询。
  • OpenGLResourceView::InitializeAsConstantBuffer() 会通过它分配绑定点。
  • OpenGLDevice::Initialize(...) 会查询 GL_MAX_UNIFORM_BUFFER_BINDINGS,并把结果传给 Initialize

当前限制

  • 不支持 offset / size 范围绑定。
  • 没有同步验证 OpenGL 真实支持的最大 UBO 绑定点数量。
  • 重复 Initialize() 不是可靠的重置流程。

关键方法

相关文档