QOffscreenSurface 类

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

头: #include <QOffscreenSurface>
CMake: find_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmake: QT += gui
继承: QObject and QSurface

公共函数

QOffscreenSurface (QScreen * targetScreen = nullptr, QObject * parent = nullptr)
virtual ~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 )

重实现公共函数

virtual QSurfaceFormat format () const override
virtual QSize size () const override
virtual QSurface::SurfaceType surfaceType () const override

信号

void screenChanged (QScreen * screen )

详细描述

QOffscreenSurface 旨在用于 QOpenGLContext 以允许在任意线程采用 OpenGL 渲染而无需创建 QWindow .

Even though the surface is typically renderable, the surface's pixels are not accessible. QOffscreenSurface should only be used to create OpenGL resources such as textures or framebuffer objects.

An application will typically use QOffscreenSurface to perform some time-consuming tasks in a separate thread in order to avoid stalling the main rendering thread. Resources created in the QOffscreenSurface's context can be shared with the main OpenGL context. Some common use cases are asynchronous texture uploads or rendering into a QOpenGLFramebufferObject .

How the offscreen surface is implemented depends on the underlying platform, but it will typically use a pixel buffer (pbuffer). If the platform doesn't implement or support offscreen surfaces, QOffscreenSurface will use an invisible QWindow internally.

注意: Due to the fact that QOffscreenSurface is backed by a QWindow on some platforms, cross-platform applications must ensure that create () is only called on the main (GUI) thread. The QOffscreenSurface is then safe to be used with makeCurrent () on other threads, but the initialization and destruction must always happen on the main (GUI) thread.

注意: In order to create an offscreen surface that is guaranteed to be compatible with a given context and window, make sure to set the format to the context's or the window's actual format, that is, the QSurfaceFormat returned from QOpenGLContext::format () 或 QWindow::format () after the context or window has been created . Passing the format returned from QWindow::requestedFormat () 到 setFormat () may result in an incompatible offscreen surface since the underlying windowing system interface may offer a different set of configurations for window and pbuffer surfaces.

注意: Some platforms may utilize a surfaceless context extension (for example EGL_KHR_surfaceless_context) when available. In this case there will be no underlying native surface. For the use cases of QOffscreenSurface (rendering to FBOs, texture upload) this is not a problem.

成员函数文档编制

[explicit] QOffscreenSurface:: QOffscreenSurface ( QScreen * targetScreen = nullptr, QObject * parent = nullptr)

创建离屏表面为 targetScreen 采用给定 parent .

不创建底层平台表面直到 create () 被调用。

另请参阅 setScreen () 和 create ().

[虚拟] QOffscreenSurface:: ~QOffscreenSurface ()

销毁离屏表面。

void QOffscreenSurface:: create ()

Allocates the platform resources associated with the offscreen surface.

It is at this point that the surface format set using setFormat () gets resolved into an actual native surface.

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

注意: Some platforms require this function to be called on the main (GUI) thread.

另请参阅 destroy ().

void QOffscreenSurface:: destroy ()

Releases the native platform resources associated with this offscreen surface.

另请参阅 create ().

[override virtual] QSurfaceFormat QOffscreenSurface:: format () const

重实现: QSurface::format() const .

返回此离屏表面的实际格式。

After the offscreen surface has been created, this function will return the actual surface format of the surface. It might differ from the requested format if the requested format could not be fulfilled by the platform.

另请参阅 setFormat (), create (),和 requestedFormat ().

bool QOffscreenSurface:: isValid () const

返回 true if this offscreen surface is valid; otherwise returns false .

The offscreen surface is valid if the platform resources have been successfully allocated.

另请参阅 create ().

template <typename QNativeInterface> QNativeInterface *QOffscreenSurface:: nativeInterface () const

Returns a native interface of the given type for the surface.

This function provides access to platform specific functionality of QOffScreenSurface, as defined in the QNativeInterface 名称空间:

QNativeInterface::QAndroidOffscreenSurface 在 Android 的离屏表面的本机界面

若请求接口不可用 nullptr 被返回。

QSurfaceFormat QOffscreenSurface:: requestedFormat () const

Returns the requested surfaceformat of this offscreen surface.

If the requested format was not supported by the platform implementation, the requestedFormat will differ from the actual offscreen surface format.

此值的设置是采用 setFormat ().

另请参阅 setFormat () 和 format ().

QScreen *QOffscreenSurface:: screen () const

Returns the screen to which the offscreen surface is connected.

另请参阅 setScreen ().

[signal] void QOffscreenSurface:: screenChanged ( QScreen * screen )

This signal is emitted when an offscreen surface's screen 改变,通过明确设置采用 setScreen (),或自动当移除窗口屏幕时。

void QOffscreenSurface:: setFormat (const QSurfaceFormat & format )

Sets the offscreen surface format .

The surface format will be resolved in the create () function. Calling this function after create () will not re-resolve the surface format of the native surface.

另请参阅 format (), create (),和 destroy ().

void QOffscreenSurface:: setScreen ( QScreen * newScreen )

Sets the screen to which the offscreen surface is connected.

If the offscreen surface has been created, it will be recreated on the newScreen .

另请参阅 screen ().

[override virtual] QSize QOffscreenSurface:: size () const

重实现: QSurface::size() const .

Returns the size of the offscreen surface.

[override virtual] QSurface::SurfaceType QOffscreenSurface:: surfaceType () const

重实现: QSurface::surfaceType() const .

Returns the surface type of the offscreen surface.

The surface type of an offscreen surface is always QSurface::OpenGLSurface .