sdfsdfs
This commit is contained in:
99
node_modules/pixi.js/lib/rendering/renderers/gpu/shader/BindGroup.mjs
generated
vendored
Normal file
99
node_modules/pixi.js/lib/rendering/renderers/gpu/shader/BindGroup.mjs
generated
vendored
Normal file
@@ -0,0 +1,99 @@
|
||||
"use strict";
|
||||
class BindGroup {
|
||||
/**
|
||||
* Create a new instance eof the Bind Group.
|
||||
* @param resources - The resources that are bound together for use by a shader.
|
||||
*/
|
||||
constructor(resources) {
|
||||
/** The resources that are bound together for use by a shader. */
|
||||
this.resources = /* @__PURE__ */ Object.create(null);
|
||||
this._dirty = true;
|
||||
let index = 0;
|
||||
for (const i in resources) {
|
||||
const resource = resources[i];
|
||||
this.setResource(resource, index++);
|
||||
}
|
||||
this._updateKey();
|
||||
}
|
||||
/**
|
||||
* Updates the key if its flagged as dirty. This is used internally to
|
||||
* match this bind group to a WebGPU BindGroup.
|
||||
* @internal
|
||||
* @ignore
|
||||
*/
|
||||
_updateKey() {
|
||||
if (!this._dirty)
|
||||
return;
|
||||
this._dirty = false;
|
||||
const keyParts = [];
|
||||
let index = 0;
|
||||
for (const i in this.resources) {
|
||||
keyParts[index++] = this.resources[i]._resourceId;
|
||||
}
|
||||
this._key = keyParts.join("|");
|
||||
}
|
||||
/**
|
||||
* Set a resource at a given index. this function will
|
||||
* ensure that listeners will be removed from the current resource
|
||||
* and added to the new resource.
|
||||
* @param resource - The resource to set.
|
||||
* @param index - The index to set the resource at.
|
||||
*/
|
||||
setResource(resource, index) {
|
||||
const currentResource = this.resources[index];
|
||||
if (resource === currentResource)
|
||||
return;
|
||||
if (currentResource) {
|
||||
resource.off?.("change", this.onResourceChange, this);
|
||||
}
|
||||
resource.on?.("change", this.onResourceChange, this);
|
||||
this.resources[index] = resource;
|
||||
this._dirty = true;
|
||||
}
|
||||
/**
|
||||
* Returns the resource at the current specified index.
|
||||
* @param index - The index of the resource to get.
|
||||
* @returns - The resource at the specified index.
|
||||
*/
|
||||
getResource(index) {
|
||||
return this.resources[index];
|
||||
}
|
||||
/**
|
||||
* Used internally to 'touch' each resource, to ensure that the GC
|
||||
* knows that all resources in this bind group are still being used.
|
||||
* @param tick - The current tick.
|
||||
* @internal
|
||||
* @ignore
|
||||
*/
|
||||
_touch(tick) {
|
||||
const resources = this.resources;
|
||||
for (const i in resources) {
|
||||
resources[i]._touched = tick;
|
||||
}
|
||||
}
|
||||
/** Destroys this bind group and removes all listeners. */
|
||||
destroy() {
|
||||
const resources = this.resources;
|
||||
for (const i in resources) {
|
||||
const resource = resources[i];
|
||||
resource.off?.("change", this.onResourceChange, this);
|
||||
}
|
||||
this.resources = null;
|
||||
}
|
||||
onResourceChange(resource) {
|
||||
this._dirty = true;
|
||||
if (resource.destroyed) {
|
||||
const resources = this.resources;
|
||||
for (const i in resources) {
|
||||
if (resources[i] === resource) {
|
||||
resources[i] = null;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
this._updateKey();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export { BindGroup };
|
||||
//# sourceMappingURL=BindGroup.mjs.map
|
Reference in New Issue
Block a user