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
QOpenGLWindow Class Reference

\inmodule QtOpenGL More...

#include <qopenglwindow.h>

+ Inheritance diagram for QOpenGLWindow:
+ Collaboration diagram for QOpenGLWindow:

Public Types

enum  UpdateBehavior { NoPartialUpdate , PartialUpdateBlit , PartialUpdateBlend }
 This enum describes the update strategy of the QOpenGLWindow. More...
 
- 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 Types inherited from QPaintDevice
enum  PaintDeviceMetric {
  PdmWidth = 1 , PdmHeight , PdmWidthMM , PdmHeightMM ,
  PdmNumColors , PdmDepth , PdmDpiX , PdmDpiY ,
  PdmPhysicalDpiX , PdmPhysicalDpiY , PdmDevicePixelRatio , PdmDevicePixelRatioScaled
}
 

Signals

void frameSwapped ()
 This signal is emitted after the potentially blocking \l{QOpenGLContext::swapBuffers()}{buffer swap} has been done.
 
- Signals inherited from QWindow
void screenChanged (QScreen *screen)
 This signal is emitted when a window's screen changes, either by being set explicitly with setScreen(), or automatically when the window's screen is removed.
 
void modalityChanged (Qt::WindowModality modality)
 This signal is emitted when the Qwindow::modality property changes to modality.
 
void windowStateChanged (Qt::WindowState windowState)
 This signal is emitted when the windowState changes, either by being set explicitly with setWindowStates(), or automatically when the user clicks one of the titlebar buttons or by other means.
 
 Q_REVISION (2, 2) void windowTitleChanged(const QString &title)
 
void xChanged (int arg)
 
void yChanged (int arg)
 
void widthChanged (int arg)
 
void heightChanged (int arg)
 
void minimumWidthChanged (int arg)
 
void minimumHeightChanged (int arg)
 
void maximumWidthChanged (int arg)
 
void maximumHeightChanged (int arg)
 
void visibleChanged (bool arg)
 
