Класс Renderer
Класс Renderer объявлен в классе QQuickFramebufferObject.Этот класс был представлен в 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
Возвращает объект framebuffer, в который в данный момент происходит отрисовка.
[protected] void Renderer::invalidateFramebufferObject()
Вызовите эту функцию во время synchronize(), чтобы сделать текущий FBO недействительным. Это приведёт к созданию нового FBO с помощью createFramebufferObject().
[pure virtual protected] void Renderer::render()
Эта функция вызывается, когда FBO должен быть отрисован. В этот момент framebuffer привязан, и 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/qt-5.14/qquickframebufferobject-renderer.html