automake upgrade
[gdash.git] / shaders / Dot_N_Bloom.shader
bloba4154aa19ab07fa1d6bdb954e58c0b33eb8c3597
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!--
3 Dot 'n bloom shader
4 Author: Themaister
5 License: Public domain
6 -->
7 <shader language="GLSL">
8 <vertex><![CDATA[
9 varying vec2 c00;
10 varying vec2 c10;
11 varying vec2 c20;
12 varying vec2 c01;
13 varying vec2 c11;
14 varying vec2 c21;
15 varying vec2 c02;
16 varying vec2 c12;
17 varying vec2 c22;
18 varying vec2 pixel_no;
19 uniform vec2 rubyTextureSize;
20 uniform vec2 rubyOutputSize;
21 uniform vec2 rubyInputSize;
23 void main()
25 gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
26 float dx = 1.0 / rubyTextureSize.x;
27 float dy = 1.0 / rubyTextureSize.y;
29 vec2 tex = gl_MultiTexCoord0.xy;
30 c00 = tex + vec2(-dx, -dy);
31 c10 = tex + vec2( 0, -dy);
32 c20 = tex + vec2( dx, -dy);
33 c01 = tex + vec2(-dx, 0);
34 c11 = tex + vec2( 0, 0);
35 c21 = tex + vec2( dx, 0);
36 c02 = tex + vec2(-dx, dy);
37 c12 = tex + vec2( 0, dy);
38 c22 = tex + vec2( dx, dy);
39 pixel_no = tex * rubyTextureSize;
42 ]]></vertex>
43 <fragment filter="nearest"><![CDATA[
44 uniform vec2 rubyTextureSize;
45 uniform sampler2D rubyTexture;
46 varying vec2 c00;
47 varying vec2 c10;
48 varying vec2 c20;
49 varying vec2 c01;
50 varying vec2 c11;
51 varying vec2 c21;
52 varying vec2 c02;
53 varying vec2 c12;
54 varying vec2 c22;
55 varying vec2 pixel_no;
57 const float gamma = 2.4;
58 const float shine = 0.25;
59 const float blend = 0.55;
61 float dist(vec2 coord, vec2 source)
63 vec2 delta = coord - source;
64 return sqrt(dot(delta, delta));
67 float color_bloom(vec3 color)
69 const vec3 gray_coeff = vec3(0.30, 0.59, 0.11);
70 float bright = dot(color, gray_coeff);
71 return mix(1.0 + shine, 1.0 - shine, bright);
74 vec3 lookup(float offset_x, float offset_y, vec2 coord)
76 vec2 offset = vec2(offset_x, offset_y);
77 vec3 color = texture2D(rubyTexture, coord).rgb;
78 float delta = dist(fract(pixel_no), offset + vec2(0.5));
79 return color * exp(-gamma * delta * color_bloom(color));
82 void main()
84 vec3 mid_color = lookup(0.0, 0.0, c11);
85 vec3 color = vec3(0.0);
86 color += lookup(-1.0, -1.0, c00);
87 color += lookup( 0.0, -1.0, c10);
88 color += lookup( 1.0, -1.0, c20);
89 color += lookup(-1.0, 0.0, c01);
90 color += mid_color;
91 color += lookup( 1.0, 0.0, c21);
92 color += lookup(-1.0, 1.0, c02);
93 color += lookup( 0.0, 1.0, c12);
94 color += lookup( 1.0, 1.0, c22);
95 vec3 out_color = mix(1.2 * mid_color, color, blend);
97 gl_FragColor = vec4(out_color, 1.0);
99 ]]></fragment>
100 </shader>