Q_REVISION(2, 1) void visibilityChanged(QWindow Q_REVISION (2, 1) void activeChanged()
 
void contentOrientationChanged (Qt::ScreenOrientation orientation)
 
void focusObjectChanged (QObject *object)
 This signal is emitted when the final receiver of events tied to focus is changed to object.
 
 Q_REVISION (2, 1) void opacityChanged(qreal opacity)
 
 Q_REVISION (2, 13) void transientParentChanged(QWindow *transientParent)
 
- 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

 QOpenGLWindow (UpdateBehavior updateBehavior=NoPartialUpdate, QWindow *parent=nullptr)
 Constructs a new QOpenGLWindow with the given parent and updateBehavior.
 
 QOpenGLWindow (QOpenGLContext *shareContext, UpdateBehavior updateBehavior=NoPartialUpdate, QWindow *parent=nullptr)
 Constructs a new QOpenGLWindow with the given parent and updateBehavior.
 
 ~QOpenGLWindow ()
 Destroys the QOpenGLWindow instance, freeing its resources.
 
UpdateBehavior updateBehavior () const
 
bool isValid () const
 
void makeCurrent ()
 Prepares for rendering OpenGL content for this window by making the corresponding context current and binding the framebuffer object, if there is one, in that context.
 
void doneCurrent ()
 Releases the context.
 
QOpenGLContextcontext () const
 
QOpenGLContextshareContext () const
 
GLuint defaultFramebufferObject () const
 The framebuffer object handle used by this window.
 
QImage grabFramebuffer ()
 Returns a copy of the framebuffer.
 
- Public Member Functions inherited from QPaintDeviceWindow
void update (const QRect &rect)
 Marks the rect of the window as dirty and schedules a repaint.
 
void update (const QRegion &region)
 Marks the region of the window as dirty and schedules a repaint.
 
- 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 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.
 
virtual QPlatformSurfacesurfaceHandle () const =0
 Returns a handle to the platform-specific implementation of the surface.
 
bool supportsOpenGL () const
 Returns true if the surface is OpenGL compatible and can be used in conjunction with QOpenGLContext; otherwise returns false.
 
- Public Member Functions inherited from QPaintDevice
virtual ~QPaintDevice ()
 
virtual int devType () const
 
bool paintingActive () const
 
int width () const
 
int height () const
 
int widthMM () const
 
int heightMM () const
 
int logicalDpiX () const
 
int logicalDpiY () const
 
int physicalDpiX () const
 
int physicalDpiY () const
 
qreal devicePixelRatio () const
 
qreal devicePixelRatioF () const
 
int colorCount () const
 
int depth () const
 

Protected Member Functions

virtual void initializeGL ()
 This virtual function is called once before the first call to paintGL() or resizeGL().
 
virtual void resizeGL (int w, int h)
 This virtual function is called whenever the widget has been resized.
 
virtual void paintGL ()
 This virtual function is called whenever the window contents needs to be painted.
 
virtual void paintUnderGL ()
 The virtual function is called before each invocation of paintGL().
 
virtual void paintOverGL ()
 This virtual function is called after each invocation of paintGL().
 
void paintEvent (QPaintEvent *event) override
 Paint event handler.
 
void resizeEvent (QResizeEvent *event) override
 Resize event handler.
 
int metric (PaintDeviceMetric metric) const override
 
QPaintDeviceredirected (QPoint *) const override
 
- Protected Member Functions inherited from QPaintDeviceWindow
void exposeEvent (QExposeEvent *) override
 
void paintEvent (QPaintEvent *event) override
 Handles paint events passed in the event parameter.
 
int metric (PaintDeviceMetric metric) const override
 
bool event (QEvent *event) override
 
 QPaintDeviceWindow (QPaintDeviceWindowPrivate &dd, QWindow *parent)
 
- Protected Member Functions inherited from QWindow
virtual void moveEvent (QMoveEvent *)
 Override this to handle window move events (ev).
 
virtual void focusInEvent (QFocusEvent *)
 Override this to handle focus in events (ev).
 
virtual void focusOutEvent (QFocusEvent *)
 Override this to handle focus out events (ev).
 
virtual void showEvent (QShowEvent *)
 Override this to handle show events (ev).
 
virtual void hideEvent (QHideEvent *)
 Override this to handle hide events (ev).
 
virtual void closeEvent (QCloseEvent *)
 Override this to handle close events (ev).
 
virtual void keyPressEvent (QKeyEvent *)
 Override this to handle key press events (ev).
 
virtual void keyReleaseEvent (QKeyEvent *)
 Override this to handle key release events (ev).
 
virtual void mousePressEvent (QMouseEvent *)
 Override this to handle mouse press events (ev).
 
virtual void mouseReleaseEvent (QMouseEvent *)
 Override this to handle mouse release events (ev).
 
virtual void mouseDoubleClickEvent (QMouseEvent *)
 Override this to handle mouse double click events (ev).
 
virtual void mouseMoveEvent (QMouseEvent *)
 Override this to handle mouse move events (ev).
 
virtual void touchEvent (QTouchEvent *)
 Override this to handle touch events (ev).
 
virtual bool nativeEvent (const QByteArray &eventType, void *message, qintptr *result)
 Override this to handle platform dependent events.
 
 QWindow (QWindowPrivate &dd, QWindow *parent)
 Creates a window as a child of the given parent window with the dd private implementation.
 
- 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 Member Functions inherited from QPaintDevice
 QPaintDevice () noexcept
 
virtual void initPainter (QPainter *painter) const
 
virtual QPaintersharedPainter () const
 

Additional Inherited Members

- Public Slots inherited from QPaintDeviceWindow
void update ()
 Marks the entire window as dirty and schedules a repaint.
 
- Public Slots inherited from QWindow
 Q_REVISION (2, 1) void requestActivate()
 
void setVisible (bool visible)
 
void show ()
 Shows the window.
 
void hide ()
 Hides the window.
 
void showMinimized ()
 Shows the window as minimized.
 
void showMaximized ()
 Shows the window as maximized.
 
void showFullScreen ()
 Shows the window as fullscreen.
 
void showNormal ()
 Shows the window as normal, i.e.
 
bool close ()
 Close the window.
 
void raise ()
 Raise the window in the windowing system.
 
void lower ()
 Lower the window in the windowing system.
 
bool startSystemResize (Qt::Edges edges)
 Start a system-specific resize operation.
 
bool startSystemMove ()
 Start a system-specific move operation.
 
void setTitle (const QString &)
 
void setX (int arg)
 
void setY (int arg)
 
void setWidth (int arg)
 
void setHeight (int arg)
 
void setGeometry (int posx, int posy, int w, int h)
 Sets the geometry of the window, excluding its window frame, to a rectangle constructed from posx, posy, w and h.
 
void setGeometry (const QRect &rect)
 Sets the geometry of the window, excluding its window frame, to rect.
 
void setMinimumWidth (int w)
 
void setMinimumHeight (int h)
 
void setMaximumWidth (int w)
 
void setMaximumHeight (int h)
 
 Q_REVISION (2, 1) void alert(int msec)
 
 Q_REVISION (2, 3) void requestUpdate()
 
- 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)
 
