Shader para criar progressbars usando máscaras para obter outros formatos shader_type canvas_item; uniform sampler2D mask_texture; uniform float progress : hint_range(0.0, 1.0); uniform vec4 fill_color : source_color; uniform vec4 empty_color : source_color; uniform int fill_direction : hint_enum("Vertical", "Horizontal") = 0; void fragment() { vec4 mask = texture(mask_texture, UV); if (mask.a < 0.01) { discard; } float uv_pos; // Define qual eixo vai ser usado pro preenchimento if (fill_direction == 0) { // Vertical (de baixo pra cima) uv_pos = 1.0 - UV.y; } else { // Horizontal (da esquerda pra direita) uv_pos = UV.x; } // Define se o pixel está preenchido float is_filled = step(uv_pos, progress); // Mistura as cores conforme o preenchimento vec4 chosen = mix(empty_color, fill_color, is_filled); COLOR = vec4(chosen.rgb, mask.a * chosen.a); }