0, sinA, cosA, 0, 0, 0, 1);
        return (m * vec3(v0, 1.0)).xy;
      }

      void main() {
        vec2 st = vUv.yx * vec2(10.0, 3.0);
        st = rotate(st, noise(st));

        float d = lines(st, 0.5);

        gl_FragColor.rgb = 1.0 - vec3(d);
        gl_FragColor.a = 1.0;
      }
    `;

    const canvas = document.querySelector('canvas');
    const renderer = new GlRenderer(canvas);

    // load fragment shader and createProgram
    const program = renderer.compileSync(fragment, vertex);
    ren