Класс QOffscreenSurface
Класс QOffscreenSurface представляет собой внеэкранную поверхность в базовой платформе. Подробнее...
| Заголовок: | #include <QOffscreenSurface> |
| qmake: | QT += gui |
| С тех пор: | Qt 5.1 |
| Наследует: | QObject и QSurface |
Открытые функции
| QOffscreenSurface(QScreen *targetScreen = Q_NULLPTR) | |
| 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 |
| virtual QSize | size() const |
| virtual SurfaceType | surfaceType() const |
Сигналы
| void | screenChanged(QScreen *screen) |
- 2 сигнала, унаследованные от QObject
Дополнительные унаследованные члены
- 1 свойство, унаследованное от QObject
- 1 открытый слот, унаследованный от QObject
- 11 статические открытые члены, унаследованные от QObject
- 9 защищённые функции, унаследованные от QObject
Подробное описание
Класс QOffscreenSurface представляет собой внеэкранную поверхность в базовой платформе.
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 = Q_NULLPTR)
Создаёт внеэкранную поверхность для targetScreen.
Базовая поверхность платформы не создаётся до тех пор, пока не будет вызван create().
См. также setScreen() и create().
[virtual] QOffscreenSurface::~QOffscreenSurface()
Уничтожает внеэкранную поверхность.
void QOffscreenSurface::create()
Выделяет ресурсы платформы, связанные с внеэкранной поверхностью.
В этот момент формат поверхности, установленный с помощью setFormat(), преобразуется в фактическую нативную поверхность.
Вызовите destroy(), чтобы освободить ресурсы платформы, если необходимо.
Примечание: Некоторые платформы требуют, чтобы эта функция вызывалась в основной (GUI) нити.
См. также destroy().
void QOffscreenSurface::destroy()
Освобождает нативные ресурсы платформы, связанные с этой внеэкранной поверхностью.
См. также create().
[virtual] QSurfaceFormat QOffscreenSurface::format() const
Переопределено из QSurface::format().
Возвращает фактический формат этой внеэкранной поверхности.
После создания внеэкранной поверхности эта функция вернёт фактический формат поверхности. Он может отличаться от запрошенного формата, если запрошенный формат не может быть выполнен платформой.
См. также 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
Возвращает экран, к которому подключена внеэкранная поверхность.
См. также setScreen().
[signal] void QOffscreenSurface::screenChanged(QScreen *screen)
Этот сигнал испускается, когда экран поверхности без отображения меняется, либо явным указанием с помощью setScreen(), либо автоматически, когда экран окна удаляется.
void QOffscreenSurface::setFormat(const QSurfaceFormat &format)
Устанавливает формат поверхности без отображения format.
Формат поверхности будет разрешен в функции create(). Вызов этой функции после create() не переопределит формат поверхности нативного объекта.
См. также format(), create() и destroy().
void QOffscreenSurface::setNativeHandle(void *handle)
Устанавливает нативное управление, к которому подключена поверхность без отображения, к handle.
Нативное управление будет разрешено в функции create(). Вызов этой функции после create() не пересоздаст нативную поверхность.
Примечание: Интерпретация нативного управления зависит от платформы. Только некоторые платформы поддерживают принятие нативных управлений поверхностей без отображения, и платформы, которые не реализуют эту поддержку, проигнорируют управление.
Эта функция была представлена в Qt 5.9.
См. также nativeHandle().
void QOffscreenSurface::setScreen(QScreen *newScreen)
Устанавливает экран, к которому подключена поверхность без отображения.
Если поверхность без отображения была создана, она будет пересоздана на newScreen.
См. также screen().
[virtual] QSize QOffscreenSurface::size() const
Переопределено из QSurface::size().
Возвращает размер поверхности без отображения.
[virtual] SurfaceType QOffscreenSurface::surfaceType() const
Переопределено из QSurface::surfaceType().
Возвращает тип поверхности поверхности без отображения.
Тип поверхности поверхности без отображения всегда QSurface::OpenGLSurface.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.9/qoffscreensurface.html