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

2.2 KiB
Raw Blame History

OpenGLFramebuffer

命名空间: XCEngine::RHI

类型: class

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

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

概述

和 Vulkan / D3D12 的 render pass + framebuffer 分层不同OpenGL 更偏向直接操作 framebuffer object。OpenGLFramebuffer 的职责,是把引擎内部的附件描述或资源视图组合成一个实际的 FBO并提供基础的绑定与清屏操作。

它可以理解为 OpenGL 后端里的“附件包”:

  • 你先描述要挂哪些 texture / layer / mip。
  • 它负责创建 FBO、附着附件并检查完整性。
  • 命令列表或截图逻辑再在这个 FBO 上执行绘制、清理和 blit。

当前实现的真实行为

两种初始化路径

附件绑定策略

  • 最多处理 16 个颜色附件。
  • 根据 attachment 的 target / layer / mip选择 glFramebufferTexture1DglFramebufferTexture2DglFramebufferTextureLayerglFramebufferTexture
  • 深度附件如果标记为 DepthStencil,会绑定到 GL_DEPTH_STENCIL_ATTACHMENT

render pass 参数

  • Initialize(RHIRenderPass*, ...) 当前会忽略 renderPass 本身。
  • 也就是说,这个类在 OpenGL 后端更接近“附件集合对象”,而不是对 Vulkan / D3D12 render pass 语义的完全镜像。

当前限制

  • Clear*() 系列函数会直接修改当前 FBO 绑定状态,不会恢复之前的 framebuffer。
  • IsValid() 只检查 FBO id 是否非零,不会再次验证完整性。
  • 创建失败时返回 false,但由调用方或析构来最终清理对象。

重点方法

相关文档