12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- let glob = require('glob');
- let path = require('path');
- let fs = require('fs');
- // Usage - node .\processShaders.js ../../gui/
- let shaderProcessor = require('./parser');
- let shadersPath = process.argv[2] || '../../';
- let tsTemplate = `import { Effect } from "babylonjs";
- let shader = '';
- let name = '';
- let registerShader = false;
- ##PLACEHOLDER##
- if(registerShader && name && shader) {
- Effect.ShadersStore[name] = shader;
- }
- export { shader, name };
- `;
- glob(shadersPath + '/**/*.fx', (err, shaderFiles) => {
- if (err) {
- console.log('error', err);
- } else {
- console.log('processing shaders');
- shaderFiles.forEach(file => {
- let filename = path.basename(file);
- let normalized = path.normalize(file);
- let directory = path.dirname(normalized);
- let shaderName = getShaderName(filename);
- let tsFilename = filename.replace('.fx', '.fx.ts');
- let shaderContent = fs.readFileSync(file).toString();
- //TODO - take care of includes!!!
- shaderProcessor(undefined, shaderContent, undefined, (err, data) => {
- let tsContent = tsTemplate.replace('##PLACEHOLDER##', `name = '${shaderName}'; shader = \`${data}\`; `);
- fs.writeFileSync(directory + '/' + tsFilename, tsContent);
- });
- });
- }
- })
- function getShaderName(filename) {
- let parts = filename.split('.');
- if (parts[1] !== 'fx') {
- return parts[0] + (parts[1] === 'fragment' ? 'Pixel' : 'Vertex') + "Shader";
- } else {
- return parts[0];
- }
- }
|