summaryrefslogtreecommitdiffstats
path: root/src/datavisualization/engine/abstract3drenderer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/datavisualization/engine/abstract3drenderer.cpp')
-rw-r--r--src/datavisualization/engine/abstract3drenderer.cpp73
1 files changed, 70 insertions, 3 deletions
diff --git a/src/datavisualization/engine/abstract3drenderer.cpp b/src/datavisualization/engine/abstract3drenderer.cpp
index 6e3d8d81..3f49b67e 100644
--- a/src/datavisualization/engine/abstract3drenderer.cpp
+++ b/src/datavisualization/engine/abstract3drenderer.cpp
@@ -41,6 +41,11 @@ Abstract3DRenderer::Abstract3DRenderer(Abstract3DController *controller)
m_cachedSelectionMode(QDataVis::SelectionNone),
m_cachedIsGridEnabled(false),
m_cachedIsBackgroundEnabled(false),
+ m_cachedColorStyle(QDataVis::ColorStyleUniform),
+ m_objectGradientTexture(0),
+ m_singleHighlightGradientTexture(0),
+ m_multiHighlightGradientTexture(0),
+ m_textureHelper(0),
m_cachedScene(new Q3DScene()),
m_selectionDirty(true),
m_inputState(QDataVis::InputStateNone)
@@ -59,6 +64,12 @@ Abstract3DRenderer::Abstract3DRenderer(Abstract3DController *controller)
Abstract3DRenderer::~Abstract3DRenderer()
{
+ if (m_textureHelper) {
+ m_textureHelper->deleteTexture(&m_objectGradientTexture);
+ m_textureHelper->deleteTexture(&m_singleHighlightGradientTexture);
+ m_textureHelper->deleteTexture(&m_multiHighlightGradientTexture);
+ }
+
delete m_drawer;
delete m_textureHelper;
delete m_cachedScene;
@@ -184,7 +195,7 @@ void Abstract3DRenderer::reInitShaders()
{
#if !defined(QT_OPENGL_ES_2)
if (m_cachedShadowQuality > QDataVis::ShadowQualityNone) {
- if (!m_cachedTheme.m_uniformColor) {
+ if (m_cachedColorStyle != QDataVis::ColorStyleUniform) {
initShaders(QStringLiteral(":/shaders/vertexShadow"),
QStringLiteral(":/shaders/fragmentShadowNoTexColorOnY"));
} else {
@@ -194,7 +205,7 @@ void Abstract3DRenderer::reInitShaders()
initBackgroundShaders(QStringLiteral(":/shaders/vertexShadow"),
QStringLiteral(":/shaders/fragmentShadowNoTex"));
} else {
- if (!m_cachedTheme.m_uniformColor) {
+ if (m_cachedColorStyle != QDataVis::ColorStyleUniform) {
initShaders(QStringLiteral(":/shaders/vertex"),
QStringLiteral(":/shaders/fragmentColorOnY"));
} else {
@@ -205,7 +216,7 @@ void Abstract3DRenderer::reInitShaders()
QStringLiteral(":/shaders/fragment"));
}
#else
- if (!m_cachedTheme.m_uniformColor) {
+ if (m_cachedColorStyle != QDataVis::ColorStyleUniform) {
initShaders(QStringLiteral(":/shaders/vertexES2"),
QStringLiteral(":/shaders/fragmentColorOnYES2"));
} else {
@@ -324,6 +335,49 @@ void Abstract3DRenderer::updateAxisLabelFormat(Q3DAbstractAxis::AxisOrientation
axisCacheForOrientation(orientation).setLabelFormat(format);
}
+void Abstract3DRenderer::updateColorStyle(QDataVis::ColorStyle style)
+{
+ bool changed = (m_cachedColorStyle != style);
+
+ m_cachedColorStyle = style;
+
+ if (changed)
+ reInitShaders();
+}
+
+void Abstract3DRenderer::updateObjectColor(const QColor &color)
+{
+ m_cachedObjectColor = color;
+}
+
+void Abstract3DRenderer::updateObjectGradient(const QLinearGradient &gradient)
+{
+ m_cachedObjectGradient = gradient;
+ fixGradient(&m_cachedObjectGradient, &m_objectGradientTexture);
+}
+
+void Abstract3DRenderer::updateSingleHighlightColor(const QColor &color)
+{
+ m_cachedSingleHighlightColor = color;
+}
+
+void Abstract3DRenderer::updateSingleHighlightGradient(const QLinearGradient &gradient)
+{
+ m_cachedSingleHighlightGradient = gradient;
+ fixGradient(&m_cachedSingleHighlightGradient, &m_singleHighlightGradientTexture);
+}
+
+void Abstract3DRenderer::updateMultiHighlightColor(const QColor &color)
+{
+ m_cachedMultiHighlightColor = color;
+}
+
+void Abstract3DRenderer::updateMultiHighlightGradient(const QLinearGradient &gradient)
+{
+ m_cachedMultiHighlightGradient = gradient;
+ fixGradient(&m_cachedMultiHighlightGradient, &m_multiHighlightGradientTexture);
+}
+
AxisRenderCache &Abstract3DRenderer::axisCacheForOrientation(Q3DAbstractAxis::AxisOrientation orientation)
{
switch (orientation) {
@@ -377,5 +431,18 @@ void Abstract3DRenderer::lowerShadowQuality()
updateShadowQuality(newQuality);
}
+void Abstract3DRenderer::fixGradient(QLinearGradient *gradient, GLuint *gradientTexture)
+{
+ // Readjust start/stop to match gradient texture size
+ gradient->setStart(qreal(gradientTextureWidth), qreal(gradientTextureHeight));
+ gradient->setFinalStop(0.0, 0.0);
+
+ if (*gradientTexture) {
+ m_textureHelper->deleteTexture(gradientTexture);
+ *gradientTexture = 0;
+ }
+
+ *gradientTexture = m_textureHelper->createGradientTexture(*gradient);
+}
QT_DATAVISUALIZATION_END_NAMESPACE