commit c1c259ea76c4d8c94f6d96c3fd0bbbece25785bf
Author: Joni Poikelin <joni.poikelin@qt.io>
Date:   Fri Dec 30 11:56:53 2016 +0200

    Support OpenGL core profile
    
    [ChangeLog][Qt Graphical Effects] Added QtGraphicalEffects support for
    OpenGL Core profile contexts.
    
    Task-number: QTBUG-42107
    Change-Id: I7111e2e6fb3a0b0391e76a17a8d091d288bfcc23
    Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>

diff --git a/src/effects/Blend.qml b/src/effects/Blend.qml
index 3244ae8..f607f4e 100644
--- a/src/effects/Blend.qml
+++ b/src/effects/Blend.qml
@@ -37,7 +37,7 @@
 **
 ****************************************************************************/
 
-import QtQuick 2.0
+import QtQuick 2.8
 import QtGraphicalEffects.private 1.0
 
 /*!
@@ -380,7 +380,14 @@ Item {
         property string blendModeSubtract: "result.rgb = max(rgb1 - rgb2, vec3(0.0));"
         property string blendModeSoftLight: "result.rgb = rgb1 * ((1.0 - rgb1) * rgb2 + (1.0 - (1.0 - rgb1) * (1.0 - rgb2)));"
 
-        property string fragmentShaderBegin: "
+        property string fragmentCoreShaderWorkaround: (GraphicsInfo.profile === GraphicsInfo.OpenGLCoreProfile ? "#version 150 core
+            #define varying in
+            #define texture2D texture
+            out vec4 fragColor;
+            #define gl_FragColor fragColor
+        " : "")
+
+        property string fragmentShaderBegin: fragmentCoreShaderWorkaround + "
             varying mediump vec2 qt_TexCoord0;
             uniform highp float qt_Opacity;
             uniform lowp sampler2D backgroundSource;
diff --git a/src/effects/BrightnessContrast.qml b/src/effects/BrightnessContrast.qml
index 165f291..04da2f3 100644
--- a/src/effects/BrightnessContrast.qml
+++ b/src/effects/BrightnessContrast.qml
@@ -188,21 +188,6 @@ Item {
         anchors.fill: parent
         blending: !rootItem.cached
 
-        fragmentShader: "
-            varying mediump vec2 qt_TexCoord0;
-            uniform highp float qt_Opacity;
-            uniform lowp sampler2D source;
-            uniform highp float brightness;
-            uniform highp float contrast;
-            void main() {
-                highp vec4 pixelColor = texture2D(source, qt_TexCoord0);
-                pixelColor.rgb /= max(1.0/256.0, pixelColor.a);
-                highp float c = 1.0 + contrast;
-                highp float contrastGainFactor = 1.0 + c * c * c * c * step(0.0, contrast);
-                pixelColor.rgb = ((pixelColor.rgb - 0.5) * (contrastGainFactor * contrast + 1.0)) + 0.5;
-                pixelColor.rgb = mix(pixelColor.rgb, vec3(step(0.0, brightness)), abs(brightness));
-                gl_FragColor = vec4(pixelColor.rgb * pixelColor.a, pixelColor.a) * qt_Opacity;
-            }
-        "
+        fragmentShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/brightnesscontrast.frag"
     }
 }
diff --git a/src/effects/ColorOverlay.qml b/src/effects/ColorOverlay.qml
index b4dd3bd..afefa0b 100644
--- a/src/effects/ColorOverlay.qml
+++ b/src/effects/ColorOverlay.qml
@@ -142,15 +142,6 @@ Item {
 
         anchors.fill: parent
 
-        fragmentShader: "
-            varying mediump vec2 qt_TexCoord0;
-            uniform highp float qt_Opacity;
-            uniform lowp sampler2D source;
-            uniform highp vec4 color;
-            void main() {
-                highp vec4 pixelColor = texture2D(source, qt_TexCoord0);
-                gl_FragColor = vec4(mix(pixelColor.rgb/max(pixelColor.a, 0.00390625), color.rgb/max(color.a, 0.00390625), color.a) * pixelColor.a, pixelColor.a) * qt_Opacity;
-            }
-        "
+        fragmentShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/coloroverlay.frag"
     }
 }
diff --git a/src/effects/Colorize.qml b/src/effects/Colorize.qml
index 77078ef..d36dea3 100644
--- a/src/effects/Colorize.qml
+++ b/src/effects/Colorize.qml
@@ -231,65 +231,7 @@ Item {
 
         anchors.fill: parent
 
-        fragmentShader: "
-            varying mediump vec2 qt_TexCoord0;
-            uniform highp float qt_Opacity;
-            uniform lowp sampler2D source;
-            uniform highp float hue;
-            uniform highp float saturation;
-            uniform highp float lightness;
+        fragmentShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/colorize.frag"
 
-            highp float RGBtoL(highp vec3 color) {
-                highp float cmin = min(color.r, min(color.g, color.b));
-                highp float cmax = max(color.r, max(color.g, color.b));
-                highp float l = (cmin + cmax) / 2.0;
-                return l;
-            }
-
-            highp float hueToIntensity(highp float v1, highp float v2, highp float h) {
-                h = fract(h);
-                if (h < 1.0 / 6.0)
-                    return v1 + (v2 - v1) * 6.0 * h;
-                else if (h < 1.0 / 2.0)
-                    return v2;
-                else if (h < 2.0 / 3.0)
-                    return v1 + (v2 - v1) * 6.0 * (2.0 / 3.0 - h);
-
-                return v1;
-            }
-
-            highp vec3 HSLtoRGB(highp vec3 color) {
-                highp float h = color.x;
-                highp float l = color.z;
-                highp float s = color.y;
-
-                if (s < 1.0 / 256.0)
-                    return vec3(l, l, l);
-
-                highp float v1;
-                highp float v2;
-                if (l < 0.5)
-                    v2 = l * (1.0 + s);
-                else
-                    v2 = (l + s) - (s * l);
-
-                v1 = 2.0 * l - v2;
-
-                highp float d = 1.0 / 3.0;
-                highp float r = hueToIntensity(v1, v2, h + d);
-                highp float g = hueToIntensity(v1, v2, h);
-                highp float b = hueToIntensity(v1, v2, h - d);
-                return vec3(r, g, b);
-            }
-
-            void main() {
-                lowp vec4 sample = texture2D(source, qt_TexCoord0);
-                sample = vec4(sample.rgb / max(1.0/256.0, sample.a), sample.a);
-                highp float light = RGBtoL(sample.rgb);
-                highp float c = step(0.0, lightness);
-                sample.rgb = HSLtoRGB(vec3(hue, saturation, mix(light, c, abs(lightness))));
-                gl_FragColor = vec4(sample.rgb * sample.a, sample.a) * qt_Opacity;
-            }
-        "
     }
 }
diff --git a/src/effects/ConicalGradient.qml b/src/effects/ConicalGradient.qml
index 51dda4e..ca65151 100644
--- a/src/effects/ConicalGradient.qml
+++ b/src/effects/ConicalGradient.qml
@@ -327,36 +327,7 @@ Gradient {
 
         onFragmentShaderChanged: startAngleChanged()
 
-        property string noMaskShader: "
-            varying mediump vec2 qt_TexCoord0;
-            uniform lowp sampler2D gradientSource;
-            uniform highp float qt_Opacity;
-            uniform highp float startAngle;
-            uniform highp vec2 center;
-
-            void main() {
-                const highp float PI = 3.14159265;
-                const highp float PIx2inv = 0.1591549;
-                highp float a = (atan((center.y - qt_TexCoord0.t), (center.x - qt_TexCoord0.s)) + PI - startAngle) * PIx2inv;
-                gl_FragColor = texture2D(gradientSource, vec2(0.0, fract(a))) * qt_Opacity;
-            }
-        "
-
-        property string maskShader: "
-            varying mediump vec2 qt_TexCoord0;
-            uniform lowp sampler2D gradientSource;
-            uniform lowp sampler2D maskSource;
-            uniform highp float qt_Opacity;
-            uniform highp float startAngle;
-            uniform highp vec2 center;
-
-            void main() {
-                lowp float maskAlpha = texture2D(maskSource, qt_TexCoord0).a;
-                const highp float PI = 3.14159265;
-                const highp float PIx2inv = 0.1591549;
-                highp float a = (atan((center.y - qt_TexCoord0.t), (center.x - qt_TexCoord0.s)) + PI - startAngle) * PIx2inv;
-                gl_FragColor = texture2D(gradientSource, vec2(0.0, fract(a))) * maskAlpha * qt_Opacity;
-            }
-        "
+        property string noMaskShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/conicalgradient_nomask.frag"
+        property string maskShader:   "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/conicalgradient_mask.frag"
     }
 }
diff --git a/src/effects/Desaturate.qml b/src/effects/Desaturate.qml
index 4bce9e2..13f3e85 100644
--- a/src/effects/Desaturate.qml
+++ b/src/effects/Desaturate.qml
@@ -141,16 +141,6 @@ Item {
 
         anchors.fill: parent
 
-        fragmentShader: "
-            varying highp vec2 qt_TexCoord0;
-            uniform highp float qt_Opacity;
-            uniform lowp sampler2D source;
-            uniform highp float desaturation;
-            void main(void) {
-                lowp vec4 textureColor = texture2D(source, qt_TexCoord0.st);
-                lowp float grayColor = (textureColor.r + textureColor.g + textureColor.b) / 3.0;
-                gl_FragColor = mix(textureColor, vec4(vec3(grayColor), textureColor.a), desaturation) * qt_Opacity;
-            }
-        "
+        fragmentShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/desaturate.frag"
     }
 }
diff --git a/src/effects/DirectionalBlur.qml b/src/effects/DirectionalBlur.qml
index a1b8f06..6965a52 100644
--- a/src/effects/DirectionalBlur.qml
+++ b/src/effects/DirectionalBlur.qml
@@ -37,7 +37,7 @@
 **
 ****************************************************************************/
 
-import QtQuick 2.0
+import QtQuick 2.8
 import QtGraphicalEffects.private 1.0
 
 /*!
@@ -263,7 +263,10 @@ Item {
         "
 
         function buildFragmentShader() {
-            var shader = fragmentShaderSkeleton
+            var shader = ""
+            if (GraphicsInfo.profile === GraphicsInfo.OpenGLCoreProfile)
+                shader += "#version 150 core\n#define varying in\n#define texture2D texture\nout vec4 fragColor;\n#define gl_FragColor fragColor\n"
+            shader += fragmentShaderSkeleton
             var expandSteps = ""
 
             if (transparentBorder) {
diff --git a/src/effects/Displace.qml b/src/effects/Displace.qml
index 35cf593..0ef5d96 100644
--- a/src/effects/Displace.qml
+++ b/src/effects/Displace.qml
@@ -185,34 +185,6 @@ Item {
 
         anchors.fill: parent
 
-        fragmentShader: "
-            varying highp vec2 qt_TexCoord0;
-            uniform highp float qt_Opacity;
-            uniform lowp sampler2D source;
-            uniform lowp sampler2D displacementSource;
-            uniform highp float displacement;
-            uniform highp float xPixel;
-            uniform highp float yPixel;
-
-            highp float linearstep(highp float e0, highp float e1, highp float x) {
-                return clamp((x - e0) / (e1 - e0), 0.0, 1.0);
-            }
-
-            void main() {
-                lowp vec4 offset = texture2D(displacementSource, qt_TexCoord0);
-                offset.xy -= vec2(0.5, 0.5);
-                offset.xy = offset.xy * step(vec2(1.0/256.0), abs(offset.xy));
-                highp vec2 tx = qt_TexCoord0 + (vec2(-offset.x, offset.y) * displacement);
-
-                lowp float e1 = linearstep(0.0, xPixel, tx.x);
-                lowp float e2 = linearstep(0.0, yPixel, tx.y);
-                lowp float e3 = 1.0 - linearstep(1.0, 1.0 + xPixel, tx.x);
-                lowp float e4 = 1.0 - linearstep(1.0, 1.0 + yPixel, tx.y);
-
-                lowp vec4 sample = texture2D(source, tx);
-                sample.rgb *= e1 * e2 * e3 * e4;
-                gl_FragColor = sample * qt_Opacity * offset.a;
-            }
-        "
+        fragmentShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/displace.frag"
     }
 }
diff --git a/src/effects/FastBlur.qml b/src/effects/FastBlur.qml
index 33561be..9c4c88b 100644
--- a/src/effects/FastBlur.qml
+++ b/src/effects/FastBlur.qml
@@ -177,43 +177,10 @@ Item {
     }
 
     /*! \internal */
-    property string __internalBlurVertexShader: "
-        attribute highp vec4 qt_Vertex;
-        attribute highp vec2 qt_MultiTexCoord0;
-        uniform highp mat4 qt_Matrix;
-        uniform highp float yStep;
-        uniform highp float xStep;
-        varying highp vec2 qt_TexCoord0;
-        varying highp vec2 qt_TexCoord1;
-        varying highp vec2 qt_TexCoord2;
-        varying highp vec2 qt_TexCoord3;
-
-        void main() {
-            qt_TexCoord0 = vec2(qt_MultiTexCoord0.x + xStep, qt_MultiTexCoord0.y + yStep * 0.36);
-            qt_TexCoord1 = vec2(qt_MultiTexCoord0.x + xStep * 0.36, qt_MultiTexCoord0.y - yStep);
-            qt_TexCoord2 = vec2(qt_MultiTexCoord0.x - xStep * 0.36, qt_MultiTexCoord0.y + yStep);
-            qt_TexCoord3 = vec2(qt_MultiTexCoord0.x - xStep, qt_MultiTexCoord0.y - yStep * 0.36);
-            gl_Position = qt_Matrix * qt_Vertex;
-        }
-    "
+    property string __internalBlurVertexShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/fastblur_internal.vert"
 
     /*! \internal */
-    property string __internalBlurFragmentShader: "
-        uniform lowp sampler2D source;
-        uniform lowp float qt_Opacity;
-        varying highp vec2 qt_TexCoord0;
-        varying highp vec2 qt_TexCoord1;
-        varying highp vec2 qt_TexCoord2;
-        varying highp vec2 qt_TexCoord3;
-
-        void main() {
-            highp vec4 sourceColor = (texture2D(source, qt_TexCoord0) +
-            texture2D(source, qt_TexCoord1) +
-            texture2D(source, qt_TexCoord2) +
-            texture2D(source, qt_TexCoord3)) * 0.25;
-            gl_FragColor = sourceColor * qt_Opacity;
-        }
-   "
+    property string __internalBlurFragmentShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/fastblur_internal.frag"
 
     ShaderEffect {
         id: level0
@@ -470,28 +437,6 @@ Item {
 
         onLodChanged: calculateWeights()
 
-        fragmentShader: "
-            uniform lowp sampler2D source1;
-            uniform lowp sampler2D source2;
-            uniform lowp sampler2D source3;
-            uniform lowp sampler2D source4;
-            uniform lowp sampler2D source5;
-            uniform mediump float weight1;
-            uniform mediump float weight2;
-            uniform mediump float weight3;
-            uniform mediump float weight4;
-            uniform mediump float weight5;
-            uniform lowp float qt_Opacity;
-            varying mediump vec2 qt_TexCoord0;
-
-            void main() {
-                lowp vec4 sourceColor = texture2D(source1, qt_TexCoord0) * weight1;
-                sourceColor += texture2D(source2, qt_TexCoord0) * weight2;
-                sourceColor += texture2D(source3, qt_TexCoord0) * weight3;
-                sourceColor += texture2D(source4, qt_TexCoord0) * weight4;
-                sourceColor += texture2D(source5, qt_TexCoord0) * weight5;
-                gl_FragColor = sourceColor * qt_Opacity;
-            }
-        "
+        fragmentShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/fastblur.frag"
     }
 }
diff --git a/src/effects/GammaAdjust.qml b/src/effects/GammaAdjust.qml
index 610c52b..e146d06 100644
--- a/src/effects/GammaAdjust.qml
+++ b/src/effects/GammaAdjust.qml
@@ -178,17 +178,6 @@ luminance = pow(original_luminance, 1.0 / gamma); // The luminance is assumed to
 
         anchors.fill: parent
 
-        fragmentShader: "
-            varying highp vec2 qt_TexCoord0;
-            uniform highp float qt_Opacity;
-            uniform lowp sampler2D source;
-            uniform highp float gamma;
-            void main(void) {
-                highp vec4 originalColor = texture2D(source, qt_TexCoord0.st);
-                originalColor.rgb = originalColor.rgb / max(1.0/256.0, originalColor.a);
-                highp vec3 adjustedColor = pow(originalColor.rgb, vec3(gamma));
-                gl_FragColor = vec4(adjustedColor * originalColor.a, originalColor.a) * qt_Opacity;
-            }
-        "
+        fragmentShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/gammeadjust.frag"
     }
 }
diff --git a/src/effects/HueSaturation.qml b/src/effects/HueSaturation.qml
index 31c11b7..866a8a2 100644
--- a/src/effects/HueSaturation.qml
+++ b/src/effects/HueSaturation.qml
@@ -218,84 +218,6 @@ Item {
 
         anchors.fill: parent
 
-        fragmentShader: "
-            varying highp vec2 qt_TexCoord0;
-            uniform highp float qt_Opacity;
-            uniform highp sampler2D source;
-            uniform highp vec3 hsl;
-
-            highp vec3 RGBtoHSL(highp vec3 color) {
-                highp float cmin = min(color.r, min(color.g, color.b));
-                highp float cmax = max(color.r, max(color.g, color.b));
-                highp float h = 0.0;
-                highp float s = 0.0;
-                highp float l = (cmin + cmax) / 2.0;
-                highp float diff = cmax - cmin;
-
-                if (diff > 1.0 / 256.0) {
-                    if (l < 0.5)
-                        s = diff / (cmin + cmax);
-                    else
-                        s = diff / (2.0 - (cmin + cmax));
-
-                    if (color.r == cmax)
-                        h = (color.g - color.b) / diff;
-                    else if (color.g == cmax)
-                        h = 2.0 + (color.b - color.r) / diff;
-                    else
-                        h = 4.0 + (color.r - color.g) / diff;
-
-                    h /= 6.0;
-                }
-                return vec3(h, s, l);
-            }
-
-            highp float hueToIntensity(highp float v1, highp float v2, highp float h) {
-                h = fract(h);
-                if (h < 1.0 / 6.0)
-                    return v1 + (v2 - v1) * 6.0 * h;
-                else if (h < 1.0 / 2.0)
-                    return v2;
-                else if (h < 2.0 / 3.0)
-                    return v1 + (v2 - v1) * 6.0 * (2.0 / 3.0 - h);
-
-                return v1;
-            }
-
-            highp vec3 HSLtoRGB(highp vec3 color) {
-                highp float h = color.x;
-                highp float l = color.z;
-                highp float s = color.y;
-
-                if (s < 1.0 / 256.0)
-                    return vec3(l);
-
-                highp float v1;
-                highp float v2;
-                if (l < 0.5)
-                    v2 = l * (1.0 + s);
-                else
-                    v2 = (l + s) - (s * l);
-
-                v1 = 2.0 * l - v2;
-
-                highp float d = 1.0 / 3.0;
-                highp float r = hueToIntensity(v1, v2, h + d);
-                highp float g = hueToIntensity(v1, v2, h);
-                highp float b = hueToIntensity(v1, v2, h - d);
-                return vec3(r, g, b);
-            }
-
-            void main() {
-                lowp vec4 sample = texture2D(source, qt_TexCoord0);
-                sample = vec4(sample.rgb / max(1.0/256.0, sample.a), sample.a);
-                sample.rgb = mix(vec3(dot(sample.rgb, vec3(0.2125, 0.7154, 0.0721))), sample.rgb, 1.0 + hsl.y);
-                sample.xyz = RGBtoHSL(sample.rgb);
-                sample.rgb = HSLtoRGB(vec3(sample.x + hsl.x, sample.y, sample.z));
-                highp float c = step(0.0, hsl.z);
-                sample.rgb = mix(sample.rgb, vec3(c), abs(hsl.z));
-                gl_FragColor = vec4(sample.rgb * sample.a, sample.a) * qt_Opacity;
-            }
-        "
+        fragmentShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/huesaturation.frag"
     }
 }
