diff options
author | Paul Lemire <paul.lemire.ecortex@kdab.com> | 2014-12-03 09:46:03 +0100 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2014-12-12 14:17:38 +0100 |
commit | 634285f5e0c2555bd108f5f8ed979a0a18505429 (patch) | |
tree | 8a636c9ebb4e88a047449973856510786c582401 /src/quick3d/imports/render/qt3dquick3drenderplugin.cpp | |
parent | 6bf131dc207ed34f7f5cf8c6edb5554c821cf2df (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.cpp | 18 |
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")); |