uniform sampler2D tex; uniform vec2 sunpos; #define SAMPLES 12 const float decaystep = 0.88; out vec4 FragColor; void main() { vec2 uv = 4. * gl_FragCoord.xy / u_screen; vec2 texc = uv; vec2 tosun = sunpos - texc; // if (dot(tosun, tosun) > 0.49) discard; vec2 dist = tosun * 1.0/(float(SAMPLES) * 1.12); vec3 col = texture(tex, texc).xyz; float decay = 1.0; for (int i = 0; i < SAMPLES; i++) { texc += dist; vec3 here = texture(tex, texc).xyz; here *= decay; col += here; decay *= decaystep; } FragColor = vec4(col, 1.0) * 0.8; }