diff --git a/extension.js b/extension.js index d1b813b..cff39d8 100644 --- a/extension.js +++ b/extension.js @@ -80,7 +80,7 @@ export default class BurnMyWindows extends Extension { new Matrix(), new PaintBrush(), new Pixelate(), new PixelWheel(), new PixelWipe(), new Portal(), new RGBWarp(), new SnapOfDisintegration(), new TeamRocket(), new TRexAttack(), new TVEffect(), new TVGlitch(), - new Wisps(), new Mushroom() + new Wisps(), new Mushroom() ]; // Load all of our resources. diff --git a/prefs.js b/prefs.js index 36ba1a8..8476964 100644 --- a/prefs.js +++ b/prefs.js @@ -83,7 +83,7 @@ export default class BurnMyWindowsPreferences extends ExtensionPreferences { Pixelate, PixelWheel, PixelWipe, Portal, RGBWarp, SnapOfDisintegration, TeamRocket, TRexAttack, TVEffect, - TVGlitch, Wisps, + TVGlitch, Wisps, ]; diff --git a/resources/shaders/aura-glow.frag b/resources/shaders/aura-glow.frag index 15cfdc2..e8f01f3 100644 --- a/resources/shaders/aura-glow.frag +++ b/resources/shaders/aura-glow.frag @@ -39,25 +39,23 @@ uniform float uFadeOut; uniform float uBlur; uniform vec2 uSeed; - /* this controls the end shape -5.0 large Star -3.0 Star 1.0 Dimond 2.0 Circle -3.0 Squircle +3.0 Squircle 5.0 Square */ uniform float uEdgeShape; -//the size of the edge color +// the size of the edge color uniform float uEdgeSize; -//soft <--> hard +// soft <--> hard uniform float uEdgeHardness; - // A simple blur function vec4 blur(vec2 uv, float radius, float samples) { vec4 color = vec4(0.0); @@ -77,122 +75,107 @@ vec4 blur(vec2 uv, float radius, float samples) { void main() { - // This gradually dissolves from [1..0] from the outside to the center. We - // switch the direction for opening and closing. - float progress = uForOpening ? uProgress : 1.0 - uProgress ; + // This gradually dissolves from [1..0] from the outside to the center. We + // switch the direction for opening and closing. + float progress = uForOpening ? uProgress : 1.0 - uProgress; - //adjusting for Gnome - if (uPadding > 0.0) - { - progress = remap( - progress, 0.0, ((uSize.x - (uPadding*2.0)) / uSize.x) - ,0.0, 1.0 - ); - } - + // adjusting for Gnome + if (uPadding > 0.0) { + progress = remap(progress, 0.0, ((uSize.x - (uPadding * 2.0)) / uSize.x), 0.0, 1.0); + } - // Get the color from the window texture. - vec4 oColor = getInputColor(iTexCoord.st); - - // Calculate the aspect ratio of the render area - float aspect = uSize.x / uSize.y; + // Get the color from the window texture. + vec4 oColor = getInputColor(iTexCoord.st); - //standard uv - vec2 uv = iTexCoord.st; + // Calculate the aspect ratio of the render area + float aspect = uSize.x / uSize.y; - // tuv is for when progress is near 0 - vec2 tuv = uv; - tuv -= 0.5; // Shift UV coordinates to center (from [-0.5 to 0.5]) - tuv.x *= aspect; // Scale x-coordinate to match aspect ratio - tuv += 0.5; // Shift UV coordinates back (from [0 to 1]) - - //mixing the UVs - uv = mix(tuv,uv,easeOutExpo(progress)); + // standard uv + vec2 uv = iTexCoord.st; - // this controls the shape - // -1.0 would be a diamond-ish - // 0.0 would be a rounded diamond - // 1.0 would be a circle - // 2.0 will be sqircle - // 1000.0 will be very square - float p = mix(uEdgeShape,1000.0, - easeInExpo(progress) - ); + // tuv is for when progress is near 0 + vec2 tuv = uv; + tuv -= 0.5; // Shift UV coordinates to center (from [-0.5 to 0.5]) + tuv.x *= aspect; // Scale x-coordinate to match aspect ratio + tuv += 0.5; // Shift UV coordinates back (from [0 to 1]) - //this will be used later to make a mask - float m = mix( - 0.0, - 1.0, - clamp( - pow(abs(uv.x-0.5)*2.0,p) + pow(abs(uv.y-0.5)*2.0,p),0.0,1.0 - ) - ); + // mixing the UVs + uv = mix(tuv, uv, easeOutExpo(progress)); + // this controls the shape + // -1.0 would be a diamond-ish + // 0.0 would be a rounded diamond + // 1.0 would be a circle + // 2.0 will be sqircle + // 1000.0 will be very square + float p = mix(uEdgeShape, 1000.0, easeInExpo(progress)); - //this calculates the edge of the effect - float edge = abs(m-progress) ; - float e = mix(0.0,uEdgeSize,1.0 - progress); - edge = remap(edge,0.0,e,0.0,1.0); - edge = clamp(edge,0.0,1.0); - edge = 1.0 - edge; + // this will be used later to make a mask + float m = + mix(0.0, 1.0, + clamp(pow(abs(uv.x - 0.5) * 2.0, p) + pow(abs(uv.y - 0.5) * 2.0, p), 0.0, 1.0)); - //this is the mask - float mask = (m > progress) ? 0.0 : 1.0 ; + // this calculates the edge of the effect + float edge = abs(m - progress); + float e = mix(0.0, uEdgeSize, 1.0 - progress); + edge = remap(edge, 0.0, e, 0.0, 1.0); + edge = clamp(edge, 0.0, 1.0); + edge = 1.0 - edge; - //we need two of these - float mask0 = mix(mask,mask+edge,1.0 - uEdgeHardness); - float mask1 = mix(edge,edge*mask,uEdgeHardness); + // this is the mask + float mask = (m > progress) ? 0.0 : 1.0; - //calculate color - vec3 color = cos(progress*uColorSpeed+uv.xyx+vec3(0,2,4)).xyz; - //coloroffset - float colorOffset = (uRandomColorOffset) ? hash12(uSeed) : uColorOffset ; - color = offsetHue(color, colorOffset + 0.10); - //clamp and saturate - color = clamp(color * uColorSaturation,vec3(0.0),vec3(1.0)); - - //save this for later - float oColorAlpha = oColor.a; + // we need two of these + float mask0 = mix(mask, mask + edge, 1.0 - uEdgeHardness); + float mask1 = mix(edge, edge * mask, uEdgeHardness); - //blur-ify - if (uBlur > 0.0) - { - //used for blur later ... - //calculate this before saturating it - float b = (color.r + color.g + color.b)/3.0; + // calculate color + vec3 color = cos(progress * uColorSpeed + uv.xyx + vec3(0, 2, 4)).xyz; + // coloroffset + float colorOffset = (uRandomColorOffset) ? hash12(uSeed) : uColorOffset; + color = offsetHue(color, colorOffset + 0.10); + // clamp and saturate + color = clamp(color * uColorSaturation, vec3(0.0), vec3(1.0)); - - oColor = blur( iTexCoord.st, b * uBlur * mask1, 7.0); - } + // save this for later + float oColorAlpha = oColor.a; - //apply masks and colors - oColor.a *= mask0; + // blur-ify + if (uBlur > 0.0) { + // used for blur later ... + // calculate this before saturating it + float b = (color.r + color.g + color.b) / 3.0; - //i was doing this to try to adjust for light mode - // i don;t like the way these make the effect look - // ...maybe a toggle for it later - /* - float oColorPercent = (oColor.r + oColor.g + oColor.b)/3.0; - oColor.r = mix(oColor.r , 1.0 - oColor.r, mask1 * oColorPercent); - oColor.g = mix(oColor.g , 1.0 - oColor.g, mask1 * oColorPercent); - oColor.b = mix(oColor.b , 1.0 - oColor.b, mask1 * oColorPercent); - // --or - oColor.r = mix(oColor.r , 0.0, mask1 * oColorPercent); - oColor.g = mix(oColor.g , 0.0, mask1 * oColorPercent); - oColor.b = mix(oColor.b , 0.0, mask1 * oColorPercent); - */ - - oColor += mask1 * vec4(color.rgb,1.0); - oColor.a *= oColorAlpha; + oColor = blur(iTexCoord.st, b * uBlur * mask1, 7.0); + } - //i want to fade out the last ~10% of the animation - float lastfade = remap(progress,0.0,uFadeOut,0.0,1.0); - lastfade = clamp(lastfade,0.0,1.0); - lastfade = easeInSine(lastfade); - - //apply the lastfade - oColor.a *= lastfade; + // apply masks and colors + oColor.a *= mask0; - setOutputColor(oColor); + // i was doing this to try to adjust for light mode + // i don;t like the way these make the effect look + // ...maybe a toggle for it later + /* + float oColorPercent = (oColor.r + oColor.g + oColor.b)/3.0; + oColor.r = mix(oColor.r , 1.0 - oColor.r, mask1 * oColorPercent); + oColor.g = mix(oColor.g , 1.0 - oColor.g, mask1 * oColorPercent); + oColor.b = mix(oColor.b , 1.0 - oColor.b, mask1 * oColorPercent); + // --or + oColor.r = mix(oColor.r , 0.0, mask1 * oColorPercent); + oColor.g = mix(oColor.g , 0.0, mask1 * oColorPercent); + oColor.b = mix(oColor.b , 0.0, mask1 * oColorPercent); + */ + oColor += mask1 * vec4(color.rgb, 1.0); + oColor.a *= oColorAlpha; + + // i want to fade out the last ~10% of the animation + float lastfade = remap(progress, 0.0, uFadeOut, 0.0, 1.0); + lastfade = clamp(lastfade, 0.0, 1.0); + lastfade = easeInSine(lastfade); + + // apply the lastfade + oColor.a *= lastfade; + + setOutputColor(oColor); } \ No newline at end of file diff --git a/resources/shaders/mushroom.frag b/resources/shaders/mushroom.frag index 31ad164..e1e873c 100644 --- a/resources/shaders/mushroom.frag +++ b/resources/shaders/mushroom.frag @@ -35,15 +35,15 @@ // use 8BitStyle or not (sliding scale) uniform float uScaleStyle; -//these are for the sparks +// these are for the sparks uniform float uSparkCount; uniform vec4 uSparkColor; uniform float uSparkRotation; -//these are for the Rays +// these are for the Rays uniform vec4 uRaysColor; -//these are for the stars +// these are for the stars uniform float uRingCount; uniform float uRingRotation; uniform float uStarCount; @@ -56,64 +56,65 @@ uniform vec4 uStarColor3; uniform vec4 uStarColor4; uniform vec4 uStarColor5; -//seed +// seed uniform vec2 uSeed; -//helps to find the angle -vec3 getPosByAngle(float angle) -{ - return vec3(cos(angle), sin(angle), 0); +// helps to find the angle +vec3 getPosByAngle(float angle) { return vec3(cos(angle), sin(angle), 0); } + +// gets the mask of a Star +float getStar(vec2 uv, vec2 center, float npoints, float radiusRatio, float size, + float rotation) { + + float radiusMax = 1.0; + float radiusMin = radiusMax * radiusRatio; + + float PI = 3.1415926; + float starangle = 2.0 * PI / npoints; // Angle between points on the star + + // Offset rotation to ensure one point is always up when rotation = 0 + rotation += PI / 2.0 - starangle / 1.0; + + // Define the positions for the outer and inner points of the star's initial angle, + // rotated by `rotation` + vec3 p0 = + (radiusMax * size) * getPosByAngle(rotation); // Outer point, rotated by `rotation` + vec3 p1 = (radiusMin * size) * + getPosByAngle(starangle + rotation); // Inner point, also rotated + + // Calculate the position of the current fragment relative to the star's center + vec2 curPosuv = + (uv - center); // Center UV coordinates, then scale to fit the star size + float curRadius = length(curPosuv); // Radius from center, no need to scale further + float curPosAngle = + atan(curPosuv.y, curPosuv.x) - rotation; // Calculate angle and adjust by `rotation` + + // Determine the fractional position within the current star segment + float a = + fract(curPosAngle / starangle); // Fractional angle position within one segment + if (a >= 0.5) + a = 1.0 - a; // Ensure we are within the first half of the segment (symmetry) + + // Calculate the current point on the star segment, applying rotation + a = a * starangle; // Actual angle for this position on the segment + vec3 curPos = curRadius * getPosByAngle(a + rotation); // Final position, rotated + + // Calculate directions for edge detection using cross product + vec3 dir0 = p1 - p0; // Vector from outer to inner point + vec3 dir1 = curPos - p0; // Vector from outer point to current position + + // Use cross product to determine if `curPos` is inside the star's edge + return step(0.0, + cross(dir0, dir1).z); // Returns 1.0 if inside, 0.0 if outside (solid edge) } - -//gets the mask of a Star -float getStar(vec2 uv, vec2 center, float npoints, float radiusRatio, float size, float rotation) -{ - - float radiusMax = 1.0; - float radiusMin = radiusMax * radiusRatio; - - float PI = 3.1415926; - float starangle = 2.0 * PI / npoints; // Angle between points on the star - - // Offset rotation to ensure one point is always up when rotation = 0 - rotation += PI / 2.0 - starangle / 1.0; - - // Define the positions for the outer and inner points of the star's initial angle, rotated by `rotation` - vec3 p0 = (radiusMax * size) * getPosByAngle(rotation); // Outer point, rotated by `rotation` - vec3 p1 = (radiusMin * size) * getPosByAngle(starangle + rotation); // Inner point, also rotated - - // Calculate the position of the current fragment relative to the star's center - vec2 curPosuv = (uv - center); // Center UV coordinates, then scale to fit the star size - float curRadius = length(curPosuv); // Radius from center, no need to scale further - float curPosAngle = atan(curPosuv.y, curPosuv.x) - rotation; // Calculate angle and adjust by `rotation` - - // Determine the fractional position within the current star segment - float a = fract(curPosAngle / starangle); // Fractional angle position within one segment - if (a >= 0.5) - a = 1.0 - a; // Ensure we are within the first half of the segment (symmetry) - - // Calculate the current point on the star segment, applying rotation - a = a * starangle; // Actual angle for this position on the segment - vec3 curPos = curRadius * getPosByAngle(a + rotation); // Final position, rotated - - // Calculate directions for edge detection using cross product - vec3 dir0 = p1 - p0; // Vector from outer to inner point - vec3 dir1 = curPos - p0; // Vector from outer point to current position - - // Use cross product to determine if `curPos` is inside the star's edge - return step(0.0, cross(dir0, dir1).z); // Returns 1.0 if inside, 0.0 if outside (solid edge) -} - - -//use to scale the window -vec2 scaleUV(vec2 uv, vec2 scale) -{ +// use to scale the window +vec2 scaleUV(vec2 uv, vec2 scale) { // Put texture coordinate origin to center of window. uv = uv * 2.0 - 1.0; - //scale - uv /= mix(vec2(1.0,1.0), vec2(0.0,0.0), scale); + // scale + uv /= mix(vec2(1.0, 1.0), vec2(0.0, 0.0), scale); // scale from center uv = uv * 0.5 + 0.5; @@ -121,89 +122,78 @@ vec2 scaleUV(vec2 uv, vec2 scale) return uv; } +// this returns the Spark +float getSpark(vec2 uv, vec2 center, float brightness, float size, float rotation) { + brightness = clamp(brightness, 0.001, 1.0); + size = clamp(size, 0.001, 1.0); + float bn = mix(0.0, 0.07, brightness); // recalculate size -//this returns the Spark -float getSpark(vec2 uv, vec2 center, float brightness, float size, float rotation) -{ - brightness = clamp(brightness,0.001,1.0); - size = clamp(size,0.001,1.0); - float bn = mix(0.0,0.07,brightness); //recalculate size - - uv = (uv + vec2(0.5)) ; - uv = (uv - center) ;//Center UV coordinates, then scale to fit the star size + uv = (uv + vec2(0.5)); + uv = (uv - center); // Center UV coordinates, then scale to fit the star size uv = scaleUV(uv, vec2(1.0 - size)); - uv = rotate(uv, rotation, vec2(0.5)); //rotate the UV + uv = rotate(uv, rotation, vec2(0.5)); // rotate the UV - //this is basically the brightness - float p = mix(-1.0,1000.0,easeInExpo(bn)); + // this is basically the brightness + float p = mix(-1.0, 1000.0, easeInExpo(bn)); - float m = mix( - 0.0, - 1.0, - clamp( - pow(abs(uv.x-0.5)*2.0,p) + pow(abs(uv.y-0.5)*2.0,p),0.0,1.0 - ) - ); + float m = + mix(0.0, 1.0, + clamp(pow(abs(uv.x - 0.5) * 2.0, p) + pow(abs(uv.y - 0.5) * 2.0, p), 0.0, 1.0)); + + float mask = easeInSine(1.0 - (m - bn)) - 0.004; + mask = clamp(mask, 0.0, 1.0); - - float mask = easeInSine(1.0 - (m - bn)) - 0.004 ; - mask = clamp(mask,0.0,1.0); - return mask; - } - -//returns the star's color +// returns the star's color vec4 getStarColor(float v, float alpha) { - // Clamp v to ensure it's in [0.0, 1.0] - v = clamp(v, 0.0, 1.0); + // Clamp v to ensure it's in [0.0, 1.0] + v = clamp(v, 0.0, 1.0); - // Define steps for color interpolation - float steps[6]; - steps[0] = 0.0; - steps[1] = 0.1666; - steps[2] = 0.3332; - steps[3] = 0.4998; - steps[4] = 0.6664; - steps[5] = 0.8330; + // Define steps for color interpolation + float steps[6]; + steps[0] = 0.0; + steps[1] = 0.1666; + steps[2] = 0.3332; + steps[3] = 0.4998; + steps[4] = 0.6664; + steps[5] = 0.8330; - // Define color values - vec4 colors[6]; - colors[0] = uStarColor0; - colors[1] = uStarColor1; - colors[2] = uStarColor2; - colors[3] = uStarColor3; - colors[4] = uStarColor4; - colors[5] = uStarColor5; + // Define color values + vec4 colors[6]; + colors[0] = uStarColor0; + colors[1] = uStarColor1; + colors[2] = uStarColor2; + colors[3] = uStarColor3; + colors[4] = uStarColor4; + colors[5] = uStarColor5; - // Assign alpha values - for (int i = 0; i < 6; ++i) { - colors[i].a = alpha * colors[i].a; + // Assign alpha values + for (int i = 0; i < 6; ++i) { + colors[i].a = alpha * colors[i].a; + } + + // Handle edge cases + if (v <= steps[0]) { + return colors[0]; + } + if (v >= steps[5]) { + return colors[5]; + } + + // Find the correct interpolation segment + for (int i = 0; i < 5; ++i) { + if (v <= steps[i + 1]) { + float t = (v - steps[i]) / (steps[i + 1] - steps[i]); + return mix(colors[i], colors[i + 1], t); } + } - // Handle edge cases - if (v <= steps[0]) { - return colors[0]; - } - if (v >= steps[5]) { - return colors[5]; - } - - // Find the correct interpolation segment - for (int i = 0; i < 5; ++i) { - if (v <= steps[i + 1]) { - float t = (v - steps[i]) / (steps[i + 1] - steps[i]); - return mix(colors[i], colors[i + 1], t); - } - } - - // Fallback (should never be reached) - return vec4(0.0, 0.0, 0.0, 1.0); + // Fallback (should never be reached) + return vec4(0.0, 0.0, 0.0, 1.0); } - - // 1| __________ // | / \ // | / \ @@ -215,196 +205,155 @@ graph above ... where t is close to 0, or 1 the result will fade to zero i.e. this is just the function of power(x,p) shifted where x is time, and p is 2.0,4.0,8.0,10.0 ... or any positive even number */ -float zeroStartEnd(float t, float max_size, float power) -{ - float s = -1.0 * pow((t-0.5)/(0.5),power)+1.0; - s = clamp(s,0.0,1.0) * max_size; +float zeroStartEnd(float t, float max_size, float power) { + float s = -1.0 * pow((t - 0.5) / (0.5), power) + 1.0; + s = clamp(s, 0.0, 1.0) * max_size; return s; } -//this gives us the jerky 8bit growth effect. -float eightBitScale(float progress) -{ - float scale = 1.0; - if (progress <= 0.1) - { - scale = 0.25; - } - else if (progress <= 0.2) - { - scale = 0.5; - } - else if (progress <= 0.3) - { - scale = 0.25; - } - else if (progress <= 0.4) - { - scale = 0.5; - } - else if (progress <= 0.5) - { - scale = 0.25; - } - else if (progress <= 0.6) - { - scale = 0.5; - } - else if (progress <= 0.7) - { - scale = 1.0; - } - else if (progress <= 0.8) - { - scale = 0.25; - } - else if (progress <= 0.9) - { - scale = 0.5; - } - return scale; +// this gives us the jerky 8bit growth effect. +float eightBitScale(float progress) { + float scale = 1.0; + if (progress <= 0.1) { + scale = 0.25; + } else if (progress <= 0.2) { + scale = 0.5; + } else if (progress <= 0.3) { + scale = 0.25; + } else if (progress <= 0.4) { + scale = 0.5; + } else if (progress <= 0.5) { + scale = 0.25; + } else if (progress <= 0.6) { + scale = 0.5; + } else if (progress <= 0.7) { + scale = 1.0; + } else if (progress <= 0.8) { + scale = 0.25; + } else if (progress <= 0.9) { + scale = 0.5; + } + return scale; } - -//gets all the sparks -vec4 getSparks(float progress) -{ - //the UV for this function +// gets all the sparks +vec4 getSparks(float progress) { + // the UV for this function float aspect = uSize.x / uSize.y; - vec2 uv = iTexCoord.st * vec2(aspect,1.0); + vec2 uv = iTexCoord.st * vec2(aspect, 1.0); - //this will be the result to return + // this will be the result to return vec4 result = vec4(0.0); // 0 at the edges - float xEdge = -1.0 * pow((uv.x-(aspect*0.5))/(aspect*0.5),8.0)+1.0; - xEdge = clamp(xEdge,0.0,1.0); + float xEdge = -1.0 * pow((uv.x - (aspect * 0.5)) / (aspect * 0.5), 8.0) + 1.0; + xEdge = clamp(xEdge, 0.0, 1.0); - //declare some variables before the loop - vec2 h = vec2(0.0); + // declare some variables before the loop + vec2 h = vec2(0.0); float y = 0.0; float x = 0.0; - //loop for each spart - for (float xusp = 0.0; xusp < uSparkCount; ++xusp) - { - //calculate some variables - h = hash21(xusp + uSeed.x); - y = mix( 0.0 - h.y , 1.0+(1.0-h.y) , progress); - y = clamp(y,0.0,1.0); + // loop for each spart + for (float xusp = 0.0; xusp < uSparkCount; ++xusp) { + // calculate some variables + h = hash21(xusp + uSeed.x); + y = mix(0.0 - h.y, 1.0 + (1.0 - h.y), progress); + y = clamp(y, 0.0, 1.0); - x = 0.66 * sin(h.x * 6.28) ; - x += 0.5 * aspect; + x = 0.66 * sin(h.x * 6.28); + x += 0.5 * aspect; - //here we get the mask for the spark - float a4ps = getSpark( - uv, - vec2( x , y), //position (x, y) - zeroStartEnd(y,1.0 ,4.0) * xEdge ,//Brightness - zeroStartEnd(y,0.5 ,4.0) * xEdge,//Size - progress * 6.28 * float(uSparkRotation) //rotation - ); + // here we get the mask for the spark + float a4ps = getSpark(uv, vec2(x, y), // position (x, y) + zeroStartEnd(y, 1.0, 4.0) * xEdge, // Brightness + zeroStartEnd(y, 0.5, 4.0) * xEdge, // Size + progress * 6.28 * float(uSparkRotation) // rotation + ); - //set it to the results - result = alphaOver( - result, - vec4(uSparkColor.r,uSparkColor.g,uSparkColor.b,uSparkColor.a * a4ps) - ); + // set it to the results + result = alphaOver( + result, vec4(uSparkColor.r, uSparkColor.g, uSparkColor.b, uSparkColor.a * a4ps)); } // and we are returning the result return result; } -//gets the Rays -vec4 getRays(float progress) -{ - //create the UV for it +// gets the Rays +vec4 getRays(float progress) { + // create the UV for it vec2 rayUV = iTexCoord.st; - rayUV *= vec2(10.0,0.5); + rayUV *= vec2(10.0, 0.5); rayUV.y += progress * -1.0; rayUV.x += uSeed.y; - - //gets the ray + + // gets the ray float ray = simplex2D(rayUV); - //0 around the edges - ray *= zeroStartEnd(iTexCoord.t,1.0,8.0); - ray *= zeroStartEnd(iTexCoord.s,1.0,8.0); + // 0 around the edges + ray *= zeroStartEnd(iTexCoord.t, 1.0, 8.0); + ray *= zeroStartEnd(iTexCoord.s, 1.0, 8.0); // 0 at the begining and end of the animation - ray *= zeroStartEnd(progress,1.0,8.0); + ray *= zeroStartEnd(progress, 1.0, 8.0); - //adjust the numbers and clamp - ray = remap( - ray * 1.10, - 0.0,1.0, - -5.0,1.0 - ); + // adjust the numbers and clamp + ray = remap(ray * 1.10, 0.0, 1.0, -5.0, 1.0); - float alpha = clamp(uRaysColor.a * ray,0.0,1.0); - - //return - return vec4(uRaysColor.r,uRaysColor.g,uRaysColor.b,alpha); + float alpha = clamp(uRaysColor.a * ray, 0.0, 1.0); + // return + return vec4(uRaysColor.r, uRaysColor.g, uRaysColor.b, alpha); } -//returns the stars -vec4 getStars(vec2 starUV, float aspect, float progress, float oColorAlpha) -{ - //this will be the result to return +// returns the stars +vec4 getStars(vec2 starUV, float aspect, float progress, float oColorAlpha) { + // this will be the result to return vec4 result = vec4(0.0); - vec2 h = vec2(0.0); + vec2 h = vec2(0.0); float y = 0.0; - //for each ring - for (float r = 0.0; r < uRingCount; ++r) - { - - float spread = r*(1.0/uRingCount); - y = mix( 0.0 - spread , 1.0+(1.0-spread) , 1.0 - progress); - y = clamp(y,0.00001,0.99999); + // for each ring + for (float r = 0.0; r < uRingCount; ++r) { - //each star in each ring - for (float s = 0.0; s < uStarCount; ++s) - { + float spread = r * (1.0 / uRingCount); + y = mix(0.0 - spread, 1.0 + (1.0 - spread), 1.0 - progress); + y = clamp(y, 0.00001, 0.99999); - //this returns a Star + // each star in each ring + for (float s = 0.0; s < uStarCount; ++s) { - float a5ps = getStar( - starUV, - vec2( sin(progress * uRingRotation * 6.28 + (s*(6.28/uStarCount))) * aspect * 0.33 , y), //position (x, y) - 5.0, //nPoints - 0.5, //radiusRatio - zeroStartEnd(y,0.1,2.0), //Size - 0.0 //rotation + // this returns a Star + + float a5ps = + getStar(starUV, + vec2(sin(progress * uRingRotation * 6.28 + (s * (6.28 / uStarCount))) * + aspect * 0.33, + y), // position (x, y) + 5.0, // nPoints + 0.5, // radiusRatio + zeroStartEnd(y, 0.1, 2.0), // Size + 0.0 // rotation ); - a5ps = clamp(a5ps,0.0,1.0); + a5ps = clamp(a5ps, 0.0, 1.0); - // //put the star in back or the front of the window - float depth = cos(progress * uRingRotation * 6.28 + (s*(6.28/uStarCount)) ); + // //put the star in back or the front of the window + float depth = cos(progress * uRingRotation * 6.28 + (s * (6.28 / uStarCount))); - //if we want the star behind or infront of the window + // if we want the star behind or infront of the window - if (depth < 0.0) - { - result = alphaOver(result,getStarColor(y,a5ps)); - } - else - { - result = alphaOver(getStarColor(y,a5ps) * (1.0 - oColorAlpha),result); + if (depth < 0.0) { + result = alphaOver(result, getStarColor(y, a5ps)); + } else { + result = alphaOver(getStarColor(y, a5ps) * (1.0 - oColorAlpha), result); } } - - } // and we are returning the result return result; } - - - void main() { // Calculate the animation progress, flipping direction if opening @@ -414,17 +363,14 @@ void main() { // Initialize the output color to fully transparent black vec4 oColor = vec4(0.0, 0.0, 0.0, 0.0); - - //get scales + // get scales float scale8bit = eightBitScale(progress); - vec2 scaleV2 = vec2(easeInOutSine(progress), easeInQuad(progress)); + vec2 scaleV2 = vec2(easeInOutSine(progress), easeInQuad(progress)); - vec2 fscale = mix(vec2(scale8bit),scaleV2,uScaleStyle); + vec2 fscale = mix(vec2(scale8bit), scaleV2, uScaleStyle); // Fetch the color based on the scaled texture coordinates - oColor = getInputColor( - scaleUV(iTexCoord.st, fscale) - ); + oColor = getInputColor(scaleUV(iTexCoord.st, fscale)); // Store the alpha value of the fetched color for later use float oColorAlpha = oColor.a; @@ -438,26 +384,20 @@ void main() { vec2 starUV = vec2(iTexCoord.s - 0.5, 1.0 - iTexCoord.t) * vec2(aspect, 1.0); // If four-point stars are enabled, overlay them on the current color - if (uSparkCount > 0.0) - { + if (uSparkCount > 0.0) { oColor = alphaOver(oColor, getSparks(progress)); } // If rays are enabled, overlay them on the current color - if (uRaysColor.a > 0.0) - { + if (uRaysColor.a > 0.0) { oColor = alphaOver(oColor, getRays(progress)); } - // If five-point stars are enabled, overlay them using stored alpha - if (uRingCount > 0.0 && uStarCount > 0.0) - { + if (uRingCount > 0.0 && uStarCount > 0.0) { oColor = alphaOver(oColor, getStars(starUV, aspect, progress, oColorAlpha)); } - // Set the final output color to the computed value setOutputColor(oColor); - } diff --git a/src/Shader.js b/src/Shader.js index 532df6c..3617622 100644 --- a/src/Shader.js +++ b/src/Shader.js @@ -61,7 +61,6 @@ export var Shader = GObject.registerClass({ }, class Shader extends Shell.GLSLEffect { - // -------------------------------------------- // The constructor automagically loads the shader's source code (in // vfunc_build_pipeline()) from the resource file resources/shaders/.glsl @@ -209,6 +208,4 @@ export var Shader = GObject.registerClass({ // Add a trailing newline. Else the GLSL compiler complains... return common + '\n' + code + '\n'; } - }); - diff --git a/src/ShaderFactory.js b/src/ShaderFactory.js index 06fbea7..6056262 100644 --- a/src/ShaderFactory.js +++ b/src/ShaderFactory.js @@ -61,7 +61,7 @@ export default class ShaderFactory { // Only try to register the new type once. if (GObject.type_from_name(typeName) == null) { const outerThis = this; - GObject.registerClass({GTypeName: typeName}, class ShaderImp extends Shader{ + GObject.registerClass({GTypeName: typeName}, class ShaderImp extends Shader { // This will actually load the GLSL source code from the resources. _init() { super._init(outerThis._nick); diff --git a/src/effects/Mushroom.js b/src/effects/Mushroom.js index 928aedd..5784ece 100644 --- a/src/effects/Mushroom.js +++ b/src/effects/Mushroom.js @@ -271,7 +271,7 @@ export default class Effect { }, { name: _('Cattuccino 😺'), // A soft pastel palette inspired by a - // cappuccino theme + // cappuccino theme ScaleStyle: 1.0, SparkCount: 4, SparkColor: 'rgba(255,255,255,1.0)', diff --git a/src/utils.js b/src/utils.js index d84ab44..73ad404 100644 --- a/src/utils.js +++ b/src/utils.js @@ -172,6 +172,4 @@ export function parseColor(string) { return [color.red / 255, color.green / 255, color.blue / 255, color.alpha / 255]; - } -