Files
XCEngine/docs/api/rhi/opengl/device/initialize.md

65 lines
1.8 KiB
Markdown
Raw Normal View History

2026-03-20 02:35:45 +08:00
# OpenGLDevice::Initialize
```cpp
bool Initialize(const RHIDeviceDesc& desc) override
```
初始化 OpenGL 设备。
## 详细描述
根据 `RHIDeviceDesc` 初始化 OpenGL 设备。初始化过程包括:
1. **检查是否已初始化**: 如果已初始化,直接返回 `true`
2. **窗口处理**:
- 如果 `desc.windowHandle` 提供现有窗口,调用 `InitializeWithExistingWindow()`
- 否则调用 `CreateRenderWindow()` 创建新窗口
3. **GLFW 初始化**: 确保 GLFW 库已初始化
4. **OpenGL 上下文**: 创建 OpenGL 3.3 Core Profile 上下文
5. **Glad 加载**: 使用 Glad 动态加载 OpenGL 函数
6. **设备信息收集**: 获取 GPU 厂商、渲染器、版本等信息
7. **能力查询**: 查询并存储 OpenGL 设备能力
### RHIDeviceDesc 字段说明
| 字段 | 描述 |
|------|------|
| `width` | 窗口宽度(当创建新窗口时) |
| `height` | 窗口高度(当创建新窗口时) |
| `appName` | 应用程序名称(用于窗口标题) |
| `enableDebugLayer` | 是否启用调试上下文 |
| `windowHandle` | 现有 GLFW 窗口句柄(可选) |
## 参数
- `desc` - 设备描述符,包含初始化参数
## 返回值
`bool` - 初始化成功返回 `true`,失败返回 `false`
## 示例
```cpp
OpenGLDevice device;
RHIDeviceDesc desc;
desc.width = 1920;
desc.height = 1080;
desc.appName = L"My OpenGL App";
desc.enableDebugLayer = true;
if (!device.Initialize(desc)) {
// 处理初始化失败
return;
}
// 设备已就绪,可以开始渲染
```
## 相关文档
- [OpenGLDevice](device.md) - 类总览
- [CreateRenderWindow](create-render-window.md) - 创建渲染窗口
- [InitializeWithExistingWindow](initialize-with-existing-window.md) - 使用现有窗口初始化
- [Shutdown](shutdown.md) - 关闭设备