处理窗口最小化

还有一种特殊情况需要处理,这就是窗口的最小化。这时窗口的帧缓冲实际大小为0。在这里,我们设置应用程序在窗口最小化后停止渲染,直到窗口重新可见时重建交换链:

void recreateSwapChain() {
    int width = 0, height = 0;
    while (width == 0 || height == 0) {
        glfwGetFramebufferSize(window, &width, &height);
        glfwWaitEvents();
    }

    vkDeviceWaitIdle(device);

        ...
}

现在,我们已经将编写的程序修改得更加完善。下一章节,我们将使用顶点缓冲来替换我们之前在顶点着色器中硬编码的顶点数据。

本章节代码:

C++:

https://vulkan-tutorial.com/code/16_swap_chain_recreation.cpp

Vertex Shader:

https://vulkan-tutorial.com/code/09_shader_base.vert

Fragment Shader:

https://vulkan-tutorial.com/code/09_shader_base.frag