summaryrefslogtreecommitdiffstats
path: root/src/datavisualization/engine
diff options
context:
space:
mode:
Diffstat (limited to 'src/datavisualization/engine')
-rw-r--r--src/datavisualization/engine/abstract3drenderer.cpp19
-rw-r--r--src/datavisualization/engine/bars3drenderer.cpp9
-rw-r--r--src/datavisualization/engine/scatter3drenderer.cpp8
-rw-r--r--src/datavisualization/engine/surface3drenderer.cpp8
4 files changed, 27 insertions, 17 deletions
diff --git a/src/datavisualization/engine/abstract3drenderer.cpp b/src/datavisualization/engine/abstract3drenderer.cpp
index bff24bc7..6fde5f20 100644
--- a/src/datavisualization/engine/abstract3drenderer.cpp
+++ b/src/datavisualization/engine/abstract3drenderer.cpp
@@ -542,10 +542,11 @@ void Abstract3DRenderer::addCustomItem(QCustom3DItem *item) {
newItem->setMesh(item->meshFile());
newItem->setScaling(item->scaling());
newItem->setRotation(item->rotation());
- GLuint texture = m_textureHelper->create2DTexture(item->d_ptr->textureImage(),
- true, true, true);
+ QImage textureImage = item->d_ptr->textureImage();
+ newItem->setBlendNeeded(textureImage.hasAlphaChannel());
+ GLuint texture = m_textureHelper->create2DTexture(textureImage, true, true, true);
newItem->setTexture(texture);
- // TODO: Uncomment this once custom item render cache handling has been optimized
+ // TODO: Uncomment this once custom item render cache handling has been optimized (QTRD-3056)
//item->d_ptr->clearTextureImage();
QVector3D translation = convertPositionToTranslation(item->position());
newItem->setTranslation(translation);
@@ -574,8 +575,6 @@ void Abstract3DRenderer::drawCustomItems(RenderingState state,
shader->setUniformValue(shader->view(), viewMatrix);
glEnable(GL_TEXTURE_2D);
- glEnable(GL_BLEND);
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
}
// Draw custom items
@@ -597,6 +596,15 @@ void Abstract3DRenderer::drawCustomItems(RenderingState state,
shader->setUniformValue(shader->MVP(), MVPMatrix);
shader->setUniformValue(shader->nModel(), itModelMatrix.inverted().transposed());
+ if (item->isBlendNeeded()) {
+ glEnable(GL_BLEND);
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ glDisable(GL_CULL_FACE);
+ } else {
+ glDisable(GL_BLEND);
+ glEnable(GL_CULL_FACE);
+ }
+
#if !defined(QT_OPENGL_ES_2)
if (m_cachedShadowQuality > QAbstract3DGraph::ShadowQualityNone) {
// Set shadow shader bindings
@@ -632,6 +640,7 @@ void Abstract3DRenderer::drawCustomItems(RenderingState state,
if (RenderingNormal == state) {
glDisable(GL_TEXTURE_2D);
glDisable(GL_BLEND);
+ glEnable(GL_CULL_FACE);
}
}
diff --git a/src/datavisualization/engine/bars3drenderer.cpp b/src/datavisualization/engine/bars3drenderer.cpp
index 015f76d5..661c3f3e 100644
--- a/src/datavisualization/engine/bars3drenderer.cpp
+++ b/src/datavisualization/engine/bars3drenderer.cpp
@@ -1474,10 +1474,6 @@ void Bars3DRenderer::drawScene(GLuint defaultFboHandle)
// Reset culling
glCullFace(GL_BACK);
- Abstract3DRenderer::drawCustomItems(RenderingNormal, m_customItemShader, viewMatrix,
- projectionViewMatrix, depthProjectionViewMatrix,
- m_depthTexture, m_shadowQualityToShader);
-
// Bind background shader
m_backgroundShader->bind();
@@ -1800,6 +1796,11 @@ void Bars3DRenderer::drawScene(GLuint defaultFboHandle)
}
}
}
+
+ Abstract3DRenderer::drawCustomItems(RenderingNormal, m_customItemShader, viewMatrix,
+ projectionViewMatrix, depthProjectionViewMatrix,
+ m_depthTexture, m_shadowQualityToShader);
+
drawLabels(false, activeCamera, viewMatrix, projectionMatrix, rowScaleFactor,
columnScaleFactor);
diff --git a/src/datavisualization/engine/scatter3drenderer.cpp b/src/datavisualization/engine/scatter3drenderer.cpp
index 9e8712e3..b71cd22b 100644
--- a/src/datavisualization/engine/scatter3drenderer.cpp
+++ b/src/datavisualization/engine/scatter3drenderer.cpp
@@ -806,10 +806,6 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle)
}
#endif
- Abstract3DRenderer::drawCustomItems(RenderingNormal, m_customItemShader, viewMatrix,
- projectionViewMatrix, depthProjectionViewMatrix,
- m_depthTexture, m_shadowQualityToShader);
-
// Bind background shader
m_backgroundShader->bind();
@@ -1280,6 +1276,10 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle)
}
}
+ Abstract3DRenderer::drawCustomItems(RenderingNormal, m_customItemShader, viewMatrix,
+ projectionViewMatrix, depthProjectionViewMatrix,
+ m_depthTexture, m_shadowQualityToShader);
+
drawLabels(false, activeCamera, viewMatrix, projectionMatrix);
// Handle selection clearing and selection label drawing
diff --git a/src/datavisualization/engine/surface3drenderer.cpp b/src/datavisualization/engine/surface3drenderer.cpp
index f405212f..a75cf699 100644
--- a/src/datavisualization/engine/surface3drenderer.cpp
+++ b/src/datavisualization/engine/surface3drenderer.cpp
@@ -1361,10 +1361,6 @@ void Surface3DRenderer::drawScene(GLuint defaultFboHandle)
}
}
- Abstract3DRenderer::drawCustomItems(RenderingNormal, m_customItemShader, viewMatrix,
- projectionViewMatrix, depthProjectionViewMatrix,
- m_depthTexture, m_shadowQualityToShader);
-
// Bind background shader
m_backgroundShader->bind();
glCullFace(GL_BACK);
@@ -1770,6 +1766,10 @@ void Surface3DRenderer::drawScene(GLuint defaultFboHandle)
}
}
+ Abstract3DRenderer::drawCustomItems(RenderingNormal, m_customItemShader, viewMatrix,
+ projectionViewMatrix, depthProjectionViewMatrix,
+ m_depthTexture, m_shadowQualityToShader);
+
drawLabels(false, activeCamera, viewMatrix, projectionMatrix);
// Release shader