1
0
Fork 0
mirror of https://github.com/Orama-Interactive/Pixelorama.git synced 2025-01-31 15:39:49 +00:00
Pixelorama/src/Shaders/DropShadow.tres
AlphinAlbukhari 55b5cc3932
Fix drop shadow (#690)
* Fix drop shadow

* Connect signal

AffectOptionButton didn't work
2022-05-04 01:02:20 +03:00

35 lines
1.2 KiB
Plaintext

[gd_resource type="Shader" format=2]
[resource]
code = "shader_type canvas_item;
render_mode unshaded;
uniform vec2 shadow_offset; // Offset, in pixel coordinate [0, 1, 2, and so on]
uniform vec4 shadow_color;
uniform sampler2D selection;
void fragment() {
vec2 offset = shadow_offset * TEXTURE_PIXEL_SIZE; // Normalize shadow_offset to [0..1]
vec4 original = texture(TEXTURE, UV); // Original texture
float shadow = texture(TEXTURE, UV - offset).a; // Shadow, alpha only
shadow *= shadow_color.a; // Multiply this mask by shadow alpha
shadow = mix(0.0, shadow, texture(selection, UV).a); // Clip shadow by selection mask
shadow = mix(shadow, 0.0, original.a); // Erase shadow alpha on original area
// Make a border to prevent stretching pixels on the edge
vec2 border_uv = UV - offset;
border_uv -= 0.5;
border_uv *= 2.0;
border_uv = abs(border_uv);
float border = max(border_uv.x, border_uv.y);
border = floor(border);
border = 1.0 - clamp(border, 0.0, 1.0);
shadow *= border; // Clip shadow by border so no more stretching
COLOR.rgb = mix(original.rgb, shadow_color.rgb, shadow); // Set color on shadow area
COLOR.a = mix(original.a, 1.0, shadow); // Combine alpha
}"