目录
一、实现交换链重建函数
1.1 分离资源清理逻辑
1.2 关于渲染通道的说明
1.3 无需修改交换链范围
1.4 进阶优化:无中断重建
二、检测交换链失效状态
2.1 处理图像获取阶段的失效
2.2 处理图像展示阶段的失效
2.3 异常捕获(Vulkan-Hpp 版本)
三、修复死锁问题
3.1 解决方案:延迟重置栅栏
四、显式处理窗口尺寸调整
4.1 添加状态标记
4.2 设置 GLFW 回调函数
4.3 实现回调函数
4.4 在重建函数中处理窗口最小化
五、总结
目前我们的程序已经能够成功绘制三角形,但它还无法妥善处理一些特殊场景 —— 当窗口表面发生变化(例如窗口尺寸调整)时,原有的交换链会变得不再兼容。此时我们必须捕获这类事件,并执行交换链重建操作。
一、实现交换链重建函数
新建一个 recreateSwapChain 函数,用于调用交换链及其依赖资源的创建函数。交换链的依赖资源包括图像视图,因为图像视图是直接基于交换链图像创建的。
cpp
运行
void recreateSwapChain() { // 等待设备空闲:避免操作正在被使用的资源 device.waitIdle(); // 清理旧资源 cleanupSwapChain(); // 重建交换链与图像视图 createSwapChain(); createImageViews(); }