Класс 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, фреймбуфером или 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, фреймбуфером или 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.13/qvulkanwindowrenderer.html