gpu-curtains
Version:
gpu-curtains is a 3D WebGPU rendering engine. It can be used as a standalone 3D engine, but also includes extra classes focused on mapping 3d objects to DOM elements; It allows users to synchronize values such as position, sizing, or scale between them.
69 lines (67 loc) • 2.44 kB
JavaScript
var __typeError = (msg) => {
throw TypeError(msg);
};
var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value);
var __privateWrapper = (obj, member, setter, getter) => ({
set _(value) {
__privateSet(obj, member, value);
},
get _() {
return __privateGet(obj, member, getter);
}
});
var _taskCount;
class TasksQueueManager {
/**
* TaskQueueManager constructor
*/
constructor() {
/** Private number to assign a unique id to each {@link TaskQueueItem | task queue item} */
__privateAdd(this, _taskCount, 0);
this.queue = [];
}
/**
* Add a {@link TaskQueueItem | task queue item} to the queue
* @param callback - callback to add to the {@link TaskQueueItem | task queue item}
* @param parameters - {@link TaskQueueItemParams | parameters} of the {@link TaskQueueItem | task queue item} to add
* @returns - {@link TaskQueueItem#id | id} of the new {@link TaskQueueItem | task queue item}, useful to later remove the task if needed
*/
add(callback = (args) => {
}, { order = this.queue.length, once = false } = {}) {
const task = {
callback,
order,
once,
id: __privateGet(this, _taskCount)
};
__privateWrapper(this, _taskCount)._++;
this.queue.push(task);
this.queue.sort((a, b) => {
return a.order - b.order;
});
return task.id;
}
/**
* Remove a {@link TaskQueueItem | task queue item} from the queue
* @param taskId - {@link TaskQueueItem#id | id} of the new {@link TaskQueueItem | task queue item} to remove
*/
remove(taskId = 0) {
this.queue = this.queue.filter((task) => task.id !== taskId);
}
/**
* Execute the {@link TasksQueueManager#queue | tasks queue array}
*/
execute(args) {
this.queue.forEach((task) => {
task.callback(args);
if (task.once) {
this.remove(task.id);
}
});
}
}
_taskCount = new WeakMap();
export { TasksQueueManager };