2.2 KiB
2.2 KiB
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。
当前实现的真实行为
两种初始化路径
Initialize(const FramebufferDesc&)直接按FramebufferDesc组装附件。Initialize(RHIRenderPass*, ...)从RHIResourceView数组提取附件信息。
附件绑定策略
- 最多处理
16个颜色附件。 - 根据 attachment 的 target / layer / mip,选择
glFramebufferTexture1D、glFramebufferTexture2D、glFramebufferTextureLayer或glFramebufferTexture。 - 深度附件如果标记为
DepthStencil,会绑定到GL_DEPTH_STENCIL_ATTACHMENT。
render pass 参数
Initialize(RHIRenderPass*, ...)当前会忽略renderPass本身。- 也就是说,这个类在 OpenGL 后端更接近“附件集合对象”,而不是对 Vulkan / D3D12 render pass 语义的完全镜像。
当前限制
Clear*()系列函数会直接修改当前 FBO 绑定状态,不会恢复之前的 framebuffer。IsValid()只检查 FBO id 是否非零,不会再次验证完整性。- 创建失败时返回
false,但由调用方或析构来最终清理对象。