summaryrefslogtreecommitdiffstats
path: root/src/datavisualization/engine/abstract3dcontroller.cpp
diff options
context:
space:
mode:
authorTomi Korpipää <tomi.korpipaa@digia.com>2014-04-15 10:32:03 +0300
committerTomi Korpipää <tomi.korpipaa@digia.com>2014-04-15 10:40:38 +0300
commita30c0c304e55ffe30545ab0838e4dbe11a99b8da (patch)
treece6ccc0e4de8e350aebec466ff0a70c0fd7710bc /src/datavisualization/engine/abstract3dcontroller.cpp
parent79646ac9664745701667104c19bbae8cba8fd2e3 (diff)
Add custom item support, part 1
Task-number: QTRD-2866 + Added API for adding and removing custom items + Added custom data and custom render items + Added shaders for textured objects + Added custom item rendering draft to scatter + Fixed some shaders - to be continued in part 2 Change-Id: I9735fd02fc9e86ae486cca4c06f6d7f2a4b0b7da Reviewed-by: Mika Salmela <mika.salmela@digia.com>
Diffstat (limited to 'src/datavisualization/engine/abstract3dcontroller.cpp')
-rw-r--r--src/datavisualization/engine/abstract3dcontroller.cpp39
1 files changed, 36 insertions, 3 deletions
diff --git a/src/datavisualization/engine/abstract3dcontroller.cpp b/src/datavisualization/engine/abstract3dcontroller.cpp
index 885904d4..e10069ff 100644
--- a/src/datavisualization/engine/abstract3dcontroller.cpp
+++ b/src/datavisualization/engine/abstract3dcontroller.cpp
@@ -50,6 +50,7 @@ Abstract3DController::Abstract3DController(QRect initialViewport, Q3DScene *scen
m_axisZ(0),
m_renderer(0),
m_isDataDirty(true),
+ m_isCustomDataDirty(true),
m_isSeriesVisualsDirty(true),
m_renderPending(false),
m_measureFps(false),
@@ -87,6 +88,9 @@ Abstract3DController::~Abstract3DController()
destroyRenderer();
delete m_scene;
delete m_themeManager;
+ foreach (CustomDataItem *item, m_customItems)
+ delete item;
+ m_customItems.clear();
}
void Abstract3DController::destroyRenderer()
@@ -369,6 +373,11 @@ void Abstract3DController::synchDataToRenderer()
m_renderer->updateData();
m_isDataDirty = false;
}
+
+ if (m_isCustomDataDirty) {
+ m_renderer->updateCustomData(m_customItems);
+ m_isCustomDataDirty = false;
+ }
}
void Abstract3DController::render(const GLuint defaultFboHandle)
@@ -814,6 +823,30 @@ void Abstract3DController::requestRender(QOpenGLFramebufferObject *fbo)
m_renderer->render(fbo->handle());
}
+int Abstract3DController::addCustomItem(const QString &meshFile, const QVector3D &position,
+ const QVector3D &scaling, const QQuaternion &rotation,
+ const QImage &textureImage)
+{
+ CustomDataItem *newItem = new CustomDataItem();
+ newItem->setMeshFile(meshFile);
+ newItem->setPosition(position);
+ newItem->setScaling(scaling);
+ newItem->setRotation(rotation);
+ newItem->setTextureImage(textureImage);
+ m_customItems.append(newItem);
+ m_isCustomDataDirty = true;
+ emitNeedRender();
+ return m_customItems.count() - 1;
+}
+
+void Abstract3DController::deleteCustomItem(int index)
+{
+ delete m_customItems[index];
+ m_customItems.removeAt(index);
+ m_isCustomDataDirty = true;
+ emitNeedRender();
+}
+
void Abstract3DController::handleAxisTitleChanged(const QString &title)
{
Q_UNUSED(title)
@@ -974,9 +1007,9 @@ void Abstract3DController::setMeasureFps(bool enable)
m_currentFps = 0.0;
if (enable) {
- m_frameTimer.start();
- m_numFrames = -1;
- emitNeedRender();
+ m_frameTimer.start();
+ m_numFrames = -1;
+ emitNeedRender();
}
emit measureFpsChanged(enable);
}