Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
QOffscreenSurface Class Reference

\inmodule QtGui More...

#include <qoffscreensurface.h>

+ Inheritance diagram for QOffscreenSurface:
+ Collaboration diagram for QOffscreenSurface:

Signals

void screenChanged (QScreen *screen)
 This signal is emitted when an offscreen surface's screen changes, either by being set explicitly with setScreen(), or automatically when the window's screen is removed.
 
- Signals inherited from QObject
void destroyed (QObject *=nullptr)
 This signal is emitted immediately before the object obj is destroyed, after any instances of QPointer have been notified, and cannot be blocked.
 
void objectNameChanged (const QString &objectName, QPrivateSignal)
 This signal is emitted after the object's name has been changed.
 

Public Member Functions

 QOffscreenSurface (QScreen *screen=nullptr, QObject *parent=nullptr)
 
 ~QOffscreenSurface ()
 Destroys the offscreen surface.
 
SurfaceType surfaceType () const override
 Returns the surface type of the offscreen surface.
 
void create ()
 Allocates the platform resources associated with the offscreen surface.
 
void destroy ()
 Releases the native platform resources associated with this offscreen surface.
 
bool isValid () const
 Returns true if this offscreen surface is valid; otherwise returns false.
 
void setFormat (const QSurfaceFormat &format)
 Sets the offscreen surface format.
 
QSurfaceFormat format () const override
 Returns the actual format of this offscreen surface.
 
QSurfaceFormat requestedFormat () const
 Returns the requested surfaceformat of this offscreen surface.
 
QSize size () const override
 Returns the size of the offscreen surface.
 
QScreenscreen () const
 Returns the screen to which the offscreen surface is connected.
 
void setScreen (QScreen *screen)
 Sets the screen to which the offscreen surface is connected.
 
QPlatformOffscreenSurfacehandle () const
 Returns the platform offscreen surface corresponding to the offscreen surface.
 
- Public Member Functions inherited from QObject
Q_INVOKABLE QObject (QObject *parent=nullptr)
 Constructs an object with parent object parent.
 
virtual ~QObject ()
 Destroys the object, deleting all its child objects.
 
virtual bool event (QEvent *event)
 This virtual function receives events to an object and should return true if the event e was recognized and processed.
 
virtual bool eventFilter (QObject *watched, QEvent *event)
 Filters events if this object has been installed as an event filter for the watched object.
 
QString objectName () const
 
Q_WEAK_OVERLOAD void setObjectName (const QString &name)
 Sets the object's name to name.
 
void setObjectName (QAnyStringView name)
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
 
QBindable< QStringbindableObjectName ()
 
bool isWidgetType () const
 Returns true if the object is a widget; otherwise returns false.
 
bool isWindowType () const
 Returns true if the object is a window; otherwise returns false.
 
bool isQuickItemType () const
 Returns true if the object is a QQuickItem; otherwise returns false.
 
bool signalsBlocked () const noexcept
 Returns true if signals are blocked; otherwise returns false.
 
bool blockSignals (bool b) noexcept
 If block is true, signals emitted by this object are blocked (i.e., emitting a signal will not invoke anything connected to it).
 
QThreadthread () const
 Returns the thread in which the object lives.
 
bool moveToThread (QThread *thread QT6_DECL_NEW_OVERLOAD_TAIL)
 Changes the thread affinity for this object and its children and returns true on success.
 
int startTimer (int interval, Qt::TimerType timerType=Qt::CoarseTimer)
 This is an overloaded function that will start a timer of type timerType and a timeout of interval milliseconds.
 
int startTimer (std::chrono::nanoseconds time, Qt::TimerType timerType=Qt::CoarseTimer)
 
void killTimer (int id)
 Kills the timer with timer identifier, id.
 
void killTimer (Qt::TimerId id)
 
template<typename T >
findChild (QAnyStringView aName, Qt::FindChildOptions options=Qt::FindChildrenRecursively) const
 Returns the child of this object that can be cast into type T and that is called name, or \nullptr if there is no such object.
 
