Files
oak-editor/effects/dropshadow.frag
T

43 lines
1.1 KiB
GLSL

#version 110
uniform sampler2D image;
uniform vec2 resolution;
uniform int shadow;
uniform vec3 shadowcolor;
uniform float shadowsoftness;
uniform float shadowopacity;
uniform float shadowdistance;
varying vec2 vTexCoord;
void main(void) {
vec4 master_px = texture2D(image, vTexCoord);
if (shadow == 1) {
vec2 shadow_dist = vec2(shadowdistance)/resolution;
float shadow_opacity = 0.01*shadowopacity;
vec4 shadowed_px = vec4(shadowcolor.r, shadowcolor.g, shadowcolor.b, shadow_opacity*texture2D(image, vTexCoord-shadow_dist).a);
float rad = floor(shadowsoftness);
if (rad > 0.0) {
shadowed_px.a = 0.0;
float divider = (1.0 / pow(rad, 2.0))*shadow_opacity;
for (float x=-rad+0.5;x<=rad;x+=2.0) {
for (float y=-rad+0.5;y<=rad;y+=2.0) {
shadowed_px.a += shadow_opacity*texture2D(image, vTexCoord-shadow_dist+(vec2(x, y)/resolution)).a*divider;
}
}
}
vec4 shadow_blend = (shadowed_px*(1.0-master_px.a));
vec4 composition = mix(shadow_blend, master_px, master_px.a);
gl_FragColor = composition;
} else {
gl_FragColor = master_px;
}
}