createGeometry.js 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. /* global require */
  2. import defined from "../Core/defined.js";
  3. import PrimitivePipeline from "../Scene/PrimitivePipeline.js";
  4. import createTaskProcessorWorker from "./createTaskProcessorWorker.js";
  5. const moduleCache = {};
  6. function getModule(moduleName) {
  7. let module = moduleCache[moduleName];
  8. if (!defined(module)) {
  9. if (typeof exports === "object") {
  10. // Use CommonJS-style require.
  11. moduleCache[module] = module = require(`Workers/${moduleName}`);
  12. } else {
  13. // Use AMD-style require.
  14. // in web workers, require is synchronous
  15. require([`Workers/${moduleName}`], function (f) {
  16. module = f;
  17. moduleCache[module] = f;
  18. });
  19. }
  20. }
  21. return module;
  22. }
  23. function createGeometry(parameters, transferableObjects) {
  24. const subTasks = parameters.subTasks;
  25. const length = subTasks.length;
  26. const resultsOrPromises = new Array(length);
  27. for (let i = 0; i < length; i++) {
  28. const task = subTasks[i];
  29. const geometry = task.geometry;
  30. const moduleName = task.moduleName;
  31. if (defined(moduleName)) {
  32. const createFunction = getModule(moduleName);
  33. resultsOrPromises[i] = createFunction(geometry, task.offset);
  34. } else {
  35. //Already created geometry
  36. resultsOrPromises[i] = geometry;
  37. }
  38. }
  39. return Promise.all(resultsOrPromises).then(function (results) {
  40. return PrimitivePipeline.packCreateGeometryResults(
  41. results,
  42. transferableObjects
  43. );
  44. });
  45. }
  46. export default createTaskProcessorWorker(createGeometry);