docs: function parseIncludes(codes, includes) {
      const result = {};
      for (const id of Object.keys(codes)) {
          const code = codes[id];
          result[id] = code.split('\n').map(function(line) {
              if (line.trim().substr(0, 8) !== '#include') return line;
              const pos = line.indexOf('#include') + 8;
              let includeName = line.substr(pos).trim();
              // We accept all this systaxes:
              // #include foo
              // #include 'foo'
              // #include <foo>
              // #include "foo"
              if ("'<\"".indexOf(includeName.charAt(0)) > -1) {
                  includeName = includeName.substr(1, includeName.length - 2);
              }
              const snippet = includes[includeName];
              if (typeof snippet !== 'string') {
                  console.error("Include <" + includeName + "> not found in ", includes);
                  throw Error("Include not found in shader: " + includeName);
              }
              return snippet;
          }).join("\n");
      }
      return result;
  }