Spec-Zone.ru › Qt 5.14

Класс 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API