summaryrefslogtreecommitdiffstats
path: root/src/datavisualization/engine/abstract3drenderer.cpp
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@digia.com>2014-09-19 11:05:27 +0300
committerMiikka Heikkinen <miikka.heikkinen@digia.com>2014-09-19 11:12:11 +0300
commit105e85170d35f7086dc96d1853298fcf8d680e06 (patch)
tree295d8fd37832014ce1e65ab12d57f6aae757740b /src/datavisualization/engine/abstract3drenderer.cpp
parent98e0c04fe78da9735c2943524bd36648b2654f98 (diff)
Change custom labels to use label shader
This fixes the problem with specular highlight making camera-facing labels unreadable. Task-number: QTRD-3276 Change-Id: If16424b07a1f3362428980353c5fb5213c33d06b Reviewed-by: Tomi Korpipää <tomi.korpipaa@digia.com>
Diffstat (limited to 'src/datavisualization/engine/abstract3drenderer.cpp')
-rw-r--r--src/datavisualization/engine/abstract3drenderer.cpp22
1 files changed, 18 insertions, 4 deletions
diff --git a/src/datavisualization/engine/abstract3drenderer.cpp b/src/datavisualization/engine/abstract3drenderer.cpp
index a0e0bc45..d0f3c04b 100644
--- a/src/datavisualization/engine/abstract3drenderer.cpp
+++ b/src/datavisualization/engine/abstract3drenderer.cpp
@@ -63,6 +63,7 @@ Abstract3DRenderer::Abstract3DRenderer(Abstract3DController *controller)
m_volumeTextureLowDefShader(0),
m_volumeTextureSliceShader(0),
m_volumeSliceFrameShader(0),
+ m_labelShader(0),
m_useOrthoProjection(false),
m_xFlipped(false),
m_yFlipped(false),
@@ -108,6 +109,7 @@ Abstract3DRenderer::~Abstract3DRenderer()
delete m_volumeTextureLowDefShader;
delete m_volumeSliceFrameShader;
delete m_volumeTextureSliceShader;
+ delete m_labelShader;
foreach (SeriesRenderCache *cache, m_renderCacheList) {
cache->cleanup(m_textureHelper);
@@ -152,6 +154,9 @@ void Abstract3DRenderer::initializeOpenGL()
axisCacheForOrientation(QAbstract3DAxis::AxisOrientationX).setDrawer(m_drawer);
axisCacheForOrientation(QAbstract3DAxis::AxisOrientationY).setDrawer(m_drawer);
axisCacheForOrientation(QAbstract3DAxis::AxisOrientationZ).setDrawer(m_drawer);
+
+ initLabelShaders(QStringLiteral(":/shaders/vertexLabel"),
+ QStringLiteral(":/shaders/fragmentLabel"));
}
void Abstract3DRenderer::render(const GLuint defaultFboHandle)
@@ -232,6 +237,13 @@ void Abstract3DRenderer::initVolumeTextureShaders(const QString &vertexShader,
m_volumeSliceFrameShader->initialize();
}
+void Abstract3DRenderer::initLabelShaders(const QString &vertexShader, const QString &fragmentShader)
+{
+ delete m_labelShader;
+ m_labelShader = new ShaderHelper(this, vertexShader, fragmentShader);
+ m_labelShader->initialize();
+}
+
void Abstract3DRenderer::updateTheme(Q3DTheme *theme)
{
// Synchronize the controller theme with renderer
@@ -1366,8 +1378,8 @@ void Abstract3DRenderer::drawCustomItems(RenderingState state,
if (RenderingNormal == state) {
// Normal render
-#if !defined(QT_OPENGL_ES_2)
ShaderHelper *prevShader = shader;
+#if !defined(QT_OPENGL_ES_2)
if (item->isVolume()) {
if (item->drawSlices() &&
(item->sliceIndexX() >= 0
@@ -1379,12 +1391,14 @@ void Abstract3DRenderer::drawCustomItems(RenderingState state,
} else {
shader = m_volumeTextureLowDefShader;
}
- } else {
+ } else
+#endif
+ if (item->isLabel())
+ shader = m_labelShader;
+ else
shader = regularShader;
- }
if (shader != prevShader)
shader->bind();
-#endif
shader->setUniformValue(shader->model(), modelMatrix);
shader->setUniformValue(shader->MVP(), MVPMatrix);
shader->setUniformValue(shader->nModel(), itModelMatrix.inverted().transposed());