source: trunk/tools/neercs/video/postfx.lolfx @ 1622

Last change on this file since 1622 was 1622, checked in by rez, 10 years ago

updated logo (again) + better text canvas size (unfinished)

File size: 2.7 KB
Line 
1-- GLSL.Vert --
2
3#version 120
4
5void main()
6        {
7        gl_Position=gl_Vertex;
8        gl_TexCoord[0]=gl_MultiTexCoord0;
9        }
10
11-- GLSL.Frag --
12
13#version 120
14
15uniform sampler2D texture;
16uniform vec2 screen_size;
17uniform float time;
18uniform float flash;
19uniform float value;
20uniform float deform;
21uniform bool scanline;
22uniform float sync;
23
24const float PI=3.14159265358979323846;
25float lens=PI/(deform+sync*0.0625);
26
27vec2 zoom(in vec2 p,in float radius)
28        {
29        float zoom=1.5-(radius*cos(p.x*PI/lens)+radius*cos(p.y*PI/lens));
30        return vec2(p.x*zoom-0.5,p.y*zoom-0.5);
31        }
32
33vec3 get_color(in sampler2D tex,in vec2 p)
34        {
35        //return (p.x<-1.0||p.x>0.0||p.y<-1.0||p.y>0.0)?vec3(0.0,0.0,0.0):texture2D(tex,p).xyz; /* old code */
36        return texture2D(tex,clamp(p,-1.0,0.0)).xyz;
37        }
38
39float rand(in vec2 p)
40        {
41        return fract(sin(dot(p.xy,vec2(12.9898,78.233)))*43758.5453);
42        }
43
44float rounded_square(in vec2 rect,in float r)
45        {
46        vec2 b=rect-vec2(r);
47        vec2 p=vec2(gl_TexCoord[0].xy-screen_size.xy*0.5);
48        return length(max(abs(p)-b,0.0))-r;
49        }
50
51vec3 letterbox(in vec3 c)
52        {
53        vec2 rect=screen_size*0.49;
54        float r=screen_size.x*0.1;
55        float f=1.0-clamp(rounded_square(rect,r),0.0,1.0);
56        return c*f;
57        }
58
59void main(void)
60        {
61        vec2 q=gl_TexCoord[0].xy;
62        vec2 p=-1.0+2.0*gl_TexCoord[0].xy;
63        p.y+=0.025*sync;
64        vec2 z =zoom(p,0.5250);
65        vec2 z1=zoom(p,0.5225);
66        vec2 z2=zoom(p,0.5275);
67        float g=(2.0-cos(PI/lens/2.0+z.x*PI/lens)-cos(PI/lens/2.0+z.y*PI/lens))*32.0;
68
69        float rnd1=rand(vec2(p.x+time,p.y-time));
70        float rnd2=rand(vec2(p.x-time,p.y+time));
71        float d1=rnd1*value/float(screen_size.x);
72        float d2=rnd2*value/float(screen_size.y);
73
74        vec3 source;//=get_color(texture,z);
75        source.x=get_color(texture,vec2(z.x+d1,z.y)).x;
76        source.y=get_color(texture,vec2(z.x+d1,z.y)).y;
77        source.z=get_color(texture,vec2(z.x+d1,z.y)).z;
78
79        vec3 glass1=get_color(texture,z1);
80        vec3 glass2=get_color(texture,z2);
81
82        float v=value/float(screen_size.x)*g;
83
84        vec3 noise;
85        noise.x=get_color(texture,vec2(z.x+d1-v,z.y+d2)).x;
86        noise.y=get_color(texture,vec2(z.x+d1  ,z.y-d2)).y;
87        noise.z=get_color(texture,vec2(z.x+d1+v,z.y-d2)).z;
88
89        vec3 color=source+glass1*glass1*0.25+glass2*glass2*0.25+(scanline?noise:source);
90
91        color+=flash;                                                                                                                           // flash
92        if(scanline)
93                {
94                color-=0.0125*mod(z.y*4.0+time*0.25,1.0);                                                               // electron beam
95                color-=(vec3(rnd1,rnd1,rnd1)-vec3(rnd2,rnd2,rnd2))*0.1;                                 // noise
96                color*=0.75+0.25*sin(z.x*float(screen_size.x*2));                                               // scanline w
97                color*=0.90+0.10*cos(z.y*float(screen_size.y))*sin(0.5+z.x*float(screen_size.x));       // scanline h
98                }
99        else
100                {
101                color*=0.675;
102                }
103        color=vec3(color.x*0.875,color.y*1.0,color.z*0.625);
104        color*=q.x*(6.0-q.x*6.0)*q.y*(6.0-q.y*6.0);                                                                     // vignetting
105        //color=vec3(1.0,1.0,1.0);
106        //color=letterbox(color);                                                                                                               // letterbox
107        gl_FragColor=vec4(color,1.0);
108        }
Note: See TracBrowser for help on using the repository browser.