summaryrefslogtreecommitdiffstats
path: root/src/datavis3d/engine/scatter3drenderer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/datavis3d/engine/scatter3drenderer.cpp')
-rw-r--r--src/datavis3d/engine/scatter3drenderer.cpp202
1 files changed, 36 insertions, 166 deletions
diff --git a/src/datavis3d/engine/scatter3drenderer.cpp b/src/datavis3d/engine/scatter3drenderer.cpp
index 491475e6..4f140cac 100644
--- a/src/datavis3d/engine/scatter3drenderer.cpp
+++ b/src/datavis3d/engine/scatter3drenderer.cpp
@@ -45,11 +45,7 @@
#include "shaderhelper_p.h"
#include "objecthelper_p.h"
#include "texturehelper_p.h"
-#include "theme_p.h"
#include "utils_p.h"
-#include "drawer_p.h"
-#include "qabstractaxis_p.h"
-#include "qbardataitem.h"
#include <QMatrix4x4>
#include <QMouseEvent>
@@ -80,7 +76,7 @@ const GLfloat gridLineWidth = 0.005f;
static QVector3D selectionSkipColor = QVector3D(255, 255, 255); // Selection texture's background color
Scatter3DRenderer::Scatter3DRenderer(Scatter3DController *controller)
- : QObject(controller),
+ : Abstract3DRenderer(controller),
m_controller(controller),
m_selectedItem(0),
m_previouslySelectedItem(0),
@@ -98,7 +94,6 @@ Scatter3DRenderer::Scatter3DRenderer(Scatter3DController *controller)
m_backgroundObj(0),
m_gridLineObj(0),
m_labelObj(0),
- m_drawer(new Drawer(m_cachedTheme, m_cachedFont, m_cachedLabelTransparency)),
m_bgrTexture(0),
m_depthTexture(0),
m_selectionTexture(0),
@@ -106,7 +101,6 @@ Scatter3DRenderer::Scatter3DRenderer(Scatter3DController *controller)
m_selectionFrameBuffer(0),
m_selectionDepthBuffer(0),
m_shadowQualityToShader(33.3f),
- m_autoScaleAdjustment(1.0f),
m_heightNormalizer(1.0f),
m_yAdjustment(0.0f),
m_scaleFactor(0),
@@ -122,127 +116,70 @@ Scatter3DRenderer::Scatter3DRenderer(Scatter3DController *controller)
{
//qDebug() << __FUNCTION__;
m_dummyRenderItem.setRenderer(this);
+ initializePreOpenGL();
+ initializeOpenGLFunctions();
+ initializeOpenGL();
+}
+
+Scatter3DRenderer::~Scatter3DRenderer()
+{
+ //qDebug() << __FUNCTION__;
+ m_textureHelper->glDeleteFramebuffers(1, &m_selectionFrameBuffer);
+ m_textureHelper->glDeleteRenderbuffers(1, &m_selectionDepthBuffer);
+ m_textureHelper->deleteTexture(&m_selectionTexture);
+ m_textureHelper->glDeleteFramebuffers(1, &m_depthFrameBuffer);
+ m_textureHelper->deleteTexture(&m_bgrTexture);
+ delete m_dotShader;
+ delete m_depthShader;
+ delete m_selectionShader;
+ delete m_backgroundShader;
+ delete m_dotObj;
+ delete m_backgroundObj;
+ delete m_gridLineObj;
+ delete m_textureHelper;
+}
- // Listen to changes in the drawer
- QObject::connect(m_drawer, &Drawer::drawerChanged, this, &Scatter3DRenderer::updateTextures);
+void Scatter3DRenderer::initializePreOpenGL()
+{
+ Abstract3DRenderer::initializePreOpenGL();
- // Listen to changes in the controller
- QObject::connect(m_controller, &Scatter3DController::themeChanged, this,
- &Scatter3DRenderer::updateTheme);
QObject::connect(m_controller, &Scatter3DController::selectionModeChanged, this,
&Scatter3DRenderer::updateSelectionMode);
//QObject::connect(m_controller, &Scatter3DController::limitsChanged, this,
// &Scatter3DRenderer::updateLimits);
QObject::connect(m_controller, &Scatter3DController::objFileChanged, this,
&Scatter3DRenderer::updateMeshFileName);
- QObject::connect(m_controller, &Scatter3DController::boundingRectChanged, this,
- &Scatter3DRenderer::updateBoundingRect);
- QObject::connect(m_controller, &Scatter3DController::sizeChanged, this,
- &Scatter3DRenderer::updateBoundingRect);
QObject::connect(m_controller, &Scatter3DController::positionChanged, this,
&Scatter3DRenderer::updatePosition);
- QObject::connect(m_controller, &Scatter3DController::fontChanged, this,
- &Scatter3DRenderer::updateFont);
- QObject::connect(m_controller, &Scatter3DController::labelTransparencyUpdated, this,
- &Scatter3DRenderer::updateLabelTransparency);
QObject::connect(m_controller, &Scatter3DController::gridEnabledChanged, this,
&Scatter3DRenderer::updateGridEnabled);
QObject::connect(m_controller, &Scatter3DController::backgroundEnabledChanged, this,
&Scatter3DRenderer::updateBackgroundEnabled);
- QObject::connect(m_controller, &Scatter3DController::shadowQualityChanged, this,
- &Scatter3DRenderer::updateShadowQuality);
QObject::connect(m_controller, &Scatter3DController::tickCountChanged, this,
&Scatter3DRenderer::updateTickCount);
QObject::connect(m_controller, &Scatter3DController::zoomLevelChanged, this,
&Scatter3DRenderer::updateZoomLevel);
- updateTheme(m_controller->theme());
+ // TODO Should all this initial setup be mutexed?
updateSelectionMode(m_controller->selectionMode());
//updateLimits(m_controller->limits());
updateZoomLevel(m_controller->zoomLevel());
updateMeshFileName(m_controller->objFile());
- updateFont(m_controller->font());
- updateLabelTransparency(m_controller->labelTransparency());
updateGridEnabled(m_controller->gridEnabled());
updateBackgroundEnabled(m_controller->backgroundEnabled());
- initializeOpenGL();
-
- updateBoundingRect(m_controller->boundingRect());
- updateShadowQuality(m_controller->shadowQuality());
-
calculateSceneScalingFactors();
-
- // TODO: Protect with mutex or redesign how axes create label items?
- if (m_controller->axisX())
- m_controller->axisX()->d_ptr->setDrawer(m_drawer);
- if (m_controller->axisY())
- m_controller->axisY()->d_ptr->setDrawer(m_drawer);
- if (m_controller->axisZ())
- m_controller->axisZ()->d_ptr->setDrawer(m_drawer);
}
-Scatter3DRenderer::~Scatter3DRenderer()
-{
- //qDebug() << __FUNCTION__;
- m_textureHelper->glDeleteFramebuffers(1, &m_selectionFrameBuffer);
- m_textureHelper->glDeleteRenderbuffers(1, &m_selectionDepthBuffer);
- m_textureHelper->deleteTexture(&m_selectionTexture);
- m_textureHelper->glDeleteFramebuffers(1, &m_depthFrameBuffer);
- m_textureHelper->deleteTexture(&m_bgrTexture);
- delete m_dotShader;
- delete m_depthShader;
- delete m_selectionShader;
- delete m_backgroundShader;
- delete m_dotObj;
- delete m_backgroundObj;
- delete m_gridLineObj;
- delete m_textureHelper;
- delete m_drawer;
-}
void Scatter3DRenderer::initializeOpenGL()
{
//qDebug() << __FUNCTION__;
- initializeOpenGLFunctions();
-
m_textureHelper = new TextureHelper();
m_drawer->initializeOpenGL();
// Initialize shaders
-#if !defined(QT_OPENGL_ES_2)
- if (m_cachedShadowQuality > ShadowNone) {
- if (!m_cachedTheme.m_uniformColor) {
- initShaders(QStringLiteral(":/shaders/vertexShadow"),
- QStringLiteral(":/shaders/fragmentShadowNoTexColorOnY"));
- } else {
- initShaders(QStringLiteral(":/shaders/vertexShadow"),
- QStringLiteral(":/shaders/fragmentShadowNoTex"));
- }
- initBackgroundShaders(QStringLiteral(":/shaders/vertexShadow"),
- QStringLiteral(":/shaders/fragmentShadowNoTex"));
- } else {
- if (!m_cachedTheme.m_uniformColor) {
- initShaders(QStringLiteral(":/shaders/vertex"),
- QStringLiteral(":/shaders/fragmentColorOnY"));
- } else {
- initShaders(QStringLiteral(":/shaders/vertex"),
- QStringLiteral(":/shaders/fragment"));
- }
- initBackgroundShaders(QStringLiteral(":/shaders/vertex"),
- QStringLiteral(":/shaders/fragment"));
- }
-#else
- if (!m_cachedTheme.m_uniformColor) {
- initShaders(QStringLiteral(":/shaders/vertexES2"),
- QStringLiteral(":/shaders/fragmentColorOnYES2"));
- } else {
- initShaders(QStringLiteral(":/shaders/vertexES2"),
- QStringLiteral(":/shaders/fragmentES2"));
- }
- initBackgroundShaders(QStringLiteral(":/shaders/vertexES2"),
- QStringLiteral(":/shaders/fragmentES2"));
-#endif
+ handleShadowQualityChange();
initLabelShaders(QStringLiteral(":/shaders/vertexLabel"),
QStringLiteral(":/shaders/fragmentLabel"));
@@ -286,19 +223,15 @@ void Scatter3DRenderer::initializeOpenGL()
// Load background mesh (we need to be initialized first)
loadBackgroundMesh();
+
+ Abstract3DRenderer::initializeOpenGL();
}
void Scatter3DRenderer::render(QScatterDataProxy *dataProxy,
bool valuesDirty,
CameraHelper *camera,
- const LabelItem &xLabel,
- const LabelItem &yLabel,
- const LabelItem &zLabel,
const GLuint defaultFboHandle)
{
- Q_UNUSED(xLabel);
- Q_UNUSED(yLabel);
- Q_UNUSED(zLabel);
//qDebug() << __FUNCTION__;
#ifdef DISPLAY_RENDER_SPEED
@@ -1160,7 +1093,7 @@ void Scatter3DRenderer::drawScene(CameraHelper *camera,
GLfloat startPos = -m_heightNormalizer;
int labelNbr = 0;
for (GLfloat labelPos = startPos; labelPos <= m_heightNormalizer; labelPos += posStep) {
- if (m_controller->axisX()->d_ptr->labelItems().size() > labelNbr) {
+ if (m_axisCacheX.labelItems().size() > labelNbr) {
GLfloat labelXTrans = (aspectRatio * backgroundMargin * m_areaSize.width())
/ m_scaleFactor;
GLfloat rotLabelX = -90.0f;
@@ -1181,7 +1114,7 @@ void Scatter3DRenderer::drawScene(CameraHelper *camera,
// TODO: Try it; draw the label here
m_dummyRenderItem.setTranslation(labelTrans);
const LabelItem &axisLabelItem =
- *m_controller->axisZ()->d_ptr->labelItems().at(labelNbr);
+ *m_axisCacheZ.labelItems().at(labelNbr);
m_drawer->drawLabel(m_dummyRenderItem, axisLabelItem, viewMatrix, projectionMatrix,
QVector3D(0.0f, m_yAdjustment, zComp),
@@ -1195,7 +1128,7 @@ void Scatter3DRenderer::drawScene(CameraHelper *camera,
// X Labels
labelNbr = 0;
for (GLfloat labelPos = startPos; labelPos <= m_heightNormalizer; labelPos += posStep) {
- if (m_controller->axisX()->d_ptr->labelItems().size() > labelNbr) {
+ if (m_axisCacheX.labelItems().size() > labelNbr) {
GLfloat labelZTrans = (aspectRatio * backgroundMargin * m_areaSize.height())
/ m_scaleFactor;
GLfloat rotLabelX = -90.0f;
@@ -1216,7 +1149,7 @@ void Scatter3DRenderer::drawScene(CameraHelper *camera,
// TODO: Try it; draw the label here
m_dummyRenderItem.setTranslation(labelTrans);
const LabelItem &axisLabelItem =
- *m_controller->axisX()->d_ptr->labelItems().at(labelNbr);
+ *m_axisCacheX.labelItems().at(labelNbr);
m_drawer->drawLabel(m_dummyRenderItem, axisLabelItem, viewMatrix, projectionMatrix,
QVector3D(0.0f, m_yAdjustment, zComp),
@@ -1231,7 +1164,7 @@ void Scatter3DRenderer::drawScene(CameraHelper *camera,
labelNbr = 0;
for (GLfloat labelPos = startPos; labelPos <= m_heightNormalizer; labelPos += posStep) {
// TODO: Test with x labels
- if (m_controller->axisX()->d_ptr->labelItems().size() > labelNbr) {
+ if (m_axisCacheX.labelItems().size() > labelNbr) {
GLfloat labelXTrans = (aspectRatio * backgroundMargin * m_areaSize.width())
/ m_scaleFactor;
GLfloat labelZTrans = (aspectRatio * backgroundMargin * m_areaSize.height())
@@ -1251,7 +1184,7 @@ void Scatter3DRenderer::drawScene(CameraHelper *camera,
}
// TODO: Test with x labels
- const LabelItem &axisLabelItem = *m_controller->axisX()->d_ptr->labelItems().at(labelNbr);
+ const LabelItem &axisLabelItem = *m_axisCacheX.labelItems().at(labelNbr);
// Back wall
QVector3D labelTrans = QVector3D(labelXTrans, labelYTrans, labelZTrans + zComp);
@@ -1337,62 +1270,12 @@ void Scatter3DRenderer::updateMeshFileName(const QString &objFileName)
loadBarMesh();
}
-void Scatter3DRenderer::updateTheme(Theme theme)
-{
- //qDebug() << __FUNCTION__;
- m_cachedTheme.setFromTheme(theme);
-
- m_drawer->setTheme(m_cachedTheme);
- // Re-initialize shaders
-#if !defined(QT_OPENGL_ES_2)
- if (m_cachedShadowQuality > ShadowNone) {
- if (!m_cachedTheme.m_uniformColor) {
- initShaders(QStringLiteral(":/shaders/vertexShadow"),
- QStringLiteral(":/shaders/fragmentShadowNoTexColorOnY"));
- } else {
- initShaders(QStringLiteral(":/shaders/vertexShadow"),
- QStringLiteral(":/shaders/fragmentShadowNoTex"));
- }
- } else {
- if (!m_cachedTheme.m_uniformColor) {
- initShaders(QStringLiteral(":/shaders/vertex"),
- QStringLiteral(":/shaders/fragmentColorOnY"));
- } else {
- initShaders(QStringLiteral(":/shaders/vertex"),
- QStringLiteral(":/shaders/fragment"));
- }
- }
-#else
- if (!m_cachedTheme.m_uniformColor) {
- initShaders(QStringLiteral(":/shaders/vertexES2"),
- QStringLiteral(":/shaders/fragmentColorOnYES2"));
- } else {
- initShaders(QStringLiteral(":/shaders/vertexES2"),
- QStringLiteral(":/shaders/fragmentES2"));
- }
-#endif
-}
-
void Scatter3DRenderer::updateSelectionMode(SelectionMode mode)
{
//qDebug() << __FUNCTION__;
m_cachedSelectionMode = mode;
}
-void Scatter3DRenderer::updateFont(const QFont &font)
-{
- //qDebug() << __FUNCTION__;
- m_cachedFont = font;
- m_drawer->setFont(font);
-}
-
-void Scatter3DRenderer::updateLabelTransparency(LabelTransparency transparency)
-{
- //qDebug() << __FUNCTION__;
- m_cachedLabelTransparency = transparency;
- m_drawer->setTransparency(transparency);
-}
-
void Scatter3DRenderer::updateGridEnabled(bool enable)
{
//qDebug() << __FUNCTION__;
@@ -1478,19 +1361,6 @@ void Scatter3DRenderer::updateTickCount(GLint tickCount, GLfloat step, GLfloat m
}
}
-void Scatter3DRenderer::updateBoundingRect(const QRect boundingRect)
-{
- //qDebug() << __FUNCTION__;
- m_cachedBoundingRect = boundingRect;
- handleResize();
-}
-
-void Scatter3DRenderer::updatePosition(const QRect boundingRect)
-{
- //qDebug() << __FUNCTION__;
- m_cachedBoundingRect = boundingRect;
-}
-
void Scatter3DRenderer::loadBarMesh()
{
//qDebug() << __FUNCTION__;