Files
XCEngine/docs/api/rhi/opengl/opengl-overview.md

2.7 KiB
Raw Blame History

OpenGL Backend Overview

OpenGL RHI 后端实现,基于 GLFW 和现代 OpenGL (Core Profile)。

头文件

所有 OpenGL 后端头文件位于 engine/include/XCEngine/RHI/OpenGL/

架构说明

OpenGL 是立即模式 API与 D3D12 的命令列表模式有本质区别:

  • 无显式的命令列表录制和提交
  • 状态通过 OpenGL 状态机管理
  • OpenGLCommandList 主要用于状态批处理和 RHI 接口兼容
  • 交换链使用 GLFW 窗口管理

后端组件

文件 描述
OpenGLDevice OpenGLDevice.h 主设备,管理窗口和 OpenGL 上下文
OpenGLBuffer OpenGLBuffer.h GPU 缓冲区VBO/UBO/SSBO
OpenGLTexture OpenGLTexture.h 纹理对象1D/2D/3D/Cube
OpenGLCommandList OpenGLCommandList.h 命令列表(状态批处理)
OpenGLCommandQueue OpenGLCommandQueue.h 命令队列RHI 兼容层)
OpenGLSwapChain OpenGLSwapChain.h 交换链GLFW 窗口)
OpenGLFence OpenGLFence.h 栅栏同步GLsync
OpenGLShader OpenGLShader.h Shader Program
OpenGLPipelineState OpenGLPipelineState.h 管线状态
OpenGLSampler OpenGLSampler.h 采样器对象
OpenGLVertexArray OpenGLVertexArray.h 顶点数组对象 (VAO)
OpenGLRenderTargetView OpenGLRenderTargetView.h 渲染目标 (FBO)
OpenGLDepthStencilView OpenGLDepthStencilView.h 深度模板 (FBO)

初始化流程

#include <XCEngine/RHI/OpenGL/OpenGLDevice.h>

using namespace XCEngine::RHI;

OpenGLDevice device;
device.CreateRenderWindow(1920, 1080, "XCEngine", true);

// Create resources
OpenGLShader shader;
shader.CompileFromFile("shaders/Default.vert", "shaders/Default.frag");

OpenGLBuffer vb;
vb.InitializeVertexBuffer(vertices, sizeof(vertices));

OpenGLTexture texture;
texture.LoadFromFile("textures/diffuse.png");

// Render loop
while (!device.ShouldClose()) {
    device.PollEvents();
    
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    
    shader.Use();
    vb.Bind();
    texture.Bind(0);
    
    glDrawArrays(GL_TRIANGLES, 0, vertexCount);
    
    device.SwapBuffers();
}

与 D3D12 的差异

方面 D3D12 OpenGL
模式 命令列表录制 立即模式
状态管理 显式资源状态 OpenGL 状态机
描述符 描述符堆 + 句柄 绑定点
管线状态 PSO不可变 可变状态
内存管理 显式显存管理 驱动自动管理
多线程 需要 Bundle 上下文共享

扩展模块

  • GLFW: 窗口管理和输入
  • GLSL: 着色器语言 (Core Profile)
  • stb_image: 纹理文件加载