From 8489b90f5ed6b7f9b98b123b521d41aec00cc8bd Mon Sep 17 00:00:00 2001 From: Jian Date: Wed, 25 Mar 2015 13:45:57 +0800 Subject: [PATCH] Adding some fragment shaders for glshader plugin MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Upstream Status: Inappropriate [i.MX specific] Signed-off-by: Jian --- ext/gl/Makefile.am | 3 +++ ext/gl/shaders/fisheye_shader.fs | 14 ++++++++++++++ ext/gl/shaders/gray_shader.fs | 12 ++++++++++++ ext/gl/shaders/tunnel_shader.fs | 14 ++++++++++++++ ext/gl/shaders/twirl_shader.fs | 21 +++++++++++++++++++++ 5 files changed, 64 insertions(+) create mode 100755 ext/gl/shaders/fisheye_shader.fs create mode 100755 ext/gl/shaders/gray_shader.fs create mode 100755 ext/gl/shaders/tunnel_shader.fs create mode 100755 ext/gl/shaders/twirl_shader.fs diff --git a/ext/gl/Makefile.am b/ext/gl/Makefile.am index b1796f6..b8442f8 100644 --- a/ext/gl/Makefile.am +++ b/ext/gl/Makefile.am @@ -110,6 +110,9 @@ libgstopengl_la_LIBADD = \ $(LIBM) \ $(GRAPHENE_LIBS) +data_DATA = shaders/gray_shader.fs shaders/fisheye_shader.fs shaders/tunnel_shader.fs shaders/twirl_shader.fs +EXTRA_DIST = shaders/gray_shader.fs shaders/fisheye_shader.fs shaders/tunnel_shader.fs shaders/twirl_shader.fs + libgstopengl_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) libgstopengl_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS) diff --git a/ext/gl/shaders/fisheye_shader.fs b/ext/gl/shaders/fisheye_shader.fs new file mode 100755 index 0000000..a57a203 --- /dev/null +++ b/ext/gl/shaders/fisheye_shader.fs @@ -0,0 +1,14 @@ +precision mediump float; +varying vec2 v_texcoord; +uniform sampler2D tex; +void main () { + vec2 texturecoord = v_texcoord.xy; + vec2 normcoord; + normcoord = texturecoord - 0.5; + float r = length (normcoord); + normcoord *= r * 1.414; + texturecoord = normcoord + 0.5; + vec4 color = texture2D (tex, texturecoord); + gl_FragColor = color; +} + diff --git a/ext/gl/shaders/gray_shader.fs b/ext/gl/shaders/gray_shader.fs new file mode 100755 index 0000000..75e9790 --- /dev/null +++ b/ext/gl/shaders/gray_shader.fs @@ -0,0 +1,12 @@ +precision mediump float; +varying vec2 v_texcoord; +uniform sampler2D tex; +void main () { + vec4 color = texture2D (tex, v_texcoord.xy); + float y = dot(color.rgb, vec3(0.2125, 0.7154, 0.0721)); + color.r = y; + color.g = y; + color.b = y; + gl_FragColor = color; +} + diff --git a/ext/gl/shaders/tunnel_shader.fs b/ext/gl/shaders/tunnel_shader.fs new file mode 100755 index 0000000..5888c92 --- /dev/null +++ b/ext/gl/shaders/tunnel_shader.fs @@ -0,0 +1,14 @@ +precision mediump float; +varying vec2 v_texcoord; +uniform sampler2D tex; +void main () { + vec2 texturecoord = v_texcoord.xy; + vec2 normcoord; + normcoord = (texturecoord - 0.5); + float r = length(normcoord); + normcoord *= clamp (r, 0.0, 0.275) / r; + texturecoord = normcoord + 0.5; + vec4 color = texture2D (tex, texturecoord); + gl_FragColor = color; +} + diff --git a/ext/gl/shaders/twirl_shader.fs b/ext/gl/shaders/twirl_shader.fs new file mode 100755 index 0000000..2b9d5fd --- /dev/null +++ b/ext/gl/shaders/twirl_shader.fs @@ -0,0 +1,21 @@ +precision mediump float; +varying vec2 v_texcoord; +uniform sampler2D tex; +void main () { + vec2 texturecoord = v_texcoord.xy; + vec2 normcoord; + normcoord = texturecoord - 0.5; + float r = length (normcoord); + // calculate rotation angle: maximum (about pi/2) at the origin and + // gradually decrease it up to 0.6 of each quadrant + float phi = (1.0 - smoothstep (0.0, 0.3, r)) * 1.6; + // precalculate sin phi and cos phi, save some alu + float s = sin(phi); + float c = cos(phi); + // rotate + normcoord *= mat2(c, s, -s, c); + texturecoord = normcoord + 0.5; + vec4 color = texture2D (tex, texturecoord); + gl_FragColor = color; +} + -- 1.7.9.5