- Static Public Member Functions inherited from QPaintDevice
static qreal devicePixelRatioFScale ()
 
- Protected Attributes inherited from QObject
QScopedPointer< QObjectDatad_ptr
 
- Protected Attributes inherited from QSurface
SurfaceClass m_type
 
QSurfacePrivate * m_reserved
 
- Protected Attributes inherited from QPaintDevice
ushort painters
 
- Properties inherited from QPaintDeviceWindow
int width
 the width of the window's geometry
 
int height
 the height of the window's geometry
 
- Properties inherited from QWindow
QString title
 the window's title in the windowing system
 
Qt::WindowModality modality
 the modality of the window
 
Qt::WindowFlags flags
 the window flags of the window
 
int x
 the x position of the window's geometry
 
int y
 the y position of the window's geometry
 
int width
 the width of the window's geometry
 
int height
 the height of the window's geometry
 
int minimumWidth
 the minimum width of the window's geometry
 
int minimumHeight
 the minimum height of the window's geometry
 
int maximumWidth
 the maximum width of the window's geometry
 
int maximumHeight
 the maximum height of the window's geometry
 
bool visible
 whether the window is visible or not
 
bool active
 the active status of the window
 
Visibility visibility
 the screen-occupation state of the window
 
Qt::ScreenOrientation contentOrientation
 the orientation of the window's contents
 
qreal opacity
 The opacity of the window in the windowing system.
 
- Properties inherited from QObject
QString objectName
 the name of this object
 

Detailed Description

\inmodule QtOpenGL

Since
5.4

The QOpenGLWindow class is a convenience subclass of QWindow to perform OpenGL painting.

QOpenGLWindow is an enhanced QWindow that allows easily creating windows that perform OpenGL rendering using an API that is compatible with QOpenGLWidget Unlike QOpenGLWidget, QOpenGLWindow has no dependency on the widgets module and offers better performance.

A typical application will subclass QOpenGLWindow and reimplement the following virtual functions:

\list

  • resizeGL() to set up the transformation matrices and other window size dependent resources

\endlist

To schedule a repaint, call the update() function. Note that this will not immediately result in a call to paintGL(). Calling update() multiple times in a row will not change the behavior in any way.

This is a slot so it can be connected to a \l QChronoTimer::timeout() signal to perform animation. Note however that in the modern OpenGL world it is a much better choice to rely on synchronization to the vertical refresh rate of the display. See \l{QSurfaceFormat::setSwapInterval()}{setSwapInterval()} on a description of the swap interval. With a swap interval of 1, which is the case on most systems by default, the \l{QOpenGLContext::swapBuffers()}{swapBuffers()} call, that is executed internally by QOpenGLWindow after each repaint, will block and wait for vsync. This means that whenever the swap is done, an update can be scheduled again by calling update(), without relying on timers.

To request a specific configuration for the context, use setFormat() like for any other QWindow. This allows, among others, requesting a given OpenGL version and profile, or enabling depth and stencil buffers.

Note
It is up to the application to ensure depth and stencil buffers are requested from the underlying windowing system interface. Without requesting a non-zero depth buffer size there is no guarantee that a depth buffer will be available, and as a result depth testing related OpenGL operations may fail to function as expected.

Commonly used depth and stencil buffer size requests are 24 and 8, respectively. For example, a QOpenGLWindow subclass could do this in its constructor:

format.setStencilBufferSize(8);
The QSurfaceFormat class represents the format of a QSurface. \inmodule QtGui.
void setDepthBufferSize(int size)
Set the minimum depth buffer size to size.
QSurfaceFormat format() const override
Returns the actual format of this window.
Definition qwindow.cpp:946
widget setFormat(format)
GLint GLsizei GLsizei GLenum format

Unlike QWindow, QOpenGLWindow allows opening a painter on itself and perform QPainter-based drawing.

QOpenGLWindow supports multiple update behaviors. The default, NoPartialUpdate is equivalent to a regular, OpenGL-based QWindow. In contrast, PartialUpdateBlit and PartialUpdateBlend are more in line with QOpenGLWidget's way of working, where there is always an extra, dedicated framebuffer object present. These modes allow, by sacrificing some performance, redrawing only a smaller area on each paint and having the rest of the content preserved from of the previous frame. This is useful for applications than render incrementally using QPainter, because this way they do not have to redraw the entire window content on each paintGL() call.

