From 7f2cc816e549d704f238af9f5886905d9e2dec86 Mon Sep 17 00:00:00 2001 From: Chris Adams Date: Mon, 19 Nov 2012 18:36:09 +1000 Subject: Expose QMatrix4x4 properties as mat4 uniforms in shaders MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- src/quick/items/qquickshadereffectnode.cpp | 3 +++ tests/auto/quick/qquickshadereffect/tst_qquickshadereffect.cpp | 7 +++++++ 2 files changed, 10 insertions(+) diff --git a/src/quick/items/qquickshadereffectnode.cpp b/src/quick/items/qquickshadereffectnode.cpp index b81045518b..7d7955c92a 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 909af209c9..f45f3dd23a 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() -- cgit v1.2.3