Files
nothoughts/node_modules/pixi.js/lib/rendering/renderers/shared/buffer/BufferResource.mjs
2025-08-04 18:57:35 +02:00

79 lines
2.4 KiB
JavaScript

import EventEmitter from 'eventemitter3';
import { uid } from '../../../../utils/data/uid.mjs';
"use strict";
class BufferResource extends EventEmitter {
/**
* Create a new Buffer Resource.
* @param options - The options for the buffer resource
* @param options.buffer - The underlying buffer that this resource is using
* @param options.offset - The offset of the buffer this resource is using.
* If not provided, then it will use the offset of the buffer.
* @param options.size - The size of the buffer this resource is using.
* If not provided, then it will use the size of the buffer.
*/
constructor({ buffer, offset, size }) {
super();
/**
* emits when the underlying buffer has changed shape (i.e. resized)
* letting the renderer know that it needs to discard the old buffer on the GPU and create a new one
* @event change
*/
/** a unique id for this uniform group used through the renderer */
this.uid = uid("buffer");
/**
* a resource type, used to identify how to handle it when its in a bind group / shader resource
* @internal
* @ignore
*/
this._resourceType = "bufferResource";
/**
* used internally to know if a uniform group was used in the last render pass
* @internal
* @ignore
*/
this._touched = 0;
/**
* the resource id used internally by the renderer to build bind group keys
* @internal
* @ignore
*/
this._resourceId = uid("resource");
/**
* A cheeky hint to the GL renderer to let it know this is a BufferResource
* @internal
* @ignore
*/
this._bufferResource = true;
/**
* Has the Buffer resource been destroyed?
* @readonly
*/
this.destroyed = false;
this.buffer = buffer;
this.offset = offset | 0;
this.size = size;
this.buffer.on("change", this.onBufferChange, this);
}
onBufferChange() {
this._resourceId = uid("resource");
this.emit("change", this);
}
/**
* Destroys this resource. Make sure the underlying buffer is not used anywhere else
* if you want to destroy it as well, or code will explode
* @param destroyBuffer - Should the underlying buffer be destroyed as well?
*/
destroy(destroyBuffer = false) {
this.destroyed = true;
if (destroyBuffer) {
this.buffer.destroy();
}
this.emit("change", this);
this.buffer = null;
}
}
export { BufferResource };
//# sourceMappingURL=BufferResource.mjs.map