Similarly to QOpenGLWidget, QOpenGLWindow supports the Qt::AA_ShareOpenGLContexts attribute. When enabled, the OpenGL contexts of all QOpenGLWindow instances will share with each other. This allows accessing each other's shareable OpenGL resources.

For more information on graphics in Qt, see \l {Graphics}.

Definition at line 19 of file qopenglwindow.h.

Member Enumeration Documentation

◆ UpdateBehavior

This enum describes the update strategy of the QOpenGLWindow.

\value NoPartialUpdate Indicates that the entire window surface will redrawn on each update and so no additional framebuffers are needed. This is the setting used in most cases and is equivalent to how drawing directly via QWindow would function.

\value PartialUpdateBlit Indicates that the drawing performed in paintGL() does not cover the entire window. In this case an extra framebuffer object is created under the hood, and rendering performed in paintGL() will target this framebuffer. This framebuffer is then blitted onto the window surface's default framebuffer after each paint. This allows having QPainter-based drawing code in paintGL() which only repaints a smaller area at a time, because, unlike NoPartialUpdate, the previous content is preserved.

\value PartialUpdateBlend Similar to PartialUpdateBlit, but instead of using framebuffer blits, the contents of the extra framebuffer is rendered by drawing a textured quad with blending enabled. This, unlike PartialUpdateBlit, allows alpha blended content and works even when the glBlitFramebuffer is not available. Performance-wise this setting is likely to be somewhat slower than PartialUpdateBlit.

Enumerator
NoPartialUpdate 
PartialUpdateBlit 
PartialUpdateBlend 

Definition at line 25 of file qopenglwindow.h.

Constructor & Destructor Documentation

◆ QOpenGLWindow() [1/2]

QOpenGLWindow::QOpenGLWindow ( QOpenGLWindow::UpdateBehavior updateBehavior = NoPartialUpdate,
QWindow * parent = nullptr )
explicit

Constructs a new QOpenGLWindow with the given parent and updateBehavior.

See also
QOpenGLWindow::UpdateBehavior

Definition at line 332 of file qopenglwindow.cpp.

References QSurface::OpenGLSurface.

◆ QOpenGLWindow() [2/2]

QOpenGLWindow::QOpenGLWindow ( QOpenGLContext * shareContext,
UpdateBehavior updateBehavior = NoPartialUpdate,
QWindow * parent = nullptr )
explicit

Constructs a new QOpenGLWindow with the given parent and updateBehavior.

The QOpenGLWindow's context will share with shareContext.

See also
QOpenGLWindow::UpdateBehavior shareContext

Definition at line 343 of file qopenglwindow.cpp.

References QSurface::OpenGLSurface.

◆ ~QOpenGLWindow()

QOpenGLWindow::~QOpenGLWindow ( )

Destroys the QOpenGLWindow instance, freeing its resources.

The OpenGLWindow's context is made current in the destructor, allowing for safe destruction of any child object that may need to release OpenGL resources belonging to the context provided by this window.

Warning
if you have objects wrapping OpenGL resources (such as QOpenGLBuffer, QOpenGLShaderProgram, etc.) as members of a QOpenGLWindow subclass, you may need to add a call to makeCurrent() in that subclass' destructor as well. Due to the rules of C++ object destruction, those objects will be destroyed {before} calling this function (but after that the destructor of the subclass has run), therefore making the OpenGL context current in this function happens too late for their safe disposal.
See also
makeCurrent
Since
5.5

Definition at line 368 of file qopenglwindow.cpp.

References makeCurrent().

+ Here is the call graph for this function:

Member Function Documentation

◆ context()

QOpenGLContext * QOpenGLWindow::context ( ) const
Returns
The QOpenGLContext used by this window or 0 if not yet initialized.

Definition at line 458 of file qopenglwindow.cpp.

References d.

◆ defaultFramebufferObject()

GLuint QOpenGLWindow::defaultFramebufferObject ( ) const

The framebuffer object handle used by this window.

When the update behavior is set to NoPartialUpdate, there is no separate framebuffer object. In this case the returned value is the ID of the default framebuffer.

Otherwise the value of the ID of the framebuffer object or 0 if not yet initialized.

Definition at line 483 of file qopenglwindow.cpp.

