summaryrefslogtreecommitdiffstats
path: root/examples/opengl/hellowindow/hellowindow.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'examples/opengl/hellowindow/hellowindow.cpp')
-rw-r--r--examples/opengl/hellowindow/hellowindow.cpp39
1 files changed, 20 insertions, 19 deletions
diff --git a/examples/opengl/hellowindow/hellowindow.cpp b/examples/opengl/hellowindow/hellowindow.cpp
index 3b5971c0d3..57eb111edb 100644
--- a/examples/opengl/hellowindow/hellowindow.cpp
+++ b/examples/opengl/hellowindow/hellowindow.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 examples of the Qt Toolkit.
@@ -145,29 +145,33 @@ void Renderer::render()
QOpenGLFunctions *f = m_context->functions();
f->glViewport(0, 0, viewSize.width() * surface->devicePixelRatio(), viewSize.height() * surface->devicePixelRatio());
-
- f->glClearColor(0.1f, 0.1f, 0.2f, 1.0f);
f->glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+ f->glClearColor(0.1f, 0.1f, 0.2f, 1.0f);
f->glFrontFace(GL_CW);
f->glCullFace(GL_FRONT);
f->glEnable(GL_CULL_FACE);
f->glEnable(GL_DEPTH_TEST);
+ m_program->bind();
+ m_vbo.bind();
+
+ m_program->enableAttributeArray(vertexAttr);
+ m_program->enableAttributeArray(normalAttr);
+ m_program->setAttributeBuffer(vertexAttr, GL_FLOAT, 0, 3);
+ const int verticesSize = vertices.count() * 3 * sizeof(GLfloat);
+ m_program->setAttributeBuffer(normalAttr, GL_FLOAT, verticesSize, 3);
+
QMatrix4x4 modelview;
modelview.rotate(m_fAngle, 0.0f, 1.0f, 0.0f);
modelview.rotate(m_fAngle, 1.0f, 0.0f, 0.0f);
modelview.rotate(m_fAngle, 0.0f, 0.0f, 1.0f);
modelview.translate(0.0f, -0.2f, 0.0f);
- m_program->bind();
m_program->setUniformValue(matrixUniform, modelview);
m_program->setUniformValue(colorUniform, color);
- paintQtLogo();
- m_program->release();
- f->glDisable(GL_DEPTH_TEST);
- f->glDisable(GL_CULL_FACE);
+ m_context->functions()->glDrawArrays(GL_TRIANGLES, 0, vertices.size());
m_context->swapBuffers(surface);
@@ -176,17 +180,6 @@ void Renderer::render()
QTimer::singleShot(0, this, SLOT(render()));
}
-void Renderer::paintQtLogo()
-{
- m_program->enableAttributeArray(normalAttr);
- m_program->enableAttributeArray(vertexAttr);
- m_program->setAttributeArray(vertexAttr, vertices.constData());
- m_program->setAttributeArray(normalAttr, normals.constData());
- glDrawArrays(GL_TRIANGLES, 0, vertices.size());
- m_program->disableAttributeArray(normalAttr);
- m_program->disableAttributeArray(vertexAttr);
-}
-
void Renderer::initialize()
{
QOpenGLShader *vshader = new QOpenGLShader(QOpenGLShader::Vertex, this);
@@ -218,6 +211,7 @@ void Renderer::initialize()
m_program->addShader(vshader);
m_program->addShader(fshader);
m_program->link();
+ m_program->bind();
vertexAttr = m_program->attributeLocation("vertex");
normalAttr = m_program->attributeLocation("normal");
@@ -226,6 +220,13 @@ void Renderer::initialize()
m_fAngle = 0;
createGeometry();
+
+ m_vbo.create();
+ m_vbo.bind();
+ const int verticesSize = vertices.count() * 3 * sizeof(GLfloat);
+ m_vbo.allocate(verticesSize * 2);
+ m_vbo.write(0, vertices.constData(), verticesSize);
+ m_vbo.write(verticesSize, normals.constData(), verticesSize);
}
void Renderer::createGeometry()