summaryrefslogtreecommitdiffstats
path: root/examples/opengl/cube/geometryengine.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'examples/opengl/cube/geometryengine.cpp')
-rw-r--r--examples/opengl/cube/geometryengine.cpp46
1 files changed, 22 insertions, 24 deletions
diff --git a/examples/opengl/cube/geometryengine.cpp b/examples/opengl/cube/geometryengine.cpp
index 0a34213084..618a080c37 100644
--- a/examples/opengl/cube/geometryengine.cpp
+++ b/examples/opengl/cube/geometryengine.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the QtCore module of the Qt Toolkit.
@@ -49,29 +49,27 @@ struct VertexData
QVector2D texCoord;
};
+//! [0]
GeometryEngine::GeometryEngine()
+ : indexBuf(QOpenGLBuffer::IndexBuffer)
{
-}
-
-GeometryEngine::~GeometryEngine()
-{
- glDeleteBuffers(2, vboIds);
-}
-
-void GeometryEngine::init()
-{
- initializeGLFunctions();
+ initializeOpenGLFunctions();
-//! [0]
// Generate 2 VBOs
- glGenBuffers(2, vboIds);
-
-//! [0]
+ arrayBuf.create();
+ indexBuf.create();
// Initializes cube geometry and transfers it to VBOs
initCubeGeometry();
}
+GeometryEngine::~GeometryEngine()
+{
+ arrayBuf.destroy();
+ indexBuf.destroy();
+}
+//! [0]
+
void GeometryEngine::initCubeGeometry()
{
// For cube we would need only 8 vertices but we have to
@@ -133,21 +131,21 @@ void GeometryEngine::initCubeGeometry()
//! [1]
// Transfer vertex data to VBO 0
- glBindBuffer(GL_ARRAY_BUFFER, vboIds[0]);
- glBufferData(GL_ARRAY_BUFFER, 24 * sizeof(VertexData), vertices, GL_STATIC_DRAW);
+ arrayBuf.bind();
+ arrayBuf.allocate(vertices, 24 * sizeof(VertexData));
// Transfer index data to VBO 1
- glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vboIds[1]);
- glBufferData(GL_ELEMENT_ARRAY_BUFFER, 34 * sizeof(GLushort), indices, GL_STATIC_DRAW);
+ indexBuf.bind();
+ indexBuf.allocate(indices, 34 * sizeof(GLushort));
//! [1]
}
//! [2]
-void GeometryEngine::drawCubeGeometry(QGLShaderProgram *program)
+void GeometryEngine::drawCubeGeometry(QOpenGLShaderProgram *program)
{
// Tell OpenGL which VBOs to use
- glBindBuffer(GL_ARRAY_BUFFER, vboIds[0]);
- glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vboIds[1]);
+ arrayBuf.bind();
+ indexBuf.bind();
// Offset for position
quintptr offset = 0;
@@ -155,7 +153,7 @@ void GeometryEngine::drawCubeGeometry(QGLShaderProgram *program)
// Tell OpenGL programmable pipeline how to locate vertex position data
int vertexLocation = program->attributeLocation("a_position");
program->enableAttributeArray(vertexLocation);
- glVertexAttribPointer(vertexLocation, 3, GL_FLOAT, GL_FALSE, sizeof(VertexData), (const void *)offset);
+ program->setAttributeBuffer(vertexLocation, GL_FLOAT, offset, 3, sizeof(VertexData));
// Offset for texture coordinate
offset += sizeof(QVector3D);
@@ -163,7 +161,7 @@ void GeometryEngine::drawCubeGeometry(QGLShaderProgram *program)
// Tell OpenGL programmable pipeline how to locate vertex texture coordinate data
int texcoordLocation = program->attributeLocation("a_texcoord");
program->enableAttributeArray(texcoordLocation);
- glVertexAttribPointer(texcoordLocation, 2, GL_FLOAT, GL_FALSE, sizeof(VertexData), (const void *)offset);
+ program->setAttributeBuffer(texcoordLocation, GL_FLOAT, offset, 2, sizeof(VertexData));
// Draw cube geometry using indices from VBO 1
glDrawElements(GL_TRIANGLE_STRIP, 34, GL_UNSIGNED_SHORT, 0);