Просмотр исходного кода

support recursive includes (but no loops)

... hopefully.
Lucas Stadler лет назад: 10
Родитель
Сommit
5dd5839e9d
1 измененных файлов с 10 добавлено и 5 удалено
  1. 10 5
      glsl/transformShader.js

+ 10 - 5
glsl/transformShader.js

6
6
7
`;
7
`;
8
8
9
function transformShader(shader) {
9
function transformShader(shader, noPrelude, visited) {
10
  var visited = visited || {};
10
  var lines = shader.split("\n");
11
  var lines = shader.split("\n");
11
  lines = lines.map(function(line) {
12
  lines = lines.map(function(line) {
12
    var match = line.match(/\/\/#include "(.*)"/);
13
    var match = line.match(/\/\/#include "(.*)"/);
15
      if (!file.content) {
16
      if (!file.content) {
16
        throw new Error(`No such file: '${match[1]}'`);
17
        throw new Error(`No such file: '${match[1]}'`);
17
      }
18
      }
19
      if (file.name in visited) {
20
        throw new Error(`Include loop: '${match[1]}'`);
21
      }
22
      visited[file.name] = true;
23
      var expanded = transformShader(file.content, true, visited);
18
      return `//#includestart "${match[1]}" (start)
24
      return `//#includestart "${match[1]}" (start)
19
${file.content}
20
//#includeend "${match[1]}"
21
`
25
${expanded}
26
//#includeend "${match[1]}"`
22
    } else {
27
    } else {
23
      return line;
28
      return line;
24
    }
29
    }
25
  });
30
  });
26
  
31
  
27
  return prelude + lines.join("\n");
32
  return (noPrelude ? "" : prelude) + lines.join("\n");
28
}
33
}