summaryrefslogtreecommitdiffstats
path: root/src/datavisualization/engine/drawer.cpp
diff options
context:
space:
mode:
authorTomi Korpipää <tomi.korpipaa@digia.com>2014-03-18 09:49:55 +0200
committerTomi Korpipää <tomi.korpipaa@digia.com>2014-03-24 09:26:16 +0200
commit41ebe7cc1281c5d4c3535154e10edad838e49270 (patch)
tree02f49ab5def84683e236c8a98605fd480e713dc3 /src/datavisualization/engine/drawer.cpp
parent6058ad34c490f505c4acffc30719c8abca165984 (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.cpp40
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,