diff --git a/src/effects/LevelAdjust.qml b/src/effects/LevelAdjust.qml
index 6580909..a13354d 100644
--- a/src/effects/LevelAdjust.qml
+++ b/src/effects/LevelAdjust.qml
@@ -432,42 +432,6 @@ Item {
         property variant gamma: Qt.vector3d(1.0 / Math.max(rootItem.gamma.x, 0.0001), 1.0 / Math.max(rootItem.gamma.y, 0.0001), 1.0 / Math.max(rootItem.gamma.z, 0.0001))
         anchors.fill: parent
 
-        fragmentShader: "
-            varying highp vec2 qt_TexCoord0;
-            uniform highp float qt_Opacity;
-            uniform lowp sampler2D source;
-            uniform highp vec3 minimumInputRGB;
-            uniform highp vec3 maximumInputRGB;
-            uniform highp float minimumInputAlpha;
-            uniform highp float maximumInputAlpha;
-            uniform highp vec3 minimumOutputRGB;
-            uniform highp vec3 maximumOutputRGB;
-            uniform highp float minimumOutputAlpha;
-            uniform highp float maximumOutputAlpha;
-            uniform highp vec3 gamma;
-
-            highp float linearstep(highp float e0, highp float e1, highp float x) {
-                return clamp((x - e0) / (e1 - e0), 0.0, 1.0);
-            }
-
-            void main(void) {
-                highp vec4 textureColor = texture2D(source, qt_TexCoord0.st);
-                highp vec4 color = vec4(textureColor.rgb / max(1.0/256.0, textureColor.a), textureColor.a);
-
-                color.r = linearstep(minimumInputRGB.r, maximumInputRGB.r, color.r);
-                color.g = linearstep(minimumInputRGB.g, maximumInputRGB.g, color.g);
-                color.b = linearstep(minimumInputRGB.b, maximumInputRGB.b, color.b);
-                color.a = linearstep(minimumInputAlpha, maximumInputAlpha, color.a);
-
-                color.rgb = pow(color.rgb, gamma);
-
-                color.r = minimumOutputRGB.r + color.r * (maximumOutputRGB.r - minimumOutputRGB.r);
-                color.g = minimumOutputRGB.g + color.g * (maximumOutputRGB.g - minimumOutputRGB.g);
-                color.b = minimumOutputRGB.b + color.b * (maximumOutputRGB.b - minimumOutputRGB.b);
-                color.a = minimumOutputAlpha + color.a * (maximumOutputAlpha - minimumOutputAlpha);
-
-                gl_FragColor = vec4(color.rgb * color.a, color.a) * qt_Opacity;
-            }
-        "
+        fragmentShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/leveladjust.frag"
     }
 }
diff --git a/src/effects/LinearGradient.qml b/src/effects/LinearGradient.qml
index 8d2d233..e268f8e 100644
--- a/src/effects/LinearGradient.qml
+++ b/src/effects/LinearGradient.qml
@@ -311,56 +311,13 @@ Item {
         property real angle: Math.atan2(dx, dy)
         property variant matrixData: Qt.point(Math.sin(angle), Math.cos(angle))
 
-        vertexShader: "
-            attribute highp vec4 qt_Vertex;
-            attribute highp vec2 qt_MultiTexCoord0;
-            uniform highp mat4 qt_Matrix;
-            varying highp vec2 qt_TexCoord0;
-            varying highp vec2 qt_TexCoord1;
-            uniform highp vec2 startPoint;
-            uniform highp float l;
-            uniform highp vec2 matrixData;
-
-            void main() {
-                highp mat2 rot = mat2(matrixData.y, -matrixData.x,
-                                      matrixData.x,  matrixData.y);
-
-                qt_TexCoord0 = qt_MultiTexCoord0;
-
-                qt_TexCoord1 = qt_MultiTexCoord0 * l;
-                qt_TexCoord1 -= startPoint * l;
-                qt_TexCoord1 *= rot;
-
-                gl_Position = qt_Matrix * qt_Vertex;
-            }
-        "
+        vertexShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/lineargradient.vert"
 
         fragmentShader: maskSource == undefined ? noMaskShader : maskShader
 
         onFragmentShaderChanged: lChanged()
 
-        property string maskShader: "
-            uniform lowp sampler2D source;
-            uniform lowp sampler2D maskSource;
-            uniform lowp float qt_Opacity;
-            varying highp vec2 qt_TexCoord0;
-            varying highp vec2 qt_TexCoord1;
-
-            void main() {
-                lowp vec4 gradientColor = texture2D(source, qt_TexCoord1);
-                lowp float maskAlpha = texture2D(maskSource, qt_TexCoord0).a;
-                gl_FragColor = gradientColor * maskAlpha * qt_Opacity;
-            }
-        "
-
-        property string noMaskShader: "
-            uniform lowp sampler2D source;
-            uniform lowp float qt_Opacity;
-            varying highp vec2 qt_TexCoord1;
-
-            void main() {
-                gl_FragColor = texture2D(source, qt_TexCoord1) * qt_Opacity;
-            }
-        "
+        property string maskShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/lineargradient_mask.frag"
+        property string noMaskShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/lineargradient_nomask.frag"
     }
 }
diff --git a/src/effects/OpacityMask.qml b/src/effects/OpacityMask.qml
index a247297..3935141 100644
--- a/src/effects/OpacityMask.qml
+++ b/src/effects/OpacityMask.qml
@@ -157,16 +157,6 @@ Item {
 
         anchors.fill: parent
 
-        fragmentShader: "
-            varying highp vec2 qt_TexCoord0;
-            uniform highp float qt_Opacity;
-            uniform lowp sampler2D source;
-            uniform lowp sampler2D maskSource;
-            void main(void) {
-                gl_FragColor = texture2D(source, qt_TexCoord0.st) * ("
-                    + (invert ? "1.0 - " : "")
-                    + "texture2D(maskSource, qt_TexCoord0.st).a) * qt_Opacity;
-            }
-        "
+        fragmentShader: invert ? "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/opacitymask_invert.frag" : "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/opacitymask.frag"
     }
 }
diff --git a/src/effects/RadialBlur.qml b/src/effects/RadialBlur.qml
index 002a965..5530625 100644
--- a/src/effects/RadialBlur.qml
+++ b/src/effects/RadialBlur.qml
@@ -37,7 +37,7 @@
 **
 ****************************************************************************/
 
-import QtQuick 2.0
+import QtQuick 2.8
 import QtGraphicalEffects.private 1.0
 
 /*!
@@ -286,7 +286,10 @@ Item {
         "
 
         function buildFragmentShader() {
-            var shader = fragmentShaderSkeleton
+            var shader = ""
+            if (GraphicsInfo.profile == GraphicsInfo.OpenGLCoreProfile)
+                shader += "#version 150 core\n#define varying in\n#define gl_FragColor fragColor\n#define texture2D texture\nout vec4 fragColor;\n"
+            shader += fragmentShaderSkeleton
             var expandSteps = ""
 
             if (transparentBorder) {
diff --git a/src/effects/RadialGradient.qml b/src/effects/RadialGradient.qml
index 2dcb1aa..287b26f 100644
--- a/src/effects/RadialGradient.qml
+++ b/src/effects/RadialGradient.qml
@@ -392,68 +392,13 @@ Item {
 
         anchors.fill: parent
 
-        vertexShader: "
-            attribute highp vec4 qt_Vertex;
-            attribute highp vec2 qt_MultiTexCoord0;
-            uniform highp mat4 qt_Matrix;
-            uniform highp vec2 matrixData;
-            uniform highp float horizontalRatio;
-            uniform highp float verticalRatio;
-            uniform highp vec2 center;
-            varying highp vec2 qt_TexCoord0;
-            varying highp vec2 qt_TexCoord1;
-            varying highp vec2 centerPoint;
-
-            void main() {
-                highp vec2 ratio = vec2(horizontalRatio, verticalRatio);
-
-                // Rotation matrix
-                highp mat2 rot = mat2(matrixData.y, -matrixData.x,
-                                      matrixData.x,  matrixData.y);
-
-                qt_TexCoord0 = qt_MultiTexCoord0;
-
-                qt_TexCoord1 = qt_MultiTexCoord0;
-                qt_TexCoord1 -= center;
-                qt_TexCoord1 *= rot;
-                qt_TexCoord1 += center;
-                qt_TexCoord1 *= ratio;
-
-                centerPoint = center * ratio;
-
-                gl_Position = qt_Matrix * qt_Vertex;
-            }
-        "
+        vertexShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/radialgradient.vert"
 
         fragmentShader: maskSource == undefined ? noMaskShader : maskShader
 
         onFragmentShaderChanged: horizontalRatioChanged()
 
-        property string maskShader: "
-            uniform lowp sampler2D gradientImage;
-            uniform lowp sampler2D maskSource;
-            uniform lowp float qt_Opacity;
-            varying highp vec2 qt_TexCoord0;
-            varying highp vec2 qt_TexCoord1;
-            varying highp vec2 centerPoint;
-
-            void main() {
-                lowp vec4 gradientColor = texture2D(gradientImage, vec2(0.0, 2.0 * distance(qt_TexCoord1, centerPoint)));
-                lowp float maskAlpha = texture2D(maskSource, qt_TexCoord0).a;
-                gl_FragColor = gradientColor * maskAlpha * qt_Opacity;
-            }
-        "
-
-        property string noMaskShader: "
-            uniform lowp sampler2D gradientImage;
-            uniform lowp float qt_Opacity;
-            varying highp vec2 qt_TexCoord1;
-            varying highp vec2 centerPoint;
-
-            void main() {
-                lowp vec4 gradientColor = texture2D(gradientImage, vec2(0.0, 2.0 * distance(qt_TexCoord1, centerPoint)));
-                gl_FragColor = gradientColor * qt_Opacity;
-            }
-        "
+        property string maskShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/radialgradient_mask.frag"
+        property string noMaskShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/radialgradient_nomask.frag"
     }
 }
diff --git a/src/effects/RectangularGlow.qml b/src/effects/RectangularGlow.qml
index d8eb82c..f8971c0 100644
--- a/src/effects/RectangularGlow.qml
+++ b/src/effects/RectangularGlow.qml
@@ -264,26 +264,6 @@ Item {
         property real spread: rootItem.spread / 2.0
         property real cornerRadius: clampedCornerRadius()
 
-        fragmentShader: "
-            uniform highp float qt_Opacity;
-            uniform mediump float relativeSizeX;
-            uniform mediump float relativeSizeY;
-            uniform mediump float spread;
-            uniform lowp vec4 color;
-            varying highp vec2 qt_TexCoord0;
-
-            highp float linearstep(highp float e0, highp float e1, highp float x) {
-                return clamp((x - e0) / (e1 - e0), 0.0, 1.0);
-            }
-
-            void main() {
-                lowp float alpha =
-                    smoothstep(0.0, relativeSizeX, 0.5 - abs(0.5 - qt_TexCoord0.x)) *
-                    smoothstep(0.0, relativeSizeY, 0.5 - abs(0.5 - qt_TexCoord0.y));
-
-                highp float spreadMultiplier = linearstep(spread, 1.0 - spread, alpha);
-                gl_FragColor = color * qt_Opacity * spreadMultiplier * spreadMultiplier;
-            }
-        "
+        fragmentShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/rectangularglow.frag"
     }
 }
diff --git a/src/effects/RecursiveBlur.qml b/src/effects/RecursiveBlur.qml
index a90b179..458dc65 100644
--- a/src/effects/RecursiveBlur.qml
+++ b/src/effects/RecursiveBlur.qml
@@ -270,31 +270,9 @@ Item {
         anchors.fill: verticalBlur
         visible: !verticalBlur.visible
 
-        vertexShader: "
-            attribute highp vec4 qt_Vertex;
-            attribute highp vec2 qt_MultiTexCoord0;
-            uniform highp mat4 qt_Matrix;
-            uniform highp float expandX;
-            uniform highp float expandY;
-            varying highp vec2 qt_TexCoord0;
-
-            void main() {
-                mediump vec2 texCoord = qt_MultiTexCoord0;
-                texCoord.s = (texCoord.s - expandX) / (1.0 - 2.0 * expandX);
-                texCoord.t = (texCoord.t - expandY) / (1.0 - 2.0 * expandY);
-                qt_TexCoord0 = texCoord;
-                gl_Position = qt_Matrix * qt_Vertex;
-            }
-        "
-
-        fragmentShader: "
-            varying mediump vec2 qt_TexCoord0;
-            uniform highp float qt_Opacity;
-            uniform lowp sampler2D source;
-            void main() {
-                gl_FragColor = texture2D(source, qt_TexCoord0) * qt_Opacity;
-            }
-        "
+        vertexShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/recursiveblur.vert"
+
+        fragmentShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/recursiveblur.frag"
     }
 
     ShaderEffectSource {
diff --git a/src/effects/ThresholdMask.qml b/src/effects/ThresholdMask.qml
index 5136ffb..36e0365 100644
--- a/src/effects/ThresholdMask.qml
+++ b/src/effects/ThresholdMask.qml
@@ -210,18 +210,6 @@ Item {
 
         anchors.fill: parent
 
-        fragmentShader: "
-            varying highp vec2 qt_TexCoord0;
-            uniform highp float qt_Opacity;
-            uniform lowp sampler2D source;
-            uniform lowp sampler2D maskSource;
-            uniform highp float threshold;
-            uniform highp float spread;
-            void main(void) {
-                lowp vec4 colorFragment = texture2D(source, qt_TexCoord0.st);
-                lowp vec4 maskFragment = texture2D(maskSource, qt_TexCoord0.st);
-                gl_FragColor = colorFragment * smoothstep(threshold * (1.0 + spread) - spread, threshold * (1.0 + spread), maskFragment.a) * qt_Opacity;
-            }
-        "
+        fragmentShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/thresholdmask.frag"
     }
 }
diff --git a/src/effects/ZoomBlur.qml b/src/effects/ZoomBlur.qml
index d3cbd14..32e7be5 100644
--- a/src/effects/ZoomBlur.qml
+++ b/src/effects/ZoomBlur.qml
@@ -37,7 +37,7 @@
 **
 ****************************************************************************/
 
