Класс QVulkanWindowRenderer
Класс QVulkanWindowRenderer используется для реализации специфичной для приложения логики отрисовки для QVulkanWindow. Подробнее...
| Заголовок: | #include <QVulkanWindowRenderer> |
| qmake: | QT += gui |
| С момента: | Qt 5.10 |
Этот класс был представлен в Qt 5.10.
Открытые функции
| виртуальный | ~QVulkanWindowRenderer() |
| виртуальный void | initResources() |
| виртуальный void | initSwapChainResources() |
| виртуальный void | logicalDeviceLost() |
| виртуальный void | physicalDeviceLost() |
| виртуальный void | preInitResources() |
| виртуальный void | releaseResources() |
| виртуальный 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.15/qvulkanwindowrenderer.html