Класс QOffscreenSurface
Класс QOffscreenSurface представляет собой внеэкранную поверхность на базовой платформе. Подробнее...
| Заголовок: | #include <QOffscreenSurface> |
| qmake: | QT += gui |
| С тех пор: | Qt 5.1 |
| Наследует: | QObject и QSurface |
Открытые функции
| QOffscreenSurface(QScreen *targetScreen, QObject *parent) | |
| QOffscreenSurface(QScreen *targetScreen = 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 override |
| virtual QSize | size() const override |
| virtual QSurface::SurfaceType | surfaceType() const override |
Сигналы
| void | screenChanged(QScreen *screen) |
- 2 сигнала унаследованы от QObject
Дополнительные унаследованные члены
- 1 свойство унаследовано от QObject
- 1 открытый слот унаследован от QObject
- 1 открытая переменная унаследована от QObject
- 10 статических открытых членов унаследованы от QObject
- 9 защищенных функций унаследованы от QObject
- 2 защищенных переменных унаследованы от 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, QObject *parent)
Создает внеэкранную поверхность для targetScreen с заданным parent.
Базовая поверхность платформы не создается до тех пор, пока не будет вызван create().
Функция была добавлена в Qt 5.10.
См. также setScreen() и create().
QOffscreenSurface::QOffscreenSurface(QScreen *targetScreen = nullptr)
Создает внеэкранную поверхность для targetScreen.
Базовая поверхность платформы не создается до тех пор, пока не будет вызван create().
См. также setScreen() и create().
[virtual] QOffscreenSurface::~QOffscreenSurface()
Уничтожает внеэкранную поверхность.
void QOffscreenSurface::create()
Выделяет ресурсы платформы, связанные с внеэкранной поверхностью.
В этот момент формат поверхности, установленный с помощью setFormat(), разрешается в фактическую нативную поверхность.
Вызовите destroy(), чтобы освободить ресурсы платформы при необходимости.
Примечание: Некоторые платформы требуют вызова этой функции в главном (GUI) потоке.
См. также destroy().
void QOffscreenSurface::destroy()
Освобождает нативные ресурсы платформы, связанные с этой внеэкранной поверхностью.
См. также create().
[override 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)
Устанавливает формат внеэкранной поверхности.
Формат поверхности будет определён в функции create(). Вызов этой функции после create() не будет повторно определять формат поверхности нативной поверхности.
См. также format(), create() и destroy().
void QOffscreenSurface::setNativeHandle(void *handle)
Устанавливает системную обработку, к которой подключена внеэкранная поверхность, в handle.
Системная обработка будет определена в функции create(). Вызов этой функции после create() не будет повторно создавать нативную поверхность.
Примечание: Интерпретация нативной обработки зависит от платформы. Только некоторые платформы поддерживают принятие нативных обработок внеэкранных поверхностей, и платформы, не реализующие эту поддержку, проигнорируют обработку.
Эта функция была добавлена в Qt 5.9.
См. также nativeHandle().
void QOffscreenSurface::setScreen(QScreen *newScreen)
Устанавливает экран, к которому подключена внеэкранная поверхность.
Если внеэкранная поверхность уже создана, она будет пересоздана на newScreen.
См. также screen().
[override virtual] QSize QOffscreenSurface::size() const
Переопределено из QSurface::size().
Возвращает размер внеэкранной поверхности.
[override virtual] QSurface::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/archives/qt-5.11/qoffscreensurface.html