summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@epitech.eu>2014-03-04 16:40:33 +0100
committerSean Harmer <sean.harmer@kdab.com>2014-03-25 12:39:11 +0100
commit1d0b2b7a9d491fe19a7e9675e5ec2b3c064c1cc4 (patch)
tree690fa50e92287643d8323b7a0eafbb3449b42c98
parent40bf98aeaf22bbeb50fdb2b227c3b9926b7c5eae (diff)
Rendering Aspect to dedicated Qt3D module library.
Aspects are now independent Qt3D modules. This allows aspects to expose classes that can be reused by other aspects. Unlike plugins however, aspect modules have to be registered to the QAspectManager when the Qt3D window is created. At the moment there is only a single aspect : RendererAspect To load the RendererAspect QT += 3drenderer Examples updated to work with the changes. QML components defined in the RendererAspect are accessible by importing Qt3D.Render 2.0. Examples have been updated accordingly. Change-Id: I1281b1ffc1a633292b394c7d0460f1e16b34b488 Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
-rw-r--r--examples/assimp/assimp.pro2
-rw-r--r--examples/assimp/main.cpp48
-rw-r--r--examples/assimp/main.qml1
-rw-r--r--examples/cpp_example/cpp_example.pro2
-rw-r--r--examples/cpp_example/main.cpp7
-rw-r--r--examples/gltf/gltf.pro2
-rw-r--r--examples/gltf/main.cpp49
-rw-r--r--examples/gltf/main.qml1
-rw-r--r--examples/simple-qml/main.cpp48
-rw-r--r--examples/simple-qml/simple-qml.pro2
-rw-r--r--src/3rdparty/assimp/assimp.pri2
-rw-r--r--src/core/aspects/abstractaspect.h3
-rw-r--r--src/core/aspects/qaspectengine.cpp21
-rw-r--r--src/core/aspects/qaspectengine.h1
-rw-r--r--src/core/aspects/qaspectmanager.cpp52
-rw-r--r--src/core/aspects/qaspectmanager.h4
-rw-r--r--src/core/aspects/qaspectthread.cpp8
-rw-r--r--src/core/bounds/axisalignedboundingbox.cpp2
-rw-r--r--src/core/bounds/axisalignedboundingbox.h2
-rw-r--r--src/core/bounds/bounds.h2
-rw-r--r--src/core/core-components/core-components.pri7
-rw-r--r--src/core/core.pro3
-rw-r--r--src/core/jobs/qjob.h2
-rw-r--r--src/core/nodes/nodevisitor.h2
-rw-r--r--src/core/render/backend/renderer.cpp9
-rw-r--r--src/core/render/backend/rendereraspect.cpp43
-rw-r--r--src/core/render/backend/rendereraspect.h5
-rw-r--r--src/core/render/frontend/cameraselector.h4
-rw-r--r--src/core/render/frontend/effect.h4
-rw-r--r--src/core/render/frontend/material.h4
-rw-r--r--src/core/render/frontend/mesh.cpp3
-rw-r--r--src/core/render/frontend/mesh.h4
-rw-r--r--src/core/render/frontend/qitemmodelbuffer.h4
-rw-r--r--src/core/render/frontend/render-frontend.pri6
-rw-r--r--src/core/render/frontend/renderpass.h4
-rw-r--r--src/core/render/frontend/renderpassfilter.h4
-rw-r--r--src/core/render/frontend/scene.cpp (renamed from src/core/core-components/scene.cpp)3
-rw-r--r--src/core/render/frontend/scene.h (renamed from src/core/core-components/scene.h)6
-rw-r--r--src/core/render/frontend/shaderprogram.h4
-rw-r--r--src/core/render/frontend/shape.h4
-rw-r--r--src/core/render/frontend/sphere.h4
-rw-r--r--src/core/render/frontend/tag.h4
-rw-r--r--src/core/render/frontend/technique.h4
-rw-r--r--src/core/render/frontend/techniquefilter.h4
-rw-r--r--src/core/render/frontend/texture.h4
-rw-r--r--src/core/render/frontend/transform.h4
-rw-r--r--src/core/render/frontend/viewport.h4
-rw-r--r--src/core/render/qt3drenderer_global.h53
-rw-r--r--src/core/render/render.pri8
-rw-r--r--src/core/render/render.pro36
-rw-r--r--src/core/window.cpp12
-rw-r--r--src/core/window.h3
-rw-r--r--src/src.pro3
-rw-r--r--sync.profile1
54 files changed, 306 insertions, 222 deletions
diff --git a/examples/assimp/assimp.pro b/examples/assimp/assimp.pro
index 6397b3e96..3c56b754f 100644
--- a/examples/assimp/assimp.pro
+++ b/examples/assimp/assimp.pro
@@ -2,7 +2,7 @@ TEMPLATE = app
SOURCE += main.cpp
-QT += qml quick 3dcore
+QT += qml quick 3dcore 3drenderer
OTHER_FILES += main.qml
diff --git a/examples/assimp/main.cpp b/examples/assimp/main.cpp
index f72eadf55..3e7412ffd 100644
--- a/examples/assimp/main.cpp
+++ b/examples/assimp/main.cpp
@@ -41,29 +41,8 @@
#include <exampleresources.h>
-#include <camera.h>
-#include <cameraselector.h>
-#include <effect.h>
-#include <entity.h>
-#include <material.h>
-#include <mesh.h>
-#include <node.h>
-#include <renderpass.h>
-#include <renderpassfilter.h>
-#include <shaderprogram.h>
-#include <technique.h>
-#include <techniquefilter.h>
-#include <viewport.h>
-#include <scene.h>
-#include <shape.h>
-#include <texture.h>
#include <window.h>
-
-#include <gltfparser.h>
-
-#include <translatetransform.h>
-#include <matrixtransform.h>
-#include <rotatetransform.h>
+#include <rendereraspect.h>
#include <QGuiApplication>
#include <QtQml>
@@ -74,31 +53,8 @@ int main(int argc, char* argv[])
initializeAssetResources("../exampleresources/example-assets.qrb");
- qmlRegisterType<Qt3D::Node>("Qt3D", 2, 0, "Node");
- qmlRegisterType<Qt3D::Entity>("Qt3D", 2, 0, "Entity");
- qmlRegisterType<Qt3D::Scene>("Qt3D", 2, 0, "Scene");
- qmlRegisterType<Qt3D::Camera>("Qt3D", 2, 0, "Camera");
- qmlRegisterType<Qt3D::Effect>("Qt3D", 2, 0, "Effect");
- qmlRegisterType<Qt3D::Technique>("Qt3D", 2, 0, "Technique");
- qmlRegisterType<Qt3D::Tag>("Qt3D", 2, 0, "Tag");
- qmlRegisterType<Qt3D::Mesh>("Qt3D", 2, 0, "Mesh");
- qmlRegisterType<Qt3D::Shape>("Qt3D", 2, 0, "Shape");
- qmlRegisterType<Qt3D::Material>("Qt3D", 2, 0, "Material");
- qmlRegisterType<Qt3D::RenderPass>("Qt3D", 2, 0, "RenderPass");
- qmlRegisterType<Qt3D::ShaderProgram>("Qt3D", 2, 0, "ShaderProgram");
- qmlRegisterType<Qt3D::QmlTexture>("Qt3D", 2, 0, "Texture");
-
- qmlRegisterType<Qt3D::MatrixTransform>("Qt3D", 2, 0, "MatrixTransform");
- qmlRegisterType<Qt3D::TranslateTransform>("Qt3D", 2, 0, "Translate");
- qmlRegisterType<Qt3D::RotateTransform>("Qt3D", 2, 0, "Rotate");
-
- // Framegraph components - TODO RenderTarget, RenderTargetSelector
- qmlRegisterType<Qt3D::Viewport>("Qt3D", 2, 0, "Viewport");
- qmlRegisterType<Qt3D::CameraSelector>("Qt3D", 2, 0, "CameraSelector");
- qmlRegisterType<Qt3D::RenderPassFilter>("Qt3D", 2, 0, "RenderPassFilter");
- qmlRegisterType<Qt3D::TechniqueFilter>("Qt3D", 2, 0, "TechniqueFilter");
-
Qt3D::Window view;
+ view.registerAspect(new Qt3D::RendererAspect());
view.setSource(QUrl("qrc:/main.qml"));
view.show();
diff --git a/examples/assimp/main.qml b/examples/assimp/main.qml
index 9566bd8e0..fa8274d8b 100644
--- a/examples/assimp/main.qml
+++ b/examples/assimp/main.qml
@@ -40,6 +40,7 @@
****************************************************************************/
import Qt3D 2.0
+import Qt3D.Render 2.0
import QtQuick 2.1 as QQ2
Node
diff --git a/examples/cpp_example/cpp_example.pro b/examples/cpp_example/cpp_example.pro
index 2657093ee..d9c8b36a5 100644
--- a/examples/cpp_example/cpp_example.pro
+++ b/examples/cpp_example/cpp_example.pro
@@ -1,6 +1,6 @@
TEMPLATE = app
-QT += 3dcore qml
+QT += 3dcore qml 3drenderer
include("../exampleresources/exampleresources.pri")
diff --git a/examples/cpp_example/main.cpp b/examples/cpp_example/main.cpp
index f822d73fd..a844f794e 100644
--- a/examples/cpp_example/main.cpp
+++ b/examples/cpp_example/main.cpp
@@ -62,6 +62,7 @@
#include <techniquefilter.h>
#include <viewport.h>
#include <cameraselector.h>
+#include <rendereraspect.h>
int main(int ac, char **av)
{
@@ -69,12 +70,8 @@ int main(int ac, char **av)
initializeAssetResources("../exampleresources/example-assets.qrb");
- qmlRegisterType<Qt3D::Node>("Qt3D", 2, 0, "Node");
- qmlRegisterType<Qt3D::Entity>("Qt3D", 2, 0, "Entity");
-
- qmlRegisterType<Qt3D::MatrixTransform>("Qt3D", 2, 0, "MatrixTransform");
-
Qt3D::Window view;
+ view.registerAspect(new Qt3D::RendererAspect());
Qt3D::Entity *rootEntity = new Qt3D::Entity();
Qt3D::Scene *scene = new Qt3D::Scene();
diff --git a/examples/gltf/gltf.pro b/examples/gltf/gltf.pro
index da22f1c48..a439d6a12 100644
--- a/examples/gltf/gltf.pro
+++ b/examples/gltf/gltf.pro
@@ -1,6 +1,6 @@
TEMPLATE = app
-QT += 3dcore qml quick
+QT += 3dcore 3drenderer qml quick
include("../exampleresources/exampleresources.pri")
diff --git a/examples/gltf/main.cpp b/examples/gltf/main.cpp
index f72eadf55..020401d9f 100644
--- a/examples/gltf/main.cpp
+++ b/examples/gltf/main.cpp
@@ -40,30 +40,8 @@
****************************************************************************/
#include <exampleresources.h>
-
-#include <camera.h>
-#include <cameraselector.h>
-#include <effect.h>
-#include <entity.h>
-#include <material.h>
-#include <mesh.h>
-#include <node.h>
-#include <renderpass.h>
-#include <renderpassfilter.h>
-#include <shaderprogram.h>
-#include <technique.h>
-#include <techniquefilter.h>
-#include <viewport.h>
-#include <scene.h>
-#include <shape.h>
-#include <texture.h>
#include <window.h>
-
-#include <gltfparser.h>
-
-#include <translatetransform.h>
-#include <matrixtransform.h>
-#include <rotatetransform.h>
+#include <rendereraspect.h>
#include <QGuiApplication>
#include <QtQml>
@@ -74,31 +52,8 @@ int main(int argc, char* argv[])
initializeAssetResources("../exampleresources/example-assets.qrb");
- qmlRegisterType<Qt3D::Node>("Qt3D", 2, 0, "Node");
- qmlRegisterType<Qt3D::Entity>("Qt3D", 2, 0, "Entity");
- qmlRegisterType<Qt3D::Scene>("Qt3D", 2, 0, "Scene");
- qmlRegisterType<Qt3D::Camera>("Qt3D", 2, 0, "Camera");
- qmlRegisterType<Qt3D::Effect>("Qt3D", 2, 0, "Effect");
- qmlRegisterType<Qt3D::Technique>("Qt3D", 2, 0, "Technique");
- qmlRegisterType<Qt3D::Tag>("Qt3D", 2, 0, "Tag");
- qmlRegisterType<Qt3D::Mesh>("Qt3D", 2, 0, "Mesh");
- qmlRegisterType<Qt3D::Shape>("Qt3D", 2, 0, "Shape");
- qmlRegisterType<Qt3D::Material>("Qt3D", 2, 0, "Material");
- qmlRegisterType<Qt3D::RenderPass>("Qt3D", 2, 0, "RenderPass");
- qmlRegisterType<Qt3D::ShaderProgram>("Qt3D", 2, 0, "ShaderProgram");
- qmlRegisterType<Qt3D::QmlTexture>("Qt3D", 2, 0, "Texture");
-
- qmlRegisterType<Qt3D::MatrixTransform>("Qt3D", 2, 0, "MatrixTransform");
- qmlRegisterType<Qt3D::TranslateTransform>("Qt3D", 2, 0, "Translate");
- qmlRegisterType<Qt3D::RotateTransform>("Qt3D", 2, 0, "Rotate");
-
- // Framegraph components - TODO RenderTarget, RenderTargetSelector
- qmlRegisterType<Qt3D::Viewport>("Qt3D", 2, 0, "Viewport");
- qmlRegisterType<Qt3D::CameraSelector>("Qt3D", 2, 0, "CameraSelector");
- qmlRegisterType<Qt3D::RenderPassFilter>("Qt3D", 2, 0, "RenderPassFilter");
- qmlRegisterType<Qt3D::TechniqueFilter>("Qt3D", 2, 0, "TechniqueFilter");
-
Qt3D::Window view;
+ view.registerAspect(new Qt3D::RendererAspect());
view.setSource(QUrl("qrc:/main.qml"));
view.show();
diff --git a/examples/gltf/main.qml b/examples/gltf/main.qml
index 0c10d2f91..5d7690f3f 100644
--- a/examples/gltf/main.qml
+++ b/examples/gltf/main.qml
@@ -40,6 +40,7 @@
****************************************************************************/
import Qt3D 2.0
+import Qt3D.Render 2.0
// For Qt.vector3d() and friends. For some reason this is provided by
// QQuickValueTypeProvider in QtQuick rather than the default value
diff --git a/examples/simple-qml/main.cpp b/examples/simple-qml/main.cpp
index be8113962..a1f963a85 100644
--- a/examples/simple-qml/main.cpp
+++ b/examples/simple-qml/main.cpp
@@ -40,29 +40,7 @@
****************************************************************************/
#include <window.h>
-
-#include <camera.h>
-#include <cameraselector.h>
-#include <effect.h>
-#include <entity.h>
-#include <material.h>
-#include <mesh.h>
-#include <node.h>
-#include <renderpass.h>
-#include <renderpassfilter.h>
-#include <shaderprogram.h>
-#include <technique.h>
-#include <techniquefilter.h>
-#include <transform.h>
-#include <viewport.h>
-#include <scene.h>
-
-#include <gltfparser.h>
-
-#include <matrixtransform.h>
-#include <rotatetransform.h>
-#include <translatetransform.h>
-#include <lookattransform.h>
+#include <rendereraspect.h>
#include <QGuiApplication>
#include <QtQml>
@@ -71,30 +49,8 @@ int main(int argc, char* argv[])
{
QGuiApplication app(argc, argv);
- qmlRegisterType<Qt3D::Node>("Qt3D", 2, 0, "Node");
- qmlRegisterType<Qt3D::Entity>("Qt3D", 2, 0, "Entity");
- qmlRegisterType<Qt3D::Scene>("Qt3D", 2, 0, "Scene");
- qmlRegisterType<Qt3D::Camera>("Qt3D", 2, 0, "Camera");
- qmlRegisterType<Qt3D::Transform>("Qt3D", 2, 0, "Transform");
- qmlRegisterType<Qt3D::Effect>("Qt3D", 2, 0, "Effect");
- qmlRegisterType<Qt3D::Technique>("Qt3D", 2, 0, "Technique");
- qmlRegisterType<Qt3D::Tag>("Qt3D", 2, 0, "Tag");
- qmlRegisterType<Qt3D::Mesh>("Qt3D", 2, 0, "Mesh");
- qmlRegisterType<Qt3D::Material>("Qt3D", 2, 0, "Material");
- qmlRegisterType<Qt3D::RenderPass>("Qt3D", 2, 0, "RenderPass");
- qmlRegisterType<Qt3D::ShaderProgram>("Qt3D", 2, 0, "ShaderProgram");
- qmlRegisterType<Qt3D::MatrixTransform>("Qt3D", 2, 0, "MatrixTransform");
- qmlRegisterType<Qt3D::TranslateTransform>("Qt3D", 2, 0, "Translate");
- qmlRegisterType<Qt3D::RotateTransform>("Qt3D", 2, 0, "Rotate");
- qmlRegisterType<Qt3D::LookAtTransform>("Qt3D", 2, 0, "LookAt");
-
- // Framegraph components - TODO RenderTarget, RenderTargetSelector
- qmlRegisterType<Qt3D::Viewport>("Qt3D", 2, 0, "Viewport");
- qmlRegisterType<Qt3D::CameraSelector>("Qt3D", 2, 0, "CameraSelector");
- qmlRegisterType<Qt3D::RenderPassFilter>("Qt3D", 2, 0, "RenderPassFilter");
- qmlRegisterType<Qt3D::TechniqueFilter>("Qt3D", 2, 0, "TechniqueFilter");
-
Qt3D::Window view;
+ view.registerAspect(new Qt3D::RendererAspect());
view.setSource(QUrl("qrc:/main.qml"));
view.show();
diff --git a/examples/simple-qml/simple-qml.pro b/examples/simple-qml/simple-qml.pro
index af4a90d64..b534097a5 100644
--- a/examples/simple-qml/simple-qml.pro
+++ b/examples/simple-qml/simple-qml.pro
@@ -1,6 +1,6 @@
TEMPLATE = app
-QT += 3dcore qml quick
+QT += 3dcore 3drenderer qml quick
include("../exampleresources/exampleresources.pri")
diff --git a/src/3rdparty/assimp/assimp.pri b/src/3rdparty/assimp/assimp.pri
index 4be0726b3..91b68ab90 100644
--- a/src/3rdparty/assimp/assimp.pri
+++ b/src/3rdparty/assimp/assimp.pri
@@ -187,8 +187,6 @@ HEADERS += revision.h \
code/XFileImporter.h \
code/XFileParser.h \
code/XGLLoader.h \
- doc/dox.h \
- doc/dox_cmd.h \
code/res/resource.h \
contrib/clipper/clipper.hpp \
contrib/ConvertUTF/ConvertUTF.h \
diff --git a/src/core/aspects/abstractaspect.h b/src/core/aspects/abstractaspect.h
index 7dd555b32..474d5a63d 100644
--- a/src/core/aspects/abstractaspect.h
+++ b/src/core/aspects/abstractaspect.h
@@ -86,6 +86,8 @@ public:
virtual void setWindow(QWindow* win);
+ virtual void registerQmlComponents() = 0;
+
protected:
virtual void registerAspectHelper(Node *rootObject) = 0;
virtual void unregisterAspectHelper(Node *rootObject) = 0;
@@ -98,7 +100,6 @@ private:
Node *m_root;
AspectType m_aspectType;
};
-
}
#endif // ABSTRACTASPECT_H
diff --git a/src/core/aspects/qaspectengine.cpp b/src/core/aspects/qaspectengine.cpp
index 63e470bfc..1a4c2f28d 100644
--- a/src/core/aspects/qaspectengine.cpp
+++ b/src/core/aspects/qaspectengine.cpp
@@ -72,13 +72,30 @@ void QAspectEngine::shutdown()
void QAspectEngine::setWindow(QWindow *window)
{
- QMetaObject::invokeMethod(m_aspectThread->aspectManager(), "setWindow", Q_ARG(QWindow *, window));
+ QMetaObject::invokeMethod(m_aspectThread->aspectManager(),
+ "setWindow",
+ Q_ARG(QWindow *, window));
+}
+
+/*!
+ * Registers a new \a aspect to the AspectManager.
+ * Passing as a QObject* as abstracts like AbstractAspect
+ * cannot be registered as a meta type.
+ */
+void QAspectEngine::registerAspect(AbstractAspect *aspect)
+{
+ QMetaObject::invokeMethod(m_aspectThread->aspectManager(),
+ "registerAspect",
+ Q_ARG(QObject *, reinterpret_cast<QObject*>(aspect)));
}
void QAspectEngine::setRoot(QObject *rootObject)
{
QMutexLocker locker(&m_mutex);
- QMetaObject::invokeMethod(m_aspectThread->aspectManager(), "setRoot", Q_ARG(QObject *, rootObject), Q_ARG(QWaitCondition *, &m_waitCondition));
+ QMetaObject::invokeMethod(m_aspectThread->aspectManager(),
+ "setRoot",
+ Q_ARG(QObject *, rootObject),
+ Q_ARG(QWaitCondition *, &m_waitCondition));
qDebug() << "Putting main thread to sleep whilst aspects build their local scenes...";
m_waitCondition.wait(&m_mutex);
diff --git a/src/core/aspects/qaspectengine.h b/src/core/aspects/qaspectengine.h
index a7f949088..0704b41a0 100644
--- a/src/core/aspects/qaspectengine.h
+++ b/src/core/aspects/qaspectengine.h
@@ -67,6 +67,7 @@ public:
void setRoot(QObject *rootObject);
void setWindow(QWindow *window);
+ void registerAspect(AbstractAspect *aspect);
private:
QAspectThread *m_aspectThread;
QMutex m_mutex;
diff --git a/src/core/aspects/qaspectmanager.cpp b/src/core/aspects/qaspectmanager.cpp
index 310d2528e..1be199f58 100644
--- a/src/core/aspects/qaspectmanager.cpp
+++ b/src/core/aspects/qaspectmanager.cpp
@@ -50,6 +50,14 @@
#include "qtickclock.h"
#include <node.h>
+#include <entity.h>
+#include <camera.h>
+#include <scene.h>
+#include <matrixtransform.h>
+#include <rotatetransform.h>
+#include <translatetransform.h>
+#include <lookattransform.h>
+#include <scaletransform.h>
#include <QDebug>
#include <QElapsedTimer>
@@ -57,6 +65,9 @@
#include <QThread>
#include <QWaitCondition>
#include <QWindow>
+#include <QPluginLoader>
+#include <QDir>
+#include <QtQml>
namespace Qt3D {
@@ -79,6 +90,9 @@ void QAspectManager::initialize()
m_jobManager->initialize();
m_scheduler->setAspectManager(this);
m_changeArbiter->initialize(m_jobManager);
+
+ // Regiter Qml
+ registerCoreQmlComponents();
}
void QAspectManager::shutdown()
@@ -86,6 +100,23 @@ void QAspectManager::shutdown()
qDebug() << Q_FUNC_INFO;
}
+/*!
+ * Registers core Qt3D Qml Components to the Qml Engine.
+ */
+void QAspectManager::registerCoreQmlComponents()
+{
+ qDebug() << Q_FUNC_INFO;
+ qmlRegisterType<Qt3D::Node>("Qt3D", 2, 0, "Node");
+ qmlRegisterType<Qt3D::Entity>("Qt3D", 2, 0, "Entity");
+ qmlRegisterType<Qt3D::Camera>("Qt3D", 2, 0, "Camera");
+ qmlRegisterType<Qt3D::MatrixTransform>("Qt3D", 2, 0, "MatrixTransform");
+ qmlRegisterType<Qt3D::TranslateTransform>("Qt3D", 2, 0, "Translate");
+ qmlRegisterType<Qt3D::RotateTransform>("Qt3D", 2, 0, "Rotate");
+ qmlRegisterType<Qt3D::LookAtTransform>("Qt3D", 2, 0, "LookAt");
+ qmlRegisterType<Qt3D::ScaleTransform>("Qt3D", 2, 0, "Scale");
+}
+
+
void QAspectManager::setRoot(QObject *rootObject, QWaitCondition *waitCondition)
{
qDebug() << Q_FUNC_INFO;
@@ -114,9 +145,6 @@ void QAspectManager::setRoot(QObject *rootObject, QWaitCondition *waitCondition)
if (rootObject) {
// TODO Load all aspect plugins that are found and required.
- // For now just load the render aspect
- RendererAspect *renderAspect = new RendererAspect(this);
- m_aspects.append(renderAspect);
Q_FOREACH (AbstractAspect *aspect, m_aspects)
aspect->initialize(this);
@@ -148,6 +176,24 @@ void QAspectManager::setWindow(QWindow *window)
}
}
+/*!
+ * Registers a new \a aspect.
+ */
+void QAspectManager::registerAspect(QObject *aspect)
+{
+ qDebug() << Q_FUNC_INFO << "Registering aspect libraries";
+
+ AbstractAspect *aspectImpl = Q_NULLPTR;
+ if ((aspectImpl = qobject_cast<AbstractAspect*>(aspect)) != Q_NULLPTR) {
+ m_aspects.append(aspectImpl);
+ // RegisterQmlComponents
+ aspectImpl->registerQmlComponents();
+ }
+ else {
+ qWarning() << Q_FUNC_INFO << "Failed to register aspect";
+ }
+}
+
void QAspectManager::exec()
{
// Gentlemen, start your engines
diff --git a/src/core/aspects/qaspectmanager.h b/src/core/aspects/qaspectmanager.h
index 2653d4a0f..b59320f72 100644
--- a/src/core/aspects/qaspectmanager.h
+++ b/src/core/aspects/qaspectmanager.h
@@ -70,6 +70,7 @@ public slots:
void setRoot(QObject *rootObject, QWaitCondition *waitCondition);
void setWindow(QWindow* window);
+ void registerAspect(QObject *aspect);
void exec();
@@ -85,6 +86,9 @@ private:
QJobManagerInterface *m_jobManager;
QChangeArbiter *m_changeArbiter;
bool m_runMainLoop;
+
+private:
+ void registerCoreQmlComponents();
};
} // namespace Qt3D
diff --git a/src/core/aspects/qaspectthread.cpp b/src/core/aspects/qaspectthread.cpp
index 22d920adb..e729c05e2 100644
--- a/src/core/aspects/qaspectthread.cpp
+++ b/src/core/aspects/qaspectthread.cpp
@@ -72,13 +72,15 @@ void QAspectThread::run()
QMutexLocker locker(&m_mutex);
m_aspectManager = new QAspectManager;
+ // Load and initialize the aspects and any other core services
+ // Done before releasing condition to make sure that Qml Components
+ // Are exposed prior to Qml Engine source being set
+ m_aspectManager->initialize();
+
// Wake up the calling thread now that our worker objects are ready for action
m_waitCondition.wakeOne();
m_mutex.unlock();
- // Load and initialize the aspects and any other core services
- m_aspectManager->initialize();
-
// Enter the main loop
m_aspectManager->exec();
diff --git a/src/core/bounds/axisalignedboundingbox.cpp b/src/core/bounds/axisalignedboundingbox.cpp
index 8ee394127..a8dcb74e0 100644
--- a/src/core/bounds/axisalignedboundingbox.cpp
+++ b/src/core/bounds/axisalignedboundingbox.cpp
@@ -77,7 +77,7 @@ void AxisAlignedBoundingBox::update(const QVector<QVector3D> &points)
#endif
}
-QDebug operator<<(QDebug dbg, const AxisAlignedBoundingBox &c)
+QT3DCORESHARED_EXPORT QDebug operator<<(QDebug dbg, const AxisAlignedBoundingBox &c)
{
dbg.nospace() << "AABB ( min:" << c.minPoint() << ", max:" << c.maxPoint() << ")";
return dbg.space();
diff --git a/src/core/bounds/axisalignedboundingbox.h b/src/core/bounds/axisalignedboundingbox.h
index e16dda1a8..ffa6763f1 100644
--- a/src/core/bounds/axisalignedboundingbox.h
+++ b/src/core/bounds/axisalignedboundingbox.h
@@ -53,7 +53,7 @@ class QDebug;
namespace Qt3D {
-class AxisAlignedBoundingBox
+class QT3DCORESHARED_EXPORT AxisAlignedBoundingBox
{
public:
inline AxisAlignedBoundingBox()
diff --git a/src/core/bounds/bounds.h b/src/core/bounds/bounds.h
index cf59d7776..ec1a57f1c 100644
--- a/src/core/bounds/bounds.h
+++ b/src/core/bounds/bounds.h
@@ -49,7 +49,7 @@
namespace Qt3D {
-class Bounds : public QObject
+class QT3DCORESHARED_EXPORT Bounds : public QObject
{
Q_OBJECT
public:
diff --git a/src/core/core-components/core-components.pri b/src/core/core-components/core-components.pri
index 0714d5328..a00b23773 100644
--- a/src/core/core-components/core-components.pri
+++ b/src/core/core-components/core-components.pri
@@ -1,10 +1,7 @@
HEADERS += \
$$PWD/camera_p.h \
- $$PWD/camera.h \
- $$PWD/scene.h
-
+ $$PWD/camera.h
SOURCES += \
- $$PWD/camera.cpp \
- $$PWD/scene.cpp
+ $$PWD/camera.cpp
INCLUDEPATH += $$PWD
diff --git a/src/core/core.pro b/src/core/core.pro
index 4b1d05a51..b74e23d1d 100644
--- a/src/core/core.pro
+++ b/src/core/core.pro
@@ -20,9 +20,8 @@ gcov {
win32-g++*:QMAKE_CXXFLAGS_CXX11 = -std=gnu++0x
include(../3rdparty/threadweaver/src/threadweaver.pri)
-include(../3rdparty/assimp/assimp.pri)
include(core.pri)
-include(render/render.pri)
+
PUBLIC_HEADERS = $$HEADERS
HEADERS += $$PRIVATE_HEADERS
diff --git a/src/core/jobs/qjob.h b/src/core/jobs/qjob.h
index c49907538..ee24ab6dd 100644
--- a/src/core/jobs/qjob.h
+++ b/src/core/jobs/qjob.h
@@ -49,7 +49,7 @@
namespace Qt3D {
-class QJob
+class QT3DCORESHARED_EXPORT QJob
{
public:
QJob();
diff --git a/src/core/nodes/nodevisitor.h b/src/core/nodes/nodevisitor.h
index 2be95a8d1..7de262e04 100644
--- a/src/core/nodes/nodevisitor.h
+++ b/src/core/nodes/nodevisitor.h
@@ -54,7 +54,7 @@ class Entity;
typedef QList<Node *> NodeList;
-class NodeVisitor
+class QT3DCORESHARED_EXPORT NodeVisitor
{
public:
NodeVisitor();
diff --git a/src/core/render/backend/renderer.cpp b/src/core/render/backend/renderer.cpp
index c55d94d92..ff0c5b734 100644
--- a/src/core/render/backend/renderer.cpp
+++ b/src/core/render/backend/renderer.cpp
@@ -272,7 +272,14 @@ void Renderer::setSceneGraphRoot(Node *sgRoot)
// TODO: Unify this to one root node and scene builder
Scene *scene = Scene::findInTree(sgRoot);
- if (scene) {
+ if (scene)
+ {
+ // Scene needs to be built with scene parsers
+ // For each scene parser, check whether scene source format
+ // is supported, filter if there is a preference toward which
+ // parser should parse the file if two parsers support the same
+ // format
+
qDebug() << "building temporary backend";
m_sceneGraphRoot = scene;
TemporaryBackendBuilder tbb(this);
diff --git a/src/core/render/backend/rendereraspect.cpp b/src/core/render/backend/rendereraspect.cpp
index 2021bc019..98fe78cb2 100644
--- a/src/core/render/backend/rendereraspect.cpp
+++ b/src/core/render/backend/rendereraspect.cpp
@@ -55,6 +55,24 @@
#include <QThread>
#include <QWindow>
+#include <QtQml>
+
+#include "scene.h"
+#include "transform.h"
+#include "effect.h"
+#include "technique.h"
+#include "tag.h"
+#include "mesh.h"
+#include "material.h"
+#include "renderpass.h"
+#include "shaderprogram.h"
+#include "viewport.h"
+#include "cameraselector.h"
+#include "renderpassfilter.h"
+#include "techniquefilter.h"
+#include "shape.h"
+#include "texture.h"
+
namespace Qt3D {
RendererAspect::RendererAspect(QObject *parent)
@@ -126,4 +144,29 @@ void RendererAspect::cleanupHelper()
//QMetaObject::invokeMethod(renderer, "cleanup");
}
+/*!
+ * Registers the Qt3D Qml components defined by the aspect to the QmlEngine.
+ */
+void RendererAspect::registerQmlComponents()
+{
+ qmlRegisterType<Qt3D::Scene>("Qt3D.Render", 2, 0, "Scene");
+ qmlRegisterType<Qt3D::Transform>("Qt3D.Render", 2, 0, "Transform");
+ qmlRegisterType<Qt3D::Effect>("Qt3D.Render", 2, 0, "Effect");
+ qmlRegisterType<Qt3D::Technique>("Qt3D.Render", 2, 0, "Technique");
+ qmlRegisterType<Qt3D::Tag>("Qt3D.Render", 2, 0, "Tag");
+ qmlRegisterType<Qt3D::Mesh>("Qt3D.Render", 2, 0, "Mesh");
+ qmlRegisterType<Qt3D::Material>("Qt3D.Render", 2, 0, "Material");
+ qmlRegisterType<Qt3D::RenderPass>("Qt3D.Render", 2, 0, "RenderPass");
+ qmlRegisterType<Qt3D::ShaderProgram>("Qt3D.Render", 2, 0, "ShaderProgram");
+
+ qmlRegisterType<Qt3D::Shape>("Qt3D.Render", 2, 0, "Shape");
+ qmlRegisterType<Qt3D::QmlTexture>("Qt3D.Render", 2, 0, "Texture");
+
+ // Framegraph components - TODO RenderTarget, RenderTargetSelector
+ qmlRegisterType<Qt3D::Viewport>("Qt3D.Render", 2, 0, "Viewport");
+ qmlRegisterType<Qt3D::CameraSelector>("Qt3D.Render", 2, 0, "CameraSelector");
+ qmlRegisterType<Qt3D::RenderPassFilter>("Qt3D.Render", 2, 0, "RenderPassFilter");
+ qmlRegisterType<Qt3D::TechniqueFilter>("Qt3D.Render", 2, 0, "TechniqueFilter");
+}
+
}
diff --git a/src/core/render/backend/rendereraspect.h b/src/core/render/backend/rendereraspect.h
index 3fd04744f..f1a31fdaa 100644
--- a/src/core/render/backend/rendereraspect.h
+++ b/src/core/render/backend/rendereraspect.h
@@ -42,8 +42,10 @@
#ifndef RENDERERASPECT_H
#define RENDERERASPECT_H
+#include <qt3drenderer_global.h>
#include "abstractaspect.h"
+
namespace Qt3D {
class RenderThread;
}
@@ -52,7 +54,7 @@ class QWindow;
namespace Qt3D {
-class RendererAspect : public AbstractAspect
+class QT3DRENDERERSHARED_EXPORT RendererAspect : public AbstractAspect
{
Q_OBJECT
public:
@@ -61,6 +63,7 @@ public:
virtual void setWindow(QWindow *window);
QVector<QJobPtr> jobsToExecute() Q_DECL_OVERRIDE;
+ void registerQmlComponents() Q_DECL_OVERRIDE;
protected:
void registerAspectHelper(Node *rootObject) Q_DECL_OVERRIDE;
diff --git a/src/core/render/frontend/cameraselector.h b/src/core/render/frontend/cameraselector.h
index bb2b6f1ea..e5efa37a5 100644
--- a/src/core/render/frontend/cameraselector.h
+++ b/src/core/render/frontend/cameraselector.h
@@ -43,13 +43,13 @@
#define QT3D_CAMERASELECTOR_H
#include <component.h>
-#include <qt3dcore_global.h>
+#include <qt3drenderer_global.h>
namespace Qt3D {
class Camera;
-class QT3DCORESHARED_EXPORT CameraSelector : public Qt3D::Component
+class QT3DRENDERERSHARED_EXPORT CameraSelector : public Qt3D::Component
{
Q_OBJECT
diff --git a/src/core/render/frontend/effect.h b/src/core/render/frontend/effect.h
index f1caf692e..0459b67ef 100644
--- a/src/core/render/frontend/effect.h
+++ b/src/core/render/frontend/effect.h
@@ -42,7 +42,7 @@
#ifndef EFFECT_H
#define EFFECT_H
-#include <qt3dcore_global.h>
+#include <qt3drenderer_global.h>
#include <node.h>
#include <QQmlListProperty>
@@ -52,7 +52,7 @@ namespace Qt3D {
class Technique;
-class QT3DCORESHARED_EXPORT Effect : public Node
+class QT3DRENDERERSHARED_EXPORT Effect : public Node
{
Q_OBJECT
diff --git a/src/core/render/frontend/material.h b/src/core/render/frontend/material.h
index b0dea466a..b7a4c19fc 100644
--- a/src/core/render/frontend/material.h
+++ b/src/core/render/frontend/material.h
@@ -49,14 +49,14 @@
// FIXME - write a custom QML parser and stop mis-using Tag
#include "tag.h"
-#include <qt3dcore_global.h>
+#include <qt3drenderer_global.h>
namespace Qt3D {
class Effect;
class Texture;
-class QT3DCORESHARED_EXPORT Material : public Component
+class QT3DRENDERERSHARED_EXPORT Material : public Component
{
Q_OBJECT
Q_PROPERTY(Qt3D::Effect* effect READ effect WRITE setEffect NOTIFY effectChanged)
diff --git a/src/core/render/frontend/mesh.cpp b/src/core/render/frontend/mesh.cpp
index 27f8c513b..349428d19 100644
--- a/src/core/render/frontend/mesh.cpp
+++ b/src/core/render/frontend/mesh.cpp
@@ -110,6 +110,9 @@ void Mesh::update()
QFile f(m_source);
f.open(QIODevice::ReadOnly);
+ // Could be nice to abstract this
+ // Use AbstractSceneParsers of a dedicated AbstractMeshLoader
+
ObjLoader objLoad;
objLoad.setLoadTextureCoordinatesEnabled(true);
diff --git a/src/core/render/frontend/mesh.h b/src/core/render/frontend/mesh.h
index dbf236b46..0db09462c 100644
--- a/src/core/render/frontend/mesh.h
+++ b/src/core/render/frontend/mesh.h
@@ -43,7 +43,7 @@
#define QT3D_MESH_H
#include <component.h>
-#include <qt3dcore_global.h>
+#include <qt3drenderer_global.h>
#include <meshdata.h>
@@ -53,7 +53,7 @@ namespace Qt3D {
* @brief Simple static mesh
*
*/
-class QT3DCORESHARED_EXPORT Mesh : public Component
+class QT3DRENDERERSHARED_EXPORT Mesh : public Component
{
Q_OBJECT
diff --git a/src/core/render/frontend/qitemmodelbuffer.h b/src/core/render/frontend/qitemmodelbuffer.h
index b03696680..6d8d03680 100644
--- a/src/core/render/frontend/qitemmodelbuffer.h
+++ b/src/core/render/frontend/qitemmodelbuffer.h
@@ -43,7 +43,7 @@
#define QT3D_QITEMMODELBUFFER_H
#include <QObject>
-#include <qt3dcore_global.h>
+#include <qt3drenderer_global.h>
#include <meshdata.h>
@@ -52,7 +52,7 @@
namespace Qt3D {
-class QT3DCORESHARED_EXPORT QItemModelBuffer : public QObject
+class QT3DRENDERERSHARED_EXPORT QItemModelBuffer : public QObject
{
Q_OBJECT
public:
diff --git a/src/core/render/frontend/render-frontend.pri b/src/core/render/frontend/render-frontend.pri
index fb80b07e4..cad7e8a26 100644
--- a/src/core/render/frontend/render-frontend.pri
+++ b/src/core/render/frontend/render-frontend.pri
@@ -16,7 +16,8 @@ HEADERS += \
$$PWD/transform.h \
$$PWD/qitemmodelbuffer.h \
$$PWD/texture.h \
- $$PWD/sphere.h
+ $$PWD/sphere.h \
+ $$PWD/scene.h
SOURCES += \
$$PWD/effect.cpp \
@@ -33,4 +34,5 @@ SOURCES += \
$$PWD/transform.cpp \
$$PWD/qitemmodelbuffer.cpp \
$$PWD/texture.cpp \
- $$PWD/sphere.cpp
+ $$PWD/sphere.cpp \
+ $$PWD/scene.cpp
diff --git a/src/core/render/frontend/renderpass.h b/src/core/render/frontend/renderpass.h
index ad2fb0088..49c6eca5e 100644
--- a/src/core/render/frontend/renderpass.h
+++ b/src/core/render/frontend/renderpass.h
@@ -43,7 +43,7 @@
#define RENDERPASS_H
#include <node.h>
-#include <qt3dcore_global.h>
+#include <qt3drenderer_global.h>
#include "shaderprogram.h"
#include <drawstate.h>
@@ -55,7 +55,7 @@ namespace Qt3D {
class Parameter;
typedef QList<Parameter*> ParameterList;
-class QT3DCORESHARED_EXPORT RenderPass : public Node
+class QT3DRENDERERSHARED_EXPORT RenderPass : public Node
{
Q_OBJECT
diff --git a/src/core/render/frontend/renderpassfilter.h b/src/core/render/frontend/renderpassfilter.h
index cd9f81e88..01de80b3f 100644
--- a/src/core/render/frontend/renderpassfilter.h
+++ b/src/core/render/frontend/renderpassfilter.h
@@ -42,14 +42,14 @@
#ifndef RENDERPASSFILTER_H
#define RENDERPASSFILTER_H
-#include <qt3dcore_global.h>
+#include <qt3drenderer_global.h>
#include <component.h>
#include <QString>
namespace Qt3D {
-class QT3DCORESHARED_EXPORT RenderPassFilter : public Component
+class QT3DRENDERERSHARED_EXPORT RenderPassFilter : public Component
{
Q_OBJECT
diff --git a/src/core/core-components/scene.cpp b/src/core/render/frontend/scene.cpp
index 16cc5b4a9..ccfcc3b79 100644
--- a/src/core/core-components/scene.cpp
+++ b/src/core/render/frontend/scene.cpp
@@ -113,7 +113,8 @@ void Scene::rebuild()
removeChild(m_sceneChild);
m_sceneChild->deleteLater();
}
-
+ // Maybe move scene parsers to plugins
+ // And handle priority if a format is handled by more than one parser
if (GLTFParser::isGLTFPath(m_source)) {
qDebug() << Q_FUNC_INFO << "will load GLTF scene";
diff --git a/src/core/core-components/scene.h b/src/core/render/frontend/scene.h
index 3c7a4c0e6..be3745a0b 100644
--- a/src/core/core-components/scene.h
+++ b/src/core/render/frontend/scene.h
@@ -42,13 +42,13 @@
#ifndef SCENE_H
#define SCENE_H
-#include "entity.h"
-#include "qt3dcore_global.h"
+#include <entity.h>
+#include "qt3drenderer_global.h"
namespace Qt3D
{
-class QT3DCORESHARED_EXPORT Scene : public Entity
+class QT3DRENDERERSHARED_EXPORT Scene : public Entity
{
Q_OBJECT
diff --git a/src/core/render/frontend/shaderprogram.h b/src/core/render/frontend/shaderprogram.h
index e70661452..2ecc1c623 100644
--- a/src/core/render/frontend/shaderprogram.h
+++ b/src/core/render/frontend/shaderprogram.h
@@ -43,11 +43,11 @@
#define SHADERPROGRAM_H
#include <node.h>
-#include <qt3dcore_global.h>
+#include <qt3drenderer_global.h>
namespace Qt3D {
-class QT3DCORESHARED_EXPORT ShaderProgram : public Node
+class QT3DRENDERERSHARED_EXPORT ShaderProgram : public Node
{
Q_OBJECT
diff --git a/src/core/render/frontend/shape.h b/src/core/render/frontend/shape.h
index 189f10359..271d4002c 100644
--- a/src/core/render/frontend/shape.h
+++ b/src/core/render/frontend/shape.h
@@ -43,13 +43,13 @@
#define QT3D_SHAPE_H
#include <component.h>
-#include <qt3dcore_global.h>
+#include <qt3drenderer_global.h>
#include <meshdata.h>
namespace Qt3D {
-class QT3DCORESHARED_EXPORT Shape : public Qt3D::Component
+class QT3DRENDERERSHARED_EXPORT Shape : public Qt3D::Component
{
Q_OBJECT
diff --git a/src/core/render/frontend/sphere.h b/src/core/render/frontend/sphere.h
index 6a46fce04..7ca203723 100644
--- a/src/core/render/frontend/sphere.h
+++ b/src/core/render/frontend/sphere.h
@@ -42,14 +42,14 @@
#ifndef SPHERE_H
#define SPHERE_H
-#include "qt3dcore_global.h"
+#include "qt3drenderer_global.h"
#include <QMatrix4x4>
#include <QVector3D>
namespace Qt3D {
-class QT3DCORESHARED_EXPORT Sphere
+class Sphere
{
public:
inline Sphere()
diff --git a/src/core/render/frontend/tag.h b/src/core/render/frontend/tag.h
index 7dc4b7dc4..2ef8785cb 100644
--- a/src/core/render/frontend/tag.h
+++ b/src/core/render/frontend/tag.h
@@ -44,12 +44,12 @@
#include <QDebug>
-#include <qt3dcore_global.h>
+#include <qt3drenderer_global.h>
#include <node.h>
namespace Qt3D {
-class QT3DCORESHARED_EXPORT Tag : public Node
+class QT3DRENDERERSHARED_EXPORT Tag : public Node
{
Q_OBJECT
diff --git a/src/core/render/frontend/technique.h b/src/core/render/frontend/technique.h
index f4050eb3e..79d792fba 100644
--- a/src/core/render/frontend/technique.h
+++ b/src/core/render/frontend/technique.h
@@ -42,7 +42,7 @@
#ifndef TECHNIQUE_H
#define TECHNIQUE_H
-#include <qt3dcore_global.h>
+#include <qt3drenderer_global.h>
#include <node.h>
#include "tag.h"
@@ -58,7 +58,7 @@
namespace Qt3D {
-class QT3DCORESHARED_EXPORT Parameter : public QObject
+class QT3DRENDERERSHARED_EXPORT Parameter : public QObject
{
Q_OBJECT
diff --git a/src/core/render/frontend/techniquefilter.h b/src/core/render/frontend/techniquefilter.h
index 560e83c60..cbdfe1661 100644
--- a/src/core/render/frontend/techniquefilter.h
+++ b/src/core/render/frontend/techniquefilter.h
@@ -43,7 +43,7 @@
#define QT3D_TECHNIQUEFILTER_H
#include <component.h>
-#include <qt3dcore_global.h>
+#include <qt3drenderer_global.h>
#include "tag.h"
@@ -51,7 +51,7 @@
namespace Qt3D {
-class QT3DCORESHARED_EXPORT TechniqueFilter : public Qt3D::Component
+class QT3DRENDERERSHARED_EXPORT TechniqueFilter : public Qt3D::Component
{
Q_OBJECT
diff --git a/src/core/render/frontend/texture.h b/src/core/render/frontend/texture.h
index 7f83730f2..22646beac 100644
--- a/src/core/render/frontend/texture.h
+++ b/src/core/render/frontend/texture.h
@@ -43,7 +43,7 @@
#define QT3D_TEXTURE_H
#include "node.h"
-#include <qt3dcore_global.h>
+#include <qt3drenderer_global.h>
#include <QUrl>
@@ -51,7 +51,7 @@ namespace Qt3D {
class Texture;
-class QT3DCORESHARED_EXPORT QmlTexture : public Node
+class QT3DRENDERERSHARED_EXPORT QmlTexture : public Node
{
Q_OBJECT
public:
diff --git a/src/core/render/frontend/transform.h b/src/core/render/frontend/transform.h
index 5376ce213..4b4c54023 100644
--- a/src/core/render/frontend/transform.h
+++ b/src/core/render/frontend/transform.h
@@ -43,7 +43,7 @@
#define QT3D_TRANSFORM_H
#include <component.h>
-#include <qt3dcore_global.h>
+#include <qt3drenderer_global.h>
#include <QMatrix4x4>
@@ -51,7 +51,7 @@ namespace Qt3D {
class AbstractTransform;
-class QT3DCORESHARED_EXPORT Transform : public Qt3D::Component
+class QT3DRENDERERSHARED_EXPORT Transform : public Qt3D::Component
{
Q_OBJECT
Q_PROPERTY(QQmlListProperty<Qt3D::AbstractTransform> transforms READ transformList)
diff --git a/src/core/render/frontend/viewport.h b/src/core/render/frontend/viewport.h
index cefeb952b..6b7f5ab07 100644
--- a/src/core/render/frontend/viewport.h
+++ b/src/core/render/frontend/viewport.h
@@ -43,13 +43,13 @@
#define VIEWPORT_H
#include <component.h>
-#include <qt3dcore_global.h>
+#include <qt3drenderer_global.h>
#include <QRectF>
namespace Qt3D {
-class QT3DCORESHARED_EXPORT Viewport : public Component
+class QT3DRENDERERSHARED_EXPORT Viewport : public Component
{
Q_OBJECT
diff --git a/src/core/render/qt3drenderer_global.h b/src/core/render/qt3drenderer_global.h
new file mode 100644
index 000000000..5f267da3f
--- /dev/null
+++ b/src/core/render/qt3drenderer_global.h
@@ -0,0 +1,53 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Klaralvdalens Datakonsult AB (KDAB).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the Qt3D module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QT3DRENDERER_GLOBAL_H
+#define QT3DRENDERER_GLOBAL_H
+
+#include <QtCore/qglobal.h>
+
+#if defined(QT3DRENDERER_LIBRARY)
+# define QT3DRENDERERSHARED_EXPORT Q_DECL_EXPORT
+#else
+# define QT3DRENDERERSHARED_EXPORT Q_DECL_IMPORT
+#endif
+
+#endif // QT3DRENDERER_GLOBAL_H
diff --git a/src/core/render/render.pri b/src/core/render/render.pri
deleted file mode 100644
index 25ad6dc3b..000000000
--- a/src/core/render/render.pri
+++ /dev/null
@@ -1,8 +0,0 @@
-include(backend/render-backend.pri)
-include(frontend/render-frontend.pri)
-include(io/render-io.pri)
-
-RESOURCES += $$PWD/render.qrc
-
-OTHER_FILES += \
- $$PWD/shaders/*
diff --git a/src/core/render/render.pro b/src/core/render/render.pro
new file mode 100644
index 000000000..592e0dfec
--- /dev/null
+++ b/src/core/render/render.pro
@@ -0,0 +1,36 @@
+TARGET = Qt3DRenderer
+
+QT += core-private gui-private qml qml-private quick 3dcore
+
+DEFINES += QT3DRENDERER_LIBRARY
+
+MODULE = 3drenderer
+
+load(qt_module)
+
+include (backend/render-backend.pri)
+include (frontend/render-frontend.pri)
+include (io/render-io.pri)
+include(../../3rdparty/assimp/assimp.pri)
+
+
+RESOURCES += $$PWD/render.qrc
+
+OTHER_FILES += \
+ $$PWD/shaders/*
+
+gcov {
+ CONFIG += static
+ QMAKE_CXXFLAGS += -fprofile-arcs -ftest-coverage
+ QMAKE_LFLAGS += -fprofile-arcs -ftest-coverage
+} else {
+ CONFIG += dll
+}
+
+HEADERS += $$PRIVATE_HEADERS \
+ qt3drenderer_global.h
+
+!contains(QT_CONFIG, egl):DEFINES += QT_NO_EGL
+
+# otherwise mingw headers do not declare common functions like ::strcasecmp
+win32-g++*:QMAKE_CXXFLAGS_CXX11 = -std=gnu++0x
diff --git a/src/core/window.cpp b/src/core/window.cpp
index 7aee2b7cb..f14893868 100644
--- a/src/core/window.cpp
+++ b/src/core/window.cpp
@@ -102,6 +102,14 @@ Window::Status Window::status() const
return Status(m_component->status());
}
+/*!
+ * Registers an Aspect module to the AspectEngine;
+ */
+void Window::registerAspect(AbstractAspect *aspect)
+{
+ m_aspectEngine->registerAspect(aspect);
+}
+
void Window::setSource( const QUrl& source )
{
if (!m_engine) {
@@ -181,6 +189,10 @@ void Window::setRootObject( QObject* obj )
// Hook up controller input to camera
// TODO: Do this more generically as we may want keyboard ot control an Entity etc
+ // What happens if there is no camera
+ // What happens if at some point the camera is added but not directly when the scene is created ?
+ // eg scene file provided and camera tree node created after parsing ?
+ // What happens if there are multiple cameras in the scene ?
m_camera = Entity::findComponentInTree<Camera>(qobject_cast<Node *>(m_root.data()));
if (m_camera) {
qDebug() << "found a camera in the scene";
diff --git a/src/core/window.h b/src/core/window.h
index 3d507fe76..6d4915797 100644
--- a/src/core/window.h
+++ b/src/core/window.h
@@ -72,6 +72,7 @@ public:
Status status() const;
QSharedPointer<QObject> rootObject() { return m_root; }
+ void registerAspect(AbstractAspect *aspect);
signals:
void statusChanged( Qt3D::Window::Status );
@@ -100,8 +101,6 @@ private:
// of the objects in the object tree.
QAspectEngine *m_aspectEngine;
- QList<Qt3D::AbstractAspect*> m_aspects;
-
Camera* m_camera;
// temporary, borrowed from training material
diff --git a/src/src.pro b/src/src.pro
index f8b0ef3bc..f1d00d37f 100644
--- a/src/src.pro
+++ b/src/src.pro
@@ -1,6 +1,7 @@
TEMPLATE = subdirs
CONFIG += ordered
-SUBDIRS += core
+SUBDIRS += core \
+ core/render
#SUBDIRS += thred
#qtHaveModule(qml): SUBDIRS += quick3d imports
diff --git a/sync.profile b/sync.profile
index 5e855c393..363fd197b 100644
--- a/sync.profile
+++ b/sync.profile
@@ -1,5 +1,6 @@
%modules = ( # path to module name map
"Qt3DCore" => "$basedir/src/core",
+ "Qt3DRenderer" => "$basedir/src/core/render",
);
%moduleheaders = ( # restrict the module headers to those found in relative path
);