References QOpenGLContext::currentContext(), d, and NoPartialUpdate.

+ Here is the call graph for this function:

◆ doneCurrent()

void QOpenGLWindow::doneCurrent ( )

Releases the context.

It is not necessary to call this function in most cases, since the widget will make sure the context is bound and released properly when invoking paintGL().

See also
makeCurrent()

Definition at line 445 of file qopenglwindow.cpp.

References d, and isValid().

+ Here is the call graph for this function:

◆ frameSwapped

void QOpenGLWindow::frameSwapped ( )
signal

This signal is emitted after the potentially blocking \l{QOpenGLContext::swapBuffers()}{buffer swap} has been done.

Applications that wish to continuously repaint synchronized to the vertical refresh, should issue an update() upon this signal. This allows for a much smoother experience compared to the traditional usage of timers.

◆ grabFramebuffer()

QImage QOpenGLWindow::grabFramebuffer ( )

Returns a copy of the framebuffer.

Note
This is a potentially expensive operation because it relies on glReadPixels() to read back the pixels. This may be slow and can stall the GPU pipeline.
When used together with update behavior NoPartialUpdate, the returned image may not contain the desired content when called after the front and back buffers have been swapped (unless preserved swap is enabled in the underlying windowing system interface). In this mode the function reads from the back buffer and the contents of that may not match the content on the screen (the front buffer). In this case the only place where this function can safely be used is paintGL() or paintOverGL().

Definition at line 509 of file qopenglwindow.cpp.

References QPaintDevice::devicePixelRatio(), QWindow::format(), QSurfaceFormat::hasAlpha(), hasAlpha(), isValid(), makeCurrent(), qt_gl_read_framebuffer(), and QWindow::size().

+ Here is the call graph for this function:

◆ initializeGL()

void QOpenGLWindow::initializeGL ( )
protectedvirtual

This virtual function is called once before the first call to paintGL() or resizeGL().

Reimplement it in a subclass.

This function should set up any required OpenGL resources and state.

There is no need to call makeCurrent() because this has already been done when this function is called. Note however that the framebuffer, in case partial update mode is used, is not yet available at this stage, so avoid issuing draw calls from here. Defer such calls to paintGL() instead.

See also
paintGL(), resizeGL()

Definition at line 535 of file qopenglwindow.cpp.

◆ isValid()

bool QOpenGLWindow::isValid ( ) const
Returns
true if the window's OpenGL resources, like the context, have been successfully initialized. Note that the return value is always false until the window becomes exposed (shown).

Definition at line 387 of file qopenglwindow.cpp.

References d.

Referenced by doneCurrent(), grabFramebuffer(), and makeCurrent().

+ Here is the caller graph for this function:

◆ makeCurrent()

void QOpenGLWindow::makeCurrent ( )

Prepares for rendering OpenGL content for this window by making the corresponding context current and binding the framebuffer object, if there is one, in that context.

It is not necessary to call this function in most cases, because it is called automatically before invoking paintGL(). It is provided nonetheless to support advanced, multi-threaded scenarios where a thread different than the GUI or main thread may want to update the surface or framebuffer contents. See QOpenGLContext for more information on threading related issues.

This function is suitable for calling also when the underlying platform window is already destroyed. This means that it is safe to call this function from a QOpenGLWindow subclass' destructor. If there is no native window anymore, an offscreen surface is used instead. This ensures that OpenGL resource cleanup operations in the destructor will always work, as long as this function is called first.

See also
QOpenGLContext, context(), paintGL(), doneCurrent()

Definition at line 413 of file qopenglwindow.cpp.

References d, isValid(), and screen.

Referenced by ~QOpenGLWindow(), and grabFramebuffer().

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

◆ metric()

int QOpenGLWindow::metric ( PaintDeviceMetric metric) const
overrideprotectedvirtual

Reimplemented from QPaintDevice.

Definition at line 653 of file qopenglwindow.cpp.

References d, QPaintDeviceWindow::metric(), metric(), and QPaintDevice::PdmDepth.

Referenced by metric().

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

◆ paintEvent()

void QOpenGLWindow::paintEvent ( QPaintEvent * event)
overrideprotectedvirtual

Paint event handler.

Calls paintGL().

See also
paintGL()

Reimplemented from QWindow.

Definition at line 631 of file qopenglwindow.cpp.

References paintGL(), and Q_UNUSED.

+ Here is the call graph for this function:

◆ paintGL()

void QOpenGLWindow::paintGL ( )
protectedvirtual

