function _compile(content) {
        content = content.replace(/^\s*/mg, '');
        var includes = [];
        var matched = content.match(/^#pragma\s+include\s+.*/mg);

        if (matched) {
          // console.log(matched, url);
          for (var i = 0; i < matched.length; i++) {
            var m = matched[i];

            var _matched = m.match(/(?:<|")(.*)(?:>|")/);

            if (_matched) {
              var type = _matched[0].indexOf('<') === 0 ? 'lib' : 'link';
              var name = _matched[1];
              if (name === 'graph') name = 'graphics';

              if (!loaded[name]) {
                loaded[name] = true;

                if (type === 'lib') {
                  var c = _compile(GLSL_LIBS[name]); // eslint-disable-line no-await-in-loop


                  includes.push(c);
                } else if (type === 'link') {
                  throw new Error('Cannot load external links synchronously. Use compile instead of compileSync.');
                }
              } else {
                includes.push("/* included ".concat(name, " */"));
              }
            }
          }

          includes.forEach(function (inc) {
            content = content.replace(/^#pragma\s+include\s+.*/m, inc);
          });
        }

        return content;
      }
[{
        positions: ...
        cells: ...
        textureCoord: ...
        attributes: {name: {data:..., normalize: true}},
        uniforms: ...
      }]