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

The QOpenGLVertexArrayObject class wraps an OpenGL Vertex Array Object. More...

#include <qopenglvertexarrayobject.h>

+ Inheritance diagram for QOpenGLVertexArrayObject:
+ Collaboration diagram for QOpenGLVertexArrayObject:

Classes

class  Binder
 The QOpenGLVertexArrayObject::Binder class is a convenience class to help with the binding and releasing of OpenGL Vertex Array Objects. More...
 

Public Member Functions

 QOpenGLVertexArrayObject (QObject *parent=nullptr)
 Creates a QOpenGLVertexArrayObject with the given parent.
 
 ~QOpenGLVertexArrayObject ()
 Destroys the QOpenGLVertexArrayObject and the underlying OpenGL resource.
 
bool create ()
 Creates the underlying OpenGL vertex array object.
 
void destroy ()
 Destroys the underlying OpenGL vertex array object.
 
bool isCreated () const
 Returns true is the underlying OpenGL vertex array object has been created.
 
GLuint objectId () const
 Returns the id of the underlying OpenGL vertex array object.
 
void bind ()
 Binds this vertex array object to the OpenGL binding point.
 
void release ()
 Unbinds this vertex array object by binding the default vertex array object (id = 0).
 
- 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.
 

Additional Inherited Members

- Public Slots inherited from QObject
void deleteLater ()
 \threadsafe
 
- 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.
 
- 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 Attributes inherited from QObject
QScopedPointer< QObjectDatad_ptr
 
- Properties inherited from QObject
QString objectName
 the name of this object
 

Detailed Description

The QOpenGLVertexArrayObject class wraps an OpenGL Vertex Array Object.

\inmodule QtOpenGL

Since
5.1

A Vertex Array Object (VAO) is an OpenGL container object that encapsulates the state needed to specify per-vertex attribute data to the OpenGL pipeline. To put it another way, a VAO remembers the states of buffer objects (see QOpenGLBuffer) and their associated state (e.g. vertex attribute divisors). This allows a very easy and efficient method of switching between OpenGL buffer states for rendering different "objects" in a scene. The QOpenGLVertexArrayObject class is a thin wrapper around an OpenGL VAO.

For the desktop, VAOs are supported as a core feature in OpenGL 3.0 or newer and by the GL_ARB_vertex_array_object for older versions. On OpenGL ES 2, VAOs are provided by the optional GL_OES_vertex_array_object extension. You can check the version of OpenGL with QOpenGLContext::surfaceFormat() and check for the presence of extensions with QOpenGLContext::hasExtension().

As with the other Qt OpenGL classes, QOpenGLVertexArrayObject has a create() function to create the underlying OpenGL object. This is to allow the developer to ensure that there is a valid current OpenGL context at the time.

Once you have successfully created a VAO the typical usage pattern is:

\list

  • In scene initialization function, for each visual object: \list
  • Bind the VAO
  • Set vertex data state for this visual object (vertices, normals, texture coordinates etc.)
  • Unbind (release()) the VAO \endlist
  • In render function, for each visual object: \list
  • Bind the VAO (and shader program if needed)
  • Call a glDraw*() function
  • Unbind (release()) the VAO \endlist \endlist

The act of binding the VAO in the render function has the effect of restoring all of the vertex data state setup in the initialization phase. In this way we can set a great deal of state when setting up a VAO and efficiently switch between state sets of objects to be rendered. Using VAOs also allows the OpenGL driver to amortise the validation checks of the vertex data.

Note
Vertex Array Objects, like all other OpenGL container objects, are specific to the context for which they were created and cannot be shared amongst a context group.
See also
QOpenGLVertexArrayObject::Binder, QOpenGLBuffer

Definition at line 18 of file qopenglvertexarrayobject.h.

Constructor & Destructor Documentation

◆ QOpenGLVertexArrayObject()

QOpenGLVertexArrayObject::QOpenGLVertexArrayObject ( QObject * parent = nullptr)
explicit

Creates a QOpenGLVertexArrayObject with the given parent.

You must call create() with a valid OpenGL context before using.

Definition at line 360 of file qopenglvertexarrayobject.cpp.

◆ ~QOpenGLVertexArrayObject()

QOpenGLVertexArrayObject::~QOpenGLVertexArrayObject ( )

Destroys the QOpenGLVertexArrayObject and the underlying OpenGL resource.

Definition at line 376 of file qopenglvertexarrayobject.cpp.

References destroy().

+ Here is the call graph for this function:

Member Function Documentation

◆ bind()

void QOpenGLVertexArrayObject::bind ( )

Binds this vertex array object to the OpenGL binding point.

From this point on and until release() is called or another vertex array object is bound, any modifications made to vertex data state are stored inside this vertex array object.

If another vertex array object is then bound you can later restore the set of state associated with this object by calling bind() on this object once again. This allows efficient changes between vertex data states in rendering functions.

Definition at line 442 of file qopenglvertexarrayobject.cpp.

References d.

Referenced by QOpenGLTextureGlyphCache::resizeTextureData().

+ Here is the caller graph for this function:

◆ create()

bool QOpenGLVertexArrayObject::create ( )

Creates the underlying OpenGL vertex array object.

There must be a valid OpenGL context that supports vertex array objects current for this function to succeed.

Returns true if the OpenGL vertex array object was successfully created.

When the return value is false, vertex array object support is not available. This is not an error: on systems with OpenGL 2.x or OpenGL ES 2.0 vertex array objects may not be supported. The application is free to continue execution in this case, but it then has to be prepared to operate in a VAO-less manner too. This means that instead of merely calling bind(), the value of isCreated() must be checked and the vertex arrays has to be initialized in the traditional way when there is no vertex array object present.

See also
isCreated()

Definition at line 397 of file qopenglvertexarrayobject.cpp.

References d.

Referenced by QOpenGLTextureGlyphCache::createTextureData().

+ Here is the caller graph for this function:

◆ destroy()

void QOpenGLVertexArrayObject::destroy ( )

Destroys the underlying OpenGL vertex array object.

There must be a valid OpenGL context that supports vertex array objects current for this function to succeed.

Definition at line 407 of file qopenglvertexarrayobject.cpp.

References d.

Referenced by QOpenGL2PaintEngineExPrivate::~QOpenGL2PaintEngineExPrivate(), and ~QOpenGLVertexArrayObject().

+ Here is the caller graph for this function:

◆ isCreated()

bool QOpenGLVertexArrayObject::isCreated ( ) const

Returns true is the underlying OpenGL vertex array object has been created.

If this returns true and the associated OpenGL context is current, then you are able to bind() this object.

Definition at line 418 of file qopenglvertexarrayobject.cpp.

References d.

Referenced by QOpenGLTextureGlyphCache::createTextureData(), QOpenGL2PaintEngineExPrivate::resetGLState(), and QOpenGLTextureGlyphCache::resizeTextureData().

+ Here is the caller graph for this function:

◆ objectId()

GLuint QOpenGLVertexArrayObject::objectId ( ) const

Returns the id of the underlying OpenGL vertex array object.

Definition at line 427 of file qopenglvertexarrayobject.cpp.

References d.

◆ release()

void QOpenGLVertexArrayObject::release ( )

Unbinds this vertex array object by binding the default vertex array object (id = 0).

Definition at line 451 of file qopenglvertexarrayobject.cpp.

References d.

Referenced by QOpenGL2PaintEngineExPrivate::resetGLState(), and QOpenGLTextureGlyphCache::resizeTextureData().

+ Here is the caller graph for this function:

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