PySide6.QtGui.QOffscreenSurface¶
- class QOffscreenSurface¶
QOffscreenSurface类表示底层平台中的离屏表面。更多…概要¶
方法¶
def
__init__()def
create()def
destroy()def
isValid()def
screen()def
setFormat()def
setScreen()
信号¶
def
screenChanged()
注意
本文档可能包含从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、纹理上传),这不是问题。为
targetScreen创建一个离屏表面,使用给定的parent。底层平台表面在调用
create()之前不会被创建。另请参阅
- create()¶
分配与离屏表面相关的平台资源。
正是在这一点上,使用
setFormat()设置的表面格式被解析为实际的本地表面。如有必要,调用
destroy()以释放平台资源。- destroy()¶
释放与此离屏表面相关的本地平台资源。
另请参阅
- isValid()¶
- Return type:
布尔
如果此离屏表面有效,则返回
true;否则返回false。如果平台资源已成功分配,则离屏表面是有效的。
另请参阅
- requestedFormat()¶
- Return type:
返回此离屏表面的请求表面格式。
如果平台实现不支持请求的格式,requestedFormat将与实际的离屏表面格式不同。
这是用
setFormat()设置的值。另请参阅
setFormat()format()- resolveInterface(name, revision)¶
- Parameters:
name – str
revision – int
- Return type:
void
返回离屏表面所连接的屏幕。
另请参阅
当离屏表面的
screen发生变化时,会发出此信号,无论是通过setScreen()显式设置,还是在窗口的屏幕被移除时自动发生。- setFormat(format)¶
- Parameters:
格式 –
QSurfaceFormat
设置离屏表面的
format。表面格式将在
create()函数中解析。在create()之后调用此函数将不会重新解析原生表面的表面格式。设置离屏表面连接的屏幕。
如果离屏表面已经创建,它将在
newScreen上重新创建。另请参阅