1/* 2 Dot 'n bloom shader 3 Author: Themaister 4 License: Public domain 5*/ 6// modified by slime73 for use with love pixeleffects 7 8 9extern vec2 textureSize; 10 11const float gamma = 2.4; 12const float shine = 0.05; 13const float blend = 0.65; 14 15float dist(vec2 coord, vec2 source) 16{ 17 vec2 delta = coord - source; 18 return sqrt(dot(delta, delta)); 19} 20 21float color_bloom(vec3 color) 22{ 23 const vec3 gray_coeff = vec3(0.30, 0.59, 0.11); 24 float bright = dot(color, gray_coeff); 25 return mix(1.0 + shine, 1.0 - shine, bright); 26} 27 28vec3 lookup(float offset_x, float offset_y, vec2 coord) 29{ 30 vec2 offset = vec2(offset_x, offset_y); 31 vec3 color = Texel(_tex0_, coord).rgb; 32 float delta = dist(fract(gl_TexCoord[0].xy * textureSize), offset + vec2(0.5)); 33 return color * exp(-gamma * delta * color_bloom(color)); 34} 35 36vec4 effect(vec4 vcolor, Image texture, vec2 tex, vec2 pixel_coords) 37{ 38 float dx = 1.0 / textureSize.x; 39 float dy = 1.0 / textureSize.y; 40 41 // number a = Texel(texture, tex).a; 42 43 vec2 c00 = tex + vec2(-dx, -dy); 44 vec2 c10 = tex + vec2( 0, -dy); 45 vec2 c20 = tex + vec2( dx, -dy); 46 vec2 c01 = tex + vec2(-dx, 0); 47 vec2 c11 = tex + vec2( 0, 0); 48 vec2 c21 = tex + vec2( dx, 0); 49 vec2 c02 = tex + vec2(-dx, dy); 50 vec2 c12 = tex + vec2( 0, dy); 51 vec2 c22 = tex + vec2( dx, dy); 52 53 vec3 mid_color = lookup(0.0, 0.0, c11); 54 vec3 color = vec3(0.0); 55 color += lookup(-1.0, -1.0, c00); 56 color += lookup( 0.0, -1.0, c10); 57 color += lookup( 1.0, -1.0, c20); 58 color += lookup(-1.0, 0.0, c01); 59 color += mid_color; 60 color += lookup( 1.0, 0.0, c21); 61 color += lookup(-1.0, 1.0, c02); 62 color += lookup( 0.0, 1.0, c12); 63 color += lookup( 1.0, 1.0, c22); 64 vec3 out_color = mix(1.2 * mid_color, color, blend); 65 66 return vec4(out_color, 1.0); 67} 68