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

2.6 KiB
Raw Blame History

OpenGLFramebuffer

命名空间: XCEngine::RHI

类型: class

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

描述: OpenGL 后端的帧缓冲对象封装器,用来把颜色、深度、模板附件组装成一个可绑定的 FBO。

概览

在现代显式 API 里,RenderPassFramebuffer、附件 load/store 规则通常是分层设计的;而在 OpenGL 里,最核心的实体往往就是 FBO 本身。OpenGLFramebuffer 的职责正是把这两种模型接起来。

当前类支持两种输入方式:

  • 直接使用 FramebufferDesc
  • 通过统一 RHI 的 RHIResourceView 列表构建

无论入口如何,最终落地行为都是“创建一个 FBO然后把纹理/层级/数组切片按规则挂载上去”。

主要职责

  • 创建并拥有底层 FBO
  • 维护宽高与采样数元数据
  • 把颜色、深度、模板附件挂到正确的 attachment point
  • 暴露 BindUnbind 和清除辅助方法

当前实现的真实行为

  • 颜色附件最多处理 16
  • renderPass 参数当前不参与实际创建逻辑
  • m_samples 只做缓存,不驱动 MSAA FBO 特殊路径
  • 清除方法都会立即绑定当前 FBO并且不恢复旧绑定
  • IsValid 只检查 FBO ID 是否非零

设计背景

商业级引擎在 OpenGL 后端通常会把 FBO 当成“运行时组合点”,而不是硬搬 Vulkan/D3D12 的 render pass 规则。原因很现实:

  • OpenGL 的原生对象就是 FBO
  • 附件绑定粒度高,组合方式灵活
  • 用 FBO 作为后端真实实体,最容易和统一 RHI 抽象做映射

当前实现沿用了这种思路RHI 继续保留更高层接口OpenGL 后端则把真正的工作落在 FBO 组装上。

生命周期

当前限制

  • 没有 render pass load/store 语义建模
  • 没有自动恢复前一绑定状态
  • samples 目前没有形成完整的多重采样管理
  • 对附件兼容性的错误信息较少,只靠 glCheckFramebufferStatus

关键方法

相关文档