PySide6.QtGui.QOffscreenSurface

class QOffscreenSurface

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

PySide6.QtGui.QOffscreenSurface的继承图

概要

方法

信号

注意

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

详细描述

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

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

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

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

注意

由于在某些平台上,QOffscreenSurface 是由 QWindow 支持的,跨平台应用程序必须确保 create() 只在主(GUI)线程上调用。然后,QOffscreenSurface 可以安全地在其他线程上与 makeCurrent() 一起使用,但初始化和销毁必须始终在主(GUI)线程上进行。

注意

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

注意

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

__init__([screen=None[, parent=None]])
Parameters:

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

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

另请参阅

setScreen() create()

create()

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

正是在这一点上,使用setFormat()设置的表面格式被解析为实际的本地表面。

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

注意

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

另请参阅

destroy()

destroy()

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

另请参阅

create()

isValid()
Return type:

布尔

如果此离屏表面有效,则返回true;否则返回false

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

另请参阅

create()

requestedFormat()
Return type:

QSurfaceFormat

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

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

这是用setFormat()设置的值。

另请参阅

setFormat() format()

resolveInterface(name, revision)
Parameters:
  • name – str

  • revision – int

Return type:

void

screen()
Return type:

QScreen

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

另请参阅

setScreen()

screenChanged(screen)
Parameters:

屏幕QScreen

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

setFormat(format)
Parameters:

格式QSurfaceFormat

设置离屏表面的format

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

另请参阅

format() create() destroy()

setScreen(screen)
Parameters:

屏幕QScreen

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

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

另请参阅

screen()