diff options
Diffstat (limited to 'examples/multimedia/video/qmlvideofx/shaders')
23 files changed, 1730 insertions, 0 deletions
diff --git a/examples/multimedia/video/qmlvideofx/shaders/billboard.fsh b/examples/multimedia/video/qmlvideofx/shaders/billboard.fsh new file mode 100644 index 000000000..baa955432 --- /dev/null +++ b/examples/multimedia/video/qmlvideofx/shaders/billboard.fsh @@ -0,0 +1,74 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the Qt Mobility Components. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// Based on http://kodemongki.blogspot.com/2011/06/kameraku-custom-shader-effects-example.html + +uniform float grid; +uniform float dividerValue; +uniform float step_x; +uniform float step_y; + +uniform sampler2D source; +uniform lowp float qt_Opacity; +varying vec2 qt_TexCoord0; + +void main() +{ + vec2 uv = qt_TexCoord0.xy; + float offx = floor(uv.x / (grid * step_x)); + float offy = floor(uv.y / (grid * step_y)); + vec3 res = texture2D(source, vec2(offx * grid * step_x , offy * grid * step_y)).rgb; + vec2 prc = fract(uv / vec2(grid * step_x, grid * step_y)); + vec2 pw = pow(abs(prc - 0.5), vec2(2.0)); + float rs = pow(0.45, 2.0); + float gr = smoothstep(rs - 0.1, rs + 0.1, pw.x + pw.y); + float y = (res.r + res.g + res.b) / 3.0; + vec3 ra = res / y; + float ls = 0.3; + float lb = ceil(y / ls); + float lf = ls * lb + 0.3; + res = lf * res; + vec3 col = mix(res, vec3(0.1, 0.1, 0.1), gr); + if (uv.x < dividerValue) + gl_FragColor = qt_Opacity * vec4(col, 1.0); + else + gl_FragColor = qt_Opacity * texture2D(source, uv); +} diff --git a/examples/multimedia/video/qmlvideofx/shaders/blackandwhite.fsh b/examples/multimedia/video/qmlvideofx/shaders/blackandwhite.fsh new file mode 100644 index 000000000..40756c42f --- /dev/null +++ b/examples/multimedia/video/qmlvideofx/shaders/blackandwhite.fsh @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the Qt Mobility Components. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// Based on http://kodemongki.blogspot.com/2011/06/kameraku-custom-shader-effects-example.html + +uniform float threshold; +uniform float dividerValue; + +uniform sampler2D source; +uniform lowp float qt_Opacity; +varying vec2 qt_TexCoord0; + +void main() +{ + vec2 uv = qt_TexCoord0.xy; + vec4 orig = texture2D(source, uv); + vec3 col = orig.rgb; + float y = 0.3 *col.r + 0.59 * col.g + 0.11 * col.b; + y = y < threshold ? 0.0 : 1.0; + if (uv.x < dividerValue) + gl_FragColor = qt_Opacity * vec4(y, y, y, 1.0); + else + gl_FragColor = qt_Opacity * orig; +} diff --git a/examples/multimedia/video/qmlvideofx/shaders/emboss.fsh b/examples/multimedia/video/qmlvideofx/shaders/emboss.fsh new file mode 100644 index 000000000..bd13a0b5e --- /dev/null +++ b/examples/multimedia/video/qmlvideofx/shaders/emboss.fsh @@ -0,0 +1,71 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the Qt Mobility Components. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// Based on http://kodemongki.blogspot.com/2011/06/kameraku-custom-shader-effects-example.html + +uniform float dividerValue; +const float step_w = 0.0015625; +const float step_h = 0.0027778; + +uniform sampler2D source; +uniform lowp float qt_Opacity; +varying vec2 qt_TexCoord0; + +void main() +{ + vec2 uv = qt_TexCoord0.xy; + vec3 t1 = texture2D(source, vec2(uv.x - step_w, uv.y - step_h)).rgb; + vec3 t2 = texture2D(source, vec2(uv.x, uv.y - step_h)).rgb; + vec3 t3 = texture2D(source, vec2(uv.x + step_w, uv.y - step_h)).rgb; + vec3 t4 = texture2D(source, vec2(uv.x - step_w, uv.y)).rgb; + vec3 t5 = texture2D(source, uv).rgb; + vec3 t6 = texture2D(source, vec2(uv.x + step_w, uv.y)).rgb; + vec3 t7 = texture2D(source, vec2(uv.x - step_w, uv.y + step_h)).rgb; + vec3 t8 = texture2D(source, vec2(uv.x, uv.y + step_h)).rgb; + vec3 t9 = texture2D(source, vec2(uv.x + step_w, uv.y + step_h)).rgb; + vec3 rr = -4.0 * t1 - 4.0 * t2 - 4.0 * t4 + 12.0 * t5; + float y = (rr.r + rr.g + rr.b) / 3.0; + vec3 col = vec3(y, y, y) + 0.3; + if (uv.x < dividerValue) + gl_FragColor = qt_Opacity * vec4(col, 1.0); + else + gl_FragColor = qt_Opacity * texture2D(source, uv); +} diff --git a/examples/multimedia/video/qmlvideofx/shaders/gaussianblur_h.fsh b/examples/multimedia/video/qmlvideofx/shaders/gaussianblur_h.fsh new file mode 100644 index 000000000..96ae8e43c --- /dev/null +++ b/examples/multimedia/video/qmlvideofx/shaders/gaussianblur_h.fsh @@ -0,0 +1,67 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the Qt Mobility Components. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +uniform float dividerValue; +uniform float blurSize; + +uniform sampler2D source; +uniform lowp float qt_Opacity; +varying vec2 qt_TexCoord0; + +void main() +{ + vec2 uv = qt_TexCoord0.xy; + vec4 c = vec4(0.0); + if (uv.x < dividerValue) { + c += texture2D(source, uv - vec2(4.0*blurSize, 0.0)) * 0.05; + c += texture2D(source, uv - vec2(3.0*blurSize, 0.0)) * 0.09; + c += texture2D(source, uv - vec2(2.0*blurSize, 0.0)) * 0.12; + c += texture2D(source, uv - vec2(1.0*blurSize, 0.0)) * 0.15; + c += texture2D(source, uv) * 0.18; + c += texture2D(source, uv + vec2(1.0*blurSize, 0.0)) * 0.15; + c += texture2D(source, uv + vec2(2.0*blurSize, 0.0)) * 0.12; + c += texture2D(source, uv + vec2(3.0*blurSize, 0.0)) * 0.09; + c += texture2D(source, uv + vec2(4.0*blurSize, 0.0)) * 0.05; + } else { + c = texture2D(source, qt_TexCoord0); + } + gl_FragColor = qt_Opacity * c; +} diff --git a/examples/multimedia/video/qmlvideofx/shaders/gaussianblur_v.fsh b/examples/multimedia/video/qmlvideofx/shaders/gaussianblur_v.fsh new file mode 100644 index 000000000..6bc7b8b74 --- /dev/null +++ b/examples/multimedia/video/qmlvideofx/shaders/gaussianblur_v.fsh @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the Qt Mobility Components. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +uniform float dividerValue; +uniform float blurSize; + +uniform sampler2D source; +uniform lowp float qt_Opacity; +varying vec2 qt_TexCoord0; + +void main() +{ + vec2 uv = qt_TexCoord0.xy; + vec4 c = vec4(0.0); + if (uv.x < dividerValue) { + c += texture2D(source, uv - vec2(0.0, 4.0*blurSize)) * 0.05; + c += texture2D(source, uv - vec2(0.0, 3.0*blurSize)) * 0.09; + c += texture2D(source, uv - vec2(0.0, 2.0*blurSize)) * 0.12; + c += texture2D(source, uv - vec2(0.0, 1.0*blurSize)) * 0.15; + c += texture2D(source, uv) * 0.18; + c += texture2D(source, uv + vec2(0.0, 1.0*blurSize)) * 0.15; + c += texture2D(source, uv + vec2(0.0, 2.0*blurSize)) * 0.12; + c += texture2D(source, uv + vec2(0.0, 3.0*blurSize)) * 0.09; + c += texture2D(source, uv + vec2(0.0, 4.0*blurSize)) * 0.05; + } else { + c = texture2D(source, qt_TexCoord0); + } + // First pass we don't apply opacity + gl_FragColor = c; +} diff --git a/examples/multimedia/video/qmlvideofx/shaders/glow.fsh b/examples/multimedia/video/qmlvideofx/shaders/glow.fsh new file mode 100644 index 000000000..e0adcfd65 --- /dev/null +++ b/examples/multimedia/video/qmlvideofx/shaders/glow.fsh @@ -0,0 +1,72 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the Qt Mobility Components. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// Based on http://kodemongki.blogspot.com/2011/06/kameraku-custom-shader-effects-example.html + +uniform float dividerValue; +const float step_w = 0.0015625; +const float step_h = 0.0027778; + +uniform sampler2D source; +uniform lowp float qt_Opacity; +varying vec2 qt_TexCoord0; + +void main() +{ + vec2 uv = qt_TexCoord0.xy; + vec3 t1 = texture2D(source, vec2(uv.x - step_w, uv.y - step_h)).rgb; + vec3 t2 = texture2D(source, vec2(uv.x, uv.y - step_h)).rgb; + vec3 t3 = texture2D(source, vec2(uv.x + step_w, uv.y - step_h)).rgb; + vec3 t4 = texture2D(source, vec2(uv.x - step_w, uv.y)).rgb; + vec3 t5 = texture2D(source, uv).rgb; + vec3 t6 = texture2D(source, vec2(uv.x + step_w, uv.y)).rgb; + vec3 t7 = texture2D(source, vec2(uv.x - step_w, uv.y + step_h)).rgb; + vec3 t8 = texture2D(source, vec2(uv.x, uv.y + step_h)).rgb; + vec3 t9 = texture2D(source, vec2(uv.x + step_w, uv.y + step_h)).rgb; + vec3 xx = t1 + 2.0*t2 + t3 - t7 - 2.0*t8 - t9; + vec3 yy = t1 - t3 + 2.0*t4 - 2.0*t6 + t7 - t9; + vec3 rr = sqrt(xx * xx + yy * yy); + vec3 col = rr * 2.0 * t5; + if (uv.x < dividerValue) + gl_FragColor = qt_Opacity * vec4(col, 1.0); + else + gl_FragColor = qt_Opacity * texture2D(source, uv); +} diff --git a/examples/multimedia/video/qmlvideofx/shaders/isolate.fsh b/examples/multimedia/video/qmlvideofx/shaders/isolate.fsh new file mode 100644 index 000000000..0f25bfab3 --- /dev/null +++ b/examples/multimedia/video/qmlvideofx/shaders/isolate.fsh @@ -0,0 +1,88 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the Qt Mobility Components. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// Based on http://kodemongki.blogspot.com/2011/06/kameraku-custom-shader-effects-example.html + +uniform float targetHue; +uniform float windowWidth; +uniform float dividerValue; + +uniform sampler2D source; +uniform lowp float qt_Opacity; +varying vec2 qt_TexCoord0; + +void rgb2hsl(vec3 rgb, out float h, out float s, float l) +{ + float maxval = max(rgb.r, max(rgb.g, rgb.b)); + float minval = min(rgb.r, min(rgb.g, rgb.b)); + float delta = maxval - minval; + l = (minval + maxval) / 2.0; + s = 0.0; + if (l > 0.0 && l < 1.0) + s = delta / (l < 0.5 ? 2.0 * l : 2.0 - 2.0 * l); + h = 0.0; + if (delta > 0.0) + { + if (rgb.r == maxval && rgb.g != maxval) + h += (rgb.g - rgb.b ) / delta; + if (rgb.g == maxval && rgb.b != maxval) + h += 2.0 + (rgb.b - rgb.r) / delta; + if (rgb.b == maxval && rgb.r != maxval) + h += 4.0 + (rgb.r - rgb.g) / delta; + h *= 60.0; + } +} + +void main() +{ + vec2 uv = qt_TexCoord0.xy; + vec3 col = texture2D(source, uv).rgb; + float h, s, l; + rgb2hsl(col, h, s, l); + float h2 = (h > targetHue) ? h - 360.0 : h + 360.0; + float y = 0.3 * col.r + 0.59 * col.g + 0.11 * col.b; + vec3 result; + if (uv.x > dividerValue || (abs(h - targetHue) < windowWidth) || (abs(h2 - targetHue) < windowWidth)) + result = col; + else + result = vec3(y, y, y); + gl_FragColor = qt_Opacity * vec4(result, 1.0); +} diff --git a/examples/multimedia/video/qmlvideofx/shaders/magnify.fsh b/examples/multimedia/video/qmlvideofx/shaders/magnify.fsh new file mode 100644 index 000000000..638254934 --- /dev/null +++ b/examples/multimedia/video/qmlvideofx/shaders/magnify.fsh @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the Qt Mobility Components. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// Based on http://www.reddit.com/r/programming/comments/losip/shader_toy/c2upn1e + +uniform sampler2D source; +uniform lowp float qt_Opacity; +varying vec2 qt_TexCoord0; +uniform float radius; +uniform float diffractionIndex; +uniform float targetWidth; +uniform float targetHeight; +uniform float posX; +uniform float posY; + +void main() +{ + vec2 tc = qt_TexCoord0; + vec2 center = vec2(posX, posY); + vec2 xy = gl_FragCoord.xy - center.xy; + float r = sqrt(xy.x * xy.x + xy.y * xy.y); + if (r < radius) { + float h = diffractionIndex * 0.5 * radius; + vec2 new_xy = r < radius ? xy * (radius - h) / sqrt(radius * radius - r * r) : xy; + vec2 targetSize = vec2(targetWidth, targetHeight); + tc = (new_xy + center) / targetSize; + tc.y = 1.0 - tc.y; + } + gl_FragColor = qt_Opacity * texture2D(source, tc); +} diff --git a/examples/multimedia/video/qmlvideofx/shaders/pagecurl.fsh b/examples/multimedia/video/qmlvideofx/shaders/pagecurl.fsh new file mode 100644 index 000000000..08e4f4cf1 --- /dev/null +++ b/examples/multimedia/video/qmlvideofx/shaders/pagecurl.fsh @@ -0,0 +1,183 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the Qt Mobility Components. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// Based on http://rectalogic.github.com/webvfx/examples_2transition-shader-pagecurl_8html-example.html + +uniform float dividerValue; +uniform float curlExtent; +uniform sampler2D source; +uniform lowp float qt_Opacity; +varying vec2 qt_TexCoord0; + +const float minAmount = -0.16; +const float maxAmount = 1.3; +const float PI = 3.141592653589793; +const float scale = 512.0; +const float sharpness = 3.0; +const vec4 bgColor = vec4(1.0, 1.0, 0.8, 1.0); + +float amount = curlExtent * (maxAmount - minAmount) + minAmount; +float cylinderCenter = amount; +// 360 degrees * amount +float cylinderAngle = 2.0 * PI * amount; +const float cylinderRadius = 1.0 / PI / 2.0; + +vec3 hitPoint(float hitAngle, float yc, vec3 point, mat3 rrotation) +{ + float hitPoint = hitAngle / (2.0 * PI); + point.y = hitPoint; + return rrotation * point; +} + +vec4 antiAlias(vec4 color1, vec4 color2, float distance) +{ + distance *= scale; + if (distance < 0.0) return color2; + if (distance > 2.0) return color1; + float dd = pow(1.0 - distance / 2.0, sharpness); + return ((color2 - color1) * dd) + color1; +} + +float distanceToEdge(vec3 point) +{ + float dx = abs(point.x > 0.5 ? 1.0 - point.x : point.x); + float dy = abs(point.y > 0.5 ? 1.0 - point.y : point.y); + if (point.x < 0.0) dx = -point.x; + if (point.x > 1.0) dx = point.x - 1.0; + if (point.y < 0.0) dy = -point.y; + if (point.y > 1.0) dy = point.y - 1.0; + if ((point.x < 0.0 || point.x > 1.0) && (point.y < 0.0 || point.y > 1.0)) return sqrt(dx * dx + dy * dy); + return min(dx, dy); +} + +vec4 seeThrough(float yc, vec2 p, mat3 rotation, mat3 rrotation) +{ + float hitAngle = PI - (acos(yc / cylinderRadius) - cylinderAngle); + vec3 point = hitPoint(hitAngle, yc, rotation * vec3(p, 1.0), rrotation); + if (yc <= 0.0 && (point.x < 0.0 || point.y < 0.0 || point.x > 1.0 || point.y > 1.0)) + return bgColor; + if (yc > 0.0) + return texture2D(source, p); + vec4 color = texture2D(source, point.xy); + vec4 tcolor = vec4(0.0); + return antiAlias(color, tcolor, distanceToEdge(point)); +} + +vec4 seeThroughWithShadow(float yc, vec2 p, vec3 point, mat3 rotation, mat3 rrotation) +{ + float shadow = distanceToEdge(point) * 30.0; + shadow = (1.0 - shadow) / 3.0; + if (shadow < 0.0) + shadow = 0.0; + else + shadow *= amount; + vec4 shadowColor = seeThrough(yc, p, rotation, rrotation); + shadowColor.r -= shadow; + shadowColor.g -= shadow; + shadowColor.b -= shadow; + return shadowColor; +} + +vec4 backside(float yc, vec3 point) +{ + vec4 color = texture2D(source, point.xy); + float gray = (color.r + color.b + color.g) / 15.0; + gray += (8.0 / 10.0) * (pow(1.0 - abs(yc / cylinderRadius), 2.0 / 10.0) / 2.0 + (5.0 / 10.0)); + color.rgb = vec3(gray); + return color; +} + +void main(void) +{ + const float angle = 30.0 * PI / 180.0; + float c = cos(-angle); + float s = sin(-angle); + mat3 rotation = mat3( + c, s, 0, + -s, c, 0, + 0.12, 0.258, 1 + ); + c = cos(angle); + s = sin(angle); + mat3 rrotation = mat3( + c, s, 0, + -s, c, 0, + 0.15, -0.5, 1 + ); + vec3 point = rotation * vec3(qt_TexCoord0, 1.0); + float yc = point.y - cylinderCenter; + vec4 color = vec4(1.0, 0.0, 0.0, 1.0); + if (yc < -cylinderRadius) { + // See through to background + color = bgColor; + } else if (yc > cylinderRadius) { + // Flat surface + color = texture2D(source, qt_TexCoord0); + } else { + float hitAngle = (acos(yc / cylinderRadius) + cylinderAngle) - PI; + float hitAngleMod = mod(hitAngle, 2.0 * PI); + if ((hitAngleMod > PI && amount < 0.5) || (hitAngleMod > PI/2.0 && amount < 0.0)) { + color = seeThrough(yc, qt_TexCoord0, rotation, rrotation); + } else { + point = hitPoint(hitAngle, yc, point, rrotation); + if (point.x < 0.0 || point.y < 0.0 || point.x > 1.0 || point.y > 1.0) { + color = seeThroughWithShadow(yc, qt_TexCoord0, point, rotation, rrotation); + } else { + color = backside(yc, point); + vec4 otherColor; + if (yc < 0.0) { + float shado = 1.0 - (sqrt(pow(point.x - 0.5, 2.0) + pow(point.y - 0.5, 2.0)) / 0.71); + shado *= pow(-yc / cylinderRadius, 3.0); + shado *= 0.5; + otherColor = vec4(0.0, 0.0, 0.0, shado); + } else { + otherColor = texture2D(source, qt_TexCoord0); + } + color = antiAlias(color, otherColor, cylinderRadius - abs(yc)); + + // This second antialiasing step causes the shader to fail to render, on + // Symbian devices (tested so far using IVE3.5). Running out of scratch + // memory? + } + } + } + gl_FragColor = qt_Opacity * color; +} diff --git a/examples/multimedia/video/qmlvideofx/shaders/pixelate.fsh b/examples/multimedia/video/qmlvideofx/shaders/pixelate.fsh new file mode 100644 index 000000000..922d79b6f --- /dev/null +++ b/examples/multimedia/video/qmlvideofx/shaders/pixelate.fsh @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the Qt Mobility Components. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// Based on http://www.geeks3d.com/20101029/shader-library-pixelation-post-processing-effect-glsl/ + +uniform float dividerValue; +uniform float granularity; +uniform float targetWidth; +uniform float targetHeight; + +uniform sampler2D source; +uniform lowp float qt_Opacity; +varying vec2 qt_TexCoord0; + +void main() +{ + vec2 uv = qt_TexCoord0.xy; + vec2 tc = qt_TexCoord0; + if (uv.x < dividerValue && granularity > 0.0) { + float dx = granularity / targetWidth; + float dy = granularity / targetHeight; + tc = vec2(dx*(floor(uv.x/dx) + 0.5), + dy*(floor(uv.y/dy) + 0.5)); + } + gl_FragColor = qt_Opacity * texture2D(source, tc); +} diff --git a/examples/multimedia/video/qmlvideofx/shaders/posterize.fsh b/examples/multimedia/video/qmlvideofx/shaders/posterize.fsh new file mode 100644 index 000000000..e5c77ce14 --- /dev/null +++ b/examples/multimedia/video/qmlvideofx/shaders/posterize.fsh @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the Qt Mobility Components. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// Based on http://www.geeks3d.com/20091027/shader-library-posterization-post-processing-effect-glsl/ + +uniform float dividerValue; +uniform float gamma; +uniform float numColors; + +uniform sampler2D source; +uniform lowp float qt_Opacity; +varying vec2 qt_TexCoord0; + +void main() +{ + vec2 uv = qt_TexCoord0.xy; + vec4 c = vec4(0.0); + if (uv.x < dividerValue) { + vec3 x = texture2D(source, uv).rgb; + x = pow(x, vec3(gamma, gamma, gamma)); + x = x * numColors; + x = floor(x); + x = x / numColors; + x = pow(x, vec3(1.0/gamma)); + c = vec4(x, 1.0); + } else { + c = texture2D(source, uv); + } + gl_FragColor = qt_Opacity * c; +} diff --git a/examples/multimedia/video/qmlvideofx/shaders/ripple.fsh b/examples/multimedia/video/qmlvideofx/shaders/ripple.fsh new file mode 100644 index 000000000..bb07fc263 --- /dev/null +++ b/examples/multimedia/video/qmlvideofx/shaders/ripple.fsh @@ -0,0 +1,78 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the Qt Mobility Components. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// Based on http://blog.qt.digia.com/blog/2011/03/22/the-convenient-power-of-qml-scene-graph/ + +uniform float dividerValue; +uniform float targetWidth; +uniform float targetHeight; +uniform float time; + +uniform sampler2D source; +uniform lowp float qt_Opacity; +varying vec2 qt_TexCoord0; + +const float PI = 3.1415926535; +const int ITER = 7; +const float RATE = 0.1; +uniform float amplitude; +uniform float n; + +void main() +{ + vec2 uv = qt_TexCoord0.xy; + vec2 tc = uv; + vec2 p = vec2(-1.0 + 2.0 * gl_FragCoord.x / targetWidth, -(-1.0 + 2.0 * gl_FragCoord.y / targetHeight)); + float diffx = 0.0; + float diffy = 0.0; + vec4 col; + if (uv.x < dividerValue) { + for (int i=0; i<ITER; ++i) { + float theta = float(i) * PI / float(ITER); + vec2 r = vec2(cos(theta) * p.x + sin(theta) * p.y, -1.0 * sin(theta) * p.x + cos(theta) * p.y); + float diff = (sin(2.0 * PI * n * (r.y + time * RATE)) + 1.0) / 2.0; + diffx += diff * sin(theta); + diffy += diff * cos(theta); + } + tc = 0.5*(vec2(1.0,1.0) + p) + amplitude * vec2(diffx, diffy); + } + gl_FragColor = qt_Opacity * texture2D(source, tc); +} diff --git a/examples/multimedia/video/qmlvideofx/shaders/selectionpanel.fsh b/examples/multimedia/video/qmlvideofx/shaders/selectionpanel.fsh new file mode 100644 index 000000000..89d570e35 --- /dev/null +++ b/examples/multimedia/video/qmlvideofx/shaders/selectionpanel.fsh @@ -0,0 +1,41 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the Qt Mobility Components. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + diff --git a/examples/multimedia/video/qmlvideofx/shaders/sepia.fsh b/examples/multimedia/video/qmlvideofx/shaders/sepia.fsh new file mode 100644 index 000000000..196c51782 --- /dev/null +++ b/examples/multimedia/video/qmlvideofx/shaders/sepia.fsh @@ -0,0 +1,59 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the Qt Mobility Components. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// Based on http://kodemongki.blogspot.com/2011/06/kameraku-custom-shader-effects-example.html + +uniform float dividerValue; +uniform sampler2D source; +uniform lowp float qt_Opacity; +varying vec2 qt_TexCoord0; + +void main() +{ + vec2 uv = qt_TexCoord0.xy; + vec4 orig = texture2D(source, uv); + vec3 col = orig.rgb; + float y = 0.3 * col.r + 0.59 * col.g + 0.11 * col.b; + if (uv.x < dividerValue) + gl_FragColor = qt_Opacity * vec4(y + 0.15, y + 0.07, y - 0.12, 1.0); + else + gl_FragColor = qt_Opacity * orig; +} diff --git a/examples/multimedia/video/qmlvideofx/shaders/sharpen.fsh b/examples/multimedia/video/qmlvideofx/shaders/sharpen.fsh new file mode 100644 index 000000000..39076375b --- /dev/null +++ b/examples/multimedia/video/qmlvideofx/shaders/sharpen.fsh @@ -0,0 +1,75 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the Qt Mobility Components. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// Based on http://kodemongki.blogspot.com/2011/06/kameraku-custom-shader-effects-example.html + +uniform float dividerValue; +uniform float amount; +const float step_w = 0.0015625; +const float step_h = 0.0027778; + +uniform sampler2D source; +uniform lowp float qt_Opacity; +varying vec2 qt_TexCoord0; + +vec3 sharpen(vec3 t1, vec3 t2, vec3 t3, vec3 t4, vec3 t5, vec3 t6, vec3 t7, vec3 t8, vec3 t9) +{ + return -t1 - t2 - t3 - t4 + amount * t5 - t6 - t7 - t8 - t9; +} + +void main() +{ + vec2 uv = qt_TexCoord0.xy; + vec3 t1 = texture2D(source, vec2(uv.x - step_w, uv.y - step_h)).rgb; + vec3 t2 = texture2D(source, vec2(uv.x, uv.y - step_h)).rgb; + vec3 t3 = texture2D(source, vec2(uv.x + step_w, uv.y - step_h)).rgb; + vec3 t4 = texture2D(source, vec2(uv.x - step_w, uv.y)).rgb; + vec3 t5 = texture2D(source, uv).rgb; + vec3 t6 = texture2D(source, vec2(uv.x + step_w, uv.y)).rgb; + vec3 t7 = texture2D(source, vec2(uv.x - step_w, uv.y + step_h)).rgb; + vec3 t8 = texture2D(source, vec2(uv.x, uv.y + step_h)).rgb; + vec3 t9 = texture2D(source, vec2(uv.x + step_w, uv.y + step_h)).rgb; + vec3 col = sharpen(t1, t2, t3, t4, t5, t6, t7, t8, t9); + if (uv.x < dividerValue) + gl_FragColor = qt_Opacity * vec4(col, 1.0); + else + gl_FragColor = qt_Opacity * texture2D(source, uv); +} diff --git a/examples/multimedia/video/qmlvideofx/shaders/shockwave.fsh b/examples/multimedia/video/qmlvideofx/shaders/shockwave.fsh new file mode 100644 index 000000000..64f33c8a1 --- /dev/null +++ b/examples/multimedia/video/qmlvideofx/shaders/shockwave.fsh @@ -0,0 +1,73 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the Qt Mobility Components. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// Based on http://www.geeks3d.com/20091116/shader-library-2d-shockwave-post-processing-filter-glsl/ + +uniform float centerX; +uniform float centerY; +uniform float dividerValue; +uniform float granularity; +uniform float time; +uniform float weight; + +uniform sampler2D source; +uniform lowp float qt_Opacity; +varying vec2 qt_TexCoord0; + +void main() +{ + vec2 uv = qt_TexCoord0.xy; + vec2 tc = qt_TexCoord0; + vec2 center = vec2(centerX, centerY); + const vec3 shock = vec3(10.0, 1.5, 0.1); + if (uv.x < dividerValue) { + float distance = distance(uv, center); + if ((distance <= (time + shock.z)) && + (distance >= (time - shock.z))) { + float diff = (distance - time); + float powDiff = 1.0 - pow(abs(diff*shock.x), shock.y*weight); + float diffTime = diff * powDiff; + vec2 diffUV = normalize(uv - center); + tc += (diffUV * diffTime); + } + } + gl_FragColor = qt_Opacity * texture2D(source, tc); +} diff --git a/examples/multimedia/video/qmlvideofx/shaders/sobeledgedetection1.fsh b/examples/multimedia/video/qmlvideofx/shaders/sobeledgedetection1.fsh new file mode 100644 index 000000000..96732fa30 --- /dev/null +++ b/examples/multimedia/video/qmlvideofx/shaders/sobeledgedetection1.fsh @@ -0,0 +1,83 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the Qt Mobility Components. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// Based on "Graphics Shaders: Theory and Practice" (http://cgeducation.org/ShadersBook/) + +uniform float dividerValue; +uniform float mixLevel; +uniform float resS; +uniform float resT; + +uniform sampler2D source; +uniform lowp float qt_Opacity; +varying vec2 qt_TexCoord0; + +void main() +{ + vec2 uv = qt_TexCoord0.xy; + vec4 c = vec4(0.0); + if (uv.x < dividerValue) { + vec2 st = qt_TexCoord0.st; + vec3 irgb = texture2D(source, st).rgb; + vec2 stp0 = vec2(1.0 / resS, 0.0); + vec2 st0p = vec2(0.0 , 1.0 / resT); + vec2 stpp = vec2(1.0 / resS, 1.0 / resT); + vec2 stpm = vec2(1.0 / resS, -1.0 / resT); + const vec3 W = vec3(0.2125, 0.7154, 0.0721); + float i00 = dot(texture2D(source, st).rgb, W); + float im1m1 = dot(texture2D(source, st-stpp).rgb, W); + float ip1p1 = dot(texture2D(source, st+stpp).rgb, W); + float im1p1 = dot(texture2D(source, st-stpm).rgb, W); + float ip1m1 = dot(texture2D(source, st+stpm).rgb, W); + float im10 = dot(texture2D(source, st-stp0).rgb, W); + float ip10 = dot(texture2D(source, st+stp0).rgb, W); + float i0m1 = dot(texture2D(source, st-st0p).rgb, W); + float i0p1 = dot(texture2D(source, st+st0p).rgb, W); + float h = -1.0*im1p1 - 2.0*i0p1 - 1.0*ip1p1 + 1.0*im1m1 + 2.0*i0m1 + 1.0*ip1m1; + float v = -1.0*im1m1 - 2.0*im10 - 1.0*im1p1 + 1.0*ip1m1 + 2.0*ip10 + 1.0*ip1p1; + float mag = 1.0 - length(vec2(h, v)); + vec3 target = vec3(mag, mag, mag); + c = vec4(target, 1.0); + } else { + c = texture2D(source, qt_TexCoord0); + } + gl_FragColor = qt_Opacity * c; +} diff --git a/examples/multimedia/video/qmlvideofx/shaders/sobeledgedetection2.fsh b/examples/multimedia/video/qmlvideofx/shaders/sobeledgedetection2.fsh new file mode 100644 index 000000000..aa836ca2c --- /dev/null +++ b/examples/multimedia/video/qmlvideofx/shaders/sobeledgedetection2.fsh @@ -0,0 +1,77 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the Qt Mobility Components. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// Based on http://rastergrid.com/blog/downloads/frei-chen-edge-detector/ + +#version 130 +uniform sampler2D source; +uniform float dividerValue; +uniform float weight; +mat3 G[2] = mat3[]( + mat3( 1.0, 2.0, 1.0, 0.0, 0.0, 0.0, -1.0, -2.0, -1.0 ), + mat3( 1.0, 0.0, -1.0, 2.0, 0.0, -2.0, 1.0, 0.0, -1.0 ) +); +uniform lowp float qt_Opacity; +in vec2 qt_TexCoord0; +out vec4 FragmentColor; +void main() { + vec2 uv = qt_TexCoord0.xy; + vec4 c = vec4(0.0); + if (uv.x < dividerValue) { + mat3 intensity; + float conv[2]; + vec3 sample; + for (int i=0; i<3; ++i) { + for (int j=0; j<3; ++j) { + sample = texelFetch(source, ivec2(gl_FragCoord) + ivec2(i-1, j-1), 0).rgb; + intensity[i][j] = length(sample) * weight; + } + } + for (int i=0; i<2; ++i) { + float dp3 = dot(G[i][0], intensity[0]) + dot(G[i][1], intensity[1]) + dot(G[i][2], intensity[2]); + conv[i] = dp3 * dp3; + } + c = vec4(0.5 * sqrt(conv[0]*conv[0] + conv[1]*conv[1])); + } else { + c = texture2D(source, qt_TexCoord0); + } + FragmentColor = qt_Opacity * c; +} diff --git a/examples/multimedia/video/qmlvideofx/shaders/tiltshift.fsh b/examples/multimedia/video/qmlvideofx/shaders/tiltshift.fsh new file mode 100644 index 000000000..becd9fe5d --- /dev/null +++ b/examples/multimedia/video/qmlvideofx/shaders/tiltshift.fsh @@ -0,0 +1,75 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the Qt Mobility Components. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// Based on http://kodemongki.blogspot.com/2011/06/kameraku-custom-shader-effects-example.html + +uniform float dividerValue; +const float step_w = 0.0015625; +const float step_h = 0.0027778; + +uniform sampler2D source; +uniform lowp float qt_Opacity; +varying vec2 qt_TexCoord0; + +vec3 blur() +{ + vec2 uv = qt_TexCoord0.xy; + float y = uv.y < 0.4 ? uv.y : 1.0 - uv.y; + float dist = 8.0 - 20.0 * y; + vec3 acc = vec3(0.0, 0.0, 0.0); + for (float y=-2.0; y<=2.0; ++y) { + for (float x=-2.0; x<=2.0; ++x) { + acc += texture2D(source, vec2(uv.x + dist * x * step_w, uv.y + 0.5 * dist * y * step_h)).rgb; + } + } + return acc / 25.0; +} + +void main() +{ + vec2 uv = qt_TexCoord0.xy; + vec3 col; + if (uv.x > dividerValue || (uv.y >= 0.4 && uv.y <= 0.6)) + col = texture2D(source, uv).rgb; + else + col = blur(); + gl_FragColor = qt_Opacity * vec4(col, 1.0); +} diff --git a/examples/multimedia/video/qmlvideofx/shaders/toon.fsh b/examples/multimedia/video/qmlvideofx/shaders/toon.fsh new file mode 100644 index 000000000..2814dfbc8 --- /dev/null +++ b/examples/multimedia/video/qmlvideofx/shaders/toon.fsh @@ -0,0 +1,92 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the Qt Mobility Components. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// Based on http://www.geeks3d.com/20101029/shader-library-pixelation-post-processing-effect-glsl/ + +uniform float dividerValue; +uniform float threshold; +uniform float resS; +uniform float resT; +uniform float magTol; +uniform float quantize; + +uniform sampler2D source; +uniform lowp float qt_Opacity; +varying vec2 qt_TexCoord0; + +void main() +{ + vec4 color = vec4(1.0, 0.0, 0.0, 1.1); + vec2 uv = qt_TexCoord0.xy; + if (uv.x < dividerValue) { + vec2 st = qt_TexCoord0.st; + vec3 rgb = texture2D(source, st).rgb; + vec2 stp0 = vec2(1.0/resS, 0.0); + vec2 st0p = vec2(0.0 , 1.0/resT); + vec2 stpp = vec2(1.0/resS, 1.0/resT); + vec2 stpm = vec2(1.0/resS, -1.0/resT); + float i00 = dot( texture2D(source, st).rgb, vec3(0.2125,0.7154,0.0721)); + float im1m1 = dot( texture2D(source, st-stpp).rgb, vec3(0.2125,0.7154,0.0721)); + float ip1p1 = dot( texture2D(source, st+stpp).rgb, vec3(0.2125,0.7154,0.0721)); + float im1p1 = dot( texture2D(source, st-stpm).rgb, vec3(0.2125,0.7154,0.0721)); + float ip1m1 = dot( texture2D(source, st+stpm).rgb, vec3(0.2125,0.7154,0.0721)); + float im10 = dot( texture2D(source, st-stp0).rgb, vec3(0.2125,0.7154,0.0721)); + float ip10 = dot( texture2D(source, st+stp0).rgb, vec3(0.2125,0.7154,0.0721)); + float i0m1 = dot( texture2D(source, st-st0p).rgb, vec3(0.2125,0.7154,0.0721)); + float i0p1 = dot( texture2D(source, st+st0p).rgb, vec3(0.2125,0.7154,0.0721)); + float h = -1.*im1p1 - 2.*i0p1 - 1.*ip1p1 + 1.*im1m1 + 2.*i0m1 + 1.*ip1m1; + float v = -1.*im1m1 - 2.*im10 - 1.*im1p1 + 1.*ip1m1 + 2.*ip10 + 1.*ip1p1; + float mag = sqrt(h*h + v*v); + if (mag > magTol) { + color = vec4(0.0, 0.0, 0.0, 1.0); + } + else { + rgb.rgb *= quantize; + rgb.rgb += vec3(0.5, 0.5, 0.5); + ivec3 irgb = ivec3(rgb.rgb); + rgb.rgb = vec3(irgb) / quantize; + color = vec4(rgb, 1.0); + } + } else { + color = texture2D(source, uv); + } + gl_FragColor = qt_Opacity * color; +} diff --git a/examples/multimedia/video/qmlvideofx/shaders/vignette.fsh b/examples/multimedia/video/qmlvideofx/shaders/vignette.fsh new file mode 100644 index 000000000..bd20c8e8a --- /dev/null +++ b/examples/multimedia/video/qmlvideofx/shaders/vignette.fsh @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the Qt Mobility Components. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// Based on http://kodemongki.blogspot.com/2011/06/kameraku-custom-shader-effects-example.html + +uniform float dividerValue; +uniform sampler2D source; +uniform lowp float qt_Opacity; +varying vec2 qt_TexCoord0; + +void main() +{ + vec2 uv = qt_TexCoord0.xy; + vec4 orig = texture2D(source, uv); + float cr = pow(0.1, 2.0); + float pt = pow(uv.x - 0.5, 2.0) + pow(uv.y - 0.5, 2.0); + float d = pt - cr; + float cf = 1.0; + if (d > 0.0) + cf = 1.0 - 2.0 * d; + vec3 col = cf * orig.rgb; + if (uv.x < dividerValue) + gl_FragColor = qt_Opacity * vec4(col, 1.0); + else + gl_FragColor = qt_Opacity * orig; +} diff --git a/examples/multimedia/video/qmlvideofx/shaders/warhol.fsh b/examples/multimedia/video/qmlvideofx/shaders/warhol.fsh new file mode 100644 index 000000000..6852495a5 --- /dev/null +++ b/examples/multimedia/video/qmlvideofx/shaders/warhol.fsh @@ -0,0 +1,66 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the Qt Mobility Components. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// Based on http://kodemongki.blogspot.com/2011/06/kameraku-custom-shader-effects-example.html + +uniform float dividerValue; +uniform sampler2D source; +uniform lowp float qt_Opacity; +varying vec2 qt_TexCoord0; + +void main() +{ + vec2 uv = qt_TexCoord0.xy; + vec4 orig = texture2D(source, uv); + vec3 col = orig.rgb; + float y = 0.3 *col.r + 0.59 * col.g + 0.11 * col.b; + y = y < 0.3 ? 0.0 : (y < 0.6 ? 0.5 : 1.0); + if (y == 0.5) + col = vec3(0.8, 0.0, 0.0); + else if (y == 1.0) + col = vec3(0.9, 0.9, 0.0); + else + col = vec3(0.0, 0.0, 0.0); + if (uv.x < dividerValue) + gl_FragColor = qt_Opacity * vec4(col, 1.0); + else + gl_FragColor = qt_Opacity * orig; +} diff --git a/examples/multimedia/video/qmlvideofx/shaders/wobble.fsh b/examples/multimedia/video/qmlvideofx/shaders/wobble.fsh new file mode 100644 index 000000000..9f42d715d --- /dev/null +++ b/examples/multimedia/video/qmlvideofx/shaders/wobble.fsh @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the Qt Mobility Components. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// Based on http://blog.qt.digia.com/blog/2011/03/22/the-convenient-power-of-qml-scene-graph/ + +uniform float amplitude; +uniform float dividerValue; +uniform float frequency; +uniform float time; + +uniform sampler2D source; +uniform lowp float qt_Opacity; +varying vec2 qt_TexCoord0; + +void main() +{ + vec2 uv = qt_TexCoord0.xy; + vec2 tc = qt_TexCoord0; + if (uv.x < dividerValue) { + vec2 p = sin(time + frequency * qt_TexCoord0); + tc += amplitude * vec2(p.y, -p.x); + } + gl_FragColor = qt_Opacity * texture2D(source, tc); +} |