template<typename T >
QList< T > findChildren (QAnyStringView aName, Qt::FindChildOptions options=Qt::FindChildrenRecursively) const
 Returns all children of this object with the given name that can be cast to type T, or an empty list if there are no such objects.
 
template<typename T >
findChild (Qt::FindChildOptions options=Qt::FindChildrenRecursively) const
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
 
template<typename T >
QList< T > findChildren (Qt::FindChildOptions options=Qt::FindChildrenRecursively) const
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
 
const QObjectListchildren () const
 Returns a list of child objects.
 
void setParent (QObject *parent)
 Makes the object a child of parent.
 
void installEventFilter (QObject *filterObj)
 Installs an event filter filterObj on this object.
 
void removeEventFilter (QObject *obj)
 Removes an event filter object obj from this object.
 
QMetaObject::Connection connect (const QObject *sender, const char *signal, const char *member, Qt::ConnectionType type=Qt::AutoConnection) const
 
bool disconnect (const char *signal=nullptr, const QObject *receiver=nullptr, const char *member=nullptr) const
 
bool disconnect (const QObject *receiver, const char *member=nullptr) const
 
void dumpObjectTree () const
 Dumps a tree of children to the debug output.
 
void dumpObjectInfo () const
 Dumps information about signal connections, etc.
 
bool setProperty (const char *name, const QVariant &value)
 Sets the value of the object's name property to value.
 
bool setProperty (const char *name, QVariant &&value)
 
QVariant property (const char *name) const
 Returns the value of the object's name property.
 
QList< QByteArraydynamicPropertyNames () const
 
QBindingStoragebindingStorage ()
 
const QBindingStoragebindingStorage () const
 
QObjectparent () const
 Returns a pointer to the parent object.
 
bool inherits (const char *classname) const
 Returns true if this object is an instance of a class that inherits className or a QObject subclass that inherits className; otherwise returns false.
 
- Public Member Functions inherited from QSurface
virtual ~QSurface ()
 Destroys the surface.
 
SurfaceClass surfaceClass () const
 Returns the surface class of this surface.
 
bool supportsOpenGL () const
 Returns true if the surface is OpenGL compatible and can be used in conjunction with QOpenGLContext; otherwise returns false.
 

Private Member Functions

QPlatformSurfacesurfaceHandle () const override
 Returns the platform surface corresponding to the offscreen surface.
 

Additional Inherited Members

- Public Types inherited from QSurface
enum  SurfaceClass { Window , Offscreen }
 The SurfaceClass enum describes the actual subclass of the surface. More...
 
enum  SurfaceType {
  RasterSurface , OpenGLSurface , RasterGLSurface , OpenVGSurface ,
  VulkanSurface , MetalSurface , Direct3DSurface
}
 The SurfaceType enum describes what type of surface this is. More...
 
- Public Slots inherited from QObject
void deleteLater ()
 \threadsafe
 
- Static Public Member Functions inherited from QObject
static QMetaObject::Connection connect (const QObject *sender, const char *signal, const QObject *receiver, const char *member, Qt::ConnectionType=Qt::AutoConnection)
 \threadsafe
 
static QMetaObject::Connection connect (const QObject *sender, const QMetaMethod &signal, const QObject *receiver, const QMetaMethod &method, Qt::ConnectionType type=Qt::AutoConnection)
 
template<typename Func1 , typename Func2 >
static QMetaObject::Connection connect (const typename QtPrivate::FunctionPointer< Func1 >::Object *sender, Func1 signal, const typename QtPrivate::ContextTypeForFunctor< Func2 >::ContextType *context, Func2 &&slot, Qt::ConnectionType type=Qt::AutoConnection)
 
template<typename Func1 , typename Func2 >
static QMetaObject::Connection connect (const typename QtPrivate::FunctionPointer< Func1 >::Object *sender, Func1 signal, Func2 &&slot)
 
static bool disconnect (const QObject *sender, const char *signal, const QObject *receiver, const char *member)
 \threadsafe
 
static bool disconnect (const QObject *sender, const QMetaMethod &signal, const QObject *receiver, const QMetaMethod &member)
 
static bool disconnect (const QMetaObject::Connection &)
 Disconnect a connection.
 