-import QtQuick 2.0
+import QtQuick 2.8
 import QtGraphicalEffects.private 1.0
 
 /*!
@@ -275,7 +275,10 @@ Item {
         "
 
         function buildFragmentShader() {
-            var shader = fragmentShaderSkeleton
+            var shader = ""
+            if (GraphicsInfo.profile == GraphicsInfo.OpenGLCoreProfile)
+                shader += "#version 150 core\n#define varying in\n#define gl_FragColor fragColor\n#define texture2D texture\nout vec4 fragColor;\n"
+            shader += fragmentShaderSkeleton
             var expandSteps = ""
 
             if (transparentBorder) {
diff --git a/src/effects/effects_plugin.pro b/src/effects/effects_plugin.pro
index 7ae59a6..e889236 100644
--- a/src/effects/effects_plugin.pro
+++ b/src/effects/effects_plugin.pro
@@ -30,7 +30,10 @@ QML_FILES = \
     ThresholdMask.qml \
     ZoomBlur.qml \
 
-!static: CONFIG += qmlcache
+# !static: CONFIG += qmlcache
+
+RESOURCES += \
+    qtgraphicaleffectsshaders.qrc
 
 QMAKE_DOCS = $$PWD/doc/qtgraphicaleffects.qdocconf
 SOURCES += plugin.cpp
diff --git a/src/effects/private/FastGlow.qml b/src/effects/private/FastGlow.qml
index 191c7f5..fb2fa42 100644
--- a/src/effects/private/FastGlow.qml
+++ b/src/effects/private/FastGlow.qml
@@ -64,42 +64,9 @@ Item {
         hideSource: visible
     }
 
-    property string __internalBlurVertexShader: "
-        attribute highp vec4 qt_Vertex;
-        attribute highp vec2 qt_MultiTexCoord0;
-        uniform highp mat4 qt_Matrix;
-        uniform highp float yStep;
-        uniform highp float xStep;
-        varying highp vec2 qt_TexCoord0;
-        varying highp vec2 qt_TexCoord1;
-        varying highp vec2 qt_TexCoord2;
-        varying highp vec2 qt_TexCoord3;
-
-        void main() {
-            qt_TexCoord0 = vec2(qt_MultiTexCoord0.x + xStep, qt_MultiTexCoord0.y + yStep * 0.36);
-            qt_TexCoord1 = vec2(qt_MultiTexCoord0.x + xStep * 0.36, qt_MultiTexCoord0.y - yStep);
-            qt_TexCoord2 = vec2(qt_MultiTexCoord0.x - xStep * 0.36, qt_MultiTexCoord0.y + yStep);
-            qt_TexCoord3 = vec2(qt_MultiTexCoord0.x - xStep, qt_MultiTexCoord0.y - yStep * 0.36);
-            gl_Position = qt_Matrix * qt_Vertex;
-        }
-    "
-
-    property string __internalBlurFragmentShader: "
-        uniform lowp sampler2D source;
-        uniform lowp float qt_Opacity;
-        varying highp vec2 qt_TexCoord0;
-        varying highp vec2 qt_TexCoord1;
-        varying highp vec2 qt_TexCoord2;
-        varying highp vec2 qt_TexCoord3;
-
-        void main() {
-            highp vec4 sourceColor = (texture2D(source, qt_TexCoord0) +
-            texture2D(source, qt_TexCoord1) +
-            texture2D(source, qt_TexCoord2) +
-            texture2D(source, qt_TexCoord3)) * 0.25;
-            gl_FragColor = sourceColor * qt_Opacity;
-        }
-   "
+    property string __internalBlurVertexShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/fastblur_internal.vert"
+
+    property string __internalBlurFragmentShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/fastblur_internal.frag"
 
     ShaderEffect {
         id: level0
@@ -359,35 +326,6 @@ Item {
 
         onLodChanged: calculateWeights()
 
-        fragmentShader: "
-            uniform lowp sampler2D source1;
-            uniform lowp sampler2D source2;
-            uniform lowp sampler2D source3;
-            uniform lowp sampler2D source4;
-            uniform lowp sampler2D source5;
-            uniform mediump float weight1;
-            uniform mediump float weight2;
-            uniform mediump float weight3;
-            uniform mediump float weight4;
-            uniform mediump float weight5;
-            uniform highp vec4 color;
-            uniform highp float spread;
-            uniform lowp float qt_Opacity;
-            varying mediump vec2 qt_TexCoord0;
-
-            highp float linearstep(highp float e0, highp float e1, highp float x) {
-                return clamp((x - e0) / (e1 - e0), 0.0, 1.0);
-            }
-
-            void main() {
-                lowp vec4 sourceColor = texture2D(source1, qt_TexCoord0) * weight1;
-                sourceColor += texture2D(source2, qt_TexCoord0) * weight2;
-                sourceColor += texture2D(source3, qt_TexCoord0) * weight3;
-                sourceColor += texture2D(source4, qt_TexCoord0) * weight4;
-                sourceColor += texture2D(source5, qt_TexCoord0) * weight5;
-                sourceColor = mix(vec4(0), color, linearstep(0.0, spread, sourceColor.a));
-                gl_FragColor = sourceColor * qt_Opacity;
-            }
-        "
+        fragmentShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/fastglow.frag"
     }
 }
diff --git a/src/effects/private/FastInnerShadow.qml b/src/effects/private/FastInnerShadow.qml
index 82690c5..be21d8e 100644
--- a/src/effects/private/FastInnerShadow.qml
+++ b/src/effects/private/FastInnerShadow.qml
@@ -65,42 +65,9 @@ Item {
         hideSource: visible
     }
 
-    property string __internalBlurVertexShader: "
-        attribute highp vec4 qt_Vertex;
-        attribute highp vec2 qt_MultiTexCoord0;
-        uniform highp mat4 qt_Matrix;
-        uniform highp float yStep;
-        uniform highp float xStep;
-        varying highp vec2 qt_TexCoord0;
-        varying highp vec2 qt_TexCoord1;
-        varying highp vec2 qt_TexCoord2;
-        varying highp vec2 qt_TexCoord3;
-
-        void main() {
-            qt_TexCoord0 = vec2(qt_MultiTexCoord0.x + xStep, qt_MultiTexCoord0.y + yStep * 0.36);
-            qt_TexCoord1 = vec2(qt_MultiTexCoord0.x + xStep * 0.36, qt_MultiTexCoord0.y - yStep);
-            qt_TexCoord2 = vec2(qt_MultiTexCoord0.x - xStep * 0.36, qt_MultiTexCoord0.y + yStep);
-            qt_TexCoord3 = vec2(qt_MultiTexCoord0.x - xStep, qt_MultiTexCoord0.y - yStep * 0.36);
-            gl_Position = qt_Matrix * qt_Vertex;
-        }
-    "
-
-    property string __internalBlurFragmentShader: "
-        uniform lowp sampler2D source;
-        uniform lowp float qt_Opacity;
-        varying highp vec2 qt_TexCoord0;
-        varying highp vec2 qt_TexCoord1;
-        varying highp vec2 qt_TexCoord2;
-        varying highp vec2 qt_TexCoord3;
-
-        void main() {
-            highp vec4 sourceColor = (texture2D(source, qt_TexCoord0) +
-            texture2D(source, qt_TexCoord1) +
-            texture2D(source, qt_TexCoord2) +
-            texture2D(source, qt_TexCoord3)) * 0.25;
-            gl_FragColor = sourceColor * qt_Opacity;
-        }
-   "
+    property string __internalBlurVertexShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/fastblur_internal.vert"
+
+    property string __internalBlurFragmentShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/fastblur_internal.frag"
 
     ShaderEffect {
         id: level0
@@ -112,21 +79,7 @@ Item {
         anchors.fill: parent
         visible: false
         smooth: true
-        fragmentShader: "
-            varying highp vec2 qt_TexCoord0;
-            uniform lowp float qt_Opacity;
-            uniform highp sampler2D source;
-            uniform lowp vec4 color;
-            uniform highp float horizontalOffset;
-            uniform highp float verticalOffset;
-
-            void main(void) {
-                highp vec2 pos = qt_TexCoord0 - vec2(horizontalOffset, verticalOffset);
-                lowp float ea = step(0.0, pos.x) * step(0.0, pos.y) * step(pos.x, 1.0) * step(pos.y, 1.0);
-                lowp float eb = 1.0 - ea;
-                gl_FragColor = (eb * color + ea * color * (1.0 - texture2D(source, pos).a)) * qt_Opacity;
-            }
-        "
+        fragmentShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/fastinnershadow_level0.frag"
     }
 
     ShaderEffectSource {
@@ -377,37 +330,6 @@ Item {
 
         onLodChanged: calculateWeights()
 
-        fragmentShader: "
-            uniform lowp sampler2D original;
-            uniform lowp sampler2D source1;
-            uniform lowp sampler2D source2;
-            uniform lowp sampler2D source3;
-            uniform lowp sampler2D source4;
-            uniform lowp sampler2D source5;
-            uniform mediump float weight1;
-            uniform mediump float weight2;
-            uniform mediump float weight3;
-            uniform mediump float weight4;
-            uniform mediump float weight5;
-            uniform highp vec4 color;
-            uniform highp float spread;
-            uniform lowp float qt_Opacity;
-            varying mediump vec2 qt_TexCoord0;
-
-            highp float linearstep(highp float e0, highp float e1, highp float x) {
-                return clamp((x - e0) / (e1 - e0), 0.0, 1.0);
-            }
-
-            void main() {
-                lowp vec4 shadowColor = texture2D(source1, qt_TexCoord0) * weight1;
-                shadowColor += texture2D(source2, qt_TexCoord0) * weight2;
-                shadowColor += texture2D(source3, qt_TexCoord0) * weight3;
-                shadowColor += texture2D(source4, qt_TexCoord0) * weight4;
-                shadowColor += texture2D(source5, qt_TexCoord0) * weight5;
-                lowp vec4 originalColor = texture2D(original, qt_TexCoord0);
-                shadowColor.rgb = mix(originalColor.rgb, color.rgb * originalColor.a, linearstep(0.0, spread, shadowColor.a));
-                gl_FragColor = vec4(shadowColor.rgb, originalColor.a) * originalColor.a * qt_Opacity;
-            }
-        "
+        fragmentShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/fastinnershadow.frag"
     }
 }
diff --git a/src/effects/private/FastMaskedBlur.qml b/src/effects/private/FastMaskedBlur.qml
index cfdace4..ef26704 100644
--- a/src/effects/private/FastMaskedBlur.qml
+++ b/src/effects/private/FastMaskedBlur.qml
@@ -68,42 +68,9 @@ Item {
         smooth: rootItem.blur > 0
     }
 
-    property string __internalBlurVertexShader: "
-        attribute highp vec4 qt_Vertex;
-        attribute highp vec2 qt_MultiTexCoord0;
-        uniform highp mat4 qt_Matrix;
-        uniform highp float yStep;
-        uniform highp float xStep;
-        varying highp vec2 qt_TexCoord0;
-        varying highp vec2 qt_TexCoord1;
-        varying highp vec2 qt_TexCoord2;
-        varying highp vec2 qt_TexCoord3;
+    property string __internalBlurVertexShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/fastblur_internal.vert"
 
-        void main() {
-            qt_TexCoord0 = vec2(qt_MultiTexCoord0.x + xStep, qt_MultiTexCoord0.y + yStep * 0.36);
-            qt_TexCoord1 = vec2(qt_MultiTexCoord0.x + xStep * 0.36, qt_MultiTexCoord0.y - yStep);
-            qt_TexCoord2 = vec2(qt_MultiTexCoord0.x - xStep * 0.36, qt_MultiTexCoord0.y + yStep);
-            qt_TexCoord3 = vec2(qt_MultiTexCoord0.x - xStep, qt_MultiTexCoord0.y - yStep * 0.36);
-            gl_Position = qt_Matrix * qt_Vertex;
-        }
-    "
-
-    property string __internalBlurFragmentShader: "
-        uniform lowp sampler2D source;
-        uniform lowp float qt_Opacity;
-        varying highp vec2 qt_TexCoord0;
-        varying highp vec2 qt_TexCoord1;
-        varying highp vec2 qt_TexCoord2;
-        varying highp vec2 qt_TexCoord3;
-
-        void main() {
-            highp vec4 sourceColor = (texture2D(source, qt_TexCoord0) +
-            texture2D(source, qt_TexCoord1) +
-            texture2D(source, qt_TexCoord2) +
-            texture2D(source, qt_TexCoord3)) * 0.25;
-            gl_FragColor = sourceColor * qt_Opacity;
-        }
-   "
+    property string __internalBlurFragmentShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/fastblur_internal.frag"
 
     ShaderEffect {
         id: mask0
@@ -275,58 +242,6 @@ Item {
         width: transparentBorder ? parent.width + 128 : parent.width
         height: transparentBorder ? parent.height + 128 : parent.height
 
-        fragmentShader: "
-            uniform lowp sampler2D mask;
-            uniform lowp sampler2D source1;
-            uniform lowp sampler2D source2;
-            uniform lowp sampler2D source3;
-            uniform lowp sampler2D source4;
-            uniform lowp sampler2D source5;
-            uniform lowp sampler2D source6;
-            uniform lowp float lod;
-            uniform lowp float qt_Opacity;
-            varying mediump vec2 qt_TexCoord0;
-
-            mediump float weight(mediump float v) {
-                if (v <= 0.0)
-                    return 1.0;
-
-                if (v >= 0.5)
-                    return 0.0;
-
-                return 1.0 - v * 2.0;
-            }
-
-            void main() {
-
-                lowp vec4 maskColor = texture2D(mask, qt_TexCoord0);
-                mediump float l = lod * maskColor.a;
-
-                mediump float w1 = weight(abs(l - 0.100));
-                mediump float w2 = weight(abs(l - 0.300));
-                mediump float w3 = weight(abs(l - 0.500));
-                mediump float w4 = weight(abs(l - 0.700));
-                mediump float w5 = weight(abs(l - 0.900));
-                mediump float w6 = weight(abs(l - 1.100));
-
-                mediump float sum = w1 + w2 + w3 + w4 + w5 + w6;
-                mediump float weight1 = w1 / sum;
-                mediump float weight2 = w2 / sum;
-                mediump float weight3 = w3 / sum;
-                mediump float weight4 = w4 / sum;
-                mediump float weight5 = w5 / sum;
-                mediump float weight6 = w6 / sum;
-
-                lowp vec4 sourceColor = texture2D(source1, qt_TexCoord0) * weight1;
-                sourceColor += texture2D(source2, qt_TexCoord0) * weight2;
-                sourceColor += texture2D(source3, qt_TexCoord0) * weight3;
-                sourceColor += texture2D(source4, qt_TexCoord0) * weight4;
-                sourceColor += texture2D(source5, qt_TexCoord0) * weight5;
-                sourceColor += texture2D(source6, qt_TexCoord0) * weight6;
-
-                gl_FragColor = sourceColor * qt_Opacity;
-
-            }
-        "
+        fragmentShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/fastmaskedblur.frag"
     }
 }
diff --git a/src/effects/private/GaussianDirectionalBlur.qml b/src/effects/private/GaussianDirectionalBlur.qml
index 0a62b80..af1ca70 100644
--- a/src/effects/private/GaussianDirectionalBlur.qml
+++ b/src/effects/private/GaussianDirectionalBlur.qml
@@ -37,7 +37,7 @@
 **
 ****************************************************************************/
 
