- 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
支持,注意
为了创建一个与指定上下文和窗口兼容的离屏表面,请确保设置格式为上下文或窗口的实际格式,即从
QSurfaceFormat
返回的值,该值来自于format()
或format()
方法(创建上下文或窗口之后的 格式)。将来自requestedFormat()
的格式传递给setFormat()
可能会导致不兼容的离屏表面,因为底层窗口系统接口可能为窗口和pbuffer表面提供不同的配置集。注意
某些平台可能在可用时利用无表面上下文扩展(例如 EGL_KHR_surfaceless_context)。在这种情况下,将没有任何底层本地表面。对于
QOffscreenSurface
的使用情况(渲染到FBOs,纹理上传)这不会是问题。使用给定的
parent
创建一个targetScreen
的离屏表面。底层平台表面是在调用
create()
方法时创建的。另请参阅
- create()#
分配与离屏表面相关的平台资源。
此时使用
setFormat()
设置的表面格式将解析为实际的本地表面。如有必要,请调用
destroy()
释放平台资源。- destroy()#
释放此离屏表面相关的本地平台资源。
另请参阅
- isValid()#
- 返回类型:
bool
如果这个离屏表面是有效的,则返回
true
;否则返回false
。如果平台资源已成功分配,则离屏表面是有效的。
另请参阅
- requestedFormat()#
- 返回类型:
返回这个离屏表面的请求表面格式。
如果请求的格式不被平台实现所支持,则 requestedFormat 将与实际的离屏表面格式不同。
这是由
setFormat()
设置的值。另请参阅
setFormat()
format()
- resolveInterface(name, revision)#
- 参数:
name - str
revision - int
- 返回类型:
void
返回离屏表面连接到的屏幕。
另请参阅
当离屏表面的
screen
发生变化时(无论是因为通过setScreen()
明确设置,还是当窗口的屏幕被移除时自动变化),则发出此信号。- setFormat(format)#
- 参数:
format -
QSurfaceFormat
设置离屏表面的
format
。表面格式将在
create()
函数中解析。在create()
被调用之后调用此函数不会重新解析原生表面的表面格式。设置离屏表面连接的屏幕。
如果离屏表面已经创建,它将在
newScreen
上重新创建。另请参阅