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;
  }

  gl_FragColor = vec4(l, r, 0., 1.);
  synthOutput = vec4(l, r, 0., 0.); // WebGL 2.0 only
}