From: Chris Adams Date: Mon, 19 Nov 2012 08:36:09 +0000 (+1000) Subject: Expose QMatrix4x4 properties as mat4 uniforms in shaders X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=7f2cc816e549d704f238af9f5886905d9e2dec86;p=profile%2Fivi%2Fqtdeclarative.git Expose QMatrix4x4 properties as mat4 uniforms in shaders Previously, QMatrix4x4 properties were not exposed as uniforms in shaders. This commit adds conversion code for matrix 4x4 properties so that they are automatically converted to mat4 uniforms. Task-number: QTBUG-27952 Change-Id: I9b1de39fbbcb02743cf8c4e09b4d83c44f1dd438 Reviewed-by: Samuel Rødal --- diff --git a/src/quick/items/qquickshadereffectnode.cpp b/src/quick/items/qquickshadereffectnode.cpp index b810455..7d7955c 100644 --- a/src/quick/items/qquickshadereffectnode.cpp +++ b/src/quick/items/qquickshadereffectnode.cpp @@ -193,6 +193,9 @@ void QQuickCustomMaterialShader::updateState(const RenderState &state, QSGMateri case QMetaType::QVector4D: program()->setUniformValue(loc, qvariant_cast(d.value)); break; + case QMetaType::QMatrix4x4: + program()->setUniformValue(loc, qvariant_cast(d.value)); + break; default: break; } diff --git a/tests/auto/quick/qquickshadereffect/tst_qquickshadereffect.cpp b/tests/auto/quick/qquickshadereffect/tst_qquickshadereffect.cpp index 909af20..f45f3dd 100644 --- a/tests/auto/quick/qquickshadereffect/tst_qquickshadereffect.cpp +++ b/tests/auto/quick/qquickshadereffect/tst_qquickshadereffect.cpp @@ -56,8 +56,10 @@ class TestShaderEffect : public QQuickShaderEffect Q_PROPERTY(QVariant _0aA9zZ READ dummyRead NOTIFY dummyChanged) Q_PROPERTY(QVariant x86 READ dummyRead NOTIFY dummyChanged) Q_PROPERTY(QVariant X READ dummyRead NOTIFY dummyChanged) + Q_PROPERTY(QMatrix4x4 mat4x4 READ mat4x4Read NOTIFY dummyChanged) public: + QMatrix4x4 mat4x4Read() const { return QMatrix4x4(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1); } QVariant dummyRead() const { return QVariant(); } bool isConnected(const QMetaMethod &signal) const { return m_signals.contains(signal); } @@ -248,6 +250,11 @@ void tst_qquickshadereffect::lookThroughShaderCode_data() << QByteArray("uniform lowp float X;") << QByteArray(" ") << int(PropertyPresent); + + QTest::newRow("property name #4") + << QByteArray("uniform highp mat4 mat4x4;") + << QByteArray(" ") + << int(PropertyPresent); } void tst_qquickshadereffect::lookThroughShaderCode()