You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
54 lines
1.5 KiB
JavaScript
54 lines
1.5 KiB
JavaScript
/* global require */
|
|
import defined from "../Core/defined.js";
|
|
import PrimitivePipeline from "../Scene/PrimitivePipeline.js";
|
|
import when from "../ThirdParty/when.js";
|
|
import createTaskProcessorWorker from "./createTaskProcessorWorker.js";
|
|
|
|
var moduleCache = {};
|
|
|
|
function getModule(moduleName) {
|
|
var module = moduleCache[moduleName];
|
|
if (!defined(module)) {
|
|
if (typeof exports === "object") {
|
|
// Use CommonJS-style require.
|
|
moduleCache[module] = module = require("Workers/" + moduleName);
|
|
} else {
|
|
// Use AMD-style require.
|
|
// in web workers, require is synchronous
|
|
require(["Workers/" + moduleName], function (f) {
|
|
module = f;
|
|
moduleCache[module] = f;
|
|
});
|
|
}
|
|
}
|
|
return module;
|
|
}
|
|
|
|
function createGeometry(parameters, transferableObjects) {
|
|
var subTasks = parameters.subTasks;
|
|
var length = subTasks.length;
|
|
var resultsOrPromises = new Array(length);
|
|
|
|
for (var i = 0; i < length; i++) {
|
|
var task = subTasks[i];
|
|
var geometry = task.geometry;
|
|
var moduleName = task.moduleName;
|
|
|
|
if (defined(moduleName)) {
|
|
var createFunction = getModule(moduleName);
|
|
resultsOrPromises[i] = createFunction(geometry, task.offset);
|
|
} else {
|
|
//Already created geometry
|
|
resultsOrPromises[i] = geometry;
|
|
}
|
|
}
|
|
|
|
return when.all(resultsOrPromises, function (results) {
|
|
return PrimitivePipeline.packCreateGeometryResults(
|
|
results,
|
|
transferableObjects
|
|
);
|
|
});
|
|
}
|
|
export default createTaskProcessorWorker(createGeometry);
|