Spec-Zone.ru › Qt 6.1

Класс 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() вызывается только в главном (графическом) потоке. QOffscreenSurface затем безопасно использовать с makeCurrent() в других потоках, но инициализация и уничтожение всегда должны происходить в главном (графическом) потоке.

Примечание: Для создания внеэкранной поверхности, гарантированной совместимости с данным контекстом и окном, убедитесь, что формат установлен в фактический формат контекста или окна, то есть 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)

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

[virtual] QOffscreenSurface::~QOffscreenSurface()

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

void QOffscreenSurface::create()

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

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

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

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

См. также 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

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

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

Это значение задано с помощью setFormat().

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

QScreen *QOffscreenSurface::screen() const

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

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

void QOffscreenSurface::setFormat(const QSurfaceFormat &format)

Устанавливает формат внеэкранной поверхности 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.1/qoffscreensurface.html

Spec-Zone.ru

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