UNPKG

rc-js-util

Version:

A collection of TS and C++ utilities to help writing performant and correct applications, achieved through strict typing and (removable) invariant checking.

77 lines 3.06 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createSegmentedBufferView = exports.SegmentedBufferDescriptor = void 0; const _debug_js_1 = require("../debug/_debug.js"); const null_pointer_js_1 = require("../web-assembly/emscripten/null-pointer.js"); const shared_memory_block_js_1 = require("../web-assembly/shared-memory/shared-memory-block.js"); /** * @public * Describes a buffer in a fashion similar to an OpenGL attribute. */ class SegmentedBufferDescriptor { constructor(blockSize, stride = blockSize, start = 0, count = -1) { this.blockSize = blockSize; this.stride = stride; this.start = start; this.count = count; this.end = start + count; } /** * @returns Malloc'd buffer in the shape of `SegmentedDataViewOptions`. * @remarks You must manually `free` this. */ createRawOptions(wrapper) { const ptr = wrapper.instance._jsUtilMalloc(3); if (ptr == null_pointer_js_1.nullPtr) { return null_pointer_js_1.nullPtr; } this.setMemory(wrapper, ptr); return ptr; } createWrapped(wrapper, owner) { const smb = shared_memory_block_js_1.SharedMemoryBlock.createOne(wrapper, owner, 3); this.setMemory(wrapper, smb.pointer); return smb; } setMemory(wrapper, ptr) { const dv = wrapper.getDataView(); dv.setUint8(ptr, this.blockSize); dv.setUint8(ptr + 1, this.stride); dv.setUint8(ptr + 2, this.start); } } exports.SegmentedBufferDescriptor = SegmentedBufferDescriptor; function createSegmentedBufferView(buffer, descriptor, wrapper, owner) { return new SegmentedBufferView(buffer, descriptor, wrapper !== null && wrapper !== void 0 ? wrapper : null, owner !== null && owner !== void 0 ? owner : null); } exports.createSegmentedBufferView = createSegmentedBufferView; class SegmentedBufferView { getWrapper() { return this.wrapper; } constructor(buffer, descriptor, wrapper, owner) { this.buffer = buffer; this.descriptor = descriptor; this.wrapper = wrapper; if (_BUILD.DEBUG) { _debug_js_1._Debug.assert(descriptor.stride > 0, "invalid stride size"); _debug_js_1._Debug.assert(descriptor.blockSize > 0, "invalid block size"); } if (descriptor.count === -1) { const writable = descriptor; writable.count = ((buffer.getArray().length - descriptor.start) / descriptor.stride) | 0; writable.end = descriptor.start + descriptor.count * descriptor.stride; } if (buffer.getSharedObjectHandle() == null) { _BUILD.DEBUG && _debug_js_1._Debug.assert(wrapper != null, "received shared object, but it was not bound"); this.resourceHandle = wrapper.lifecycleStrategy.createNode(owner); } } getBuffer() { return this.buffer; } getDescriptor() { return this.descriptor; } } //# sourceMappingURL=segmented-buffer-view.js.map