diff --git a/src/quick/scenegraph/util/qsgflatcolormaterial.cpp b/src/quick/scenegraph/util/qsgflatcolormaterial.cpp
index 307201277c8e96b115490258a0e96595b58cb3f0..09e2a7da271a311eb5bdfb9940bfab6d52794d3c 100644
--- a/src/quick/scenegraph/util/qsgflatcolormaterial.cpp
+++ b/src/quick/scenegraph/util/qsgflatcolormaterial.cpp
@@ -74,11 +74,11 @@ void FlatColorMaterialShader::updateState(const RenderState &state, QSGMaterial
     const QColor &c = newMaterial->color();
 
     if (oldMaterial == 0 || c != oldMaterial->color() || state.isOpacityDirty()) {
-        float opacity = state.opacity();
-        QVector4D v(c.redF() * c.alphaF() * opacity,
-                    c.greenF() * c.alphaF() * opacity,
-                    c.blueF() * c.alphaF() * opacity,
-                    c.alphaF() * opacity);
+        float opacity = state.opacity() * c.alphaF();
+        QVector4D v(c.redF() * opacity,
+                    c.greenF() *  opacity,
+                    c.blueF() * opacity,
+                    opacity);
         program()->setUniformValue(m_color_id, v);
     }