Spec-Zone.ru › Qt 5.11

Класс QVulkanWindowRenderer

Класс QVulkanWindowRenderer используется для реализации специфичной для приложения логики отрисовки для QVulkanWindow. Подробнее...

Заголовок: #include <QVulkanWindowRenderer>
qmake: QT += gui
С тех пор: 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()
virtual void startNextFrame() = 0

Подробное описание

Класс QVulkanWindowRenderer используется для реализации специфичной для приложения логики отрисовки для QVulkanWindow.

Приложения обычно наследуют как 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() перед возвращением из этой функции в случае наличия ожидающего отправления кадра.

[pure virtual] void QVulkanWindowRenderer::startNextFrame()

Эта виртуальная функция вызывается, когда вызовы отрисовки для следующего кадра должны быть добавлены в буфер команд.

Каждый вызов этой функции должен быть последовать за вызовом QVulkanWindow::frameReady(). Отсутствие этого приведёт к остановке цикла отрисовки. Вызов также может быть выполнен позже, после возвращения из этой функции. Это означает, что можно запустить асинхронную работу и обновить буфер команд, а также уведомить QVulkanWindow, когда эта работа завершится.

END_OF_DOCUMENT_MARKER ```

Все ресурсы Vulkan инициализированы и готовы к использованию при вызове этой функции. Текущий фреймбуфер и основной командный буфер могут быть получены с помощью QVulkanWindow::currentFramebuffer() и QVulkanWindow::currentCommandBuffer(). Логическое устройство и активная графическая очередь доступны через QVulkanWindow::device() и QVulkanWindow::graphicsQueue(). Реализации могут создавать дополнительные командные буферы из пула, возвращаемого QVulkanWindow::graphicsCommandPool(). Для удобства индекс типа памяти, видимой для хоста, и локальной для устройства, доступен через QVulkanWindow::hostVisibleMemoryIndex() и QVulkanWindow::deviceLocalMemoryIndex(). Ко всем этим доступам безопасно обращаться из любого потока.

См. также QVulkanWindow::frameReady() и QVulkanWindow.

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/archives/qt-5.11/qvulkanwindowrenderer.html

Spec-Zone.ru

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