I wrote a Material that renders fine on my previous MacBook Pro. However, after moving to a new MacBook Pro with an M2 Pro chip, the background of my material (where the alpha channel should be) is extremely glitchy. See the attachment.
Is there something that I need to change in my code to make it render correctly on an Apple silicon-based processor?
The following code runs fine on my Intel-based MacBook Pro, and looks like the glitchy mess shown in the attachment running on my new computer. Only difference is that I'm running the M1 build of Madmapper on my new computer:
Code: Select all
/*{
"CREDIT": "GB",
"DESCRIPTION": "Line art using the superformula",
"TAGS": "template",
"VSN": "1.0",
"INPUTS": [
{"LABEL": "Speed", "NAME": "mat_speed", "TYPE": "float", "MIN": 0.0, "MAX": 2.0, "DEFAULT": 1.0 },
{"LABEL": "# of Lines", "NAME": "mat_num_lines", "TYPE": "int", "MIN": 1, "MAX": 100, "DEFAULT": 15 },
{"LABEL": "Line Width", "NAME": "mat_lineWidth", "TYPE": "float", "MIN": 0.2, "MAX": 10, "DEFAULT": 1 },
{"LABEL": "Line Spacing", "NAME": "mat_lineSpacing", "TYPE": "float", "MIN": 0.1, "MAX": 40, "DEFAULT": 1 },
{"LABEL": "Line 1", "NAME": "mat_line1_bool", "TYPE": "bool", "DEFAULT": true },
{"LABEL": "Line 2", "NAME": "mat_line2_bool", "TYPE": "bool", "DEFAULT": true },
{"LABEL": "Line 3", "NAME": "mat_line3_bool", "TYPE": "bool", "DEFAULT": true },
{"LABEL": "Line 4", "NAME": "mat_line4_bool", "TYPE": "bool", "DEFAULT": true },
{"LABEL": "Rad1/A: size A", "NAME": "mat_rad1_a", "TYPE": "float", "MIN": 0, "MAX": 200, "DEFAULT": 1 },
{"LABEL": "Rad1/B: size B", "NAME": "mat_rad1_b", "TYPE": "float", "MIN": 0, "MAX": 200, "DEFAULT": 1 },
{"LABEL": "Rad1/M: num spikes", "NAME": "mat_rad1_m", "TYPE": "float", "MIN": 0, "MAX": 20, "DEFAULT": 1 },
{"LABEL": "Rad1/N1: convex1", "NAME": "mat_rad1_n1", "TYPE": "float", "MIN": 0.4, "MAX": 2, "DEFAULT": 1 },
{"LABEL": "Rad1/N2: convex2", "NAME": "mat_rad1_n2", "TYPE": "float", "MIN": 0, "MAX": 2, "DEFAULT": 1 },
{"LABEL": "Rad1/N3: convex3", "NAME": "mat_rad1_n3", "TYPE": "float", "MIN": 0, "MAX": 2, "DEFAULT": 1 },
{"LABEL": "Rad2/A: size A", "NAME": "mat_rad2_a", "TYPE": "float", "MIN": 0, "MAX": 200, "DEFAULT": 1 },
{"LABEL": "Rad2/B: size B", "NAME": "mat_rad2_b", "TYPE": "float", "MIN": 0, "MAX": 200, "DEFAULT": 1 },
{"LABEL": "Rad2/M: num spikes", "NAME": "mat_rad2_m", "TYPE": "float", "MIN": 0, "MAX": 20, "DEFAULT": 1 },
{"LABEL": "Rad2/N1: convex1", "NAME": "mat_rad2_n1", "TYPE": "float", "MIN": 0.4, "MAX": 2, "DEFAULT": 1 },
{"LABEL": "Rad2/N2: convex2", "NAME": "mat_rad2_n2", "TYPE": "float", "MIN": 0, "MAX": 2, "DEFAULT": 1 },
{"LABEL": "Rad2/N3: convex3", "NAME": "mat_rad2_n3", "TYPE": "float", "MIN": 0, "MAX": 2, "DEFAULT": 1 },
{"LABEL": "Range/X1 Range", "NAME": "mat_x1_range", "TYPE": "floatRange", "DEFAULT": [0.1,0.9], "MIN": 0.0, "MAX": 1.0 },
{"LABEL": "Range/Y1 Range", "NAME": "mat_y1_range", "TYPE": "floatRange", "DEFAULT": [0.1,0.9], "MIN": 0.0, "MAX": 1.0 },
{"LABEL": "Range/X2 Range", "NAME": "mat_x2_range", "TYPE": "floatRange", "DEFAULT": [0.1,0.9], "MIN": 0.0, "MAX": 1.0 },
{"LABEL": "Range/Y2 Range", "NAME": "mat_y2_range", "TYPE": "floatRange", "DEFAULT": [0.1,0.9], "MIN": 0.0, "MAX": 1.0 },
{"LABEL": "Freq/X1 Freq", "NAME": "mat_x1_freq", "TYPE": "float", "MIN": 1, "MAX": 300, "DEFAULT": 25 },
{"LABEL": "Freq/Y1 Freq", "NAME": "mat_y1_freq", "TYPE": "float", "MIN": 1, "MAX": 300, "DEFAULT": 20 },
{"LABEL": "Freq/X2 FreqA", "NAME": "mat_x2_freqA", "TYPE": "float", "MIN": 1, "MAX": 300, "DEFAULT": 35 },
{"LABEL": "Freq/X2 FreqB", "NAME": "mat_x2_freqB", "TYPE": "float", "MIN": 1, "MAX": 300, "DEFAULT": 15 },
{"LABEL": "Freq/Y2 FreqA", "NAME": "mat_y2_freqA", "TYPE": "float", "MIN": 1, "MAX": 300, "DEFAULT": 30 },
{"LABEL": "Freq/Y2 FreqB", "NAME": "mat_y2_freqB", "TYPE": "float", "MIN": 1, "MAX": 300, "DEFAULT": 22 },
{"LABEL": "Color/Line1 Color", "NAME": "mat_line1_color", "TYPE": "color", "DEFAULT": [ 0.7, 0.3, 0.6, 1.0 ] },
{"LABEL": "Color/Line2 Color", "NAME": "mat_line2_color", "TYPE": "color", "DEFAULT": [ 0.3, 0.7, 0.6, 1.0 ] },
{"LABEL": "Color/Line3 Color", "NAME": "mat_line3_color", "TYPE": "color", "DEFAULT": [ 0.6, 0.3, 0.7, 1.0 ] },
{"LABEL": "Color/Line4 Color", "NAME": "mat_line4_color", "TYPE": "color", "DEFAULT": [ 0.7, 0.6, 0.3, 1.0 ] },
],
"GENERATORS": [
{"NAME": "mat_time", "TYPE": "time_base", "PARAMS": {"speed": "mat_speed"} },
],
}*/
#include "MadCommon.glsl"
#include "MadSDF.glsl"
float inRange(float oldVal, float newMin, float newMax) {
float oldMin = -1;
float oldMax = 1;
float newRange = newMax - newMin;
float oldRange = oldMax - oldMin;
return (((oldVal - oldMin) * newRange) / oldRange) + newMin;
}
float superformula(float theta, float a, float b, float m, float n1, float n2, float n3) {
return pow(pow(abs(cos(m * theta / 4.0) / a), n2) +
pow(abs(sin(m * theta / 4.0) / b), n3), -1.0 / n1);
}
float flip(float n) {
// flip number across a 0.5 axis... turn 0.7 into 0.3 or turn 0.1 into 0.9
return (0.5 - n) + 0.5;
}
float x1(float t) {
return inRange(cos(t/mat_x1_freq), mat_x1_range.x, mat_x1_range.y);
}
float y1(float t) {
return inRange(sin(t / mat_y1_freq), mat_y1_range.x, mat_y1_range.y);
}
float x2(float t) {
return inRange(inRange(sin(t / mat_x2_freqA), -0.5, 0.5) + inRange(cos(t / mat_x2_freqB), -0.5, 0.5), mat_x2_range.x, mat_x2_range.y);
}
float y2(float t) {
return inRange(inRange(cos(t / mat_y2_freqA), -0.5, 0.5) + inRange(cos(t / mat_y2_freqB), -0.5, 0.5), mat_y2_range.x, mat_y2_range.y);
}
vec4 materialColorForPixel( vec2 texCoord )
{
vec2 position = vec2( 0.5 );
float lineWidth = mat_lineWidth/400;
vec4 fillColor = vec4( 1.0 );
vec4 backgroundColor = vec4(0.0);
float distField1;
float distField2;
float distField3;
float distField4;
vec4 color1;
vec4 color2;
vec4 color3;
vec4 color4;
vec4 combinedColor;
float timeMult = mat_time * 9;
for (float theta = 0 + timeMult; theta <= 1 * PI + timeMult; theta += (3.2/mat_num_lines)) {
float rad1 = superformula(theta,
mat_rad1_a, // a
mat_rad1_b, // b
mat_rad1_m, // m = number of spikes
mat_rad1_n1, // n1
mat_rad1_n2, // n2
mat_rad1_n3 // n3
);
float rad2 = superformula(theta,
mat_rad2_a, // a
mat_rad2_b, // b
mat_rad2_m, // m = number of spikes
mat_rad2_n1, // n1
mat_rad2_n2, // n2
mat_rad2_n3 // n3
);
float rad1X = rad1 * cos(theta) * .01;
float rad1Y = rad1 * sin(theta) * .01;
float rad2X = rad2 * cos(theta) * .01;
float rad2Y = rad2 * sin(theta) * .01;
if(mat_line1_bool) {
distField1 = blend(distField1, line( texCoord, vec2(inRange(rad1X + x1(timeMult + theta*mat_lineSpacing), -1, 1), inRange(rad1Y + y1(timeMult + theta*mat_lineSpacing), -1, 1)), vec2(inRange(rad2X + x2(timeMult + theta*mat_lineSpacing), -1, 1), inRange(rad2Y + y2(timeMult + theta*mat_lineSpacing), -1, 1)), lineWidth));
color1 = fill( backgroundColor, mat_line1_color, distField1 );
}
if(mat_line2_bool) {
distField2 = blend(distField2, line( texCoord, vec2(inRange(rad1X + x1(timeMult + theta*mat_lineSpacing), -1, 1), inRange(rad1Y + y1(timeMult + theta*mat_lineSpacing), -1, 1)), vec2(inRange(flip(rad2X + x2(timeMult + theta*mat_lineSpacing)), -1, 1), inRange(rad2Y + y2(timeMult + theta*mat_lineSpacing), -1, 1)), lineWidth));
color2 = fill( backgroundColor, mat_line2_color, distField2 );
}
if(mat_line3_bool) {
distField3 = blend(distField3, line( texCoord, vec2(inRange(rad1X + x1(timeMult + theta*mat_lineSpacing), -1, 1), inRange(rad1Y + y1(timeMult + theta*mat_lineSpacing), -1, 1)), vec2(inRange(rad2X + x2(timeMult + theta*mat_lineSpacing), -1, 1), inRange(flip(rad2Y + y2(timeMult + theta*mat_lineSpacing)), -1, 1)), lineWidth));
color3 = fill( backgroundColor, mat_line3_color, distField3 );
}
if(mat_line4_bool) {
distField4 = blend(distField4, line( texCoord, vec2(inRange(rad1X + x1(timeMult + theta*mat_lineSpacing), -1, 1), inRange(rad1Y + y1(timeMult + theta*mat_lineSpacing), -1, 1)), vec2(inRange(flip(rad2X + x2(timeMult + theta*mat_lineSpacing)), -1, 1), inRange(flip(rad2Y + y2(timeMult + theta*mat_lineSpacing)), -1, 1)), lineWidth));
color4 = fill( backgroundColor, mat_line4_color, distField4 );
}
}
combinedColor = color1 + color2 + color3 + color4;
return vec4(combinedColor);
}