-import QtQuick 2.0
+import QtQuick 2.8
 import QtGraphicalEffects.private 1.0
 
 Item {
@@ -180,7 +180,10 @@ Item {
             "gl_FragColor += texture2D(source, texCoord) * factor_30_31.y; texCoord += shift;"
         ]
 
-            var shader = fragmentShaderBegin
+            var shader = ""
+            if (GraphicsInfo.profile == GraphicsInfo.OpenGLCoreProfile)
+                shader += "#version 150 core\n#define varying in\n#define gl_FragColor fragColor\n#define texture2D texture\nout vec4 fragColor;\n"
+            shader += fragmentShaderBegin
             var samples = maxRadius * 2
             if (samples > 32) {
                 console.log("DirectionalGaussianBlur.qml WARNING: Maximum of blur radius (16) exceeded!")
diff --git a/src/effects/private/GaussianInnerShadow.qml b/src/effects/private/GaussianInnerShadow.qml
index f3becae..7207963 100644
--- a/src/effects/private/GaussianInnerShadow.qml
+++ b/src/effects/private/GaussianInnerShadow.qml
@@ -76,21 +76,7 @@ Item {
         property real verticalOffset: rootItem.verticalOffset / rootItem.height
 
         visible: false
-        fragmentShader: "
-            uniform highp sampler2D original;
-            uniform lowp float qt_Opacity;
-            uniform lowp vec4 color;
-            uniform highp float horizontalOffset;
-            uniform highp float verticalOffset;
-            varying highp vec2 qt_TexCoord0;
-
-            void main(void) {
-                highp vec2 pos = qt_TexCoord0 - vec2(horizontalOffset, verticalOffset);
-                lowp float ea = step(0.0, pos.x) * step(0.0, pos.y) * step(pos.x, 1.0) * step(pos.y, 1.0);
-                lowp float eb = 1.0 - ea;
-                gl_FragColor = eb * color + ea * color * (1.0 - texture2D(original, pos).a) * qt_Opacity;
-            }
-        "
+        fragmentShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/gaussianinnershadow_shadow.frag"
     }
 
     GaussianDirectionalBlur {
@@ -132,24 +118,6 @@ Item {
         property real spread: 1.0 - (rootItem.spread * 0.98)
         property color color: rootItem.color
 
-        fragmentShader: "
-            uniform highp sampler2D original;
-            uniform highp sampler2D shadow;
-            uniform lowp float qt_Opacity;
-            uniform highp float spread;
-            uniform lowp vec4 color;
-            varying highp vec2 qt_TexCoord0;
-
-            highp float linearstep(highp float e0, highp float e1, highp float x) {
-                return clamp((x - e0) / (e1 - e0), 0.0, 1.0);
-            }
-
-            void main(void) {
-                lowp vec4 originalColor = texture2D(original, qt_TexCoord0);
-                lowp vec4 shadowColor = texture2D(shadow, qt_TexCoord0);
-                shadowColor.rgb = mix(originalColor.rgb, color.rgb * originalColor.a, linearstep(0.0, spread, shadowColor.a));
-                gl_FragColor = vec4(shadowColor.rgb, originalColor.a) * originalColor.a * qt_Opacity;
-            }
-        "
+        fragmentShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/gaussianinnershadow.frag"
     }
 }
diff --git a/src/effects/private/qgfxshaderbuilder.cpp b/src/effects/private/qgfxshaderbuilder.cpp
index d1902a2..22975b5 100644
--- a/src/effects/private/qgfxshaderbuilder.cpp
+++ b/src/effects/private/qgfxshaderbuilder.cpp
@@ -60,6 +60,7 @@
 #endif
 
 QGfxShaderBuilder::QGfxShaderBuilder()
+    : m_coreProfile(false)
 {
     // The following code makes the assumption that an OpenGL context the GUI
     // thread will get the same capabilities as the render thread's OpenGL
@@ -82,6 +83,7 @@ QGfxShaderBuilder::QGfxShaderBuilder()
             int components;
             gl->glGetIntegerv(GL_MAX_VARYING_COMPONENTS, &components);
             m_maxBlurSamples = components / 2.0;
+            m_coreProfile = context.format().profile() == QSurfaceFormat::CoreProfile;
         } else {
             int floats;
             gl->glGetIntegerv(GL_MAX_VARYING_FLOATS, &floats);
@@ -182,6 +184,15 @@ static void qgfx_declareBlurVaryings(QByteArray &shader, QGfxGaussSample *s, int
     }
 }
 
+static void qgfx_declareCoreBlur(QByteArray &shader, const QByteArray& direction, QGfxGaussSample *s, int samples)
+{
+    for (int i=0; i<samples; ++i) {
+        shader += direction + " vec2 ";
+        shader += s[i].name;
+        shader += ";\n";
+    }
+}
+
 static void qgfx_buildGaussSamplePoints(QGfxGaussSample *p, int samples, int radius, qreal deviation)
 {
 
@@ -259,6 +270,38 @@ QByteArray qgfx_gaussianVertexShader(QGfxGaussSample *p, int samples)
     return shader;
 }
 
+QByteArray qgfx_gaussianVertexCoreShader(QGfxGaussSample *p, int samples)
+{
+    QByteArray shader;
+    shader.reserve(1024);
+    shader += "#version 150 core\n"
+              "in vec4 qt_Vertex;\n"
+              "in vec2 qt_MultiTexCoord0;\n\n"
+              "uniform mat4 qt_Matrix;\n"
+              "uniform float spread;\n"
+              "uniform vec2 dirstep;\n\n";
+
+    qgfx_declareCoreBlur(shader, "out", p, samples);
+
+    shader += "\nvoid main() {\n"
+              "    gl_Position = qt_Matrix * qt_Vertex;\n\n";
+
+    for (int i=0; i<samples; ++i) {
+        shader += "    ";
+        shader += p[i].name;
+        shader += " = qt_MultiTexCoord0";
+        if (p[i].pos != 0.0) {
+            shader += " + spread * dirstep * float(";
+            shader += QByteArray::number(p[i].pos);
+            shader += ')';
+        }
+        shader += ";\n";
+    }
+
+    shader += "}\n";
+
+    return shader;
+}
 
 QByteArray qgfx_gaussianFragmentShader(QGfxGaussSample *p, int samples, bool alphaOnly)
 {
@@ -307,6 +350,182 @@ QByteArray qgfx_gaussianFragmentShader(QGfxGaussSample *p, int samples, bool alp
     return shader;
 }
 
+QByteArray qgfx_gaussianFragmentCoreShader(QGfxGaussSample *p, int samples, bool alphaOnly)
+{
+    QByteArray shader;
+    shader.reserve(1024);
+    shader += "#version 150 core\n"
+              "uniform sampler2D source;\n"
+              "uniform float qt_Opacity;\n";
+
+    if (alphaOnly) {
+        shader += "uniform vec4 color;\n"
+                  "uniform float thickness;\n";
+    }
+
+    shader += "out vec4 fragColor;\n";
+
+    qgfx_declareCoreBlur(shader, "in", p, samples);
+
+    shader += "\nvoid main() {\n"
+              "    fragColor = ";
+    if (alphaOnly)
+        shader += "mix(vec4(0), color, clamp((";
+    else
+        shader += "(";
+
+    qreal sum = 0;
+    for (int i=0; i<samples; ++i)
+        sum += p[i].weight;
+
+    for (int i=0; i<samples; ++i) {
+        shader += "\n                    + float(";
+        shader += QByteArray::number(p[i].weight / sum);
+        shader += ") * texture(source, ";
+        shader += p[i].name;
+        shader += ")";
+        if (alphaOnly)
+            shader += ".a";
+    }
+
+    shader += "\n                   )";
+    if (alphaOnly)
+        shader += "/thickness, 0.0, 1.0))";
+    shader += "* qt_Opacity;\n}";
+
+    return shader;
+}
+
+static QByteArray qgfx_fallbackVertexShader()
+{
+    return "attribute highp vec4 qt_Vertex;\n"
+           "attribute highp vec2 qt_MultiTexCoord0;\n"
+           "uniform highp mat4 qt_Matrix;\n"
+           "varying highp vec2 qt_TexCoord0;\n"
+           "void main() {\n"
+           "    gl_Position = qt_Matrix * qt_Vertex;\n"
+           "    qt_TexCoord0 = qt_MultiTexCoord0;\n"
+           "}\n";
+}
+
+static QByteArray qgfx_fallbackCoreVertexShader()
+{
+    return "#version 150 core\n"
+           "in vec4 qt_Vertex;\n"
+           "in vec2 qt_MultiTexCoord0;\n"
+           "uniform mat4 qt_Matrix;\n"
+           "out vec2 qt_TexCoord0;\n"
+           "void main() {\n"
+           "    gl_Position = qt_Matrix * qt_Vertex;\n"
+           "    qt_TexCoord0 = qt_MultiTexCoord0;\n"
+           "}\n";
+}
+
+static QByteArray qgfx_fallbackFragmentShader(int requestedRadius, qreal deviation, bool masked, bool alphaOnly)
+{
+    QByteArray fragShader;
+    if (masked)
+        fragShader += "uniform mediump sampler2D mask;\n";
+    fragShader +=
+        "uniform highp sampler2D source;\n"
+        "uniform lowp float qt_Opacity;\n"
+        "uniform mediump float spread;\n"
+        "uniform highp vec2 dirstep;\n";
+    if (alphaOnly) {
+        fragShader += "uniform lowp vec4 color;\n"
+                      "uniform lowp float thickness;\n";
+    }
+    fragShader +=
+        "\n"
+        "varying highp vec2 qt_TexCoord0;\n"
+        "\n"
+        "void main() {\n";
+    if (alphaOnly)
+        fragShader += "    mediump float result = 0.0;\n";
+    else
+        fragShader += "    mediump vec4 result = vec4(0);\n";
+    fragShader += "    highp vec2 pixelStep = dirstep * spread;\n";
+    if (masked)
+        fragShader += "    pixelStep *= texture2D(mask, qt_TexCoord0).a;\n";
+
+    float wSum = 0;
+    for (int r=-requestedRadius; r<=requestedRadius; ++r) {
+        float w = qgfx_gaussian(r, deviation);
+        wSum += w;
+        fragShader += "    result += float(";
+        fragShader += QByteArray::number(w);
+        fragShader += ") * texture2D(source, qt_TexCoord0 + pixelStep * float(";
+        fragShader += QByteArray::number(r);
+        fragShader += "))";
+        if (alphaOnly)
+            fragShader += ".a";
+        fragShader += ";\n";
+    }
+    fragShader += "    const mediump float wSum = float(";
+    fragShader += QByteArray::number(wSum);
+    fragShader += ");\n"
+        "    gl_FragColor = ";
+    if (alphaOnly)
+        fragShader += "mix(vec4(0), color, clamp((result / wSum) / thickness, 0.0, 1.0)) * qt_Opacity;\n";
+    else
+        fragShader += "(qt_Opacity / wSum) * result;\n";
+    fragShader += "}\n";
+
+    return fragShader;
+}
+
+static QByteArray qgfx_fallbackCoreFragmentShader(int requestedRadius, qreal deviation, bool masked, bool alphaOnly)
+{
+    QByteArray fragShader = "#version 150 core\n";
+    if (masked)
+        fragShader += "uniform sampler2D mask;\n";
+    fragShader +=
+        "uniform sampler2D source;\n"
+        "uniform float qt_Opacity;\n"
+        "uniform float spread;\n"
+        "uniform vec2 dirstep;\n";
+    if (alphaOnly) {
+        fragShader += "uniform vec4 color;\n"
+                      "uniform float thickness;\n";
+    }
+    fragShader +=
+        "out vec4 fragColor;\n"
+        "in vec2 qt_TexCoord0;\n"
+        "\n"
+        "void main() {\n";
+    if (alphaOnly)
+        fragShader += "    float result = 0.0;\n";
+    else
+        fragShader += "    vec4 result = vec4(0);\n";
+    fragShader += "    vec2 pixelStep = dirstep * spread;\n";
+    if (masked)
+        fragShader += "    pixelStep *= texture(mask, qt_TexCoord0).a;\n";
+
+    float wSum = 0;
+    for (int r=-requestedRadius; r<=requestedRadius; ++r) {
+        float w = qgfx_gaussian(r, deviation);
+        wSum += w;
+        fragShader += "    result += float(";
+        fragShader += QByteArray::number(w);
+        fragShader += ") * texture(source, qt_TexCoord0 + pixelStep * float(";
+        fragShader += QByteArray::number(r);
+        fragShader += "))";
+        if (alphaOnly)
+            fragShader += ".a";
+        fragShader += ";\n";
+    }
+    fragShader += "    const float wSum = float(";
+    fragShader += QByteArray::number(wSum);
+    fragShader += ");\n"
+        "    fragColor = ";
+    if (alphaOnly)
+        fragShader += "mix(vec4(0), color, clamp((result / wSum) / thickness, 0.0, 1.0)) * qt_Opacity;\n";
+    else
+        fragShader += "(qt_Opacity / wSum) * result;\n";
+    fragShader += "}\n";
+
+    return fragShader;
+}
 
 QVariantMap QGfxShaderBuilder::gaussianBlur(const QJSValue &parameters)
 {
@@ -323,73 +542,27 @@ QVariantMap QGfxShaderBuilder::gaussianBlur(const QJSValue &parameters)
     QVariantMap result;
 
     if (samples > m_maxBlurSamples || masked || fallback) {
-        QByteArray fragShader;
-        if (masked)
-            fragShader += "uniform mediump sampler2D mask;\n";
-        fragShader +=
-            "uniform highp sampler2D source;\n"
-            "uniform lowp float qt_Opacity;\n"
-            "uniform mediump float spread;\n"
-            "uniform highp vec2 dirstep;\n";
-        if (alphaOnly) {
-            fragShader += "uniform lowp vec4 color;\n"
-                          "uniform lowp float thickness;\n";
-        }
-        fragShader +=
-            "\n"
-            "varying highp vec2 qt_TexCoord0;\n"
-            "\n"
-            "void main() {\n";
-        if (alphaOnly)
-            fragShader += "    mediump float result = 0.0;\n";
-        else
-            fragShader += "    mediump vec4 result = vec4(0);\n";
-        fragShader += "    highp vec2 pixelStep = dirstep * spread;\n";
-        if (masked)
-            fragShader += "    pixelStep *= texture2D(mask, qt_TexCoord0).a;\n";
-
-        float wSum = 0;
-        for (int r=-requestedRadius; r<=requestedRadius; ++r) {
-            float w = qgfx_gaussian(r, deviation);
-            wSum += w;
-            fragShader += "    result += float(";
-            fragShader += QByteArray::number(w);
-            fragShader += ") * texture2D(source, qt_TexCoord0 + pixelStep * float(";
-            fragShader += QByteArray::number(r);
-            fragShader += "))";
-            if (alphaOnly)
-                fragShader += ".a";
-            fragShader += ";\n";
+
+        if (m_coreProfile) {
+            result[QStringLiteral("fragmentShader")] = qgfx_fallbackCoreFragmentShader(requestedRadius, deviation, masked, alphaOnly);
+            result[QStringLiteral("vertexShader")] = qgfx_fallbackCoreVertexShader();
+        } else {
+            result[QStringLiteral("fragmentShader")] = qgfx_fallbackFragmentShader(requestedRadius, deviation, masked, alphaOnly);
+            result[QStringLiteral("vertexShader")] = qgfx_fallbackVertexShader();
         }
-        fragShader += "    const mediump float wSum = float(";
-        fragShader += QByteArray::number(wSum);
-        fragShader += ");\n"
-            "    gl_FragColor = ";
-        if (alphaOnly)
-            fragShader += "mix(vec4(0), color, clamp((result / wSum) / thickness, 0.0, 1.0)) * qt_Opacity;\n";
-        else
-            fragShader += "(qt_Opacity / wSum) * result;\n";
-        fragShader += "}\n";
-        result[QStringLiteral("fragmentShader")] = fragShader;
-
-        result[QStringLiteral("vertexShader")] =
-            "attribute highp vec4 qt_Vertex;\n"
-            "attribute highp vec2 qt_MultiTexCoord0;\n"
-            "uniform highp mat4 qt_Matrix;\n"
-            "varying highp vec2 qt_TexCoord0;\n"
-            "void main() {\n"
-            "    gl_Position = qt_Matrix * qt_Vertex;\n"
-            "    qt_TexCoord0 = qt_MultiTexCoord0;\n"
-            "}\n";
         return result;
     }
 
     QVarLengthArray<QGfxGaussSample, 64> p(samples);
     qgfx_buildGaussSamplePoints(p.data(), samples, radius, deviation);
 
-    result[QStringLiteral("fragmentShader")] = qgfx_gaussianFragmentShader(p.data(), samples, alphaOnly);
-    result[QStringLiteral("vertexShader")] = qgfx_gaussianVertexShader(p.data(), samples);
-
+    if (m_coreProfile) {
+        result[QStringLiteral("fragmentShader")] = qgfx_gaussianFragmentCoreShader(p.data(), samples, alphaOnly);
+        result[QStringLiteral("vertexShader")] = qgfx_gaussianVertexCoreShader(p.data(), samples);
+    } else {
+        result[QStringLiteral("fragmentShader")] = qgfx_gaussianFragmentShader(p.data(), samples, alphaOnly);
+        result[QStringLiteral("vertexShader")] = qgfx_gaussianVertexShader(p.data(), samples);
+    }
     return result;
 }
 
diff --git a/src/effects/private/qgfxshaderbuilder_p.h b/src/effects/private/qgfxshaderbuilder_p.h
index 7061c7d..59aea2c 100644
--- a/src/effects/private/qgfxshaderbuilder_p.h
+++ b/src/effects/private/qgfxshaderbuilder_p.h
@@ -58,6 +58,7 @@ public:
 
 private:
     int m_maxBlurSamples = 0;
+    bool m_coreProfile;
 };
 
 QT_END_NAMESPACE
diff --git a/src/effects/qtgraphicaleffectsshaders.qrc b/src/effects/qtgraphicaleffectsshaders.qrc
new file mode 100644
index 0000000..98f8846
--- /dev/null
+++ b/src/effects/qtgraphicaleffectsshaders.qrc
@@ -0,0 +1,66 @@
+<RCC>
+    <qresource prefix="/qt-project.org/imports/QtGraphicalEffects">
+        <file>shaders/brightnesscontrast.frag</file>
+        <file>shaders/+glslcore/brightnesscontrast.frag</file>
+        <file>shaders/+glslcore/colorize.frag</file>
+        <file>shaders/colorize.frag</file>
+        <file>shaders/+glslcore/coloroverlay.frag</file>
+        <file>shaders/coloroverlay.frag</file>
+        <file>shaders/conicalgradient_nomask.frag</file>
+        <file>shaders/conicalgradient_mask.frag</file>
+        <file>shaders/+glslcore/conicalgradient_nomask.frag</file>
+        <file>shaders/+glslcore/conicalgradient_mask.frag</file>
+        <file>shaders/+glslcore/desaturate.frag</file>
+        <file>shaders/desaturate.frag</file>
+        <file>shaders/+glslcore/displace.frag</file>
+        <file>shaders/displace.frag</file>
+        <file>shaders/+glslcore/fastblur.frag</file>
+        <file>shaders/+glslcore/fastblur_internal.frag</file>
+        <file>shaders/+glslcore/fastblur_internal.vert</file>
+        <file>shaders/fastblur.frag</file>
+        <file>shaders/fastblur_internal.frag</file>
+        <file>shaders/fastblur_internal.vert</file>
+        <file>shaders/gammaadjust.frag</file>
+        <file>shaders/+glslcore/gammaadjust.frag</file>
+        <file>shaders/huesaturation.frag</file>
+        <file>shaders/+glslcore/huesaturation.frag</file>
+        <file>shaders/leveladjust.frag</file>
+        <file>shaders/+glslcore/leveladjust.frag</file>
+        <file>shaders/lineargradient.vert</file>
+        <file>shaders/lineargradient_nomask.frag</file>
+        <file>shaders/lineargradient_mask.frag</file>
+        <file>shaders/+glslcore/lineargradient.vert</file>
+        <file>shaders/+glslcore/lineargradient_nomask.frag</file>
+        <file>shaders/+glslcore/lineargradient_mask.frag</file>
+        <file>shaders/opacitymask.frag</file>
+        <file>shaders/+glslcore/opacitymask.frag</file>
+        <file>shaders/+glslcore/opacitymask_invert.frag</file>
+        <file>shaders/opacitymask_invert.frag</file>
+        <file>shaders/radialgradient_nomask.frag</file>
+        <file>shaders/radialgradient_mask.frag</file>
+        <file>shaders/radialgradient.vert</file>
+        <file>shaders/+glslcore/radialgradient_nomask.frag</file>
+        <file>shaders/+glslcore/radialgradient_mask.frag</file>
+        <file>shaders/+glslcore/radialgradient.vert</file>
+        <file>shaders/rectangularglow.frag</file>
+        <file>shaders/+glslcore/rectangularglow.frag</file>
+        <file>shaders/recursiveblur.frag</file>
+        <file>shaders/recursiveblur.vert</file>
+        <file>shaders/+glslcore/recursiveblur.frag</file>
+        <file>shaders/+glslcore/recursiveblur.vert</file>
+        <file>shaders/thresholdmask.frag</file>
+        <file>shaders/+glslcore/thresholdmask.frag</file>
+        <file>shaders/fastglow.frag</file>
+        <file>shaders/+glslcore/fastglow.frag</file>
+        <file>shaders/fastinnershadow_level0.frag</file>
+        <file>shaders/+glslcore/fastinnershadow_level0.frag</file>
+        <file>shaders/fastinnershadow.frag</file>
+        <file>shaders/+glslcore/fastinnershadow.frag</file>
+        <file>shaders/fastmaskedblur.frag</file>
+        <file>shaders/+glslcore/fastmaskedblur.frag</file>
+        <file>shaders/gaussianinnershadow.frag</file>
+        <file>shaders/gaussianinnershadow_shadow.frag</file>
+        <file>shaders/+glslcore/gaussianinnershadow.frag</file>
+        <file>shaders/+glslcore/gaussianinnershadow_shadow.frag</file>
+    </qresource>
+</RCC>
diff --git a/src/effects/shaders/+glslcore/brightnesscontrast.frag b/src/effects/shaders/+glslcore/brightnesscontrast.frag
new file mode 100644
index 0000000..414e268
--- /dev/null
+++ b/src/effects/shaders/+glslcore/brightnesscontrast.frag
@@ -0,0 +1,17 @@
+#version 150 core
+in vec2 qt_TexCoord0;
+uniform float qt_Opacity;
+uniform sampler2D source;
+uniform float brightness;
+uniform float contrast;
+out vec4 fragColor;
+
+void main() {
+    vec4 pixelColor = texture(source, qt_TexCoord0);
+    pixelColor.rgb /= max(1.0/256.0, pixelColor.a);
+    float c = 1.0 + contrast;
+    float contrastGainFactor = 1.0 + c * c * c * c * step(0.0, contrast);
+    pixelColor.rgb = ((pixelColor.rgb - 0.5) * (contrastGainFactor * contrast + 1.0)) + 0.5;
+    pixelColor.rgb = mix(pixelColor.rgb, vec3(step(0.0, brightness)), abs(brightness));
+    fragColor = vec4(pixelColor.rgb * pixelColor.a, pixelColor.a) * qt_Opacity;
+}
diff --git a/src/effects/shaders/+glslcore/colorize.frag b/src/effects/shaders/+glslcore/colorize.frag
new file mode 100644
index 0000000..67496c6
--- /dev/null
+++ b/src/effects/shaders/+glslcore/colorize.frag
@@ -0,0 +1,60 @@
+#version 150 core
+in vec2 qt_TexCoord0;
+uniform float qt_Opacity;
+uniform sampler2D source;
+uniform float hue;
+uniform float saturation;
+uniform float lightness;
+out vec4 fragColor;
+
+float RGBtoL(vec3 color) {
+    float cmin = min(color.r, min(color.g, color.b));
+    float cmax = max(color.r, max(color.g, color.b));
+    float l = (cmin + cmax) / 2.0;
+    return l;
+}
+
+float hueToIntensity(float v1, float v2, float h) {
+    h = fract(h);
+    if (h < 1.0 / 6.0)
+        return v1 + (v2 - v1) * 6.0 * h;
+    else if (h < 1.0 / 2.0)
+        return v2;
+    else if (h < 2.0 / 3.0)
+        return v1 + (v2 - v1) * 6.0 * (2.0 / 3.0 - h);
+
+    return v1;
+}
+
+vec3 HSLtoRGB(vec3 color) {
+    float h = color.x;
+    float l = color.z;
+    float s = color.y;
+
+    if (s < 1.0 / 256.0)
+        return vec3(l, l, l);
+
+    float v1;
+    float v2;
+    if (l < 0.5)
+        v2 = l * (1.0 + s);
+    else
+        v2 = (l + s) - (s * l);
+
+    v1 = 2.0 * l - v2;
+
+    float d = 1.0 / 3.0;
+    float r = hueToIntensity(v1, v2, h + d);
+    float g = hueToIntensity(v1, v2, h);
+    float b = hueToIntensity(v1, v2, h - d);
+    return vec3(r, g, b);
+}
+
+void main() {
+    vec4 sample = texture(source, qt_TexCoord0);
+    sample = vec4(sample.rgb / max(1.0/256.0, sample.a), sample.a);
+    float light = RGBtoL(sample.rgb);
+    float c = step(0.0, lightness);
+    sample.rgb = HSLtoRGB(vec3(hue, saturation, mix(light, c, abs(lightness))));
+    fragColor = vec4(sample.rgb * sample.a, sample.a) * qt_Opacity;
+}
diff --git a/src/effects/shaders/+glslcore/coloroverlay.frag b/src/effects/shaders/+glslcore/coloroverlay.frag
new file mode 100644
index 0000000..68c15ab
--- /dev/null
+++ b/src/effects/shaders/+glslcore/coloroverlay.frag
@@ -0,0 +1,10 @@
+#version 150 core
+in vec2 qt_TexCoord0;
+uniform float qt_Opacity;
+uniform sampler2D source;
+uniform vec4 color;
+out vec4 fragColor;
+void main() {
+    vec4 pixelColor = texture(source, qt_TexCoord0);
+    fragColor = vec4(mix(pixelColor.rgb/max(pixelColor.a, 0.00390625), color.rgb/max(color.a, 0.00390625), color.a) * pixelColor.a, pixelColor.a) * qt_Opacity;
+}
diff --git a/src/effects/shaders/+glslcore/conicalgradient_mask.frag b/src/effects/shaders/+glslcore/conicalgradient_mask.frag
new file mode 100644
index 0000000..5724ebb
--- /dev/null
+++ b/src/effects/shaders/+glslcore/conicalgradient_mask.frag
@@ -0,0 +1,16 @@
+#version 150 core
+in vec2 qt_TexCoord0;
+uniform sampler2D gradientSource;
+uniform sampler2D maskSource;
+uniform float qt_Opacity;
+uniform float startAngle;
+uniform vec2 center;
+out vec4 fragColor;
+
+void main() {
+    float maskAlpha = texture(maskSource, qt_TexCoord0).a;
+    const float PI = 3.14159265;
+    const float PIx2inv = 0.1591549;
+    float a = (atan((center.y - qt_TexCoord0.t), (center.x - qt_TexCoord0.s)) + PI - startAngle) * PIx2inv;
+    fragColor = texture(gradientSource, vec2(0.0, fract(a))) * maskAlpha * qt_Opacity;
+}
diff --git a/src/effects/shaders/+glslcore/conicalgradient_nomask.frag b/src/effects/shaders/+glslcore/conicalgradient_nomask.frag
new file mode 100644
index 0000000..89a3278
--- /dev/null
+++ b/src/effects/shaders/+glslcore/conicalgradient_nomask.frag
@@ -0,0 +1,14 @@
+#version 150 core
+in vec2 qt_TexCoord0;
+uniform sampler2D gradientSource;
+uniform float qt_Opacity;
+uniform float startAngle;
+uniform vec2 center;
+out vec4 fragColor;
+
+void main() {
+    const float PI = 3.14159265;
+    const float PIx2inv = 0.1591549;
+    float a = (atan((center.y - qt_TexCoord0.t), (center.x - qt_TexCoord0.s)) + PI - startAngle) * PIx2inv;
+    fragColor = texture(gradientSource, vec2(0.0, fract(a))) * qt_Opacity;
+}
diff --git a/src/effects/shaders/+glslcore/desaturate.frag b/src/effects/shaders/+glslcore/desaturate.frag
new file mode 100644
index 0000000..c95c0a5
--- /dev/null
+++ b/src/effects/shaders/+glslcore/desaturate.frag
@@ -0,0 +1,11 @@
+#version 150 core
+in vec2 qt_TexCoord0;
+uniform float qt_Opacity;
+uniform sampler2D source;
+uniform float desaturation;
+out vec4 fragColor;
+void main(void) {
+    vec4 textureColor = texture(source, qt_TexCoord0.st);
+    float grayColor = (textureColor.r + textureColor.g + textureColor.b) / 3.0;
+    fragColor = mix(textureColor, vec4(vec3(grayColor), textureColor.a), desaturation) * qt_Opacity;
+}
diff --git a/src/effects/shaders/+glslcore/displace.frag b/src/effects/shaders/+glslcore/displace.frag
new file mode 100644
index 0000000..0a1ba7c
--- /dev/null
+++ b/src/effects/shaders/+glslcore/displace.frag
@@ -0,0 +1,29 @@
+#version 150 core
+in vec2 qt_TexCoord0;
+uniform float qt_Opacity;
+uniform sampler2D source;
+uniform sampler2D displacementSource;
+uniform float displacement;
+uniform float xPixel;
+uniform float yPixel;
+out vec4 fragColor;
+
+float linearstep(float e0, float e1, float x) {
+    return clamp((x - e0) / (e1 - e0), 0.0, 1.0);
+}
+
+void main() {
+    vec4 offset = texture(displacementSource, qt_TexCoord0);
+    offset.xy -= vec2(0.5, 0.5);
+    offset.xy = offset.xy * step(vec2(1.0/256.0), abs(offset.xy));
+    vec2 tx = qt_TexCoord0 + (vec2(-offset.x, offset.y) * displacement);
+
+    float e1 = linearstep(0.0, xPixel, tx.x);
+    float e2 = linearstep(0.0, yPixel, tx.y);
+    float e3 = 1.0 - linearstep(1.0, 1.0 + xPixel, tx.x);
+    float e4 = 1.0 - linearstep(1.0, 1.0 + yPixel, tx.y);
+
+    vec4 sample = texture(source, tx);
+    sample.rgb *= e1 * e2 * e3 * e4;
+    fragColor = sample * qt_Opacity * offset.a;
+}
diff --git a/src/effects/shaders/+glslcore/fastblur.frag b/src/effects/shaders/+glslcore/fastblur.frag
new file mode 100644
index 0000000..d80ba4e
--- /dev/null
+++ b/src/effects/shaders/+glslcore/fastblur.frag
@@ -0,0 +1,23 @@
+#version 150 core
+uniform sampler2D source1;
+uniform sampler2D source2;
+uniform sampler2D source3;
+uniform sampler2D source4;
+uniform sampler2D source5;
+uniform float weight1;
+uniform float weight2;
+uniform float weight3;
+uniform float weight4;
+uniform float weight5;
+uniform float qt_Opacity;
+in vec2 qt_TexCoord0;
+out vec4 fragColor;
+
+void main() {
+    vec4 sourceColor = texture(source1, qt_TexCoord0) * weight1;
+    sourceColor += texture(source2, qt_TexCoord0) * weight2;
+    sourceColor += texture(source3, qt_TexCoord0) * weight3;
+    sourceColor += texture(source4, qt_TexCoord0) * weight4;
+    sourceColor += texture(source5, qt_TexCoord0) * weight5;
+    fragColor = sourceColor * qt_Opacity;
+}
diff --git a/src/effects/shaders/+glslcore/fastblur_internal.frag b/src/effects/shaders/+glslcore/fastblur_internal.frag
new file mode 100644
index 0000000..444e8ca
--- /dev/null
+++ b/src/effects/shaders/+glslcore/fastblur_internal.frag
@@ -0,0 +1,16 @@
+#version 150 core
+uniform sampler2D source;
+uniform float qt_Opacity;
+in vec2 qt_TexCoord0;
+in vec2 qt_TexCoord1;
+in vec2 qt_TexCoord2;
+in vec2 qt_TexCoord3;
+out vec4 fragColor;
+
+void main() {
+    vec4 sourceColor = (texture(source, qt_TexCoord0) +
+    texture(source, qt_TexCoord1) +
+    texture(source, qt_TexCoord2) +
+    texture(source, qt_TexCoord3)) * 0.25;
+    fragColor = sourceColor * qt_Opacity;
+}
diff --git a/src/effects/shaders/+glslcore/fastblur_internal.vert b/src/effects/shaders/+glslcore/fastblur_internal.vert
new file mode 100644
index 0000000..1ceb9a2
--- /dev/null
+++ b/src/effects/shaders/+glslcore/fastblur_internal.vert
@@ -0,0 +1,18 @@
+#version 150 core
+in vec4 qt_Vertex;
+in vec2 qt_MultiTexCoord0;
+uniform mat4 qt_Matrix;
+uniform float yStep;
+uniform float xStep;
+out vec2 qt_TexCoord0;
+out vec2 qt_TexCoord1;
+out vec2 qt_TexCoord2;
+out vec2 qt_TexCoord3;
+
+void main() {
+    qt_TexCoord0 = vec2(qt_MultiTexCoord0.x + xStep, qt_MultiTexCoord0.y + yStep * 0.36);
+    qt_TexCoord1 = vec2(qt_MultiTexCoord0.x + xStep * 0.36, qt_MultiTexCoord0.y - yStep);
+    qt_TexCoord2 = vec2(qt_MultiTexCoord0.x - xStep * 0.36, qt_MultiTexCoord0.y + yStep);
+    qt_TexCoord3 = vec2(qt_MultiTexCoord0.x - xStep, qt_MultiTexCoord0.y - yStep * 0.36);
+    gl_Position = qt_Matrix * qt_Vertex;
+}
diff --git a/src/effects/shaders/+glslcore/fastglow.frag b/src/effects/shaders/+glslcore/fastglow.frag
new file mode 100644
index 0000000..4e18c45
--- /dev/null
+++ b/src/effects/shaders/+glslcore/fastglow.frag
@@ -0,0 +1,30 @@
+#version 150 core
+uniform sampler2D source1;
+uniform sampler2D source2;
+uniform sampler2D source3;
+uniform sampler2D source4;
+uniform sampler2D source5;
+uniform float weight1;
+uniform float weight2;
+uniform float weight3;
+uniform float weight4;
+uniform float weight5;
+uniform vec4 color;
+uniform float spread;
+uniform float qt_Opacity;
+in vec2 qt_TexCoord0;
+out vec4 fragColor;
+
+float linearstep(float e0, float e1, float x) {
+    return clamp((x - e0) / (e1 - e0), 0.0, 1.0);
+}
+
+void main() {
+    vec4 sourceColor = texture(source1, qt_TexCoord0) * weight1;
+    sourceColor += texture(source2, qt_TexCoord0) * weight2;
+    sourceColor += texture(source3, qt_TexCoord0) * weight3;
+    sourceColor += texture(source4, qt_TexCoord0) * weight4;
+    sourceColor += texture(source5, qt_TexCoord0) * weight5;
+    sourceColor = mix(vec4(0), color, linearstep(0.0, spread, sourceColor.a));
+    fragColor = sourceColor * qt_Opacity;
+}
diff --git a/src/effects/shaders/+glslcore/fastinnershadow.frag b/src/effects/shaders/+glslcore/fastinnershadow.frag
new file mode 100644
index 0000000..cf3f166
--- /dev/null
+++ b/src/effects/shaders/+glslcore/fastinnershadow.frag
@@ -0,0 +1,32 @@
+#version 150 core
+uniform sampler2D original;
+uniform sampler2D source1;
+uniform sampler2D source2;
+uniform sampler2D source3;
+uniform sampler2D source4;
+uniform sampler2D source5;
+uniform float weight1;
+uniform float weight2;
+uniform float weight3;
+uniform float weight4;
+uniform float weight5;
+uniform vec4 color;
+uniform float spread;
+uniform float qt_Opacity;
+in vec2 qt_TexCoord0;
+out vec4 fragColor;
+
+float linearstep(float e0, float e1, float x) {
+    return clamp((x - e0) / (e1 - e0), 0.0, 1.0);
+}
+
+void main() {
+    vec4 shadowColor = texture(source1, qt_TexCoord0) * weight1;
+    shadowColor += texture(source2, qt_TexCoord0) * weight2;
+    shadowColor += texture(source3, qt_TexCoord0) * weight3;
+    shadowColor += texture(source4, qt_TexCoord0) * weight4;
+    shadowColor += texture(source5, qt_TexCoord0) * weight5;
+    vec4 originalColor = texture(original, qt_TexCoord0);
+    shadowColor.rgb = mix(originalColor.rgb, color.rgb * originalColor.a, linearstep(0.0, spread, shadowColor.a));
+    fragColor = vec4(shadowColor.rgb, originalColor.a) * originalColor.a * qt_Opacity;
+}
diff --git a/src/effects/shaders/+glslcore/fastinnershadow_level0.frag b/src/effects/shaders/+glslcore/fastinnershadow_level0.frag
new file mode 100644
index 0000000..4449bb0
--- /dev/null
+++ b/src/effects/shaders/+glslcore/fastinnershadow_level0.frag
@@ -0,0 +1,15 @@
+#version 150 core
+in vec2 qt_TexCoord0;
+uniform float qt_Opacity;
+uniform sampler2D source;
+uniform vec4 color;
+uniform float horizontalOffset;
+uniform float verticalOffset;
+out vec4 fragColor;
+
+void main(void) {
+    vec2 pos = qt_TexCoord0 - vec2(horizontalOffset, verticalOffset);
+    float ea = step(0.0, pos.x) * step(0.0, pos.y) * step(pos.x, 1.0) * step(pos.y, 1.0);
+    float eb = 1.0 - ea;
+    fragColor = (eb * color + ea * color * (1.0 - texture(source, pos).a)) * qt_Opacity;
+}
diff --git a/src/effects/shaders/+glslcore/fastmaskedblur.frag b/src/effects/shaders/+glslcore/fastmaskedblur.frag
new file mode 100644
index 0000000..ae4d628
--- /dev/null
+++ b/src/effects/shaders/+glslcore/fastmaskedblur.frag
@@ -0,0 +1,53 @@
+#version 150 core
+uniform sampler2D mask;
+uniform sampler2D source1;
+uniform sampler2D source2;
+uniform sampler2D source3;
+uniform sampler2D source4;
+uniform sampler2D source5;
+uniform sampler2D source6;
+uniform float lod;
+uniform float qt_Opacity;
+in vec2 qt_TexCoord0;
+out vec4 fragColor;
+
+float weight(float v) {
+    if (v <= 0.0)
+        return 1.0;
+
+    if (v >= 0.5)
+        return 0.0;
+
+    return 1.0 - v * 2.0;
+}
+
+void main() {
+
+    vec4 maskColor = texture(mask, qt_TexCoord0);
+    float l = lod * maskColor.a;
+
+    float w1 = weight(abs(l - 0.100));
+    float w2 = weight(abs(l - 0.300));
+    float w3 = weight(abs(l - 0.500));
+    float w4 = weight(abs(l - 0.700));
+    float w5 = weight(abs(l - 0.900));
+    float w6 = weight(abs(l - 1.100));
+
+    float sum = w1 + w2 + w3 + w4 + w5 + w6;
+    float weight1 = w1 / sum;
+    float weight2 = w2 / sum;
+    float weight3 = w3 / sum;
+    float weight4 = w4 / sum;
+    float weight5 = w5 / sum;
+    float weight6 = w6 / sum;
+
+    vec4 sourceColor = texture(source1, qt_TexCoord0) * weight1;
+    sourceColor += texture(source2, qt_TexCoord0) * weight2;
+    sourceColor += texture(source3, qt_TexCoord0) * weight3;
+    sourceColor += texture(source4, qt_TexCoord0) * weight4;
+    sourceColor += texture(source5, qt_TexCoord0) * weight5;
+    sourceColor += texture(source6, qt_TexCoord0) * weight6;
+
+    fragColor = sourceColor * qt_Opacity;
+
+}
diff --git a/src/effects/shaders/+glslcore/gammaadjust.frag b/src/effects/shaders/+glslcore/gammaadjust.frag
new file mode 100644
index 0000000..7efdd89
--- /dev/null
+++ b/src/effects/shaders/+glslcore/gammaadjust.frag
@@ -0,0 +1,13 @@
+#version 150 core
+in vec2 qt_TexCoord0;
+uniform float qt_Opacity;
+uniform sampler2D source;
+uniform float gamma;
+out vec4 fragColor;
+
+void main(void) {
+    vec4 originalColor = texture(source, qt_TexCoord0.st);
+    originalColor.rgb = originalColor.rgb / max(1.0/256.0, originalColor.a);
+    vec3 adjustedColor = pow(originalColor.rgb, vec3(gamma));
+    fragColor = vec4(adjustedColor * originalColor.a, originalColor.a) * qt_Opacity;
+}
diff --git a/src/effects/shaders/+glslcore/gaussianinnershadow.frag b/src/effects/shaders/+glslcore/gaussianinnershadow.frag
new file mode 100644
index 0000000..8b8c863
--- /dev/null
+++ b/src/effects/shaders/+glslcore/gaussianinnershadow.frag
@@ -0,0 +1,19 @@
+#version 150 core
+uniform sampler2D original;
+uniform sampler2D shadow;
+uniform float qt_Opacity;
+uniform float spread;
+uniform vec4 color;
+in vec2 qt_TexCoord0;
+out vec4 fragColor;
+
+float linearstep(float e0, float e1, float x) {
+    return clamp((x - e0) / (e1 - e0), 0.0, 1.0);
+}
+
+void main(void) {
+    vec4 originalColor = texture(original, qt_TexCoord0);
+    vec4 shadowColor = texture(shadow, qt_TexCoord0);
+    shadowColor.rgb = mix(originalColor.rgb, color.rgb * originalColor.a, linearstep(0.0, spread, shadowColor.a));
+    fragColor = vec4(shadowColor.rgb, originalColor.a) * originalColor.a * qt_Opacity;
+}
diff --git a/src/effects/shaders/+glslcore/gaussianinnershadow_shadow.frag b/src/effects/shaders/+glslcore/gaussianinnershadow_shadow.frag
new file mode 100644
index 0000000..d511daf
--- /dev/null
+++ b/src/effects/shaders/+glslcore/gaussianinnershadow_shadow.frag
@@ -0,0 +1,15 @@
+#version 150 core
+uniform sampler2D original;
+uniform float qt_Opacity;
+uniform vec4 color;
+uniform float horizontalOffset;
+uniform float verticalOffset;
+in vec2 qt_TexCoord0;
+out vec4 fragColor;
+
+void main(void) {
+    vec2 pos = qt_TexCoord0 - vec2(horizontalOffset, verticalOffset);
+    float ea = step(0.0, pos.x) * step(0.0, pos.y) * step(pos.x, 1.0) * step(pos.y, 1.0);
+    float eb = 1.0 - ea;
+    fragColor = eb * color + ea * color * (1.0 - texture(original, pos).a) * qt_Opacity;
+}
diff --git a/src/effects/shaders/+glslcore/huesaturation.frag b/src/effects/shaders/+glslcore/huesaturation.frag
new file mode 100644
index 0000000..c593dcb
--- /dev/null
+++ b/src/effects/shaders/+glslcore/huesaturation.frag
@@ -0,0 +1,79 @@
+#version 150 core
+in vec2 qt_TexCoord0;
+uniform float qt_Opacity;
+uniform sampler2D source;
+uniform vec3 hsl;
+out vec4 fragColor;
+
+vec3 RGBtoHSL(vec3 color) {
+    float cmin = min(color.r, min(color.g, color.b));
+    float cmax = max(color.r, max(color.g, color.b));
+    float h = 0.0;
+    float s = 0.0;
+    float l = (cmin + cmax) / 2.0;
+    float diff = cmax - cmin;
+
+    if (diff > 1.0 / 256.0) {
+        if (l < 0.5)
+            s = diff / (cmin + cmax);
+        else
+            s = diff / (2.0 - (cmin + cmax));
+
+        if (color.r == cmax)
+            h = (color.g - color.b) / diff;
+        else if (color.g == cmax)
+            h = 2.0 + (color.b - color.r) / diff;
+        else
+            h = 4.0 + (color.r - color.g) / diff;
+
+        h /= 6.0;
+    }
+    return vec3(h, s, l);
+}
+
+float hueToIntensity(float v1, float v2, float h) {
+    h = fract(h);
+    if (h < 1.0 / 6.0)
+        return v1 + (v2 - v1) * 6.0 * h;
+    else if (h < 1.0 / 2.0)
+        return v2;
+    else if (h < 2.0 / 3.0)
+        return v1 + (v2 - v1) * 6.0 * (2.0 / 3.0 - h);
+
+    return v1;
+}
+
+vec3 HSLtoRGB(vec3 color) {
+    float h = color.x;
+    float l = color.z;
+    float s = color.y;
+
+    if (s < 1.0 / 256.0)
+        return vec3(l);
+
+    float v1;
+    float v2;
+    if (l < 0.5)
+        v2 = l * (1.0 + s);
+    else
+        v2 = (l + s) - (s * l);
+
+    v1 = 2.0 * l - v2;
+
+    float d = 1.0 / 3.0;
+    float r = hueToIntensity(v1, v2, h + d);
+    float g = hueToIntensity(v1, v2, h);
+    float b = hueToIntensity(v1, v2, h - d);
+    return vec3(r, g, b);
+}
+
+void main() {
+    vec4 sample = texture(source, qt_TexCoord0);
+    sample = vec4(sample.rgb / max(1.0/256.0, sample.a), sample.a);
+    sample.rgb = mix(vec3(dot(sample.rgb, vec3(0.2125, 0.7154, 0.0721))), sample.rgb, 1.0 + hsl.y);
+    sample.xyz = RGBtoHSL(sample.rgb);
+    sample.rgb = HSLtoRGB(vec3(sample.x + hsl.x, sample.y, sample.z));
+    float c = step(0.0, hsl.z);
+    sample.rgb = mix(sample.rgb, vec3(c), abs(hsl.z));
+    fragColor = vec4(sample.rgb * sample.a, sample.a) * qt_Opacity;
+}
diff --git a/src/effects/shaders/+glslcore/leveladjust.frag b/src/effects/shaders/+glslcore/leveladjust.frag
new file mode 100644
index 0000000..67370ec
--- /dev/null
+++ b/src/effects/shaders/+glslcore/leveladjust.frag
@@ -0,0 +1,37 @@
+#version 150 core
+in vec2 qt_TexCoord0;
+uniform float qt_Opacity;
+uniform sampler2D source;
+uniform vec3 minimumInputRGB;
+uniform vec3 maximumInputRGB;
+uniform float minimumInputAlpha;
+uniform float maximumInputAlpha;
+uniform vec3 minimumOutputRGB;
+uniform vec3 maximumOutputRGB;
+uniform float minimumOutputAlpha;
+uniform float maximumOutputAlpha;
+uniform vec3 gamma;
+out vec4 fragColor;
+
+float linearstep(float e0, float e1, float x) {
+    return clamp((x - e0) / (e1 - e0), 0.0, 1.0);
+}
+
+void main(void) {
+    vec4 textureColor = texture(source, qt_TexCoord0.st);
+    vec4 color = vec4(textureColor.rgb / max(1.0/256.0, textureColor.a), textureColor.a);
+
+    color.r = linearstep(minimumInputRGB.r, maximumInputRGB.r, color.r);
+    color.g = linearstep(minimumInputRGB.g, maximumInputRGB.g, color.g);
+    color.b = linearstep(minimumInputRGB.b, maximumInputRGB.b, color.b);
+    color.a = linearstep(minimumInputAlpha, maximumInputAlpha, color.a);
+
+    color.rgb = pow(color.rgb, gamma);
+
+    color.r = minimumOutputRGB.r + color.r * (maximumOutputRGB.r - minimumOutputRGB.r);
+    color.g = minimumOutputRGB.g + color.g * (maximumOutputRGB.g - minimumOutputRGB.g);
+    color.b = minimumOutputRGB.b + color.b * (maximumOutputRGB.b - minimumOutputRGB.b);
+    color.a = minimumOutputAlpha + color.a * (maximumOutputAlpha - minimumOutputAlpha);
+
+    fragColor = vec4(color.rgb * color.a, color.a) * qt_Opacity;
+}
diff --git a/src/effects/shaders/+glslcore/lineargradient.vert b/src/effects/shaders/+glslcore/lineargradient.vert
new file mode 100644
index 0000000..4764f7e
--- /dev/null
+++ b/src/effects/shaders/+glslcore/lineargradient.vert
@@ -0,0 +1,22 @@
+#version 150 core
+in vec4 qt_Vertex;
+in vec2 qt_MultiTexCoord0;
+uniform mat4 qt_Matrix;
+out vec2 qt_TexCoord0;
+out vec2 qt_TexCoord1;
+uniform vec2 startPoint;
+uniform float l;
+uniform vec2 matrixData;
+
+void main() {
+    mat2 rot = mat2(matrixData.y, -matrixData.x,
+                          matrixData.x,  matrixData.y);
+
+    qt_TexCoord0 = qt_MultiTexCoord0;
+
+    qt_TexCoord1 = qt_MultiTexCoord0 * l;
+    qt_TexCoord1 -= startPoint * l;
+    qt_TexCoord1 *= rot;
+
+    gl_Position = qt_Matrix * qt_Vertex;
+}
diff --git a/src/effects/shaders/+glslcore/lineargradient_mask.frag b/src/effects/shaders/+glslcore/lineargradient_mask.frag
new file mode 100644
index 0000000..351ff33
--- /dev/null
+++ b/src/effects/shaders/+glslcore/lineargradient_mask.frag
@@ -0,0 +1,13 @@
+#version 150 core
+uniform sampler2D source;
+uniform sampler2D maskSource;
+uniform float qt_Opacity;
+in vec2 qt_TexCoord0;
+in vec2 qt_TexCoord1;
+out vec4 fragColor;
+
+void main() {
+    vec4 gradientColor = texture(source, qt_TexCoord1);
+    float maskAlpha = texture(maskSource, qt_TexCoord0).a;
+    fragColor = gradientColor * maskAlpha * qt_Opacity;
+}
diff --git a/src/effects/shaders/+glslcore/lineargradient_nomask.frag b/src/effects/shaders/+glslcore/lineargradient_nomask.frag
new file mode 100644
index 0000000..4ca8ebe
--- /dev/null
+++ b/src/effects/shaders/+glslcore/lineargradient_nomask.frag
@@ -0,0 +1,9 @@
+#version 150 core
+uniform sampler2D source;
+uniform float qt_Opacity;
+in vec2 qt_TexCoord1;
+out vec4 fragColor;
+
+void main() {
+    fragColor = texture(source, qt_TexCoord1) * qt_Opacity;
+}
diff --git a/src/effects/shaders/+glslcore/opacitymask.frag b/src/effects/shaders/+glslcore/opacitymask.frag
new file mode 100644
index 0000000..629f82c
--- /dev/null
+++ b/src/effects/shaders/+glslcore/opacitymask.frag
@@ -0,0 +1,9 @@
+#version 150 core
+in vec2 qt_TexCoord0;
+uniform float qt_Opacity;
+uniform sampler2D source;
+uniform sampler2D maskSource;
+out vec4 fragColor;
+void main(void) {
+    fragColor = texture(source, qt_TexCoord0.st) * (texture(maskSource, qt_TexCoord0.st).a) * qt_Opacity;
+}
diff --git a/src/effects/shaders/+glslcore/opacitymask_invert.frag b/src/effects/shaders/+glslcore/opacitymask_invert.frag
new file mode 100644
index 0000000..c8090a4
--- /dev/null
+++ b/src/effects/shaders/+glslcore/opacitymask_invert.frag
@@ -0,0 +1,9 @@
+#version 150 core
+in vec2 qt_TexCoord0;
+uniform float qt_Opacity;
+uniform sampler2D source;
+uniform sampler2D maskSource;
+out vec4 fragColor;
+void main(void) {
+    fragColor = texture(source, qt_TexCoord0.st) * (1.0 - texture(maskSource, qt_TexCoord0.st).a) * qt_Opacity;
+}
diff --git a/src/effects/shaders/+glslcore/radialgradient.vert b/src/effects/shaders/+glslcore/radialgradient.vert
new file mode 100644
index 0000000..8179122
--- /dev/null
+++ b/src/effects/shaders/+glslcore/radialgradient.vert
@@ -0,0 +1,31 @@
+#version 150 core
+in vec4 qt_Vertex;
+in vec2 qt_MultiTexCoord0;
+uniform mat4 qt_Matrix;
+uniform vec2 matrixData;
+uniform float horizontalRatio;
+uniform float verticalRatio;
+uniform vec2 center;
+out vec2 qt_TexCoord0;
+out vec2 qt_TexCoord1;
+out vec2 centerPoint;
+
+void main() {
+    vec2 ratio = vec2(horizontalRatio, verticalRatio);
+
+    // Rotation matrix
+    mat2 rot = mat2(matrixData.y, -matrixData.x,
+                    matrixData.x,  matrixData.y);
+
+    qt_TexCoord0 = qt_MultiTexCoord0;
+
+    qt_TexCoord1 = qt_MultiTexCoord0;
+    qt_TexCoord1 -= center;
+    qt_TexCoord1 *= rot;
+    qt_TexCoord1 += center;
+    qt_TexCoord1 *= ratio;
+
+    centerPoint = center * ratio;
+
+    gl_Position = qt_Matrix * qt_Vertex;
+}
diff --git a/src/effects/shaders/+glslcore/radialgradient_mask.frag b/src/effects/shaders/+glslcore/radialgradient_mask.frag
new file mode 100644
index 0000000..11a3395
--- /dev/null
+++ b/src/effects/shaders/+glslcore/radialgradient_mask.frag
@@ -0,0 +1,14 @@
+#version 150 core
+uniform sampler2D gradientImage;
+uniform sampler2D maskSource;
+uniform float qt_Opacity;
+in vec2 qt_TexCoord0;
+in vec2 qt_TexCoord1;
+in vec2 centerPoint;
+out vec4 fragColor;
+
+void main() {
+    vec4 gradientColor = texture(gradientImage, vec2(0.0, 2.0 * distance(qt_TexCoord1, centerPoint)));
+    float maskAlpha = texture(maskSource, qt_TexCoord0).a;
+    fragColor = gradientColor * maskAlpha * qt_Opacity;
+}
diff --git a/src/effects/shaders/+glslcore/radialgradient_nomask.frag b/src/effects/shaders/+glslcore/radialgradient_nomask.frag
new file mode 100644
index 0000000..455777b
--- /dev/null
+++ b/src/effects/shaders/+glslcore/radialgradient_nomask.frag
@@ -0,0 +1,11 @@
+#version 150 core
+uniform sampler2D gradientImage;
+uniform float qt_Opacity;
+in vec2 qt_TexCoord1;
+in vec2 centerPoint;
+out vec4 fragColor;
+
+void main() {
+    vec4 gradientColor = texture(gradientImage, vec2(0.0, 2.0 * distance(qt_TexCoord1, centerPoint)));
+    fragColor = gradientColor * qt_Opacity;
+}
diff --git a/src/effects/shaders/+glslcore/rectangularglow.frag b/src/effects/shaders/+glslcore/rectangularglow.frag
new file mode 100644
index 0000000..f749519
--- /dev/null
+++ b/src/effects/shaders/+glslcore/rectangularglow.frag
@@ -0,0 +1,21 @@
+#version 150 core
+uniform float qt_Opacity;
+uniform float relativeSizeX;
+uniform float relativeSizeY;
+uniform float spread;
+uniform vec4 color;
+in vec2 qt_TexCoord0;
+out vec4 fragColor;
+
+float linearstep(float e0, float e1, float x) {
+    return clamp((x - e0) / (e1 - e0), 0.0, 1.0);
+}
+
+void main() {
+    float alpha =
+        smoothstep(0.0, relativeSizeX, 0.5 - abs(0.5 - qt_TexCoord0.x)) *
+        smoothstep(0.0, relativeSizeY, 0.5 - abs(0.5 - qt_TexCoord0.y));
+
+    float spreadMultiplier = linearstep(spread, 1.0 - spread, alpha);
+    fragColor = color * qt_Opacity * spreadMultiplier * spreadMultiplier;
+}
diff --git a/src/effects/shaders/+glslcore/recursiveblur.frag b/src/effects/shaders/+glslcore/recursiveblur.frag
new file mode 100644
index 0000000..ff47b7c
--- /dev/null
+++ b/src/effects/shaders/+glslcore/recursiveblur.frag
@@ -0,0 +1,9 @@
+#version 150 core
+in vec2 qt_TexCoord0;
+uniform float qt_Opacity;
+uniform sampler2D source;
+out vec4 fragColor;
+
+void main() {
+    fragColor = texture(source, qt_TexCoord0) * qt_Opacity;
+}
diff --git a/src/effects/shaders/+glslcore/recursiveblur.vert b/src/effects/shaders/+glslcore/recursiveblur.vert
new file mode 100644
index 0000000..3dc3a0b
--- /dev/null
+++ b/src/effects/shaders/+glslcore/recursiveblur.vert
@@ -0,0 +1,15 @@
+#version 150 core
+in vec4 qt_Vertex;
+in vec2 qt_MultiTexCoord0;
+uniform mat4 qt_Matrix;
+uniform float expandX;
+uniform float expandY;
+out vec2 qt_TexCoord0;
+
+void main() {
+    vec2 texCoord = qt_MultiTexCoord0;
+    texCoord.s = (texCoord.s - expandX) / (1.0 - 2.0 * expandX);
+    texCoord.t = (texCoord.t - expandY) / (1.0 - 2.0 * expandY);
+    qt_TexCoord0 = texCoord;
+    gl_Position = qt_Matrix * qt_Vertex;
+}
diff --git a/src/effects/shaders/+glslcore/thresholdmask.frag b/src/effects/shaders/+glslcore/thresholdmask.frag
new file mode 100644
index 0000000..5b331d8
--- /dev/null
+++ b/src/effects/shaders/+glslcore/thresholdmask.frag
@@ -0,0 +1,14 @@
+#version 150 core
+in vec2 qt_TexCoord0;
+uniform float qt_Opacity;
+uniform sampler2D source;
+uniform sampler2D maskSource;
+uniform float threshold;
+uniform float spread;
+out vec4 fragColor;
+
+void main(void) {
+    vec4 colorFragment = texture(source, qt_TexCoord0.st);
+    vec4 maskFragment = texture(maskSource, qt_TexCoord0.st);
+    fragColor = colorFragment * smoothstep(threshold * (1.0 + spread) - spread, threshold * (1.0 + spread), maskFragment.a) * qt_Opacity;
+}
diff --git a/src/effects/shaders/brightnesscontrast.frag b/src/effects/shaders/brightnesscontrast.frag
new file mode 100644
index 0000000..4a3d435
--- /dev/null
+++ b/src/effects/shaders/brightnesscontrast.frag
@@ -0,0 +1,14 @@
+varying mediump vec2 qt_TexCoord0;
+uniform highp float qt_Opacity;
+uniform lowp sampler2D source;
+uniform highp float brightness;
+uniform highp float contrast;
+void main() {
+    highp vec4 pixelColor = texture2D(source, qt_TexCoord0);
+    pixelColor.rgb /= max(1.0/256.0, pixelColor.a);
+    highp float c = 1.0 + contrast;
+    highp float contrastGainFactor = 1.0 + c * c * c * c * step(0.0, contrast);
+    pixelColor.rgb = ((pixelColor.rgb - 0.5) * (contrastGainFactor * contrast + 1.0)) + 0.5;
+    pixelColor.rgb = mix(pixelColor.rgb, vec3(step(0.0, brightness)), abs(brightness));
+    gl_FragColor = vec4(pixelColor.rgb * pixelColor.a, pixelColor.a) * qt_Opacity;
+}
diff --git a/src/effects/shaders/colorize.frag b/src/effects/shaders/colorize.frag
new file mode 100644
index 0000000..88c3abc
--- /dev/null
+++ b/src/effects/shaders/colorize.frag
@@ -0,0 +1,58 @@
+varying mediump vec2 qt_TexCoord0;
+uniform highp float qt_Opacity;
+uniform lowp sampler2D source;
+uniform highp float hue;
+uniform highp float saturation;
+uniform highp float lightness;
+
+highp float RGBtoL(highp vec3 color) {
+    highp float cmin = min(color.r, min(color.g, color.b));
+    highp float cmax = max(color.r, max(color.g, color.b));
+    highp float l = (cmin + cmax) / 2.0;
+    return l;
+}
+
+highp float hueToIntensity(highp float v1, highp float v2, highp float h) {
+    h = fract(h);
+    if (h < 1.0 / 6.0)
+        return v1 + (v2 - v1) * 6.0 * h;
+    else if (h < 1.0 / 2.0)
+        return v2;
+    else if (h < 2.0 / 3.0)
+        return v1 + (v2 - v1) * 6.0 * (2.0 / 3.0 - h);
+
+    return v1;
+}
+
+highp vec3 HSLtoRGB(highp vec3 color) {
+    highp float h = color.x;
+    highp float l = color.z;
+    highp float s = color.y;
+
+    if (s < 1.0 / 256.0)
+        return vec3(l, l, l);
+
+    highp float v1;
+    highp float v2;
+    if (l < 0.5)
+        v2 = l * (1.0 + s);
+    else
+        v2 = (l + s) - (s * l);
+
+    v1 = 2.0 * l - v2;
+
+    highp float d = 1.0 / 3.0;
+    highp float r = hueToIntensity(v1, v2, h + d);
+    highp float g = hueToIntensity(v1, v2, h);
+    highp float b = hueToIntensity(v1, v2, h - d);
+    return vec3(r, g, b);
+}
+
+void main() {
+    lowp vec4 sample = texture2D(source, qt_TexCoord0);
+    sample = vec4(sample.rgb / max(1.0/256.0, sample.a), sample.a);
+    highp float light = RGBtoL(sample.rgb);
+    highp float c = step(0.0, lightness);
+    sample.rgb = HSLtoRGB(vec3(hue, saturation, mix(light, c, abs(lightness))));
+    gl_FragColor = vec4(sample.rgb * sample.a, sample.a) * qt_Opacity;
+}
diff --git a/src/effects/shaders/coloroverlay.frag b/src/effects/shaders/coloroverlay.frag
new file mode 100644
index 0000000..a68d88c
--- /dev/null
+++ b/src/effects/shaders/coloroverlay.frag
@@ -0,0 +1,8 @@
+varying mediump vec2 qt_TexCoord0;
+uniform highp float qt_Opacity;
+uniform lowp sampler2D source;
+uniform highp vec4 color;
+void main() {
+    highp vec4 pixelColor = texture2D(source, qt_TexCoord0);
+    gl_FragColor = vec4(mix(pixelColor.rgb/max(pixelColor.a, 0.00390625), color.rgb/max(color.a, 0.00390625), color.a) * pixelColor.a, pixelColor.a) * qt_Opacity;
+}
diff --git a/src/effects/shaders/conicalgradient_mask.frag b/src/effects/shaders/conicalgradient_mask.frag
new file mode 100644
index 0000000..db78564
--- /dev/null
+++ b/src/effects/shaders/conicalgradient_mask.frag
@@ -0,0 +1,14 @@
+varying mediump vec2 qt_TexCoord0;
+uniform lowp sampler2D gradientSource;
+uniform lowp sampler2D maskSource;
+uniform highp float qt_Opacity;
+uniform highp float startAngle;
+uniform highp vec2 center;
+
+void main() {
+    lowp float maskAlpha = texture2D(maskSource, qt_TexCoord0).a;
+    const highp float PI = 3.14159265;
+    const highp float PIx2inv = 0.1591549;
+    highp float a = (atan((center.y - qt_TexCoord0.t), (center.x - qt_TexCoord0.s)) + PI - startAngle) * PIx2inv;
+    gl_FragColor = texture2D(gradientSource, vec2(0.0, fract(a))) * maskAlpha * qt_Opacity;
+}
diff --git a/src/effects/shaders/conicalgradient_nomask.frag b/src/effects/shaders/conicalgradient_nomask.frag
new file mode 100644
index 0000000..3f7d785
--- /dev/null
+++ b/src/effects/shaders/conicalgradient_nomask.frag
@@ -0,0 +1,12 @@
+varying mediump vec2 qt_TexCoord0;
+uniform lowp sampler2D gradientSource;
+uniform highp float qt_Opacity;
+uniform highp float startAngle;
+uniform highp vec2 center;
+
+void main() {
+    const highp float PI = 3.14159265;
+    const highp float PIx2inv = 0.1591549;
+    highp float a = (atan((center.y - qt_TexCoord0.t), (center.x - qt_TexCoord0.s)) + PI - startAngle) * PIx2inv;
+    gl_FragColor = texture2D(gradientSource, vec2(0.0, fract(a))) * qt_Opacity;
+}
diff --git a/src/effects/shaders/desaturate.frag b/src/effects/shaders/desaturate.frag
new file mode 100644
index 0000000..c6491ca
--- /dev/null
+++ b/src/effects/shaders/desaturate.frag
@@ -0,0 +1,9 @@
+varying highp vec2 qt_TexCoord0;
+uniform highp float qt_Opacity;
+uniform lowp sampler2D source;
+uniform highp float desaturation;
+void main(void) {
+    lowp vec4 textureColor = texture2D(source, qt_TexCoord0.st);
+    lowp float grayColor = (textureColor.r + textureColor.g + textureColor.b) / 3.0;
+    gl_FragColor = mix(textureColor, vec4(vec3(grayColor), textureColor.a), desaturation) * qt_Opacity;
+}
diff --git a/src/effects/shaders/displace.frag b/src/effects/shaders/displace.frag
new file mode 100644
index 0000000..e6ae990
--- /dev/null
+++ b/src/effects/shaders/displace.frag
@@ -0,0 +1,27 @@
+varying highp vec2 qt_TexCoord0;
+uniform highp float qt_Opacity;
+uniform lowp sampler2D source;
+uniform lowp sampler2D displacementSource;
+uniform highp float displacement;
+uniform highp float xPixel;
+uniform highp float yPixel;
+
+highp float linearstep(highp float e0, highp float e1, highp float x) {
+    return clamp((x - e0) / (e1 - e0), 0.0, 1.0);
+}
+
+void main() {
+    lowp vec4 offset = texture2D(displacementSource, qt_TexCoord0);
+    offset.xy -= vec2(0.5, 0.5);
+    offset.xy = offset.xy * step(vec2(1.0/256.0), abs(offset.xy));
+    highp vec2 tx = qt_TexCoord0 + (vec2(-offset.x, offset.y) * displacement);
+
+    lowp float e1 = linearstep(0.0, xPixel, tx.x);
+    lowp float e2 = linearstep(0.0, yPixel, tx.y);
+    lowp float e3 = 1.0 - linearstep(1.0, 1.0 + xPixel, tx.x);
+    lowp float e4 = 1.0 - linearstep(1.0, 1.0 + yPixel, tx.y);
+
+    lowp vec4 sample = texture2D(source, tx);
+    sample.rgb *= e1 * e2 * e3 * e4;
+    gl_FragColor = sample * qt_Opacity * offset.a;
+}
diff --git a/src/effects/shaders/fastblur.frag b/src/effects/shaders/fastblur.frag
new file mode 100644
index 0000000..261127a
--- /dev/null
+++ b/src/effects/shaders/fastblur.frag
@@ -0,0 +1,21 @@
+uniform lowp sampler2D source1;
+uniform lowp sampler2D source2;
+uniform lowp sampler2D source3;
+uniform lowp sampler2D source4;
+uniform lowp sampler2D source5;
+uniform mediump float weight1;
+uniform mediump float weight2;
+uniform mediump float weight3;
+uniform mediump float weight4;
+uniform mediump float weight5;
+uniform lowp float qt_Opacity;
+varying mediump vec2 qt_TexCoord0;
+
+void main() {
+    lowp vec4 sourceColor = texture2D(source1, qt_TexCoord0) * weight1;
+    sourceColor += texture2D(source2, qt_TexCoord0) * weight2;
+    sourceColor += texture2D(source3, qt_TexCoord0) * weight3;
+    sourceColor += texture2D(source4, qt_TexCoord0) * weight4;
+    sourceColor += texture2D(source5, qt_TexCoord0) * weight5;
+    gl_FragColor = sourceColor * qt_Opacity;
+}
diff --git a/src/effects/shaders/fastblur_internal.frag b/src/effects/shaders/fastblur_internal.frag
new file mode 100644
index 0000000..c284326
--- /dev/null
+++ b/src/effects/shaders/fastblur_internal.frag
@@ -0,0 +1,14 @@
+uniform lowp sampler2D source;
+uniform lowp float qt_Opacity;
+varying highp vec2 qt_TexCoord0;
+varying highp vec2 qt_TexCoord1;
+varying highp vec2 qt_TexCoord2;
+varying highp vec2 qt_TexCoord3;
+
+void main() {
+    highp vec4 sourceColor = (texture2D(source, qt_TexCoord0) +
+    texture2D(source, qt_TexCoord1) +
+    texture2D(source, qt_TexCoord2) +
+    texture2D(source, qt_TexCoord3)) * 0.25;
+    gl_FragColor = sourceColor * qt_Opacity;
+}
diff --git a/src/effects/shaders/fastblur_internal.vert b/src/effects/shaders/fastblur_internal.vert
new file mode 100644
index 0000000..aadfd68
--- /dev/null
+++ b/src/effects/shaders/fastblur_internal.vert
@@ -0,0 +1,17 @@
+attribute highp vec4 qt_Vertex;
+attribute highp vec2 qt_MultiTexCoord0;
+uniform highp mat4 qt_Matrix;
+uniform highp float yStep;
+uniform highp float xStep;
+varying highp vec2 qt_TexCoord0;
+varying highp vec2 qt_TexCoord1;
+varying highp vec2 qt_TexCoord2;
+varying highp vec2 qt_TexCoord3;
+
+void main() {
+    qt_TexCoord0 = vec2(qt_MultiTexCoord0.x + xStep, qt_MultiTexCoord0.y + yStep * 0.36);
+    qt_TexCoord1 = vec2(qt_MultiTexCoord0.x + xStep * 0.36, qt_MultiTexCoord0.y - yStep);
+    qt_TexCoord2 = vec2(qt_MultiTexCoord0.x - xStep * 0.36, qt_MultiTexCoord0.y + yStep);
+    qt_TexCoord3 = vec2(qt_MultiTexCoord0.x - xStep, qt_MultiTexCoord0.y - yStep * 0.36);
+    gl_Position = qt_Matrix * qt_Vertex;
+}
diff --git a/src/effects/shaders/fastglow.frag b/src/effects/shaders/fastglow.frag
new file mode 100644
index 0000000..0eb3ece
--- /dev/null
+++ b/src/effects/shaders/fastglow.frag
@@ -0,0 +1,28 @@
+uniform lowp sampler2D source1;
+uniform lowp sampler2D source2;
+uniform lowp sampler2D source3;
+uniform lowp sampler2D source4;
+uniform lowp sampler2D source5;
+uniform mediump float weight1;
+uniform mediump float weight2;
+uniform mediump float weight3;
+uniform mediump float weight4;
+uniform mediump float weight5;
+uniform highp vec4 color;
+uniform highp float spread;
+uniform lowp float qt_Opacity;
+varying mediump vec2 qt_TexCoord0;
+
+highp float linearstep(highp float e0, highp float e1, highp float x) {
+    return clamp((x - e0) / (e1 - e0), 0.0, 1.0);
+}
+
+void main() {
+    lowp vec4 sourceColor = texture2D(source1, qt_TexCoord0) * weight1;
+    sourceColor += texture2D(source2, qt_TexCoord0) * weight2;
+    sourceColor += texture2D(source3, qt_TexCoord0) * weight3;
+    sourceColor += texture2D(source4, qt_TexCoord0) * weight4;
+    sourceColor += texture2D(source5, qt_TexCoord0) * weight5;
+    sourceColor = mix(vec4(0), color, linearstep(0.0, spread, sourceColor.a));
+    gl_FragColor = sourceColor * qt_Opacity;
+}
diff --git a/src/effects/shaders/fastinnershadow.frag b/src/effects/shaders/fastinnershadow.frag
new file mode 100644
index 0000000..323197e
--- /dev/null
+++ b/src/effects/shaders/fastinnershadow.frag
@@ -0,0 +1,30 @@
+uniform lowp sampler2D original;
+uniform lowp sampler2D source1;
+uniform lowp sampler2D source2;
+uniform lowp sampler2D source3;
+uniform lowp sampler2D source4;
+uniform lowp sampler2D source5;
+uniform mediump float weight1;
+uniform mediump float weight2;
+uniform mediump float weight3;
+uniform mediump float weight4;
+uniform mediump float weight5;
+uniform highp vec4 color;
+uniform highp float spread;
+uniform lowp float qt_Opacity;
+varying mediump vec2 qt_TexCoord0;
+
+highp float linearstep(highp float e0, highp float e1, highp float x) {
+    return clamp((x - e0) / (e1 - e0), 0.0, 1.0);
+}
+
+void main() {
+    lowp vec4 shadowColor = texture2D(source1, qt_TexCoord0) * weight1;
+    shadowColor += texture2D(source2, qt_TexCoord0) * weight2;
+    shadowColor += texture2D(source3, qt_TexCoord0) * weight3;
+    shadowColor += texture2D(source4, qt_TexCoord0) * weight4;
+    shadowColor += texture2D(source5, qt_TexCoord0) * weight5;
+    lowp vec4 originalColor = texture2D(original, qt_TexCoord0);
+    shadowColor.rgb = mix(originalColor.rgb, color.rgb * originalColor.a, linearstep(0.0, spread, shadowColor.a));
+    gl_FragColor = vec4(shadowColor.rgb, originalColor.a) * originalColor.a * qt_Opacity;
+}
diff --git a/src/effects/shaders/fastinnershadow_level0.frag b/src/effects/shaders/fastinnershadow_level0.frag
new file mode 100644
index 0000000..30a31ce
--- /dev/null
+++ b/src/effects/shaders/fastinnershadow_level0.frag
@@ -0,0 +1,13 @@
+varying highp vec2 qt_TexCoord0;
+uniform lowp float qt_Opacity;
+uniform highp sampler2D source;
+uniform lowp vec4 color;
+uniform highp float horizontalOffset;
+uniform highp float verticalOffset;
+
+void main(void) {
+    highp vec2 pos = qt_TexCoord0 - vec2(horizontalOffset, verticalOffset);
+    lowp float ea = step(0.0, pos.x) * step(0.0, pos.y) * step(pos.x, 1.0) * step(pos.y, 1.0);
+    lowp float eb = 1.0 - ea;
+    gl_FragColor = (eb * color + ea * color * (1.0 - texture2D(source, pos).a)) * qt_Opacity;
+}
diff --git a/src/effects/shaders/fastmaskedblur.frag b/src/effects/shaders/fastmaskedblur.frag
new file mode 100644
index 0000000..9613012
--- /dev/null
+++ b/src/effects/shaders/fastmaskedblur.frag
@@ -0,0 +1,51 @@
+uniform lowp sampler2D mask;
+uniform lowp sampler2D source1;
+uniform lowp sampler2D source2;
+uniform lowp sampler2D source3;
+uniform lowp sampler2D source4;
+uniform lowp sampler2D source5;
+uniform lowp sampler2D source6;
+uniform lowp float lod;
+uniform lowp float qt_Opacity;
+varying mediump vec2 qt_TexCoord0;
+
+mediump float weight(mediump float v) {
+    if (v <= 0.0)
+        return 1.0;
+
+    if (v >= 0.5)
+        return 0.0;
+
+    return 1.0 - v * 2.0;
+}
+
+void main() {
+
+    lowp vec4 maskColor = texture2D(mask, qt_TexCoord0);
+    mediump float l = lod * maskColor.a;
+
+    mediump float w1 = weight(abs(l - 0.100));
+    mediump float w2 = weight(abs(l - 0.300));
+    mediump float w3 = weight(abs(l - 0.500));
+    mediump float w4 = weight(abs(l - 0.700));
+    mediump float w5 = weight(abs(l - 0.900));
+    mediump float w6 = weight(abs(l - 1.100));
+
+    mediump float sum = w1 + w2 + w3 + w4 + w5 + w6;
+    mediump float weight1 = w1 / sum;
+    mediump float weight2 = w2 / sum;
+    mediump float weight3 = w3 / sum;
+    mediump float weight4 = w4 / sum;
+    mediump float weight5 = w5 / sum;
+    mediump float weight6 = w6 / sum;
+
+    lowp vec4 sourceColor = texture2D(source1, qt_TexCoord0) * weight1;
+    sourceColor += texture2D(source2, qt_TexCoord0) * weight2;
+    sourceColor += texture2D(source3, qt_TexCoord0) * weight3;
+    sourceColor += texture2D(source4, qt_TexCoord0) * weight4;
+    sourceColor += texture2D(source5, qt_TexCoord0) * weight5;
+    sourceColor += texture2D(source6, qt_TexCoord0) * weight6;
+
+    gl_FragColor = sourceColor * qt_Opacity;
+
+}
diff --git a/src/effects/shaders/gammaadjust.frag b/src/effects/shaders/gammaadjust.frag
new file mode 100644
index 0000000..f87492a
--- /dev/null
+++ b/src/effects/shaders/gammaadjust.frag
@@ -0,0 +1,10 @@
+varying highp vec2 qt_TexCoord0;
+uniform highp float qt_Opacity;
+uniform lowp sampler2D source;
+uniform highp float gamma;
+void main(void) {
+    highp vec4 originalColor = texture2D(source, qt_TexCoord0.st);
+    originalColor.rgb = originalColor.rgb / max(1.0/256.0, originalColor.a);
+    highp vec3 adjustedColor = pow(originalColor.rgb, vec3(gamma));
+    gl_FragColor = vec4(adjustedColor * originalColor.a, originalColor.a) * qt_Opacity;
+}
diff --git a/src/effects/shaders/gaussianinnershadow.frag b/src/effects/shaders/gaussianinnershadow.frag
new file mode 100644
index 0000000..c9f57a6
--- /dev/null
+++ b/src/effects/shaders/gaussianinnershadow.frag
@@ -0,0 +1,17 @@
+uniform highp sampler2D original;
+uniform highp sampler2D shadow;
+uniform lowp float qt_Opacity;
+uniform highp float spread;
+uniform lowp vec4 color;
+varying highp vec2 qt_TexCoord0;
+
+highp float linearstep(highp float e0, highp float e1, highp float x) {
+    return clamp((x - e0) / (e1 - e0), 0.0, 1.0);
+}
+
+void main(void) {
+    lowp vec4 originalColor = texture2D(original, qt_TexCoord0);
+    lowp vec4 shadowColor = texture2D(shadow, qt_TexCoord0);
+    shadowColor.rgb = mix(originalColor.rgb, color.rgb * originalColor.a, linearstep(0.0, spread, shadowColor.a));
+    gl_FragColor = vec4(shadowColor.rgb, originalColor.a) * originalColor.a * qt_Opacity;
+}
diff --git a/src/effects/shaders/gaussianinnershadow_shadow.frag b/src/effects/shaders/gaussianinnershadow_shadow.frag
new file mode 100644
index 0000000..fc95dd6
--- /dev/null
+++ b/src/effects/shaders/gaussianinnershadow_shadow.frag
@@ -0,0 +1,13 @@
+uniform highp sampler2D original;
+uniform lowp float qt_Opacity;
+uniform lowp vec4 color;
+uniform highp float horizontalOffset;
+uniform highp float verticalOffset;
+varying highp vec2 qt_TexCoord0;
+
+void main(void) {
+    highp vec2 pos = qt_TexCoord0 - vec2(horizontalOffset, verticalOffset);
+    lowp float ea = step(0.0, pos.x) * step(0.0, pos.y) * step(pos.x, 1.0) * step(pos.y, 1.0);
+    lowp float eb = 1.0 - ea;
+    gl_FragColor = eb * color + ea * color * (1.0 - texture2D(original, pos).a) * qt_Opacity;
+}
diff --git a/src/effects/shaders/huesaturation.frag b/src/effects/shaders/huesaturation.frag
new file mode 100644
index 0000000..c6073be
--- /dev/null
+++ b/src/effects/shaders/huesaturation.frag
@@ -0,0 +1,77 @@
+varying highp vec2 qt_TexCoord0;
+uniform highp float qt_Opacity;
+uniform highp sampler2D source;
+uniform highp vec3 hsl;
+
+highp vec3 RGBtoHSL(highp vec3 color) {
+    highp float cmin = min(color.r, min(color.g, color.b));
+    highp float cmax = max(color.r, max(color.g, color.b));
+    highp float h = 0.0;
+    highp float s = 0.0;
+    highp float l = (cmin + cmax) / 2.0;
+    highp float diff = cmax - cmin;
+
+    if (diff > 1.0 / 256.0) {
+        if (l < 0.5)
+            s = diff / (cmin + cmax);
+        else
+            s = diff / (2.0 - (cmin + cmax));
+
+        if (color.r == cmax)
+            h = (color.g - color.b) / diff;
+        else if (color.g == cmax)
+            h = 2.0 + (color.b - color.r) / diff;
+        else
+            h = 4.0 + (color.r - color.g) / diff;
+
+        h /= 6.0;
+    }
+    return vec3(h, s, l);
+}
+
+highp float hueToIntensity(highp float v1, highp float v2, highp float h) {
+    h = fract(h);
+    if (h < 1.0 / 6.0)
+        return v1 + (v2 - v1) * 6.0 * h;
+    else if (h < 1.0 / 2.0)
+        return v2;
+    else if (h < 2.0 / 3.0)
+        return v1 + (v2 - v1) * 6.0 * (2.0 / 3.0 - h);
+
+    return v1;
+}
+
+highp vec3 HSLtoRGB(highp vec3 color) {
+    highp float h = color.x;
+    highp float l = color.z;
+    highp float s = color.y;
+
+    if (s < 1.0 / 256.0)
+        return vec3(l);
+
+    highp float v1;
+    highp float v2;
+    if (l < 0.5)
+        v2 = l * (1.0 + s);
+    else
+        v2 = (l + s) - (s * l);
+
+    v1 = 2.0 * l - v2;
+
+    highp float d = 1.0 / 3.0;
+    highp float r = hueToIntensity(v1, v2, h + d);
+    highp float g = hueToIntensity(v1, v2, h);
+    highp float b = hueToIntensity(v1, v2, h - d);
+    return vec3(r, g, b);
+}
+
+void main() {
+    lowp vec4 sample = texture2D(source, qt_TexCoord0);
+    sample = vec4(sample.rgb / max(1.0/256.0, sample.a), sample.a);
+    sample.rgb = mix(vec3(dot(sample.rgb, vec3(0.2125, 0.7154, 0.0721))), sample.rgb, 1.0 + hsl.y);
+    sample.xyz = RGBtoHSL(sample.rgb);
+    sample.rgb = HSLtoRGB(vec3(sample.x + hsl.x, sample.y, sample.z));
+    highp float c = step(0.0, hsl.z);
+    sample.rgb = mix(sample.rgb, vec3(c), abs(hsl.z));
+    gl_FragColor = vec4(sample.rgb * sample.a, sample.a) * qt_Opacity;
+}
diff --git a/src/effects/shaders/leveladjust.frag b/src/effects/shaders/leveladjust.frag
new file mode 100644
index 0000000..9462a0c
--- /dev/null
+++ b/src/effects/shaders/leveladjust.frag
@@ -0,0 +1,35 @@
+varying highp vec2 qt_TexCoord0;
+uniform highp float qt_Opacity;
+uniform lowp sampler2D source;
+uniform highp vec3 minimumInputRGB;
+uniform highp vec3 maximumInputRGB;
+uniform highp float minimumInputAlpha;
+uniform highp float maximumInputAlpha;
+uniform highp vec3 minimumOutputRGB;
+uniform highp vec3 maximumOutputRGB;
+uniform highp float minimumOutputAlpha;
+uniform highp float maximumOutputAlpha;
+uniform highp vec3 gamma;
+
+highp float linearstep(highp float e0, highp float e1, highp float x) {
+    return clamp((x - e0) / (e1 - e0), 0.0, 1.0);
+}
+
+void main(void) {
+    highp vec4 textureColor = texture2D(source, qt_TexCoord0.st);
+    highp vec4 color = vec4(textureColor.rgb / max(1.0/256.0, textureColor.a), textureColor.a);
+
+    color.r = linearstep(minimumInputRGB.r, maximumInputRGB.r, color.r);
+    color.g = linearstep(minimumInputRGB.g, maximumInputRGB.g, color.g);
+    color.b = linearstep(minimumInputRGB.b, maximumInputRGB.b, color.b);
+    color.a = linearstep(minimumInputAlpha, maximumInputAlpha, color.a);
+
+    color.rgb = pow(color.rgb, gamma);
+
+    color.r = minimumOutputRGB.r + color.r * (maximumOutputRGB.r - minimumOutputRGB.r);
+    color.g = minimumOutputRGB.g + color.g * (maximumOutputRGB.g - minimumOutputRGB.g);
+    color.b = minimumOutputRGB.b + color.b * (maximumOutputRGB.b - minimumOutputRGB.b);
+    color.a = minimumOutputAlpha + color.a * (maximumOutputAlpha - minimumOutputAlpha);
+
+    gl_FragColor = vec4(color.rgb * color.a, color.a) * qt_Opacity;
+}
diff --git a/src/effects/shaders/lineargradient.vert b/src/effects/shaders/lineargradient.vert
new file mode 100644
index 0000000..e01854c
--- /dev/null
+++ b/src/effects/shaders/lineargradient.vert
@@ -0,0 +1,21 @@
+attribute highp vec4 qt_Vertex;
+attribute highp vec2 qt_MultiTexCoord0;
+uniform highp mat4 qt_Matrix;
+varying highp vec2 qt_TexCoord0;
+varying highp vec2 qt_TexCoord1;
+uniform highp vec2 startPoint;
+uniform highp float l;
+uniform highp vec2 matrixData;
+
+void main() {
+    highp mat2 rot = mat2(matrixData.y, -matrixData.x,
+                          matrixData.x,  matrixData.y);
+
+    qt_TexCoord0 = qt_MultiTexCoord0;
+
+    qt_TexCoord1 = qt_MultiTexCoord0 * l;
+    qt_TexCoord1 -= startPoint * l;
+    qt_TexCoord1 *= rot;
+
+    gl_Position = qt_Matrix * qt_Vertex;
+}
diff --git a/src/effects/shaders/lineargradient_mask.frag b/src/effects/shaders/lineargradient_mask.frag
new file mode 100644
index 0000000..0fed39f
--- /dev/null
+++ b/src/effects/shaders/lineargradient_mask.frag
@@ -0,0 +1,11 @@
+uniform lowp sampler2D source;
+uniform lowp sampler2D maskSource;
+uniform lowp float qt_Opacity;
+varying highp vec2 qt_TexCoord0;
+varying highp vec2 qt_TexCoord1;
+
+void main() {
+    lowp vec4 gradientColor = texture2D(source, qt_TexCoord1);
+    lowp float maskAlpha = texture2D(maskSource, qt_TexCoord0).a;
+    gl_FragColor = gradientColor * maskAlpha * qt_Opacity;
+}
diff --git a/src/effects/shaders/lineargradient_nomask.frag b/src/effects/shaders/lineargradient_nomask.frag
new file mode 100644
index 0000000..ada02db
--- /dev/null
+++ b/src/effects/shaders/lineargradient_nomask.frag
@@ -0,0 +1,7 @@
+uniform lowp sampler2D source;
+uniform lowp float qt_Opacity;
+varying highp vec2 qt_TexCoord1;
+
+void main() {
+    gl_FragColor = texture2D(source, qt_TexCoord1) * qt_Opacity;
+}
diff --git a/src/effects/shaders/opacitymask.frag b/src/effects/shaders/opacitymask.frag
new file mode 100644
index 0000000..84f9bc3
--- /dev/null
+++ b/src/effects/shaders/opacitymask.frag
@@ -0,0 +1,7 @@
+varying highp vec2 qt_TexCoord0;
+uniform highp float qt_Opacity;
+uniform lowp sampler2D source;
+uniform lowp sampler2D maskSource;
+void main(void) {
+    gl_FragColor = texture2D(source, qt_TexCoord0.st) * (texture2D(maskSource, qt_TexCoord0.st).a) * qt_Opacity;
+}
diff --git a/src/effects/shaders/opacitymask_invert.frag b/src/effects/shaders/opacitymask_invert.frag
new file mode 100644
index 0000000..e48c78e
--- /dev/null
+++ b/src/effects/shaders/opacitymask_invert.frag
@@ -0,0 +1,7 @@
+varying highp vec2 qt_TexCoord0;
+uniform highp float qt_Opacity;
+uniform lowp sampler2D source;
+uniform lowp sampler2D maskSource;
+void main(void) {
+    gl_FragColor = texture2D(source, qt_TexCoord0.st) * (1.0 - texture2D(maskSource, qt_TexCoord0.st).a) * qt_Opacity;
+}
diff --git a/src/effects/shaders/radialgradient.vert b/src/effects/shaders/radialgradient.vert
new file mode 100644
index 0000000..ce69586
--- /dev/null
+++ b/src/effects/shaders/radialgradient.vert
@@ -0,0 +1,30 @@
+attribute highp vec4 qt_Vertex;
+attribute highp vec2 qt_MultiTexCoord0;
+uniform highp mat4 qt_Matrix;
+uniform highp vec2 matrixData;
+uniform highp float horizontalRatio;
+uniform highp float verticalRatio;
+uniform highp vec2 center;
+varying highp vec2 qt_TexCoord0;
+varying highp vec2 qt_TexCoord1;
+varying highp vec2 centerPoint;
+
+void main() {
+    highp vec2 ratio = vec2(horizontalRatio, verticalRatio);
+
+    // Rotation matrix
+    highp mat2 rot = mat2(matrixData.y, -matrixData.x,
+                          matrixData.x,  matrixData.y);
+
+    qt_TexCoord0 = qt_MultiTexCoord0;
+
+    qt_TexCoord1 = qt_MultiTexCoord0;
+    qt_TexCoord1 -= center;
+    qt_TexCoord1 *= rot;
+    qt_TexCoord1 += center;
+    qt_TexCoord1 *= ratio;
+
+    centerPoint = center * ratio;
+
+    gl_Position = qt_Matrix * qt_Vertex;
+}
diff --git a/src/effects/shaders/radialgradient_mask.frag b/src/effects/shaders/radialgradient_mask.frag
new file mode 100644
index 0000000..5911753
--- /dev/null
+++ b/src/effects/shaders/radialgradient_mask.frag
@@ -0,0 +1,12 @@
+uniform lowp sampler2D gradientImage;
+uniform lowp sampler2D maskSource;
+uniform lowp float qt_Opacity;
+varying highp vec2 qt_TexCoord0;
+varying highp vec2 qt_TexCoord1;
+varying highp vec2 centerPoint;
+
+void main() {
+    lowp vec4 gradientColor = texture2D(gradientImage, vec2(0.0, 2.0 * distance(qt_TexCoord1, centerPoint)));
+    lowp float maskAlpha = texture2D(maskSource, qt_TexCoord0).a;
+    gl_FragColor = gradientColor * maskAlpha * qt_Opacity;
+}
diff --git a/src/effects/shaders/radialgradient_nomask.frag b/src/effects/shaders/radialgradient_nomask.frag
new file mode 100644
index 0000000..cf92236
--- /dev/null
+++ b/src/effects/shaders/radialgradient_nomask.frag
@@ -0,0 +1,10 @@
+
+uniform lowp sampler2D gradientImage;
+uniform lowp float qt_Opacity;
+varying highp vec2 qt_TexCoord1;
+varying highp vec2 centerPoint;
+
+void main() {
+    lowp vec4 gradientColor = texture2D(gradientImage, vec2(0.0, 2.0 * distance(qt_TexCoord1, centerPoint)));
+    gl_FragColor = gradientColor * qt_Opacity;
+}
diff --git a/src/effects/shaders/rectangularglow.frag b/src/effects/shaders/rectangularglow.frag
new file mode 100644
index 0000000..40bab58
--- /dev/null
+++ b/src/effects/shaders/rectangularglow.frag
@@ -0,0 +1,19 @@
+uniform highp float qt_Opacity;
+uniform mediump float relativeSizeX;
+uniform mediump float relativeSizeY;
+uniform mediump float spread;
+uniform lowp vec4 color;
+varying highp vec2 qt_TexCoord0;
+
+highp float linearstep(highp float e0, highp float e1, highp float x) {
+    return clamp((x - e0) / (e1 - e0), 0.0, 1.0);
+}
+
+void main() {
+    lowp float alpha =
+        smoothstep(0.0, relativeSizeX, 0.5 - abs(0.5 - qt_TexCoord0.x)) *
+        smoothstep(0.0, relativeSizeY, 0.5 - abs(0.5 - qt_TexCoord0.y));
+
+    highp float spreadMultiplier = linearstep(spread, 1.0 - spread, alpha);
+    gl_FragColor = color * qt_Opacity * spreadMultiplier * spreadMultiplier;
+}
diff --git a/src/effects/shaders/recursiveblur.frag b/src/effects/shaders/recursiveblur.frag
new file mode 100644
index 0000000..5562929
--- /dev/null
+++ b/src/effects/shaders/recursiveblur.frag
@@ -0,0 +1,6 @@
+varying mediump vec2 qt_TexCoord0;
+uniform highp float qt_Opacity;
+uniform lowp sampler2D source;
+void main() {
+    gl_FragColor = texture2D(source, qt_TexCoord0) * qt_Opacity;
+}
diff --git a/src/effects/shaders/recursiveblur.vert b/src/effects/shaders/recursiveblur.vert
new file mode 100644
index 0000000..67f64e1
--- /dev/null
+++ b/src/effects/shaders/recursiveblur.vert
@@ -0,0 +1,14 @@
+attribute highp vec4 qt_Vertex;
+attribute highp vec2 qt_MultiTexCoord0;
+uniform highp mat4 qt_Matrix;
+uniform highp float expandX;
+uniform highp float expandY;
+varying highp vec2 qt_TexCoord0;
+
+void main() {
+    mediump vec2 texCoord = qt_MultiTexCoord0;
+    texCoord.s = (texCoord.s - expandX) / (1.0 - 2.0 * expandX);
+    texCoord.t = (texCoord.t - expandY) / (1.0 - 2.0 * expandY);
+    qt_TexCoord0 = texCoord;
+    gl_Position = qt_Matrix * qt_Vertex;
+}
diff --git a/src/effects/shaders/thresholdmask.frag b/src/effects/shaders/thresholdmask.frag
new file mode 100644
index 0000000..b979589
--- /dev/null
+++ b/src/effects/shaders/thresholdmask.frag
@@ -0,0 +1,11 @@
+varying highp vec2 qt_TexCoord0;
+uniform highp float qt_Opacity;
+uniform lowp sampler2D source;
+uniform lowp sampler2D maskSource;
+uniform highp float threshold;
+uniform highp float spread;
+void main(void) {
+    lowp vec4 colorFragment = texture2D(source, qt_TexCoord0.st);
+    lowp vec4 maskFragment = texture2D(maskSource, qt_TexCoord0.st);
+    gl_FragColor = colorFragment * smoothstep(threshold * (1.0 + spread) - spread, threshold * (1.0 + spread), maskFragment.a) * qt_Opacity;
+}
diff --git a/tests/manual/testbed/TestBlend.qml b/tests/manual/testbed/TestBlend.qml
index e164e1c..86e2bf4 100644
--- a/tests/manual/testbed/TestBlend.qml
+++ b/tests/manual/testbed/TestBlend.qml
@@ -27,7 +27,7 @@
 ****************************************************************************/
 
 import QtQuick 2.0
-import "../../../src/effects"
+import QtGraphicalEffects 1.0
 
 TestCaseTemplate {
     ImageSource {
diff --git a/tests/manual/testbed/TestBrightnessContrast.qml b/tests/manual/testbed/TestBrightnessContrast.qml
index 6304b11..387fc7c 100644
--- a/tests/manual/testbed/TestBrightnessContrast.qml
+++ b/tests/manual/testbed/TestBrightnessContrast.qml
@@ -27,7 +27,7 @@
 ****************************************************************************/
 
 import QtQuick 2.0
-import "../../../src/effects"
+import QtGraphicalEffects 1.0
 
 TestCaseTemplate {
     ImageSource {
diff --git a/tests/manual/testbed/TestColorOverlay.qml b/tests/manual/testbed/TestColorOverlay.qml
index 3e2eb43..6200b1e 100644
--- a/tests/manual/testbed/TestColorOverlay.qml
+++ b/tests/manual/testbed/TestColorOverlay.qml
@@ -27,7 +27,7 @@
 ****************************************************************************/
 
 import QtQuick 2.0
-import "../../../src/effects"
+import QtGraphicalEffects 1.0
 
 TestCaseTemplate {
     ImageSource {
diff --git a/tests/manual/testbed/TestColorize.qml b/tests/manual/testbed/TestColorize.qml
index 5c2ed37..79d99c6 100644
--- a/tests/manual/testbed/TestColorize.qml
+++ b/tests/manual/testbed/TestColorize.qml
@@ -27,7 +27,7 @@
 ****************************************************************************/
 
 import QtQuick 2.0
-import "../../../src/effects"
+import QtGraphicalEffects 1.0
 
 TestCaseTemplate {
     ImageSource {
diff --git a/tests/manual/testbed/TestConicalGradient.qml b/tests/manual/testbed/TestConicalGradient.qml
index 302ad89..7c53bd1 100644
--- a/tests/manual/testbed/TestConicalGradient.qml
+++ b/tests/manual/testbed/TestConicalGradient.qml
@@ -27,7 +27,7 @@
 ****************************************************************************/
 
 import QtQuick 2.0
-import "../../../src/effects"
+import QtGraphicalEffects 1.0
 
 TestCaseTemplate {
     ImageSource {
diff --git a/tests/manual/testbed/TestDesaturate.qml b/tests/manual/testbed/TestDesaturate.qml
index 0ff6387..ea900b9 100644
--- a/tests/manual/testbed/TestDesaturate.qml
+++ b/tests/manual/testbed/TestDesaturate.qml
@@ -27,7 +27,7 @@
 ****************************************************************************/
 
 import QtQuick 2.0
-import "../../../src/effects"
+import QtGraphicalEffects 1.0
 
 TestCaseTemplate {
     ImageSource {
diff --git a/tests/manual/testbed/TestDirectionalBlur.qml b/tests/manual/testbed/TestDirectionalBlur.qml
index ce125bf..3b3ba89 100644
--- a/tests/manual/testbed/TestDirectionalBlur.qml
+++ b/tests/manual/testbed/TestDirectionalBlur.qml
@@ -27,7 +27,7 @@
 ****************************************************************************/
 
 import QtQuick 2.0
-import "../../../src/effects"
+import QtGraphicalEffects 1.0
 
 TestCaseTemplate {
     ImageSource {
diff --git a/tests/manual/testbed/TestDisplace.qml b/tests/manual/testbed/TestDisplace.qml
index e7d5e0f..76bff5b 100644
--- a/tests/manual/testbed/TestDisplace.qml
+++ b/tests/manual/testbed/TestDisplace.qml
@@ -27,7 +27,7 @@
 ****************************************************************************/
 
 import QtQuick 2.0
-import "../../../src/effects"
+import QtGraphicalEffects 1.0
 
 TestCaseTemplate {
 
diff --git a/tests/manual/testbed/TestDropShadow.qml b/tests/manual/testbed/TestDropShadow.qml
index 5a0074a..a74ad4b 100644
--- a/tests/manual/testbed/TestDropShadow.qml
+++ b/tests/manual/testbed/TestDropShadow.qml
@@ -27,7 +27,7 @@
 ****************************************************************************/
 
 import QtQuick 2.0
-import "../../../src/effects"
+import QtGraphicalEffects 1.0
 
 TestCaseTemplate {
 
diff --git a/tests/manual/testbed/TestFastBlur.qml b/tests/manual/testbed/TestFastBlur.qml
index a0479fd..459d196 100644
--- a/tests/manual/testbed/TestFastBlur.qml
+++ b/tests/manual/testbed/TestFastBlur.qml
@@ -27,7 +27,7 @@
 ****************************************************************************/
 
 import QtQuick 2.0
-import "../../../src/effects"
+import QtGraphicalEffects 1.0
 
 TestCaseTemplate {
     ImageSource {
diff --git a/tests/manual/testbed/TestGammaAdjust.qml b/tests/manual/testbed/TestGammaAdjust.qml
index ee2a441..400b3fb 100644
--- a/tests/manual/testbed/TestGammaAdjust.qml
+++ b/tests/manual/testbed/TestGammaAdjust.qml
@@ -27,7 +27,7 @@
 ****************************************************************************/
 
 import QtQuick 2.0
-import "../../../src/effects"
+import QtGraphicalEffects 1.0
 
 TestCaseTemplate {
     ImageSource {
diff --git a/tests/manual/testbed/TestGaussianBlur.qml b/tests/manual/testbed/TestGaussianBlur.qml
index 8480a2b..196933d 100644
--- a/tests/manual/testbed/TestGaussianBlur.qml
+++ b/tests/manual/testbed/TestGaussianBlur.qml
@@ -27,7 +27,7 @@
 ****************************************************************************/
 
 import QtQuick 2.0
-import "../../../src/effects"
+import QtGraphicalEffects 1.0
 
 TestCaseTemplate {
     ImageSource {
diff --git a/tests/manual/testbed/TestGlow.qml b/tests/manual/testbed/TestGlow.qml
index dfbadf1..b82c4ef 100644
--- a/tests/manual/testbed/TestGlow.qml
+++ b/tests/manual/testbed/TestGlow.qml
@@ -27,7 +27,7 @@
 ****************************************************************************/
 
 import QtQuick 2.0
-import "../../../src/effects"
+import QtGraphicalEffects 1.0
 
 TestCaseTemplate {
 
diff --git a/tests/manual/testbed/TestHueSaturation.qml b/tests/manual/testbed/TestHueSaturation.qml
index 9101d5a..3b1b954 100644
--- a/tests/manual/testbed/TestHueSaturation.qml
+++ b/tests/manual/testbed/TestHueSaturation.qml
@@ -27,7 +27,7 @@
 ****************************************************************************/
 
 import QtQuick 2.0
-import "../../../src/effects"
+import QtGraphicalEffects 1.0
 
 TestCaseTemplate {
     ImageSource {
diff --git a/tests/manual/testbed/TestInnerShadow.qml b/tests/manual/testbed/TestInnerShadow.qml
index 9f2a01e..38426ad 100644
--- a/tests/manual/testbed/TestInnerShadow.qml
+++ b/tests/manual/testbed/TestInnerShadow.qml
@@ -27,7 +27,7 @@
 ****************************************************************************/
 
 import QtQuick 2.0
-import "../../../src/effects"
+import QtGraphicalEffects 1.0
 
 TestCaseTemplate {
 
diff --git a/tests/manual/testbed/TestLevelAdjust.qml b/tests/manual/testbed/TestLevelAdjust.qml
index cddc425..713a044 100644
--- a/tests/manual/testbed/TestLevelAdjust.qml
+++ b/tests/manual/testbed/TestLevelAdjust.qml
@@ -27,7 +27,7 @@
 ****************************************************************************/
 
 import QtQuick 2.0
-import "../../../src/effects"
+import QtGraphicalEffects 1.0
 
 TestCaseTemplate {
     ImageSource {
diff --git a/tests/manual/testbed/TestLinearGradient.qml b/tests/manual/testbed/TestLinearGradient.qml
index c4955ba..63cfd3d 100644
--- a/tests/manual/testbed/TestLinearGradient.qml
+++ b/tests/manual/testbed/TestLinearGradient.qml
@@ -27,7 +27,7 @@
 ****************************************************************************/
 
 import QtQuick 2.0
-import "../../../src/effects"
+import QtGraphicalEffects 1.0
 
 TestCaseTemplate {
     ImageSource {
diff --git a/tests/manual/testbed/TestMaskedBlur.qml b/tests/manual/testbed/TestMaskedBlur.qml
index 06ad09a..1d37b24 100644
--- a/tests/manual/testbed/TestMaskedBlur.qml
+++ b/tests/manual/testbed/TestMaskedBlur.qml
@@ -27,7 +27,7 @@
 ****************************************************************************/
 
 import QtQuick 2.0
-import "../../../src/effects"
+import QtGraphicalEffects 1.0
 
 TestCaseTemplate {
     ImageSource {
diff --git a/tests/manual/testbed/TestOpacityMask.qml b/tests/manual/testbed/TestOpacityMask.qml
index 449549f..a844911 100644
--- a/tests/manual/testbed/TestOpacityMask.qml
+++ b/tests/manual/testbed/TestOpacityMask.qml
@@ -27,7 +27,7 @@
 ****************************************************************************/
 
 import QtQuick 2.0
-import "../../../src/effects"
+import QtGraphicalEffects 1.0
 
 TestCaseTemplate {
     ImageSource {
diff --git a/tests/manual/testbed/TestRadialBlur.qml b/tests/manual/testbed/TestRadialBlur.qml
index 96e8bf9..7f80d56 100644
--- a/tests/manual/testbed/TestRadialBlur.qml
+++ b/tests/manual/testbed/TestRadialBlur.qml
@@ -27,7 +27,7 @@
 ****************************************************************************/
 
 import QtQuick 2.0
-import "../../../src/effects"
+import QtGraphicalEffects 1.0
 
 TestCaseTemplate {
     ImageSource {
diff --git a/tests/manual/testbed/TestRadialGradient.qml b/tests/manual/testbed/TestRadialGradient.qml
index eb06a9e..6ab565d 100644
--- a/tests/manual/testbed/TestRadialGradient.qml
+++ b/tests/manual/testbed/TestRadialGradient.qml
@@ -27,7 +27,7 @@
 ****************************************************************************/
 
 import QtQuick 2.0
-import "../../../src/effects"
+import QtGraphicalEffects 1.0
 
 TestCaseTemplate {
     ImageSource {
diff --git a/tests/manual/testbed/TestRectangularGlow.qml b/tests/manual/testbed/TestRectangularGlow.qml
index 2e1ae7c..79841bc 100644
--- a/tests/manual/testbed/TestRectangularGlow.qml
+++ b/tests/manual/testbed/TestRectangularGlow.qml
@@ -27,7 +27,7 @@
 ****************************************************************************/
 
 import QtQuick 2.0
-import "../../../src/effects"
+import QtGraphicalEffects 1.0
 
 TestCaseTemplate {
 
diff --git a/tests/manual/testbed/TestRecursiveBlur.qml b/tests/manual/testbed/TestRecursiveBlur.qml
index 828e4cc..1b9c77d 100644
--- a/tests/manual/testbed/TestRecursiveBlur.qml
+++ b/tests/manual/testbed/TestRecursiveBlur.qml
@@ -27,7 +27,7 @@
 ****************************************************************************/
 
 import QtQuick 2.0
-import "../../../src/effects"
+import QtGraphicalEffects 1.0
 
 TestCaseTemplate {
 
diff --git a/tests/manual/testbed/TestThresholdMask.qml b/tests/manual/testbed/TestThresholdMask.qml
index b66441f..b4fbc73 100644
--- a/tests/manual/testbed/TestThresholdMask.qml
+++ b/tests/manual/testbed/TestThresholdMask.qml
@@ -27,7 +27,7 @@
 ****************************************************************************/
 
 import QtQuick 2.0
-import "../../../src/effects"
+import QtGraphicalEffects 1.0
 
 TestCaseTemplate {
    ImageSource {
diff --git a/tests/manual/testbed/TestZoomBlur.qml b/tests/manual/testbed/TestZoomBlur.qml
index 6ae343a..4a804d2 100644
--- a/tests/manual/testbed/TestZoomBlur.qml
+++ b/tests/manual/testbed/TestZoomBlur.qml
@@ -27,7 +27,7 @@
 ****************************************************************************/
 
 import QtQuick 2.0
-import "../../../src/effects"
+import QtGraphicalEffects 1.0
 
 TestCaseTemplate {
     ImageSource {
