Класс QOffscreenSurface
Класс QOffscreenSurface представляет собой поверхность вне экрана в базовой платформе. Подробнее...
| Заголовок: | #include <QOffscreenSurface> |
| qmake: | QT += gui |
| С тех пор: | Qt 5.1 |
| Наследует: | QObject и QSurface |
Этот класс был введён в Qt 5.1.
Открытые функции
| QOffscreenSurface(QScreen *targetScreen = nullptr) | |
| QOffscreenSurface(QScreen *targetScreen, QObject *parent) | |
| virtual | ~QOffscreenSurface() |
| void | create() |
| void | destroy() |
| bool | isValid() const |
| void * | nativeHandle() const |
| QSurfaceFormat | requestedFormat() const |
| QScreen * | screen() const |
| void | setFormat(const QSurfaceFormat &format) |
| void | setNativeHandle(void *handle) |
| void | setScreen(QScreen *newScreen) |
Переопределённые открытые функции
| virtual QSurfaceFormat | format() const override |
| virtual QSize | size() const override |
| virtual QSurface::SurfaceType | surfaceType() const override |
Сигналы
| void | screenChanged(QScreen *screen) |
Подробное описание
QOffscreenSurface предназначен для использования с QOpenGLContext, чтобы позволить рендеринг с OpenGL в произвольном потоке без необходимости создания QWindow.
Хотя поверхность, как правило, может быть отображена, пиксели поверхности недоступны. QOffscreenSurface следует использовать только для создания ресурсов OpenGL, таких как текстуры или буферы кадра.
Приложение обычно использует QOffscreenSurface для выполнения некоторых трудоёмких задач в отдельном потоке, чтобы избежать блокировки основного потока рендеринга. Ресурсы, созданные в контексте QOffscreenSurface, могут быть объединены с основным контекстом OpenGL. Некоторые распространённые варианты использования - асинхронная загрузка текстур или рендеринг в QOpenGLFramebufferObject.
Реализация поверхности вне экрана зависит от базовой платформы, но обычно используется буфер пикселей (pbuffer). Если платформа не реализует или не поддерживает поверхности вне экрана, QOffscreenSurface будет использовать невидимый QWindow внутри.
Примечание: Из-за того, что QOffscreenSurface поддерживается QWindow на некоторых платформах, приложения с кроссплатформенной поддержкой должны убедиться, что create() вызывается только в основном (GUI) потоке. Затем QOffscreenSurface можно безопасно использовать с makeCurrent() в других потоках, но инициализация и уничтожение всегда должны происходить в основном (GUI) потоке.
Примечание: Чтобы создать поверхность вне экрана, гарантированно совместимую с данным контекстом и окном, убедитесь, что формат установлен на фактический формат контекста или окна, то есть QSurfaceFormat, возвращаемый из QOpenGLContext::format() или QWindow::format() после создания контекста или окна. Передача формата, возвращаемого из QWindow::requestedFormat() в setFormat() может привести к несовместимой поверхности вне экрана, так как интерфейс базовой системы окон может предложить различные конфигурации для оконных и pbuffer поверхностей.
Примечание: Некоторые платформы могут использовать расширение контекста без поверхности (например, EGL_KHR_surfaceless_context), если оно доступно. В этом случае не будет никакой базовой нативной поверхности. Для вариантов использования QOffscreenSurface (рендеринг в FBO, загрузка текстур) это не проблема.
Документация по функциям-членам
QOffscreenSurface::QOffscreenSurface(QScreen *targetScreen = nullptr)
Создаёт поверхность вне экрана для targetScreen.
Базовая поверхность платформы не создаётся до вызова create().
См. также setScreen() и create().
QOffscreenSurface::QOffscreenSurface(QScreen *targetScreen, QObject *parent)
Создаёт поверхность вне экрана для targetScreen с заданным parent.
Базовая поверхность платформы не создаётся до вызова create().
Эта функция была введена в Qt 5.10.
См. также setScreen() и create().
void QOffscreenSurface::screenChanged(QScreen *screen)
Этот сигнал излучается, когда экран поверхности вне экрана изменяется, либо явно задаётся с помощью setScreen(), либо автоматически, когда экран окна удаляется.
QOffscreenSurface::~QOffscreenSurface()
Уничтожает поверхность вне экрана.
void QOffscreenSurface::create()
Выделяет ресурсы платформы, связанные с поверхностью вне экрана.
В этот момент формат поверхности, заданный с помощью setFormat(), разрешается в фактическую нативную поверхность.
Вызовите destroy(), чтобы освободить ресурсы платформы при необходимости.
Примечание: Некоторые платформы требуют, чтобы эта функция вызывалась в основном (GUI) потоке.
См. также destroy().
void QOffscreenSurface::destroy()
Освобождает ресурсы нативной платформы, связанные с этой поверхностью вне экрана.
См. также create().
QSurfaceFormat QOffscreenSurface::format() const
Переопределяет: QSurface::format() const.
Возвращает фактический формат этой поверхности вне экрана.
После создания поверхности вне экрана эта функция вернёт фактический формат поверхности. Он может отличаться от запрошенного формата, если запрошенный формат не был выполнен платформой.
См. также setFormat(), create(), и requestedFormat().
bool QOffscreenSurface::isValid() const
Возвращает true , если эта поверхность вне экрана валидна; в противном случае возвращает false.
Поверхность вне экрана валидна, если ресурсы платформы были успешно выделены.
См. также create().
void *QOffscreenSurface::nativeHandle() const
Возвращает необязательный нативный идентификатор, к которому подключена поверхность вне экрана.
Эта функция была введена в Qt 5.9.
См. также setNativeHandle().
QSurfaceFormat QOffscreenSurface::requestedFormat() const
Возвращает запрашиваемый формат поверхности этой поверхности вне экрана.
Если запрошенный формат не поддерживался реализацией платформы, requestedFormat будет отличаться от фактического формата поверхности вне экрана.
Это значение устанавливается с помощью setFormat().
См. также setFormat() и format().
QScreen *QOffscreenSurface::screen() const
Возвращает экран, к которому подключена поверхность offscreen.
См. также setScreen().
void QOffscreenSurface::setFormat(const QSurfaceFormat &format)
Устанавливает формат поверхности offscreen.
Формат поверхности будет разрешен в функции create(). Вызов этой функции после create() не приведет к повторному разрешению формата поверхности родной поверхности.
См. также format(), create() и destroy().
void QOffscreenSurface::setNativeHandle(void *handle)
Устанавливает родной обработчик, к которому подключена поверхность offscreen, в handle.
Родной обработчик будет разрешен в функции create(). Вызов этой функции после create() не приведет к повторному созданию родной поверхности.
Примечание: Интерпретация родного обработчика зависит от платформы. Только некоторые платформы поддерживают принятие родных обработчиков поверхностей offscreen, и платформы, которые не реализуют эту поддержку, проигнорируют обработчик.
Эта функция была добавлена в Qt 5.9.
См. также nativeHandle().
void QOffscreenSurface::setScreen(QScreen *newScreen)
Устанавливает экран, к которому подключена поверхность offscreen.
Если поверхность offscreen уже создана, она будет пересоздана на newScreen.
См. также screen().
[override virtual] QSize QOffscreenSurface::size() const
Переопределяет: QSurface::size() const.
Возвращает размер поверхности offscreen.
[override virtual] QSurface::SurfaceType QOffscreenSurface::surfaceType() const
Переопределяет: QSurface::surfaceType() const.
Возвращает тип поверхности offscreen.
Тип поверхности offscreen всегда QSurface::OpenGLSurface.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.15/qoffscreensurface.html