Класс QQuickFramebufferObject
Класс QQuickFramebufferObject — это вспомогательный класс для интеграции рендеринга OpenGL с помощью объекта буфера кадра (FBO) в Qt Quick. Подробнее...
| Заголовок: | #include <QQuickFramebufferObject> |
| CMake: | find_package(Qt6 COMPONENTS Quick REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Quick) |
| qmake: | QT += quick |
| С тех пор: | Qt 5.2 |
| Наследует: | QQuickItem |
Открытые типы
| класс | 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) |
Подробное описание
Предупреждение: Этот класс функционален только при рендеринге Qt Quick через OpenGL. Он не совместим с другими графическими API, такими как Vulkan или Metal. Он должен рассматриваться как устаревший класс, который присутствует только для обеспечения работы приложений Qt 5 без разрывов совместимости исходного кода, пока они привязаны к OpenGL.
На большинстве платформ рендеринг будет выполняться в отдельном потоке. По этой причине класс QQuickFramebufferObject обеспечивает строгое разделение между реализацией элемента и рендерингом FBO. Вся логика элемента, такая как свойства и вспомогательные функции, связанные с пользовательским интерфейсом, необходимые QML, должны располагаться в подклассе класса QQuickFramebufferObject. Всё, что относится к рендерингу, должно находиться в классе QQuickFramebufferObject::Renderer.
Чтобы избежать гонок и проблем с чтением/записью из двух потоков, важно, чтобы рендерер и элемент никогда не читали или не записывали общие переменные. Обмен данными между элементом и рендерером должен происходить в основном через функцию QQuickFramebufferObject::Renderer::synchronize(). Эта функция будет вызвана в потоке рендеринга, пока поток пользовательского интерфейса заблокирован.
Для обмена данными между элементом и рендерером также возможно использование очередей соединений или событий.
И рендерер, и FBO управляются памятью внутри.
Для рендеринга в FBO пользователь должен создать подкласс класса Renderer и переопределить его функцию Renderer::render(). Подкласс Renderer возвращается из createRenderer().
Размер FBO по умолчанию будет адаптироваться к размеру элемента. Если предпочтительнее фиксированный размер, установите textureFollowsItemSize в false и верните нужную текстуру из QQuickFramebufferObject::Renderer::createFramebufferObject().
Начиная с Qt 5.4, класс QQuickFramebufferObject является поставщиком текстур и может использоваться непосредственно в ShaderEffects и других классах, использующих поставщиков текстур.
См. также Граф сцены — Рендеринг FBO и Граф сцены и рендеринг.
Документация по свойствам
[since 5.6] mirrorVertically : bool
Это свойство управляет тем, будет ли размер содержимого FBO зеркально отображаться по вертикали при отрисовке. Это позволяет легко интегрировать сторонний код рендеринга, который не соответствует стандартным ожиданиям.
Значение по умолчанию — false.
Это свойство было добавлено в Qt 5.6.
Функции доступа:
| bool | mirrorVertically() const |
| void | setMirrorVertically(bool enable) |
Сигнал уведомления:
| void | mirrorVerticallyChanged(bool) |
textureFollowsItemSize : bool
Это свойство управляет тем, будет ли размер текстуры FBO следовать размерам элемента QQuickFramebufferObject. Когда это свойство ложно, FBO создается один раз при первом отображении. Если оно установлено в истинное значение, 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-6.1/qquickframebufferobject.html