This virtual function is called whenever the window contents needs to be painted.

Reimplement it in a subclass.

There is no need to call makeCurrent() because this has already been done when this function is called.

Before invoking this function, the context and the framebuffer, if there is one, are bound, and the viewport is set up by a call to glViewport(). No other state is set and no clearing or drawing is performed by the framework.

Note
When using a partial update behavior, like PartialUpdateBlend, the output of the previous paintGL() call is preserved and, after the additional drawing performed in the current invocation of the function, the content is blitted or blended over the content drawn directly to the window in paintUnderGL().
See also
initializeGL(), resizeGL(), paintUnderGL(), paintOverGL(), UpdateBehavior

Definition at line 580 of file qopenglwindow.cpp.

Referenced by paintEvent().

+ Here is the caller graph for this function:

◆ paintOverGL()

void QOpenGLWindow::paintOverGL ( )
protectedvirtual

This virtual function is called after each invocation of paintGL().

When the update mode is set to NoPartialUpdate, there is no difference between this function and paintGL(), performing rendering in either of them leads to the same result.

Like paintUnderGL(), rendering in this function targets the default framebuffer of the window, regardless of the update behavior. It gets called after paintGL() has returned and the blit (PartialUpdateBlit) or quad drawing (PartialUpdateBlend) has been done.

See also
paintGL(), paintUnderGL(), UpdateBehavior

Definition at line 622 of file qopenglwindow.cpp.

◆ paintUnderGL()

void QOpenGLWindow::paintUnderGL ( )
protectedvirtual

The virtual function is called before each invocation of paintGL().

When the update mode is set to NoPartialUpdate, there is no difference between this function and paintGL(), performing rendering in either of them leads to the same result.

The difference becomes significant when using PartialUpdateBlend, where an extra framebuffer object is used. There, paintGL() targets this additional framebuffer object, which preserves its contents, while paintUnderGL() and paintOverGL() target the default framebuffer, i.e. directly the window surface, the contents of which is lost after each displayed frame.

Note
Avoid relying on this function when the update behavior is PartialUpdateBlit. This mode involves blitting the extra framebuffer used by paintGL() onto the default framebuffer after each invocation of paintGL(), thus overwriting all drawing generated in this function.
See also
paintGL(), paintOverGL(), UpdateBehavior

Definition at line 604 of file qopenglwindow.cpp.

◆ redirected()

QPaintDevice * QOpenGLWindow::redirected ( QPoint * ) const
overrideprotectedvirtual

Reimplemented from QPaintDevice.

Definition at line 671 of file qopenglwindow.cpp.

References QOpenGLContext::currentContext(), and d.

+ Here is the call graph for this function:

◆ resizeEvent()

void QOpenGLWindow::resizeEvent ( QResizeEvent * event)
overrideprotectedvirtual

Resize event handler.

Calls resizeGL().

See also
resizeGL()

Reimplemented from QWindow.

Definition at line 642 of file qopenglwindow.cpp.

References d, QPaintDeviceWindow::height, Q_UNUSED, resizeGL(), and QPaintDeviceWindow::width.

+ Here is the call graph for this function:

◆ resizeGL()

void QOpenGLWindow::resizeGL ( int w,
int h )
protectedvirtual

This virtual function is called whenever the widget has been resized.

Reimplement it in a subclass. The new size is passed in w and h.

Note
This is merely a convenience function in order to provide an API that is compatible with QOpenGLWidget. Unlike with QOpenGLWidget, derived classes are free to choose to override resizeEvent() instead of this function.
Avoid issuing OpenGL commands from this function as there may not be a context current when it is invoked. If it cannot be avoided, call makeCurrent().
Scheduling updates from here is not necessary. The windowing systems will send expose events that trigger an update automatically.
See also
initializeGL(), paintGL()

Definition at line 555 of file qopenglwindow.cpp.

References Q_UNUSED.

Referenced by resizeEvent().

+ Here is the caller graph for this function:

◆ shareContext()

QOpenGLContext * QOpenGLWindow::shareContext ( ) const
Returns
The QOpenGLContext requested to be shared with this window's QOpenGLContext.

Definition at line 467 of file qopenglwindow.cpp.

References d.

◆ updateBehavior()

QOpenGLWindow::UpdateBehavior QOpenGLWindow::updateBehavior ( ) const
Returns
the update behavior for this QOpenGLWindow.

Definition at line 376 of file qopenglwindow.cpp.

References d.


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