aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.qmake.conf2
-rw-r--r--src/effects/Blend.qml11
-rw-r--r--src/effects/BrightnessContrast.qml17
-rw-r--r--src/effects/ColorOverlay.qml11
-rw-r--r--src/effects/Colorize.qml60
-rw-r--r--src/effects/ConicalGradient.qml33
-rw-r--r--src/effects/Desaturate.qml12
-rw-r--r--src/effects/DirectionalBlur.qml7
-rw-r--r--src/effects/Displace.qml30
-rw-r--r--src/effects/FastBlur.qml61
-rw-r--r--src/effects/GammaAdjust.qml13
-rw-r--r--src/effects/HueSaturation.qml80
-rw-r--r--src/effects/LevelAdjust.qml38
-rw-r--r--src/effects/LinearGradient.qml49
-rw-r--r--src/effects/OpacityMask.qml12
-rw-r--r--src/effects/RadialBlur.qml7
-rw-r--r--src/effects/RadialGradient.qml61
-rw-r--r--src/effects/RectangularGlow.qml22
-rw-r--r--src/effects/RecursiveBlur.qml28
-rw-r--r--src/effects/ThresholdMask.qml14
-rw-r--r--src/effects/ZoomBlur.qml7
-rw-r--r--src/effects/effects_plugin.pro5
-rw-r--r--src/effects/private/FastGlow.qml70
-rw-r--r--src/effects/private/FastInnerShadow.qml88
-rw-r--r--src/effects/private/FastMaskedBlur.qml91
-rw-r--r--src/effects/private/GaussianDirectionalBlur.qml7
-rw-r--r--src/effects/private/GaussianInnerShadow.qml36
-rw-r--r--src/effects/private/qgfxshaderbuilder.cpp293
-rw-r--r--src/effects/private/qgfxshaderbuilder_p.h1
-rw-r--r--src/effects/qtgraphicaleffectsshaders.qrc66
-rw-r--r--src/effects/shaders/+glslcore/brightnesscontrast.frag17
-rw-r--r--src/effects/shaders/+glslcore/colorize.frag60
-rw-r--r--src/effects/shaders/+glslcore/coloroverlay.frag10
-rw-r--r--src/effects/shaders/+glslcore/conicalgradient_mask.frag16
-rw-r--r--src/effects/shaders/+glslcore/conicalgradient_nomask.frag14
-rw-r--r--src/effects/shaders/+glslcore/desaturate.frag11
-rw-r--r--src/effects/shaders/+glslcore/displace.frag29
-rw-r--r--src/effects/shaders/+glslcore/fastblur.frag23
-rw-r--r--src/effects/shaders/+glslcore/fastblur_internal.frag16
-rw-r--r--src/effects/shaders/+glslcore/fastblur_internal.vert18
-rw-r--r--src/effects/shaders/+glslcore/fastglow.frag30
-rw-r--r--src/effects/shaders/+glslcore/fastinnershadow.frag32
-rw-r--r--src/effects/shaders/+glslcore/fastinnershadow_level0.frag15
-rw-r--r--src/effects/shaders/+glslcore/fastmaskedblur.frag53
-rw-r--r--src/effects/shaders/+glslcore/gammaadjust.frag13
-rw-r--r--src/effects/shaders/+glslcore/gaussianinnershadow.frag19
-rw-r--r--src/effects/shaders/+glslcore/gaussianinnershadow_shadow.frag15
-rw-r--r--src/effects/shaders/+glslcore/huesaturation.frag79
-rw-r--r--src/effects/shaders/+glslcore/leveladjust.frag37
-rw-r--r--src/effects/shaders/+glslcore/lineargradient.vert22
-rw-r--r--src/effects/shaders/+glslcore/lineargradient_mask.frag13
-rw-r--r--src/effects/shaders/+glslcore/lineargradient_nomask.frag9
-rw-r--r--src/effects/shaders/+glslcore/opacitymask.frag9
-rw-r--r--src/effects/shaders/+glslcore/opacitymask_invert.frag9
-rw-r--r--src/effects/shaders/+glslcore/radialgradient.vert31
-rw-r--r--src/effects/shaders/+glslcore/radialgradient_mask.frag14
-rw-r--r--src/effects/shaders/+glslcore/radialgradient_nomask.frag11
-rw-r--r--src/effects/shaders/+glslcore/rectangularglow.frag21
-rw-r--r--src/effects/shaders/+glslcore/recursiveblur.frag9
-rw-r--r--src/effects/shaders/+glslcore/recursiveblur.vert15
-rw-r--r--src/effects/shaders/+glslcore/thresholdmask.frag14
-rw-r--r--src/effects/shaders/brightnesscontrast.frag14
-rw-r--r--src/effects/shaders/colorize.frag58
-rw-r--r--src/effects/shaders/coloroverlay.frag8
-rw-r--r--src/effects/shaders/conicalgradient_mask.frag14
-rw-r--r--src/effects/shaders/conicalgradient_nomask.frag12
-rw-r--r--src/effects/shaders/desaturate.frag9
-rw-r--r--src/effects/shaders/displace.frag27
-rw-r--r--src/effects/shaders/fastblur.frag21
-rw-r--r--src/effects/shaders/fastblur_internal.frag14
-rw-r--r--src/effects/shaders/fastblur_internal.vert17
-rw-r--r--src/effects/shaders/fastglow.frag28
-rw-r--r--src/effects/shaders/fastinnershadow.frag30
-rw-r--r--src/effects/shaders/fastinnershadow_level0.frag13
-rw-r--r--src/effects/shaders/fastmaskedblur.frag51
-rw-r--r--src/effects/shaders/gammaadjust.frag10
-rw-r--r--src/effects/shaders/gaussianinnershadow.frag17
-rw-r--r--src/effects/shaders/gaussianinnershadow_shadow.frag13
-rw-r--r--src/effects/shaders/huesaturation.frag77
-rw-r--r--src/effects/shaders/leveladjust.frag35
-rw-r--r--src/effects/shaders/lineargradient.vert21
-rw-r--r--src/effects/shaders/lineargradient_mask.frag11
-rw-r--r--src/effects/shaders/lineargradient_nomask.frag7
-rw-r--r--src/effects/shaders/opacitymask.frag7
-rw-r--r--src/effects/shaders/opacitymask_invert.frag7
-rw-r--r--src/effects/shaders/radialgradient.vert30
-rw-r--r--src/effects/shaders/radialgradient_mask.frag12
-rw-r--r--src/effects/shaders/radialgradient_nomask.frag10
-rw-r--r--src/effects/shaders/rectangularglow.frag19
-rw-r--r--src/effects/shaders/recursiveblur.frag6
-rw-r--r--src/effects/shaders/recursiveblur.vert14
-rw-r--r--src/effects/shaders/thresholdmask.frag11
-rw-r--r--tests/manual/testbed/TestBlend.qml2
-rw-r--r--tests/manual/testbed/TestBrightnessContrast.qml2
-rw-r--r--tests/manual/testbed/TestColorOverlay.qml2
-rw-r--r--tests/manual/testbed/TestColorize.qml2
-rw-r--r--tests/manual/testbed/TestConicalGradient.qml2
-rw-r--r--tests/manual/testbed/TestDesaturate.qml2
-rw-r--r--tests/manual/testbed/TestDirectionalBlur.qml2
-rw-r--r--tests/manual/testbed/TestDisplace.qml2
-rw-r--r--tests/manual/testbed/TestDropShadow.qml2
-rw-r--r--tests/manual/testbed/TestFastBlur.qml2
-rw-r--r--tests/manual/testbed/TestGammaAdjust.qml2
-rw-r--r--tests/manual/testbed/TestGaussianBlur.qml2
-rw-r--r--tests/manual/testbed/TestGlow.qml2
-rw-r--r--tests/manual/testbed/TestHueSaturation.qml2
-rw-r--r--tests/manual/testbed/TestInnerShadow.qml2
-rw-r--r--tests/manual/testbed/TestLevelAdjust.qml2
-rw-r--r--tests/manual/testbed/TestLinearGradient.qml2
-rw-r--r--tests/manual/testbed/TestMaskedBlur.qml2
-rw-r--r--tests/manual/testbed/TestOpacityMask.qml2
-rw-r--r--tests/manual/testbed/TestRadialBlur.qml2
-rw-r--r--tests/manual/testbed/TestRadialGradient.qml2
-rw-r--r--tests/manual/testbed/TestRectangularGlow.qml2
-rw-r--r--tests/manual/testbed/TestRecursiveBlur.qml2
-rw-r--r--tests/manual/testbed/TestThresholdMask.qml2
-rw-r--r--tests/manual/testbed/TestZoomBlur.qml2
117 files changed, 1705 insertions, 884 deletions
diff --git a/.qmake.conf b/.qmake.conf
index 2108ac6..138038d 100644
--- a/.qmake.conf
+++ b/.qmake.conf
@@ -1,3 +1,3 @@
load(qt_build_config)
-MODULE_VERSION = 5.9.3
+MODULE_VERSION = 5.10.0
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 d115e93..fd40da2 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 2c2234d..cd6aad0 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 83d2222..4750f57 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 {