createGeometry.js 1.5 KB

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