summaryrefslogtreecommitdiffstats
path: root/src/datavisualization/engine/abstract3drenderer_p.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/datavisualization/engine/abstract3drenderer_p.h')
-rw-r--r--src/datavisualization/engine/abstract3drenderer_p.h119
1 files changed, 107 insertions, 12 deletions
diff --git a/src/datavisualization/engine/abstract3drenderer_p.h b/src/datavisualization/engine/abstract3drenderer_p.h
index 0dfc7367..1e38023d 100644
--- a/src/datavisualization/engine/abstract3drenderer_p.h
+++ b/src/datavisualization/engine/abstract3drenderer_p.h
@@ -30,13 +30,17 @@
#define ABSTRACT3DRENDERER_P_H
#include <QtGui/QOpenGLFunctions>
-
+#if !defined(QT_OPENGL_ES_2)
+# include <QtGui/QOpenGLFunctions_2_1>
+#endif
#include "datavisualizationglobal_p.h"
#include "abstract3dcontroller_p.h"
#include "axisrendercache_p.h"
#include "seriesrendercache_p.h"
#include "customrenderitem_p.h"
+class QSurface;
+
QT_BEGIN_NAMESPACE_DATAVISUALIZATION
class TextureHelper;
@@ -77,21 +81,33 @@ public:
virtual void updateSelectionMode(QAbstract3DGraph::SelectionFlags newMode);
virtual void updateOptimizationHint(QAbstract3DGraph::OptimizationHints hint);
virtual void updateScene(Q3DScene *scene);
- virtual void updateTextures() = 0;
+ virtual void updateTextures();
virtual void initSelectionBuffer() = 0;
virtual void updateSelectionState(SelectionState state);
- virtual void updateInputPosition(const QPoint &position);
-#if !defined(QT_OPENGL_ES_2)
virtual void updateDepthBuffer() = 0;
-#endif
virtual void updateShadowQuality(QAbstract3DGraph::ShadowQuality quality) = 0;
virtual void initShaders(const QString &vertexShader, const QString &fragmentShader) = 0;
virtual void initGradientShaders(const QString &vertexShader, const QString &fragmentShader);
+ virtual void initStaticSelectedItemShaders(const QString &vertexShader,
+ const QString &fragmentShader,
+ const QString &gradientVertexShader,
+ const QString &gradientFragmentShader);
virtual void initBackgroundShaders(const QString &vertexShader,
const QString &fragmentShader) = 0;
virtual void initCustomItemShaders(const QString &vertexShader,
const QString &fragmentShader);
+ virtual void initVolumeTextureShaders(const QString &vertexShader,
+ const QString &fragmentShader,
+ const QString &fragmentLowDefShader,
+ const QString &sliceShader,
+ const QString &sliceFrameVertexShader,
+ const QString &sliceFrameShader);
+ virtual void initLabelShaders(const QString &vertexShader, const QString &fragmentShader);
+ virtual void initCursorPositionShaders(const QString &vertexShader,
+ const QString &fragmentShader);
+ virtual void initCursorPositionBuffer();
+
virtual void updateAxisType(QAbstract3DAxis::AxisOrientation orientation,
QAbstract3DAxis::AxisType type);
virtual void updateAxisTitle(QAbstract3DAxis::AxisOrientation orientation,
@@ -112,7 +128,7 @@ public:
virtual void updateAxisLabelAutoRotation(QAbstract3DAxis::AxisOrientation orientation,
float angle);
virtual void updateAxisTitleVisibility(QAbstract3DAxis::AxisOrientation orientation,
- bool visible);
+ bool visible);
virtual void updateAxisTitleFixed(QAbstract3DAxis::AxisOrientation orientation,
bool fixed);
virtual void modifiedSeriesList(const QVector<QAbstract3DSeries *> &seriesList);
@@ -123,6 +139,10 @@ public:
virtual void updateCustomItem(CustomRenderItem *renderItem);
virtual void updateAspectRatio(float ratio);
+ virtual void updateHorizontalAspectRatio(float ratio);
+ virtual void updatePolar(bool enable);
+ virtual void updateRadialLabelOffset(float offset);
+ virtual void updateMargin(float margin);
virtual QVector3D convertPositionToTranslation(const QVector3D &position,
bool isAbsolute) = 0;
@@ -130,21 +150,28 @@ public:
void generateBaseColorTexture(const QColor &color, GLuint *texture);
void fixGradientAndGenerateTexture(QLinearGradient *gradient, GLuint *gradientTexture);
- inline bool isClickPending() { return m_clickPending; }
- inline void clearClickPending() { m_clickPending = false; }
+ inline bool isClickQueryResolved() const { return m_clickResolved; }
+ inline void clearClickQueryResolved() { m_clickResolved = false; }
+ inline QPoint cachedClickQuery() const { return m_cachedScene->selectionQueryPosition(); }
inline QAbstract3DSeries *clickedSeries() const { return m_clickedSeries; }
inline QAbstract3DGraph::ElementType clickedType() { return m_clickedType; }
+ inline bool isGraphPositionQueryResolved() const { return m_graphPositionQueryResolved; }
+ inline void clearGraphPositionQueryResolved() { m_graphPositionQueryResolved = false; }
+ inline QVector3D queriedGraphPosition() const { return m_queriedGraphPosition; }
+ inline QPoint cachedGraphPositionQuery() const { return m_cachedScene->graphPositionQuery(); }
LabelItem &selectionLabelItem();
void setSelectionLabel(const QString &label);
QString &selectionLabel();
- void drawCustomItems(RenderingState state, ShaderHelper *shader,
+ void drawCustomItems(RenderingState state, ShaderHelper *regularShader,
const QMatrix4x4 &viewMatrix,
const QMatrix4x4 &projectionViewMatrix,
const QMatrix4x4 &depthProjectionViewMatrix,
- GLuint depthTexture, GLfloat shadowQuality);
+ GLuint depthTexture, GLfloat shadowQuality, GLfloat reflection = 1.0f);
+
QVector4D indexToSelectionColor(GLint index);
+ void calculatePolarXZ(const QVector3D &dataPos, float &x, float &z) const;
signals:
void needRender(); // Emit this if something in renderer causes need for another render pass.
@@ -177,7 +204,7 @@ protected:
const QQuaternion &totalRotation, AbstractRenderItem &dummyItem,
const Q3DCamera *activeCamera, float labelsMaxWidth,
const QMatrix4x4 &viewMatrix, const QMatrix4x4 &projectionMatrix,
- ShaderHelper *shader);
+ ShaderHelper *shader, bool radial = false);
void drawAxisTitleZ(const QVector3D &labelRotation, const QVector3D &labelTrans,
const QQuaternion &totalRotation, AbstractRenderItem &dummyItem,
const Q3DCamera *activeCamera, float labelsMaxWidth,
@@ -186,6 +213,26 @@ protected:
void loadGridLineMesh();
void loadLabelMesh();
+ void loadPositionMapperMesh();
+
+ void drawRadialGrid(ShaderHelper *shader, float yFloorLinePos,
+ const QMatrix4x4 &projectionViewMatrix, const QMatrix4x4 &depthMatrix);
+ void drawAngularGrid(ShaderHelper *shader, float yFloorLinePos,
+ const QMatrix4x4 &projectionViewMatrix, const QMatrix4x4 &depthMatrix);
+
+ float calculatePolarBackgroundMargin();
+ virtual void fixCameraTarget(QVector3D &target) = 0;
+ void updateCameraViewport();
+
+ void recalculateCustomItemScalingAndPos(CustomRenderItem *item);
+ virtual void getVisibleItemBounds(QVector3D &minBounds, QVector3D &maxBounds) = 0;
+ void drawVolumeSliceFrame(const CustomRenderItem *item, Qt::Axis axis,
+ const QMatrix4x4 &projectionViewMatrix);
+ void queriedGraphPosition(const QMatrix4x4 &projectionViewMatrix, const QVector3D &scaling,
+ GLuint defaultFboHandle);
+
+ void fixContextBeforeDelete();
+ void restoreContextAfterDelete();
bool m_hasNegativeValues;
Q3DTheme *m_cachedTheme;
@@ -201,6 +248,7 @@ protected:
AxisRenderCache m_axisCacheY;
AxisRenderCache m_axisCacheZ;
TextureHelper *m_textureHelper;
+ GLuint m_depthTexture;
Q3DScene *m_cachedScene;
bool m_selectionDirty;
@@ -212,28 +260,75 @@ protected:
QRect m_secondarySubViewport;
float m_devicePixelRatio;
bool m_selectionLabelDirty;
- bool m_clickPending;
+ bool m_clickResolved;
+ bool m_graphPositionQueryPending;
+ bool m_graphPositionQueryResolved;
QAbstract3DSeries *m_clickedSeries;
QAbstract3DGraph::ElementType m_clickedType;
int m_selectedLabelIndex;
int m_selectedCustomItemIndex;
+ QVector3D m_queriedGraphPosition;
+ QPoint m_graphPositionQuery;
QString m_selectionLabel;
LabelItem *m_selectionLabelItem;
int m_visibleSeriesCount;
ShaderHelper *m_customItemShader;
+ ShaderHelper *m_volumeTextureShader;
+ ShaderHelper *m_volumeTextureLowDefShader;
+ ShaderHelper *m_volumeTextureSliceShader;
+ ShaderHelper *m_volumeSliceFrameShader;
+ ShaderHelper *m_labelShader;
+ ShaderHelper *m_cursorPositionShader;
+ GLuint m_cursorPositionFrameBuffer;
+ GLuint m_cursorPositionTexture;
bool m_useOrthoProjection;
bool m_xFlipped;
bool m_yFlipped;
bool m_zFlipped;
+ bool m_yFlippedForGrid;
ObjectHelper *m_backgroundObj; // Shared reference
ObjectHelper *m_gridLineObj; // Shared reference
ObjectHelper *m_labelObj; // Shared reference
+ ObjectHelper *m_positionMapperObj; // Shared reference
float m_graphAspectRatio;
+ float m_graphHorizontalAspectRatio;
+ bool m_polarGraph;
+ float m_radialLabelOffset;
+ float m_polarRadius;
+
+ QQuaternion m_xRightAngleRotation;
+ QQuaternion m_yRightAngleRotation;
+ QQuaternion m_zRightAngleRotation;
+ QQuaternion m_xRightAngleRotationNeg;
+ QQuaternion m_yRightAngleRotationNeg;
+ QQuaternion m_zRightAngleRotationNeg;
+ QQuaternion m_xFlipRotation;
+ QQuaternion m_zFlipRotation;
+
+ float m_requestedMargin;
+ float m_vBackgroundMargin;
+ float m_hBackgroundMargin;
+ float m_scaleXWithBackground;
+ float m_scaleYWithBackground;
+ float m_scaleZWithBackground;
+
+ QVector3D m_oldCameraTarget;
+
+ bool m_reflectionEnabled;
+ qreal m_reflectivity;
+
+ QLocale m_locale;
+#if !defined(QT_OPENGL_ES_2)
+ QOpenGLFunctions_2_1 *m_funcs_2_1; // Not owned
+#endif
+ QPointer<QOpenGLContext> m_context; // Not owned
+ QWindow *m_dummySurfaceAtDelete;
+ bool m_isOpenGLES;
private:
friend class Abstract3DController;