84 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			GLSL
		
	
	
	
	
	
			
		
		
	
	
			84 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			GLSL
		
	
	
	
	
	
| #version 450
 | |
| 
 | |
| #include "compiled.inc"
 | |
| 
 | |
| uniform sampler2D tex;
 | |
| 
 | |
| #ifdef _CPostprocess
 | |
| uniform vec4 PPComp13;
 | |
| #endif
 | |
| 
 | |
| in vec2 texCoord;
 | |
| out vec4 fragColor;
 | |
| 
 | |
| vec2 barrelDistortion(vec2 coord, float amt) {
 | |
| 	vec2 cc = coord - 0.5;
 | |
| 	float dist = dot(cc, cc);
 | |
| 	return coord + cc * dist * amt;
 | |
| }
 | |
| float sat(float value)
 | |
| {
 | |
| 	return clamp(value, 0.0, 1.0);
 | |
| }
 | |
| float linterp(float t) {
 | |
| 	return sat(1.0 - abs(2.0 * t - 1.0) );
 | |
| }
 | |
| float remap(float t, float a, float b ) {
 | |
| 	return sat((t - a) / (b - a));
 | |
| }
 | |
| vec4 spectrum_offset(float t) {
 | |
| 	vec4 ret;
 | |
| 	float low = step(t,0.5);
 | |
| 	float high = 1.0 - low;
 | |
| 	float minMap = 1.0;
 | |
| 	float maxMap = 6.0;
 | |
| 	float w = linterp( remap(t, minMap/maxMap, 5.0/maxMap ) );
 | |
| 	ret = vec4(low, 1.0, high, 1.) * vec4(1.0-w, w, 1.0-w, 1.0);
 | |
| 
 | |
| 	return pow(ret, vec4(1.0/2.2) );
 | |
| }
 | |
| 
 | |
| void main() {
 | |
| 
 | |
| 	#ifdef _CPostprocess
 | |
| 		float max_distort = PPComp13.x;
 | |
| 		int num_iter = int(PPComp13.y);
 | |
| 		int CAType = int(PPComp13.z);
 | |
| 		int on = int(PPComp13.w);
 | |
| 	#else
 | |
| 		float max_distort = compoChromaticStrength;
 | |
| 		int num_iter = compoChromaticSamples;
 | |
| 		int CAType = compoChromaticType;
 | |
| 		int on = 1;
 | |
| 	#endif
 | |
| 
 | |
| 	// Spectral
 | |
| 	if (CAType == 1) {
 | |
| 		float reci_num_iter_f = 1.0 / float(num_iter);
 | |
| 
 | |
| 		vec2 resolution = vec2(1,1);
 | |
| 		vec2 uv = (texCoord.xy/resolution.xy);
 | |
| 		vec4 sumcol = vec4(0.0);
 | |
| 		vec4 sumw = vec4(0.0);
 | |
| 		for (int i=0; i < num_iter; ++i)
 | |
| 		{
 | |
| 			float t = float(i) * reci_num_iter_f;
 | |
| 			vec4 w = spectrum_offset(t);
 | |
| 			sumw += w;
 | |
| 			sumcol += w * texture(tex, barrelDistortion(uv, 0.6 * max_distort * t));
 | |
| 		}
 | |
| 
 | |
| 		if (on == 1) fragColor = sumcol / sumw; else fragColor = texture(tex, texCoord);
 | |
| 	}
 | |
| 
 | |
| 	// Simple
 | |
| 	else {
 | |
| 		vec3 col = vec3(0.0);
 | |
| 		col.x = texture(tex, texCoord + ((vec2(0.0, 1.0) * max_distort) / vec2(1000.0))).x;
 | |
| 		col.y = texture(tex, texCoord + ((vec2(-0.85, -0.5) * max_distort) / vec2(1000.0))).y;
 | |
| 		col.z = texture(tex, texCoord + ((vec2(0.85, -0.5) * max_distort) / vec2(1000.0))).z;
 | |
| 		if (on == 1) fragColor = vec4(col.x, col.y, col.z, fragColor.w); 
 | |
| 		else fragColor = texture(tex, texCoord);
 | |
| 	}
 | |
| }
 |