51 lines
1.1 KiB
GLSL
51 lines
1.1 KiB
GLSL
#version 120
|
|
/* DRAWBUFFERS:6 */
|
|
//overwrite buffer 6, final image is buffer 7
|
|
|
|
#define Bloom
|
|
#define bloom_strength 0.75
|
|
#define composite4
|
|
#include "/shaders.settings"
|
|
|
|
#ifdef Bloom
|
|
varying vec2 texcoord;
|
|
varying float eyeAdapt;
|
|
|
|
uniform sampler2D colortex6;
|
|
|
|
uniform int isEyeInWater;
|
|
uniform float rainStrength;
|
|
uniform float viewWidth;
|
|
uniform float viewHeight;
|
|
#endif
|
|
|
|
void main() {
|
|
|
|
#ifdef Bloom
|
|
const int nSteps = 17;
|
|
const int center = 8; //=nSteps-1 / 2
|
|
|
|
//huge gaussian blur for glare
|
|
vec3 blur = vec3(0.0);
|
|
float tw = 0.0;
|
|
for (int i = 0; i < nSteps; i++) {
|
|
float dist = abs(i-float(center))/center;
|
|
float weight = (exp(-(dist*dist)/ 0.28));
|
|
vec3 bsample = texture2D(colortex6,(texcoord.xy + vec2(1.0/viewWidth,1.0/viewHeight)*vec2(0.0,i-center))).rgb*3.0;
|
|
|
|
blur += bsample*weight;
|
|
tw += weight;
|
|
}
|
|
blur /= tw;
|
|
|
|
vec3 glow = blur * bloom_strength;
|
|
vec3 overglow = glow*pow(length(glow)*2.0,2.8)*2.0;
|
|
|
|
vec3 finalColor = (overglow+glow*1.15)*(1+isEyeInWater*10.0+(pow(rainStrength,3.0)*7.0/pow(eyeAdapt,1.0)))*1.2;
|
|
|
|
gl_FragData[0] = vec4(finalColor, 1.0);
|
|
#else
|
|
gl_FragData[0] = vec4(0.0);
|
|
#endif
|
|
}
|