summaryrefslogtreecommitdiffstats
path: root/src/render
diff options
context:
space:
mode:
authorLaszlo Agocs <laszlo.agocs@theqtcompany.com>2015-02-13 14:11:08 +0100
committerLaszlo Agocs <laszlo.agocs@theqtcompany.com>2015-02-13 14:58:06 +0000
commit209efae5307bf6cf519848205dbbe637c62c4ae2 (patch)
tree4ddf105cfe9a59391a058665d4b670079e69f02d /src/render
parent664b73dd36de6205cc84a219f936dd744a2dc184 (diff)
Make scene parsers operate on URLs instead of raw filenames
This way they are compatible with how mesh and texture source URLs are handled. Change-Id: Ifeee504fd3f5957d23f5cade92a73663488bdaf9 Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src/render')
-rw-r--r--src/render/backend/jobs/loadscenejob.cpp6
-rw-r--r--src/render/backend/jobs/loadscenejob_p.h5
-rw-r--r--src/render/backend/renderscene.cpp4
-rw-r--r--src/render/backend/renderscene_p.h5
-rw-r--r--src/render/backend/scenemanager.cpp6
-rw-r--r--src/render/backend/scenemanager_p.h8
-rw-r--r--src/render/frontend/qabstractsceneloader.cpp6
-rw-r--r--src/render/frontend/qabstractsceneloader.h9
-rw-r--r--src/render/frontend/qabstractsceneloader_p.h2
-rw-r--r--src/render/io/abstractsceneparser_p.h5
-rw-r--r--src/render/io/gltfparser.cpp7
-rw-r--r--src/render/io/gltfparser_p.h4
12 files changed, 37 insertions, 30 deletions
diff --git a/src/render/backend/jobs/loadscenejob.cpp b/src/render/backend/jobs/loadscenejob.cpp
index 00a94cdac..169804e19 100644
--- a/src/render/backend/jobs/loadscenejob.cpp
+++ b/src/render/backend/jobs/loadscenejob.cpp
@@ -46,7 +46,7 @@ namespace Qt3D {
namespace Render {
-LoadSceneJob::LoadSceneJob(const QString &source, const QNodeId &m_sceneComponent)
+LoadSceneJob::LoadSceneJob(const QUrl &source, const QNodeId &m_sceneComponent)
: QAspectJob()
, m_renderer(Q_NULLPTR)
, m_source(source)
@@ -59,8 +59,8 @@ void LoadSceneJob::run()
QEntity *sceneTree = m_renderer->sceneManager()->sceneTreeFromSource(m_source);
if (sceneTree == Q_NULLPTR) {
Q_FOREACH (AbstractSceneParser *parser, m_renderer->sceneParsers()) {
- if (parser->isPathExtensionSupported(m_source)) {
- parser->setFilePath(m_source);
+ if (parser->isExtensionSupported(m_source)) {
+ parser->setSource(m_source);
sceneTree = parser->scene();
m_renderer->sceneManager()->addLoadedSceneTree(m_source, sceneTree);
}
diff --git a/src/render/backend/jobs/loadscenejob_p.h b/src/render/backend/jobs/loadscenejob_p.h
index 68df20c03..1497f7c9f 100644
--- a/src/render/backend/jobs/loadscenejob_p.h
+++ b/src/render/backend/jobs/loadscenejob_p.h
@@ -40,6 +40,7 @@
#include <Qt3DCore/qaspectjob.h>
#include <Qt3DCore/qnodeid.h>
#include <QSharedPointer>
+#include <QUrl>
QT_BEGIN_NAMESPACE
@@ -52,7 +53,7 @@ class Renderer;
class LoadSceneJob : public Qt3D::QAspectJob
{
public:
- explicit LoadSceneJob(const QString &source, const QNodeId &sceneComponent);
+ explicit LoadSceneJob(const QUrl &source, const QNodeId &sceneComponent);
void setRenderer(Renderer *renderer) { m_renderer = renderer; }
protected:
@@ -60,7 +61,7 @@ protected:
private:
Renderer *m_renderer;
- QString m_source;
+ QUrl m_source;
QNodeId m_sceneComponent;
};
diff --git a/src/render/backend/renderscene.cpp b/src/render/backend/renderscene.cpp
index 00a2e466e..b9769f32b 100644
--- a/src/render/backend/renderscene.cpp
+++ b/src/render/backend/renderscene.cpp
@@ -66,12 +66,12 @@ void RenderScene::sceneChangeEvent(const QSceneChangePtr &e)
{
QScenePropertyChangePtr propertyChange = qSharedPointerCast<QScenePropertyChange>(e);
if (propertyChange->propertyName() == QByteArrayLiteral("source")) {
- m_source = propertyChange->value().toString();
+ m_source = propertyChange->value().toUrl();
m_sceneManager->addSceneData(m_source, peerUuid());
}
}
-QString RenderScene::source() const
+QUrl RenderScene::source() const
{
return m_source;
}
diff --git a/src/render/backend/renderscene_p.h b/src/render/backend/renderscene_p.h
index 71ba98d7b..4f7d12c06 100644
--- a/src/render/backend/renderscene_p.h
+++ b/src/render/backend/renderscene_p.h
@@ -39,6 +39,7 @@
#include <QtGlobal>
#include <Qt3DCore/qbackendnode.h>
+#include <QUrl>
QT_BEGIN_NAMESPACE
@@ -59,13 +60,13 @@ public:
// QObserverInterface interface
void sceneChangeEvent(const QSceneChangePtr &e) Q_DECL_OVERRIDE;
- QString source() const;
+ QUrl source() const;
void setSceneSubtree(QEntity *subTree);
void setSceneManager(SceneManager *manager);
private:
SceneManager *m_sceneManager;
- QString m_source;
+ QUrl m_source;
};
class RenderSceneFunctor : public QBackendNodeFunctor
diff --git a/src/render/backend/scenemanager.cpp b/src/render/backend/scenemanager.cpp
index 21bb1432a..32611c4d0 100644
--- a/src/render/backend/scenemanager.cpp
+++ b/src/render/backend/scenemanager.cpp
@@ -50,7 +50,7 @@ SceneManager::SceneManager() : QResourceManager<RenderScene,
{
}
-void SceneManager::addSceneData(const QString &source, const QNodeId &sceneUuid)
+void SceneManager::addSceneData(const QUrl &source, const QNodeId &sceneUuid)
{
m_pendingJobs.append(LoadSceneJobPtr(new LoadSceneJob(source, sceneUuid)));
}
@@ -62,13 +62,13 @@ QVector<LoadSceneJobPtr> SceneManager::pendingSceneLoaderJobs()
return copy;
}
-void SceneManager::addLoadedSceneTree(const QString &source, QEntity *tree)
+void SceneManager::addLoadedSceneTree(const QUrl &source, QEntity *tree)
{
SceneManager::Locker lock(this);
m_loadedSceneTrees.insert(source, tree);
}
-QEntity *SceneManager::sceneTreeFromSource(const QString &source)
+QEntity *SceneManager::sceneTreeFromSource(const QUrl &source)
{
SceneManager::Locker lock(this);
return m_loadedSceneTrees.value(source);
diff --git a/src/render/backend/scenemanager_p.h b/src/render/backend/scenemanager_p.h
index d45ed17bc..61b0c02a9 100644
--- a/src/render/backend/scenemanager_p.h
+++ b/src/render/backend/scenemanager_p.h
@@ -59,14 +59,14 @@ class SceneManager : public QResourceManager<RenderScene,
public:
SceneManager();
- void addSceneData(const QString &source, const QNodeId &sceneUuid);
+ void addSceneData(const QUrl &source, const QNodeId &sceneUuid);
QVector<LoadSceneJobPtr> pendingSceneLoaderJobs();
- void addLoadedSceneTree(const QString &source, QEntity *tree);
- QEntity *sceneTreeFromSource(const QString &source);
+ void addLoadedSceneTree(const QUrl &source, QEntity *tree);
+ QEntity *sceneTreeFromSource(const QUrl &source);
private:
- QHash<QString, QEntity *> m_loadedSceneTrees;
+ QHash<QUrl, QEntity *> m_loadedSceneTrees;
QVector<LoadSceneJobPtr> m_pendingJobs;
};
diff --git a/src/render/frontend/qabstractsceneloader.cpp b/src/render/frontend/qabstractsceneloader.cpp
index 0b7c1b0a6..9e0b06aec 100644
--- a/src/render/frontend/qabstractsceneloader.cpp
+++ b/src/render/frontend/qabstractsceneloader.cpp
@@ -70,18 +70,18 @@ void QAbstractSceneLoader::copy(const QNode *ref)
d_func()->m_source = s->d_func()->m_source;
}
-QString QAbstractSceneLoader::source() const
+QUrl QAbstractSceneLoader::source() const
{
Q_D(const QAbstractSceneLoader);
return d->m_source;
}
-void QAbstractSceneLoader::setSource(QString arg)
+void QAbstractSceneLoader::setSource(const QUrl &arg)
{
Q_D(QAbstractSceneLoader);
if (d->m_source != arg) {
d->m_source = arg;
- emit sourceChanged(arg);
+ emit sourceChanged();
}
}
diff --git a/src/render/frontend/qabstractsceneloader.h b/src/render/frontend/qabstractsceneloader.h
index e96b75638..d5e08aa35 100644
--- a/src/render/frontend/qabstractsceneloader.h
+++ b/src/render/frontend/qabstractsceneloader.h
@@ -40,6 +40,7 @@
#include <Qt3DCore/qcomponent.h>
#include <Qt3DCore/qscenechange.h>
#include <Qt3DRenderer/qt3drenderer_global.h>
+#include <QUrl>
QT_BEGIN_NAMESPACE
@@ -53,7 +54,7 @@ class QT3DRENDERERSHARED_EXPORT QAbstractSceneLoader : public QComponent
{
Q_OBJECT
Q_ENUMS(Status)
- Q_PROPERTY(QString source READ source WRITE setSource NOTIFY sourceChanged)
+ Q_PROPERTY(QUrl source READ source WRITE setSource NOTIFY sourceChanged)
Q_PROPERTY(Status status READ status NOTIFY statusChanged)
public:
explicit QAbstractSceneLoader(QNode *parent = 0);
@@ -64,8 +65,8 @@ public:
Error
};
- QString source() const;
- void setSource(QString arg);
+ QUrl source() const;
+ void setSource(const QUrl &arg);
Status status() const;
void setStatus(Status status);
@@ -73,7 +74,7 @@ public:
virtual void sceneChangeEvent(const QSceneChangePtr &change) = 0;
Q_SIGNALS:
- void sourceChanged(QString arg);
+ void sourceChanged();
void statusChanged();
protected:
diff --git a/src/render/frontend/qabstractsceneloader_p.h b/src/render/frontend/qabstractsceneloader_p.h
index dfe3b515e..b9586fcf7 100644
--- a/src/render/frontend/qabstractsceneloader_p.h
+++ b/src/render/frontend/qabstractsceneloader_p.h
@@ -57,7 +57,7 @@ public:
Q_DECLARE_PUBLIC(QAbstractSceneLoader)
- QString m_source;
+ QUrl m_source;
QAbstractSceneLoader::Status m_status;
};
diff --git a/src/render/io/abstractsceneparser_p.h b/src/render/io/abstractsceneparser_p.h
index 3d4d5442c..c6aef1729 100644
--- a/src/render/io/abstractsceneparser_p.h
+++ b/src/render/io/abstractsceneparser_p.h
@@ -40,6 +40,7 @@
#include <QObject>
#include <QStringList>
#include <QLoggingCategory>
+#include <QUrl>
#include <Qt3DRenderer/qt3drenderer_global.h>
QT_BEGIN_NAMESPACE
@@ -69,8 +70,8 @@ public:
AbstractSceneParser();
virtual ~AbstractSceneParser();
- virtual void setFilePath(const QString &path) = 0;
- virtual bool isPathExtensionSupported(const QString &path) = 0;
+ virtual void setSource(const QUrl &source) = 0;
+ virtual bool isExtensionSupported(const QUrl &source) = 0;
virtual QEntity *scene(QString id = QString()) = 0;
virtual QEntity *node(QString id) = 0;
diff --git a/src/render/io/gltfparser.cpp b/src/render/io/gltfparser.cpp
index 459655771..c11e4d8f6 100644
--- a/src/render/io/gltfparser.cpp
+++ b/src/render/io/gltfparser.cpp
@@ -50,6 +50,7 @@
#include <Qt3DCore/qtransform.h>
#include <Qt3DCore/qmatrixtransform.h>
#include <Qt3DCore/qcameralens.h>
+#include <Qt3DCore/private/qurlhelper_p.h>
#include <qtexture.h>
#include <qparameter.h>
@@ -285,8 +286,9 @@ bool GLTFParser::setJSON( QJsonDocument json )
* Sets the \a path used by the parser to load the scene file.
* If the file is valid, parsing is automatically triggered.
*/
-void GLTFParser::setFilePath(const QString &path)
+void GLTFParser::setSource(const QUrl &source)
{
+ const QString path = QUrlHelper::urlToLocalFileOrQrc(source);
QFileInfo finfo(path);
if (!finfo.exists()) {
qWarning() << "missing file:" << path;
@@ -307,8 +309,9 @@ void GLTFParser::setFilePath(const QString &path)
* Returns true if the extension of \a path is supported by the
* GLTF parser.
*/
-bool GLTFParser::isPathExtensionSupported(const QString &path)
+bool GLTFParser::isExtensionSupported(const QUrl &source)
{
+ const QString path = QUrlHelper::urlToLocalFileOrQrc(source);
return GLTFParser::isGLTFPath(path);
}
diff --git a/src/render/io/gltfparser_p.h b/src/render/io/gltfparser_p.h
index 9e021f78a..a72e03793 100644
--- a/src/render/io/gltfparser_p.h
+++ b/src/render/io/gltfparser_p.h
@@ -75,8 +75,8 @@ public:
bool setJSON( QJsonDocument json );
// SceneParserInterface interface
- void setFilePath(const QString &path) Q_DECL_OVERRIDE;
- bool isPathExtensionSupported(const QString &path) Q_DECL_OVERRIDE;
+ void setSource(const QUrl &source) Q_DECL_OVERRIDE;
+ bool isExtensionSupported(const QUrl &source) Q_DECL_OVERRIDE;
/**
* @brief instantiate Create Nodes based on glTf JSON document