summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/runtime/q3dspresentationcommon_p.h1
-rw-r--r--src/runtime/q3dsscenemanager.cpp4
-rw-r--r--src/runtime/q3dsuippresentation.cpp70
-rw-r--r--tests/auto/q3dslancelot/data/effects/effects/VignetteEffect.effect10
-rw-r--r--tests/auto/uipparser/tst_q3dsuipparser.cpp4
-rw-r--r--tests/scenes/effectgallery/VignetteEffect.effect10
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>