Класс QVulkanWindowRenderer
Класс QVulkanWindowRenderer используется для реализации специфичной для приложения логики отрисовки для QVulkanWindow. Подробнее...
| Заголовок: | #include <QVulkanWindowRenderer> |
| qmake: | QT += gui |
| С тех пор: | Qt 5.10 |
Этот класс был представлен в Qt 5.10.
Открытые функции
| virtual | ~QVulkanWindowRenderer() |
| virtual void | initResources() |
| virtual void | initSwapChainResources() |
| virtual void | logicalDeviceLost() |
| virtual void | physicalDeviceLost() |
| virtual void | preInitResources() |
| virtual void | releaseResources() |
| virtual void | releaseSwapChainResources() |
Подробное описание
Приложения обычно наследуют как QVulkanWindow, так и QVulkanWindowRenderer. Первый позволяет обрабатывать события, например, ввод, а второй — реализовывать управление ресурсами Vulkan и построение командных буферов, составляющих отрисовку приложения.
Помимо обработки событий, подкласс QVulkanWindow отвечает за предоставление реализации для QVulkanWindow::createRenderer() также. Именно здесь происходит подключение окна и рендерера. Типичная реализация просто создаст новый экземпляр подкласса QVulkanWindowRenderer.
Документация по членам-функциям
[virtual] QVulkanWindowRenderer::~QVulkanWindowRenderer()
Виртуальный деструктор.
[virtual] void QVulkanWindowRenderer::initResources()
Эта виртуальная функция вызывается, когда пришло время создать графические ресурсы рендерера.
В зависимости от флага QVulkanWindow::PersistentResources, ситуаций потери устройства и т. п., эта функция может вызываться более одного раза в течение жизненного цикла QVulkanWindow. Однако последующие вызовы всегда предваряются вызовом releaseResources().
Доступ к таким элементам, как device(), graphicsQueue() и graphicsCommandPool(), гарантируется только внутри этой функции и после нее, до вызова releaseResources().
Реализация по умолчанию пуста.
[virtual] void QVulkanWindowRenderer::initSwapChainResources()
Эта виртуальная функция вызывается, когда можно выполнить инициализацию, связанную со swapchain, framebuffer или renderpass. Swapchain и связанные ресурсы сбрасываются и затем пересоздаются в ответ на события изменения размера окна, и поэтому пара вызовов initResources() и releaseResources() может иметь несколько вызовов initSwapChainResources() и releaseSwapChainResources() между ними.
Доступ к таким элементам, как QVulkanWindow::swapChainImageSize(), гарантируется только внутри этой функции и после нее, до вызова releaseSwapChainResources().
Это также место, где следует производить вычисления, зависящие от размера (например, проекционная матрица), поскольку эта функция вызывается при каждом изменении размера.
Реализация по умолчанию пуста.
[virtual] void QVulkanWindowRenderer::logicalDeviceLost()
Эта виртуальная функция вызывается, когда логическое устройство (VkDevice) потеряно, что означает, что какая-то операция завершилась неудачно с VK_ERROR_DEVICE_LOST.
Реализация по умолчанию пустая.
Обычно нет необходимости выполнять какие-либо особые действия в этой функции. QVulkanWindow автоматически освободит все ресурсы (вызывая releaseSwapChainResources() и releaseResources() по мере необходимости) и попытается повторно инициализировать, получив новое устройство. Если физическое устройство также было потеряно, эта попытка повторной инициализации может привести к вызову physicalDeviceLost().
См. также physicalDeviceLost().
[virtual] void QVulkanWindowRenderer::physicalDeviceLost()
Эта виртуальная функция вызывается, когда физическое устройство потеряно, то есть создание логического устройства завершается неудачно с VK_ERROR_DEVICE_LOST.
Реализация по умолчанию пустая.
Обычно нет необходимости выполнять какие-либо особые действия в этой функции, так как QVulkanWindow автоматически повторит попытку инициализации через определённое время.
См. также logicalDeviceLost().
[virtual] void QVulkanWindowRenderer::preInitResources()
Эта виртуальная функция вызывается непосредственно перед началом графической инициализации, которая в конечном итоге приведёт к вызову initResources().
Как правило, нет необходимости переопределять эту функцию. Однако в некоторых случаях требуется принять решения, основанные как на физическом устройстве, так и на поверхности. Это обычно нельзя выполнить до того, как QVulkanWindow станет видимым, так как поверхность Vulkan недоступна на этом этапе.
Вместо этого приложения могут переопределить эту функцию. Здесь и QVulkanWindow::physicalDevice(), и QVulkanInstance::surfaceForWindow() функциональны, но дальнейшая инициализация логического устройства ещё не выполнена.
Реализация по умолчанию пустая.
[virtual] void QVulkanWindowRenderer::releaseResources()
Эта виртуальная функция вызывается, когда графические ресурсы рендерера должны быть освобождены.
Реализация должна быть подготовлена к тому, что за вызовом этой функции может последовать вызов initResources() в более поздний момент.
QVulkanWindow заботится о том, чтобы устройство стало бездействующим до и после вызова этой функции.
Реализация по умолчанию пустая.
[virtual] void QVulkanWindowRenderer::releaseSwapChainResources()
Эта виртуальная функция вызывается, когда необходимо освободить ресурсы, связанные с swapchain, framebuffer или renderpass.
Реализация должна быть готова к тому, что вызов этой функции может последовать вызов initSwapChainResources() в более поздний момент.
QVulkanWindow позаботится о том, чтобы устройство стало бездействующим до и после вызова этой функции.
Реализация по умолчанию пустая.
Примечание: Это последнее место для действий со всеми графическими ресурсами, целыми и невредимыми, прежде чем QVulkanWindow начнёт их освобождать. Поэтому крайне важно, чтобы реализации с асинхронным, потенциально многопоточным startNextFrame(), выполняли блокирующее ожидание и вызывали QVulkanWindow::frameReady() перед возвратом из этой функции в случае наличия ожидающей отправки кадра.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.14/qvulkanwindowrenderer.html