Files
XCEngine/docs/api/rhi/opengl/device/device.md
ssdfasd 1cf744b755 refactor(docs): RHI模块文档重构 - 修复18处链接错误并新增RHIFramebuffer/RHIRenderPass文档
- 修复opengl/下13个文件对overview.md的错误引用,改为opengl.md
- 修复opengl/shader/下2处get-native-handle.md的错误路径引用
- 修复rhi.md中rhifactory路径错误
- 修复opengl.md中对d3d12.md的错误引用
- 修复opengl/README.md中的overview.md引用
- 新增RHIFramebuffer完整文档(7个文件)
- 新增RHIRenderPass完整文档(7个文件)
- 更新rhi.md总览页,添加RHIFramebuffer和RHIRenderPass分类
2026-03-26 01:29:00 +08:00

3.4 KiB

OpenGLDevice

命名空间: XCEngine::RHI

继承自: RHIDevice

描述: OpenGL 设备的实现,基于 GLFW 和 Glad 提供 OpenGL 图形渲染能力。支持创建窗口、管理渲染资源、编译着色器等核心 RHI 功能。

概述

OpenGLDevice 是 XCEngine RHI 模块的 OpenGL 后端实现,通过 GLFW 管理窗口上下文,使用 Glad 加载 OpenGL 函数。它继承自抽象接口 RHIDevice,提供与具体图形 API 无关的统一接口。

主要功能

  • 基于 GLFW 的窗口管理和事件处理
  • OpenGL 3.3 Core Profile 上下文初始化
  • 使用 Glad 动态加载 OpenGL 函数
  • 设备能力查询和信息收集
  • 渲染资源创建(缓冲区、纹理、着色器等)

版本要求

  • OpenGL 3.3 Core Profile
  • GLFW 3.0+
  • Glad OpenGL 3.3+

公共方法

方法 描述
OpenGLDevice 构造函数
~OpenGLDevice 析构函数
Initialize 初始化设备
Shutdown 关闭设备
CreateRenderWindow 创建渲染窗口
InitializeWithExistingWindow 使用现有窗口初始化
GetWindow 获取 GLFW 窗口指针
GetDC 获取 Windows 设备上下文
GetContext 获取 OpenGL 渲染上下文
GetDeviceInfoImpl 获取设备信息实现
SwapBuffers 交换前后缓冲区
PollEvents 处理窗口事件
SetShouldClose 设置关闭标志
ShouldClose 检查是否应关闭
CreateBuffer 创建缓冲区
CreateTexture 创建纹理
CreateSwapChain 创建交换链
CreateCommandList 创建命令列表
CreateCommandQueue 创建命令队列
CompileShader 编译着色器
CreatePipelineState 创建管线状态
CreateFence 创建栅栏
CreateSampler 创建采样器
GetCapabilities 获取设备能力
GetDeviceInfo 获取设备信息
GetNativeDevice 获取原生设备
GetNativeHandle 获取原生句柄

使用示例

#include "XCEngine/RHI/OpenGL/OpenGLDevice.h"

using namespace XCEngine::RHI;

// 创建并初始化 OpenGL 设备
OpenGLDevice device;
RHIDeviceDesc desc;
desc.width = 1280;
desc.height = 720;
desc.appName = L"XCEngine App";
desc.enableDebugLayer = true;

if (!device.Initialize(desc)) {
    return false;
}

// 渲染循环
while (!device.ShouldClose()) {
    device.PollEvents();
    
    // 渲染逻辑
    renderScene();
    
    device.SwapBuffers();
}

// 清理
device.Shutdown();

使用已有 GLFW 窗口

GLFWwindow* existingWindow = glfwCreateWindow(1280, 720, "My Window", nullptr, nullptr);

OpenGLDevice device;
if (device.InitializeWithExistingWindow(existingWindow)) {
    // 使用已有窗口继续渲染
}

相关文档