Мой опыт работы с OpenGL, и я пытаюсь изучить Vulkan. У меня небольшие проблемы с настройкой класса, чтобы я мог визуализировать несколько объектов с разными текстурами, буферами вершин и значениями UBO. Я столкнулся с проблемой, когда два моих изображения нарисованы, но они мерцают и чередуются. Я думаю, это должно быть из-за представления изображения после вызова отрисовки. Есть ли способ отложить презентацию изображения? Или объединить разные изображения перед презентацией? Мой код можно найти здесь, я надеюсь, что этого достаточно, чтобы кто-то понял, что я пытаюсь сделать: https://gitlab.com/cwink/Ingin/blob/master/ingin.cpp
Спасибо!
Но похоже, что вы правильно синхронизируете рендеринг и презентацию. Есть ли какие-либо сообщения об ошибках, создаваемые уровнями проверки?
Вы вызываете render
дважды за кадр. А render
вызывает vkQueuePresentKHR
, поэтому очевидно, что два ваших рендеринга чередуются.
Вы можете отложить презентацию, просто отложив вызов vkQueuePresentKHR
. Допустим, вы хотите показывать каждое изображение в течение ~ 1 секунды. Вы можете просто std::this_thread::sleep_for (std::chrono::seconds(1));
после каждого звонка render
. (Возможно, не лучший способ сделать это, но просто чтобы понять, в чем заключается ваша проблема.)
vkQueuePresentKHR
выполняет нет какое-либо «слияние» за вас. Обычно вы «объединяете изображения», просто помещая их в первую очередь в одну цепочку подкачки VkImage
, а затем представляя ее один раз.
рисование в том же vkImage в качестве отдельных проходов рендеринга не будет работать, потому что он очищает привязку цвета как операцию загрузки.
@ratchetfreak Вообще говоря. Я предполагаю, что то, что нужно сделать, чтобы это сработало, будет сделано. Например. имея для этого один проход рендеринга. Я надеюсь, что моего пятерки хватит, чтобы ОП отбросил некоторые из своих неправильных предположений и предубеждений.
@krOoze Спасибо за ответ, вы имеете в виду отдельный проход рендеринга только для очистки, а затем еще один без очистки для рисования объектов? Я также не уверен, что это сработает на 100%, поскольку я пытаюсь использовать MVP для перевода изображения в разные координаты, и кажется, что единообразные данные связаны с рисуемым изображением.
@CodyWink Я имел в виду один проход рендеринга для всего в приведенном выше комментарии в качестве примера. Но это деталь реализации; много способов добиться того же ...
Если вы считаете, что это проблема с презентацией, прочтите этот (и следующие) руководства: software.intel.com/en-us/articles/…