2.6 KiB
2.6 KiB
OpenGLFramebuffer
命名空间: XCEngine::RHI
类型: class
头文件: XCEngine/RHI/OpenGL/OpenGLFramebuffer.h
描述: OpenGL 后端的帧缓冲对象封装器,用来把颜色、深度、模板附件组装成一个可绑定的 FBO。
概览
在现代显式 API 里,RenderPass、Framebuffer、附件 load/store 规则通常是分层设计的;而在 OpenGL 里,最核心的实体往往就是 FBO 本身。OpenGLFramebuffer 的职责正是把这两种模型接起来。
当前类支持两种输入方式:
- 直接使用
FramebufferDesc - 通过统一 RHI 的
RHIResourceView列表构建
无论入口如何,最终落地行为都是“创建一个 FBO,然后把纹理/层级/数组切片按规则挂载上去”。
主要职责
当前实现的真实行为
- 颜色附件最多处理
16个 renderPass参数当前不参与实际创建逻辑m_samples只做缓存,不驱动 MSAA FBO 特殊路径- 清除方法都会立即绑定当前 FBO,并且不恢复旧绑定
- IsValid 只检查 FBO ID 是否非零
设计背景
商业级引擎在 OpenGL 后端通常会把 FBO 当成“运行时组合点”,而不是硬搬 Vulkan/D3D12 的 render pass 规则。原因很现实:
- OpenGL 的原生对象就是 FBO
- 附件绑定粒度高,组合方式灵活
- 用 FBO 作为后端真实实体,最容易和统一 RHI 抽象做映射
当前实现沿用了这种思路:RHI 继续保留更高层接口,OpenGL 后端则把真正的工作落在 FBO 组装上。
生命周期
- OpenGLFramebuffer() 初始化为空对象
- Initialize 创建 FBO 并附着资源
- Bind / Unbind 用于直接切换绑定
- Shutdown 删除 FBO 并重置尺寸缓存
当前限制
- 没有 render pass load/store 语义建模
- 没有自动恢复前一绑定状态
samples目前没有形成完整的多重采样管理- 对附件兼容性的错误信息较少,只靠
glCheckFramebufferStatus