gulp-processShaders.js 1.6 KB

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