QOffscreenSurface 类

QOffscreenSurface 类表示底层平台中的一个离屏表面。 更多信息...

头文件 #include <QOffscreenSurface>
CMakefind_package(Qt6 REQUIRED COMPONENTSGui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmakeQT += gui
继承 QObjectQSurface

公有函数

QOffscreenSurface(QScreen *targetScreen = nullptr, QObject *parent = nullptr)
虚拟~QOffscreenSurface()
voidcreate()
voiddestroy()
boolisValid() const
QNativeInterface *nativeInterface() const
QSurfaceFormatrequestedFormat() const
QScreen *screen() const
voidsetFormat(const QSurfaceFormat &format)
voidsetScreen(QScreen *newScreen)

重新实现的公有函数

虚拟 QSurfaceFormatformat() const override
虚拟 QSizesize() const override
虚拟 QSurface::SurfaceTypesurfaceType() const override

信号

voidscreenChanged(QScreen *screen)

详细描述

QOffscreenSurface 旨在与 QOpenGLContext 一起使用,以便在不创建 QWindow 的情况下在任意线程中使用 OpenGL 进行渲染。

尽管表面通常是可渲染的,但表面的像素是不可访问的。QOffscreenSurface 应仅用于创建 OpenGL 资源,如纹理或帧缓冲区对象。

应用程序通常使用 QOffscreenSurface 在单独的线程中执行一些耗时的任务,以避免主渲染线程停滞。在 QOffscreenSurface 的上下文中创建的资源可以与主 OpenGL 上下文共享。一些常见的用例是异步纹理上传或将渲染到 QOpenGLFramebufferObject

离屏表面是如何实现的取决于底层平台,但它通常使用像素缓冲区(pbuffer)。如果平台不实现或不支持离屏表面,QOffscreenSurface 将会内部使用不可见的 QWindow

注意: 由于在某些平台上 QOffscreenSurface 由 QWindow 支持,因此跨平台应用程序必须确保在主(GUI)线程中调用 create()。在这种情况下,QOffscreenSurface 可以在其他线程中使用 makeCurrent(),但初始化和销毁必须在主(GUI)线程进行。

注意: 为了创建一个与给定的上下文和窗口兼容的离屏表面,请确保设置格式为上下文或窗口的实际格式,即从 QOpenGLContext::format() 或 QWindow::format() 返回的 QSurfaceFormat。在创建上下文或窗口之后 设置 格式。将 QWindow::requestedFormat() 返回的格式传递给 setFormat() 可导致不兼容的离屏表面,因为底层窗口系统接口可能为窗口和 pbuffer 表面提供不同的配置集。

注意: 某些平台可能在可用时使用无表面上下文扩展(例如 EGL_KHR_surfaceless_context)。在这种情况下,将没有底层原生表面。对于 QOffscreenSurface 的用例(渲染到 FBO,纹理上传)这不是问题。

成员函数文档

[显式] QOffscreenSurface::QOffscreenSurface(QScreen *targetScreen = nullptr, QObject *parent = nullptr)

为指定的 targetScreen 创建具有给定 parent 的离屏表面。

底层平台表面不会在调用 create() 之前创建。

另请参阅 setScreen() 和 create()。

[虚 not noexcept] 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()。

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::screenChanged(QScreen *screen)

当通过setScreen()显式设置或当窗口的屏幕被移除时,此信号会被发出。

void QOffscreenSurface::setFormat(const QSurfaceFormat &format)

设置离屏表面的格式

表面格式将在create()函数中解析。在create()之后调用此函数将不会重新解析本地表面格式。

另请参阅 format()、create() 和 destroy()。

void QOffscreenSurface::setScreen(QScreen *newScreen)

设置离屏表面所连接的屏幕。

如果已创建了离屏表面,它将在newScreen上重新创建。

另请参阅 screen()。

[重写虚函数] QSize QOffscreenSurface::size() const

重写: QSurface::size() const.

返回离屏表面的尺寸。

[重写虚函数] QSurface::SurfaceType QOffscreenSurface::surfaceType() const

重写: QSurface::surfaceType() const.

获取离屏表面的表面类型。

离屏表面的表面类型始终是 QSurface::OpenGLSurface

© 2024 Qt公司有限公司。本文件中的文档贡献均为其各自版权所有者的版权。本文件提供的文档受GNU自由文档许可协议版本1.3(由自由软件基金会发布)的条款约束。Qt及其相关标志是芬兰及全球其他国家的Qt公司有限公司的商标。所有其他商标均为其各自所有者的财产。