Files
XCEngine/docs/api/rhi/rhi-swap-chain.md

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) - 创建设备