// Copyright (C) 2014 Klaralvdalens Datakonsult AB (KDAB). // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only #include #include #include #include QT_BEGIN_NAMESPACE namespace Qt3DRender { namespace Render { namespace Quick { namespace { const int quick3DShaderDataArrayTypeId = qMetaTypeId(); Q_DECL_UNUSED const int quick3DShaderDataTypeId = qMetaTypeId(); } class Quick3DShaderDataPropertyReader : public PropertyReaderInterface { public: Quick3DShaderDataPropertyReader() { } QVariant readProperty(const QVariant &v) override { static const int qjsValueTypeId = qMetaTypeId(); // qjsValueTypeId are not compile time constant (no switch) if (v.userType() == qjsValueTypeId) { QJSValue jsValue = v.value(); if (jsValue.isArray()) return v.value(); else if (jsValue.isVariant()) return jsValue.toVariant(); } else if (v.userType() == quick3DShaderDataArrayTypeId) { Quick3DShaderDataArray *array = v.value(); QVariantList innerValues; if (array) { const auto values = array->values(); for (QShaderData *d : values) { if (d) innerValues.append(QVariant::fromValue(d->id())); } } return innerValues; } else if (v.canConvert()) { const auto node = v.value(); const auto id = Qt3DCore::qIdForNode(node); return QVariant::fromValue(id); } return v; } }; Quick3DShaderData::Quick3DShaderData(QNode *parent) : QShaderData(*new QShaderDataPrivate(PropertyReaderInterfacePtr(new Quick3DShaderDataPropertyReader())) , parent) { } } // namespace Quick } // namespace Render } // namespace Qt3DRender QT_END_NAMESPACE #include "moc_quick3dshaderdata_p.cpp"