diff options
author | Marko Niemelä <marko.a.niemela@nokia.com> | 2012-01-30 13:10:18 +0200 |
---|---|---|
committer | Marko Niemelä <marko.a.niemela@nokia.com> | 2012-01-30 13:10:18 +0200 |
commit | 6cc6b3b0047358f47ba35e1096fa83cafb82d3a4 (patch) | |
tree | 8bdc1e9b6ec772f8b00a8b66c143f1148ea58a22 | |
parent | c082f45c1cef4a01aeaad3bf276e36e8662c94f0 (diff) | |
download | qtgraphicaleffects-6cc6b3b0047358f47ba35e1096fa83cafb82d3a4.tar.gz |
Optimized FastBlur source downscaling
-rw-r--r-- | src/effects/FastBlur.qml | 43 | ||||
-rw-r--r-- | src/effects/internal/FastGlow.qml | 43 | ||||
-rw-r--r-- | src/effects/internal/FastInnerShadow.qml | 43 | ||||
-rw-r--r-- | src/effects/internal/FastMaskedBlur.qml | 43 |
4 files changed, 132 insertions, 40 deletions
diff --git a/src/effects/FastBlur.qml b/src/effects/FastBlur.qml index cb92e94..9db32bc 100644 --- a/src/effects/FastBlur.qml +++ b/src/effects/FastBlur.qml @@ -63,24 +63,42 @@ Item { smooth: rootItem.radius > 0 } - property string __internalBlurFragmentShader: " - uniform lowp sampler2D source; - uniform lowp float qt_Opacity; + 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 mediump vec2 qt_TexCoord0; + varying highp vec2 qt_TexCoord0; + varying highp vec2 qt_TexCoord1; + varying highp vec2 qt_TexCoord2; + varying highp vec2 qt_TexCoord3; void main() { - highp vec2 shift = vec2(xStep, yStep); + 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; + } + " - lowp vec4 sourceColor = texture2D(source, vec2(qt_TexCoord0.x + shift.x, qt_TexCoord0.y + shift.y * 0.36)) * 0.25 + - texture2D(source, vec2(qt_TexCoord0.x + shift.x * 0.36, qt_TexCoord0.y - shift.y)) * 0.25 + - texture2D(source, vec2(qt_TexCoord0.x - shift.x * 0.36, qt_TexCoord0.y + shift.y)) * 0.25 + - texture2D(source, vec2(qt_TexCoord0.x - shift.x, qt_TexCoord0.y - shift.y * 0.36)) * 0.25; + 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; } - " + " ShaderEffect { id: level0 @@ -109,6 +127,7 @@ Item { anchors.fill: level2 visible: false smooth: true + vertexShader: __internalBlurVertexShader fragmentShader: __internalBlurFragmentShader } @@ -130,6 +149,7 @@ Item { anchors.fill: level3 visible: false smooth: true + vertexShader: __internalBlurVertexShader fragmentShader: __internalBlurFragmentShader } @@ -151,6 +171,7 @@ Item { anchors.fill: level4 visible: false smooth: true + vertexShader: __internalBlurVertexShader fragmentShader: __internalBlurFragmentShader } @@ -172,6 +193,7 @@ Item { anchors.fill: level5 visible: false smooth: true + vertexShader: __internalBlurVertexShader fragmentShader: __internalBlurFragmentShader } @@ -193,6 +215,7 @@ Item { anchors.fill: level6 visible: false smooth: true + vertexShader: __internalBlurVertexShader fragmentShader: __internalBlurFragmentShader } diff --git a/src/effects/internal/FastGlow.qml b/src/effects/internal/FastGlow.qml index 5ee7471..a74b369 100644 --- a/src/effects/internal/FastGlow.qml +++ b/src/effects/internal/FastGlow.qml @@ -64,24 +64,42 @@ Item { hideSource: visible } - property string __internalBlurFragmentShader: " - uniform lowp sampler2D source; - uniform lowp float qt_Opacity; + 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 mediump vec2 qt_TexCoord0; + varying highp vec2 qt_TexCoord0; + varying highp vec2 qt_TexCoord1; + varying highp vec2 qt_TexCoord2; + varying highp vec2 qt_TexCoord3; void main() { - highp vec2 shift = vec2(xStep, yStep); + 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; + } + " - lowp vec4 sourceColor = texture2D(source, vec2(qt_TexCoord0.x + shift.x, qt_TexCoord0.y + shift.y * 0.36)) * 0.25 + - texture2D(source, vec2(qt_TexCoord0.x + shift.x * 0.36, qt_TexCoord0.y - shift.y)) * 0.25 + - texture2D(source, vec2(qt_TexCoord0.x - shift.x * 0.36, qt_TexCoord0.y + shift.y)) * 0.25 + - texture2D(source, vec2(qt_TexCoord0.x - shift.x, qt_TexCoord0.y - shift.y * 0.36)) * 0.25; + 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; } - " + " ShaderEffect { id: level0 @@ -110,6 +128,7 @@ Item { anchors.fill: level2 visible: false smooth: true + vertexShader: __internalBlurVertexShader fragmentShader: __internalBlurFragmentShader } @@ -131,6 +150,7 @@ Item { anchors.fill: level3 visible: false smooth: true + vertexShader: __internalBlurVertexShader fragmentShader: __internalBlurFragmentShader } @@ -152,6 +172,7 @@ Item { anchors.fill: level4 visible: false smooth: true + vertexShader: __internalBlurVertexShader fragmentShader: __internalBlurFragmentShader } @@ -173,6 +194,7 @@ Item { anchors.fill: level5 visible: false smooth: true + vertexShader: __internalBlurVertexShader fragmentShader: __internalBlurFragmentShader } @@ -194,6 +216,7 @@ Item { anchors.fill: level6 visible: false smooth: true + vertexShader: __internalBlurVertexShader fragmentShader: __internalBlurFragmentShader } diff --git a/src/effects/internal/FastInnerShadow.qml b/src/effects/internal/FastInnerShadow.qml index c9c4c9b..47764fd 100644 --- a/src/effects/internal/FastInnerShadow.qml +++ b/src/effects/internal/FastInnerShadow.qml @@ -65,24 +65,42 @@ Item { hideSource: visible } - property string __internalBlurFragmentShader: " - uniform lowp sampler2D source; - uniform lowp float qt_Opacity; + 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 mediump vec2 qt_TexCoord0; + varying highp vec2 qt_TexCoord0; + varying highp vec2 qt_TexCoord1; + varying highp vec2 qt_TexCoord2; + varying highp vec2 qt_TexCoord3; void main() { - highp vec2 shift = vec2(xStep, yStep); + 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; + } + " - lowp vec4 sourceColor = texture2D(source, vec2(qt_TexCoord0.x + shift.x, qt_TexCoord0.y + shift.y * 0.36)) * 0.25 + - texture2D(source, vec2(qt_TexCoord0.x + shift.x * 0.36, qt_TexCoord0.y - shift.y)) * 0.25 + - texture2D(source, vec2(qt_TexCoord0.x - shift.x * 0.36, qt_TexCoord0.y + shift.y)) * 0.25 + - texture2D(source, vec2(qt_TexCoord0.x - shift.x, qt_TexCoord0.y - shift.y * 0.36)) * 0.25; + 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; } - " + " ShaderEffect { id: level0 @@ -129,6 +147,7 @@ Item { anchors.fill: level2 visible: false smooth: true + vertexShader: __internalBlurVertexShader fragmentShader: __internalBlurFragmentShader } @@ -150,6 +169,7 @@ Item { anchors.fill: level3 visible: false smooth: true + vertexShader: __internalBlurVertexShader fragmentShader: __internalBlurFragmentShader } @@ -171,6 +191,7 @@ Item { anchors.fill: level4 visible: false smooth: true + vertexShader: __internalBlurVertexShader fragmentShader: __internalBlurFragmentShader } @@ -192,6 +213,7 @@ Item { anchors.fill: level5 visible: false smooth: true + vertexShader: __internalBlurVertexShader fragmentShader: __internalBlurFragmentShader } @@ -213,6 +235,7 @@ Item { anchors.fill: level6 visible: false smooth: true + vertexShader: __internalBlurVertexShader fragmentShader: __internalBlurFragmentShader } diff --git a/src/effects/internal/FastMaskedBlur.qml b/src/effects/internal/FastMaskedBlur.qml index f822601..50e9895 100644 --- a/src/effects/internal/FastMaskedBlur.qml +++ b/src/effects/internal/FastMaskedBlur.qml @@ -68,24 +68,42 @@ Item { smooth: rootItem.blur > 0 } - property string __internalBlurFragmentShader: " - uniform lowp sampler2D source; - uniform lowp float qt_Opacity; + 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 mediump vec2 qt_TexCoord0; + varying highp vec2 qt_TexCoord0; + varying highp vec2 qt_TexCoord1; + varying highp vec2 qt_TexCoord2; + varying highp vec2 qt_TexCoord3; void main() { - highp vec2 shift = vec2(xStep, yStep); + 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; + } + " - lowp vec4 sourceColor = texture2D(source, vec2(qt_TexCoord0.x + shift.x, qt_TexCoord0.y + shift.y * 0.36)) * 0.25 + - texture2D(source, vec2(qt_TexCoord0.x + shift.x * 0.36, qt_TexCoord0.y - shift.y)) * 0.25 + - texture2D(source, vec2(qt_TexCoord0.x - shift.x * 0.36, qt_TexCoord0.y + shift.y)) * 0.25 + - texture2D(source, vec2(qt_TexCoord0.x - shift.x, qt_TexCoord0.y - shift.y * 0.36)) * 0.25; + 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; } - " + " ShaderEffect { id: mask0 @@ -133,6 +151,7 @@ Item { anchors.fill: level2 visible: false smooth: true + vertexShader: __internalBlurVertexShader fragmentShader: __internalBlurFragmentShader } @@ -154,6 +173,7 @@ Item { anchors.fill: level3 visible: false smooth: true + vertexShader: __internalBlurVertexShader fragmentShader: __internalBlurFragmentShader } @@ -175,6 +195,7 @@ Item { anchors.fill: level4 visible: false smooth: true + vertexShader: __internalBlurVertexShader fragmentShader: __internalBlurFragmentShader } @@ -196,6 +217,7 @@ Item { anchors.fill: level5 visible: false smooth: true + vertexShader: __internalBlurVertexShader fragmentShader: __internalBlurFragmentShader } @@ -217,6 +239,7 @@ Item { anchors.fill: level6 visible: false smooth: true + vertexShader: __internalBlurVertexShader fragmentShader: __internalBlurFragmentShader } |