- 修复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分类
3.4 KiB
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)) {
// 使用已有窗口继续渲染
}
相关文档
- OpenGL 后端总览
- RHIDevice - 抽象设备接口