Spec-Zone.ru › Qt 6.1

Класс QVulkanWindowRenderer

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

Заголовок: #include <QVulkanWindowRenderer>
CMake: find_package(Qt6 COMPONENTS Gui REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Gui)
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

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

Приложения обычно наследуют как 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/qt-6.1/qvulkanwindowrenderer.html

Spec-Zone.ru

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