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

2.5 KiB

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 句柄

相关文档

// 创建交换链
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();

相关文档