diff options
-rw-r--r-- | src/runtime/q3dspresentationcommon_p.h | 1 | ||||
-rw-r--r-- | src/runtime/q3dsscenemanager.cpp | 4 | ||||
-rw-r--r-- | src/runtime/q3dsuippresentation.cpp | 70 | ||||
-rw-r--r-- | tests/auto/q3dslancelot/data/effects/effects/VignetteEffect.effect | 10 | ||||
-rw-r--r-- | tests/auto/uipparser/tst_q3dsuipparser.cpp | 4 | ||||
-rw-r--r-- | tests/scenes/effectgallery/VignetteEffect.effect | 10 |
6 files changed, 69 insertions, 30 deletions
diff --git a/src/runtime/q3dspresentationcommon_p.h b/src/runtime/q3dspresentationcommon_p.h index 006563a..15c77e5 100644 --- a/src/runtime/q3dspresentationcommon_p.h +++ b/src/runtime/q3dspresentationcommon_p.h @@ -91,6 +91,7 @@ bool convertToInt32(const QStringRef &value, qint32 *v, const char *desc = nullp bool convertToBool(const QStringRef &value, bool *v, const char *desc = nullptr, QXmlStreamReader *reader = nullptr); bool convertToVector2D(const QStringRef &value, QVector2D *v, const char *desc = nullptr, QXmlStreamReader *reader = nullptr); bool convertToVector3D(const QStringRef &value, QVector3D *v, const char *desc = nullptr, QXmlStreamReader *reader = nullptr); +bool convertToVector4D(const QStringRef &value, QVector4D *v, const char *desc = nullptr, QXmlStreamReader *reader = nullptr); bool convertToMatrix4x4(const QStringRef &value, QMatrix4x4 *v, const char *desc = nullptr, QXmlStreamReader *reader = nullptr); int animatablePropertyTypeToMetaType(Q3DS::PropertyType type); QVariant convertToVariant(const QString &value, Q3DS::PropertyType type); diff --git a/src/runtime/q3dsscenemanager.cpp b/src/runtime/q3dsscenemanager.cpp index 59269bc..928f2f8 100644 --- a/src/runtime/q3dsscenemanager.cpp +++ b/src/runtime/q3dsscenemanager.cpp @@ -4271,8 +4271,10 @@ void Q3DSSceneManager::rebuildCompositorLayerChain() int layerDepth = 1; for (Q3DSLayerNode *layer3DS : layers) { BuildLayerQuadFlags flags = 0; - if (layer3DS->layerBackground() == Q3DSLayerNode::Transparent) + if (layer3DS->layerBackground() == Q3DSLayerNode::Transparent + || layer3DS->layerBackground() == Q3DSLayerNode::SolidColor) { flags |= LayerQuadBlend; + } buildLayerQuadEntity(layer3DS, m_compositorParentEntity, tag, flags, layerDepth++); m_compositorEntities.append(layer3DS->attached<Q3DSLayerAttached>()->compositorEntity); diff --git a/src/runtime/q3dsuippresentation.cpp b/src/runtime/q3dsuippresentation.cpp index 5ab3fd6..ec366a8 100644 --- a/src/runtime/q3dsuippresentation.cpp +++ b/src/runtime/q3dsuippresentation.cpp @@ -214,10 +214,12 @@ bool convertToFloat(const QStringRef &value, float *v, const char *desc, QXmlStr bool convertToVector2D(const QStringRef &value, QVector2D *v, const char *desc, QXmlStreamReader *reader) { - QVector<QStringRef> floatStrings = value.split(' ', QString::SkipEmptyParts); + QVector<QStringRef> floatStrings = value.split(QLatin1Char(' '), QString::SkipEmptyParts); if (floatStrings.count() != 2) { - if (reader) - reader->raiseError(QObject::tr("Invalid %1 \"%2\"").arg(QString::fromUtf8(desc)).arg(value.toString())); + if (reader) { + reader->raiseError(QObject::tr("Invalid %1 \"%2\"") + .arg(QString::fromUtf8(desc)).arg(value.toString())); + } return false; } float x; @@ -233,10 +235,12 @@ bool convertToVector2D(const QStringRef &value, QVector2D *v, const char *desc, bool convertToVector3D(const QStringRef &value, QVector3D *v, const char *desc, QXmlStreamReader *reader) { - QVector<QStringRef> floatStrings = value.split(' ', QString::SkipEmptyParts); + QVector<QStringRef> floatStrings = value.split(QLatin1Char(' '), QString::SkipEmptyParts); if (floatStrings.count() != 3) { - if (reader) - reader->raiseError(QObject::tr("Invalid %1 \"%2\"").arg(QString::fromUtf8(desc)).arg(value.toString())); + if (reader) { + reader->raiseError(QObject::tr("Invalid %1 \"%2\"") + .arg(QString::fromUtf8(desc)).arg(value.toString())); + } return false; } float x; @@ -254,6 +258,39 @@ bool convertToVector3D(const QStringRef &value, QVector3D *v, const char *desc, return true; } +bool convertToVector4D(const QStringRef &value, QVector4D *v, const char *desc, + QXmlStreamReader *reader) +{ + QVector<QStringRef> floatStrings = value.split(QLatin1Char(' '), QString::SkipEmptyParts); + if (floatStrings.count() != 3 && floatStrings.count() != 4) { + if (reader) { + reader->raiseError(QObject::tr("Invalid %1 \"%2\"") + .arg(QString::fromUtf8(desc)).arg(value.toString())); + } + return false; + } + + float x; + float y; + float z; + float w = 1; + if (!convertToFloat(floatStrings[0], &x, "Vector4D[x]", reader)) + return false; + if (!convertToFloat(floatStrings[1], &y, "Vector4D[y]", reader)) + return false; + if (!convertToFloat(floatStrings[2], &z, "Vector4D[z]", reader)) + return false; + if (floatStrings.count() == 4 && !convertToFloat(floatStrings[3], &w, "Vector4D[w]", reader)) + return false; + + v->setX(x); + v->setY(y); + v->setZ(z); + v->setW(w); + + return true; +} + bool convertToMatrix4x4(const QStringRef &value, QMatrix4x4 *v, const char *desc, QXmlStreamReader *reader) { QVector<QStringRef> floatStrings = value.split(' ', QString::SkipEmptyParts); @@ -345,13 +382,19 @@ QVariant convertToVariant(const QString &value, Q3DS::PropertyType type) case Vector: case Scale: case Rotation: - case Color: { QVector3D v; if (convertToVector3D(&value, &v)) return v; } break; + case Color: + { + QVector4D v; + if (convertToVector4D(&value, &v)) + return v; + } + break; case Boolean: { bool v; @@ -397,9 +440,10 @@ QString convertFromVariant(const QVariant &value) case QVariant::Color: { const QColor c = value.value<QColor>(); - const QVector3D v = QVector3D(c.redF(), c.greenF(), c.blueF()); - return QString(QLatin1String("%1 %2 %3")) - .arg(QString::number(v.x())).arg(QString::number(v.y())).arg(QString::number(v.z())); + const QVector4D v = QVector4D(c.redF(), c.greenF(), c.blueF(), c.alphaF()); + return QString(QLatin1String("%1 %2 %3 %4")) + .arg(QString::number(v.x())).arg(QString::number(v.y())) + .arg(QString::number(v.z())).arg(QString::number(v.w())); } case QVariant::Bool: return value.toBool() ? QLatin1String("true") : QLatin1String("false"); @@ -1081,10 +1125,10 @@ bool parseProperty(const V &attrs, Q3DSGraphObject::PropSetFlags flags, const QS template<typename V> bool parseProperty(const V &attrs, Q3DSGraphObject::PropSetFlags flags, const QString &typeName, const QString &propName, QColor *dst) { - QVector3D rgb; - bool r = ::parseProperty<QVector3D>(attrs, flags, typeName, propName, Q3DS::Color, &rgb, [](const QStringRef &s, QVector3D *v) { return Q3DS::convertToVector3D(s, v); }); + QVector4D rgba; + bool r = ::parseProperty<QVector4D>(attrs, flags, typeName, propName, Q3DS::Color, &rgba, [](const QStringRef &s, QVector4D *v) { return Q3DS::convertToVector4D(s, v); }); if (r) - *dst = QColor::fromRgbF(rgb.x(), rgb.y(), rgb.z()); + *dst = QColor::fromRgbF(rgba.x(), rgba.y(), rgba.z(), rgba.w()); return r; } diff --git a/tests/auto/q3dslancelot/data/effects/effects/VignetteEffect.effect b/tests/auto/q3dslancelot/data/effects/effects/VignetteEffect.effect index a459120..ab649e1 100644 --- a/tests/auto/q3dslancelot/data/effects/effects/VignetteEffect.effect +++ b/tests/auto/q3dslancelot/data/effects/effects/VignetteEffect.effect @@ -15,20 +15,18 @@ void frag() { - float radius = vig_radius; vec4 origColor = texture2D_0(TexCoord); vec2 uv = TexCoord.xy; vec2 center = vec2(0.5); vec4 bg = origColor; - uv *= 1.0 - uv.yx; - float vig = uv.x*uv.y * vig_strenght; + uv *= 1.0 - uv.yx; + float vig = uv.x * uv.y * vig_strenght; vig = pow(vig, vig_radius); - vec4 vigmixcolor = vec4(vig_color,vig) * vec4(vig); - gl_FragColor = vec4(mix(origColor,vigmixcolor,1.0-vig)); - + vec4 vigColor = vec4(vig_color.xyz, vig) * vig; + gl_FragColor = mix(origColor, vigColor, 1.0 - vig); } ]]></FragmentShader> </Shader> diff --git a/tests/auto/uipparser/tst_q3dsuipparser.cpp b/tests/auto/uipparser/tst_q3dsuipparser.cpp index b9e8a02..486c028 100644 --- a/tests/auto/uipparser/tst_q3dsuipparser.cpp +++ b/tests/auto/uipparser/tst_q3dsuipparser.cpp @@ -730,13 +730,11 @@ void tst_Q3DSUipParser::customMaterial() Q3DSPropertyChangeList tilingChange = mat->applyDynamicProperties({{tilingKey, QVector3D(1, 2, 3)}}); QCOMPARE(tilingChange.cbegin()->nameStr(), tilingKey); QCOMPARE(mat->dynamicProperties().value(tilingKey).value<QVector3D>(), QVector3D(1, 2, 3)); - QCOMPARE(mat->dynamicProperties().value(tilingKey).value<QVector3D>(), QVector3D(1, 2, 3)); // "dynamic" custom property setting tilingChange = {Q3DSPropertyChange::fromVariant(tilingKey, QVector3D(4, 5, 6))}; mat->applyPropertyChanges({ tilingChange }); QCOMPARE(mat->dynamicProperties().value(tilingKey).value<QVector3D>(), QVector3D(4, 5, 6)); - QCOMPARE(mat->dynamicProperties().value(tilingKey).value<QVector3D>(), QVector3D(4, 5, 6)); } void tst_Q3DSUipParser::effect() @@ -759,13 +757,11 @@ void tst_Q3DSUipParser::effect() Q3DSPropertyChangeList focusDistanceChange = e->applyDynamicProperties({{focusDistanceKey, 50.0f}}); QCOMPARE(focusDistanceChange.cbegin()->nameStr(), focusDistanceKey); QCOMPARE(e->dynamicProperties().value(focusDistanceKey).toFloat(), 50.0f); - QCOMPARE(e->dynamicProperties().value(focusDistanceKey).toFloat(), 50.0f); // "dynamic" custom property setting focusDistanceChange = {Q3DSPropertyChange::fromVariant(focusDistanceKey, 20.0f)}; e->applyPropertyChanges({ focusDistanceChange }); QCOMPARE(e->dynamicProperties().value(focusDistanceKey).toFloat(), 20.0f); - QCOMPARE(e->dynamicProperties().value(focusDistanceKey).toFloat(), 20.0f); } void tst_Q3DSUipParser::primitiveMeshes() diff --git a/tests/scenes/effectgallery/VignetteEffect.effect b/tests/scenes/effectgallery/VignetteEffect.effect index a459120..ab649e1 100644 --- a/tests/scenes/effectgallery/VignetteEffect.effect +++ b/tests/scenes/effectgallery/VignetteEffect.effect @@ -15,20 +15,18 @@ void frag() { - float radius = vig_radius; vec4 origColor = texture2D_0(TexCoord); vec2 uv = TexCoord.xy; vec2 center = vec2(0.5); vec4 bg = origColor; - uv *= 1.0 - uv.yx; - float vig = uv.x*uv.y * vig_strenght; + uv *= 1.0 - uv.yx; + float vig = uv.x * uv.y * vig_strenght; vig = pow(vig, vig_radius); - vec4 vigmixcolor = vec4(vig_color,vig) * vec4(vig); - gl_FragColor = vec4(mix(origColor,vigmixcolor,1.0-vig)); - + vec4 vigColor = vec4(vig_color.xyz, vig) * vig; + gl_FragColor = mix(origColor, vigColor, 1.0 - vig); } ]]></FragmentShader> </Shader> |