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

78 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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)