From c1c259ea76c4d8c94f6d96c3fd0bbbece25785bf Mon Sep 17 00:00:00 2001 From: Joni Poikelin Date: Fri, 30 Dec 2016 11:56:53 +0200 Subject: Support OpenGL core profile [ChangeLog][Qt Graphical Effects] Added QtGraphicalEffects support for OpenGL Core profile contexts. Task-number: QTBUG-42107 Change-Id: I7111e2e6fb3a0b0391e76a17a8d091d288bfcc23 Reviewed-by: Laszlo Agocs --- src/effects/Blend.qml | 11 +- src/effects/BrightnessContrast.qml | 17 +- src/effects/ColorOverlay.qml | 11 +- src/effects/Colorize.qml | 60 +---- src/effects/ConicalGradient.qml | 33 +-- src/effects/Desaturate.qml | 12 +- src/effects/DirectionalBlur.qml | 7 +- src/effects/Displace.qml | 30 +-- src/effects/FastBlur.qml | 61 +---- src/effects/GammaAdjust.qml | 13 +- src/effects/HueSaturation.qml | 80 +----- src/effects/LevelAdjust.qml | 38 +-- src/effects/LinearGradient.qml | 49 +--- src/effects/OpacityMask.qml | 12 +- src/effects/RadialBlur.qml | 7 +- src/effects/RadialGradient.qml | 61 +---- src/effects/RectangularGlow.qml | 22 +- src/effects/RecursiveBlur.qml | 28 +- src/effects/ThresholdMask.qml | 14 +- src/effects/ZoomBlur.qml | 7 +- src/effects/effects_plugin.pro | 5 +- src/effects/private/FastGlow.qml | 70 +---- src/effects/private/FastInnerShadow.qml | 88 +------ src/effects/private/FastMaskedBlur.qml | 91 +------ src/effects/private/GaussianDirectionalBlur.qml | 7 +- src/effects/private/GaussianInnerShadow.qml | 36 +-- src/effects/private/qgfxshaderbuilder.cpp | 293 ++++++++++++++++----- src/effects/private/qgfxshaderbuilder_p.h | 1 + src/effects/qtgraphicaleffectsshaders.qrc | 66 +++++ .../shaders/+glslcore/brightnesscontrast.frag | 17 ++ src/effects/shaders/+glslcore/colorize.frag | 60 +++++ src/effects/shaders/+glslcore/coloroverlay.frag | 10 + .../shaders/+glslcore/conicalgradient_mask.frag | 16 ++ .../shaders/+glslcore/conicalgradient_nomask.frag | 14 + src/effects/shaders/+glslcore/desaturate.frag | 11 + src/effects/shaders/+glslcore/displace.frag | 29 ++ src/effects/shaders/+glslcore/fastblur.frag | 23 ++ .../shaders/+glslcore/fastblur_internal.frag | 16 ++ .../shaders/+glslcore/fastblur_internal.vert | 18 ++ src/effects/shaders/+glslcore/fastglow.frag | 30 +++ src/effects/shaders/+glslcore/fastinnershadow.frag | 32 +++ .../shaders/+glslcore/fastinnershadow_level0.frag | 15 ++ src/effects/shaders/+glslcore/fastmaskedblur.frag | 53 ++++ src/effects/shaders/+glslcore/gammaadjust.frag | 13 + .../shaders/+glslcore/gaussianinnershadow.frag | 19 ++ .../+glslcore/gaussianinnershadow_shadow.frag | 15 ++ src/effects/shaders/+glslcore/huesaturation.frag | 79 ++++++ src/effects/shaders/+glslcore/leveladjust.frag | 37 +++ src/effects/shaders/+glslcore/lineargradient.vert | 22 ++ .../shaders/+glslcore/lineargradient_mask.frag | 13 + .../shaders/+glslcore/lineargradient_nomask.frag | 9 + src/effects/shaders/+glslcore/opacitymask.frag | 9 + .../shaders/+glslcore/opacitymask_invert.frag | 9 + src/effects/shaders/+glslcore/radialgradient.vert | 31 +++ .../shaders/+glslcore/radialgradient_mask.frag | 14 + .../shaders/+glslcore/radialgradient_nomask.frag | 11 + src/effects/shaders/+glslcore/rectangularglow.frag | 21 ++ src/effects/shaders/+glslcore/recursiveblur.frag | 9 + src/effects/shaders/+glslcore/recursiveblur.vert | 15 ++ src/effects/shaders/+glslcore/thresholdmask.frag | 14 + src/effects/shaders/brightnesscontrast.frag | 14 + src/effects/shaders/colorize.frag | 58 ++++ src/effects/shaders/coloroverlay.frag | 8 + src/effects/shaders/conicalgradient_mask.frag | 14 + src/effects/shaders/conicalgradient_nomask.frag | 12 + src/effects/shaders/desaturate.frag | 9 + src/effects/shaders/displace.frag | 27 ++ src/effects/shaders/fastblur.frag | 21 ++ src/effects/shaders/fastblur_internal.frag | 14 + src/effects/shaders/fastblur_internal.vert | 17 ++ src/effects/shaders/fastglow.frag | 28 ++ src/effects/shaders/fastinnershadow.frag | 30 +++ src/effects/shaders/fastinnershadow_level0.frag | 13 + src/effects/shaders/fastmaskedblur.frag | 51 ++++ src/effects/shaders/gammaadjust.frag | 10 + src/effects/shaders/gaussianinnershadow.frag | 17 ++ .../shaders/gaussianinnershadow_shadow.frag | 13 + src/effects/shaders/huesaturation.frag | 77 ++++++ src/effects/shaders/leveladjust.frag | 35 +++ src/effects/shaders/lineargradient.vert | 21 ++ src/effects/shaders/lineargradient_mask.frag | 11 + src/effects/shaders/lineargradient_nomask.frag | 7 + src/effects/shaders/opacitymask.frag | 7 + src/effects/shaders/opacitymask_invert.frag | 7 + src/effects/shaders/radialgradient.vert | 30 +++ src/effects/shaders/radialgradient_mask.frag | 12 + src/effects/shaders/radialgradient_nomask.frag | 10 + src/effects/shaders/rectangularglow.frag | 19 ++ src/effects/shaders/recursiveblur.frag | 6 + src/effects/shaders/recursiveblur.vert | 14 + src/effects/shaders/thresholdmask.frag | 11 + tests/manual/testbed/TestBlend.qml | 2 +- tests/manual/testbed/TestBrightnessContrast.qml | 2 +- tests/manual/testbed/TestColorOverlay.qml | 2 +- tests/manual/testbed/TestColorize.qml | 2 +- tests/manual/testbed/TestConicalGradient.qml | 2 +- tests/manual/testbed/TestDesaturate.qml | 2 +- tests/manual/testbed/TestDirectionalBlur.qml | 2 +- tests/manual/testbed/TestDisplace.qml | 2 +- tests/manual/testbed/TestDropShadow.qml | 2 +- tests/manual/testbed/TestFastBlur.qml | 2 +- tests/manual/testbed/TestGammaAdjust.qml | 2 +- tests/manual/testbed/TestGaussianBlur.qml | 2 +- tests/manual/testbed/TestGlow.qml | 2 +- tests/manual/testbed/TestHueSaturation.qml | 2 +- tests/manual/testbed/TestInnerShadow.qml | 2 +- tests/manual/testbed/TestLevelAdjust.qml | 2 +- tests/manual/testbed/TestLinearGradient.qml | 2 +- tests/manual/testbed/TestMaskedBlur.qml | 2 +- tests/manual/testbed/TestOpacityMask.qml | 2 +- tests/manual/testbed/TestRadialBlur.qml | 2 +- tests/manual/testbed/TestRadialGradient.qml | 2 +- tests/manual/testbed/TestRectangularGlow.qml | 2 +- tests/manual/testbed/TestRecursiveBlur.qml | 2 +- tests/manual/testbed/TestThresholdMask.qml | 2 +- tests/manual/testbed/TestZoomBlur.qml | 2 +- 116 files changed, 1704 insertions(+), 883 deletions(-) create mode 100644 src/effects/qtgraphicaleffectsshaders.qrc create mode 100644 src/effects/shaders/+glslcore/brightnesscontrast.frag create mode 100644 src/effects/shaders/+glslcore/colorize.frag create mode 100644 src/effects/shaders/+glslcore/coloroverlay.frag create mode 100644 src/effects/shaders/+glslcore/conicalgradient_mask.frag create mode 100644 src/effects/shaders/+glslcore/conicalgradient_nomask.frag create mode 100644 src/effects/shaders/+glslcore/desaturate.frag create mode 100644 src/effects/shaders/+glslcore/displace.frag create mode 100644 src/effects/shaders/+glslcore/fastblur.frag create mode 100644 src/effects/shaders/+glslcore/fastblur_internal.frag create mode 100644 src/effects/shaders/+glslcore/fastblur_internal.vert create mode 100644 src/effects/shaders/+glslcore/fastglow.frag create mode 100644 src/effects/shaders/+glslcore/fastinnershadow.frag create mode 100644 src/effects/shaders/+glslcore/fastinnershadow_level0.frag create mode 100644 src/effects/shaders/+glslcore/fastmaskedblur.frag create mode 100644 src/effects/shaders/+glslcore/gammaadjust.frag create mode 100644 src/effects/shaders/+glslcore/gaussianinnershadow.frag create mode 100644 src/effects/shaders/+glslcore/gaussianinnershadow_shadow.frag create mode 100644 src/effects/shaders/+glslcore/huesaturation.frag create mode 100644 src/effects/shaders/+glslcore/leveladjust.frag create mode 100644 src/effects/shaders/+glslcore/lineargradient.vert create mode 100644 src/effects/shaders/+glslcore/lineargradient_mask.frag create mode 100644 src/effects/shaders/+glslcore/lineargradient_nomask.frag create mode 100644 src/effects/shaders/+glslcore/opacitymask.frag create mode 100644 src/effects/shaders/+glslcore/opacitymask_invert.frag create mode 100644 src/effects/shaders/+glslcore/radialgradient.vert create mode 100644 src/effects/shaders/+glslcore/radialgradient_mask.frag create mode 100644 src/effects/shaders/+glslcore/radialgradient_nomask.frag create mode 100644 src/effects/shaders/+glslcore/rectangularglow.frag create mode 100644 src/effects/shaders/+glslcore/recursiveblur.frag create mode 100644 src/effects/shaders/+glslcore/recursiveblur.vert create mode 100644 src/effects/shaders/+glslcore/thresholdmask.frag create mode 100644 src/effects/shaders/brightnesscontrast.frag create mode 100644 src/effects/shaders/colorize.frag create mode 100644 src/effects/shaders/coloroverlay.frag create mode 100644 src/effects/shaders/conicalgradient_mask.frag create mode 100644 src/effects/shaders/conicalgradient_nomask.frag create mode 100644 src/effects/shaders/desaturate.frag create mode 100644 src/effects/shaders/displace.frag create mode 100644 src/effects/shaders/fastblur.frag create mode 100644 src/effects/shaders/fastblur_internal.frag create mode 100644 src/effects/shaders/fastblur_internal.vert create mode 100644 src/effects/shaders/fastglow.frag create mode 100644 src/effects/shaders/fastinnershadow.frag create mode 100644 src/effects/shaders/fastinnershadow_level0.frag create mode 100644 src/effects/shaders/fastmaskedblur.frag create mode 100644 src/effects/shaders/gammaadjust.frag create mode 100644 src/effects/shaders/gaussianinnershadow.frag create mode 100644 src/effects/shaders/gaussianinnershadow_shadow.frag create mode 100644 src/effects/shaders/huesaturation.frag create mode 100644 src/effects/shaders/leveladjust.frag create mode 100644 src/effects/shaders/lineargradient.vert create mode 100644 src/effects/shaders/lineargradient_mask.frag create mode 100644 src/effects/shaders/lineargradient_nomask.frag create mode 100644 src/effects/shaders/opacitymask.frag create mode 100644 src/effects/shaders/opacitymask_invert.frag create mode 100644 src/effects/shaders/radialgradient.vert create mode 100644 src/effects/shaders/radialgradient_mask.frag create mode 100644 src/effects/shaders/radialgradient_nomask.frag create mode 100644 src/effects/shaders/rectangularglow.frag create mode 100644 src/effects/shaders/recursiveblur.frag create mode 100644 src/effects/shaders/recursiveblur.vert create mode 100644 src/effects/shaders/thresholdmask.frag diff --git a/src/effects/Blend.qml b/src/effects/Blend.qml index 3244ae8..f607f4e 100644 --- a/src/effects/Blend.qml +++ b/src/effects/Blend.qml @@ -37,7 +37,7 @@ ** ****************************************************************************/ -import QtQuick 2.0 +import QtQuick 2.8 import QtGraphicalEffects.private 1.0 /*! @@ -380,7 +380,14 @@ Item { property string blendModeSubtract: "result.rgb = max(rgb1 - rgb2, vec3(0.0));" property string blendModeSoftLight: "result.rgb = rgb1 * ((1.0 - rgb1) * rgb2 + (1.0 - (1.0 - rgb1) * (1.0 - rgb2)));" - property string fragmentShaderBegin: " + property string fragmentCoreShaderWorkaround: (GraphicsInfo.profile === GraphicsInfo.OpenGLCoreProfile ? "#version 150 core + #define varying in + #define texture2D texture + out vec4 fragColor; + #define gl_FragColor fragColor + " : "") + + property string fragmentShaderBegin: fragmentCoreShaderWorkaround + " varying mediump vec2 qt_TexCoord0; uniform highp float qt_Opacity; uniform lowp sampler2D backgroundSource; diff --git a/src/effects/BrightnessContrast.qml b/src/effects/BrightnessContrast.qml index 165f291..04da2f3 100644 --- a/src/effects/BrightnessContrast.qml +++ b/src/effects/BrightnessContrast.qml @@ -188,21 +188,6 @@ Item { anchors.fill: parent blending: !rootItem.cached - fragmentShader: " - varying mediump vec2 qt_TexCoord0; - uniform highp float qt_Opacity; - uniform lowp sampler2D source; - uniform highp float brightness; - uniform highp float contrast; - void main() { - highp vec4 pixelColor = texture2D(source, qt_TexCoord0); - pixelColor.rgb /= max(1.0/256.0, pixelColor.a); - highp float c = 1.0 + contrast; - highp float contrastGainFactor = 1.0 + c * c * c * c * step(0.0, contrast); - pixelColor.rgb = ((pixelColor.rgb - 0.5) * (contrastGainFactor * contrast + 1.0)) + 0.5; - pixelColor.rgb = mix(pixelColor.rgb, vec3(step(0.0, brightness)), abs(brightness)); - gl_FragColor = vec4(pixelColor.rgb * pixelColor.a, pixelColor.a) * qt_Opacity; - } - " + fragmentShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/brightnesscontrast.frag" } } diff --git a/src/effects/ColorOverlay.qml b/src/effects/ColorOverlay.qml index b4dd3bd..afefa0b 100644 --- a/src/effects/ColorOverlay.qml +++ b/src/effects/ColorOverlay.qml @@ -142,15 +142,6 @@ Item { anchors.fill: parent - fragmentShader: " - varying mediump vec2 qt_TexCoord0; - uniform highp float qt_Opacity; - uniform lowp sampler2D source; - uniform highp vec4 color; - void main() { - highp vec4 pixelColor = texture2D(source, qt_TexCoord0); - gl_FragColor = vec4(mix(pixelColor.rgb/max(pixelColor.a, 0.00390625), color.rgb/max(color.a, 0.00390625), color.a) * pixelColor.a, pixelColor.a) * qt_Opacity; - } - " + fragmentShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/coloroverlay.frag" } } diff --git a/src/effects/Colorize.qml b/src/effects/Colorize.qml index 77078ef..d36dea3 100644 --- a/src/effects/Colorize.qml +++ b/src/effects/Colorize.qml @@ -231,65 +231,7 @@ Item { anchors.fill: parent - fragmentShader: " - varying mediump vec2 qt_TexCoord0; - uniform highp float qt_Opacity; - uniform lowp sampler2D source; - uniform highp float hue; - uniform highp float saturation; - uniform highp float lightness; + fragmentShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/colorize.frag" - highp float RGBtoL(highp vec3 color) { - highp float cmin = min(color.r, min(color.g, color.b)); - highp float cmax = max(color.r, max(color.g, color.b)); - highp float l = (cmin + cmax) / 2.0; - return l; - } - - highp float hueToIntensity(highp float v1, highp float v2, highp float h) { - h = fract(h); - if (h < 1.0 / 6.0) - return v1 + (v2 - v1) * 6.0 * h; - else if (h < 1.0 / 2.0) - return v2; - else if (h < 2.0 / 3.0) - return v1 + (v2 - v1) * 6.0 * (2.0 / 3.0 - h); - - return v1; - } - - highp vec3 HSLtoRGB(highp vec3 color) { - highp float h = color.x; - highp float l = color.z; - highp float s = color.y; - - if (s < 1.0 / 256.0) - return vec3(l, l, l); - - highp float v1; - highp float v2; - if (l < 0.5) - v2 = l * (1.0 + s); - else - v2 = (l + s) - (s * l); - - v1 = 2.0 * l - v2; - - highp float d = 1.0 / 3.0; - highp float r = hueToIntensity(v1, v2, h + d); - highp float g = hueToIntensity(v1, v2, h); - highp float b = hueToIntensity(v1, v2, h - d); - return vec3(r, g, b); - } - - void main() { - lowp vec4 sample = texture2D(source, qt_TexCoord0); - sample = vec4(sample.rgb / max(1.0/256.0, sample.a), sample.a); - highp float light = RGBtoL(sample.rgb); - highp float c = step(0.0, lightness); - sample.rgb = HSLtoRGB(vec3(hue, saturation, mix(light, c, abs(lightness)))); - gl_FragColor = vec4(sample.rgb * sample.a, sample.a) * qt_Opacity; - } - " } } diff --git a/src/effects/ConicalGradient.qml b/src/effects/ConicalGradient.qml index 51dda4e..ca65151 100644 --- a/src/effects/ConicalGradient.qml +++ b/src/effects/ConicalGradient.qml @@ -327,36 +327,7 @@ Gradient { onFragmentShaderChanged: startAngleChanged() - property string noMaskShader: " - varying mediump vec2 qt_TexCoord0; - uniform lowp sampler2D gradientSource; - uniform highp float qt_Opacity; - uniform highp float startAngle; - uniform highp vec2 center; - - void main() { - const highp float PI = 3.14159265; - const highp float PIx2inv = 0.1591549; - highp float a = (atan((center.y - qt_TexCoord0.t), (center.x - qt_TexCoord0.s)) + PI - startAngle) * PIx2inv; - gl_FragColor = texture2D(gradientSource, vec2(0.0, fract(a))) * qt_Opacity; - } - " - - property string maskShader: " - varying mediump vec2 qt_TexCoord0; - uniform lowp sampler2D gradientSource; - uniform lowp sampler2D maskSource; - uniform highp float qt_Opacity; - uniform highp float startAngle; - uniform highp vec2 center; - - void main() { - lowp float maskAlpha = texture2D(maskSource, qt_TexCoord0).a; - const highp float PI = 3.14159265; - const highp float PIx2inv = 0.1591549; - highp float a = (atan((center.y - qt_TexCoord0.t), (center.x - qt_TexCoord0.s)) + PI - startAngle) * PIx2inv; - gl_FragColor = texture2D(gradientSource, vec2(0.0, fract(a))) * maskAlpha * qt_Opacity; - } - " + property string noMaskShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/conicalgradient_nomask.frag" + property string maskShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/conicalgradient_mask.frag" } } diff --git a/src/effects/Desaturate.qml b/src/effects/Desaturate.qml index 4bce9e2..13f3e85 100644 --- a/src/effects/Desaturate.qml +++ b/src/effects/Desaturate.qml @@ -141,16 +141,6 @@ Item { anchors.fill: parent - fragmentShader: " - varying highp vec2 qt_TexCoord0; - uniform highp float qt_Opacity; - uniform lowp sampler2D source; - uniform highp float desaturation; - void main(void) { - lowp vec4 textureColor = texture2D(source, qt_TexCoord0.st); - lowp float grayColor = (textureColor.r + textureColor.g + textureColor.b) / 3.0; - gl_FragColor = mix(textureColor, vec4(vec3(grayColor), textureColor.a), desaturation) * qt_Opacity; - } - " + fragmentShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/desaturate.frag" } } diff --git a/src/effects/DirectionalBlur.qml b/src/effects/DirectionalBlur.qml index a1b8f06..6965a52 100644 --- a/src/effects/DirectionalBlur.qml +++ b/src/effects/DirectionalBlur.qml @@ -37,7 +37,7 @@ ** ****************************************************************************/ -import QtQuick 2.0 +import QtQuick 2.8 import QtGraphicalEffects.private 1.0 /*! @@ -263,7 +263,10 @@ Item { " function buildFragmentShader() { - var shader = fragmentShaderSkeleton + var shader = "" + if (GraphicsInfo.profile === GraphicsInfo.OpenGLCoreProfile) + shader += "#version 150 core\n#define varying in\n#define texture2D texture\nout vec4 fragColor;\n#define gl_FragColor fragColor\n" + shader += fragmentShaderSkeleton var expandSteps = "" if (transparentBorder) { diff --git a/src/effects/Displace.qml b/src/effects/Displace.qml index 35cf593..0ef5d96 100644 --- a/src/effects/Displace.qml +++ b/src/effects/Displace.qml @@ -185,34 +185,6 @@ Item { anchors.fill: parent - fragmentShader: " - varying highp vec2 qt_TexCoord0; - uniform highp float qt_Opacity; - uniform lowp sampler2D source; - uniform lowp sampler2D displacementSource; - uniform highp float displacement; - uniform highp float xPixel; - uniform highp float yPixel; - - highp float linearstep(highp float e0, highp float e1, highp float x) { - return clamp((x - e0) / (e1 - e0), 0.0, 1.0); - } - - void main() { - lowp vec4 offset = texture2D(displacementSource, qt_TexCoord0); - offset.xy -= vec2(0.5, 0.5); - offset.xy = offset.xy * step(vec2(1.0/256.0), abs(offset.xy)); - highp vec2 tx = qt_TexCoord0 + (vec2(-offset.x, offset.y) * displacement); - - lowp float e1 = linearstep(0.0, xPixel, tx.x); - lowp float e2 = linearstep(0.0, yPixel, tx.y); - lowp float e3 = 1.0 - linearstep(1.0, 1.0 + xPixel, tx.x); - lowp float e4 = 1.0 - linearstep(1.0, 1.0 + yPixel, tx.y); - - lowp vec4 sample = texture2D(source, tx); - sample.rgb *= e1 * e2 * e3 * e4; - gl_FragColor = sample * qt_Opacity * offset.a; - } - " + fragmentShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/displace.frag" } } diff --git a/src/effects/FastBlur.qml b/src/effects/FastBlur.qml index 33561be..9c4c88b 100644 --- a/src/effects/FastBlur.qml +++ b/src/effects/FastBlur.qml @@ -177,43 +177,10 @@ Item { } /*! \internal */ - property string __internalBlurVertexShader: " - attribute highp vec4 qt_Vertex; - attribute highp vec2 qt_MultiTexCoord0; - uniform highp mat4 qt_Matrix; - uniform highp float yStep; - uniform highp float xStep; - varying highp vec2 qt_TexCoord0; - varying highp vec2 qt_TexCoord1; - varying highp vec2 qt_TexCoord2; - varying highp vec2 qt_TexCoord3; - - void main() { - qt_TexCoord0 = vec2(qt_MultiTexCoord0.x + xStep, qt_MultiTexCoord0.y + yStep * 0.36); - qt_TexCoord1 = vec2(qt_MultiTexCoord0.x + xStep * 0.36, qt_MultiTexCoord0.y - yStep); - qt_TexCoord2 = vec2(qt_MultiTexCoord0.x - xStep * 0.36, qt_MultiTexCoord0.y + yStep); - qt_TexCoord3 = vec2(qt_MultiTexCoord0.x - xStep, qt_MultiTexCoord0.y - yStep * 0.36); - gl_Position = qt_Matrix * qt_Vertex; - } - " + property string __internalBlurVertexShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/fastblur_internal.vert" /*! \internal */ - property string __internalBlurFragmentShader: " - uniform lowp sampler2D source; - uniform lowp float qt_Opacity; - varying highp vec2 qt_TexCoord0; - varying highp vec2 qt_TexCoord1; - varying highp vec2 qt_TexCoord2; - varying highp vec2 qt_TexCoord3; - - void main() { - highp vec4 sourceColor = (texture2D(source, qt_TexCoord0) + - texture2D(source, qt_TexCoord1) + - texture2D(source, qt_TexCoord2) + - texture2D(source, qt_TexCoord3)) * 0.25; - gl_FragColor = sourceColor * qt_Opacity; - } - " + property string __internalBlurFragmentShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/fastblur_internal.frag" ShaderEffect { id: level0 @@ -470,28 +437,6 @@ Item { onLodChanged: calculateWeights() - fragmentShader: " - uniform lowp sampler2D source1; - uniform lowp sampler2D source2; - uniform lowp sampler2D source3; - uniform lowp sampler2D source4; - uniform lowp sampler2D source5; - uniform mediump float weight1; - uniform mediump float weight2; - uniform mediump float weight3; - uniform mediump float weight4; - uniform mediump float weight5; - uniform lowp float qt_Opacity; - varying mediump vec2 qt_TexCoord0; - - void main() { - lowp vec4 sourceColor = texture2D(source1, qt_TexCoord0) * weight1; - sourceColor += texture2D(source2, qt_TexCoord0) * weight2; - sourceColor += texture2D(source3, qt_TexCoord0) * weight3; - sourceColor += texture2D(source4, qt_TexCoord0) * weight4; - sourceColor += texture2D(source5, qt_TexCoord0) * weight5; - gl_FragColor = sourceColor * qt_Opacity; - } - " + fragmentShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/fastblur.frag" } } diff --git a/src/effects/GammaAdjust.qml b/src/effects/GammaAdjust.qml index 610c52b..e146d06 100644 --- a/src/effects/GammaAdjust.qml +++ b/src/effects/GammaAdjust.qml @@ -178,17 +178,6 @@ luminance = pow(original_luminance, 1.0 / gamma); // The luminance is assumed to anchors.fill: parent - fragmentShader: " - varying highp vec2 qt_TexCoord0; - uniform highp float qt_Opacity; - uniform lowp sampler2D source; - uniform highp float gamma; - void main(void) { - highp vec4 originalColor = texture2D(source, qt_TexCoord0.st); - originalColor.rgb = originalColor.rgb / max(1.0/256.0, originalColor.a); - highp vec3 adjustedColor = pow(originalColor.rgb, vec3(gamma)); - gl_FragColor = vec4(adjustedColor * originalColor.a, originalColor.a) * qt_Opacity; - } - " + fragmentShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/gammeadjust.frag" } } diff --git a/src/effects/HueSaturation.qml b/src/effects/HueSaturation.qml index 31c11b7..866a8a2 100644 --- a/src/effects/HueSaturation.qml +++ b/src/effects/HueSaturation.qml @@ -218,84 +218,6 @@ Item { anchors.fill: parent - fragmentShader: " - varying highp vec2 qt_TexCoord0; - uniform highp float qt_Opacity; - uniform highp sampler2D source; - uniform highp vec3 hsl; - - highp vec3 RGBtoHSL(highp vec3 color) { - highp float cmin = min(color.r, min(color.g, color.b)); - highp float cmax = max(color.r, max(color.g, color.b)); - highp float h = 0.0; - highp float s = 0.0; - highp float l = (cmin + cmax) / 2.0; - highp float diff = cmax - cmin; - - if (diff > 1.0 / 256.0) { - if (l < 0.5) - s = diff / (cmin + cmax); - else - s = diff / (2.0 - (cmin + cmax)); - - if (color.r == cmax) - h = (color.g - color.b) / diff; - else if (color.g == cmax) - h = 2.0 + (color.b - color.r) / diff; - else - h = 4.0 + (color.r - color.g) / diff; - - h /= 6.0; - } - return vec3(h, s, l); - } - - highp float hueToIntensity(highp float v1, highp float v2, highp float h) { - h = fract(h); - if (h < 1.0 / 6.0) - return v1 + (v2 - v1) * 6.0 * h; - else if (h < 1.0 / 2.0) - return v2; - else if (h < 2.0 / 3.0) - return v1 + (v2 - v1) * 6.0 * (2.0 / 3.0 - h); - - return v1; - } - - highp vec3 HSLtoRGB(highp vec3 color) { - highp float h = color.x; - highp float l = color.z; - highp float s = color.y; - - if (s < 1.0 / 256.0) - return vec3(l); - - highp float v1; - highp float v2; - if (l < 0.5) - v2 = l * (1.0 + s); - else - v2 = (l + s) - (s * l); - - v1 = 2.0 * l - v2; - - highp float d = 1.0 / 3.0; - highp float r = hueToIntensity(v1, v2, h + d); - highp float g = hueToIntensity(v1, v2, h); - highp float b = hueToIntensity(v1, v2, h - d); - return vec3(r, g, b); - } - - void main() { - lowp vec4 sample = texture2D(source, qt_TexCoord0); - sample = vec4(sample.rgb / max(1.0/256.0, sample.a), sample.a); - sample.rgb = mix(vec3(dot(sample.rgb, vec3(0.2125, 0.7154, 0.0721))), sample.rgb, 1.0 + hsl.y); - sample.xyz = RGBtoHSL(sample.rgb); - sample.rgb = HSLtoRGB(vec3(sample.x + hsl.x, sample.y, sample.z)); - highp float c = step(0.0, hsl.z); - sample.rgb = mix(sample.rgb, vec3(c), abs(hsl.z)); - gl_FragColor = vec4(sample.rgb * sample.a, sample.a) * qt_Opacity; - } - " + fragmentShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/huesaturation.frag" } } diff --git a/src/effects/LevelAdjust.qml b/src/effects/LevelAdjust.qml index 6580909..a13354d 100644 --- a/src/effects/LevelAdjust.qml +++ b/src/effects/LevelAdjust.qml @@ -432,42 +432,6 @@ Item { property variant gamma: Qt.vector3d(1.0 / Math.max(rootItem.gamma.x, 0.0001), 1.0 / Math.max(rootItem.gamma.y, 0.0001), 1.0 / Math.max(rootItem.gamma.z, 0.0001)) anchors.fill: parent - fragmentShader: " - varying highp vec2 qt_TexCoord0; - uniform highp float qt_Opacity; - uniform lowp sampler2D source; - uniform highp vec3 minimumInputRGB; - uniform highp vec3 maximumInputRGB; - uniform highp float minimumInputAlpha; - uniform highp float maximumInputAlpha; - uniform highp vec3 minimumOutputRGB; - uniform highp vec3 maximumOutputRGB; - uniform highp float minimumOutputAlpha; - uniform highp float maximumOutputAlpha; - uniform highp vec3 gamma; - - highp float linearstep(highp float e0, highp float e1, highp float x) { - return clamp((x - e0) / (e1 - e0), 0.0, 1.0); - } - - void main(void) { - highp vec4 textureColor = texture2D(source, qt_TexCoord0.st); - highp vec4 color = vec4(textureColor.rgb / max(1.0/256.0, textureColor.a), textureColor.a); - - color.r = linearstep(minimumInputRGB.r, maximumInputRGB.r, color.r); - color.g = linearstep(minimumInputRGB.g, maximumInputRGB.g, color.g); - color.b = linearstep(minimumInputRGB.b, maximumInputRGB.b, color.b); - color.a = linearstep(minimumInputAlpha, maximumInputAlpha, color.a); - - color.rgb = pow(color.rgb, gamma); - - color.r = minimumOutputRGB.r + color.r * (maximumOutputRGB.r - minimumOutputRGB.r); - color.g = minimumOutputRGB.g + color.g * (maximumOutputRGB.g - minimumOutputRGB.g); - color.b = minimumOutputRGB.b + color.b * (maximumOutputRGB.b - minimumOutputRGB.b); - color.a = minimumOutputAlpha + color.a * (maximumOutputAlpha - minimumOutputAlpha); - - gl_FragColor = vec4(color.rgb * color.a, color.a) * qt_Opacity; - } - " + fragmentShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/leveladjust.frag" } } diff --git a/src/effects/LinearGradient.qml b/src/effects/LinearGradient.qml index 8d2d233..e268f8e 100644 --- a/src/effects/LinearGradient.qml +++ b/src/effects/LinearGradient.qml @@ -311,56 +311,13 @@ Item { property real angle: Math.atan2(dx, dy) property variant matrixData: Qt.point(Math.sin(angle), Math.cos(angle)) - vertexShader: " - attribute highp vec4 qt_Vertex; - attribute highp vec2 qt_MultiTexCoord0; - uniform highp mat4 qt_Matrix; - varying highp vec2 qt_TexCoord0; - varying highp vec2 qt_TexCoord1; - uniform highp vec2 startPoint; - uniform highp float l; - uniform highp vec2 matrixData; - - void main() { - highp mat2 rot = mat2(matrixData.y, -matrixData.x, - matrixData.x, matrixData.y); - - qt_TexCoord0 = qt_MultiTexCoord0; - - qt_TexCoord1 = qt_MultiTexCoord0 * l; - qt_TexCoord1 -= startPoint * l; - qt_TexCoord1 *= rot; - - gl_Position = qt_Matrix * qt_Vertex; - } - " + vertexShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/lineargradient.vert" fragmentShader: maskSource == undefined ? noMaskShader : maskShader onFragmentShaderChanged: lChanged() - property string maskShader: " - uniform lowp sampler2D source; - uniform lowp sampler2D maskSource; - uniform lowp float qt_Opacity; - varying highp vec2 qt_TexCoord0; - varying highp vec2 qt_TexCoord1; - - void main() { - lowp vec4 gradientColor = texture2D(source, qt_TexCoord1); - lowp float maskAlpha = texture2D(maskSource, qt_TexCoord0).a; - gl_FragColor = gradientColor * maskAlpha * qt_Opacity; - } - " - - property string noMaskShader: " - uniform lowp sampler2D source; - uniform lowp float qt_Opacity; - varying highp vec2 qt_TexCoord1; - - void main() { - gl_FragColor = texture2D(source, qt_TexCoord1) * qt_Opacity; - } - " + property string maskShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/lineargradient_mask.frag" + property string noMaskShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/lineargradient_nomask.frag" } } diff --git a/src/effects/OpacityMask.qml b/src/effects/OpacityMask.qml index a247297..3935141 100644 --- a/src/effects/OpacityMask.qml +++ b/src/effects/OpacityMask.qml @@ -157,16 +157,6 @@ Item { anchors.fill: parent - fragmentShader: " - varying highp vec2 qt_TexCoord0; - uniform highp float qt_Opacity; - uniform lowp sampler2D source; - uniform lowp sampler2D maskSource; - void main(void) { - gl_FragColor = texture2D(source, qt_TexCoord0.st) * (" - + (invert ? "1.0 - " : "") - + "texture2D(maskSource, qt_TexCoord0.st).a) * qt_Opacity; - } - " + fragmentShader: invert ? "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/opacitymask_invert.frag" : "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/opacitymask.frag" } } diff --git a/src/effects/RadialBlur.qml b/src/effects/RadialBlur.qml index 002a965..5530625 100644 --- a/src/effects/RadialBlur.qml +++ b/src/effects/RadialBlur.qml @@ -37,7 +37,7 @@ ** ****************************************************************************/ -import QtQuick 2.0 +import QtQuick 2.8 import QtGraphicalEffects.private 1.0 /*! @@ -286,7 +286,10 @@ Item { " function buildFragmentShader() { - var shader = fragmentShaderSkeleton + var shader = "" + if (GraphicsInfo.profile == GraphicsInfo.OpenGLCoreProfile) + shader += "#version 150 core\n#define varying in\n#define gl_FragColor fragColor\n#define texture2D texture\nout vec4 fragColor;\n" + shader += fragmentShaderSkeleton var expandSteps = "" if (transparentBorder) { diff --git a/src/effects/RadialGradient.qml b/src/effects/RadialGradient.qml index 2dcb1aa..287b26f 100644 --- a/src/effects/RadialGradient.qml +++ b/src/effects/RadialGradient.qml @@ -392,68 +392,13 @@ Item { anchors.fill: parent - vertexShader: " - attribute highp vec4 qt_Vertex; - attribute highp vec2 qt_MultiTexCoord0; - uniform highp mat4 qt_Matrix; - uniform highp vec2 matrixData; - uniform highp float horizontalRatio; - uniform highp float verticalRatio; - uniform highp vec2 center; - varying highp vec2 qt_TexCoord0; - varying highp vec2 qt_TexCoord1; - varying highp vec2 centerPoint; - - void main() { - highp vec2 ratio = vec2(horizontalRatio, verticalRatio); - - // Rotation matrix - highp mat2 rot = mat2(matrixData.y, -matrixData.x, - matrixData.x, matrixData.y); - - qt_TexCoord0 = qt_MultiTexCoord0; - - qt_TexCoord1 = qt_MultiTexCoord0; - qt_TexCoord1 -= center; - qt_TexCoord1 *= rot; - qt_TexCoord1 += center; - qt_TexCoord1 *= ratio; - - centerPoint = center * ratio; - - gl_Position = qt_Matrix * qt_Vertex; - } - " + vertexShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/radialgradient.vert" fragmentShader: maskSource == undefined ? noMaskShader : maskShader onFragmentShaderChanged: horizontalRatioChanged() - property string maskShader: " - uniform lowp sampler2D gradientImage; - uniform lowp sampler2D maskSource; - uniform lowp float qt_Opacity; - varying highp vec2 qt_TexCoord0; - varying highp vec2 qt_TexCoord1; - varying highp vec2 centerPoint; - - void main() { - lowp vec4 gradientColor = texture2D(gradientImage, vec2(0.0, 2.0 * distance(qt_TexCoord1, centerPoint))); - lowp float maskAlpha = texture2D(maskSource, qt_TexCoord0).a; - gl_FragColor = gradientColor * maskAlpha * qt_Opacity; - } - " - - property string noMaskShader: " - uniform lowp sampler2D gradientImage; - uniform lowp float qt_Opacity; - varying highp vec2 qt_TexCoord1; - varying highp vec2 centerPoint; - - void main() { - lowp vec4 gradientColor = texture2D(gradientImage, vec2(0.0, 2.0 * distance(qt_TexCoord1, centerPoint))); - gl_FragColor = gradientColor * qt_Opacity; - } - " + property string maskShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/radialgradient_mask.frag" + property string noMaskShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/radialgradient_nomask.frag" } } diff --git a/src/effects/RectangularGlow.qml b/src/effects/RectangularGlow.qml index d8eb82c..f8971c0 100644 --- a/src/effects/RectangularGlow.qml +++ b/src/effects/RectangularGlow.qml @@ -264,26 +264,6 @@ Item { property real spread: rootItem.spread / 2.0 property real cornerRadius: clampedCornerRadius() - fragmentShader: " - uniform highp float qt_Opacity; - uniform mediump float relativeSizeX; - uniform mediump float relativeSizeY; - uniform mediump float spread; - uniform lowp vec4 color; - varying highp vec2 qt_TexCoord0; - - highp float linearstep(highp float e0, highp float e1, highp float x) { - return clamp((x - e0) / (e1 - e0), 0.0, 1.0); - } - - void main() { - lowp float alpha = - smoothstep(0.0, relativeSizeX, 0.5 - abs(0.5 - qt_TexCoord0.x)) * - smoothstep(0.0, relativeSizeY, 0.5 - abs(0.5 - qt_TexCoord0.y)); - - highp float spreadMultiplier = linearstep(spread, 1.0 - spread, alpha); - gl_FragColor = color * qt_Opacity * spreadMultiplier * spreadMultiplier; - } - " + fragmentShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/rectangularglow.frag" } } diff --git a/src/effects/RecursiveBlur.qml b/src/effects/RecursiveBlur.qml index a90b179..458dc65 100644 --- a/src/effects/RecursiveBlur.qml +++ b/src/effects/RecursiveBlur.qml @@ -270,31 +270,9 @@ Item { anchors.fill: verticalBlur visible: !verticalBlur.visible - vertexShader: " - attribute highp vec4 qt_Vertex; - attribute highp vec2 qt_MultiTexCoord0; - uniform highp mat4 qt_Matrix; - uniform highp float expandX; - uniform highp float expandY; - varying highp vec2 qt_TexCoord0; - - void main() { - mediump vec2 texCoord = qt_MultiTexCoord0; - texCoord.s = (texCoord.s - expandX) / (1.0 - 2.0 * expandX); - texCoord.t = (texCoord.t - expandY) / (1.0 - 2.0 * expandY); - qt_TexCoord0 = texCoord; - gl_Position = qt_Matrix * qt_Vertex; - } - " - - fragmentShader: " - varying mediump vec2 qt_TexCoord0; - uniform highp float qt_Opacity; - uniform lowp sampler2D source; - void main() { - gl_FragColor = texture2D(source, qt_TexCoord0) * qt_Opacity; - } - " + vertexShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/recursiveblur.vert" + + fragmentShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/recursiveblur.frag" } ShaderEffectSource { diff --git a/src/effects/ThresholdMask.qml b/src/effects/ThresholdMask.qml index 5136ffb..36e0365 100644 --- a/src/effects/ThresholdMask.qml +++ b/src/effects/ThresholdMask.qml @@ -210,18 +210,6 @@ Item { anchors.fill: parent - fragmentShader: " - varying highp vec2 qt_TexCoord0; - uniform highp float qt_Opacity; - uniform lowp sampler2D source; - uniform lowp sampler2D maskSource; - uniform highp float threshold; - uniform highp float spread; - void main(void) { - lowp vec4 colorFragment = texture2D(source, qt_TexCoord0.st); - lowp vec4 maskFragment = texture2D(maskSource, qt_TexCoord0.st); - gl_FragColor = colorFragment * smoothstep(threshold * (1.0 + spread) - spread, threshold * (1.0 + spread), maskFragment.a) * qt_Opacity; - } - " + fragmentShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/thresholdmask.frag" } } diff --git a/src/effects/ZoomBlur.qml b/src/effects/ZoomBlur.qml index d3cbd14..32e7be5 100644 --- a/src/effects/ZoomBlur.qml +++ b/src/effects/ZoomBlur.qml @@ -37,7 +37,7 @@ ** ****************************************************************************/ -import QtQuick 2.0 +import QtQuick 2.8 import QtGraphicalEffects.private 1.0 /*! @@ -275,7 +275,10 @@ Item { " function buildFragmentShader() { - var shader = fragmentShaderSkeleton + var shader = "" + if (GraphicsInfo.profile == GraphicsInfo.OpenGLCoreProfile) + shader += "#version 150 core\n#define varying in\n#define gl_FragColor fragColor\n#define texture2D texture\nout vec4 fragColor;\n" + shader += fragmentShaderSkeleton var expandSteps = "" if (transparentBorder) { diff --git a/src/effects/effects_plugin.pro b/src/effects/effects_plugin.pro index 7ae59a6..e889236 100644 --- a/src/effects/effects_plugin.pro +++ b/src/effects/effects_plugin.pro @@ -30,7 +30,10 @@ QML_FILES = \ ThresholdMask.qml \ ZoomBlur.qml \ -!static: CONFIG += qmlcache +# !static: CONFIG += qmlcache + +RESOURCES += \ + qtgraphicaleffectsshaders.qrc QMAKE_DOCS = $$PWD/doc/qtgraphicaleffects.qdocconf SOURCES += plugin.cpp diff --git a/src/effects/private/FastGlow.qml b/src/effects/private/FastGlow.qml index 191c7f5..fb2fa42 100644 --- a/src/effects/private/FastGlow.qml +++ b/src/effects/private/FastGlow.qml @@ -64,42 +64,9 @@ Item { hideSource: visible } - property string __internalBlurVertexShader: " - attribute highp vec4 qt_Vertex; - attribute highp vec2 qt_MultiTexCoord0; - uniform highp mat4 qt_Matrix; - uniform highp float yStep; - uniform highp float xStep; - varying highp vec2 qt_TexCoord0; - varying highp vec2 qt_TexCoord1; - varying highp vec2 qt_TexCoord2; - varying highp vec2 qt_TexCoord3; - - void main() { - qt_TexCoord0 = vec2(qt_MultiTexCoord0.x + xStep, qt_MultiTexCoord0.y + yStep * 0.36); - qt_TexCoord1 = vec2(qt_MultiTexCoord0.x + xStep * 0.36, qt_MultiTexCoord0.y - yStep); - qt_TexCoord2 = vec2(qt_MultiTexCoord0.x - xStep * 0.36, qt_MultiTexCoord0.y + yStep); - qt_TexCoord3 = vec2(qt_MultiTexCoord0.x - xStep, qt_MultiTexCoord0.y - yStep * 0.36); - gl_Position = qt_Matrix * qt_Vertex; - } - " - - property string __internalBlurFragmentShader: " - uniform lowp sampler2D source; - uniform lowp float qt_Opacity; - varying highp vec2 qt_TexCoord0; - varying highp vec2 qt_TexCoord1; - varying highp vec2 qt_TexCoord2; - varying highp vec2 qt_TexCoord3; - - void main() { - highp vec4 sourceColor = (texture2D(source, qt_TexCoord0) + - texture2D(source, qt_TexCoord1) + - texture2D(source, qt_TexCoord2) + - texture2D(source, qt_TexCoord3)) * 0.25; - gl_FragColor = sourceColor * qt_Opacity; - } - " + property string __internalBlurVertexShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/fastblur_internal.vert" + + property string __internalBlurFragmentShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/fastblur_internal.frag" ShaderEffect { id: level0 @@ -359,35 +326,6 @@ Item { onLodChanged: calculateWeights() - fragmentShader: " - uniform lowp sampler2D source1; - uniform lowp sampler2D source2; - uniform lowp sampler2D source3; - uniform lowp sampler2D source4; - uniform lowp sampler2D source5; - uniform mediump float weight1; - uniform mediump float weight2; - uniform mediump float weight3; - uniform mediump float weight4; - uniform mediump float weight5; - uniform highp vec4 color; - uniform highp float spread; - uniform lowp float qt_Opacity; - varying mediump vec2 qt_TexCoord0; - - highp float linearstep(highp float e0, highp float e1, highp float x) { - return clamp((x - e0) / (e1 - e0), 0.0, 1.0); - } - - void main() { - lowp vec4 sourceColor = texture2D(source1, qt_TexCoord0) * weight1; - sourceColor += texture2D(source2, qt_TexCoord0) * weight2; - sourceColor += texture2D(source3, qt_TexCoord0) * weight3; - sourceColor += texture2D(source4, qt_TexCoord0) * weight4; - sourceColor += texture2D(source5, qt_TexCoord0) * weight5; - sourceColor = mix(vec4(0), color, linearstep(0.0, spread, sourceColor.a)); - gl_FragColor = sourceColor * qt_Opacity; - } - " + fragmentShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/fastglow.frag" } } diff --git a/src/effects/private/FastInnerShadow.qml b/src/effects/private/FastInnerShadow.qml index 82690c5..be21d8e 100644 --- a/src/effects/private/FastInnerShadow.qml +++ b/src/effects/private/FastInnerShadow.qml @@ -65,42 +65,9 @@ Item { hideSource: visible } - property string __internalBlurVertexShader: " - attribute highp vec4 qt_Vertex; - attribute highp vec2 qt_MultiTexCoord0; - uniform highp mat4 qt_Matrix; - uniform highp float yStep; - uniform highp float xStep; - varying highp vec2 qt_TexCoord0; - varying highp vec2 qt_TexCoord1; - varying highp vec2 qt_TexCoord2; - varying highp vec2 qt_TexCoord3; - - void main() { - qt_TexCoord0 = vec2(qt_MultiTexCoord0.x + xStep, qt_MultiTexCoord0.y + yStep * 0.36); - qt_TexCoord1 = vec2(qt_MultiTexCoord0.x + xStep * 0.36, qt_MultiTexCoord0.y - yStep); - qt_TexCoord2 = vec2(qt_MultiTexCoord0.x - xStep * 0.36, qt_MultiTexCoord0.y + yStep); - qt_TexCoord3 = vec2(qt_MultiTexCoord0.x - xStep, qt_MultiTexCoord0.y - yStep * 0.36); - gl_Position = qt_Matrix * qt_Vertex; - } - " - - property string __internalBlurFragmentShader: " - uniform lowp sampler2D source; - uniform lowp float qt_Opacity; - varying highp vec2 qt_TexCoord0; - varying highp vec2 qt_TexCoord1; - varying highp vec2 qt_TexCoord2; - varying highp vec2 qt_TexCoord3; - - void main() { - highp vec4 sourceColor = (texture2D(source, qt_TexCoord0) + - texture2D(source, qt_TexCoord1) + - texture2D(source, qt_TexCoord2) + - texture2D(source, qt_TexCoord3)) * 0.25; - gl_FragColor = sourceColor * qt_Opacity; - } - " + property string __internalBlurVertexShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/fastblur_internal.vert" + + property string __internalBlurFragmentShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/fastblur_internal.frag" ShaderEffect { id: level0 @@ -112,21 +79,7 @@ Item { anchors.fill: parent visible: false smooth: true - fragmentShader: " - varying highp vec2 qt_TexCoord0; - uniform lowp float qt_Opacity; - uniform highp sampler2D source; - uniform lowp vec4 color; - uniform highp float horizontalOffset; - uniform highp float verticalOffset; - - void main(void) { - highp vec2 pos = qt_TexCoord0 - vec2(horizontalOffset, verticalOffset); - lowp float ea = step(0.0, pos.x) * step(0.0, pos.y) * step(pos.x, 1.0) * step(pos.y, 1.0); - lowp float eb = 1.0 - ea; - gl_FragColor = (eb * color + ea * color * (1.0 - texture2D(source, pos).a)) * qt_Opacity; - } - " + fragmentShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/fastinnershadow_level0.frag" } ShaderEffectSource { @@ -377,37 +330,6 @@ Item { onLodChanged: calculateWeights() - fragmentShader: " - uniform lowp sampler2D original; - uniform lowp sampler2D source1; - uniform lowp sampler2D source2; - uniform lowp sampler2D source3; - uniform lowp sampler2D source4; - uniform lowp sampler2D source5; - uniform mediump float weight1; - uniform mediump float weight2; - uniform mediump float weight3; - uniform mediump float weight4; - uniform mediump float weight5; - uniform highp vec4 color; - uniform highp float spread; - uniform lowp float qt_Opacity; - varying mediump vec2 qt_TexCoord0; - - highp float linearstep(highp float e0, highp float e1, highp float x) { - return clamp((x - e0) / (e1 - e0), 0.0, 1.0); - } - - void main() { - lowp vec4 shadowColor = texture2D(source1, qt_TexCoord0) * weight1; - shadowColor += texture2D(source2, qt_TexCoord0) * weight2; - shadowColor += texture2D(source3, qt_TexCoord0) * weight3; - shadowColor += texture2D(source4, qt_TexCoord0) * weight4; - shadowColor += texture2D(source5, qt_TexCoord0) * weight5; - lowp vec4 originalColor = texture2D(original, qt_TexCoord0); - shadowColor.rgb = mix(originalColor.rgb, color.rgb * originalColor.a, linearstep(0.0, spread, shadowColor.a)); - gl_FragColor = vec4(shadowColor.rgb, originalColor.a) * originalColor.a * qt_Opacity; - } - " + fragmentShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/fastinnershadow.frag" } } diff --git a/src/effects/private/FastMaskedBlur.qml b/src/effects/private/FastMaskedBlur.qml index cfdace4..ef26704 100644 --- a/src/effects/private/FastMaskedBlur.qml +++ b/src/effects/private/FastMaskedBlur.qml @@ -68,42 +68,9 @@ Item { smooth: rootItem.blur > 0 } - property string __internalBlurVertexShader: " - attribute highp vec4 qt_Vertex; - attribute highp vec2 qt_MultiTexCoord0; - uniform highp mat4 qt_Matrix; - uniform highp float yStep; - uniform highp float xStep; - varying highp vec2 qt_TexCoord0; - varying highp vec2 qt_TexCoord1; - varying highp vec2 qt_TexCoord2; - varying highp vec2 qt_TexCoord3; + property string __internalBlurVertexShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/fastblur_internal.vert" - void main() { - qt_TexCoord0 = vec2(qt_MultiTexCoord0.x + xStep, qt_MultiTexCoord0.y + yStep * 0.36); - qt_TexCoord1 = vec2(qt_MultiTexCoord0.x + xStep * 0.36, qt_MultiTexCoord0.y - yStep); - qt_TexCoord2 = vec2(qt_MultiTexCoord0.x - xStep * 0.36, qt_MultiTexCoord0.y + yStep); - qt_TexCoord3 = vec2(qt_MultiTexCoord0.x - xStep, qt_MultiTexCoord0.y - yStep * 0.36); - gl_Position = qt_Matrix * qt_Vertex; - } - " - - property string __internalBlurFragmentShader: " - uniform lowp sampler2D source; - uniform lowp float qt_Opacity; - varying highp vec2 qt_TexCoord0; - varying highp vec2 qt_TexCoord1; - varying highp vec2 qt_TexCoord2; - varying highp vec2 qt_TexCoord3; - - void main() { - highp vec4 sourceColor = (texture2D(source, qt_TexCoord0) + - texture2D(source, qt_TexCoord1) + - texture2D(source, qt_TexCoord2) + - texture2D(source, qt_TexCoord3)) * 0.25; - gl_FragColor = sourceColor * qt_Opacity; - } - " + property string __internalBlurFragmentShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/fastblur_internal.frag" ShaderEffect { id: mask0 @@ -275,58 +242,6 @@ Item { width: transparentBorder ? parent.width + 128 : parent.width height: transparentBorder ? parent.height + 128 : parent.height - fragmentShader: " - uniform lowp sampler2D mask; - uniform lowp sampler2D source1; - uniform lowp sampler2D source2; - uniform lowp sampler2D source3; - uniform lowp sampler2D source4; - uniform lowp sampler2D source5; - uniform lowp sampler2D source6; - uniform lowp float lod; - uniform lowp float qt_Opacity; - varying mediump vec2 qt_TexCoord0; - - mediump float weight(mediump float v) { - if (v <= 0.0) - return 1.0; - - if (v >= 0.5) - return 0.0; - - return 1.0 - v * 2.0; - } - - void main() { - - lowp vec4 maskColor = texture2D(mask, qt_TexCoord0); - mediump float l = lod * maskColor.a; - - mediump float w1 = weight(abs(l - 0.100)); - mediump float w2 = weight(abs(l - 0.300)); - mediump float w3 = weight(abs(l - 0.500)); - mediump float w4 = weight(abs(l - 0.700)); - mediump float w5 = weight(abs(l - 0.900)); - mediump float w6 = weight(abs(l - 1.100)); - - mediump float sum = w1 + w2 + w3 + w4 + w5 + w6; - mediump float weight1 = w1 / sum; - mediump float weight2 = w2 / sum; - mediump float weight3 = w3 / sum; - mediump float weight4 = w4 / sum; - mediump float weight5 = w5 / sum; - mediump float weight6 = w6 / sum; - - lowp vec4 sourceColor = texture2D(source1, qt_TexCoord0) * weight1; - sourceColor += texture2D(source2, qt_TexCoord0) * weight2; - sourceColor += texture2D(source3, qt_TexCoord0) * weight3; - sourceColor += texture2D(source4, qt_TexCoord0) * weight4; - sourceColor += texture2D(source5, qt_TexCoord0) * weight5; - sourceColor += texture2D(source6, qt_TexCoord0) * weight6; - - gl_FragColor = sourceColor * qt_Opacity; - - } - " + fragmentShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/fastmaskedblur.frag" } } diff --git a/src/effects/private/GaussianDirectionalBlur.qml b/src/effects/private/GaussianDirectionalBlur.qml index 0a62b80..af1ca70 100644 --- a/src/effects/private/GaussianDirectionalBlur.qml +++ b/src/effects/private/GaussianDirectionalBlur.qml @@ -37,7 +37,7 @@ ** ****************************************************************************/ -import QtQuick 2.0 +import QtQuick 2.8 import QtGraphicalEffects.private 1.0 Item { @@ -180,7 +180,10 @@ Item { "gl_FragColor += texture2D(source, texCoord) * factor_30_31.y; texCoord += shift;" ] - var shader = fragmentShaderBegin + var shader = "" + if (GraphicsInfo.profile == GraphicsInfo.OpenGLCoreProfile) + shader += "#version 150 core\n#define varying in\n#define gl_FragColor fragColor\n#define texture2D texture\nout vec4 fragColor;\n" + shader += fragmentShaderBegin var samples = maxRadius * 2 if (samples > 32) { console.log("DirectionalGaussianBlur.qml WARNING: Maximum of blur radius (16) exceeded!") diff --git a/src/effects/private/GaussianInnerShadow.qml b/src/effects/private/GaussianInnerShadow.qml index f3becae..7207963 100644 --- a/src/effects/private/GaussianInnerShadow.qml +++ b/src/effects/private/GaussianInnerShadow.qml @@ -76,21 +76,7 @@ Item { property real verticalOffset: rootItem.verticalOffset / rootItem.height visible: false - fragmentShader: " - uniform highp sampler2D original; - uniform lowp float qt_Opacity; - uniform lowp vec4 color; - uniform highp float horizontalOffset; - uniform highp float verticalOffset; - varying highp vec2 qt_TexCoord0; - - void main(void) { - highp vec2 pos = qt_TexCoord0 - vec2(horizontalOffset, verticalOffset); - lowp float ea = step(0.0, pos.x) * step(0.0, pos.y) * step(pos.x, 1.0) * step(pos.y, 1.0); - lowp float eb = 1.0 - ea; - gl_FragColor = eb * color + ea * color * (1.0 - texture2D(original, pos).a) * qt_Opacity; - } - " + fragmentShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/gaussianinnershadow_shadow.frag" } GaussianDirectionalBlur { @@ -132,24 +118,6 @@ Item { property real spread: 1.0 - (rootItem.spread * 0.98) property color color: rootItem.color - fragmentShader: " - uniform highp sampler2D original; - uniform highp sampler2D shadow; - uniform lowp float qt_Opacity; - uniform highp float spread; - uniform lowp vec4 color; - varying highp vec2 qt_TexCoord0; - - highp float linearstep(highp float e0, highp float e1, highp float x) { - return clamp((x - e0) / (e1 - e0), 0.0, 1.0); - } - - void main(void) { - lowp vec4 originalColor = texture2D(original, qt_TexCoord0); - lowp vec4 shadowColor = texture2D(shadow, qt_TexCoord0); - shadowColor.rgb = mix(originalColor.rgb, color.rgb * originalColor.a, linearstep(0.0, spread, shadowColor.a)); - gl_FragColor = vec4(shadowColor.rgb, originalColor.a) * originalColor.a * qt_Opacity; - } - " + fragmentShader: "qrc:/qt-project.org/imports/QtGraphicalEffects/shaders/gaussianinnershadow.frag" } } diff --git a/src/effects/private/qgfxshaderbuilder.cpp b/src/effects/private/qgfxshaderbuilder.cpp index d1902a2..22975b5 100644 --- a/src/effects/private/qgfxshaderbuilder.cpp +++ b/src/effects/private/qgfxshaderbuilder.cpp @@ -60,6 +60,7 @@ #endif QGfxShaderBuilder::QGfxShaderBuilder() + : m_coreProfile(false) { // The following code makes the assumption that an OpenGL context the GUI // thread will get the same capabilities as the render thread's OpenGL @@ -82,6 +83,7 @@ QGfxShaderBuilder::QGfxShaderBuilder() int components; gl->glGetIntegerv(GL_MAX_VARYING_COMPONENTS, &components); m_maxBlurSamples = components / 2.0; + m_coreProfile = context.format().profile() == QSurfaceFormat::CoreProfile; } else { int floats; gl->glGetIntegerv(GL_MAX_VARYING_FLOATS, &floats); @@ -182,6 +184,15 @@ static void qgfx_declareBlurVaryings(QByteArray &shader, QGfxGaussSample *s, int } } +static void qgfx_declareCoreBlur(QByteArray &shader, const QByteArray& direction, QGfxGaussSample *s, int samples) +{ + for (int i=0; i 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 p(samples); qgfx_buildGaussSamplePoints(p.data(), samples, radius, deviation); - result[QStringLiteral("fragmentShader")] = qgfx_gaussianFragmentShader(p.data(), samples, alphaOnly); - result[QStringLiteral("vertexShader")] = qgfx_gaussianVertexShader(p.data(), samples); - + if (m_coreProfile) { + result[QStringLiteral("fragmentShader")] = qgfx_gaussianFragmentCoreShader(p.data(), samples, alphaOnly); + result[QStringLiteral("vertexShader")] = qgfx_gaussianVertexCoreShader(p.data(), samples); + } else { + result[QStringLiteral("fragmentShader")] = qgfx_gaussianFragmentShader(p.data(), samples, alphaOnly); + result[QStringLiteral("vertexShader")] = qgfx_gaussianVertexShader(p.data(), samples); + } return result; } diff --git a/src/effects/private/qgfxshaderbuilder_p.h b/src/effects/private/qgfxshaderbuilder_p.h index 7061c7d..59aea2c 100644 --- a/src/effects/private/qgfxshaderbuilder_p.h +++ b/src/effects/private/qgfxshaderbuilder_p.h @@ -58,6 +58,7 @@ public: private: int m_maxBlurSamples; + 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 @@ + + + shaders/brightnesscontrast.frag + shaders/+glslcore/brightnesscontrast.frag + shaders/+glslcore/colorize.frag + shaders/colorize.frag + shaders/+glslcore/coloroverlay.frag + shaders/coloroverlay.frag + shaders/conicalgradient_nomask.frag + shaders/conicalgradient_mask.frag + shaders/+glslcore/conicalgradient_nomask.frag + shaders/+glslcore/conicalgradient_mask.frag + shaders/+glslcore/desaturate.frag + shaders/desaturate.frag + shaders/+glslcore/displace.frag + shaders/displace.frag + shaders/+glslcore/fastblur.frag + shaders/+glslcore/fastblur_internal.frag + shaders/+glslcore/fastblur_internal.vert + shaders/fastblur.frag + shaders/fastblur_internal.frag + shaders/fastblur_internal.vert + shaders/gammaadjust.frag + shaders/+glslcore/gammaadjust.frag + shaders/huesaturation.frag + shaders/+glslcore/huesaturation.frag + shaders/leveladjust.frag + shaders/+glslcore/leveladjust.frag + shaders/lineargradient.vert + shaders/lineargradient_nomask.frag + shaders/lineargradient_mask.frag + shaders/+glslcore/lineargradient.vert + shaders/+glslcore/lineargradient_nomask.frag + shaders/+glslcore/lineargradient_mask.frag + shaders/opacitymask.frag + shaders/+glslcore/opacitymask.frag + shaders/+glslcore/opacitymask_invert.frag + shaders/opacitymask_invert.frag + shaders/radialgradient_nomask.frag + shaders/radialgradient_mask.frag + shaders/radialgradient.vert + shaders/+glslcore/radialgradient_nomask.frag + shaders/+glslcore/radialgradient_mask.frag + shaders/+glslcore/radialgradient.vert + shaders/rectangularglow.frag + shaders/+glslcore/rectangularglow.frag + shaders/recursiveblur.frag + shaders/recursiveblur.vert + shaders/+glslcore/recursiveblur.frag + shaders/+glslcore/recursiveblur.vert + shaders/thresholdmask.frag + shaders/+glslcore/thresholdmask.frag + shaders/fastglow.frag + shaders/+glslcore/fastglow.frag + shaders/fastinnershadow_level0.frag + shaders/+glslcore/fastinnershadow_level0.frag + shaders/fastinnershadow.frag + shaders/+glslcore/fastinnershadow.frag + shaders/fastmaskedblur.frag + shaders/+glslcore/fastmaskedblur.frag + shaders/gaussianinnershadow.frag + shaders/gaussianinnershadow_shadow.frag + shaders/+glslcore/gaussianinnershadow.frag + shaders/+glslcore/gaussianinnershadow_shadow.frag + + 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 { -- cgit v1.2.3