View difference between Paste ID: Tx8uM28a and DdXjPdKx
SHOW: | | - or go back to the newest paste.
1
/*
2
   Color Mangler
3
   Author: hunterk
4
   License: Public domain
5
*/
6
7
#pragma parameter display_gamma "Display Gamma" 2.2 0.0 10.0 0.1
8
#pragma parameter target_gamma "Target Gamma" 2.2 0.0 10.0 0.1
9
#pragma parameter sat "Saturation" 1.0 0.0 3.0 0.01
10
#pragma parameter lum "Luminance" 1.0 0.0 5.0 0.01
11
#pragma parameter cntrst "Contrast" 1.0 0.0 2.0 0.01
12
#pragma parameter vignette "Vignette Toggle" 1.0 0.0 1.0 1.0
13
#pragma parameter hotspot "Hotspot" 0.0 0.0 1.0 0.1
14
#pragma parameter inner "Inner Ring" 0.35 0.0 1.0 0.01
15
#pragma parameter outer "Outer Ring" 0.7 0.0 1.0 0.01
16
#pragma parameter r "Red" 1.0 0.0 2.0 0.01
17
#pragma parameter g "Green" 1.0 0.0 2.0 0.01
18
#pragma parameter b "Blue" 1.0 0.0 2.0 0.01
19
#pragma parameter rg "Red-Green Tint" 0.0 0.0 1.0 0.005
20
#pragma parameter rb "Red-Blue Tint" 0.0 0.0 1.0 0.005
21
#pragma parameter gr "Green-Red Tint" 0.0 0.0 1.0 0.005
22
#pragma parameter gb "Green-Blue Tint" 0.0 0.0 1.0 0.005
23
#pragma parameter br "Blue-Red Tint" 0.0 0.0 1.0 0.005
24
#pragma parameter bg "Blue-Green Tint" 0.0 0.0 1.0 0.005
25
#pragma parameter blr "Black-Red Tint" 0.0 0.0 1.0 0.005
26
#pragma parameter blg "Black-Green Tint" 0.0 0.0 1.0 0.005
27
#pragma parameter blb "Black-Blue Tint" 0.0 0.0 1.0 0.005
28
29
30
#if defined(VERTEX)
31
32
#if __VERSION__ >= 130
33
#define COMPAT_VARYING out
34
#define COMPAT_ATTRIBUTE in
35
#define COMPAT_TEXTURE texture
36
#else
37
#define COMPAT_VARYING varying 
38
#define COMPAT_ATTRIBUTE attribute 
39
#define COMPAT_TEXTURE texture2D
40
#endif
41
42
#ifdef GL_ES
43
#define COMPAT_PRECISION mediump
44
#else
45
#define COMPAT_PRECISION
46
#endif
47
48
COMPAT_ATTRIBUTE vec4 VertexCoord;
49
COMPAT_ATTRIBUTE vec4 COLOR;
50
COMPAT_ATTRIBUTE vec4 TexCoord;
51
COMPAT_VARYING vec4 COL0;
52
COMPAT_VARYING vec4 TEX0;
53
54
uniform mat4 MVPMatrix;
55
uniform COMPAT_PRECISION int FrameDirection;
56
uniform COMPAT_PRECISION int FrameCount;
57
uniform COMPAT_PRECISION vec2 OutputSize;
58
uniform COMPAT_PRECISION vec2 TextureSize;
59
uniform COMPAT_PRECISION vec2 InputSize;
60
61
// compatibility #defines
62
#define vTexCoord TEX0.xy
63
#define SourceSize vec4(TextureSize, 1.0 / TextureSize) //either TextureSize or InputSize
64
#define OutSize vec4(OutputSize, 1.0 / OutputSize)
65
66
void main()
67
{
68
   gl_Position = MVPMatrix * VertexCoord;
69
   TEX0.xy = TexCoord.xy;
70
}
71
72
#elif defined(FRAGMENT)
73
74
#ifdef GL_ES
75
#ifdef GL_FRAGMENT_PRECISION_HIGH
76
precision highp float;
77
#else
78
precision mediump float;
79
#endif
80
#define COMPAT_PRECISION mediump
81
#else
82
#define COMPAT_PRECISION
83
#endif
84
85
#if __VERSION__ >= 130
86
#define COMPAT_VARYING in
87
#define COMPAT_TEXTURE texture
88
out COMPAT_PRECISION vec4 FragColor;
89
#else
90
#define COMPAT_VARYING varying
91
#define FragColor gl_FragColor
92
#define COMPAT_TEXTURE texture2D
93
#endif
94
95
uniform COMPAT_PRECISION int FrameDirection;
96
uniform COMPAT_PRECISION int FrameCount;
97
uniform COMPAT_PRECISION vec2 OutputSize;
98
uniform COMPAT_PRECISION vec2 TextureSize;
99
uniform COMPAT_PRECISION vec2 InputSize;
100
uniform sampler2D Texture;
101
COMPAT_VARYING vec4 TEX0;
102
103
// compatibility #defines
104
#define Source Texture
105
#define vTexCoord TEX0.xy
106
107
#define SourceSize vec4(TextureSize, 1.0 / TextureSize) //either TextureSize or InputSize
108
#define OutSize vec4(OutputSize, 1.0 / OutputSize)
109
110
#ifdef PARAMETER_UNIFORM
111
uniform COMPAT_PRECISION float display_gamma;
112
uniform COMPAT_PRECISION float target_gamma;
113
uniform COMPAT_PRECISION float sat;
114
uniform COMPAT_PRECISION float lum;
115
uniform COMPAT_PRECISION float cntrst;
116
uniform COMPAT_PRECISION float blr;
117
uniform COMPAT_PRECISION float blg;
118
uniform COMPAT_PRECISION float blb;
119
uniform COMPAT_PRECISION float r;
120
uniform COMPAT_PRECISION float g;
121
uniform COMPAT_PRECISION float b;
122
uniform COMPAT_PRECISION float rg;
123
uniform COMPAT_PRECISION float rb;
124
uniform COMPAT_PRECISION float gr;
125
uniform COMPAT_PRECISION float gb;
126
uniform COMPAT_PRECISION float br;
127
uniform COMPAT_PRECISION float bg;
128
uniform COMPAT_PRECISION float hotspot;
129
uniform COMPAT_PRECISION float vignette;
130
uniform COMPAT_PRECISION float inner;
131
uniform COMPAT_PRECISION float outer;
132
#else
133
#define display_gamma 2.2
134
#define target_gamma 2.2
135
#define sat 1.0
136
#define lum 1.0
137
#define cntrst 1.0
138
#define blr 0.0
139
#define blg 0.0
140
#define blb 0.0
141
#define r 1.0
142
#define g 1.0
143
#define b 1.0
144
#define rg 0.0
145
#define rb 0.0
146
#define gr 0.0
147
#define gb 0.0
148
#define br 0.0
149
#define bg 0.0
150
#define inner 0.0
151
#define outer 1.0
152
#define hotspot 1.0
153
#define vignette 1.0
154
#endif
155
156
void main()
157
{
158
159
    vec3 vcolor = COMPAT_TEXTURE(Source, TEX0.xy).rgb;
160
// a simple calculation for the vignette/hotspot effects
161
	vec2 mid = vec2(0.49999, 0.49999) * InputSize / TextureSize;
162
	vec2 middle = TEX0.xy - mid;
163
	float len = length(middle);
164
	float vig = smoothstep(inner, outer, len);
165
166
	vcolor *= (vignette > 0.5) ? (1.0 - vig) : 1.0; // Vignette
167
	vcolor += ((1.0 - vig) * 0.2) * hotspot; // Hotspot
168
	vec4 vignetted = vec4(vcolor,1.0);
169
170
171
   vec4 screen = pow(vignetted, vec4(target_gamma)).rgba;
172
   vec4 avglum = vec4(0.5);
173
   screen = mix(screen, avglum, (1.0 - cntrst));
174
175
                   //  r    g    b  alpha ; alpha does nothing for our purposes
176
   mat4 color = mat4(  r,  rg,  rb, 0.0,  //red tint
177
                      gr,   g,  gb, 0.0,  //green tint
178
                      br,  bg,   b, 0.0,  //blue tint
179
                     blr, blg, blb, 0.0); //black tint
180
181-
   mat4 adjust = mat4((1.0 - sat) * 0.3086 + sat, (1.0 - sat) * 0.3086, (1.0 - sat) * 0.3086, 1.0,
181+
   mat4 adjust = mat4((1.0 - sat_r) * 0.2126 + sat_r, (1.0 - sat_r) * 0.2126, (1.0 - sat_r) * 0.2126, 1.0,
182-
                      (1.0 - sat) * 0.6094, (1.0 - sat) * 0.6094 + sat, (1.0 - sat) * 0.6094, 1.0,
182+
                      (1.0 - sat_g) * 0.7152, (1.0 - sat_g) * 0.7152 + sat_g, (1.0 - sat_g) * 0.7152, 1.0,
183-
                      (1.0 - sat) * 0.0820, (1.0 - sat) * 0.0820, (1.0 - sat) * 0.0820 + sat, 1.0,
183+
                      (1.0 - sat_b) * 0.0722, (1.0 - sat_b) * 0.0722, (1.0 - sat_b) * 0.0722 + sat_b, 1.0,
184
                      0.0, 0.0, 0.0, 1.0);
185
   color *= adjust;
186
   screen = clamp(screen * lum, 0.0, 1.0);
187
   screen = color * screen;
188
189
	
190
    FragColor = pow(screen, vec4(1.0 / display_gamma));
191
192
193
}
194
#endif