@pirireis/webglobeplugins 0.9.9 → 0.9.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Math/angle-calculation.js +15 -0
- package/Math/arc.js +65 -0
- package/Math/bounds/line-bbox.js +190 -0
- package/Math/constants.js +9 -0
- package/Math/frustum/camera.js +24 -0
- package/Math/frustum/from-globeinfo.js +48 -0
- package/Math/frustum/types.js +2 -0
- package/Math/globe-util/horizon-plane.js +112 -0
- package/Math/index.js +1 -0
- package/Math/juction/arc-plane.js +83 -0
- package/Math/juction/line-sphere.js +25 -0
- package/Math/juction/plane-plane.js +58 -0
- package/Math/line.js +58 -0
- package/Math/matrix4.js +1 -0
- package/Math/methods.js +206 -0
- package/Math/plane.js +62 -0
- package/Math/quaternion.js +108 -0
- package/Math/types.js +2 -0
- package/Math/utils.js +4 -0
- package/Math/vec3.js +129 -0
- package/algorithms/search-binary.js +19 -0
- package/altitude-locator/adaptors.js +1 -0
- package/altitude-locator/draw-subset-obj.js +19 -0
- package/altitude-locator/keymethod.js +1 -0
- package/altitude-locator/plugin.js +357 -0
- package/altitude-locator/types.js +23 -0
- package/arrowfield/adaptor.js +15 -0
- package/arrowfield/index.js +10 -0
- package/arrowfield/plugin.js +89 -0
- package/bearing-line/index.js +8 -0
- package/bearing-line/plugin.js +474 -0
- package/circle-line-chain/chain-list-map.js +211 -0
- package/circle-line-chain/init.js +1 -0
- package/circle-line-chain/plugin.js +449 -0
- package/circle-line-chain/util.js +5 -0
- package/compass-rose/compass-rose-padding-flat.js +247 -0
- package/compass-rose/compass-text-writer.js +161 -0
- package/compass-rose/index.js +7 -0
- package/compassrose/compassrose.js +300 -0
- package/compassrose/index.js +8 -0
- package/globe-types.js +1 -0
- package/heatwave/index.js +10 -0
- package/heatwave/isobar/objectarraylabels.js +206 -0
- package/heatwave/isobar/plugin.js +362 -0
- package/heatwave/isobar/quadtreecontours.js +316 -0
- package/heatwave/plugins/heatwaveglobeshell.js +224 -0
- package/index.js +11 -11
- package/jest.config.js +7 -0
- package/package.json +4 -4
- package/partialrings/buffer-manager.js +113 -0
- package/partialrings/index.js +41 -0
- package/partialrings/plugin.js +171 -0
- package/partialrings/program.js +197 -0
- package/pin/pin-object-array.js +308 -0
- package/pin/pin-point-totem.js +61 -0
- package/point-heat-map/adaptors/timetracksplugin-format-to-this.js +66 -0
- package/point-heat-map/index.js +1 -0
- package/point-heat-map/plugin-webworker.js +131 -0
- package/point-heat-map/point-to-heat-map-flow.js +129 -0
- package/point-tracks/key-methods.js +5 -0
- package/point-tracks/plugin.js +353 -0
- package/programs/arrowfield/index.js +7 -0
- package/programs/arrowfield/logic.js +149 -0
- package/programs/arrowfield/object.js +68 -0
- package/programs/data2legend/density-to-legend.js +77 -0
- package/programs/data2legend/point-to-density-texture.js +75 -0
- package/programs/float2legendwithratio/index.js +8 -0
- package/programs/float2legendwithratio/logic.js +125 -0
- package/programs/float2legendwithratio/object.js +113 -0
- package/programs/globe-util/is-globe-moved.js +22 -0
- package/programs/globeshell/index.js +8 -0
- package/programs/globeshell/noise/noises.js +1 -0
- package/programs/globeshell/wiggle/index.js +8 -0
- package/programs/globeshell/wiggle/logic.js +252 -0
- package/programs/globeshell/wiggle/object.js +74 -0
- package/programs/helpers/blender/index.js +1 -0
- package/programs/helpers/blender/program.js +62 -0
- package/programs/helpers/fadeaway/index.js +7 -0
- package/programs/helpers/fadeaway/logic.js +50 -0
- package/programs/helpers/fadeaway/object.js +21 -0
- package/programs/helpers/index.js +8 -0
- package/programs/index.js +58 -0
- package/programs/interface.js +1 -0
- package/programs/line-on-globe/angled-line.js +117 -0
- package/programs/line-on-globe/circle-accurate-3d.js +91 -0
- package/programs/line-on-globe/circle-accurate-flat.js +158 -0
- package/programs/line-on-globe/circle-accurate.js +108 -0
- package/programs/line-on-globe/circle.js +102 -0
- package/programs/line-on-globe/degree-padding-around-circle-3d.js +109 -0
- package/programs/line-on-globe/index.js +1 -0
- package/programs/line-on-globe/lines-color-instanced-flat.js +91 -0
- package/programs/line-on-globe/linestrip.js +110 -0
- package/programs/line-on-globe/naive-accurate-flexible.js +125 -0
- package/programs/line-on-globe/to-the-surface.js +82 -0
- package/programs/line-on-globe/util.js +8 -0
- package/programs/picking/pickable-renderer.js +104 -0
- package/programs/point-on-globe/element-globe-surface-glow.js +102 -0
- package/programs/point-on-globe/element-point-glow.js +85 -0
- package/programs/point-on-globe/square-pixel-point.js +125 -0
- package/programs/programcache.js +131 -0
- package/programs/rings/distancering/circleflatprogram.js +114 -0
- package/programs/rings/distancering/circlepaddingfreeangleprogram.js +358 -0
- package/programs/rings/distancering/circlepaddysharedbuffer.js +433 -0
- package/programs/rings/distancering/index.js +14 -0
- package/programs/rings/distancering/paddyflatprogram.js +119 -0
- package/programs/rings/distancering/paddyflatprogram2d.js +121 -0
- package/programs/rings/distancering/paddyflatprogram3d.js +119 -0
- package/programs/rings/distancering/shader.js +1 -0
- package/programs/rings/index.js +17 -0
- package/programs/rings/partial-ring/piece-of-pie.js +173 -0
- package/programs/totems/camerauniformblock.js +147 -0
- package/programs/totems/canvas-webglobe-info.js +102 -0
- package/programs/totems/gpu-selection-uniform-block.js +104 -0
- package/programs/totems/index.js +40 -0
- package/programs/two-d/pixel-circle.js +1 -0
- package/programs/two-d/pixel-padding-for-compass.js +101 -0
- package/programs/util.js +18 -0
- package/programs/vectorfields/index.js +23 -0
- package/programs/vectorfields/logics/drawrectangleparticles.js +66 -0
- package/programs/vectorfields/logics/index.js +12 -0
- package/programs/vectorfields/logics/pixelbased.js +86 -0
- package/programs/vectorfields/logics/ubo.js +57 -0
- package/programs/vectorfields/pingpongbuffermanager.js +80 -0
- package/rangerings/enum.js +5 -0
- package/rangerings/index.js +15 -0
- package/rangerings/plugin.js +610 -0
- package/rangerings/rangeringangletext.js +341 -0
- package/rangerings/ring-account.js +134 -0
- package/shaders/fragment-toy/firework.js +4 -0
- package/shaders/fragment-toy/singularity.js +5 -0
- package/shape-on-terrain/arc/naive/plugin.js +252 -0
- package/timetracks/adaptors-line-strip.js +82 -0
- package/timetracks/adaptors.js +136 -0
- package/timetracks/index.js +19 -0
- package/timetracks/plugin-line-strip.js +254 -0
- package/timetracks/plugin.js +262 -0
- package/timetracks/program-line-strip.js +418 -0
- package/timetracks/program.js +466 -0
- package/timetracks/programpoint-line-strip.js +101 -0
- package/timetracks/programpoint.js +101 -0
- package/types.js +15 -0
- package/util/account/bufferoffsetmanager.js +202 -0
- package/util/account/index.js +23 -0
- package/util/account/single-attribute-buffer-management/buffer-manager.js +112 -0
- package/util/account/single-attribute-buffer-management/buffer-orchestrator.js +180 -0
- package/util/account/single-attribute-buffer-management/index.js +9 -0
- package/util/account/single-attribute-buffer-management/object-store.js +53 -0
- package/util/account/single-attribute-buffer-management/types.js +2 -0
- package/util/account/util.js +24 -0
- package/util/algorithms/index.js +1 -0
- package/util/algorithms/search-binary.js +28 -0
- package/util/check/get.js +18 -0
- package/util/check/index.js +1 -0
- package/util/check/typecheck.js +51 -0
- package/util/geometry/index.js +53 -0
- package/util/gl-util/buffer/attribute-loader.js +81 -0
- package/util/gl-util/buffer/index.js +6 -0
- package/util/gl-util/buffer/types.js +1 -0
- package/util/gl-util/draw-options/methods.js +38 -0
- package/util/gl-util/draw-options/types.js +15 -0
- package/util/gl-util/uniform-block/manager.js +168 -0
- package/util/gl-util/uniform-block/shader.js +1 -0
- package/util/gl-util/uniform-block/types.js +8 -0
- package/util/heatwavedatamanager/datamanager.js +212 -0
- package/util/heatwavedatamanager/index.js +10 -0
- package/util/heatwavedatamanager/pointcoordinatesdatacalculator.js +125 -0
- package/util/heatwavedatamanager/pointcoordsmeta.js +21 -0
- package/util/index.js +57 -0
- package/util/interpolation/index.js +1 -0
- package/util/interpolation/timetrack/index.js +5 -0
- package/util/interpolation/timetrack/timetrack-interpolator.js +81 -0
- package/util/interpolation/timetrack/web-worker-str.js +5 -0
- package/util/interpolation/timetrack/web-worker.js +48 -0
- package/util/jshelpers/data-filler.js +20 -0
- package/util/jshelpers/equality.js +20 -0
- package/util/jshelpers/index.js +37 -0
- package/util/jshelpers/timefilters.js +32 -0
- package/util/picking/fence.js +46 -0
- package/util/picking/picker-displayer.js +145 -0
- package/util/programs/draw-texture-on-canvas.js +71 -0
- package/util/programs/index.js +17 -0
- package/util/programs/shapesonglobe.js +174 -0
- package/util/programs/supersampletotextures.js +107 -0
- package/util/programs/texturetoglobe.js +132 -0
- package/util/shaderfunctions/geometrytransformations.js +45 -0
- package/util/shaderfunctions/index.js +18 -0
- package/util/shaderfunctions/nodata.js +5 -0
- package/util/shaderfunctions/noisefunctions.js +13 -0
- package/util/surface-line-data/arc-bboxes.js +25 -0
- package/util/surface-line-data/arcs-to-cuts.js +53 -0
- package/util/surface-line-data/cut-arc.js +1 -0
- package/util/surface-line-data/flow.js +28 -0
- package/util/surface-line-data/rbush-manager.js +1 -0
- package/util/surface-line-data/types.js +1 -0
- package/util/surface-line-data/web-worker.js +1 -0
- package/util/webglobe/gldefaultstates.js +7 -0
- package/util/webglobe/index.js +18 -0
- package/util/webglobe/rasteroverlay.js +80 -0
- package/util/webglobjectbuilders.js +393 -0
- package/util/webglobjectbuilders1.js +238 -0
- package/waveparticles/adaptor.js +18 -0
- package/waveparticles/index.js +10 -0
- package/waveparticles/plugin.js +271 -0
- package/wind/imagetovectorfieldandmagnitude.js +35 -0
- package/wind/index.js +14 -0
- package/wind/plugin.js +724 -0
- package/wind/vectorfieldimage.js +25 -0
- package/write-text/attached-text-writer.js +93 -0
- package/write-text/context-text.js +105 -0
- package/write-text/context-text3.js +160 -0
- package/write-text/index.js +5 -0
- package/write-text/writer-plugin.js +8 -0
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
var util_1 = require("../util");
|
|
4
|
+
var programs_1 = require("../programs");
|
|
5
|
+
var vertexShader = "#version 300 es\n\nlayout(std140) uniform GlobeCamera {\n mat4 view; // 64 bytes 0\n mat4 projection; // 64 bytes 64\n vec3 translate; // 12 bytes 128\n bool is3D; // 4 bytes 140\n vec2 mapWH; // 8 bytes 144\n vec2 screenWH; // 8 bytes 152\n float z_level; // 4 bytes 160\n};\n\nlayout(std140) uniform Globals {\n float head_time;\n float final_opacity;\n float point_size;\n};\n\nin vec3 start_position;\nin float start_time;\nin vec3 start_color;\nin vec3 end_position;\nin float end_time;\nin vec3 end_color;\nout vec4 v_color;\n\n" + util_1.shaderfunctions.pixelXYToCartesian3DPoint + util_1.shaderfunctions.pixelXYToCartesian2DPoint + "\n\nvoid main() {\n if (head_time < start_time || head_time > end_time) { return; }\n float t = (head_time - start_time) / (end_time - start_time);\n vec3 position = mix(start_position, end_position, t);\n if (is3D){\n vec3 pos = pixelXYToCartesian3DPoint(position);\n gl_Position = projection * view * vec4(pos - translate, 1.0);\n } else {\n vec2 xy = pixelXYToCartesian2DPoint(position.xy, translate.xy, mapWH, screenWH);\n gl_Position = projection * vec4(xy.x, xy.y, 0.0, 1.0);\n }\n v_color = vec4(mix(start_color, end_color, t), final_opacity);\n gl_PointSize = point_size;\n}";
|
|
6
|
+
var fragmentShader = "#version 300 es\nprecision highp float;\nin vec4 v_color;\nout vec4 outColor;\nvoid main() {\n outColor = v_color;\n}";
|
|
7
|
+
var default_1 = /** @class */ (function () {
|
|
8
|
+
function default_1(gl, globe, attrBuffer, options) {
|
|
9
|
+
this.gl = gl;
|
|
10
|
+
this._cameraBlockBindingPoint = 0;
|
|
11
|
+
this._globalsBlockBindingPoint = 1;
|
|
12
|
+
this.cameraUniformBlockTotem = programs_1.globeProgramCache.getProgram(globe, programs_1.CameraUniformBlockTotem);
|
|
13
|
+
this._vao = gl.createVertexArray();
|
|
14
|
+
this._attbuffer = attrBuffer;
|
|
15
|
+
this.program = this._createProgram();
|
|
16
|
+
this._drawCount = 0;
|
|
17
|
+
this._globalsbuffer = gl.createBuffer();
|
|
18
|
+
{
|
|
19
|
+
var _a = this, gl_1 = _a.gl, _globalsbuffer = _a._globalsbuffer;
|
|
20
|
+
gl_1.bindBuffer(gl_1.UNIFORM_BUFFER, _globalsbuffer);
|
|
21
|
+
gl_1.bufferData(gl_1.UNIFORM_BUFFER, 12, gl_1.STREAM_DRAW);
|
|
22
|
+
gl_1.bufferSubData(gl_1.UNIFORM_BUFFER, 0, new Float32Array([0, options.opacity, options.pointSize]));
|
|
23
|
+
gl_1.bindBufferBase(gl_1.UNIFORM_BUFFER, this._globalsBlockBindingPoint, _globalsbuffer);
|
|
24
|
+
gl_1.bindBuffer(gl_1.UNIFORM_BUFFER, null);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
default_1.prototype._createProgram = function () {
|
|
28
|
+
var gl = this.gl;
|
|
29
|
+
var program = (0, util_1.createProgram)(gl, vertexShader, fragmentShader);
|
|
30
|
+
var ubo = this.cameraUniformBlockTotem.getUBO(); // ubo bl
|
|
31
|
+
var cameraBlockIndex = gl.getUniformBlockIndex(program, "GlobeCamera");
|
|
32
|
+
gl.uniformBlockBinding(program, cameraBlockIndex, this._cameraBlockBindingPoint);
|
|
33
|
+
var globalsBlockIndex = gl.getUniformBlockIndex(program, "Globals");
|
|
34
|
+
gl.bindBufferBase(gl.UNIFORM_BUFFER, this._cameraBlockBindingPoint, ubo);
|
|
35
|
+
gl.uniformBlockBinding(program, globalsBlockIndex, this._globalsBlockBindingPoint);
|
|
36
|
+
gl.bindBufferBase(gl.UNIFORM_BUFFER, this._globalsBlockBindingPoint, this._globalsbuffer);
|
|
37
|
+
// numaralarda yanlışlık olabilir
|
|
38
|
+
var start_position = gl.getAttribLocation(program, "start_position");
|
|
39
|
+
var start_time = gl.getAttribLocation(program, "start_time");
|
|
40
|
+
var start_color = gl.getAttribLocation(program, "start_color");
|
|
41
|
+
var end_position = gl.getAttribLocation(program, "end_position");
|
|
42
|
+
var end_time = gl.getAttribLocation(program, "end_time");
|
|
43
|
+
var end_color = gl.getAttribLocation(program, "end_color");
|
|
44
|
+
gl.bindVertexArray(this._vao);
|
|
45
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, this._attbuffer);
|
|
46
|
+
gl.enableVertexAttribArray(start_position);
|
|
47
|
+
gl.vertexAttribPointer(start_position, 3, gl.FLOAT, false, 72, 0);
|
|
48
|
+
gl.enableVertexAttribArray(start_time);
|
|
49
|
+
gl.vertexAttribPointer(start_time, 1, gl.FLOAT, false, 72, 12);
|
|
50
|
+
gl.enableVertexAttribArray(start_color);
|
|
51
|
+
gl.vertexAttribPointer(start_color, 3, gl.FLOAT, false, 72, 16);
|
|
52
|
+
gl.enableVertexAttribArray(end_position);
|
|
53
|
+
gl.vertexAttribPointer(end_position, 3, gl.FLOAT, false, 72, 36);
|
|
54
|
+
gl.enableVertexAttribArray(end_time);
|
|
55
|
+
gl.vertexAttribPointer(end_time, 1, gl.FLOAT, false, 72, 48);
|
|
56
|
+
gl.enableVertexAttribArray(end_color);
|
|
57
|
+
gl.vertexAttribPointer(end_color, 3, gl.FLOAT, false, 72, 52);
|
|
58
|
+
gl.bindVertexArray(null);
|
|
59
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, null);
|
|
60
|
+
return program;
|
|
61
|
+
};
|
|
62
|
+
default_1.prototype.setOpacity = function (opacity) {
|
|
63
|
+
var _a = this, gl = _a.gl, _globalsbuffer = _a._globalsbuffer;
|
|
64
|
+
gl.bindBuffer(gl.UNIFORM_BUFFER, _globalsbuffer);
|
|
65
|
+
gl.bufferSubData(gl.UNIFORM_BUFFER, 4, new Float32Array([opacity]));
|
|
66
|
+
gl.bindBuffer(gl.UNIFORM_BUFFER, null);
|
|
67
|
+
};
|
|
68
|
+
default_1.prototype.setDrawCount = function (count) {
|
|
69
|
+
this._drawCount = count;
|
|
70
|
+
};
|
|
71
|
+
default_1.prototype.setPointSize = function (size) {
|
|
72
|
+
var _a = this, gl = _a.gl, _globalsbuffer = _a._globalsbuffer;
|
|
73
|
+
gl.bindBuffer(gl.UNIFORM_BUFFER, _globalsbuffer);
|
|
74
|
+
gl.bufferSubData(gl.UNIFORM_BUFFER, 8, new Float32Array([size]));
|
|
75
|
+
gl.bindBuffer(gl.UNIFORM_BUFFER, null);
|
|
76
|
+
};
|
|
77
|
+
default_1.prototype.setHeadTime = function (time) {
|
|
78
|
+
var _a = this, gl = _a.gl, _globalsbuffer = _a._globalsbuffer;
|
|
79
|
+
gl.bindBuffer(gl.UNIFORM_BUFFER, _globalsbuffer);
|
|
80
|
+
gl.bufferSubData(gl.UNIFORM_BUFFER, 0, new Float32Array([time]));
|
|
81
|
+
gl.bindBuffer(gl.UNIFORM_BUFFER, null);
|
|
82
|
+
};
|
|
83
|
+
default_1.prototype.draw = function () {
|
|
84
|
+
var _a = this, gl = _a.gl, program = _a.program, _vao = _a._vao, _drawCount = _a._drawCount;
|
|
85
|
+
gl.useProgram(program);
|
|
86
|
+
gl.bindVertexArray(_vao);
|
|
87
|
+
gl.disable(gl.DEPTH_TEST);
|
|
88
|
+
gl.drawArrays(gl.POINTS, 0, _drawCount);
|
|
89
|
+
gl.enable(gl.DEPTH_TEST);
|
|
90
|
+
gl.bindVertexArray(null);
|
|
91
|
+
};
|
|
92
|
+
default_1.prototype.free = function () {
|
|
93
|
+
var _a = this, gl = _a.gl, _vao = _a._vao, _globalsbuffer = _a._globalsbuffer, program = _a.program;
|
|
94
|
+
gl.deleteVertexArray(_vao);
|
|
95
|
+
// gl.deleteBuffer(_attbuffer);
|
|
96
|
+
gl.deleteBuffer(_globalsbuffer);
|
|
97
|
+
gl.deleteProgram(program);
|
|
98
|
+
};
|
|
99
|
+
return default_1;
|
|
100
|
+
}());
|
|
101
|
+
exports.default = default_1;
|
package/types.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @typedef DrawRange
|
|
4
|
+
* @type {Object}
|
|
5
|
+
* @property {int} first
|
|
6
|
+
* @property {int} count
|
|
7
|
+
*
|
|
8
|
+
* @typedef DrawRangeIndexParamsClient
|
|
9
|
+
* @type {Object}
|
|
10
|
+
* @property {null|DrawRange} drawRange
|
|
11
|
+
* @property {null|Int32List} indexes
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* * @typedef {Array<number>} Color rgba color 0-1 values
|
|
15
|
+
*/
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* BufferOffsetManager
|
|
4
|
+
* Purpose: To manage the offset of the buffer. Plus extend and defrag the buffer.
|
|
5
|
+
* -------------------------------------------------------------------------------------------------------------------------------------------
|
|
6
|
+
* Functions:
|
|
7
|
+
* 1. getOffet(key) : return the offset of the key if not found return false.
|
|
8
|
+
* 2. setOffset(key, offset) : set the offset of the key.
|
|
9
|
+
* 3. nextOffset() : return the next available offset if not return false.
|
|
10
|
+
* 4. delete(key) : delete the key and return true if not found return false.
|
|
11
|
+
* 5. defragBuffer(gl, buffer, bufferType, newCapacity = null) : defrag the buffer. if newCapacity is not provided the buffer is vacumed.
|
|
12
|
+
* 6. extendBuffer(gl, buffer, bufferType, newCapacity) : extend the buffer.
|
|
13
|
+
* -------------------------------------------------------------------------------------------------------------------------------------------
|
|
14
|
+
* What this class does NOT do:
|
|
15
|
+
* ADD, DELETE, READ
|
|
16
|
+
* ADD, inputs needs to be turn into a block and put into buffer. Bulk will be more performant.
|
|
17
|
+
* DELETE, might be a set to single byte to indicate the tombstone.
|
|
18
|
+
* READ, most of the time is not needed to be read, unless for defraging.
|
|
19
|
+
* This unpredicatable behavior is not handled by this class.
|
|
20
|
+
*/
|
|
21
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
+
var default_1 = /** @class */ (function () {
|
|
23
|
+
function default_1(itemSize, _a) {
|
|
24
|
+
var _b = _a === void 0 ? {} : _a, _c = _b.capacity, capacity = _c === void 0 ? 10 : _c, _d = _b.bufferType, bufferType = _d === void 0 ? "STATIC_DRAW" : _d;
|
|
25
|
+
this.itemSize = itemSize;
|
|
26
|
+
this.bufferType = bufferType;
|
|
27
|
+
this.offSetMap = new Map();
|
|
28
|
+
this.tombstoneOffSet = [];
|
|
29
|
+
this._capacity = capacity;
|
|
30
|
+
this._length = 0;
|
|
31
|
+
}
|
|
32
|
+
Object.defineProperty(default_1.prototype, "length", {
|
|
33
|
+
get: function () {
|
|
34
|
+
return this._length;
|
|
35
|
+
},
|
|
36
|
+
enumerable: false,
|
|
37
|
+
configurable: true
|
|
38
|
+
});
|
|
39
|
+
Object.defineProperty(default_1.prototype, "capacity", {
|
|
40
|
+
get: function () {
|
|
41
|
+
return this._capacity;
|
|
42
|
+
},
|
|
43
|
+
enumerable: false,
|
|
44
|
+
configurable: true
|
|
45
|
+
});
|
|
46
|
+
default_1.prototype.getOffset = function (key) {
|
|
47
|
+
return this.offSetMap.get(key);
|
|
48
|
+
};
|
|
49
|
+
default_1.prototype.setOffset = function (key, offset) {
|
|
50
|
+
this.offSetMap.set(key, offset);
|
|
51
|
+
};
|
|
52
|
+
default_1.prototype.nextOffset = function () {
|
|
53
|
+
if (this.tombstoneOffSet.length > 0) {
|
|
54
|
+
var offset = this.tombstoneOffSet.pop();
|
|
55
|
+
return offset;
|
|
56
|
+
}
|
|
57
|
+
if (this._length < this._capacity) {
|
|
58
|
+
return this._length++ * this.itemSize * 4;
|
|
59
|
+
}
|
|
60
|
+
return false;
|
|
61
|
+
};
|
|
62
|
+
Object.defineProperty(default_1.prototype, "spaceLeft", {
|
|
63
|
+
get: function () {
|
|
64
|
+
return this._capacity - (this._length - this.tombstoneOffSet.length);
|
|
65
|
+
},
|
|
66
|
+
enumerable: false,
|
|
67
|
+
configurable: true
|
|
68
|
+
});
|
|
69
|
+
Object.defineProperty(default_1.prototype, "itemCount", {
|
|
70
|
+
get: function () {
|
|
71
|
+
return this._length - this.tombstoneOffSet.length;
|
|
72
|
+
},
|
|
73
|
+
enumerable: false,
|
|
74
|
+
configurable: true
|
|
75
|
+
});
|
|
76
|
+
default_1.prototype.deleteFromAccount = function (key) {
|
|
77
|
+
var offSet = this.offSetMap.get(key);
|
|
78
|
+
if (offSet !== undefined) {
|
|
79
|
+
this.tombstoneOffSet.push(offSet);
|
|
80
|
+
this.offSetMap.delete(key);
|
|
81
|
+
return true;
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
return false;
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
default_1.prototype._deleteBulk = function (keys) {
|
|
88
|
+
var _a = this, gl = _a.gl, buffer = _a.buffer;
|
|
89
|
+
var emptyBlock = new Float32Array(this.itemSize).fill(0);
|
|
90
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
|
|
91
|
+
for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {
|
|
92
|
+
var key = keys_1[_i];
|
|
93
|
+
var offset = this.getOffset(key);
|
|
94
|
+
if (offset !== undefined) {
|
|
95
|
+
this.deleteFromAccount(key);
|
|
96
|
+
gl.bufferSubData(gl.ARRAY_BUFFER, offset, emptyBlock);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, null);
|
|
100
|
+
};
|
|
101
|
+
default_1.prototype.offsetMapIterator = function () {
|
|
102
|
+
return this.offSetMap.entries();
|
|
103
|
+
};
|
|
104
|
+
// TODO: this is broken
|
|
105
|
+
default_1.prototype.defrag = function (newCapacity) {
|
|
106
|
+
if (newCapacity === void 0) { newCapacity = null; }
|
|
107
|
+
var _a = this, gl = _a.gl, buffer = _a.buffer, bufferType = _a.bufferType;
|
|
108
|
+
if (gl === undefined || buffer === undefined || bufferType === undefined) {
|
|
109
|
+
throw new Error("gl, buffer, bufferType are required");
|
|
110
|
+
}
|
|
111
|
+
var itemSize = this.itemSize;
|
|
112
|
+
var itemCount = this.itemCount;
|
|
113
|
+
var capacity = (newCapacity && newCapacity > itemCount) ? newCapacity : itemCount;
|
|
114
|
+
var newArray = new Float32Array(itemCount * itemSize);
|
|
115
|
+
var bufferData = this._getBufferData();
|
|
116
|
+
var newOffSet = 0;
|
|
117
|
+
var newOffSetMap = new Map();
|
|
118
|
+
for (var _i = 0, _b = this.offSetMap; _i < _b.length; _i++) {
|
|
119
|
+
var _c = _b[_i], key = _c[0], offSet = _c[1];
|
|
120
|
+
var itemOffSet = offSet / 4;
|
|
121
|
+
newArray.set(bufferData.slice(itemOffSet, itemOffSet + itemSize), newOffSet);
|
|
122
|
+
// this.offSetMap.set(key, newOffSet * 4);
|
|
123
|
+
newOffSetMap.set(key, newOffSet * 4);
|
|
124
|
+
newOffSet += itemSize;
|
|
125
|
+
}
|
|
126
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
|
|
127
|
+
gl.bufferData(gl.ARRAY_BUFFER, capacity * itemSize * 4, gl[bufferType]);
|
|
128
|
+
gl.bufferSubData(gl.ARRAY_BUFFER, 0, newArray);
|
|
129
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, null);
|
|
130
|
+
this._capacity = capacity;
|
|
131
|
+
this.tombstoneOffSet = [];
|
|
132
|
+
this._length = itemCount;
|
|
133
|
+
this.offSetMap = newOffSetMap;
|
|
134
|
+
};
|
|
135
|
+
default_1.prototype.autoExtendBuffer = function (payloadSize) {
|
|
136
|
+
if (payloadSize <= this.spaceLeft)
|
|
137
|
+
return;
|
|
138
|
+
var newCapacity = Math.ceil((payloadSize + this.length));
|
|
139
|
+
this.extendBuffer(newCapacity);
|
|
140
|
+
};
|
|
141
|
+
default_1.prototype.extendBuffer = function (newCapacity) {
|
|
142
|
+
var _a = this, gl = _a.gl, buffer = _a.buffer, bufferType = _a.bufferType;
|
|
143
|
+
var itemSize = this.itemSize;
|
|
144
|
+
var bufferData = this._getBufferData();
|
|
145
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
|
|
146
|
+
gl.bufferData(gl.ARRAY_BUFFER, newCapacity * itemSize * 4, gl[bufferType]);
|
|
147
|
+
gl.bufferSubData(gl.ARRAY_BUFFER, 0, bufferData);
|
|
148
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, null);
|
|
149
|
+
this._capacity = newCapacity;
|
|
150
|
+
};
|
|
151
|
+
/** implicit methods to be used by the child class */
|
|
152
|
+
/**
|
|
153
|
+
* @typedef {Float32Array} payload
|
|
154
|
+
* @param {Array<{key, payload}>} items
|
|
155
|
+
* @param {number} partOffset
|
|
156
|
+
* @returns
|
|
157
|
+
*/
|
|
158
|
+
default_1.prototype._updatePartial = function (items, partOffset) {
|
|
159
|
+
var _a = this, gl = _a.gl, buffer = _a.buffer;
|
|
160
|
+
var partStart = partOffset * 4;
|
|
161
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
|
|
162
|
+
for (var _i = 0, items_1 = items; _i < items_1.length; _i++) {
|
|
163
|
+
var _b = items_1[_i], key = _b.key, payload = _b.payload;
|
|
164
|
+
var offset = this.getOffset(key);
|
|
165
|
+
if (offset !== undefined) {
|
|
166
|
+
gl.bufferSubData(gl.ARRAY_BUFFER, offset + partStart, payload);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, null);
|
|
170
|
+
};
|
|
171
|
+
default_1.prototype._getBufferData = function () {
|
|
172
|
+
var _a = this, gl = _a.gl, buffer = _a.buffer;
|
|
173
|
+
var size = new Float32Array(this.length * this.itemSize);
|
|
174
|
+
var bufferData = new Float32Array(size);
|
|
175
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
|
|
176
|
+
gl.getBufferSubData(gl.ARRAY_BUFFER, 0, bufferData);
|
|
177
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, null);
|
|
178
|
+
return bufferData;
|
|
179
|
+
};
|
|
180
|
+
default_1.prototype._removeFromBuffer = function (keys) {
|
|
181
|
+
var _a = this, gl = _a.gl, buffer = _a.buffer;
|
|
182
|
+
var emptyBlock = new Float32Array(this.itemSize).fill(0);
|
|
183
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
|
|
184
|
+
for (var _i = 0, keys_2 = keys; _i < keys_2.length; _i++) {
|
|
185
|
+
var key = keys_2[_i];
|
|
186
|
+
var offset = this.getOffset(key);
|
|
187
|
+
if (offset !== undefined) {
|
|
188
|
+
this.deleteFromAccount(key);
|
|
189
|
+
gl.bufferSubData(gl.ARRAY_BUFFER, offset, emptyBlock);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, null);
|
|
193
|
+
};
|
|
194
|
+
default_1.prototype.free = function () {
|
|
195
|
+
this.gl.deleteBuffer(this.buffer);
|
|
196
|
+
this.buffer = null;
|
|
197
|
+
this.vao = null;
|
|
198
|
+
this.gl = null;
|
|
199
|
+
};
|
|
200
|
+
return default_1;
|
|
201
|
+
}());
|
|
202
|
+
exports.default = default_1;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
17
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
18
|
+
};
|
|
19
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
exports.BufferOffsetManager = void 0;
|
|
21
|
+
var bufferoffsetmanager_1 = __importDefault(require("./bufferoffsetmanager"));
|
|
22
|
+
exports.BufferOffsetManager = bufferoffsetmanager_1.default;
|
|
23
|
+
__exportStar(require("./single-attribute-buffer-management/index"), exports);
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* BufferOffsetManager
|
|
4
|
+
* Purpose: To manage the offset of the buffer. Plus extend and defrag the buffer.
|
|
5
|
+
* ------------------------------------------------------------------------------------------------------------------------------------------- * Functions:
|
|
6
|
+
* 1. getOffet(key) : return the offset of the key if not found return false.
|
|
7
|
+
* 2. setOffset(key, offset) : set the offset of the key.
|
|
8
|
+
* 3. nextOffset() : return the next available offset if not return false.
|
|
9
|
+
* 4. delete(key) : delete the key and return true if not found return false.
|
|
10
|
+
* 5. defragBuffer(gl, buffer, bufferType, newCapacity = null) : defrag the buffer. if newCapacity is not provided the buffer is vacumed.
|
|
11
|
+
* 6. extendBuffer(gl, buffer, bufferType, newCapacity) : extend the buffer.
|
|
12
|
+
* -------------------------------------------------------------------------------------------------------------------------------------------
|
|
13
|
+
* What this class does NOT do:
|
|
14
|
+
* ADD, DELETE, READ
|
|
15
|
+
* ADD, inputs needs to be turn into a block and put into buffer. Bulk will be more performant.
|
|
16
|
+
* DELETE, might be a set to single byte to indicate the tombstone.
|
|
17
|
+
* READ, most of the time is not needed to be read, unless for defraging.
|
|
18
|
+
* This unpredicatable behavior is not handled by this class.
|
|
19
|
+
*/
|
|
20
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
+
exports.BufferManager = void 0;
|
|
22
|
+
var BufferManager = /** @class */ (function () {
|
|
23
|
+
function BufferManager(gl, itemSize, _a) {
|
|
24
|
+
var _b = _a === void 0 ? {} : _a, _c = _b.bufferType, bufferType = _c === void 0 ? "STATIC_DRAW" : _c, _d = _b.buffer, buffer = _d === void 0 ? null : _d, _e = _b.initialCapacity, initialCapacity = _e === void 0 ? null : _e;
|
|
25
|
+
this.isFreed = false;
|
|
26
|
+
this.gl = gl;
|
|
27
|
+
this.itemSize = itemSize;
|
|
28
|
+
this.bufferType = bufferType;
|
|
29
|
+
this.buffer = buffer === null ? gl.createBuffer() : buffer;
|
|
30
|
+
if (initialCapacity !== null)
|
|
31
|
+
this.resetWithCapacity(initialCapacity);
|
|
32
|
+
}
|
|
33
|
+
BufferManager.prototype.resetWithCapacity = function (capacity) {
|
|
34
|
+
var _a = this, gl = _a.gl, buffer = _a.buffer, bufferType = _a.bufferType, itemSize = _a.itemSize;
|
|
35
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
|
|
36
|
+
// @ts-ignore
|
|
37
|
+
gl.bufferData(gl.ARRAY_BUFFER, capacity * itemSize * 4, gl[bufferType]);
|
|
38
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, null);
|
|
39
|
+
};
|
|
40
|
+
BufferManager.prototype.deleteBulk = function (offsets) {
|
|
41
|
+
var _a = this, gl = _a.gl, buffer = _a.buffer, itemSize = _a.itemSize;
|
|
42
|
+
var emptyBlock = new Float32Array(this.itemSize).fill(NaN);
|
|
43
|
+
var offsetMultiplier = itemSize * 4;
|
|
44
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
|
|
45
|
+
for (var _i = 0, offsets_1 = offsets; _i < offsets_1.length; _i++) {
|
|
46
|
+
var offset = offsets_1[_i];
|
|
47
|
+
if (offset !== undefined) {
|
|
48
|
+
gl.bufferSubData(gl.ARRAY_BUFFER, offset * offsetMultiplier, emptyBlock);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, null);
|
|
52
|
+
};
|
|
53
|
+
BufferManager.prototype.insertBulk = function (blocks, offsets) {
|
|
54
|
+
var _a = this, gl = _a.gl, buffer = _a.buffer, itemSize = _a.itemSize;
|
|
55
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
|
|
56
|
+
var offsetMultiplier = itemSize * 4;
|
|
57
|
+
for (var i = 0; i < blocks.length; i++) {
|
|
58
|
+
var block = blocks[i];
|
|
59
|
+
var offset = offsets[i] * offsetMultiplier;
|
|
60
|
+
if (offset !== undefined)
|
|
61
|
+
gl.bufferSubData(gl.ARRAY_BUFFER, offset, block);
|
|
62
|
+
}
|
|
63
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, null);
|
|
64
|
+
};
|
|
65
|
+
// TODO: this is broken
|
|
66
|
+
BufferManager.prototype.defrag = function (offsetValues, occupiedCapacity, newCapacity) {
|
|
67
|
+
var _a = this, gl = _a.gl, buffer = _a.buffer, bufferType = _a.bufferType, itemSize = _a.itemSize;
|
|
68
|
+
var newArray = new Float32Array(newCapacity * itemSize);
|
|
69
|
+
var bufferData = this._getBufferData(occupiedCapacity);
|
|
70
|
+
var newOffset = 0;
|
|
71
|
+
for (var _i = 0, offsetValues_1 = offsetValues; _i < offsetValues_1.length; _i++) {
|
|
72
|
+
var offset = offsetValues_1[_i];
|
|
73
|
+
var itemOffset = offset * itemSize;
|
|
74
|
+
newArray.set(bufferData.slice(itemOffset, itemOffset + itemSize), newOffset);
|
|
75
|
+
newOffset += itemSize;
|
|
76
|
+
}
|
|
77
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
|
|
78
|
+
// @ts-ignore
|
|
79
|
+
gl.bufferData(gl.ARRAY_BUFFER, newCapacity * itemSize * 4, gl[bufferType]);
|
|
80
|
+
gl.bufferSubData(gl.ARRAY_BUFFER, 0, newArray);
|
|
81
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, null);
|
|
82
|
+
};
|
|
83
|
+
BufferManager.prototype.extendBuffer = function (occupiedCapacity, newCapacity) {
|
|
84
|
+
var _a = this, gl = _a.gl, buffer = _a.buffer, bufferType = _a.bufferType;
|
|
85
|
+
var itemSize = this.itemSize;
|
|
86
|
+
var bufferData = this._getBufferData(occupiedCapacity);
|
|
87
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
|
|
88
|
+
// @ts-ignore
|
|
89
|
+
gl.bufferData(gl.ARRAY_BUFFER, newCapacity * itemSize * 4, gl[bufferType]);
|
|
90
|
+
gl.bufferSubData(gl.ARRAY_BUFFER, 0, bufferData);
|
|
91
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, null);
|
|
92
|
+
};
|
|
93
|
+
BufferManager.prototype._getBufferData = function (occupiedCapacity) {
|
|
94
|
+
var _a = this, gl = _a.gl, buffer = _a.buffer;
|
|
95
|
+
var size = occupiedCapacity * this.itemSize;
|
|
96
|
+
var bufferData = new Float32Array(size);
|
|
97
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
|
|
98
|
+
gl.getBufferSubData(gl.ARRAY_BUFFER, 0, bufferData);
|
|
99
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, null);
|
|
100
|
+
return bufferData;
|
|
101
|
+
};
|
|
102
|
+
BufferManager.prototype.free = function () {
|
|
103
|
+
if (this.isFreed)
|
|
104
|
+
return;
|
|
105
|
+
this.gl.deleteBuffer(this.buffer);
|
|
106
|
+
// this.buffer = null;
|
|
107
|
+
// this.gl = null;
|
|
108
|
+
this.isFreed = true;
|
|
109
|
+
};
|
|
110
|
+
return BufferManager;
|
|
111
|
+
}());
|
|
112
|
+
exports.BufferManager = BufferManager;
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BufferOrchestrator = void 0;
|
|
4
|
+
var EXTRA_SIZE = 10;
|
|
5
|
+
var BufferOrchestrator = /** @class */ (function () {
|
|
6
|
+
function BufferOrchestrator(_a) {
|
|
7
|
+
var _b = _a === void 0 ? {} : _a, _c = _b.capacity, capacity = _c === void 0 ? 10 : _c;
|
|
8
|
+
this._capacity = capacity;
|
|
9
|
+
this.offsetMap = new Map();
|
|
10
|
+
this.tombstoneOffsets = [];
|
|
11
|
+
this._length = 0;
|
|
12
|
+
}
|
|
13
|
+
BufferOrchestrator.prototype.resetWithCapacity = function (bufferManagersMap, capacity) {
|
|
14
|
+
if (capacity === void 0) { capacity = null; }
|
|
15
|
+
this._capacity = capacity !== null ? capacity : this._capacity;
|
|
16
|
+
for (var _i = 0, bufferManagersMap_1 = bufferManagersMap; _i < bufferManagersMap_1.length; _i++) {
|
|
17
|
+
var _a = bufferManagersMap_1[_i], key = _a[0], bufferManager = _a[1].bufferManager;
|
|
18
|
+
bufferManager.resetWithCapacity(this._capacity);
|
|
19
|
+
}
|
|
20
|
+
this.offsetMap.clear();
|
|
21
|
+
this.tombstoneOffsets = [];
|
|
22
|
+
this._length = 0;
|
|
23
|
+
};
|
|
24
|
+
BufferOrchestrator.prototype.insertBulk = function (items, bufferManagersMap) {
|
|
25
|
+
this.autoExtendBuffers(items.length, bufferManagersMap);
|
|
26
|
+
var offsetMap = this.offsetMap;
|
|
27
|
+
var offsets = [];
|
|
28
|
+
for (var _i = 0, items_1 = items; _i < items_1.length; _i++) {
|
|
29
|
+
var item = items_1[_i];
|
|
30
|
+
var o = offsetMap.get(item.key);
|
|
31
|
+
var offset = o !== undefined ? o : this.nextOffset();
|
|
32
|
+
offsetMap.set(item.key, offset);
|
|
33
|
+
offsets.push(offset);
|
|
34
|
+
}
|
|
35
|
+
for (var _a = 0, bufferManagersMap_2 = bufferManagersMap; _a < bufferManagersMap_2.length; _a++) {
|
|
36
|
+
var _b = bufferManagersMap_2[_a], key = _b[0], _c = _b[1], bufferManager = _c.bufferManager, adaptor = _c.adaptor;
|
|
37
|
+
bufferManager.insertBulk(items.map(adaptor), offsets);
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
// does not assign offset to the new items.
|
|
41
|
+
BufferOrchestrator.prototype.updateBulk = function (items, bufferManagersMap, bufferKeys) {
|
|
42
|
+
if (bufferKeys === void 0) { bufferKeys = null; }
|
|
43
|
+
var offsetMap = this.offsetMap;
|
|
44
|
+
var offsets = [];
|
|
45
|
+
for (var _i = 0, items_2 = items; _i < items_2.length; _i++) {
|
|
46
|
+
var item = items_2[_i];
|
|
47
|
+
var offset = offsetMap.get(item.key);
|
|
48
|
+
if (offset !== undefined) {
|
|
49
|
+
offsets.push(offset);
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
throw new Error("updateBulk item Key does not exist");
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
if (bufferKeys) {
|
|
56
|
+
for (var _a = 0, bufferKeys_1 = bufferKeys; _a < bufferKeys_1.length; _a++) {
|
|
57
|
+
var key = bufferKeys_1[_a];
|
|
58
|
+
var bufferManagerComp = bufferManagersMap.get(key);
|
|
59
|
+
if (bufferManagerComp === undefined)
|
|
60
|
+
throw new Error("updateBulk bufferKey does not exist");
|
|
61
|
+
var bufferManager = bufferManagerComp.bufferManager, adaptor = bufferManagerComp.adaptor;
|
|
62
|
+
bufferManager.insertBulk(items.map(adaptor), offsets);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
for (var _b = 0, bufferManagersMap_3 = bufferManagersMap; _b < bufferManagersMap_3.length; _b++) {
|
|
67
|
+
var _c = bufferManagersMap_3[_b], key = _c[0], _d = _c[1], bufferManager = _d.bufferManager, adaptor = _d.adaptor;
|
|
68
|
+
bufferManager.insertBulk(items.map(adaptor), offsets);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
BufferOrchestrator.prototype.deleteBulk = function (keys, bufferManagersMap) {
|
|
73
|
+
var offsets = [];
|
|
74
|
+
for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {
|
|
75
|
+
var key = keys_1[_i];
|
|
76
|
+
var offset = this.getOffset(key);
|
|
77
|
+
if (offset !== undefined) {
|
|
78
|
+
offsets.push(offset);
|
|
79
|
+
this.offsetMap.delete(key);
|
|
80
|
+
this.tombstoneOffsets.push(offset);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
for (var _a = 0, bufferManagersMap_4 = bufferManagersMap; _a < bufferManagersMap_4.length; _a++) {
|
|
84
|
+
var _b = bufferManagersMap_4[_a], key = _b[0], bufferManager = _b[1].bufferManager;
|
|
85
|
+
bufferManager.deleteBulk(offsets);
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
BufferOrchestrator.prototype.getOffset = function (key) {
|
|
89
|
+
return this.offsetMap.get(key);
|
|
90
|
+
};
|
|
91
|
+
BufferOrchestrator.prototype.nextOffset = function () {
|
|
92
|
+
if (this.tombstoneOffsets.length > 0) {
|
|
93
|
+
var offset = this.tombstoneOffsets.pop();
|
|
94
|
+
return offset;
|
|
95
|
+
}
|
|
96
|
+
if (this._length < this._capacity) {
|
|
97
|
+
return this._length++;
|
|
98
|
+
}
|
|
99
|
+
return false;
|
|
100
|
+
};
|
|
101
|
+
BufferOrchestrator.prototype.autoExtendBuffers = function (itemsLength, bufferManagersMap) {
|
|
102
|
+
if (itemsLength <= this.emptySpace)
|
|
103
|
+
return;
|
|
104
|
+
var newCapacity = this.length + itemsLength;
|
|
105
|
+
for (var _i = 0, bufferManagersMap_5 = bufferManagersMap; _i < bufferManagersMap_5.length; _i++) {
|
|
106
|
+
var _a = bufferManagersMap_5[_i], key = _a[0], bufferManager = _a[1].bufferManager;
|
|
107
|
+
bufferManager.extendBuffer(this.length, newCapacity);
|
|
108
|
+
}
|
|
109
|
+
this._capacity = newCapacity;
|
|
110
|
+
};
|
|
111
|
+
BufferOrchestrator.prototype.defrag = function (bufferManagers, bufferKeys) {
|
|
112
|
+
var offsetMap = this.offsetMap;
|
|
113
|
+
var newCapacity = offsetMap.size + EXTRA_SIZE;
|
|
114
|
+
if (bufferKeys) {
|
|
115
|
+
for (var _i = 0, bufferKeys_2 = bufferKeys; _i < bufferKeys_2.length; _i++) {
|
|
116
|
+
var key = bufferKeys_2[_i];
|
|
117
|
+
var offset = offsetMap.get(key);
|
|
118
|
+
if (offset !== undefined) {
|
|
119
|
+
for (var _a = 0, bufferManagers_1 = bufferManagers; _a < bufferManagers_1.length; _a++) {
|
|
120
|
+
var _b = bufferManagers_1[_a], key_1 = _b[0], bufferManager = _b[1].bufferManager;
|
|
121
|
+
bufferManager.defrag([offset], this.length, newCapacity);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
for (var _c = 0, bufferManagers_2 = bufferManagers; _c < bufferManagers_2.length; _c++) {
|
|
128
|
+
var _d = bufferManagers_2[_c], key = _d[0], bufferManager = _d[1].bufferManager;
|
|
129
|
+
bufferManager.defrag(offsetMap.values(), this.length, newCapacity);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
this._defrag();
|
|
133
|
+
this._length = offsetMap.size;
|
|
134
|
+
this._capacity = newCapacity;
|
|
135
|
+
this.tombstoneOffsets = [];
|
|
136
|
+
};
|
|
137
|
+
/**
|
|
138
|
+
* Flushes metadata and sets length to 0 without actualize change on buffers
|
|
139
|
+
* This method created for cases in which data is loaded on each frame
|
|
140
|
+
*/
|
|
141
|
+
BufferOrchestrator.prototype.flush = function (_a) {
|
|
142
|
+
var _b = _a === void 0 ? {} : _a, _c = _b.capacity, capacity = _c === void 0 ? 10 : _c;
|
|
143
|
+
this._length = 0;
|
|
144
|
+
this._capacity = capacity;
|
|
145
|
+
this.tombstoneOffsets = [];
|
|
146
|
+
this.offsetMap.clear();
|
|
147
|
+
};
|
|
148
|
+
BufferOrchestrator.prototype._defrag = function () {
|
|
149
|
+
var newOffsetMap = new Map();
|
|
150
|
+
var newOffset = 0;
|
|
151
|
+
for (var _i = 0, _a = this.offsetMap; _i < _a.length; _i++) {
|
|
152
|
+
var _b = _a[_i], key = _b[0], offset = _b[1];
|
|
153
|
+
newOffsetMap.set(key, newOffset++);
|
|
154
|
+
}
|
|
155
|
+
this.offsetMap = newOffsetMap;
|
|
156
|
+
};
|
|
157
|
+
Object.defineProperty(BufferOrchestrator.prototype, "length", {
|
|
158
|
+
get: function () {
|
|
159
|
+
return this._length;
|
|
160
|
+
},
|
|
161
|
+
enumerable: false,
|
|
162
|
+
configurable: true
|
|
163
|
+
});
|
|
164
|
+
Object.defineProperty(BufferOrchestrator.prototype, "emptySpace", {
|
|
165
|
+
get: function () {
|
|
166
|
+
return this._capacity - this.offsetMap.size;
|
|
167
|
+
},
|
|
168
|
+
enumerable: false,
|
|
169
|
+
configurable: true
|
|
170
|
+
});
|
|
171
|
+
Object.defineProperty(BufferOrchestrator.prototype, "capacity", {
|
|
172
|
+
get: function () {
|
|
173
|
+
return this._capacity;
|
|
174
|
+
},
|
|
175
|
+
enumerable: false,
|
|
176
|
+
configurable: true
|
|
177
|
+
});
|
|
178
|
+
return BufferOrchestrator;
|
|
179
|
+
}());
|
|
180
|
+
exports.BufferOrchestrator = BufferOrchestrator;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ObjectStore = exports.BufferManager = exports.BufferOrchestrator = void 0;
|
|
4
|
+
var buffer_orchestrator_1 = require("./buffer-orchestrator");
|
|
5
|
+
Object.defineProperty(exports, "BufferOrchestrator", { enumerable: true, get: function () { return buffer_orchestrator_1.BufferOrchestrator; } });
|
|
6
|
+
var buffer_manager_1 = require("./buffer-manager");
|
|
7
|
+
Object.defineProperty(exports, "BufferManager", { enumerable: true, get: function () { return buffer_manager_1.BufferManager; } });
|
|
8
|
+
var object_store_1 = require("./object-store");
|
|
9
|
+
Object.defineProperty(exports, "ObjectStore", { enumerable: true, get: function () { return object_store_1.ObjectStore; } });
|