diff options
Diffstat (limited to 'src/datavisualization/engine/drawer.cpp')
-rw-r--r-- | src/datavisualization/engine/drawer.cpp | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/src/datavisualization/engine/drawer.cpp b/src/datavisualization/engine/drawer.cpp index 8643d6d9..93336e96 100644 --- a/src/datavisualization/engine/drawer.cpp +++ b/src/datavisualization/engine/drawer.cpp @@ -41,17 +41,22 @@ StaticLibInitializer staticLibInitializer; QT_DATAVISUALIZATION_BEGIN_NAMESPACE +// Vertex array buffer for point +const GLfloat point_data[] = {0.0f, 0.0f, 0.0f}; + Drawer::Drawer(const Theme &theme, const QFont &font, QDataVis::LabelStyle style) : m_theme(theme), m_font(font), m_style(style), - m_textureHelper(0) + m_textureHelper(0), + m_pointbuffer(0) { } Drawer::~Drawer() { delete m_textureHelper; + glDeleteBuffers(1, &m_pointbuffer); } void Drawer::initializeOpenGL() @@ -163,6 +168,29 @@ void Drawer::drawSurfaceGrid(ShaderHelper *shader, SurfaceObject *object) glDisableVertexAttribArray(shader->posAtt()); } +void Drawer::drawPoint(ShaderHelper *shader) +{ + // Generate vertex buffer for point if it does not exist + if (!m_pointbuffer) { + glGenBuffers(1, &m_pointbuffer); + glBindBuffer(GL_ARRAY_BUFFER, m_pointbuffer); + glBufferData(GL_ARRAY_BUFFER, sizeof(point_data), point_data, GL_STATIC_DRAW); + } + + // 1st attribute buffer : vertices + glEnableVertexAttribArray(shader->posAtt()); + glBindBuffer(GL_ARRAY_BUFFER, m_pointbuffer); + glVertexAttribPointer(shader->posAtt(), 3, GL_FLOAT, GL_FALSE, 0, (void*)0); + + // Draw the point + glDrawArrays(GL_POINTS, 0, 1); + + // 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, |