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

2.7 KiB
Raw Blame History

OpenGLPipelineState

命名空间: XCEngine::RHI

类型: class

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

描述: OpenGL 后端的 RHIPipelineState 实现。它统一接受跨后端管线描述,但真实行为更接近“绑定时写回状态”的 CPU 侧状态容器,而不是显式 API 意义上的原生 PSO。

角色概述

OpenGL 没有 D3D12/Vulkan 那样的标准化 native PSO 语义,因此 OpenGLPipelineState 的职责不是预编译一个不可变的 GPU 管线对象,而是把高层状态先缓存下来,在 Bind() 时按需写回 OpenGL 上下文。

这类设计在商业引擎里非常常见:抽象层仍然保持现代 PSO 形状,后端实现则承认旧式状态机 API 的现实。

当前实现要点

  • Bind() 会优先绑定 compute program否则绑定 graphics program
  • Apply() 负责把缓存的深度/模板、混合和光栅化状态写回 OpenGL
  • viewport 与 scissor 仍由独立方法处理

同时需要明确几件事情:

为什么仍然保留 SetSampleQuality

虽然当前 OpenGL 后端并没有把 sample quality 落到真实状态,但接口仍然保留,原因并不奇怪:

  • 上层渲染器希望使用统一的 RHIPipelineState 契约
  • 文档需要如实说明“该字段在 OpenGL 后端尚未真正消费”
  • 将来如果后端补充更细的多重采样策略,不需要再改上层 API

这正是重构期商业引擎常见的渐进式契约策略。

重点限制

  • 它不是原生 OpenGL pipeline object
  • 它不是不可变对象,状态可以被持续覆盖
  • MSAA 相关接口当前只保留抽象层形状,不代表后端已经完整支持

关键方法

相关文档