createGeometry.js 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  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(results, transferableObjects);
  42. });
  43. }
  44. export default createTaskProcessorWorker(createGeometry);