123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288 |
- #version GLSL_VERSION
- /*==============================================================================
- VARS
- ==============================================================================*/
- #var POST_EFFECT POST_EFFECT_NONE
- /*============================================================================*/
- #include <precision_statement.glslf>
- #include <std.glsl>
- uniform vec2 u_texel_size;
- uniform sampler2D u_color;
- #if POST_EFFECT == FLIP_CUBEMAP_COORDS
- uniform int u_tex_number;
- uniform vec2 u_delta;
- #endif
- #if POST_EFFECT == POST_EFFECT_DOF_BLUR
- uniform float u_dof_bokeh_intensity;
- #endif
- /*==============================================================================
- SHADER INTERFACE
- ==============================================================================*/
- GLSL_IN vec2 v_texcoord;
- //------------------------------------------------------------------------------
- GLSL_OUT vec4 GLSL_OUT_FRAG_COLOR;
- /*==============================================================================
- MAIN
- ==============================================================================*/
- void main(void) {
- #if POST_EFFECT == POST_EFFECT_NONE
- // copy exact
- GLSL_OUT_FRAG_COLOR = GLSL_TEXTURE(u_color, v_texcoord);
- #elif POST_EFFECT == POST_EFFECT_GRAYSCALE
- vec4 c = GLSL_TEXTURE(u_color, v_texcoord);
- GLSL_OUT_FRAG_COLOR.rgb = vec3((c.r + c.g + c.b) / 3.0);
- GLSL_OUT_FRAG_COLOR.a = 1.0;
- #elif POST_EFFECT == POST_EFFECT_BLUR
- vec2 offset = vec2(0.0, 0.0);
- vec2 delta = u_texel_size;
- vec4 color;
- color = GLSL_TEXTURE(u_color, v_texcoord);
- GLSL_OUT_FRAG_COLOR = color * 0.2270270270;
- offset += delta;
- color = GLSL_TEXTURE(u_color, v_texcoord + offset);
- GLSL_OUT_FRAG_COLOR += color * 0.1945945946;
- color = GLSL_TEXTURE(u_color, v_texcoord - offset);
- GLSL_OUT_FRAG_COLOR += color * 0.1945945946;
- offset += delta;
- color = GLSL_TEXTURE(u_color, v_texcoord + offset);
- GLSL_OUT_FRAG_COLOR += color * 0.1216216216;
- color = GLSL_TEXTURE(u_color, v_texcoord - offset);
- GLSL_OUT_FRAG_COLOR += color * 0.1216216216;
- offset += delta;
- color = GLSL_TEXTURE(u_color, v_texcoord + offset);
- GLSL_OUT_FRAG_COLOR += color * 0.0540540541;
- color = GLSL_TEXTURE(u_color, v_texcoord - offset);
- GLSL_OUT_FRAG_COLOR += color * 0.0540540541;
- offset += delta;
- color = GLSL_TEXTURE(u_color, v_texcoord + offset);
- GLSL_OUT_FRAG_COLOR += color * 0.0162162162;
- color = GLSL_TEXTURE(u_color, v_texcoord - offset);
- GLSL_OUT_FRAG_COLOR += color * 0.0162162162;
- #elif POST_EFFECT == POST_EFFECT_GLOW_BLUR
- vec2 offset = vec2(0.0, 0.0);
- vec2 delta = u_texel_size;
- vec4 color;
- // Sigma: 2.6
- // Kernel size: 21
- // 0.01% of the curve’s area outside the discrete kernel
- // Kernel (left side): [0.000102, 0.00041, 0.00142, 0.00425, 0.01099, 0.024549, 0.047383, 0.079019, 0.113861, 0.141763, 0.152507]
- color = GLSL_TEXTURE(u_color, v_texcoord);
- GLSL_OUT_FRAG_COLOR = color * (1.0 - step(0.0, -color.a)) * 0.152507;
- offset += delta;
- color = GLSL_TEXTURE(u_color, v_texcoord + offset);
- GLSL_OUT_FRAG_COLOR += color * (1.0 - step(0.0, -color.a)) * 0.141763;
- color = GLSL_TEXTURE(u_color, v_texcoord - offset);
- GLSL_OUT_FRAG_COLOR += color * (1.0 - step(0.0, -color.a)) * 0.141763;
- offset += delta;
- color = GLSL_TEXTURE(u_color, v_texcoord + offset);
- GLSL_OUT_FRAG_COLOR += color * (1.0 - step(0.0, -color.a)) * 0.113861;
- color = GLSL_TEXTURE(u_color, v_texcoord - offset);
- GLSL_OUT_FRAG_COLOR += color * (1.0 - step(0.0, -color.a)) * 0.113861;
- offset += delta;
- color = GLSL_TEXTURE(u_color, v_texcoord + offset);
- GLSL_OUT_FRAG_COLOR += color * (1.0 - step(0.0, -color.a)) * 0.079019;
- color = GLSL_TEXTURE(u_color, v_texcoord - offset);
- GLSL_OUT_FRAG_COLOR += color * (1.0 - step(0.0, -color.a)) * 0.079019;
- offset += delta;
- color = GLSL_TEXTURE(u_color, v_texcoord + offset);
- GLSL_OUT_FRAG_COLOR += color * (1.0 - step(0.0, -color.a)) * 0.047383;
- color = GLSL_TEXTURE(u_color, v_texcoord - offset);
- GLSL_OUT_FRAG_COLOR += color * (1.0 - step(0.0, -color.a)) * 0.047383;
- offset += delta;
- color = GLSL_TEXTURE(u_color, v_texcoord + offset);
- GLSL_OUT_FRAG_COLOR += color * (1.0 - step(0.0, -color.a)) * 0.024549;
- color = GLSL_TEXTURE(u_color, v_texcoord - offset);
- GLSL_OUT_FRAG_COLOR += color * (1.0 - step(0.0, -color.a)) * 0.024549;
- offset += delta;
- color = GLSL_TEXTURE(u_color, v_texcoord + offset);
- GLSL_OUT_FRAG_COLOR += color * (1.0 - step(0.0, -color.a)) * 0.01099;
- color = GLSL_TEXTURE(u_color, v_texcoord - offset);
- GLSL_OUT_FRAG_COLOR += color * (1.0 - step(0.0, -color.a)) * 0.01099;
- offset += delta;
- color = GLSL_TEXTURE(u_color, v_texcoord + offset);
- GLSL_OUT_FRAG_COLOR += color * (1.0 - step(0.0, -color.a)) * 0.00425;
- color = GLSL_TEXTURE(u_color, v_texcoord - offset);
- GLSL_OUT_FRAG_COLOR += color * (1.0 - step(0.0, -color.a)) * 0.00425;
- offset += delta;
- color = GLSL_TEXTURE(u_color, v_texcoord + offset);
- GLSL_OUT_FRAG_COLOR += color * (1.0 - step(0.0, -color.a)) * 0.00142;
- color = GLSL_TEXTURE(u_color, v_texcoord - offset);
- GLSL_OUT_FRAG_COLOR += color * (1.0 - step(0.0, -color.a)) * 0.00142;
- GLSL_OUT_FRAG_COLOR = clamp(GLSL_OUT_FRAG_COLOR, 0.0, 1.0);
- #elif POST_EFFECT == POST_EFFECT_DOF_BLUR
- vec2 offset = vec2(0.0, 0.0);
- vec2 delta = u_texel_size;
- vec4 color;
- vec4 avg_color;
- vec4 max_color;
- float coc;
- float bokeh_intensity = u_dof_bokeh_intensity;
- color = GLSL_TEXTURE(u_color, v_texcoord);
- avg_color = color;
- max_color = color;
- coc = color.a;
- delta = coc * delta;
- for (int i = 0; i < 12; i += 2) {
- offset += delta;
- color = GLSL_TEXTURE(u_color, v_texcoord + offset);
- avg_color += color;
- max_color = max(max_color, color);
- color = GLSL_TEXTURE(u_color, v_texcoord - offset);
- avg_color += color;
- max_color = max(max_color, color);
- }
- avg_color /= 13.0;
- GLSL_OUT_FRAG_COLOR = mix(avg_color, max_color, bokeh_intensity);
- #elif POST_EFFECT == POST_EFFECT_ALPHA_BLUR
- vec2 offset = vec2(0.0, 0.0);
- vec2 delta = u_texel_size;
- vec4 color;
- vec4 avg_color;
- vec4 max_color;
- color = GLSL_TEXTURE(u_color, v_texcoord);
- max_color = max(max_color, color);
- avg_color = color;
- avg_color.a = color.a * 0.2270270270;
- offset += delta;
- color = GLSL_TEXTURE(u_color, v_texcoord + offset);
- max_color.a = max(max_color.a, color.a);
- avg_color.a += color.a * 0.1945945946;
- color = GLSL_TEXTURE(u_color, v_texcoord - offset);
- max_color.a = max(max_color.a, color.a);
- avg_color.a += color.a * 0.1945945946;
- offset += delta;
- color = GLSL_TEXTURE(u_color, v_texcoord + offset);
- max_color.a = max(max_color.a, color.a);
- avg_color.a += color.a * 0.1216216216;
- color = GLSL_TEXTURE(u_color, v_texcoord - offset);
- max_color.a = max(max_color.a, color.a);
- avg_color.a += color.a * 0.1216216216;
- offset += delta;
- color = GLSL_TEXTURE(u_color, v_texcoord + offset);
- max_color.a = max(max_color.a, color.a);
- avg_color.a += color.a * 0.0540540541;
- color = GLSL_TEXTURE(u_color, v_texcoord - offset);
- max_color.a = max(max_color.a, color.a);
- avg_color.a += color.a * 0.0540540541;
- offset += delta;
- color = GLSL_TEXTURE(u_color, v_texcoord + offset);
- max_color.a = max(max_color.a, color.a);
- avg_color.a += color.a * 0.0162162162;
- color = GLSL_TEXTURE(u_color, v_texcoord - offset);
- max_color.a = max(max_color.a, color.a);
- avg_color.a += color.a * 0.0162162162;
- GLSL_OUT_FRAG_COLOR = mix(avg_color, max_color, 0.5);
- #elif POST_EFFECT == POST_EFFECT_EXTEND
- vec2 delta = u_texel_size;
- vec4 color = GLSL_TEXTURE(u_color, v_texcoord);
- GLSL_OUT_FRAG_COLOR = color;
- if (color.a == 0.0) {
- color = GLSL_TEXTURE(u_color, v_texcoord + delta);
- if (color.a > 0.0)
- GLSL_OUT_FRAG_COLOR = vec4(1.0, 1.0, 1.0, color.a);
- else {
- color = GLSL_TEXTURE(u_color, v_texcoord - delta);
- if (color.a > 0.0)
- GLSL_OUT_FRAG_COLOR = vec4(1.0, 1.0, 1.0, color.a);
- }
- }
- #elif POST_EFFECT == FLIP_CUBEMAP_COORDS
- float delta_x = u_delta[0];
- float delta_y = u_delta[1];
- float rel_x_dim = 1.0 / 3.0;
- float rel_y_dim = 0.5;
- vec2 scale = vec2(rel_x_dim, rel_y_dim);
- if (u_tex_number == 0) {
- // +X
- vec2 texcoord = mat2(0.0, -1.0, 1.0, 0.0) * v_texcoord * scale + vec2(2.0 * rel_x_dim, rel_y_dim);
- texcoord[0] = max(texcoord[0], 2.0 * rel_x_dim + delta_x);
- texcoord[1] = max(texcoord[1], delta_y);
- GLSL_OUT_FRAG_COLOR = GLSL_TEXTURE(u_color, vec2(texcoord[0], rel_y_dim - texcoord[1]));
- } else if (u_tex_number == 1) {
- // -X
- vec2 texcoord = mat2(0.0, -1.0, 1.0, 0.0) * v_texcoord * scale + vec2(0.0, rel_y_dim);
- texcoord[0] = max(texcoord[0], delta_x);
- texcoord[1] = min(texcoord[1], rel_y_dim - delta_y);
- GLSL_OUT_FRAG_COLOR = GLSL_TEXTURE(u_color, vec2(rel_x_dim - texcoord[0], texcoord[1]));
- } else if (u_tex_number == 2) {
- // +Y
- vec2 texcoord = v_texcoord * scale + vec2(2.0 * rel_x_dim, rel_y_dim);
- texcoord[0] = max(texcoord[0], 2.0 * rel_x_dim + delta_x);
- texcoord[1] = min(texcoord[1], 1.0 - delta_y);
- GLSL_OUT_FRAG_COLOR = GLSL_TEXTURE(u_color, vec2(texcoord[0], 1.5 - texcoord[1]));
- } else if (u_tex_number == 3) {
- // -Y
- vec2 texcoord = v_texcoord * scale + vec2(rel_x_dim, 0.0);
- texcoord[0] = max(texcoord[0], rel_x_dim + delta_x);
- texcoord[0] = min(texcoord[0], 2.0 * rel_x_dim - delta_x);
- texcoord[1] = min(texcoord[1], rel_y_dim - delta_y);
- GLSL_OUT_FRAG_COLOR = GLSL_TEXTURE(u_color, vec2(1.0 - texcoord[0], texcoord[1]));
- } else if (u_tex_number == 4) {
- // +Z
- vec2 texcoord = v_texcoord * scale + vec2(rel_x_dim, rel_y_dim);
- texcoord[0] = max(texcoord[0], rel_x_dim + delta_x);
- texcoord[0] = min(texcoord[0], 2.0 * rel_x_dim - delta_x);
- texcoord[1] = min(texcoord[1], 1.0 - delta_y);
- GLSL_OUT_FRAG_COLOR = GLSL_TEXTURE(u_color, vec2(texcoord[0], 3.0 * rel_y_dim - texcoord[1]));
- } else {
- // -Z
- vec2 texcoord = v_texcoord * scale + vec2(0.0, rel_y_dim);
- texcoord[0] = max(texcoord[0], delta_x);
- texcoord[1] = min(texcoord[1], 1.0 - delta_y);
- texcoord[1] = max(texcoord[1], rel_y_dim + delta_y);
- GLSL_OUT_FRAG_COLOR = GLSL_TEXTURE(u_color, vec2(rel_x_dim - texcoord[0], texcoord[1]));
- }
- #endif
- }
|