123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- /**
- * This class is a small wrapper around a native buffer that can be read and/or written
- */
- export class StorageBuffer {
- /**
- * Creates a new storage buffer instance
- * @param engine The engine the buffer will be created inside
- * @param size The size of the buffer in bytes
- * @param creationFlags flags to use when creating the buffer (see undefined). The BUFFER_CREATIONFLAG_STORAGE flag will be automatically added.
- * @param label defines the label of the buffer (for debug purpose)
- */
- constructor(engine, size, creationFlags = 3, label) {
- this._engine = engine;
- this._label = label;
- this._engine._storageBuffers.push(this);
- this._create(size, creationFlags);
- }
- _create(size, creationFlags) {
- this._bufferSize = size;
- this._creationFlags = creationFlags;
- this._buffer = this._engine.createStorageBuffer(size, creationFlags, this._label);
- }
- /** @internal */
- _rebuild() {
- this._create(this._bufferSize, this._creationFlags);
- }
- /**
- * Gets underlying native buffer
- * @returns underlying native buffer
- */
- getBuffer() {
- return this._buffer;
- }
- /**
- * Updates the storage buffer
- * @param data the data used to update the storage buffer
- * @param byteOffset the byte offset of the data (optional)
- * @param byteLength the byte length of the data (optional)
- */
- update(data, byteOffset, byteLength) {
- if (!this._buffer) {
- return;
- }
- this._engine.updateStorageBuffer(this._buffer, data, byteOffset, byteLength);
- }
- /**
- * Reads data from the storage buffer
- * @param offset The offset in the storage buffer to start reading from (default: 0)
- * @param size The number of bytes to read from the storage buffer (default: capacity of the buffer)
- * @param buffer The buffer to write the data we have read from the storage buffer to (optional)
- * @param noDelay If true, a call to flushFramebuffer will be issued so that the data can be read back immediately. This can speed up data retrieval, at the cost of a small perf penalty (default: false).
- * @returns If not undefined, returns the (promise) buffer (as provided by the 4th parameter) filled with the data, else it returns a (promise) Uint8Array with the data read from the storage buffer
- */
- read(offset, size, buffer, noDelay) {
- return this._engine.readFromStorageBuffer(this._buffer, offset, size, buffer, noDelay);
- }
- /**
- * Disposes the storage buffer
- */
- dispose() {
- const storageBuffers = this._engine._storageBuffers;
- const index = storageBuffers.indexOf(this);
- if (index !== -1) {
- storageBuffers[index] = storageBuffers[storageBuffers.length - 1];
- storageBuffers.pop();
- }
- this._engine._releaseBuffer(this._buffer);
- this._buffer = null;
- }
- }
- //# sourceMappingURL=storageBuffer.js.map
|