summaryrefslogtreecommitdiffstats
path: root/src/datavisualization/engine
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
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')
-rw-r--r--src/datavisualization/engine/bars3drenderer.cpp61
-rw-r--r--src/datavisualization/engine/drawer.cpp40
-rw-r--r--src/datavisualization/engine/drawer_p.h2
-rw-r--r--src/datavisualization/engine/meshes/backgroundNegatives.obj14
-rw-r--r--src/datavisualization/engine/scatter3drenderer.cpp67
-rw-r--r--src/datavisualization/engine/scatter3drenderer_p.h4
-rw-r--r--src/datavisualization/engine/surface3drenderer.cpp89
-rw-r--r--src/datavisualization/engine/surface3drenderer_p.h4
8 files changed, 211 insertions, 70 deletions
diff --git a/src/datavisualization/engine/bars3drenderer.cpp b/src/datavisualization/engine/bars3drenderer.cpp
index a7f9e2b3..ead825e4 100644
--- a/src/datavisualization/engine/bars3drenderer.cpp
+++ b/src/datavisualization/engine/bars3drenderer.cpp
@@ -338,7 +338,11 @@ void Bars3DRenderer::drawSlicedScene()
// Draw grid lines
if (m_cachedTheme->isGridEnabled()) {
glDisable(GL_DEPTH_TEST);
+#if !(defined QT_OPENGL_ES_2)
ShaderHelper *lineShader = m_backgroundShader;
+#else
+ ShaderHelper *lineShader = m_selectionShader; // Plain color shader for GL_LINES
+#endif
// Bind line shader
lineShader->bind();
@@ -378,7 +382,11 @@ void Bars3DRenderer::drawSlicedScene()
lineShader->setUniformValue(lineShader->MVP(), MVPMatrix);
// Draw the object
+#if !(defined QT_OPENGL_ES_2)
m_drawer->drawObject(lineShader, m_gridLineObj);
+#else
+ m_drawer->drawLine(lineShader);
+#endif
// Check if we have a line at zero position already
if (gridPos == (barPosYAdjustment + zeroPosAdjustment))
@@ -386,6 +394,7 @@ void Bars3DRenderer::drawSlicedScene()
gridPos += gridStep;
}
+
// Draw a line at zero, if none exists
if (!m_noZeroInRange && noZero) {
QMatrix4x4 modelMatrix;
@@ -400,10 +409,14 @@ void Bars3DRenderer::drawSlicedScene()
itModelMatrix.inverted().transposed());
lineShader->setUniformValue(lineShader->MVP(), MVPMatrix);
lineShader->setUniformValue(lineShader->color(),
- Utils::vectorFromColor(m_cachedTheme->backgroundColor()));
+ Utils::vectorFromColor(m_cachedTheme->labelTextColor()));
// Draw the object
+#if !(defined QT_OPENGL_ES_2)
m_drawer->drawObject(lineShader, m_gridLineObj);
+#else
+ m_drawer->drawLine(lineShader);
+#endif
}
}
@@ -633,7 +646,7 @@ void Bars3DRenderer::drawSlicedScene()
// Create label texture if we need it
if (item.sliceLabel().isNull() || m_updateLabels) {
item.setSliceLabel(generateValueLabel(m_axisCacheY.labelFormat(),
- item.value()));
+ item.value()));
m_drawer->generateLabelItem(item.sliceLabelItem(), item.sliceLabel());
m_updateLabels = false;
}
@@ -658,7 +671,7 @@ void Bars3DRenderer::drawSlicedScene()
// Create label texture if we need it
if (item.sliceLabel().isNull() || m_updateLabels) {
item.setSliceLabel(generateValueLabel(m_axisCacheY.labelFormat(),
- item.value()));
+ item.value()));
m_drawer->generateLabelItem(item.sliceLabelItem(), item.sliceLabel());
m_updateLabels = false;
}
@@ -1073,7 +1086,6 @@ void Bars3DRenderer::drawScene(GLuint defaultFboHandle)
}
// Draw bars
-
GLfloat adjustedLightStrength = m_cachedTheme->lightStrength() / 10.0f;
GLfloat adjustedHighlightStrength = m_cachedTheme->highlightLightStrength() / 10.0f;
@@ -1419,7 +1431,11 @@ void Bars3DRenderer::drawScene(GLuint defaultFboHandle)
// Draw grid lines
if (m_cachedTheme->isGridEnabled() && m_heightNormalizer) {
+#if !(defined QT_OPENGL_ES_2)
ShaderHelper *lineShader = m_backgroundShader;
+#else
+ ShaderHelper *lineShader = m_selectionShader; // Plain color shader for GL_LINES
+#endif
QQuaternion lineRotation;
// Bind bar shader
@@ -1446,11 +1462,9 @@ void Bars3DRenderer::drawScene(GLuint defaultFboHandle)
m_cachedTheme->lightStrength() / 2.5f);
}
- GLfloat yFloorLinePosition = 0.0f;
+ GLfloat yFloorLinePosition = gridLineOffset;
if (m_yFlipped)
- yFloorLinePosition -= gridLineOffset;
- else
- yFloorLinePosition += gridLineOffset;
+ yFloorLinePosition = -yFloorLinePosition;
QVector3D gridLineScaler(rowScaleFactor, gridLineWidth, gridLineWidth);
@@ -1488,15 +1502,19 @@ void Bars3DRenderer::drawScene(GLuint defaultFboHandle)
lineShader->setUniformValue(lineShader->depth(), depthMVPMatrix);
// Draw the object
m_drawer->drawObject(lineShader, m_gridLineObj, 0, m_depthTexture);
- } else
-#endif
- {
+ } else {
// Draw the object
m_drawer->drawObject(lineShader, m_gridLineObj);
}
+#else
+ m_drawer->drawLine(lineShader);
+#endif
}
// Floor lines: columns
+#if defined(QT_OPENGL_ES_2)
+ lineRotation = QQuaternion::fromAxisAndAngle(0.0f, 1.0f, 0.0f, 90.0f);
+#endif
gridLineScaler = QVector3D(gridLineWidth, gridLineWidth, columnScaleFactor);
for (GLfloat bar = 0.0f; bar <= m_cachedColumnCount; bar++) {
QMatrix4x4 modelMatrix;
@@ -1526,12 +1544,13 @@ void Bars3DRenderer::drawScene(GLuint defaultFboHandle)
lineShader->setUniformValue(lineShader->depth(), depthMVPMatrix);
// Draw the object
m_drawer->drawObject(lineShader, m_gridLineObj, 0, m_depthTexture);
- } else
-#endif
- {
+ } else {
// Draw the object
m_drawer->drawObject(lineShader, m_gridLineObj);
}
+#else
+ m_drawer->drawLine(lineShader);
+#endif
}
if (m_axisCacheY.segmentCount() > 0) {
@@ -1583,12 +1602,13 @@ void Bars3DRenderer::drawScene(GLuint defaultFboHandle)
lineShader->setUniformValue(lineShader->depth(), depthMVPMatrix);
// Draw the object
m_drawer->drawObject(lineShader, m_gridLineObj, 0, m_depthTexture);
- } else
-#endif
- {
+ } else {
// Draw the object
m_drawer->drawObject(lineShader, m_gridLineObj);
}
+#else
+ m_drawer->drawLine(lineShader);
+#endif
lineHeight += heightStep;
}
@@ -1632,12 +1652,13 @@ void Bars3DRenderer::drawScene(GLuint defaultFboHandle)
lineShader->setUniformValue(lineShader->depth(), depthMVPMatrix);
// Draw the object
m_drawer->drawObject(lineShader, m_gridLineObj, 0, m_depthTexture);
- } else
-#endif
- {
+ } else {
// Draw the object
m_drawer->drawObject(lineShader, m_gridLineObj);
}
+#else
+ m_drawer->drawLine(lineShader);
+#endif
lineHeight += heightStep;
}
}
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,
diff --git a/src/datavisualization/engine/drawer_p.h b/src/datavisualization/engine/drawer_p.h
index 8e98aa3a..5d10018e 100644
--- a/src/datavisualization/engine/drawer_p.h
+++ b/src/datavisualization/engine/drawer_p.h
@@ -76,6 +76,7 @@ public:
GLuint depthTextureId = 0);
void drawSurfaceGrid(ShaderHelper *shader, SurfaceObject *object);
void drawPoint(ShaderHelper *shader);
+ void drawLine(ShaderHelper *shader);
void drawLabel(const AbstractRenderItem &item, const LabelItem &labelItem,
const QMatrix4x4 &viewmatrix, const QMatrix4x4 &projectionmatrix,
const QVector3D &positionComp, const QVector3D &rotation, GLfloat itemHeight,
@@ -94,6 +95,7 @@ private:
Q3DTheme *m_theme;
TextureHelper *m_textureHelper;
GLuint m_pointbuffer;
+ GLuint m_linebuffer;
};
QT_END_NAMESPACE_DATAVISUALIZATION
diff --git a/src/datavisualization/engine/meshes/backgroundNegatives.obj b/src/datavisualization/engine/meshes/backgroundNegatives.obj
index 76c7c1d8..d314e1fc 100644
--- a/src/datavisualization/engine/meshes/backgroundNegatives.obj
+++ b/src/datavisualization/engine/meshes/backgroundNegatives.obj
@@ -1,18 +1,18 @@
# Blender v2.66 (sub 0) OBJ File: 'backgroudNegativesWall.blend'
# www.blender.org
o Cube
-v 0.999999 1.000000 1.000001
+v 1.000000 1.000000 1.000000
v -1.000000 1.000000 1.000000
v -1.000000 1.000000 -1.000000
v 1.000000 -3.000000 1.000000
v -1.000000 -3.000000 1.000000
v -1.000000 -3.000000 -1.000000
-vt 0.000100 0.000100
-vt 0.500000 0.000100
-vt 0.500000 0.999900
-vt 0.999900 0.000100
-vt 0.999900 0.999900
-vt 0.000100 0.999900
+vt 0.000000 0.000000
+vt 0.500000 0.000000
+vt 0.500000 1.000000
+vt 1.000000 0.000000
+vt 1.000000 1.000000
+vt 0.000000 1.000000
vn 0.000000 -0.000000 -1.000000
vn 1.000000 0.000000 0.000000
s off
diff --git a/src/datavisualization/engine/scatter3drenderer.cpp b/src/datavisualization/engine/scatter3drenderer.cpp
index de1a769a..38e48cc2 100644
--- a/src/datavisualization/engine/scatter3drenderer.cpp
+++ b/src/datavisualization/engine/scatter3drenderer.cpp
@@ -69,7 +69,9 @@ Scatter3DRenderer::Scatter3DRenderer(Scatter3DController *controller)
m_backgroundShader(0),
m_labelShader(0),
m_backgroundObj(0),
+ #if !defined(QT_OPENGL_ES_2)
m_gridLineObj(0),
+ #endif
m_labelObj(0),
m_bgrTexture(0),
m_depthTexture(0),
@@ -112,7 +114,9 @@ Scatter3DRenderer::~Scatter3DRenderer()
delete m_backgroundShader;
delete m_labelShader;
delete m_backgroundObj;
+#if !defined(QT_OPENGL_ES_2)
delete m_gridLineObj;
+#endif
delete m_labelObj;
}
@@ -135,8 +139,10 @@ void Scatter3DRenderer::initializeOpenGL()
// Init selection shader
initSelectionShader();
+#if !defined(QT_OPENGL_ES_2)
// Load grid line mesh
loadGridLineMesh();
+#endif
// Load label mesh
loadLabelMesh();
@@ -848,7 +854,11 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle)
#endif
if (m_cachedTheme->isGridEnabled() && m_heightNormalizer) {
+#if !(defined QT_OPENGL_ES_2)
ShaderHelper *lineShader = m_backgroundShader;
+#else
+ ShaderHelper *lineShader = m_selectionShader; // Plain color shader for GL_LINES
+#endif
// Bind line shader
lineShader->bind();
@@ -942,12 +952,13 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle)
lineShader->setUniformValue(lineShader->depth(), depthMVPMatrix);
// Draw the object
m_drawer->drawObject(lineShader, m_gridLineObj, 0, m_depthTexture);
- } else
-#endif
- {
+ } else {
// Draw the object
m_drawer->drawObject(lineShader, m_gridLineObj);
}
+#else
+ m_drawer->drawLine(lineShader);
+#endif
linePos -= lineStep;
}
@@ -976,8 +987,13 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle)
modelMatrix.scale(gridLineScaler);
itModelMatrix.scale(gridLineScaler);
+#if !defined(QT_OPENGL_ES_2)
modelMatrix.rotate(lineYRotation);
itModelMatrix.rotate(lineYRotation);
+#else
+ modelMatrix.rotate(90.0f, 0.0f, 0.0f, 1.0f);
+ itModelMatrix.rotate(90.0f, 0.0f, 0.0f, 1.0f);
+#endif
MVPMatrix = projectionViewMatrix * modelMatrix;
@@ -994,18 +1010,22 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle)
lineShader->setUniformValue(lineShader->depth(), depthMVPMatrix);
// Draw the object
m_drawer->drawObject(lineShader, m_gridLineObj, 0, m_depthTexture);
- } else
-#endif
- {
+ } else {
// Draw the object
m_drawer->drawObject(lineShader, m_gridLineObj);
}
+#else
+ m_drawer->drawLine(lineShader);
+#endif
linePos -= lineStep;
}
}
// Columns (= X)
if (m_axisCacheX.segmentCount() > 0) {
+#if defined(QT_OPENGL_ES_2)
+ lineXRotation = QQuaternion::fromAxisAndAngle(0.0f, 1.0f, 0.0f, 90.0f);
+#endif
// Floor lines
#ifndef USE_UNIFORM_SCALING
GLfloat lineStep = aspectRatio * m_axisCacheX.subSegmentStep();
@@ -1051,12 +1071,13 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle)
lineShader->setUniformValue(lineShader->depth(), depthMVPMatrix);
// Draw the object
m_drawer->drawObject(lineShader, m_gridLineObj, 0, m_depthTexture);
- } else
-#endif
- {
+ } else {
// Draw the object
m_drawer->drawObject(lineShader, m_gridLineObj);
}
+#else
+ m_drawer->drawLine(lineShader);
+#endif
linePos += lineStep;
}
@@ -1086,10 +1107,15 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle)
modelMatrix.scale(gridLineScaler);
itModelMatrix.scale(gridLineScaler);
+#if !defined(QT_OPENGL_ES_2)
if (m_zFlipped) {
modelMatrix.rotate(180.0f, 1.0f, 0.0f, 0.0f);
itModelMatrix.rotate(180.0f, 1.0f, 0.0f, 0.0f);
}
+#else
+ modelMatrix.rotate(90.0f, 0.0f, 0.0f, 1.0f);
+ itModelMatrix.rotate(90.0f, 0.0f, 0.0f, 1.0f);
+#endif
MVPMatrix = projectionViewMatrix * modelMatrix;
@@ -1106,12 +1132,13 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle)
lineShader->setUniformValue(lineShader->depth(), depthMVPMatrix);
// Draw the object
m_drawer->drawObject(lineShader, m_gridLineObj, 0, m_depthTexture);
- } else
-#endif
- {
+ } else {
// Draw the object
m_drawer->drawObject(lineShader, m_gridLineObj);
}
+#else
+ m_drawer->drawLine(lineShader);
+#endif
linePos += lineStep;
}
}
@@ -1170,12 +1197,13 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle)
lineShader->setUniformValue(lineShader->depth(), depthMVPMatrix);
// Draw the object
m_drawer->drawObject(lineShader, m_gridLineObj, 0, m_depthTexture);
- } else
-#endif
- {
+ } else {
// Draw the object
m_drawer->drawObject(lineShader, m_gridLineObj);
}
+#else
+ m_drawer->drawLine(lineShader);
+#endif
linePos += lineStep;
}
@@ -1228,12 +1256,13 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle)
lineShader->setUniformValue(lineShader->depth(), depthMVPMatrix);
// Draw the object
m_drawer->drawObject(lineShader, m_gridLineObj, 0, m_depthTexture);
- } else
-#endif
- {
+ } else {
// Draw the object
m_drawer->drawObject(lineShader, m_gridLineObj);
}
+#else
+ m_drawer->drawLine(lineShader);
+#endif
linePos += lineStep;
}
}
@@ -1604,6 +1633,7 @@ void Scatter3DRenderer::loadBackgroundMesh()
m_backgroundObj->load();
}
+#if !(defined QT_OPENGL_ES_2)
void Scatter3DRenderer::loadGridLineMesh()
{
if (m_gridLineObj)
@@ -1611,6 +1641,7 @@ void Scatter3DRenderer::loadGridLineMesh()
m_gridLineObj = new ObjectHelper(QStringLiteral(":/defaultMeshes/plane"));
m_gridLineObj->load();
}
+#endif
void Scatter3DRenderer::loadLabelMesh()
{
diff --git a/src/datavisualization/engine/scatter3drenderer_p.h b/src/datavisualization/engine/scatter3drenderer_p.h
index 5591a362..b82ff4ae 100644
--- a/src/datavisualization/engine/scatter3drenderer_p.h
+++ b/src/datavisualization/engine/scatter3drenderer_p.h
@@ -68,7 +68,9 @@ private:
ShaderHelper *m_backgroundShader;
ShaderHelper *m_labelShader;
ObjectHelper *m_backgroundObj;
+#if !(defined QT_OPENGL_ES_2)
ObjectHelper *m_gridLineObj;
+#endif
ObjectHelper *m_labelObj;
GLuint m_bgrTexture;
GLuint m_depthTexture;
@@ -121,13 +123,13 @@ private:
void drawScene(GLuint defaultFboHandle);
void loadBackgroundMesh();
- void loadGridLineMesh();
void loadLabelMesh();
void initSelectionShader();
void initBackgroundShaders(const QString &vertexShader, const QString &fragmentShader);
void initLabelShaders(const QString &vertexShader, const QString &fragmentShader);
void initSelectionBuffer();
#if !defined(QT_OPENGL_ES_2)
+ void loadGridLineMesh();
void initDepthShader();
void updateDepthBuffer();
#else
diff --git a/src/datavisualization/engine/surface3drenderer.cpp b/src/datavisualization/engine/surface3drenderer.cpp
index 41415393..243c27de 100644
--- a/src/datavisualization/engine/surface3drenderer.cpp
+++ b/src/datavisualization/engine/surface3drenderer.cpp
@@ -72,7 +72,9 @@ Surface3DRenderer::Surface3DRenderer(Surface3DController *controller)
m_visibleColumnRange(0.0f),
m_visibleRowRange(0.0f),
m_backgroundObj(0),
+ #if !defined(QT_OPENGL_ES_2)
m_gridLineObj(0),
+ #endif
m_labelObj(0),
m_depthTexture(0),
m_depthModelTexture(0),
@@ -133,7 +135,9 @@ Surface3DRenderer::~Surface3DRenderer()
delete m_labelShader;
delete m_backgroundObj;
+#if !defined(QT_OPENGL_ES_2)
delete m_gridLineObj;
+#endif
delete m_labelObj;
foreach (SurfaceSeriesRenderCache *cache, m_renderCacheList) {
@@ -160,8 +164,10 @@ void Surface3DRenderer::initializeOpenGL()
// Init selection shader
initSelectionShaders();
+#if !(defined QT_OPENGL_ES_2)
// Load grid line mesh
loadGridLineMesh();
+#endif
// Load label mesh
loadLabelMesh();
@@ -415,7 +421,7 @@ void Surface3DRenderer::updateSliceDataModel(const QPoint &point)
if (m_cachedSelectionMode.testFlag(QAbstract3DGraph::SelectionMultiSeries)) {
// Find axis coordinates for the selected point
SurfaceSeriesRenderCache *selectedCache =
- m_renderCacheList.value(const_cast<QSurface3DSeries *>(m_selectedSeries));
+ m_renderCacheList.value(const_cast<QSurface3DSeries *>(m_selectedSeries));
QSurfaceDataArray &dataArray = selectedCache->dataArray();
QSurfaceDataItem item = dataArray.at(point.x())->at(point.y());
QPointF coords(item.x(), item.z());
@@ -536,7 +542,7 @@ void Surface3DRenderer::updateSliceObject(SurfaceSeriesRenderCache *cache, const
int row = point.x();
if ((m_cachedSelectionMode.testFlag(QAbstract3DGraph::SelectionRow) && row == -1) ||
- (m_cachedSelectionMode.testFlag(QAbstract3DGraph::SelectionColumn) && column == -1)) {
+ (m_cachedSelectionMode.testFlag(QAbstract3DGraph::SelectionColumn) && column == -1)) {
cache->sliceSurfaceObject()->clear();
return;
}
@@ -847,7 +853,11 @@ void Surface3DRenderer::drawSlicedScene()
// Grid lines
if (m_cachedTheme->isGridEnabled() && m_heightNormalizer) {
+#if !(defined QT_OPENGL_ES_2)
ShaderHelper *lineShader = m_backgroundShader;
+#else
+ ShaderHelper *lineShader = m_selectionShader; // Plain color shader for GL_LINES
+#endif
// Bind line shader
lineShader->bind();
@@ -888,7 +898,11 @@ void Surface3DRenderer::drawSlicedScene()
lineShader->setUniformValue(lineShader->MVP(), MVPMatrix);
// Draw the object
+#if !(defined QT_OPENGL_ES_2)
m_drawer->drawObject(lineShader, m_gridLineObj);
+#else
+ m_drawer->drawLine(lineShader);
+#endif
linePos += lineStep;
}
@@ -918,6 +932,10 @@ void Surface3DRenderer::drawSlicedScene()
modelMatrix.translate(linePos, 0.0f, -sliceZScale);
modelMatrix.scale(gridLineScaleY);
itModelMatrix.scale(gridLineScaleY);
+#if (defined QT_OPENGL_ES_2)
+ modelMatrix.rotate(90.0f, 0.0f, 0.0f, 1.0f);
+ itModelMatrix.rotate(90.0f, 0.0f, 0.0f, 1.0f);
+#endif
MVPMatrix = projectionViewMatrix * modelMatrix;
@@ -928,7 +946,11 @@ void Surface3DRenderer::drawSlicedScene()
lineShader->setUniformValue(lineShader->MVP(), MVPMatrix);
// Draw the object
+#if !(defined QT_OPENGL_ES_2)
m_drawer->drawObject(lineShader, m_gridLineObj);
+#else
+ m_drawer->drawLine(lineShader);
+#endif
linePos += lineStep;
}
@@ -1436,7 +1458,11 @@ void Surface3DRenderer::drawScene(GLuint defaultFboHandle)
QVector3D gridLineScaleY(gridLineWidth, backgroundMargin, gridLineWidth);
if (m_cachedTheme->isGridEnabled() && m_heightNormalizer) {
+#if !(defined QT_OPENGL_ES_2)
ShaderHelper *lineShader = m_backgroundShader;
+#else
+ ShaderHelper *lineShader = m_selectionShader; // Plain color shader for GL_LINES
+#endif
// Bind line shader
lineShader->bind();
@@ -1514,12 +1540,13 @@ void Surface3DRenderer::drawScene(GLuint defaultFboHandle)
lineShader->setUniformValue(lineShader->depth(), depthMVPMatrix);
// Draw the object
m_drawer->drawObject(lineShader, m_gridLineObj, 0, m_depthTexture);
- } else
-#endif
- {
+ } else {
// Draw the object
m_drawer->drawObject(lineShader, m_gridLineObj);
}
+#else
+ m_drawer->drawLine(lineShader);
+#endif
linePos -= lineStep;
}
@@ -1540,8 +1567,13 @@ void Surface3DRenderer::drawScene(GLuint defaultFboHandle)
modelMatrix.scale(gridLineScaleY);
itModelMatrix.scale(gridLineScaleY);
+#if !defined(QT_OPENGL_ES_2)
modelMatrix.rotate(lineYRotation);
itModelMatrix.rotate(lineYRotation);
+#else
+ modelMatrix.rotate(90.0f, 0.0f, 0.0f, 1.0f);
+ itModelMatrix.rotate(90.0f, 0.0f, 0.0f, 1.0f);
+#endif
MVPMatrix = projectionViewMatrix * modelMatrix;
@@ -1558,18 +1590,22 @@ void Surface3DRenderer::drawScene(GLuint defaultFboHandle)
lineShader->setUniformValue(lineShader->depth(), depthMVPMatrix);
// Draw the object
m_drawer->drawObject(lineShader, m_gridLineObj, 0, m_depthTexture);
- } else
-#endif
- {
+ } else {
// Draw the object
m_drawer->drawObject(lineShader, m_gridLineObj);
}
+#else
+ m_drawer->drawLine(lineShader);
+#endif
linePos -= lineStep;
}
}
// Columns (= X)
if (m_axisCacheX.segmentCount() > 0) {
+#if defined(QT_OPENGL_ES_2)
+ lineXRotation = QQuaternion::fromAxisAndAngle(0.0f, 1.0f, 0.0f, 90.0f);
+#endif
// Floor lines
GLfloat lineStep = -2.0f * aspectRatio * m_axisCacheX.subSegmentStep() / m_scaleFactor;
GLfloat linePos = m_scaleX;
@@ -1603,12 +1639,13 @@ void Surface3DRenderer::drawScene(GLuint defaultFboHandle)
lineShader->setUniformValue(lineShader->depth(), depthMVPMatrix);
// Draw the object
m_drawer->drawObject(lineShader, m_gridLineObj, 0, m_depthTexture);
- } else
-#endif
- {
+ } else {
// Draw the object
m_drawer->drawObject(lineShader, m_gridLineObj);
}
+#else
+ m_drawer->drawLine(lineShader);
+#endif
linePos += lineStep;
}
@@ -1629,10 +1666,15 @@ void Surface3DRenderer::drawScene(GLuint defaultFboHandle)
modelMatrix.scale(gridLineScaleY);
itModelMatrix.scale(gridLineScaleY);
+#if !defined(QT_OPENGL_ES_2)
if (m_zFlipped) {
modelMatrix.rotate(180.0f, 1.0f, 0.0f, 0.0f);
itModelMatrix.rotate(180.0f, 1.0f, 0.0f, 0.0f);
}
+#else
+ modelMatrix.rotate(90.0f, 0.0f, 0.0f, 1.0f);
+ itModelMatrix.rotate(90.0f, 0.0f, 0.0f, 1.0f);
+#endif
MVPMatrix = projectionViewMatrix * modelMatrix;
@@ -1649,12 +1691,13 @@ void Surface3DRenderer::drawScene(GLuint defaultFboHandle)
lineShader->setUniformValue(lineShader->depth(), depthMVPMatrix);
// Draw the object
m_drawer->drawObject(lineShader, m_gridLineObj, 0, m_depthTexture);
- } else
-#endif
- {
+ } else {
// Draw the object
m_drawer->drawObject(lineShader, m_gridLineObj);
}
+#else
+ m_drawer->drawLine(lineShader);
+#endif
linePos += lineStep;
}
}
@@ -1701,12 +1744,13 @@ void Surface3DRenderer::drawScene(GLuint defaultFboHandle)
lineShader->setUniformValue(lineShader->depth(), depthMVPMatrix);
// Draw the object
m_drawer->drawObject(lineShader, m_gridLineObj, 0, m_depthTexture);
- } else
-#endif
- {
+ } else {
// Draw the object
m_drawer->drawObject(lineShader, m_gridLineObj);
}
+#else
+ m_drawer->drawLine(lineShader);
+#endif
linePos += lineStep;
}
@@ -1746,12 +1790,13 @@ void Surface3DRenderer::drawScene(GLuint defaultFboHandle)
lineShader->setUniformValue(lineShader->depth(), depthMVPMatrix);
// Draw the object
m_drawer->drawObject(lineShader, m_gridLineObj, 0, m_depthTexture);
- } else
-#endif
- {
+ } else {
// Draw the object
m_drawer->drawObject(lineShader, m_gridLineObj);
}
+#else
+ m_drawer->drawLine(lineShader);
+#endif
linePos += lineStep;
}
}
@@ -2129,6 +2174,7 @@ void Surface3DRenderer::loadBackgroundMesh()
m_backgroundObj->load();
}
+#if !(defined QT_OPENGL_ES_2)
void Surface3DRenderer::loadGridLineMesh()
{
if (m_gridLineObj)
@@ -2136,6 +2182,7 @@ void Surface3DRenderer::loadGridLineMesh()
m_gridLineObj = new ObjectHelper(QStringLiteral(":/defaultMeshes/plane"));
m_gridLineObj->load();
}
+#endif
void Surface3DRenderer::surfacePointSelected(const QPoint &point)
{
@@ -2147,7 +2194,7 @@ void Surface3DRenderer::surfacePointSelected(const QPoint &point)
if (m_cachedSelectionMode.testFlag(QAbstract3DGraph::SelectionMultiSeries)) {
// Find axis coordinates for the selected point
SurfaceSeriesRenderCache *selectedCache =
- m_renderCacheList.value(const_cast<QSurface3DSeries *>(m_selectedSeries));
+ m_renderCacheList.value(const_cast<QSurface3DSeries *>(m_selectedSeries));
QSurfaceDataArray &dataArray = selectedCache->dataArray();
QSurfaceDataItem item = dataArray.at(point.x())->at(point.y());
QPointF coords(item.x(), item.z());
diff --git a/src/datavisualization/engine/surface3drenderer_p.h b/src/datavisualization/engine/surface3drenderer_p.h
index 2c55d902..5d93ee4a 100644
--- a/src/datavisualization/engine/surface3drenderer_p.h
+++ b/src/datavisualization/engine/surface3drenderer_p.h
@@ -74,7 +74,9 @@ private:
GLfloat m_visibleColumnRange;
GLfloat m_visibleRowRange;
ObjectHelper *m_backgroundObj;
+#if !(defined QT_OPENGL_ES_2)
ObjectHelper *m_gridLineObj;
+#endif
ObjectHelper *m_labelObj;
GLuint m_depthTexture;
GLuint m_depthModelTexture;
@@ -138,7 +140,6 @@ private:
void initShaders(const QString &vertexShader, const QString &fragmentShader);
QRect calculateSampleRect(SurfaceSeriesRenderCache *cache, const QSurfaceDataArray &array);
void loadBackgroundMesh();
- void loadGridLineMesh();
void loadLabelMesh();
void drawScene(GLuint defaultFboHandle);
void calculateSceneScalingFactors();
@@ -157,6 +158,7 @@ private:
QPoint selectionIdToSurfacePoint(uint id);
QString createSelectionLabel(SurfaceSeriesRenderCache *cache, float value, int column, int row);
#if !defined(QT_OPENGL_ES_2)
+ void loadGridLineMesh();
void updateDepthBuffer();
#endif
void emitSelectedPointChanged(QPoint position);