# 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 路径,但不少接口仍然是适配性质的轻包装。 - 部分能力字段或设备信息字段带有“近似值”或“哨兵值”性质,不能把它们当作驱动级精确信息。 ## 推荐阅读顺序 1. [OpenGLDevice](OpenGLDevice/OpenGLDevice.md) 2. [OpenGLCommandList](OpenGLCommandList/OpenGLCommandList.md) 3. [OpenGLPipelineState](OpenGLPipelineState/OpenGLPipelineState.md) 4. [OpenGLShader](OpenGLShader/OpenGLShader.md) 5. [OpenGLDescriptorSet](OpenGLDescriptorSet/OpenGLDescriptorSet.md) ## 与测试的对应关系 - `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](OpenGLBuffer/OpenGLBuffer.md) - [OpenGLCommandList](OpenGLCommandList/OpenGLCommandList.md) - [OpenGLCommandQueue](OpenGLCommandQueue/OpenGLCommandQueue.md) - [OpenGLDepthStencilView](OpenGLDepthStencilView/OpenGLDepthStencilView.md) - [OpenGLDescriptorPool](OpenGLDescriptorPool/OpenGLDescriptorPool.md) - [OpenGLDescriptorSet](OpenGLDescriptorSet/OpenGLDescriptorSet.md) - [OpenGLDevice](OpenGLDevice/OpenGLDevice.md) - [OpenGLEnums](OpenGLEnums/OpenGLEnums.md) - [OpenGLFence](OpenGLFence/OpenGLFence.md) - [OpenGLFramebuffer](OpenGLFramebuffer/OpenGLFramebuffer.md) - [OpenGLPipelineLayout](OpenGLPipelineLayout/OpenGLPipelineLayout.md) - [OpenGLPipelineState](OpenGLPipelineState/OpenGLPipelineState.md) - [OpenGLRenderPass](OpenGLRenderPass/OpenGLRenderPass.md) - [OpenGLRenderTargetView](OpenGLRenderTargetView/OpenGLRenderTargetView.md) - [OpenGLResourceView](OpenGLResourceView/OpenGLResourceView.md) - [OpenGLSampler](OpenGLSampler/OpenGLSampler.md) - [OpenGLScreenshot](OpenGLScreenshot/OpenGLScreenshot.md) - [OpenGLShader](OpenGLShader/OpenGLShader.md) - [OpenGLSwapChain](OpenGLSwapChain/OpenGLSwapChain.md) - [OpenGLTexture](OpenGLTexture/OpenGLTexture.md) - [OpenGLTextureUnitAllocator](OpenGLTextureUnitAllocator/OpenGLTextureUnitAllocator.md) - [OpenGLUniformBufferManager](OpenGLUniformBufferManager/OpenGLUniformBufferManager.md) - [OpenGLVertexArray](OpenGLVertexArray/OpenGLVertexArray.md) ## 相关文档 - [RHI](../RHI.md) - [Devices, Queues, Command Lists, And Resource Creation](../../../_guides/RHI/Devices-Queues-CommandLists-And-Resource-Creation.md)