0
votes

My background is in OpenGL and I'm attempting to learn Vulkan. I'm having a little trouble with setting up a class so I can render multiple objects with different textures, vertex buffers, and UBO values. I've run into an issue where two of my images are drawn, but they flicker and alternate. I'm thinking it must be due to presenting the image after the draw call. Is there a way to delay presentation of an image? Or merge different images together before presenting? My code can be found here, I'm hoping it is enough for someone to get an idea of what I'm trying to do: https://gitlab.com/cwink/Ingin/blob/master/ingin.cpp

Thanks!

1
If You think it's a problem with presentation, then read this (and the following) tutorials: software.intel.com/en-us/articles/… - Ekzuzy
But it seems that You synchronize rendering and presentation correctly. Is there any error message generated by Validation Layers? - Ekzuzy

1 Answers

1
votes

You call render twice per frame. And render calls vkQueuePresentKHR, so obviously the two renderings of yours alternate.

You can delay presentation simply by delaying vkQueuePresentKHR call. Let's say you want to show each image for ~1 s. You can simply std::this_thread::sleep_for (std::chrono::seconds(1)); after each render call. (Possibly not the bestest way to do it, but just to get the idea where your problem lies.)

vkQueuePresentKHR does not do any kind of "merging" for you. Typically you "merge images" by simply drawing them into the same swapchain VkImage in the first place, and then present it once.