Skip to content

Instantly share code, notes, and snippets.

@andrew-wilkes
Created January 16, 2020 11:41
Show Gist options
  • Star 17 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save andrew-wilkes/44dea35c27517b0d8b7798f46a97b5b1 to your computer and use it in GitHub Desktop.
Save andrew-wilkes/44dea35c27517b0d8b7798f46a97b5b1 to your computer and use it in GitHub Desktop.
Circular Progress Shader in Godot Engine
shader_type canvas_item;
uniform float value: hint_range(0, 100); // %
uniform float thickness: hint_range(0, 100) = 30.; // % thickness
uniform sampler2D fg: hint_albedo;
uniform sampler2D bg: hint_black_albedo;
uniform float offset: hint_range(0, 100); // %
uniform float smoothing: hint_range(0, 100) = 5.;
void fragment() {
vec2 point = UV - vec2(0.5);
float PI = 3.14159265358979323846;
float ang = (1. - atan(point.x, point.y) / PI) * 50. - offset;
if (ang < 0.)
ang += 100.;
float s = smoothing / 1000.;
float k = PI / 2. / s;
float r1 = .5 - thickness / 200.;
float r2 = .5;
float r = length(point);
float uy = (r2 - r) / (r2 - r1);
if (r > r2 || r < r1)
COLOR.a = 0.;
else {
if (ang <= value)
COLOR = texture(fg, vec2(ang / 100., uy));
else
COLOR = texture(bg, vec2(ang / 100., uy));
if ((r2 - r) < s)
COLOR.a = sin((r2 - r) * k);
if ((r - r1) < s)
COLOR.a = sin((r - r1) * k);
}
}
@andrew-wilkes
Copy link
Author

circular-progress-bar

@andrew-wilkes
Copy link
Author

circular-progress-bar2

@andrew-wilkes
Copy link
Author

circular-progress-bar3

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment