diff options
author | Tomi Korpipää <tomi.korpipaa@digia.com> | 2014-03-18 09:49:55 +0200 |
---|---|---|
committer | Tomi Korpipää <tomi.korpipaa@digia.com> | 2014-03-24 09:26:16 +0200 |
commit | 41ebe7cc1281c5d4c3535154e10edad838e49270 (patch) | |
tree | 02f49ab5def84683e236c8a98605fd480e713dc3 /src/datavisualization/engine/drawer.cpp | |
parent | 6058ad34c490f505c4acffc30719c8abca165984 (diff) |
Use GL_LINES for ES2 grid lines
Task-number: QTRD-2527
Change-Id: I08b9c740f6dfaf8107601cfc1e7e53db13bf8268
Note: Not to be merged until 1.0 is released
Reviewed-by: Tomi Korpipää <tomi.korpipaa@digia.com>
Diffstat (limited to 'src/datavisualization/engine/drawer.cpp')
-rw-r--r-- | src/datavisualization/engine/drawer.cpp | 40 |
1 files changed, 38 insertions, 2 deletions
diff --git a/src/datavisualization/engine/drawer.cpp b/src/datavisualization/engine/drawer.cpp index 55a2c2a5..38c15a58 100644 --- a/src/datavisualization/engine/drawer.cpp +++ b/src/datavisualization/engine/drawer.cpp @@ -45,18 +45,27 @@ QT_BEGIN_NAMESPACE_DATAVISUALIZATION // Vertex array buffer for point const GLfloat point_data[] = {0.0f, 0.0f, 0.0f}; +// Vertex array buffer for line +const GLfloat line_data[] = { + -1.0f, 0.0f, 0.0f, + 1.0f, 0.0f, 0.0f, +}; + Drawer::Drawer(Q3DTheme *theme) : m_theme(theme), m_textureHelper(0), - m_pointbuffer(0) + m_pointbuffer(0), + m_linebuffer(0) { } Drawer::~Drawer() { delete m_textureHelper; - if (QOpenGLContext::currentContext()) + if (QOpenGLContext::currentContext()) { glDeleteBuffers(1, &m_pointbuffer); + glDeleteBuffers(1, &m_linebuffer); + } } void Drawer::initializeOpenGL() @@ -162,6 +171,8 @@ void Drawer::drawSurfaceGrid(ShaderHelper *shader, SurfaceObject *object) void Drawer::drawPoint(ShaderHelper *shader) { + // Draw a single point + // Generate vertex buffer for point if it does not exist if (!m_pointbuffer) { glGenBuffers(1, &m_pointbuffer); @@ -183,6 +194,31 @@ void Drawer::drawPoint(ShaderHelper *shader) glDisableVertexAttribArray(shader->posAtt()); } +void Drawer::drawLine(ShaderHelper *shader) +{ + // Draw a single line + + // Generate vertex buffer for line if it does not exist + if (!m_linebuffer) { + glGenBuffers(1, &m_linebuffer); + glBindBuffer(GL_ARRAY_BUFFER, m_linebuffer); + glBufferData(GL_ARRAY_BUFFER, sizeof(line_data), line_data, GL_STATIC_DRAW); + } + + // 1st attribute buffer : vertices + glEnableVertexAttribArray(shader->posAtt()); + glBindBuffer(GL_ARRAY_BUFFER, m_linebuffer); + glVertexAttribPointer(shader->posAtt(), 3, GL_FLOAT, GL_FALSE, 0, (void*)0); + + // Draw the line + glDrawArrays(GL_LINES, 0, 2); + + // Free buffers + glBindBuffer(GL_ARRAY_BUFFER, 0); + + glDisableVertexAttribArray(shader->posAtt()); +} + void Drawer::drawLabel(const AbstractRenderItem &item, const LabelItem &labelItem, const QMatrix4x4 &viewmatrix, const QMatrix4x4 &projectionmatrix, const QVector3D &positionComp, const QVector3D &rotation, |