File: post-f.sdr

package info (click to toggle)
freespace2 24.0.2%2Brepack-1
  • links: PTS, VCS
  • area: non-free
  • in suites: trixie
  • size: 43,188 kB
  • sloc: cpp: 583,107; ansic: 21,729; python: 1,174; sh: 464; makefile: 248; xml: 181
file content (99 lines) | stat: -rw-r--r-- 2,647 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
in vec4 fragTexCoord;

out vec4 fragOut0;

uniform sampler2D tex;
uniform sampler2D depth_tex;

layout (std140) uniform genericData {
	float timer;
	float noise_amount;
	float saturation;
	float brightness;

	float contrast;
	float film_grain;
	float tv_stripes;
	float cutoff;

	vec3 tint;
	float dither;
};

void main()
{
 #ifdef FLAG_DISTORT_NOISE
 // Distort noise
	float distort_factor = timer * sin(fragTexCoord.x * fragTexCoord.y * 100.0 + timer);
	distort_factor = mod(distort_factor, 8.0) * mod(distort_factor, 4.0);
	vec2 distort;
	distort = vec2(mod(distort_factor, noise_amount), mod(distort_factor, noise_amount + 0.002));
 #else
	vec2 distort = vec2(0, 0);
 #endif
 // Global constant
	vec4 color_in = texture(tex, fragTexCoord.xy + distort);
	vec4 color_out;
 #ifdef FLAG_SATURATION
 // Saturation
	vec4 color_grayscale = color_in;
	color_grayscale.rgb = vec3(dot(color_in.rgb, vec3(0.299, 0.587, 0.184)));
	color_out = mix(color_in, color_grayscale, 1.0 - saturation);
 #else
	color_out = color_in;
 #endif
 #ifdef FLAG_BRIGHTNESS
 // Brightness
	vec3 Afactor = vec3(brightness);
	color_out.rgb = color_out.rgb * Afactor;
 #endif
 #ifdef FLAG_CONTRAST
 // Contrast
	vec3 Bfactor = vec3(0.5 - 0.5 * contrast);
	color_out.rgb = color_out.rgb + Bfactor;
 #endif
 #ifdef FLAG_GRAIN
 // Film Grain
	float x = fragTexCoord.x * fragTexCoord.y * timer * 1000.0;
	x = mod(x, 13.0) * mod(x, 123.0);
	float dx = mod(x, 0.01);
	vec3 result = color_out.rgb + color_out.rgb * clamp(0.1 + dx * 100.0, 0.0, 1.0);
	color_out.rgb = mix(color_out.rgb, result, film_grain);
 #endif
 #ifdef FLAG_STRIPES
 // TV-Stripes (Old School)
	vec2 sc;
	sc.x = sin(fragTexCoord.y * 2048.0);
	sc.y = cos(fragTexCoord.y * 2048.0);
	vec3 stripes = color_out.rgb + color_out.rgb * vec3(sc.x, sc.y, sc.x) * 0.8;
	color_out.rgb = mix(color_out.rgb, stripes, tv_stripes);
 #endif
 #ifdef FLAG_CUTOFF
	// Experimental cutoff shader
	if (cutoff > 0.0) {
		vec4 color_greyscale;
		color_greyscale.rgb = vec3(dot(color_in.rgb, vec3(0.299, 0.587, 0.184)));
		vec4 normalized_col;
		float col_length = (length(color_out.rgb));
		if (col_length > 1.0) {
			normalized_col = ((color_out)/col_length);
		} else {
			normalized_col = color_out;
		}
		vec3 unit_grey = vec3(0.5773);
		float sat = dot(normalized_col.rgb, unit_grey);
		color_out = mix(color_greyscale, color_out, sat * cutoff);
	}
 #endif
 #ifdef FLAG_DITH
 // Dithering
	float downsampling_factor = 4;
	float bias = 0.5;
	color_out.rgb = floor(color_out.rgb * downsampling_factor + bias) / downsampling_factor;
 #endif
 #ifdef FLAG_TINT
	color_out.rgb += tint;
 #endif
	color_out.a = 1.0;
	fragOut0 = color_out;
}