95 lines
2.5 KiB
Markdown
95 lines
2.5 KiB
Markdown
# RHISwapChain
|
|
|
|
**命名空间**: `XCEngine::RHI`
|
|
|
|
**类型**: `class` (abstract)
|
|
|
|
**描述**: GPU 交换链抽象接口,用于管理窗口渲染和帧缓冲区切换。
|
|
|
|
## 概述
|
|
|
|
`RHISwapChain` 封装了帧缓冲区交换链的操作,包括获取当前后台缓冲、呈现渲染结果、窗口调整等功能。
|
|
|
|
## 公共方法
|
|
|
|
### 生命周期
|
|
|
|
| 方法 | 描述 |
|
|
|------|------|
|
|
| `virtual void Shutdown()` | 关闭交换链 |
|
|
|
|
### 交换链操作
|
|
|
|
| 方法 | 描述 |
|
|
|------|------|
|
|
| `virtual uint32_t GetCurrentBackBufferIndex() const` | 获取当前后台缓冲索引 |
|
|
| `virtual RHITexture* GetCurrentBackBuffer()` | 获取当前后台缓冲纹理 |
|
|
| `virtual void Present(uint32_t syncInterval = 1, uint32_t flags = 0)` | 呈现渲染结果 |
|
|
| `virtual void Resize(uint32_t width, uint32_t height)` | 调整交换链大小 |
|
|
|
|
### 全屏模式
|
|
|
|
| 方法 | 描述 |
|
|
|------|------|
|
|
| `virtual void SetFullscreen(bool fullscreen)` | 设置全屏模式 |
|
|
| `virtual bool IsFullscreen() const` | 检查是否全屏 |
|
|
|
|
### 窗口事件
|
|
|
|
| 方法 | 描述 |
|
|
|------|------|
|
|
| `virtual bool ShouldClose() const` | 检查是否应该关闭 |
|
|
| `virtual void SetShouldClose(bool shouldClose)` | 设置关闭标志 |
|
|
| `virtual void PollEvents()` | 处理窗口事件 |
|
|
|
|
### 其他
|
|
|
|
| 方法 | 描述 |
|
|
|------|------|
|
|
| `virtual void* GetNativeHandle()` | 获取原生 API 句柄 |
|
|
|
|
## 相关文档
|
|
|
|
```cpp
|
|
// 创建交换链
|
|
SwapChainDesc swapChainDesc;
|
|
swapChainDesc.width = 1280;
|
|
swapChainDesc.height = 720;
|
|
swapChainDesc.bufferCount = 2;
|
|
swapChainDesc.format = (uint32_t)Format::R8G8B8A8_UNorm;
|
|
swapChainDesc.refreshRate = 60;
|
|
swapChainDesc.sampleCount = 1;
|
|
swapChainDesc.sampleQuality = 0;
|
|
swapChainDesc.swapEffect = 0;
|
|
swapChainDesc.flags = 0;
|
|
|
|
RHISwapChain* swapChain = device->CreateSwapChain(swapChainDesc);
|
|
|
|
// 渲染循环
|
|
while (!swapChain->ShouldClose()) {
|
|
swapChain->PollEvents();
|
|
|
|
// 获取当前后台缓冲
|
|
RHITexture* backBuffer = swapChain->GetCurrentBackBuffer();
|
|
|
|
// 录制渲染命令
|
|
commandList->Reset();
|
|
commandList->SetRenderTargets(1, &backBuffer, nullptr);
|
|
commandList->ClearRenderTarget(backBuffer, clearColor);
|
|
// ... 更多渲染命令 ...
|
|
commandList->Close();
|
|
|
|
// 执行并呈现
|
|
commandQueue->ExecuteCommandLists(1, (void**)&commandList);
|
|
swapChain->Present(1, 0);
|
|
}
|
|
|
|
swapChain->Shutdown();
|
|
```
|
|
|
|
## 相关文档
|
|
|
|
- [RHITexture](./rhi-texture.md) - 纹理资源
|
|
- [RHICommandQueue](./rhi-command-queue.md) - 命令队列
|
|
- [RHIDevice](./rhi-device.md) - 创建设备
|