sdfsdfs
This commit is contained in:
112
node_modules/pixi.js/lib/prepare/PrepareBase.mjs
generated
vendored
Normal file
112
node_modules/pixi.js/lib/prepare/PrepareBase.mjs
generated
vendored
Normal file
@@ -0,0 +1,112 @@
|
||||
import { Container } from '../scene/container/Container.mjs';
|
||||
import { UPDATE_PRIORITY } from '../ticker/const.mjs';
|
||||
import { Ticker } from '../ticker/Ticker.mjs';
|
||||
|
||||
"use strict";
|
||||
const _PrepareBase = class _PrepareBase {
|
||||
/**
|
||||
* @param {rendering.Renderer} renderer - A reference to the current renderer
|
||||
*/
|
||||
constructor(renderer) {
|
||||
/** called per frame by the ticker, defer processing to next tick */
|
||||
this._tick = () => {
|
||||
this.timeout = setTimeout(this._processQueue, 0);
|
||||
};
|
||||
/** process the queue up to max item limit per frame */
|
||||
this._processQueue = () => {
|
||||
const { queue } = this;
|
||||
let itemsProcessed = 0;
|
||||
while (queue.length && itemsProcessed < _PrepareBase.uploadsPerFrame) {
|
||||
const queueItem = queue.shift();
|
||||
this.uploadQueueItem(queueItem);
|
||||
itemsProcessed++;
|
||||
}
|
||||
if (queue.length) {
|
||||
Ticker.system.addOnce(this._tick, this, UPDATE_PRIORITY.UTILITY);
|
||||
} else {
|
||||
this._resolve();
|
||||
}
|
||||
};
|
||||
this.renderer = renderer;
|
||||
this.queue = [];
|
||||
this.resolves = [];
|
||||
}
|
||||
/**
|
||||
* Return a copy of the queue
|
||||
* @returns {PrepareQueueItem[]} The queue
|
||||
*/
|
||||
getQueue() {
|
||||
return [...this.queue];
|
||||
}
|
||||
/**
|
||||
* Add a textures or graphics resource to the queue
|
||||
* @param {PrepareSourceItem | PrepareSourceItem[]} resource
|
||||
*/
|
||||
add(resource) {
|
||||
const resourceArray = Array.isArray(resource) ? resource : [resource];
|
||||
for (const resourceItem of resourceArray) {
|
||||
if (resourceItem instanceof Container) {
|
||||
this._addContainer(resourceItem);
|
||||
} else {
|
||||
this.resolveQueueItem(resourceItem, this.queue);
|
||||
}
|
||||
}
|
||||
return this;
|
||||
}
|
||||
/**
|
||||
* Recursively add a container and its children to the queue
|
||||
* @param {Container} container - The container to add to the queue
|
||||
*/
|
||||
_addContainer(container) {
|
||||
this.resolveQueueItem(container, this.queue);
|
||||
for (const child of container.children) {
|
||||
this._addContainer(child);
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Upload all the textures and graphics to the GPU (optionally add more resources to the queue first)
|
||||
* @param {PrepareSourceItem | PrepareSourceItem[] | undefined} resource
|
||||
*/
|
||||
upload(resource) {
|
||||
if (resource) {
|
||||
this.add(resource);
|
||||
}
|
||||
return new Promise((resolve) => {
|
||||
if (this.queue.length) {
|
||||
this.resolves.push(resolve);
|
||||
this.dedupeQueue();
|
||||
Ticker.system.addOnce(this._tick, this, UPDATE_PRIORITY.UTILITY);
|
||||
} else {
|
||||
resolve();
|
||||
}
|
||||
});
|
||||
}
|
||||
/** eliminate duplicates before processing */
|
||||
dedupeQueue() {
|
||||
const hash = /* @__PURE__ */ Object.create(null);
|
||||
let nextUnique = 0;
|
||||
for (let i = 0; i < this.queue.length; i++) {
|
||||
const current = this.queue[i];
|
||||
if (!hash[current.uid]) {
|
||||
hash[current.uid] = true;
|
||||
this.queue[nextUnique++] = current;
|
||||
}
|
||||
}
|
||||
this.queue.length = nextUnique;
|
||||
}
|
||||
/** Call all the resolve callbacks */
|
||||
_resolve() {
|
||||
const { resolves } = this;
|
||||
const array = resolves.slice(0);
|
||||
resolves.length = 0;
|
||||
for (const resolve of array) {
|
||||
resolve();
|
||||
}
|
||||
}
|
||||
};
|
||||
/** The number of uploads to process per frame */
|
||||
_PrepareBase.uploadsPerFrame = 4;
|
||||
let PrepareBase = _PrepareBase;
|
||||
|
||||
export { PrepareBase };
|
||||
//# sourceMappingURL=PrepareBase.mjs.map
|
Reference in New Issue
Block a user