summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarko Niemelä <marko.a.niemela@nokia.com>2012-01-30 13:10:18 +0200
committerMarko Niemelä <marko.a.niemela@nokia.com>2012-01-30 13:10:18 +0200
commit6cc6b3b0047358f47ba35e1096fa83cafb82d3a4 (patch)
tree8bdc1e9b6ec772f8b00a8b66c143f1148ea58a22
parentc082f45c1cef4a01aeaad3bf276e36e8662c94f0 (diff)
downloadqtgraphicaleffects-6cc6b3b0047358f47ba35e1096fa83cafb82d3a4.tar.gz
Optimized FastBlur source downscaling
-rw-r--r--src/effects/FastBlur.qml43
-rw-r--r--src/effects/internal/FastGlow.qml43
-rw-r--r--src/effects/internal/FastInnerShadow.qml43
-rw-r--r--src/effects/internal/FastMaskedBlur.qml43
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
}