From a28cdb72a4ea768a898ca07f0df0fa3c17c073a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomi=20Korpip=C3=A4=C3=A4?= Date: Tue, 10 Sep 2013 11:42:13 +0300 Subject: Module renamed Task-number: QTRD-2224 Change-Id: Iec18b6121809300b11d85445281d3c626c434f35 Reviewed-by: Miikka Heikkinen --- src/datavisualization/engine/bars3drenderer_p.h | 171 ++++++++++++++++++++++++ 1 file changed, 171 insertions(+) create mode 100644 src/datavisualization/engine/bars3drenderer_p.h (limited to 'src/datavisualization/engine/bars3drenderer_p.h') diff --git a/src/datavisualization/engine/bars3drenderer_p.h b/src/datavisualization/engine/bars3drenderer_p.h new file mode 100644 index 00000000..3be0ebf9 --- /dev/null +++ b/src/datavisualization/engine/bars3drenderer_p.h @@ -0,0 +1,171 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the QtDataVisualization API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. + +#ifndef Q3DBARSRENDERER_p_H +#define Q3DBARSRENDERER_p_H + +#include "datavisualizationglobal_p.h" +#include "bars3dcontroller_p.h" +#include "abstract3drenderer_p.h" +#include "qbardataproxy.h" +#include "barrenderitem_p.h" + +class QPoint; +class QSizeF; +class QOpenGLShaderProgram; + +QT_DATAVISUALIZATION_BEGIN_NAMESPACE + +class ShaderHelper; +class ObjectHelper; +class LabelItem; +class Q3DScene; + +class QT_DATAVISUALIZATION_EXPORT Bars3DRenderer : public Abstract3DRenderer +{ + Q_OBJECT + +private: + // TODO: Filter to the set of attributes to be moved to the model object. + Bars3DController *m_controller; + + // Cached state based on emitted signals from the controller + QSizeF m_cachedBarThickness; + QSizeF m_cachedBarSpacing; + bool m_cachedIsSlicingActivated; + int m_cachedRowCount; + int m_cachedColumnCount; + + // Internal state + BarRenderItem *m_selectedBar; // points to renderitem array + QList *m_sliceSelection; + AxisRenderCache *m_sliceCache; // not owned + const LabelItem *m_sliceTitleItem; // not owned + bool m_xFlipped; + bool m_zFlipped; + bool m_yFlipped; + QRect m_mainViewPort; + QRect m_sliceViewPort; + bool m_updateLabels; + ShaderHelper *m_barShader; + ShaderHelper *m_depthShader; + ShaderHelper *m_selectionShader; + ShaderHelper *m_backgroundShader; + ShaderHelper *m_labelShader; + ObjectHelper *m_barObj; + ObjectHelper *m_backgroundObj; + ObjectHelper *m_gridLineObj; + ObjectHelper *m_labelObj; + GLuint m_bgrTexture; + GLuint m_depthTexture; + GLuint m_selectionTexture; + GLuint m_depthFrameBuffer; + GLuint m_selectionFrameBuffer; + GLuint m_selectionDepthBuffer; + GLfloat m_shadowQualityToShader; + GLint m_shadowQualityMultiplier; + GLfloat m_heightNormalizer; + GLfloat m_yAdjustment; + GLfloat m_rowWidth; + GLfloat m_columnDepth; + GLfloat m_maxDimension; + GLfloat m_scaleX; + GLfloat m_scaleZ; + GLfloat m_scaleFactor; + GLfloat m_maxSceneSize; + QVector3D m_selection; + QVector3D m_previousSelection; + + bool m_hasHeightAdjustmentChanged; + BarRenderItem m_dummyBarRenderItem; + + BarRenderItemArray m_renderItemArray; + +public: + explicit Bars3DRenderer(Bars3DController *controller); + ~Bars3DRenderer(); + + void updateDataModel(QBarDataProxy *dataProxy); + void updateScene(Q3DScene *scene); + void render(GLuint defaultFboHandle = 0); + + QRect mainViewPort(); + +protected: + virtual void initializeOpenGL(); + virtual void loadMeshFile(); + +public slots: + void updateBarSpecs(GLfloat thicknessRatio = 1.0f, + const QSizeF &spacing = QSizeF(1.0, 1.0), + bool relative = true); + void updateSelectionMode(QDataVis::SelectionMode newMode); + void updateSlicingActive(bool isSlicing); + void updateSampleSpace(int rowCount, int columnCount); + void updateBackgroundEnabled(bool enable); + void updateSelectedBarPos(const QPoint &position); + + // Overloaded from abstract renderer + virtual void updateAxisRange(Q3DAbstractAxis::AxisOrientation orientation, qreal min, qreal max); + +signals: + void selectedBarPosChanged(QPoint position); + +private: + virtual void initShaders(const QString &vertexShader, const QString &fragmentShader); + virtual void updateShadowQuality(QDataVis::ShadowQuality quality); + virtual void updateTextures(); + + void drawSlicedScene(const LabelItem &xLabel, const LabelItem &yLabel, const LabelItem &zLabel); + void drawScene(GLuint defaultFboHandle); + void handleResize(); + + 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 initDepthShader(); + void updateDepthBuffer(); +#endif + void calculateSceneScalingFactors(); + void calculateHeightAdjustment(); + Abstract3DController::SelectionType isSelected(GLint row, GLint bar); + + Q_DISABLE_COPY(Bars3DRenderer) + + friend class BarRenderItem; +}; + + +QT_DATAVISUALIZATION_END_NAMESPACE + +#endif -- cgit v1.2.3