diff --git a/examples/quick/controls/gallery/src/main.cpp b/examples/quick/controls/gallery/src/main.cpp index a757f4853bfbf9bcd6469529cfbc00854b38de47..b0d12b85fa14bc7addef7cf5a081c591b9118a1a 100644 --- a/examples/quick/controls/gallery/src/main.cpp +++ b/examples/quick/controls/gallery/src/main.cpp @@ -40,10 +40,18 @@ #include "qtquickcontrolsapplication.h" #include <QtQml/QQmlApplicationEngine> +#include <QtGui/QSurfaceFormat> +#include <QtQuick/QQuickWindow> int main(int argc, char *argv[]) { QtQuickControlsApplication app(argc, argv); + if (QCoreApplication::arguments().contains(QLatin1String("--coreprofile"))) { + QSurfaceFormat fmt = QQuickWindow::defaultFormat(); + fmt.setVersion(4, 4); + fmt.setProfile(QSurfaceFormat::CoreProfile); + QQuickWindow::setDefaultFormat(fmt); + } QQmlApplicationEngine engine(QUrl("qrc:/main.qml")); return app.exec(); } diff --git a/examples/quick/dialogs/systemdialogs/main.cpp b/examples/quick/dialogs/systemdialogs/main.cpp index fd88220056ce9463fac6c4f7a2f569e1e540ebc2..6d0fef3cd2f0910f75f4586ef44060e2eab8ee55 100644 --- a/examples/quick/dialogs/systemdialogs/main.cpp +++ b/examples/quick/dialogs/systemdialogs/main.cpp @@ -40,10 +40,18 @@ #include "qtquickcontrolsapplication.h" #include <QtQml/QQmlApplicationEngine> +#include <QtGui/QSurfaceFormat> +#include <QtQuick/QQuickWindow> int main(int argc, char *argv[]) { QtQuickControlsApplication app(argc, argv); + if (QCoreApplication::arguments().contains(QLatin1String("--coreprofile"))) { + QSurfaceFormat fmt = QQuickWindow::defaultFormat(); + fmt.setVersion(4, 4); + fmt.setProfile(QSurfaceFormat::CoreProfile); + QQuickWindow::setDefaultFormat(fmt); + } QQmlApplicationEngine engine(QUrl("qrc:/dialogs/systemdialogs/systemdialogs.qml")); return app.exec(); } diff --git a/src/controls/Private/FastGlow.qml b/src/controls/Private/FastGlow.qml index f4bd2c742193985ff87cdb03bb67f67742e144e5..e008dad48d89d72874000f8f4ad8fa787f68bd2c 100644 --- a/src/controls/Private/FastGlow.qml +++ b/src/controls/Private/FastGlow.qml @@ -64,7 +64,25 @@ Item { hideSource: visible } - property string __internalBlurVertexShader: " + property string __internalBlurVertexShader: rootItem.window.glslIsCoreProfile ? "#version 150 + 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; + } + " : " attribute highp vec4 qt_Vertex; attribute highp vec2 qt_MultiTexCoord0; uniform highp mat4 qt_Matrix; @@ -83,8 +101,23 @@ Item { gl_Position = qt_Matrix * qt_Vertex; } " + property string __internalBlurFragmentShader: rootItem.window.glslIsCoreProfile ? "#version 150 + 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; - property string __internalBlurFragmentShader: " + 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; + } + " : " uniform lowp sampler2D source; uniform lowp float qt_Opacity; varying highp vec2 qt_TexCoord0; @@ -99,7 +132,7 @@ Item { texture2D(source, qt_TexCoord3)) * 0.25; gl_FragColor = sourceColor * qt_Opacity; } - " + " ShaderEffect { id: level0 @@ -359,7 +392,37 @@ Item { onLodChanged: calculateWeights() - fragmentShader: " + fragmentShader: rootItem.window.glslIsCoreProfile ? "#version 150 + 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; + } + " : " uniform lowp sampler2D source1; uniform lowp sampler2D source2; uniform lowp sampler2D source3; diff --git a/src/dialogs/DefaultColorDialog.qml b/src/dialogs/DefaultColorDialog.qml index 1b5f74858a36bcf4b931a5574f22f6c0664f9a32..7880de4983ae969414f0f8d3fb6aa16df1bf2105 100644 --- a/src/dialogs/DefaultColorDialog.qml +++ b/src/dialogs/DefaultColorDialog.qml @@ -136,7 +136,54 @@ AbstractColorDialog { anchors.centerIn: parent property real hue: hueSlider.value - fragmentShader: " + fragmentShader: root.window.glslIsCoreProfile ? "#version 150 + in vec2 qt_TexCoord0; + uniform float qt_Opacity; + uniform float hue; + out vec4 fragColor; + + 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 c = vec4(1.0); + c.rgb = HSLtoRGB(vec3(hue, 1.0 - qt_TexCoord0.t, qt_TexCoord0.s)); + fragColor = c * qt_Opacity; + } + " : " varying mediump vec2 qt_TexCoord0; uniform highp float qt_Opacity; uniform highp float hue; diff --git a/tests/auto/controls/data/tst_applicationwindow.qml b/tests/auto/controls/data/tst_applicationwindow.qml index a428fe974ad34bf11d5f8a1cee675fac180988f5..8695d59eabaca66d7079d14170ff006af008dd60 100644 --- a/tests/auto/controls/data/tst_applicationwindow.qml +++ b/tests/auto/controls/data/tst_applicationwindow.qml @@ -41,6 +41,7 @@ import QtQuick 2.1 import QtTest 1.0 import QtQuickControlsTests 1.0 +import QtQuick.Window 2.1 Item { id: container