Spec-Zone.ru › Qt

Класс QOffscreenSurface

Класс QOffscreenSurface представляет собой внеэкранную поверхность в базовой платформе. Подробнее...

Заголовок: #include <QOffscreenSurface>
CMake: find_package(Qt6 COMPONENTS Gui REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmake: QT += gui
С тех пор: Qt 5.1
Наследует: QObject и QSurface
  • Список всех членов, включая унаследованные

Открытые функции

QOffscreenSurface(QScreen *targetScreen = nullptr, QObject *parent = nullptr)
virtual ~QOffscreenSurface()
void create()
void destroy()
bool isValid() const
QNativeInterface * nativeInterface() const
QSurfaceFormat requestedFormat() const
QScreen * screen() const
void setFormat(const QSurfaceFormat &format)
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, загрузка текстур) это не проблема.

Документация по членам-функциям

[since 5.10] QOffscreenSurface::QOffscreenSurface(QScreen *targetScreen = nullptr, QObject *parent = nullptr)

Создаёт внеэкранную поверхность для targetScreen с заданным parent.

Базовая платформа создаёт поверхность только после вызова create().

Эта функция была введена в Qt 5.10.

См. также setScreen() и create().

[signal] void QOffscreenSurface::screenChanged(QScreen *screen)

Этот сигнал излучается, когда экран внеэкранной поверхности изменяется, либо явно устанавливается с помощью setScreen(), либо автоматически, когда экран окна удаляется.

[virtual] QOffscreenSurface::~QOffscreenSurface()

Уничтожает внеэкранную поверхность.

void QOffscreenSurface::create()

Выделяет платформенные ресурсы, связанные с внеэкранной поверхностью.

В этот момент формат поверхности, установленный с помощью setFormat(), разрешается в фактическую базу поверхности.

Вызовите destroy(), чтобы освободить платформенные ресурсы при необходимости.

Примечание: Некоторые платформы требуют, чтобы эта функция вызывалась в главном (GUI) потоке.

См. также destroy().

void QOffscreenSurface::destroy()

Освобождает родные платформенные ресурсы, связанные с этой внеэкранной поверхностью.

См. также create().

[override virtual] QSurfaceFormat QOffscreenSurface::format() const

Реализует: QSurface::format() const.

Возвращает фактический формат этой внеэкранной поверхности.

После создания внеэкранной поверхности эта функция вернет фактический формат поверхности. Он может отличаться от запрошенного формата, если запрошенный формат не может быть выполнен платформой.

См. также setFormat(), create() и requestedFormat().

bool QOffscreenSurface::isValid() const

Возвращает true , если эта внеэкранная поверхность допустима; в противном случае возвращает false.

Внеэкранная поверхность допустима, если платформенные ресурсы были успешно выделены.

См. также create().

template <typename QNativeInterface> QNativeInterface *QOffscreenSurface::nativeInterface() const

Возвращает родной интерфейс заданного типа для поверхности.

Эта функция предоставляет доступ к платформозависимым функциям QOffScreenSurface, как определено в пространстве имён QNativeInterface:

QNativeInterface::QAndroidOffscreenSurface

Родной интерфейс для внеэкранной поверхности на Android

Если запрошенный интерфейс недоступен, возвращается nullptr.

QSurfaceFormat QOffscreenSurface::requestedFormat() const

Возвращает запрошенный формат поверхности для этой внеэкранной поверхности.

Если запрошенный формат не поддерживается реализацией платформы, запрошенный формат будет отличаться от фактического формата внеэкранной поверхности.

Это значение устанавливается с помощью setFormat().

См. также setFormat() и format().

QScreen *QOffscreenSurface::screen() const

Возвращает экран, к которому подключена внеэкранная поверхность.

См. также setScreen().

void QOffscreenSurface::setFormat(const QSurfaceFormat &format)

Устанавливает формат внеэкранной поверхности.

Формат поверхности будет разрешён в функции create(). Вызов этой функции после create() не переразрешит формат поверхности родной поверхности.

См. также format(), create() и destroy().

void QOffscreenSurface::setScreen(QScreen *newScreen)

Устанавливает экран, к которому подключена внеэкранная поверхность.

Если внеэкранная поверхность была создана, она будет пересоздана на newScreen.

См. также screen().

[override virtual] QSize QOffscreenSurface::size() const

Переопределяет: QSurface::size() const.

Возвращает размер внеэкранной поверхности.

[override virtual] QSurface::SurfaceType QOffscreenSurface::surfaceType() const

Переопределяет: QSurface::surfaceType() const.

Возвращает тип поверхности внеэкранной поверхности.

Тип поверхности внеэкранной поверхности всегда QSurface::OpenGLSurface.

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qoffscreensurface.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API