在 Vulkan 中渲染具有不同纹理、顶点缓冲区和统一值的多个对象

Rendering multiple objects with different textures, vertex buffers, and uniform values in Vulkan

我的背景是 OpenGL,我正在尝试学习 Vulkan。我在设置 class 时遇到了一些麻烦,因此我可以渲染具有不同纹理、顶点缓冲区和 UBO 值的多个对象。我 运行 遇到了一个问题,我的两个图像被绘制,但它们闪烁和交替。我认为这一定是由于在绘制调用之后呈现图像。有没有办法延迟图像的呈现?或者在呈现之前将不同的图像合并在一起?我的代码可以在这里找到,我希望这足以让别人了解我正在尝试做什么:https://gitlab.com/cwink/Ingin/blob/master/ingin.cpp

谢谢!

您每帧调用 render 两次。 render调用vkQueuePresentKHR,所以很明显你的两个效果图是交替的。

您只需延迟 vkQueuePresentKHR 调用即可延迟演示。假设您要显示每张图像约 1 秒。您可以在每次 render 调用后简单地 std::this_thread::sleep_for (std::chrono::seconds(1));。 (可能不是最好的方法,但只是为了了解您的问题所在。)

vkQueuePresentKHR 不会 为您做任何类型的 "merging"。通常,您 "merge images" 首先将它们简单地绘制到同一个交换链 VkImage 中,然后呈现一次。