50 lines
1.2 KiB
Markdown
50 lines
1.2 KiB
Markdown
# OpenGLDevice::Shutdown
|
|
|
|
```cpp
|
|
void Shutdown() override
|
|
```
|
|
|
|
关闭 OpenGL 设备并释放相关资源。
|
|
|
|
## 详细描述
|
|
|
|
关闭 OpenGL 设备并执行清理操作:
|
|
|
|
1. **窗口销毁**: 如果设备拥有窗口 (`m_ownsWindow == true`),调用 `glfwDestroyWindow()` 销毁 GLFW 窗口
|
|
2. **状态重置**:
|
|
- `m_window` 设为 `nullptr`
|
|
- `m_initialized` 设为 `false`
|
|
- `m_ownsWindow` 设为 `false`
|
|
|
|
### 窗口所有权
|
|
|
|
设备可能通过两种方式获得窗口:
|
|
- **自有窗口**: 通过 `CreateRenderWindow()` 创建,设备负责销毁
|
|
- **外部窗口**: 通过 `InitializeWithExistingWindow()` 传入,设备不负责销毁
|
|
|
|
## 注意事项
|
|
|
|
- 多次调用 `Shutdown()` 是安全的
|
|
- 销毁窗口后,与该窗口关联的 OpenGL 上下文将无效
|
|
- 建议在程序结束前显式调用 `Shutdown()`
|
|
|
|
## 示例
|
|
|
|
```cpp
|
|
{
|
|
OpenGLDevice device;
|
|
device.Initialize(desc);
|
|
|
|
// ... 使用设备进行渲染
|
|
|
|
device.Shutdown(); // 显式关闭
|
|
}
|
|
// 或等待析构函数自动调用
|
|
```
|
|
|
|
## 相关文档
|
|
|
|
- [OpenGLDevice](device.md) - 类总览
|
|
- [Initialize](initialize.md) - 初始化设备
|
|
- [CreateRenderWindow](create-render-window.md) - 创建渲染窗口
|