template<typename Func1 , typename Func2 >
static bool disconnect (const typename QtPrivate::FunctionPointer< Func1 >::Object *sender, Func1 signal, const typename QtPrivate::FunctionPointer< Func2 >::Object *receiver, Func2 slot)
 
template<typename Func1 >
static bool disconnect (const typename QtPrivate::FunctionPointer< Func1 >::Object *sender, Func1 signal, const QObject *receiver, void **zero)
 
- Protected Member Functions inherited from QObject
QObjectsender () const
 Returns a pointer to the object that sent the signal, if called in a slot activated by a signal; otherwise it returns \nullptr.
 
int senderSignalIndex () const
 
int receivers (const char *signal) const
 Returns the number of receivers connected to the signal.
 
bool isSignalConnected (const QMetaMethod &signal) const
 
virtual void timerEvent (QTimerEvent *event)
 This event handler can be reimplemented in a subclass to receive timer events for the object.
 
virtual void childEvent (QChildEvent *event)
 This event handler can be reimplemented in a subclass to receive child events.
 
virtual void customEvent (QEvent *event)
 This event handler can be reimplemented in a subclass to receive custom events.
 
virtual void connectNotify (const QMetaMethod &signal)
 
virtual void disconnectNotify (const QMetaMethod &signal)
 
 QObject (QObjectPrivate &dd, QObject *parent=nullptr)
 
- Protected Member Functions inherited from QSurface
 QSurface (SurfaceClass type)
 Creates a surface with the given type.
 
- Protected Attributes inherited from QObject
QScopedPointer< QObjectDatad_ptr
 
- Protected Attributes inherited from QSurface
SurfaceClass m_type
 
QSurfacePrivate * m_reserved
 
- Properties inherited from QObject
QString objectName
 the name of this object
 

Detailed Description

\inmodule QtGui

Since
5.1

The QOffscreenSurface class represents an offscreen surface in the underlying platform.

QOffscreenSurface is intended to be used with QOpenGLContext to allow rendering with OpenGL in an arbitrary thread without the need to create a 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.

