summaryrefslogtreecommitdiffstats
path: root/src/quick3d/imports/render/qt3dquick3drenderplugin.cpp
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire.ecortex@kdab.com>2014-12-03 09:46:03 +0100
committerSean Harmer <sean.harmer@kdab.com>2014-12-12 14:17:38 +0100
commit634285f5e0c2555bd108f5f8ed979a0a18505429 (patch)
tree8a636c9ebb4e88a047449973856510786c582401 /src/quick3d/imports/render/qt3dquick3drenderplugin.cpp
parent6bf131dc207ed34f7f5cf8c6edb5554c821cf2df (diff)
Quick3DShaderData for QJSValue handling
Quick3DShaderData subclasses QShaderData. QShaderData now provides a PropertyReaderInterface that returns a correct QVariant from the QVariant return when reading a QProperty. That way Quick3DShaderData properties (var) can be transformed to a QVariantList that the Renderer can use without introducing a QtQml dependency in core. RenderShaderData was updated to use propertyReader as well on creation and NodeUpdated events. A QJSValue -> QVariantList QMetatype converter was introduced to ease that process. Change-Id: Ifde5e7b85a1a84342846cd0ac0f047bd2c6ec4ef Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src/quick3d/imports/render/qt3dquick3drenderplugin.cpp')
-rw-r--r--src/quick3d/imports/render/qt3dquick3drenderplugin.cpp18
1 files changed, 17 insertions, 1 deletions
diff --git a/src/quick3d/imports/render/qt3dquick3drenderplugin.cpp b/src/quick3d/imports/render/qt3dquick3drenderplugin.cpp
index 5af56ca97..3a90c38e1 100644
--- a/src/quick3d/imports/render/qt3dquick3drenderplugin.cpp
+++ b/src/quick3d/imports/render/qt3dquick3drenderplugin.cpp
@@ -102,11 +102,27 @@
#include <Qt3DQuickRenderer/quick3dframegraphitem.h>
#include <Qt3DQuickRenderer/quick3dsortmethod.h>
#include <Qt3DQuickRenderer/quick3dparameter.h>
+#include <Qt3DQuickRenderer/quick3dshaderdata.h>
QT_BEGIN_NAMESPACE
+QVariantList QJSValueToVariantListConverter(const QJSValue &jsValue)
+{
+ QVariantList values;
+ QJSValueIterator it(jsValue);
+ while (it.hasNext()) {
+ it.next();
+ if (it.hasNext()) // The last element in an Array is the count, which we don't want
+ values << it.value().toVariant();
+ }
+ return values;
+}
+
void Qt3DQuick3DRenderPlugin::registerTypes(const char *uri)
{
+ // Converters from QJSValue
+ QMetaType::registerConverter<QJSValue, QVariantList>(QJSValueToVariantListConverter);
+
// @uri Qt3D.Render
qmlRegisterUncreatableType<Qt3D::Render::QAbstractSceneLoader>(uri, 2, 0, "QAbstractSceneLoader", "QAbstractScene is abstract");
qmlRegisterExtendedType<Qt3D::QSceneLoader, Qt3D::Render::Quick::Quick3DScene>(uri, 2, 0, "SceneLoader");
@@ -121,7 +137,7 @@ void Qt3DQuick3DRenderPlugin::registerTypes(const char *uri)
qmlRegisterExtendedType<Qt3D::QMaterial, Qt3D::Render::Quick::Quick3DMaterial>(uri, 2, 0, "Material");
qmlRegisterExtendedType<Qt3D::QRenderPass, Qt3D::Render::Quick::Quick3DRenderPass>(uri, 2, 0, "RenderPass");
qmlRegisterType<Qt3D::QShaderProgram>(uri, 2, 0, "ShaderProgram");
- qmlRegisterType<Qt3D::QShaderData>(uri, 2, 0, "ShaderData");
+ qmlRegisterType<Qt3D::Render::Quick::Quick3DShaderData>(uri, 2, 0, "ShaderData");
// Textures
qmlRegisterType<Qt3D::QTextureWrapMode>(uri, 2, 0, "WrapMode");//, QStringLiteral("QTextureWrapMode cannot be created from QML"));