grunk/addons/ursc/canvas_item/dithering.gdshader

31 lines
660 B
Plaintext
Raw Normal View History

2025-03-16 16:59:30 -06:00
#pragma disable_preprocessor
shader_type canvas_item;
// 0: bypass
uniform float color_depth: hint_range(0, 32, 8) = 24;
uniform sampler2D dithering_pattern_texture:
hint_default_white, repeat_enable, filter_nearest;
void fragment()
{
vec3 base_color = texture(TEXTURE, UV).rgb;
if (color_depth > 0.0)
{
vec2 dpt_size = vec2(textureSize(dithering_pattern_texture, 0));
vec2 texture_size = vec2(textureSize(TEXTURE, 0));
vec3 dithering = texture(
dithering_pattern_texture, UV * (texture_size / dpt_size)).rgb - 0.5;
COLOR.rgb = round(
base_color.rgb * color_depth + dithering) / color_depth;
}
else
{
COLOR.rgb = base_color;
}
}