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 name = '##NAME_PLACEHOLDER##';
  9. let shader = \`##SHADER_PLACEHOLDER##\`;
  10. Effect.ShadersStore[name] = shader;
  11. export { shader, name };
  12. `;
  13. function getShaderName(filename) {
  14. let parts = filename.split('.');
  15. if (parts[1] !== 'fx') {
  16. return parts[0] + (parts[1] === 'fragment' ? 'Pixel' : 'Vertex') + "Shader";
  17. } else {
  18. return parts[0];
  19. }
  20. }
  21. function main() {
  22. return uncommentShaders()
  23. .pipe(through.obj(function (file, enc, cb) {
  24. if (file.isNull()) {
  25. cb(null, file);
  26. return;
  27. }
  28. if (file.isStream()) {
  29. cb(new PluginError("Remove Shader Comments", "Streaming not supported."));
  30. }
  31. let filename = path.basename(file.path);
  32. let normalized = path.normalize(file.path);
  33. let directory = path.dirname(normalized);
  34. let shaderName = getShaderName(filename);
  35. let tsFilename = filename.replace('.fx', '.fx.ts');
  36. let data = file.contents.toString();
  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. }
  44. module.exports = main;