Класс QQuickGraphicsConfiguration
Класс QQuickGraphicsConfiguration представляет собой контейнер для низкоуровневых настроек графики, которые могут повлиять на то, как базовая графическая API, такая как Vulkan, инициализируется графической подсистемой Qt Quick. Он также может управлять определёнными аспектами рендеринга сцены. Подробнее...
| Заголовок: | #include <QQuickGraphicsConfiguration> |
| CMake: | find_package(Qt6 COMPONENTS Quick REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Quick) |
| qmake: | QT += quick |
| С тех пор: | Qt 6.0 |
Открытые функции
| QQuickGraphicsConfiguration() | |
| ~QQuickGraphicsConfiguration() | |
| QByteArrayList | deviceExtensions() const |
| bool | isDepthBufferEnabledFor2D() const |
| void | setDepthBufferFor2D(bool enable) |
| void | setDeviceExtensions(const QByteArrayList &extensions) |
Статические открытые члены
| QByteArrayList | preferredInstanceExtensions() |
Подробное описание
При создании и отображении QQuickWindow, использующего Vulkan для рендеринга, экземпляр Vulkan (VkInstance), физическое устройство (VkPhysicalDevice), устройство (VkDevice) и связанные объекты (очереди, пулы) инициализируются через API Vulkan. То же самое в основном верно при использовании QQuickRenderControl для перенаправления рендеринга в пользовательскую целевую область, например, в текстуру. В то время как создание QVulkanInstance находится под управлением приложения, инициализация других графических объектов происходит таким же образом в QQuickRenderControl::initialize() как и при использовании QQuickWindow на экране.
Для большинства приложений дополнительные настройки не требуются, потому что Qt Quick предоставляет разумные значения по умолчанию для многих низкоуровневых настроек графики, например, для включения расширений устройства.
Однако этого всегда может быть недостаточно. В сложных случаях, когда интегрируется прямой контент Vulkan или другой графической API или когда интегрируется с внешним 3D или VR движком, таким как OpenXR, приложение захочет указать свои собственные настройки в отношении таких деталей, как включение расширений устройств.
Это позволяет сделать этот класс. Он позволяет указать, например, список расширений устройства, который затем используется графической подсистемой при использовании Vulkan или графических API, где этот принцип применим. В случаях, где какие-то понятия не применимы, соответствующие настройки просто игнорируются.
Другая группа настроек связана с рендерером графической подсистемы. В некоторых случаях приложения могут захотеть управлять определённым поведением, например, использовать буфер глубины при рендеринге 2D контента. В Qt 5 такие настройки либо вообще не были управляемы, либо управлялись через переменные окружения. В Qt 6 QQuickGraphicsConfiguration предоставляет новое место для этих настроек, сохраняя поддержку устаревших переменных окружения, где это возможно.
Примечание: Указание QQuickGraphicsConfiguration для QQuickWindow должно происходить достаточно рано, до первой инициализации графической подсистемы для этого окна. В случае окон на экране это означает, что вызов должен быть сделан до вызова show() для QQuickWindow или QQuickView. С QQuickRenderControl конфигурация должна быть завершена до вызова initialize().
См. также QQuickWindow::setGraphicsConfiguration(), QQuickWindow и QQuickRenderControl.
Документация функций-членов
QQuickGraphicsConfiguration::QQuickGraphicsConfiguration()
Создаёт QQuickGraphicsConfiguration по умолчанию, который не указывает никаких дополнительных настроек для обработки графической подсистемой.
QQuickGraphicsConfiguration::~QQuickGraphicsConfiguration()
Деструктор.
QByteArrayList QQuickGraphicsConfiguration::deviceExtensions() const
Возвращает список запрошенных дополнительных расширений устройства.
См. также setDeviceExtensions().
bool QQuickGraphicsConfiguration::isDepthBufferEnabledFor2D() const
Возвращает true, если использование буфера глубины включено для 2D контента.
По умолчанию значение равно true, если не установлена переменная окружения QSG_NO_DEPTH_BUFFER.
[static, since 6.1] QByteArrayList QQuickGraphicsConfiguration::preferredInstanceExtensions()
Возвращает список расширений экземпляра Vulkan, которые Qt Quick предпочитает включить в VkInstance.
В большинстве случаев Qt Quick отвечает за создание QVulkanInstance. Эта функция тогда не актуальна. С другой стороны, при использовании QQuickRenderControl в сочетании с рендерингом на основе Vulkan, приложение должно создать QVulkanInstance и связать его с (внеэкранным) QQuickWindow. В этом случае ожидается, что приложение запросит список расширений экземпляра для включения и передаст их в QVulkanInstance::setExtensions() перед вызовом QVulkanInstance::create().
Эта функция была добавлена в Qt 6.1.
void QQuickGraphicsConfiguration::setDepthBufferFor2D(bool enable)
Устанавливает использование буфера глубины для 2D контента в enable. При отключении, графическая подсистема Qt Quick никогда не записывает в буфер глубины.
По умолчанию значение равно true, если не установлена переменная окружения QSG_NO_DEPTH_BUFFER.
Значение true по умолчанию является наиболее оптимальным для подавляющего большинства сцен. Отключение записи в буфер глубины снижает эффективность группировки сцены.
Однако существуют случаи, когда разрешение записи 2D контента в буфер глубины нежелательно. Рассмотрим 3D сцену как «наложение» поверх 2D сцены, отрисованную с помощью Qt Quick 3D с помощью View3D с renderMode, установленным в Overlay. В этом случае заполнение буфера глубины 2D контентом может привести к неожиданным результатам. Это происходит потому, что способ, которым рендерер 2D графической подсистемы генерирует и обрабатывает значения глубины, необязательно совместим с тем, как работает 3D сцена. Это может привести к конфликтам значений глубины, столкновениям и неожиданным ошибкам проверки глубины. Поэтому надёжный подход заключается в вызове этой функции со значением enable, установленным в false, и отключении записи в буфер глубины для 2D контента в QQuickWindow.
Примечание: Этот флаг не полностью идентичен установке переменной окружения QSG_NO_DEPTH_BUFFER. Этот флаг не контролирует наличие буферов глубины и трафарета. Он, скорее, относится к конвейеру рендеринга. Чтобы полностью запретить наличие прикреплений глубины/трафарета, установите QSG_NO_DEPTH_BUFFER и QSG_NO_STENCIL_BUFFER. Однако имейте в виду, что такое QQuickWindow и любые слои элементов в нём могут быть несовместимы с элементами, такими как View3D с определёнными режимами работы, потому что 3D контент требует буфера глубины. Вызов этой функции всегда безопасен, но может означать, что ресурсы, такие как буферы глубины, создаются, даже если они не активно используются.
void QQuickGraphicsConfiguration::setDeviceExtensions(const QByteArrayList &extensions)
Устанавливает список дополнительных extensions для включения на графическом устройстве (например, VkDevice).
При отрисовке с графическим API, где это понятие не применимо, extensions будут проигнорированы.
Примечание: Список определяет дополнительные расширения. Qt Quick всегда включает расширения, необходимые для графической подсистемы.
См. также deviceExtensions().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.1/qquickgraphicsconfiguration.html