1 | import fs from 'fs';
|
2 | import glob from 'glob';
|
3 |
|
4 | console.log('Generating shaders');
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 | glob('./src/shaders/*.glsl', null, (_err, files) => {
|
15 | for (const file of files) {
|
16 | const code = fs.readFileSync(file, 'utf8');
|
17 | const content = glslToTs(code);
|
18 | const fileName = `./src/shaders/${file.split('/').splice(-1)}.g.ts`;
|
19 | fs.writeFileSync(fileName, content);
|
20 | }
|
21 | console.log(`Finished converting ${files.length} glsl files`);
|
22 | });
|
23 |
|
24 | function glslToTs(code: string): string {
|
25 | code = code
|
26 | .trim()
|
27 | .replace(/\s*\/\/[^\n]*\n/g, '\n')
|
28 | .replace(/\n+/g, '\n')
|
29 | .replace(/\n\s+/g, '\n')
|
30 | .replace(/\s?([+-\/*=,])\s?/g, '$1')
|
31 | .replace(/([;\(\),\{\}])\n(?=[^#])/g, '$1');
|
32 |
|
33 | return `// This file is generated. Edit build/generate-shaders.ts, then run \`npm run codegen\`.
|
34 | export default ${JSON.stringify(code).replaceAll('"', '\'')};\n`;
|
35 | }
|