| 123456789101112131415161718192021222324252627282930313233343536 |
- // Has 2 circles, an inner one that is unaffected and an outer one. Anything past the outer one is full red
- // and in-between is a gradient.
- light_mode unshaded;
- uniform highp vec3 color;
- uniform highp float time;
- // Uniforms because it makes testing way easier. If needed make it const.
- uniform highp float outerCircleRadius;
- uniform highp float outerCircleMaxRadius;
- uniform highp float innerCircleRadius;
- uniform highp float innerCircleMaxRadius;
- uniform highp float darknessAlphaOuter;
- const highp float darknessAlphaInner = 0.0;
- void fragment() {
- highp vec2 pixelSize = vec2(1.0/SCREEN_PIXEL_SIZE.x, 1.0/SCREEN_PIXEL_SIZE.y);
- highp vec2 pixelCenter = pixelSize*0.5;
- highp float distance = length(FRAGCOORD.xy - pixelCenter);
-
- highp float innerRadius = innerCircleRadius + time * (innerCircleMaxRadius - innerCircleRadius);
- highp float outerRadius = outerCircleRadius + time * (outerCircleMaxRadius - outerCircleRadius);
-
- if(distance > outerRadius) {
- COLOR = vec4(color.x, color.y, color.z, darknessAlphaOuter);
- }
- else if(distance < innerRadius) {
- COLOR = vec4(0.0, 0.0, 0.0, darknessAlphaInner);
- }
- else {
- highp float ratio = (distance - innerRadius) / (outerRadius - innerRadius);
- highp float alpha = darknessAlphaInner + (darknessAlphaOuter - darknessAlphaInner) * ratio;
- COLOR = vec4(color.x, color.y, color.z, alpha);
- }
- }
|