shade 0.0.5

Another graphics library
Documentation
#version 330 core

out vec4 o_fragColor;

const float PI = 3.14159265358979323846;
const float TAU = PI + PI;

in vec4 v_color1;
in vec4 v_color2;
in vec2 v_uv;

#ifdef SOURCE_TEXTURE
uniform sampler2D u_texture;
#endif

// -- Compute Gradient Distance -----------------------------------
float compute_distance(vec2 uv) {
	#ifdef SHAPE_LINEAR
		return uv.x;
	#elif defined(SHAPE_RADIAL)
		return length(uv);
	#elif defined(SHAPE_SQUARE)
		return abs(uv.x) + abs(uv.y);
	#elif defined(SHAPE_SCONE)
		return abs(atan(uv.x, uv.y)) / PI;
	#elif defined(SHAPE_ACONE)
		return (atan(uv.x, uv.y) / TAU) + 0.5;
	#elif defined(SHAPE_SPIRAL)
		return length(uv) + ((atan(uv.x, uv.y) / TAU) + 0.5);
	#else
		return 0.0;
	#endif
}

// -- Repeat Modes ------------------------------------------------
float apply_repeat(float d) {
	#ifdef REPEAT_ONE
		return clamp(d, 0.0, 1.0);
	#elif defined(REPEAT_MIRROR)
		return abs(fract(d) - 0.5) * 2.0;
	#elif defined(REPEAT_WRAP)
		return fract(d);
	#elif defined(REPEAT_BI)
		return clamp(abs(d - 1.0), 0.0, 1.0);
	#else
		return d;
	#endif
}

// -- Gradient Source ---------------------------------------------
vec4 get_gradient_color(float s) {
	#ifdef SOURCE_COLOR
		s = smoothstep(0.0, 1.0, s);
		return mix(v_color1, v_color2, s);
	#elif defined(SOURCE_TEXTURE)
		return texture(u_texture, vec2(0.5, s));
	#else
		return vec4(1.0, 0.0, 1.0, 1.0); // fallback pink
	#endif
}

void main() {
	float d = compute_distance(v_uv);
	float s = apply_repeat(d);
	o_fragColor = get_gradient_color(s);
}