我是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>
的索引。
所有其他向量,例如VkFence
或VkCommandBuffer
,都以currentFrame
变量为索引。
imageIndex
和currentFrame
到底有什么区别,为什么我需要跟踪价值?
区别是:
vkAcquireNextImageKHR::imageIndex
是"随机"它可以返回任意顺序的任意数字。
currentFrame
严格按循环方式更改。此外,max-count可能与交换链图像计数不同。
您将使用vkAcquireNextImageKHR::imageIndex
的东西绑定到一个特定的交换链图像。你可以将currentFrame
用于与帧序列相关的事物(例如奇数帧vs偶数帧)。