3.9 KiB
3.9 KiB
OpenGL
命名空间: XCEngine::RHI
类型: submodule
描述: XCEngine 的 OpenGL 后端入口,负责在 Win32/WGL 上建立上下文,并把抽象 RHI 设备、命令、资源和绑定模型适配为有状态的 OpenGL 调用序列。
概览
与 D3D12、Vulkan 这种“先记录、再提交”的显式后端不同,当前 OpenGL 子模块的核心特点是:
- 它依赖一个活动的 OpenGL 上下文
- 很多“命令列表”接口实际会立即对当前上下文生效
- descriptor set、pipeline layout、pipeline state 等抽象概念,在这里大多是适配层,而不是 OpenGL 原生对象
如果你熟悉 Unity,可以把它理解成“老牌状态机图形 API 的一层引擎化封装”:重点不在提交队列,而在把状态切换、纹理单元、uniform buffer 绑定和 framebuffer 组合管理好。
设计要点
- 设备层负责 WGL 上下文与能力探测。
OpenGLCommandQueue更像兼容抽象层的门面,而不是一条真实的 GPU 提交队列。OpenGLCommandList更接近“状态与调用包装器”,不是可延迟提交的录制命令缓冲。OpenGLPipelineState是 CPU 侧状态容器,Bind()时把状态应用到当前上下文。OpenGLDescriptorSet是对纹理单元、sampler 绑定点和 uniform buffer 绑定点的统一封装。
当前实现边界
- 平台路径是 Windows + WGL。
- 设备初始化支持隐藏窗口自建上下文,也支持附着到现有窗口。
- 命令队列和命令列表抽象已经能打通统一 RHI 路径,但不少接口仍然是适配性质的轻包装。
- 部分能力字段或设备信息字段带有“近似值”或“哨兵值”性质,不能把它们当作驱动级精确信息。
推荐阅读顺序
与测试的对应关系
tests/RHI/OpenGL/unit/用于覆盖 OpenGL 后端专项行为。tests/RHI/unit/test_shader.cpp、tests/RHI/unit/test_pipeline_layout.cpp会通过统一抽象验证 OpenGL 路径。tests/RHI/OpenGL/integration/与tests/Rendering/integration/*覆盖真实绘制和截图结果。
头文件索引
- OpenGLBuffer
- OpenGLCommandList
- OpenGLCommandQueue
- OpenGLDepthStencilView
- OpenGLDescriptorPool
- OpenGLDescriptorSet
- OpenGLDevice
- OpenGLEnums
- OpenGLFence
- OpenGLFramebuffer
- OpenGLPipelineLayout
- OpenGLPipelineState
- OpenGLRenderPass
- OpenGLRenderTargetView
- OpenGLResourceView
- OpenGLSampler
- OpenGLScreenshot
- OpenGLShader
- OpenGLSwapChain
- OpenGLTexture
- OpenGLTextureUnitAllocator
- OpenGLUniformBufferManager
- OpenGLVertexArray