Класс QQuickFramebufferObject
Класс QQuickFramebufferObject — это вспомогательный класс для интеграции рендеринга OpenGL с использованием объекта буфера кадра (FBO) в Qt Quick. Подробнее...
| Заголовок: | #include <QQuickFramebufferObject> |
| qmake: | QT += quick |
| С момента: | Qt 5.2 |
| Наследует: | QQuickItem |
Этот класс был представлен в Qt 5.2.
Типы публичного доступа
| класс | Renderer |
Свойства
- mirrorVertically : bool
- textureFollowsItemSize : bool
Функции публичного доступа
| QQuickFramebufferObject(QQuickItem *parent = nullptr) | |
| virtual QQuickFramebufferObject::Renderer * | createRenderer() const = 0 |
| bool | mirrorVertically() const |
| void | setMirrorVertically(bool enable) |
| void | setTextureFollowsItemSize(bool follows) |
| bool | textureFollowsItemSize() const |
Переопределённые функции публичного доступа
| virtual bool | isTextureProvider() const override |
| virtual void | releaseResources() override |
| virtual QSGTextureProvider * | textureProvider() const override |
Сигналы
| void | mirrorVerticallyChanged(bool) |
| void | textureFollowsItemSizeChanged(bool) |
Подробное описание
На большинстве платформ рендеринг выполняется в отдельном потоке. По этой причине класс QQuickFramebufferObject обеспечивает чёткое разделение между реализацией элемента и рендерингом FBO. Вся логика элемента, такие как свойства и вспомогательные функции для QML, должны находиться в подклассе QQuickFramebufferObject. Всё, что связано с рендерингом, должно располагаться в классе QQuickFramebufferObject::Renderer.
Предупреждение: Этот класс функционирует только при рендеринге Qt Quick с помощью OpenGL, либо непосредственно, либо через путь рендеринга на основе RHI. Он несовместим с другими бэкендами RHI, такими как Vulkan или Metal.
Для предотвращения гонок и проблем с чтением/записью из двух потоков важно, чтобы рендерер и элемент никогда не считывали или не записывали общие переменные. Общение между элементом и рендерером должно происходить главным образом через функцию QQuickFramebufferObject::Renderer::synchronize(). Эта функция будет вызываться в потоке рендеринга, в то время как поток пользовательского интерфейса заблокирован.
Для связи между элементом и рендерером также возможно использование очереди соединений или событий.
И рендерер, и FBO управляются памятью внутри класса.
Для рендеринга в FBO пользователь должен создать подкласс класса Renderer и переопределить его функцию Renderer::render(). Подкласс Renderer возвращается из функции createRenderer().
Размер FBO по умолчанию соответствует размеру элемента. Если предпочтительнее фиксированный размер, установите textureFollowsItemSize в false и верните текстуру по вашему выбору из QQuickFramebufferObject::Renderer::createFramebufferObject().
Начиная с Qt 5.4, класс QQuickFramebufferObject является поставщиком текстуры и может быть использован непосредственно в ShaderEffects и других классах, использующих поставщиков текстур.
См. также Графика сцены - рендеринг FBO и Графика сцены и рендеринг.
Документация свойств
mirrorVertically : bool
Это свойство управляет тем, следует ли отражать размер содержимого FBO по вертикали при рисовании. Это позволяет легко интегрировать сторонний код рендеринга, который не соответствует стандартным ожиданиям.
Значение по умолчанию — false.
Это свойство было добавлено в Qt 5.6.
Функции доступа:
| bool | mirrorVertically() const |
| void | setMirrorVertically(bool enable) |
Сигнал уведомления:
| void | mirrorVerticallyChanged(bool) |
textureFollowsItemSize : bool
Это свойство управляет тем, следует ли размер текстуры FBO размеру элемента QQuickFramebufferObject. Когда это свойство ложно, FBO создается один раз при первом отображении. Если оно установлено в true, FBO будет пересоздаваться каждый раз, когда изменяются размеры элемента.
Значение по умолчанию — true.
Функции доступа:
| bool | textureFollowsItemSize() const |
| void | setTextureFollowsItemSize(bool follows) |
Сигнал уведомления:
| void | textureFollowsItemSizeChanged(bool) |
Документация функций-членов
QQuickFramebufferObject::QQuickFramebufferObject(QQuickItem *parent = nullptr)
Конструирует новый QQuickFramebufferObject с родителем parent.
[pure virtual] QQuickFramebufferObject::Renderer *QQuickFramebufferObject::createRenderer() const
Переопределите эту функцию для создания рендерера, используемого для рендеринга в FBO.
Эта функция будет вызвана в потоке рендеринга, в то время как поток пользовательского интерфейса заблокирован.
[override virtual] bool QQuickFramebufferObject::isTextureProvider() const
Переопределяет: QQuickItem::isTextureProvider() const.
[override virtual] void QQuickFramebufferObject::releaseResources()
Переопределяет: QQuickItem::releaseResources().
[override virtual] QSGTextureProvider *QQuickFramebufferObject::textureProvider() const
Переопределяет: QQuickItem::textureProvider() const.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.15/qquickframebufferobject.html