QOffscreenSurface 类
QOffscreenSurface 类表示底层平台中的一个离屏表面。 更多信息...
头文件 | #include <QOffscreenSurface> |
CMake | find_package(Qt6 REQUIRED COMPONENTSGui) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
qmake | QT += gui |
继承 | QObject 和 QSurface |
公有函数
QOffscreenSurface(QScreen *targetScreen = nullptr, QObject *parent = nullptr) | |
虚拟 | ~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) |
重新实现的公有函数
虚拟 QSurfaceFormat | format() const override |
虚拟 QSize | size() const override |
虚拟 QSurface::SurfaceType | surfaceType() const override |
信号
void | screenChanged(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() 之前创建。
[虚 not noexcept]
QOffscreenSurface::~QOffscreenSurface()
销毁离屏表面。
void QOffscreenSurface::create()
为离屏表面分配平台资源。
此时,使用 setFormat() 设置的表面格式将解析为实际的本地表面。
如有必要,调用 destroy() 释放平台资源。
注意: 某些平台要求在主(GUI)线程上调用此函数。
另请参阅 destroy()。
void QOffscreenSurface::destroy()
释放与此离屏表面关联的本地平台资源。
另请参阅 create()。
[重写虚]
QSurfaceFormat QOffscreenSurface::format() const
返回此离屏表面的实际格式。
离屏表面创建后,此函数将返回表面的实际表面格式。如果请求的格式无法由平台满足,它可能不同于请求的格式。
另请参阅 setFormat()、create() 和 requestedFormat()。
bool QOffscreenSurface::isValid() const
如果此离屏表面有效,则返回 true
;否则返回 false
。
如果平台资源已成功分配,则该离屏表面有效。
另请参阅 create()。
template <typename QNativeInterface> QNativeInterface *QOffscreenSurface::nativeInterface() const
返回对应类型表面的本地接口。
此函数提供了访问QOffScreenSurface平台特定功能的权限,如QNativeInterface命名空间中定义的。
Android离屏表面的本地接口 |
如果请求的接口不可用,则返回 nullptr
。
QSurfaceFormat QOffscreenSurface::requestedFormat() const
返回此离屏表面的请求表面格式。
如果平台实现不支持请求的格式,则requestedFormat将不同于实际离屏表面格式。
这是使用setFormat()设置的值。
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::SurfaceType QOffscreenSurface::surfaceType() const
重写: QSurface::surfaceType() const.
获取离屏表面的表面类型。
离屏表面的表面类型始终是 QSurface::OpenGLSurface。
© 2024 Qt公司有限公司。本文件中的文档贡献均为其各自版权所有者的版权。本文件提供的文档受GNU自由文档许可协议版本1.3(由自由软件基金会发布)的条款约束。Qt及其相关标志是芬兰及全球其他国家的Qt公司有限公司的商标。所有其他商标均为其各自所有者的财产。