gulp-processShaders.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. var through = require('through2');
  2. var PluginError = require('gulp-util').PluginError;
  3. var uncommentShaders = require('./gulp-removeShaderComments');
  4. let path = require('path');
  5. //let fs = require('fs');
  6. let tsTemplate =
  7. `import { Effect } from "babylonjs";
  8. let shader = '';
  9. let name = '';
  10. ##PLACEHOLDER##
  11. Effect.ShadersStore[name] = shader;
  12. export { shader, name };
  13. `;
  14. function getShaderName(filename) {
  15. let parts = filename.split('.');
  16. if (parts[1] !== 'fx') {
  17. return parts[0] + (parts[1] === 'fragment' ? 'Pixel' : 'Vertex') + "Shader";
  18. } else {
  19. return parts[0];
  20. }
  21. }
  22. function main() {
  23. return uncommentShaders()
  24. .pipe(through.obj(function (file, enc, cb) {
  25. if (file.isNull()) {
  26. cb(null, file);
  27. return;
  28. }
  29. if (file.isStream()) {
  30. cb(new PluginError("Remove Shader Comments", "Streaming not supported."));
  31. }
  32. let filename = path.basename(file.path);
  33. let normalized = path.normalize(file.path);
  34. let directory = path.dirname(normalized);
  35. let shaderName = getShaderName(filename);
  36. let tsFilename = filename.replace('.fx', '.fx.ts');
  37. let data = file.contents.toString();
  38. let tsContent = tsTemplate.replace('##PLACEHOLDER##', `name = '${shaderName}'; shader = \`${data}\`; `);
  39. fs.writeFileSync(directory + '/' + tsFilename, tsContent);
  40. return cb();
  41. })
  42. );
  43. }
  44. module.exports = main;