@@ -12,6 +12,9 @@ extern MY_HIGHP_OR_MEDIUMP vec2 image_details;
1212extern bool shadow;
1313extern MY_HIGHP_OR_MEDIUMP vec4 burn_colour_1;
1414extern MY_HIGHP_OR_MEDIUMP vec4 burn_colour_2;
15+ extern MY_HIGHP_OR_MEDIUMP vec2 mouse_screen_pos;
16+ extern MY_HIGHP_OR_MEDIUMP float hovering;
17+ extern MY_HIGHP_OR_MEDIUMP float screen_scale;
1518
1619vec4 dissolve_mask(vec4 tex, vec2 texture_coords, vec2 uv)
1720{
@@ -94,20 +97,144 @@ vec4 HSL(vec4 c)
9497 return hsl;
9598}
9699
100+ vec4 RGBtoHSV(vec4 rgb)
101+ {
102+ vec4 hsv;
103+ float minVal = min (min (rgb.r, rgb.g), rgb.b);
104+ float maxVal = max (max (rgb.r, rgb.g), rgb.b);
105+ float delta = maxVal - minVal;
106+
107+ // Value
108+ hsv.z = maxVal;
109+
110+ // Saturation
111+ if (maxVal != 0.0 )
112+ hsv.y = delta / maxVal;
113+ else {
114+ // r = g = b = 0, s = 0, v is undefined
115+ hsv.y = 0.0 ;
116+ hsv.x = - 1.0 ;
117+ return hsv;
118+ }
119+
120+ // Hue
121+ if (rgb.r == maxVal)
122+ hsv.x = (rgb.g - rgb.b) / delta; // between yellow & magenta
123+ else if (rgb.g == maxVal)
124+ hsv.x = 2.0 + (rgb.b - rgb.r) / delta; // between cyan & yellow
125+ else
126+ hsv.x = 4.0 + (rgb.r - rgb.g) / delta; // between magenta & cyan
127+
128+ hsv.x = hsv.x * (1.0 / 6.0 );
129+ if (hsv.x < 0.0 )
130+ hsv.x += 1.0 ;
131+
132+ // Alpha
133+ hsv.w = rgb.a;
134+
135+ return hsv;
136+ }
137+
138+ vec4 HSVtoRGB(vec4 hsv) {
139+ vec4 rgb;
140+
141+ float h = hsv.x * 6.0 ;
142+ float c = hsv.z * hsv.y;
143+ float x = c * (1.0 - abs (mod (h, 2.0 ) - 1.0 ));
144+ float m = hsv.z - c;
145+
146+ if (h < 1.0 ) {
147+ rgb = vec4 (c, x, 0.0 , hsv.a);
148+ } else if (h < 2.0 ) {
149+ rgb = vec4 (x, c, 0.0 , hsv.a);
150+ } else if (h < 3.0 ) {
151+ rgb = vec4 (0.0 , c, x, hsv.a);
152+ } else if (h < 4.0 ) {
153+ rgb = vec4 (0.0 , x, c, hsv.a);
154+ } else if (h < 5.0 ) {
155+ rgb = vec4 (x, 0.0 , c, hsv.a);
156+ } else {
157+ rgb = vec4 (c, 0.0 , x, hsv.a);
158+ }
159+
160+ rgb.rgb += m;
161+
162+ return rgb;
163+ }
164+
165+ float bitxor(float val1, float val2)
166+ {
167+ float outp = 0 ;
168+ for (int i = 1 ; i < 9 ; i++ ) outp += floor (mod (mod (floor (val1* pow (2 ,- i)),pow (2 ,i))+ mod (floor (val2* pow (2 ,- i)),pow (2 ,i)),2 ))* pow (2 ,i);
169+ return outp/ 256 ;
170+ }
171+
172+ float mod2(float val1, float mod1)
173+ {
174+ val1 /= mod1;
175+ val1 -= floor (val1);
176+ return (mod1 * val1);
177+ }
178+
179+ #define PI 3.14159265358979323846
180+
181+ float rand(vec2 c){
182+ return fract (sin (dot (c.xy ,vec2 (12.9898 ,78.233 ))) * 43758.5453 );
183+ }
184+
185+ float noise(vec2 p, float freq ){
186+ float unit = 1 / freq;
187+ vec2 ij = floor (p/ unit);
188+ vec2 xy = mod (p,unit)/ unit;
189+ // xy = 3.*xy*xy-2.*xy*xy*xy;
190+ xy = .5 * (1 .-cos (PI* xy));
191+ float a = rand((ij+ vec2 (0 .,0 .)));
192+ float b = rand((ij+ vec2 (1 .,0 .)));
193+ float c = rand((ij+ vec2 (0 .,1 .)));
194+ float d = rand((ij+ vec2 (1 .,1 .)));
195+ float x1 = mix (a, b, xy.x);
196+ float x2 = mix (c, d, xy.x);
197+ return mix (x1, x2, xy.y);
198+ }
199+
200+ float pNoise(vec2 p, int res){
201+ float persistance = .5 ;
202+ float n = 0 .;
203+ float normK = 0 .;
204+ float f = 4 .;
205+ float amp = 1 .;
206+ int iCount = 0 ;
207+ for (int i = 0 ; i< 50 ; i++ ){
208+ n+= amp* noise(p, f);
209+ f*= 2 .;
210+ normK+= amp;
211+ amp*= persistance;
212+ if (iCount == res) break ;
213+ iCount++ ;
214+ }
215+ float nf = n/ normK;
216+ return nf* nf* nf* nf;
217+ }
218+
97219vec4 effect( vec4 colour, Image texture, vec2 texture_coords, vec2 screen_coords )
98220{
99221 vec4 tex = Texel(texture, texture_coords);
100222 vec2 uv = (((texture_coords)* (image_details)) - texture_details.xy* texture_details.ba)/ texture_details.ba;
101223
224+ // Dummy, doesn't do anything but at least it makes the shader useable
225+ if (uv.x > uv.x * 2 .){
226+ uv = astral;
227+ }
228+
229+ float mod = astral.r * 1.0 ;
230+
102231 number low = min (tex.r, min (tex.g, tex.b));
103232 number high = max (tex.r, max (tex.g, tex.b));
104233 number delta = high - low;
105234
106- number saturation_fac = 1 . - max ( 0 ., 0.05 * ( 1.1 - delta ));
235+ // vec4 hsl = HSL(vec4(tex.r, tex.g, tex.b, tex.a ));
107236
108- vec4 hsl = HSL(vec4 (tex.r* saturation_fac, tex.g* saturation_fac, tex.b, tex.a));
109-
110- float t = astral.y* 2.221 + mod (time,1 .);
237+ float t = astral.y* 2.221 + time;
111238 vec2 floored_uv = (floor ((uv* texture_details.ba)))/ texture_details.ba;
112239 vec2 uv_scaled_centered = (floored_uv - 0.5 ) * 50 .;
113240
@@ -119,22 +246,48 @@ vec4 effect( vec4 colour, Image texture, vec2 texture_coords, vec2 screen_coords
119246 cos (length (field_part1) / 19.483 ) + sin (length (field_part2) / 33.155 ) * cos (field_part2.y / 15.73 ) +
120247 cos (length (field_part3) / 27.193 ) * sin (field_part3.x / 21.92 ) ))/ 2 .;
121248
122- float res = (.5 + .5 * cos ( (astral.x) * 2.612 + ( field + -.5 ) * 3.14 ));
123- hsl.x = .8 ;
124- hsl.y = hsl.y * 0.8 ;
125- hsl.z = hsl.z * 0.2 + 0.6 * sin (hsl.z/ 2.5 - res/ 4 . + sin (astral.y)/ 8 . + 0.5 )/ 1.4 ;
249+
250+ vec4 pixel = Texel(texture, texture_coords);
251+
252+ float cx = uv_scaled_centered.x * 1 ;
253+ float cy = uv_scaled_centered.y * 1 ;
254+
255+
256+
257+ vec4 hsl = HSL(vec4 (tex.r, tex.g, tex.b, tex.a));
258+
259+
260+ // |y| = 50, |x| = 50
126261
127262 tex.rgb = RGB(hsl).rgb;
128263
129- if (tex[3 ] < 0.7 )
130- tex[3 ] = tex[3 ]/ 3 .;
264+ vec2 mouse_offset = (screen_coords.xy - mouse_screen_pos.xy)/ screen_scale;
265+
266+ float scaled_uvy = (uv.y + mouse_offset.y - 0.5 )* 5 * 1.338 ;
267+ float scaled_uvx = (uv.x + mouse_offset.x - 0.5 )* 5 ;
268+ float norm_uv = sqrt (scaled_uvx* scaled_uvx + scaled_uvy* scaled_uvy);
269+
270+ pixel = vec4 (pixel.rgb * 0.0 + tex.rgb * tex.a, pixel.a);
271+
272+ float res = (.5 + .5 * cos ( (astral.x) * 2.612 + ( field + -.5 ) * 3.14 ));
273+ vec4 textp = RGB(hsl);
274+ tex.rgb = textp.rgb;
275+
276+ float stars = ((pNoise(uv* 10 + t/ 15.0 , 10 )* pNoise(uv* 10 + t/ 15.0 , 10 )+ 1.5 )/ 1 + 0.15 + ((pNoise(uv* 12 + t/ 15.0 , 10 )+ 1.2 )/ 1 + 0.3 ))/ 2.2 + 0.05 + 0.007 * norm_uv * 1.1 ;
277+
278+ float clusters = (pNoise(uv* 10.0 - t/ 15.0 , 10 )+ 1.5 )/ 1.5 - 0.25 + 0.007 * norm_uv;
279+
280+ float super_clusters = (pNoise(uv/ 15.0 , 10 )+ 0.1 )/ 2 + 0.3 - 0.008 * norm_uv;
281+
282+ clusters *= clusters * clusters * clusters * 0.4 ;
283+ stars *= stars * stars;
284+ super_clusters *= super_clusters * super_clusters;
285+
286+ colour.rgb = vec3 (0.6 , 0.45 , 1 ) * (((clusters + stars + super_clusters)+ 0.1 )) * 0.285 ;
287+
131288 return dissolve_mask(tex* colour, texture_coords, uv);
132289}
133290
134- extern MY_HIGHP_OR_MEDIUMP vec2 mouse_screen_pos;
135- extern MY_HIGHP_OR_MEDIUMP float hovering;
136- extern MY_HIGHP_OR_MEDIUMP float screen_scale;
137-
138291#ifdef VERTEX
139292vec4 position( mat4 transform_projection, vec4 vertex_position )
140293{
0 commit comments