Note
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 \l{QOpenGLContext::makeCurrent()}{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() or QWindow::format() {after the context or window has been created}. Passing the format returned from QWindow::requestedFormat() to 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.

Definition at line 20 of file qoffscreensurface.h.

Constructor & Destructor Documentation

◆ QOffscreenSurface()

QOffscreenSurface::QOffscreenSurface ( QScreen * targetScreen = nullptr,
QObject * parent = nullptr )
explicit
Since
5.10

Creates an offscreen surface for the targetScreen with the given parent.

The underlying platform surface is not created until create() is called.

See also
setScreen(), create()

Definition at line 70 of file qoffscreensurface.cpp.

References QObject::connect(), d, QObject::destroyed(), QGuiApplication::primaryScreen, Q_ASSERT, SIGNAL, and SLOT.

+ Here is the call graph for this function:

◆ ~QOffscreenSurface()

QOffscreenSurface::~QOffscreenSurface ( )

Destroys the offscreen surface.

Definition at line 89 of file qoffscreensurface.cpp.

References destroy().

+ Here is the call graph for this function:

Member Function Documentation

◆ create()

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.

Call destroy() to free the platform resources if necessary.

Note
Some platforms require this function to be called on the main (GUI) thread.
See also
destroy()

Definition at line 117 of file qoffscreensurface.cpp.

References QThread::currentThread(), Qt::CustomizeWindowHint, d, Qt::FramelessWindowHint, QSurface::OpenGLSurface, QGuiApplicationPrivate::platformIntegration(), qGuiApp, qt_window_private(), qWarning, QCoreApplication::sendEvent(), QPlatformSurfaceEvent::SurfaceCreated, and QGuiApplicationPrivate::window_list.

Referenced by WaylandEglClientBufferIntegrationPrivate::ensureContext(), WaylandEglStreamClientBufferIntegrationPrivate::ensureContext(), QOpenGLWidgetPrivate::initialize(), QGLXContext::queryDummyContext(), setCurrentOpenGLContext(), and setScreen().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ destroy()

void QOffscreenSurface::destroy ( )

Releases the native platform resources associated with this offscreen surface.

See also
create()

Definition at line 153 of file qoffscreensurface.cpp.

References d, QCoreApplication::sendEvent(), and QPlatformSurfaceEvent::SurfaceAboutToBeDestroyed.

Referenced by ~QOffscreenSurface(), and setScreen().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ format()

QSurfaceFormat QOffscreenSurface::format ( ) const
overridevirtual

Returns the actual format of this offscreen surface.

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.

See also
create(), requestedFormat()

Implements QSurface.

Definition at line 222 of file qoffscreensurface.cpp.

References d.

Referenced by setFormat().

+ Here is the caller graph for this function:

◆ handle()

QPlatformOffscreenSurface * QOffscreenSurface::handle ( ) const

Returns the platform offscreen surface corresponding to the offscreen surface.

Definition at line 305 of file qoffscreensurface.cpp.

References d.

◆ isValid()

bool QOffscreenSurface::isValid ( ) const

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

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

See also
create()

Definition at line 176 of file qoffscreensurface.cpp.

References d.

◆ requestedFormat()

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.

This is the value set with setFormat().

See also
setFormat(), format()

Definition at line 207 of file qoffscreensurface.cpp.

References d.

Referenced by QAndroidPlatformIntegration::createPlatformOffscreenSurface(), QEglFSIntegration::createPlatformOffscreenSurface(), QXcbEglIntegration::createPlatformOffscreenSurface(), QCocoaOffscreenSurface::format(), and QIOSOffscreenSurface::format().

+ Here is the caller graph for this function:

◆ screen()

QScreen * QOffscreenSurface::screen ( ) const

Returns the screen to which the offscreen surface is connected.

See also
setScreen()

Definition at line 246 of file qoffscreensurface.cpp.

References d.

Referenced by QEglFSIntegration::createPlatformOffscreenSurface(), QXcbEglIntegration::createPlatformOffscreenSurface(), QXcbIntegration::createPlatformOffscreenSurface(), and QPlatformOffscreenSurface::screen().

+ Here is the caller graph for this function:

◆ screenChanged

QOffscreenSurface::screenChanged ( QScreen * screen)
signal

This signal is emitted when an offscreen surface's screen changes, either by being set explicitly with setScreen(), or automatically when the window's screen is removed.

Referenced by setScreen().

+ Here is the caller graph for this function:

◆ setFormat()

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.

See also
create(), destroy()

Definition at line 191 of file qoffscreensurface.cpp.

References d, and format().

Referenced by WaylandEglClientBufferIntegrationPrivate::ensureContext(), WaylandEglStreamClientBufferIntegrationPrivate::ensureContext(), QOpenGLWidgetPrivate::initialize(), and setCurrentOpenGLContext().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ setScreen()

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.

See also
screen()

Definition at line 259 of file qoffscreensurface.cpp.

References QObject::connect(), create(), d, destroy(), QObject::destroyed(), disconnect(), emit, QCoreApplication::instance(), QGuiApplication::primaryScreen, screenChanged(), SIGNAL, and SLOT.

Referenced by QOpenGLWidgetPrivate::initialize().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ size()

QSize QOffscreenSurface::size ( ) const
overridevirtual

Returns the size of the offscreen surface.

Implements QSurface.

Definition at line 235 of file qoffscreensurface.cpp.

References d.

Referenced by QEGLPbuffer::QEGLPbuffer(), QGLXPbuffer::QGLXPbuffer(), and QWasmOffscreenSurface::QWasmOffscreenSurface().

+ Here is the caller graph for this function:

◆ surfaceHandle()

QPlatformSurface * QOffscreenSurface::surfaceHandle ( ) const
overrideprivatevirtual

Returns the platform surface corresponding to the offscreen surface.

Implements QSurface.

Definition at line 329 of file qoffscreensurface.cpp.

References d.

◆ surfaceType()

QOffscreenSurface::SurfaceType QOffscreenSurface::surfaceType ( ) const
overridevirtual

Returns the surface type of the offscreen surface.

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

Implements QSurface.

Definition at line 99 of file qoffscreensurface.cpp.

References d.


The documentation for this class was generated from the following files: