C++ Vulkan swapchain image_index vs current_frame



我是vulkan的新手,并遵循vulkan教程。在关于交换链和多帧飞行(frames_in_flight)的章节中,有一些东西我不明白。

变量imageIndex由函数vkAcquireNextImageKHR

设置
uint32_t imageIndex;
vkAcquireNextImageKHR(device, swapChain, UINT64_MAX, imageAvailableSemaphores[currentFrame], VK_NULL_HANDLE, &imageIndex);

变量currentFrame每一帧递增

currentFrame = (currentFrame + 1) % MAX_FRAMES_IN_FLIGHT;

imageIndex变量仅用于VkPresentInfoKHR结构体的pImageIndices字段和std::vector<VkFramebuffer>的索引。

所有其他向量,例如VkFenceVkCommandBuffer,都以currentFrame变量为索引。

imageIndexcurrentFrame到底有什么区别,为什么我需要跟踪价值?

区别是:

vkAcquireNextImageKHR::imageIndex是"随机"它可以返回任意顺序的任意数字。

currentFrame严格按循环方式更改。此外,max-count可能与交换链图像计数不同。

您将使用vkAcquireNextImageKHR::imageIndex的东西绑定到一个特定的交换链图像。你可以将currentFrame用于与帧序列相关的事物(例如奇数帧vs偶数帧)。

最新更新