From 6ec2eb3147b02dab62ea8ac3cff0b706628dc353 Mon Sep 17 00:00:00 2001 From: Mika Salmela Date: Wed, 27 Aug 2014 11:36:41 +0300 Subject: Diffuse and specular color for static optimization Change-Id: I2c51ba06c6af9193a70f4a268dfd2fbd6c6910b3 Reviewed-by: Miikka Heikkinen --- .../engine/abstract3drenderer.cpp | 33 ++++++++++++++++------ src/datavisualization/engine/engine.qrc | 2 ++ src/datavisualization/engine/qabstract3dgraph.cpp | 12 ++++---- src/datavisualization/engine/scatter3drenderer.cpp | 17 +---------- .../utils/scatterobjectbufferhelper.cpp | 20 +++++++------ 5 files changed, 44 insertions(+), 40 deletions(-) (limited to 'src') diff --git a/src/datavisualization/engine/abstract3drenderer.cpp b/src/datavisualization/engine/abstract3drenderer.cpp index 9f0e2d8f..090a833a 100644 --- a/src/datavisualization/engine/abstract3drenderer.cpp +++ b/src/datavisualization/engine/abstract3drenderer.cpp @@ -25,6 +25,7 @@ #include "qcustom3ditem_p.h" #include "qcustom3dlabel_p.h" #include "qcustom3dvolume_p.h" +#include "scatter3drenderer_p.h" #include @@ -282,19 +283,35 @@ void Abstract3DRenderer::reInitShaders() { #if !defined(QT_OPENGL_ES_2) if (m_cachedShadowQuality > QAbstract3DGraph::ShadowQualityNone) { - initGradientShaders(QStringLiteral(":/shaders/vertexShadow"), - QStringLiteral(":/shaders/fragmentShadowNoTexColorOnY")); - initShaders(QStringLiteral(":/shaders/vertexShadow"), - QStringLiteral(":/shaders/fragmentShadowNoTex")); + if (m_cachedOptimizationHint.testFlag(QAbstract3DGraph::OptimizationStatic) + && qobject_cast(this)) { + initGradientShaders(QStringLiteral(":/shaders/vertexShadow"), + QStringLiteral(":/shaders/fragmentShadow")); + initShaders(QStringLiteral(":/shaders/vertexShadowNoMatrices"), + QStringLiteral(":/shaders/fragmentShadowNoTex")); + } else { + initGradientShaders(QStringLiteral(":/shaders/vertexShadow"), + QStringLiteral(":/shaders/fragmentShadowNoTexColorOnY")); + initShaders(QStringLiteral(":/shaders/vertexShadow"), + QStringLiteral(":/shaders/fragmentShadowNoTex")); + } initBackgroundShaders(QStringLiteral(":/shaders/vertexShadow"), QStringLiteral(":/shaders/fragmentShadowNoTex")); initCustomItemShaders(QStringLiteral(":/shaders/vertexShadow"), QStringLiteral(":/shaders/fragmentShadow")); } else { - initGradientShaders(QStringLiteral(":/shaders/vertex"), - QStringLiteral(":/shaders/fragmentColorOnY")); - initShaders(QStringLiteral(":/shaders/vertex"), - QStringLiteral(":/shaders/fragment")); + if (m_cachedOptimizationHint.testFlag(QAbstract3DGraph::OptimizationStatic) + && qobject_cast(this)) { + initGradientShaders(QStringLiteral(":/shaders/vertexTexture"), + QStringLiteral(":/shaders/fragmentTexture")); + initShaders(QStringLiteral(":/shaders/vertexNoMatrices"), + QStringLiteral(":/shaders/fragment")); + } else { + initGradientShaders(QStringLiteral(":/shaders/vertex"), + QStringLiteral(":/shaders/fragmentColorOnY")); + initShaders(QStringLiteral(":/shaders/vertex"), + QStringLiteral(":/shaders/fragment")); + } initBackgroundShaders(QStringLiteral(":/shaders/vertex"), QStringLiteral(":/shaders/fragment")); initCustomItemShaders(QStringLiteral(":/shaders/vertexTexture"), diff --git a/src/datavisualization/engine/engine.qrc b/src/datavisualization/engine/engine.qrc index 936ed53f..88440bec 100644 --- a/src/datavisualization/engine/engine.qrc +++ b/src/datavisualization/engine/engine.qrc @@ -62,5 +62,7 @@ shaders/texture3d.frag shaders/texture3d.vert shaders/texture3dslice.frag + shaders/shadowNoMatrices.vert + shaders/defaultNoMatrices.vert diff --git a/src/datavisualization/engine/qabstract3dgraph.cpp b/src/datavisualization/engine/qabstract3dgraph.cpp index 2b9fc92a..c797f554 100644 --- a/src/datavisualization/engine/qabstract3dgraph.cpp +++ b/src/datavisualization/engine/qabstract3dgraph.cpp @@ -148,7 +148,7 @@ QT_BEGIN_NAMESPACE_DATAVISUALIZATION \value OptimizationDefault Provides the full feature set at a reasonable performance. \value OptimizationStatic - Beta level feature. Optimizes the rendering of static data sets at the expense of some features. + Optimizes the rendering of static data sets at the expense of some features. */ /*! @@ -636,12 +636,10 @@ qreal QAbstract3DGraph::aspectRatio() const * \property QAbstract3DGraph::optimizationHints * * Defines if the rendering optimization is default or static. Default mode provides the full feature set at - * reasonable performance. Static is a beta level feature and currently supports only a subset of the - * features on the Scatter graph. Missing features are both gradient color styles - * for points, and diffuse and specular color on rotations. At this point static is intended just for - * introducing a new feature. It optimizes graph rendering and is ideal for large non-changing data - * sets. It is slower with dynamic data changes and item rotations. Selection is not optimized, so using it - * with massive data sets is not advisable. + * reasonable performance. Static optimizes graph rendering and is ideal for large non-changing data sets. + * It is slower with dynamic data changes and item rotations. Selection is not optimized, so using it with + * massive data sets is not advisable. Static works only on the Scatter graph and lacks the range gradient + * color style for points. * Defaults to \c{OptimizationDefault}. */ void QAbstract3DGraph::setOptimizationHints(OptimizationHints hints) diff --git a/src/datavisualization/engine/scatter3drenderer.cpp b/src/datavisualization/engine/scatter3drenderer.cpp index 94d49e3c..4b6a258e 100644 --- a/src/datavisualization/engine/scatter3drenderer.cpp +++ b/src/datavisualization/engine/scatter3drenderer.cpp @@ -341,22 +341,7 @@ void Scatter3DRenderer::updateOptimizationHint(QAbstract3DGraph::OptimizationHin { Abstract3DRenderer::updateOptimizationHint(hint); - if (m_cachedOptimizationHint.testFlag(QAbstract3DGraph::OptimizationStatic)) { -#if !defined(QT_OPENGL_ES_2) - if (m_cachedShadowQuality > QAbstract3DGraph::ShadowQualityNone) { - initGradientShaders(QStringLiteral(":/shaders/vertexShadow"), - QStringLiteral(":/shaders/fragmentShadow")); - } else { - initGradientShaders(QStringLiteral(":/shaders/vertexTexture"), - QStringLiteral(":/shaders/fragmentTexture")); - } -#else - initGradientShaders(QStringLiteral(":/shaders/vertexTexture"), - QStringLiteral(":/shaders/fragmentTexture")); -#endif - } else { - Abstract3DRenderer::reInitShaders(); - } + Abstract3DRenderer::reInitShaders(); } void Scatter3DRenderer::resetClickedStatus() diff --git a/src/datavisualization/utils/scatterobjectbufferhelper.cpp b/src/datavisualization/utils/scatterobjectbufferhelper.cpp index 1639eb1f..9ecdffdd 100644 --- a/src/datavisualization/utils/scatterobjectbufferhelper.cpp +++ b/src/datavisualization/utils/scatterobjectbufferhelper.cpp @@ -114,23 +114,25 @@ void ScatterObjectBufferHelper::fullLoad(ScatterSeriesRenderCache *cache, qreal int offset = pos * verticeCount; if (item.rotation().isIdentity()) { - for (int j = 0; j < verticeCount; j++) + for (int j = 0; j < verticeCount; j++) { buffered_vertices[j + offset] = scaled_vertices[j] + item.translation(); + buffered_normals[j + offset] = indexed_normals[j]; + } } else { QMatrix4x4 matrix; - matrix.rotate(seriesRotation * item.rotation()); - modelMatrix = matrix.transposed(); - modelMatrix.scale(modelScaler); + QQuaternion totalRotation = seriesRotation * item.rotation(); + matrix.rotate(totalRotation); + matrix.scale(modelScaler); + QMatrix4x4 itModelMatrix = matrix.inverted(); + modelMatrix = matrix.transposed(); // Because of row-column major difference - for (int j = 0; j < verticeCount; j++) + for (int j = 0; j < verticeCount; j++) { buffered_vertices[j + offset] = indexed_vertices[j] * modelMatrix + item.translation(); + buffered_normals[j + offset] = indexed_normals[j] * itModelMatrix; + } } - offset = pos * normalsCount; - for (int j = 0; j < normalsCount; j++) - buffered_normals[j + offset] = indexed_normals[j]; - if (cache->colorStyle() == Q3DTheme::ColorStyleUniform) { offset = pos * uvsCount; for (int j = 0; j < uvsCount; j++) -- cgit v1.2.3