Zunesha

Shader para criar progressbars usando máscaras para obter outros formatos

Oct 17th, 2025
1,491
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Shader para criar progressbars usando máscaras para obter outros formatos
  2.  
  3. shader_type canvas_item;
  4.  
  5. uniform sampler2D mask_texture;
  6. uniform float progress : hint_range(0.0, 1.0);
  7. uniform vec4 fill_color : source_color;
  8. uniform vec4 empty_color : source_color;
  9. uniform int fill_direction : hint_enum("Vertical", "Horizontal") = 0;
  10.  
  11. void fragment() {
  12.     vec4 mask = texture(mask_texture, UV);
  13.     if (mask.a < 0.01) {
  14.         discard;
  15.     }
  16.  
  17.     float uv_pos;
  18.    
  19.     // Define qual eixo vai ser usado pro preenchimento
  20.     if (fill_direction == 0) {
  21.         // Vertical (de baixo pra cima)
  22.         uv_pos = 1.0 - UV.y;
  23.     } else {
  24.         // Horizontal (da esquerda pra direita)
  25.         uv_pos = UV.x;
  26.     }
  27.  
  28.     // Define se o pixel está preenchido
  29.     float is_filled = step(uv_pos, progress);
  30.  
  31.     // Mistura as cores conforme o preenchimento
  32.     vec4 chosen = mix(empty_color, fill_color, is_filled);
  33.     COLOR = vec4(chosen.rgb, mask.a * chosen.a);
  34. }
Advertisement
Add Comment
Please, Sign In to add comment