Класс Renderer
(QQuickFramebufferObject::Renderer)| Заголовок: | #include <Renderer> |
| qmake: | QT += quick |
| С тех пор: | Qt 5.2 |
Защищённые функции
| Renderer() | |
| virtual | ~Renderer() |
| virtual QOpenGLFramebufferObject * | createFramebufferObject(const QSize &size) |
| QOpenGLFramebufferObject * | framebufferObject() const |
| void | invalidateFramebufferObject() |
| virtual void | render() = 0 |
| virtual void | synchronize(QQuickFramebufferObject *item) |
| void | update() |
Подробное описание
Класс QQuickFramebufferObject::Renderer используется для реализации логики отрисовки объекта QQuickFramebufferObject.
Документация по функциям-членам
[protected] Renderer::Renderer()
Создаёт новый рендерер.
Эта функция вызывается во время синхронизации графа сцены, когда поток GUI заблокирован.
[virtual protected] Renderer::~Renderer()
Рендерер автоматически удаляется, когда ресурсы графа сцены для элемента QQuickFramebufferObject очищаются.
Эта функция вызывается в потоке отрисовки.
[virtual protected] QOpenGLFramebufferObject *Renderer::createFramebufferObject(const QSize &size)
Эта функция вызывается, когда требуется новый FBO. Это происходит в первом кадре. Если QQuickFramebufferObject::textureFollowsItemSize установлено в значение true, она вызывается каждый раз, когда изменяются размеры элемента.
Возвращаемый FBO может иметь любые привязки. Если QOpenGLFramebufferObjectFormat указывает, что FBO должен быть многообразным, внутренняя реализация Renderer выделит второй FBO и скопирует многообразный FBO в FBO, используемый для отображения текстуры.
Примечание: У некоторых устройств возникают проблемы с небольшими размерами FBO. size учитывает это, поэтому будьте осторожны, когда переопределяете размер фиксированным размером. Минимальный размер 64x64 всегда должен работать.
Примечание: size учитывает коэффициент масштабирования пикселей устройства, то есть он уже умножен на правильный коэффициент масштабирования. При перемещении окна, содержащего элемент QQuickFramebufferObject, на экран с другими настройками FBO автоматически пересоздаётся, и эта функция вызывается с правильным размером.
[protected] QOpenGLFramebufferObject *Renderer::framebufferObject() const
Возвращает объект буфера кадра, в который в настоящее время осуществляется отрисовка.
[protected] void Renderer::invalidateFramebufferObject()
Вызовите эту функцию во время synchronize(), чтобы сделать недействительным текущий FBO. Это приведёт к созданию нового FBO с помощью createFramebufferObject().
[pure virtual protected] void Renderer::render()
Эта функция вызывается, когда FBO должен быть отрисован. В этот момент буфер кадра привязывается, и glViewport настроен так, чтобы соответствовать размеру FBO.
FBO будет автоматически отвязан после возвращения из функции.
Примечание: Не предполагайте, что состояние OpenGL по умолчанию установлено при вызове этой функции или что оно сохраняется между вызовами. Как рендерер Qt Quick, так и пользовательский код рендеринга используют один и тот же контекст OpenGL. Это означает, что состояние могло быть изменено Quick до вызова этой функции.
Примечание: Рекомендуется вызывать QQuickWindow::resetOpenGLState() перед возвращением. Это сбрасывает состояние OpenGL, используемое рендерером Qt Quick, и таким образом предотвращает вмешательство изменений состояния, внесённых кодом рендеринга в этой функции.
[virtual protected] void Renderer::synchronize(QQuickFramebufferObject *item)
Эта функция вызывается в результате QQuickFramebufferObject::update().
Используйте эту функцию для обновления рендерера изменениями, произошедшими в элементе. item — это элемент, который инициировал этот рендерер. Функция вызывается один раз до создания FBO.
Например, если элемент имеет свойство цвета, которое управляется QML, необходимо вызвать QQuickFramebufferObject::update() и использовать synchronize(), чтобы скопировать новое значение цвета в рендерер, чтобы оно могло быть использовано для отрисовки следующего кадра.
Эта функция — единственное место, где рендерер и элемент могут безопасно читать и записывать члены друг друга.
[protected] void Renderer::update()
Вызовите эту функцию, когда FBO должен быть отрисован снова.
Эта функция может быть вызвана из render() для принудительной повторной отрисовки FBO перед следующим кадром.
Примечание: Эта функция должна использоваться внутри рендерера. Для обновления элемента в потоке GUI используйте QQuickFramebufferObject::update().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/archives/qt-5.6/qquickframebufferobject-renderer.html