From 40192d68140c58bc963af78327b919e0db6405e9 Mon Sep 17 00:00:00 2001 From: Sean Harmer Date: Sat, 11 Aug 2012 10:20:18 +0100 Subject: OpenGL: Add QOpenGLVertexArrayObject class This class makes it much simpler to manage OpenGL state relating to vertex data (i.e. vertex buffer objects, vertex attribute divisors, index buffer objects, vertex buffer formats). Change-Id: I9fb932cc3f0691ec9ba065bf871e43cd2e369bad Reviewed-by: James Turner Reviewed-by: Gunnar Sletta --- src/gui/opengl/qopenglvertexarrayobject.h | 110 ++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 src/gui/opengl/qopenglvertexarrayobject.h (limited to 'src/gui/opengl/qopenglvertexarrayobject.h') diff --git a/src/gui/opengl/qopenglvertexarrayobject.h b/src/gui/opengl/qopenglvertexarrayobject.h new file mode 100644 index 0000000000..d5226d3ebd --- /dev/null +++ b/src/gui/opengl/qopenglvertexarrayobject.h @@ -0,0 +1,110 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Klaralvdalens Datakonsult AB (KDAB). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QOPENGLVERTEXARRAYOBJECT_H +#define QOPENGLVERTEXARRAYOBJECT_H + +#ifndef QT_NO_OPENGL + +#include +#include + +QT_BEGIN_NAMESPACE + +class QOpenGLVertexArrayObjectPrivate; + +class Q_GUI_EXPORT QOpenGLVertexArrayObject : public QObject +{ + Q_OBJECT + +public: + explicit QOpenGLVertexArrayObject(QObject* parent = 0); + ~QOpenGLVertexArrayObject(); + + bool create(); + void destroy(); + bool isCreated() const; + GLuint objectId() const; + void bind(); + void release(); + + class Q_GUI_EXPORT Binder + { + public: + inline Binder(QOpenGLVertexArrayObject *v) + : vao(v) + { + Q_ASSERT(v); + if (vao->isCreated() || vao->create()) + vao->bind(); + } + + inline ~Binder() + { + release(); + } + + inline void release() + { + vao->release(); + } + + inline void rebind() + { + vao->bind(); + } + + private: + Q_DISABLE_COPY(Binder) + QOpenGLVertexArrayObject *vao; + }; + +private: + Q_DISABLE_COPY(QOpenGLVertexArrayObject) + Q_DECLARE_PRIVATE(QOpenGLVertexArrayObject) + QOpenGLVertexArrayObject(QOpenGLVertexArrayObjectPrivate &dd); +}; + +QT_END_NAMESPACE + +#endif + +#endif // QOPENGLVERTEXARRAYOBJECT_H -- cgit v1.2.3