Square and triangle wave
Common waveforms can be produced with the right harmonics setup.
A square wave has only odd partials.
A triangle wave also has odd partials but with gradually weaker partials.
This can be done easily within Fragment by increasing a loop step, only the odd partials will be computed.
void main () {
float l = 0.;
float r = 0.;
float base_frequency = 440.;
float attenuation_constant = 1.95;
const float harmonics = 8.;
// notice the loop step
for (float i = 1.; i < harmonics; i += 2.) {
float a = 1. / pow(i, attenuation_constant);
l += fline(base_frequency * i) * a;
r += fline(base_frequency * i) * a;
}
fragColor = vec4(l, r, 0., 1.);
synthOutput = vec4(l, r, 0., 0.);
}