62 lines
1.3 KiB
Markdown
62 lines
1.3 KiB
Markdown
|
|
# OpenGLDevice::CreateSwapChain
|
||
|
|
|
||
|
|
```cpp
|
||
|
|
RHISwapChain* CreateSwapChain(const SwapChainDesc& desc) override
|
||
|
|
```
|
||
|
|
|
||
|
|
创建 OpenGL 交换链对象。
|
||
|
|
|
||
|
|
## 详细描述
|
||
|
|
|
||
|
|
创建与设备窗口关联的交换链,用于管理前后缓冲区的交换。
|
||
|
|
|
||
|
|
### 交换链行为
|
||
|
|
|
||
|
|
- 使用窗口的当前尺寸初始化交换链
|
||
|
|
- 通过 `SwapBuffers()` 执行缓冲区交换
|
||
|
|
- 交换链与 GLFW 窗口 (`m_window`) 关联
|
||
|
|
|
||
|
|
## 参数
|
||
|
|
|
||
|
|
- `desc` - 交换链描述符
|
||
|
|
|
||
|
|
### SwapChainDesc 字段
|
||
|
|
|
||
|
|
| 字段 | 描述 |
|
||
|
|
|------|------|
|
||
|
|
| `width` | 缓冲区宽度 |
|
||
|
|
| `height` | 缓冲区高度 |
|
||
|
|
|
||
|
|
## 返回值
|
||
|
|
|
||
|
|
`RHISwapChain*` - 创建的交换链指针
|
||
|
|
|
||
|
|
## 注意事项
|
||
|
|
|
||
|
|
- 如果 `m_window` 为 `nullptr`,交换链创建失败
|
||
|
|
- 返回的交换链对象归调用者所有,需自行管理生命周期
|
||
|
|
- 交换链尺寸应与窗口尺寸匹配
|
||
|
|
|
||
|
|
## 示例
|
||
|
|
|
||
|
|
```cpp
|
||
|
|
SwapChainDesc swapDesc;
|
||
|
|
swapDesc.width = 1280;
|
||
|
|
swapDesc.height = 720;
|
||
|
|
|
||
|
|
RHISwapChain* swapChain = device.CreateSwapChain(swapDesc);
|
||
|
|
|
||
|
|
// 在渲染循环中使用
|
||
|
|
while (!device.ShouldClose()) {
|
||
|
|
device.PollEvents();
|
||
|
|
renderScene();
|
||
|
|
device.SwapBuffers();
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
## 相关文档
|
||
|
|
|
||
|
|
- [OpenGLDevice](device.md) - 类总览
|
||
|
|
- [OpenGLSwapChain](../opengl-swap-chain.md) - OpenGL 交换链实现
|
||
|
|
- [SwapBuffers](swap-buffers.md) - 交换缓冲区
|