class QOffscreenSurface#

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

Inheritance diagram of PySide6.QtGui.QOffscreenSurface

概要#

方法#

信号#

注意

此文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译中存在问题,也可以通过在https:/bugreports.qt.io/projects/PYSIDE上创建工单的方式告知我们。

详细描述#

QOffscreenSurface 旨在与 QOpenGLContext 一起使用,允许多线程中使用 OpenGL 进行渲染,而无需创建 QWindow .

尽管该表面通常可以进行渲染,但其像素不可访问。应仅使用 QOffscreenSurface 创建 OpenGL 资源,例如纹理或帧缓冲区对象。

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

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

注意

由于在某些平台上,QOffscreenSurfaceQWindow 支持,

注意

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

注意

某些平台可能在可用时利用无表面上下文扩展(例如 EGL_KHR_surfaceless_context)。在这种情况下,将没有任何底层本地表面。对于 QOffscreenSurface 的使用情况(渲染到FBOs,纹理上传)这不会是问题。

__init__([screen=None[, parent=None]])#
参数:

使用给定的 parent 创建一个 targetScreen 的离屏表面。

底层平台表面是在调用 create() 方法时创建的。

另请参阅

setScreen() create()

create()#

分配与离屏表面相关的平台资源。

此时使用 setFormat() 设置的表面格式将解析为实际的本地表面。

如有必要,请调用 destroy() 释放平台资源。

注意

某些平台要求在此函数在主(GUI)线程上调用。

另请参阅

destroy()

destroy()#

释放此离屏表面相关的本地平台资源。

另请参阅

create()

isValid()#
返回类型:

bool

如果这个离屏表面是有效的,则返回 true;否则返回 false

如果平台资源已成功分配,则离屏表面是有效的。

另请参阅

create()

requestedFormat()#
返回类型:

QSurfaceFormat

返回这个离屏表面的请求表面格式。

如果请求的格式不被平台实现所支持,则 requestedFormat 将与实际的离屏表面格式不同。

这是由 setFormat() 设置的值。

另请参阅

setFormat() format()

resolveInterface(name, revision)#
参数:
  • name - str

  • revision - int

返回类型:

void

screen()#
返回类型:

QScreen

返回离屏表面连接到的屏幕。

另请参阅

setScreen()

screenChanged(screen)#
参数:

screenQScreen

当离屏表面的 screen 发生变化时(无论是因为通过 setScreen() 明确设置,还是当窗口的屏幕被移除时自动变化),则发出此信号。

setFormat(format)#
参数:

format - QSurfaceFormat

设置离屏表面的 format

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

另请参阅

format() create() destroy()

setScreen(screen)#
参数:

screenQScreen

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

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

另请参阅

screen()