/******************************************************************************** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).** All rights reserved.** Contact: Nokia Corporation (qt-info@nokia.com)**** This file is part of the QtOpenGL module of the Qt Toolkit.**** $QT_BEGIN_LICENSE:LGPL$** No Commercial Usage** This file contains pre-release code and may not be distributed.** You may use this file in accordance with the terms and conditions** contained in the Technology Preview License Agreement accompanying** this package.**** 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, Nokia gives you certain additional** rights. These rights are described in the Nokia Qt LGPL Exception** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.**** If you have questions regarding the use of this file, please contact** Nokia at qt-info@nokia.com.****************** $QT_END_LICENSE$******************************************************************************/#ifndef QGLBUFFER_H#define QGLBUFFER_H#include <QtCore/qscopedpointer.h>#include <QtOpenGL/qgl.h>QT_BEGIN_HEADERQT_BEGIN_NAMESPACEQT_MODULE(OpenGL)class QGLBufferPrivate;class Q_OPENGL_EXPORT QGLBuffer{public: enum Type { VertexBuffer = 0x8892, // GL_ARRAY_BUFFER IndexBuffer = 0x8893, // GL_ELEMENT_ARRAY_BUFFER PixelPackBuffer = 0x88EB, // GL_PIXEL_PACK_BUFFER PixelUnpackBuffer = 0x88EC // GL_PIXEL_UNPACK_BUFFER }; QGLBuffer(); explicit QGLBuffer(QGLBuffer::Type type); QGLBuffer(const QGLBuffer &other); ~QGLBuffer(); QGLBuffer &operator=(const QGLBuffer &other); enum UsagePattern { StreamDraw = 0x88E0, // GL_STREAM_DRAW StreamRead = 0x88E1, // GL_STREAM_READ StreamCopy = 0x88E2, // GL_STREAM_COPY StaticDraw = 0x88E4, // GL_STATIC_DRAW StaticRead = 0x88E5, // GL_STATIC_READ StaticCopy = 0x88E6, // GL_STATIC_COPY DynamicDraw = 0x88E8, // GL_DYNAMIC_DRAW DynamicRead = 0x88E9, // GL_DYNAMIC_READ DynamicCopy = 0x88EA // GL_DYNAMIC_COPY }; enum Access { ReadOnly = 0x88B8, // GL_READ_ONLY WriteOnly = 0x88B9, // GL_WRITE_ONLY ReadWrite = 0x88BA // GL_READ_WRITE }; QGLBuffer::Type type() const; QGLBuffer::UsagePattern usagePattern() const; void setUsagePattern(QGLBuffer::UsagePattern value); bool create(); bool isCreated() const; void destroy(); bool bind(); void release(); static void release(QGLBuffer::Type type); GLuint bufferId() const; int size() const; bool read(int offset, void *data, int count); void write(int offset, const void *data, int count); void allocate(const void *data, int count); inline void allocate(int count) { allocate(0, count); } void *map(QGLBuffer::Access access); bool unmap();private: QGLBufferPrivate *d_ptr; Q_DECLARE_PRIVATE(QGLBuffer)};QT_END_NAMESPACEQT_END_HEADER#endif