@pirireis/webglobeplugins 0.9.6 → 0.9.8

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.
Files changed (304) hide show
  1. package/{Math → dist/Math}/angle-calculation.js +15 -14
  2. package/dist/Math/arc.js +65 -0
  3. package/{Math → dist/Math}/bounds/line-bbox.js +188 -225
  4. package/dist/Math/constants.js +9 -0
  5. package/{Math/frustum/camera.ts → dist/Math/frustum/camera.js} +24 -32
  6. package/{Math/frustum/from-globeinfo.ts → dist/Math/frustum/from-globeinfo.js} +48 -63
  7. package/dist/Math/frustum/types.js +2 -0
  8. package/{Math/globe-util/horizon-plane.ts → dist/Math/globe-util/horizon-plane.js} +112 -137
  9. package/dist/Math/index.js +1 -0
  10. package/dist/Math/juction/arc-plane.js +83 -0
  11. package/dist/Math/juction/line-sphere.js +25 -0
  12. package/{Math/juction/plane-plane.ts → dist/Math/juction/plane-plane.js} +58 -66
  13. package/dist/Math/line.js +56 -0
  14. package/dist/Math/matrix4.js +1 -0
  15. package/{Math → dist/Math}/methods.js +201 -237
  16. package/dist/Math/plane.js +60 -0
  17. package/{Math/quaternion.ts → dist/Math/quaternion.js} +104 -120
  18. package/dist/Math/types.js +2 -0
  19. package/dist/Math/utils.js +4 -0
  20. package/{Math/vec3.ts → dist/Math/vec3.js} +126 -155
  21. package/dist/algorithms/search-binary.js +19 -0
  22. package/dist/altitude-locator/adaptors.js +1 -0
  23. package/{altitude-locator → dist/altitude-locator}/draw-subset-obj.js +18 -27
  24. package/dist/altitude-locator/keymethod.js +1 -0
  25. package/{altitude-locator → dist/altitude-locator}/plugin.js +341 -439
  26. package/{altitude-locator → dist/altitude-locator}/types.js +23 -26
  27. package/{arrowfield → dist/arrowfield}/adaptor.js +14 -11
  28. package/dist/arrowfield/index.js +10 -0
  29. package/{arrowfield → dist/arrowfield}/plugin.js +86 -128
  30. package/dist/bearing-line/index.js +8 -0
  31. package/{bearing-line → dist/bearing-line}/plugin.js +449 -512
  32. package/{circle-line-chain → dist/circle-line-chain}/chain-list-map.js +205 -221
  33. package/dist/circle-line-chain/init.js +1 -0
  34. package/{circle-line-chain → dist/circle-line-chain}/plugin.js +424 -469
  35. package/dist/circle-line-chain/util.js +5 -0
  36. package/{compass-rose → dist/compass-rose}/compass-rose-padding-flat.js +225 -266
  37. package/{compass-rose → dist/compass-rose}/compass-text-writer.js +153 -173
  38. package/dist/compass-rose/index.js +7 -0
  39. package/{compassrose → dist/compassrose}/compassrose.js +296 -341
  40. package/dist/compassrose/index.js +8 -0
  41. package/dist/globe-types.js +1 -0
  42. package/dist/heatwave/index.js +10 -0
  43. package/{heatwave → dist/heatwave}/isobar/objectarraylabels.js +202 -247
  44. package/{heatwave → dist/heatwave}/isobar/plugin.js +343 -340
  45. package/{heatwave → dist/heatwave}/isobar/quadtreecontours.js +300 -336
  46. package/{heatwave → dist/heatwave}/plugins/heatwaveglobeshell.js +206 -258
  47. package/dist/index.js +58 -0
  48. package/{jest.config.js → dist/jest.config.js} +7 -6
  49. package/{partialrings → dist/partialrings}/buffer-manager.js +81 -89
  50. package/dist/partialrings/index.js +41 -0
  51. package/{partialrings → dist/partialrings}/plugin.js +135 -160
  52. package/{partialrings → dist/partialrings}/program.js +204 -242
  53. package/{pin → dist/pin}/pin-object-array.js +305 -381
  54. package/{pin → dist/pin}/pin-point-totem.js +60 -77
  55. package/{point-heat-map → dist/point-heat-map}/adaptors/timetracksplugin-format-to-this.js +66 -78
  56. package/dist/point-heat-map/index.js +1 -0
  57. package/{point-heat-map → dist/point-heat-map}/plugin-webworker.js +126 -151
  58. package/{point-heat-map → dist/point-heat-map}/point-to-heat-map-flow.js +127 -150
  59. package/dist/point-tracks/key-methods.js +5 -0
  60. package/{point-tracks → dist/point-tracks}/plugin.js +338 -394
  61. package/dist/programs/arrowfield/index.js +7 -0
  62. package/{programs → dist/programs}/arrowfield/logic.js +144 -173
  63. package/{programs → dist/programs}/arrowfield/object.js +66 -89
  64. package/{programs → dist/programs}/data2legend/density-to-legend.js +76 -90
  65. package/{programs → dist/programs}/data2legend/point-to-density-texture.js +76 -90
  66. package/dist/programs/float2legendwithratio/index.js +8 -0
  67. package/{programs → dist/programs}/float2legendwithratio/logic.js +122 -145
  68. package/{programs → dist/programs}/float2legendwithratio/object.js +110 -141
  69. package/{programs → dist/programs}/globe-util/is-globe-moved.js +21 -27
  70. package/dist/programs/globeshell/index.js +8 -0
  71. package/dist/programs/globeshell/noise/noises.js +1 -0
  72. package/dist/programs/globeshell/wiggle/index.js +8 -0
  73. package/{programs → dist/programs}/globeshell/wiggle/logic.js +246 -272
  74. package/{programs → dist/programs}/globeshell/wiggle/object.js +72 -93
  75. package/dist/programs/helpers/blender/index.js +1 -0
  76. package/{programs → dist/programs}/helpers/blender/program.js +61 -73
  77. package/dist/programs/helpers/fadeaway/index.js +7 -0
  78. package/{programs → dist/programs}/helpers/fadeaway/logic.js +49 -53
  79. package/dist/programs/helpers/fadeaway/object.js +20 -0
  80. package/dist/programs/helpers/index.js +8 -0
  81. package/dist/programs/index.js +58 -0
  82. package/dist/programs/interface.js +1 -0
  83. package/{programs → dist/programs}/line-on-globe/angled-line.js +125 -155
  84. package/{programs → dist/programs}/line-on-globe/circle-accurate-3d.js +95 -121
  85. package/{programs → dist/programs}/line-on-globe/circle-accurate-flat.js +158 -204
  86. package/{programs → dist/programs}/line-on-globe/circle-accurate.js +117 -141
  87. package/{programs → dist/programs}/line-on-globe/circle.js +111 -135
  88. package/{programs → dist/programs}/line-on-globe/degree-padding-around-circle-3d.js +111 -140
  89. package/dist/programs/line-on-globe/index.js +1 -0
  90. package/{programs → dist/programs}/line-on-globe/lines-color-instanced-flat.js +91 -106
  91. package/{programs/line-on-globe/linestrip.ts → dist/programs/line-on-globe/linestrip.js} +108 -165
  92. package/{programs → dist/programs}/line-on-globe/naive-accurate-flexible.js +127 -171
  93. package/{programs → dist/programs}/line-on-globe/to-the-surface.js +83 -101
  94. package/dist/programs/line-on-globe/util.js +8 -0
  95. package/{programs → dist/programs}/picking/pickable-renderer.js +107 -135
  96. package/{programs → dist/programs}/point-on-globe/element-globe-surface-glow.js +101 -127
  97. package/{programs → dist/programs}/point-on-globe/element-point-glow.js +88 -119
  98. package/{programs → dist/programs}/point-on-globe/square-pixel-point.js +126 -141
  99. package/{programs/programcache.ts → dist/programs/programcache.js} +131 -131
  100. package/{programs → dist/programs}/rings/distancering/circleflatprogram.js +115 -95
  101. package/{programs → dist/programs}/rings/distancering/circlepaddingfreeangleprogram.js +320 -329
  102. package/{programs → dist/programs}/rings/distancering/circlepaddysharedbuffer.js +357 -420
  103. package/dist/programs/rings/distancering/index.js +14 -0
  104. package/{programs → dist/programs}/rings/distancering/paddyflatprogram.js +120 -94
  105. package/{programs → dist/programs}/rings/distancering/paddyflatprogram2d.js +122 -98
  106. package/{programs → dist/programs}/rings/distancering/paddyflatprogram3d.js +120 -94
  107. package/dist/programs/rings/distancering/shader.js +1 -0
  108. package/dist/programs/rings/index.js +17 -0
  109. package/{programs → dist/programs}/rings/partial-ring/piece-of-pie.js +181 -221
  110. package/{programs → dist/programs}/totems/camerauniformblock.js +147 -184
  111. package/{programs → dist/programs}/totems/canvas-webglobe-info.js +102 -128
  112. package/{programs → dist/programs}/totems/gpu-selection-uniform-block.js +104 -128
  113. package/dist/programs/totems/index.js +40 -0
  114. package/dist/programs/two-d/pixel-circle.js +1 -0
  115. package/{programs → dist/programs}/two-d/pixel-padding-for-compass.js +101 -113
  116. package/{programs → dist/programs}/util.js +17 -20
  117. package/dist/programs/vectorfields/index.js +23 -0
  118. package/{programs → dist/programs}/vectorfields/logics/drawrectangleparticles.js +65 -83
  119. package/dist/programs/vectorfields/logics/index.js +12 -0
  120. package/{programs → dist/programs}/vectorfields/logics/pixelbased.js +84 -103
  121. package/{programs → dist/programs}/vectorfields/logics/ubo.js +55 -56
  122. package/{programs → dist/programs}/vectorfields/pingpongbuffermanager.js +76 -80
  123. package/dist/rangerings/enum.js +5 -0
  124. package/dist/rangerings/index.js +15 -0
  125. package/{rangerings → dist/rangerings}/plugin.js +560 -649
  126. package/{rangerings → dist/rangerings}/rangeringangletext.js +329 -368
  127. package/{rangerings → dist/rangerings}/ring-account.js +117 -129
  128. package/{shaders → dist/shaders}/fragment-toy/firework.js +5 -2
  129. package/{shaders → dist/shaders}/fragment-toy/singularity.js +5 -5
  130. package/{shape-on-terrain/arc/naive/plugin.ts → dist/shape-on-terrain/arc/naive/plugin.js} +252 -304
  131. package/{timetracks → dist/timetracks}/adaptors-line-strip.js +71 -80
  132. package/{timetracks → dist/timetracks}/adaptors.js +122 -133
  133. package/dist/timetracks/index.js +19 -0
  134. package/{timetracks → dist/timetracks}/plugin-line-strip.js +250 -295
  135. package/{timetracks → dist/timetracks}/plugin.js +258 -304
  136. package/{timetracks → dist/timetracks}/program-line-strip.js +416 -493
  137. package/{timetracks → dist/timetracks}/program.js +464 -542
  138. package/{timetracks → dist/timetracks}/programpoint-line-strip.js +101 -122
  139. package/{timetracks → dist/timetracks}/programpoint.js +101 -122
  140. package/{types.ts → dist/types.js} +15 -17
  141. package/{util → dist/util}/account/bufferoffsetmanager.js +179 -209
  142. package/dist/util/account/index.js +23 -0
  143. package/{util/account/single-attribute-buffer-management/buffer-manager.ts → dist/util/account/single-attribute-buffer-management/buffer-manager.js} +108 -119
  144. package/{util/account/single-attribute-buffer-management/buffer-orchestrator.ts → dist/util/account/single-attribute-buffer-management/buffer-orchestrator.js} +150 -173
  145. package/dist/util/account/single-attribute-buffer-management/index.js +9 -0
  146. package/{util/account/single-attribute-buffer-management/object-store.ts → dist/util/account/single-attribute-buffer-management/object-store.js} +51 -65
  147. package/dist/util/account/single-attribute-buffer-management/types.js +2 -0
  148. package/{util → dist/util}/account/util.js +22 -22
  149. package/dist/util/algorithms/index.js +1 -0
  150. package/{util → dist/util}/algorithms/search-binary.js +28 -26
  151. package/dist/util/check/get.js +18 -0
  152. package/dist/util/check/index.js +1 -0
  153. package/dist/util/check/typecheck.js +49 -0
  154. package/{util → dist/util}/geometry/index.js +51 -53
  155. package/{util/gl-util/buffer/attribute-loader.ts → dist/util/gl-util/buffer/attribute-loader.js} +69 -85
  156. package/dist/util/gl-util/buffer/index.js +6 -0
  157. package/dist/util/gl-util/buffer/types.js +1 -0
  158. package/dist/util/gl-util/draw-options/methods.js +38 -0
  159. package/dist/util/gl-util/draw-options/types.js +15 -0
  160. package/{util/gl-util/uniform-block/manager.ts → dist/util/gl-util/uniform-block/manager.js} +156 -187
  161. package/dist/util/gl-util/uniform-block/shader.js +1 -0
  162. package/dist/util/gl-util/uniform-block/types.js +8 -0
  163. package/{util → dist/util}/heatwavedatamanager/datamanager.js +152 -168
  164. package/dist/util/heatwavedatamanager/index.js +10 -0
  165. package/{util → dist/util}/heatwavedatamanager/pointcoordinatesdatacalculator.js +122 -133
  166. package/{util → dist/util}/heatwavedatamanager/pointcoordsmeta.js +20 -22
  167. package/dist/util/index.js +57 -0
  168. package/dist/util/interpolation/index.js +1 -0
  169. package/dist/util/interpolation/timetrack/index.js +5 -0
  170. package/{util → dist/util}/interpolation/timetrack/timetrack-interpolator.js +79 -88
  171. package/{util → dist/util}/interpolation/timetrack/web-worker-str.js +5 -2
  172. package/{util → dist/util}/interpolation/timetrack/web-worker.js +48 -51
  173. package/{util → dist/util}/jshelpers/data-filler.js +20 -19
  174. package/{util → dist/util}/jshelpers/equality.js +20 -17
  175. package/dist/util/jshelpers/index.js +37 -0
  176. package/{util → dist/util}/jshelpers/timefilters.js +32 -32
  177. package/{util → dist/util}/picking/fence.js +46 -46
  178. package/{util → dist/util}/picking/picker-displayer.js +139 -177
  179. package/{util → dist/util}/programs/draw-texture-on-canvas.js +69 -82
  180. package/dist/util/programs/index.js +17 -0
  181. package/{util → dist/util}/programs/shapesonglobe.js +174 -206
  182. package/{util → dist/util}/programs/supersampletotextures.js +103 -132
  183. package/{util → dist/util}/programs/texturetoglobe.js +133 -154
  184. package/{util/shaderfunctions/geometrytransformations.ts → dist/util/shaderfunctions/geometrytransformations.js} +68 -116
  185. package/dist/util/shaderfunctions/index.js +18 -0
  186. package/{util → dist/util}/shaderfunctions/nodata.js +5 -4
  187. package/{util → dist/util}/shaderfunctions/noisefunctions.js +9 -10
  188. package/{util/surface-line-data/arc-bboxes.ts → dist/util/surface-line-data/arc-bboxes.js} +25 -42
  189. package/{util → dist/util}/surface-line-data/arcs-to-cuts.js +50 -74
  190. package/dist/util/surface-line-data/cut-arc.js +1 -0
  191. package/{util/surface-line-data/flow.ts → dist/util/surface-line-data/flow.js} +28 -52
  192. package/dist/util/surface-line-data/rbush-manager.js +1 -0
  193. package/dist/util/surface-line-data/types.js +1 -0
  194. package/dist/util/surface-line-data/web-worker.js +1 -0
  195. package/dist/util/webglobe/gldefaultstates.js +7 -0
  196. package/dist/util/webglobe/index.js +18 -0
  197. package/{util → dist/util}/webglobe/rasteroverlay.js +78 -96
  198. package/{util/webglobjectbuilders.ts → dist/util/webglobjectbuilders.js} +388 -456
  199. package/{util → dist/util}/webglobjectbuilders1.js +237 -271
  200. package/{waveparticles → dist/waveparticles}/adaptor.js +17 -16
  201. package/dist/waveparticles/index.js +10 -0
  202. package/{waveparticles → dist/waveparticles}/plugin.js +266 -313
  203. package/{wind → dist/wind}/imagetovectorfieldandmagnitude.js +35 -39
  204. package/dist/wind/index.js +14 -0
  205. package/{wind → dist/wind}/plugin.js +681 -812
  206. package/{wind → dist/wind}/vectorfieldimage.js +25 -27
  207. package/{write-text → dist/write-text}/attached-text-writer.js +91 -105
  208. package/{write-text → dist/write-text}/context-text.js +98 -125
  209. package/{write-text → dist/write-text}/context-text3.js +155 -178
  210. package/dist/write-text/index.js +5 -0
  211. package/{write-text → dist/write-text}/writer-plugin.js +8 -7
  212. package/package.json +5 -2
  213. package/Math/arc.ts +0 -76
  214. package/Math/constants.ts +0 -11
  215. package/Math/frustum/types.ts +0 -11
  216. package/Math/index.js +0 -0
  217. package/Math/juction/arc-plane.ts +0 -114
  218. package/Math/juction/line-sphere.ts +0 -30
  219. package/Math/line.ts +0 -70
  220. package/Math/matrix4.ts +0 -0
  221. package/Math/plane.ts +0 -86
  222. package/Math/roadmap.md +0 -10
  223. package/Math/types.ts +0 -45
  224. package/Math/utils.js +0 -3
  225. package/algorithms/search-binary.js +0 -14
  226. package/altitude-locator/adaptors.js +0 -0
  227. package/altitude-locator/keymethod.js +0 -0
  228. package/arrowfield/index.js +0 -3
  229. package/bearing-line/index.js +0 -2
  230. package/circle-line-chain/init.js +0 -0
  231. package/circle-line-chain/readme.md +0 -57
  232. package/circle-line-chain/util.js +0 -1
  233. package/compass-rose/index.js +0 -3
  234. package/compassrose/index.js +0 -2
  235. package/depth-locator/readme.md +0 -26
  236. package/globe-types.ts +0 -13
  237. package/heatwave/index.js +0 -4
  238. package/partialrings/goals.md +0 -17
  239. package/partialrings/index.js +0 -3
  240. package/point-heat-map/index.js +0 -0
  241. package/point-heat-map/readme.md +0 -15
  242. package/point-tracks/key-methods.js +0 -3
  243. package/programs/arrowfield/index.js +0 -2
  244. package/programs/float2legendwithratio/index.js +0 -3
  245. package/programs/globeshell/index.js +0 -2
  246. package/programs/globeshell/noise/noises.js +0 -0
  247. package/programs/globeshell/wiggle/index.js +0 -6
  248. package/programs/helpers/blender/index.js +0 -0
  249. package/programs/helpers/fadeaway/index.js +0 -3
  250. package/programs/helpers/fadeaway/object.js +0 -20
  251. package/programs/helpers/index.js +0 -2
  252. package/programs/index.js +0 -21
  253. package/programs/interface.ts +0 -7
  254. package/programs/line-on-globe/index.js +0 -0
  255. package/programs/line-on-globe/util.js +0 -8
  256. package/programs/rings/distancering/index.js +0 -5
  257. package/programs/rings/distancering/shader.js +0 -0
  258. package/programs/rings/index.js +0 -1
  259. package/programs/totems/camerauniformblock.d.ts +0 -48
  260. package/programs/totems/index.ts +0 -2
  261. package/programs/two-d/pixel-circle.js +0 -0
  262. package/programs/vectorfields/index.js +0 -3
  263. package/programs/vectorfields/logics/index.js +0 -5
  264. package/publish.bat +0 -60
  265. package/rangerings/enum.js +0 -3
  266. package/rangerings/index.js +0 -5
  267. package/shape-on-terrain/goal.md +0 -12
  268. package/tests/Math/junction/arc-plane.test.ts +0 -133
  269. package/tests/Math/junction/plane-plane.test.ts +0 -82
  270. package/tests/Math/plane.test.ts +0 -43
  271. package/tests/Math/vec3.test.ts +0 -14
  272. package/timetracks/index.js +0 -6
  273. package/timetracks/readme.md +0 -1
  274. package/tsconfig.json +0 -22
  275. package/util/account/index.js +0 -6
  276. package/util/account/single-attribute-buffer-management/index.ts +0 -13
  277. package/util/account/single-attribute-buffer-management/types.ts +0 -39
  278. package/util/algorithms/index.js +0 -0
  279. package/util/check/get.js +0 -13
  280. package/util/check/index.js +0 -0
  281. package/util/check/typecheck.js +0 -39
  282. package/util/gl-util/buffer/index.ts +0 -6
  283. package/util/gl-util/buffer/types.ts +0 -13
  284. package/util/gl-util/draw-options/methods.ts +0 -66
  285. package/util/gl-util/draw-options/types.ts +0 -28
  286. package/util/gl-util/uniform-block/roadmap.md +0 -70
  287. package/util/gl-util/uniform-block/shader.js +0 -0
  288. package/util/gl-util/uniform-block/types.ts +0 -27
  289. package/util/heatwavedatamanager/index.js +0 -3
  290. package/util/index.js +0 -13
  291. package/util/interpolation/index.js +0 -0
  292. package/util/interpolation/timetrack/index.js +0 -9
  293. package/util/jshelpers/index.js +0 -1
  294. package/util/programs/index.js +0 -1
  295. package/util/shaderfunctions/index.js +0 -2
  296. package/util/surface-line-data/cut-arc.js +0 -0
  297. package/util/surface-line-data/rbush-manager.js +0 -0
  298. package/util/surface-line-data/types.ts +0 -27
  299. package/util/surface-line-data/web-worker.js +0 -0
  300. package/util/webglobe/gldefaultstates.js +0 -5
  301. package/util/webglobe/index.js +0 -2
  302. package/waveparticles/index.js +0 -3
  303. package/wind/index.js +0 -5
  304. package/write-text/index.js +0 -1
@@ -1,119 +1,108 @@
1
- /**
2
- * BufferOffsetManager
3
- * Purpose: To manage the offset of the buffer. Plus extend and defrag the buffer.
4
- * ------------------------------------------------------------------------------------------------------------------------------------------- * Functions:
5
- * 1. getOffet(key) : return the offset of the key if not found return false.
6
- * 2. setOffset(key, offset) : set the offset of the key.
7
- * 3. nextOffset() : return the next available offset if not return false.
8
- * 4. delete(key) : delete the key and return true if not found return false.
9
- * 5. defragBuffer(gl, buffer, bufferType, newCapacity = null) : defrag the buffer. if newCapacity is not provided the buffer is vacumed.
10
- * 6. extendBuffer(gl, buffer, bufferType, newCapacity) : extend the buffer.
11
- * -------------------------------------------------------------------------------------------------------------------------------------------
12
- * What this class does NOT do:
13
- * ADD, DELETE, READ
14
- * ADD, inputs needs to be turn into a block and put into buffer. Bulk will be more performant.
15
- * DELETE, might be a set to single byte to indicate the tombstone.
16
- * READ, most of the time is not needed to be read, unless for defraging.
17
- * This unpredicatable behavior is not handled by this class.
18
- */
19
-
20
- export class BufferManager {
21
- gl: WebGL2RenderingContext;
22
- buffer: WebGLBuffer;
23
- itemSize: number;
24
- bufferType: string;
25
- isFreed: boolean = false;
26
-
27
- constructor(gl: WebGL2RenderingContext, itemSize: number, { bufferType = "STATIC_DRAW", buffer = null, initialCapacity = null } = {}) {
28
- this.gl = gl;
29
- this.itemSize = itemSize;
30
- this.bufferType = bufferType;
31
- this.buffer = buffer === null ? gl.createBuffer() : buffer;
32
- if (initialCapacity !== null) this.resetWithCapacity(initialCapacity);
33
- }
34
-
35
- resetWithCapacity(capacity: number) {
36
- const { gl, buffer, bufferType, itemSize } = this;
37
- gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
38
- // @ts-ignore
39
- gl.bufferData(gl.ARRAY_BUFFER, capacity * itemSize * 4, gl[bufferType]);
40
- gl.bindBuffer(gl.ARRAY_BUFFER, null);
41
- }
42
-
43
- deleteBulk(offsets: number[]) {
44
- const { gl, buffer, itemSize } = this;
45
- const emptyBlock = new Float32Array(this.itemSize).fill(NaN)
46
- const offsetMultiplier = itemSize * 4;
47
- gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
48
- for (let offset of offsets) {
49
- if (offset !== undefined) {
50
- gl.bufferSubData(gl.ARRAY_BUFFER, offset * offsetMultiplier, emptyBlock);
51
- }
52
- }
53
- gl.bindBuffer(gl.ARRAY_BUFFER, null);
54
- }
55
-
56
-
57
- insertBulk(blocks: any[], offsets: number[]) {
58
- const { gl, buffer, itemSize } = this;
59
- gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
60
- const offsetMultiplier = itemSize * 4;
61
- for (let i = 0; i < blocks.length; i++) {
62
- const block = blocks[i];
63
- const offset = offsets[i] * offsetMultiplier;
64
- if (offset !== undefined) gl.bufferSubData(gl.ARRAY_BUFFER, offset, block);
65
- }
66
- gl.bindBuffer(gl.ARRAY_BUFFER, null);
67
- }
68
-
69
-
70
- // TODO: this is broken
71
- defrag(offsetValues: MapIterator<number> | number[], occupiedCapacity: number, newCapacity: number) {
72
- const { gl, buffer, bufferType, itemSize } = this;
73
-
74
- const newArray = new Float32Array(newCapacity * itemSize);
75
- const bufferData = this._getBufferData(occupiedCapacity);
76
- let newOffset = 0;
77
- for (const offset of offsetValues) {
78
- const itemOffset = offset * itemSize;
79
- newArray.set(bufferData.slice(itemOffset, itemOffset + itemSize), newOffset);
80
- newOffset += itemSize;
81
- }
82
-
83
- gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
84
- // @ts-ignore
85
- gl.bufferData(gl.ARRAY_BUFFER, newCapacity * itemSize * 4, gl[bufferType]);
86
- gl.bufferSubData(gl.ARRAY_BUFFER, 0, newArray);
87
- gl.bindBuffer(gl.ARRAY_BUFFER, null);
88
-
89
- }
90
-
91
- extendBuffer(occupiedCapacity: number, newCapacity: number) {
92
- const { gl, buffer, bufferType } = this;
93
- const itemSize = this.itemSize;
94
- const bufferData = this._getBufferData(occupiedCapacity);
95
- gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
96
- // @ts-ignore
97
- gl.bufferData(gl.ARRAY_BUFFER, newCapacity * itemSize * 4, gl[bufferType]);
98
- gl.bufferSubData(gl.ARRAY_BUFFER, 0, bufferData);
99
- gl.bindBuffer(gl.ARRAY_BUFFER, null);
100
- }
101
-
102
- _getBufferData(occupiedCapacity: number): Float32Array {
103
- const { gl, buffer } = this;
104
- const size = occupiedCapacity * this.itemSize;
105
- const bufferData = new Float32Array(size);
106
- gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
107
- gl.getBufferSubData(gl.ARRAY_BUFFER, 0, bufferData);
108
- gl.bindBuffer(gl.ARRAY_BUFFER, null);
109
- return bufferData;
110
- }
111
-
112
- free() {
113
- if (this.isFreed) return;
114
- this.gl.deleteBuffer(this.buffer);
115
- // this.buffer = null;
116
- // this.gl = null;
117
- this.isFreed = true;
118
- }
119
- }
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
+ class BufferManager {
23
+ constructor(gl, itemSize, { bufferType = "STATIC_DRAW", buffer = null, initialCapacity = null } = {}) {
24
+ this.isFreed = false;
25
+ this.gl = gl;
26
+ this.itemSize = itemSize;
27
+ this.bufferType = bufferType;
28
+ this.buffer = buffer === null ? gl.createBuffer() : buffer;
29
+ if (initialCapacity !== null)
30
+ this.resetWithCapacity(initialCapacity);
31
+ }
32
+ resetWithCapacity(capacity) {
33
+ const { gl, buffer, bufferType, itemSize } = this;
34
+ gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
35
+ // @ts-ignore
36
+ gl.bufferData(gl.ARRAY_BUFFER, capacity * itemSize * 4, gl[bufferType]);
37
+ gl.bindBuffer(gl.ARRAY_BUFFER, null);
38
+ }
39
+ deleteBulk(offsets) {
40
+ const { gl, buffer, itemSize } = this;
41
+ const emptyBlock = new Float32Array(this.itemSize).fill(NaN);
42
+ const offsetMultiplier = itemSize * 4;
43
+ gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
44
+ for (let offset of offsets) {
45
+ if (offset !== undefined) {
46
+ gl.bufferSubData(gl.ARRAY_BUFFER, offset * offsetMultiplier, emptyBlock);
47
+ }
48
+ }
49
+ gl.bindBuffer(gl.ARRAY_BUFFER, null);
50
+ }
51
+ insertBulk(blocks, offsets) {
52
+ const { gl, buffer, itemSize } = this;
53
+ gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
54
+ const offsetMultiplier = itemSize * 4;
55
+ for (let i = 0; i < blocks.length; i++) {
56
+ const block = blocks[i];
57
+ const offset = offsets[i] * offsetMultiplier;
58
+ if (offset !== undefined)
59
+ gl.bufferSubData(gl.ARRAY_BUFFER, offset, block);
60
+ }
61
+ gl.bindBuffer(gl.ARRAY_BUFFER, null);
62
+ }
63
+ // TODO: this is broken
64
+ defrag(offsetValues, occupiedCapacity, newCapacity) {
65
+ const { gl, buffer, bufferType, itemSize } = this;
66
+ const newArray = new Float32Array(newCapacity * itemSize);
67
+ const bufferData = this._getBufferData(occupiedCapacity);
68
+ let newOffset = 0;
69
+ for (const offset of offsetValues) {
70
+ const itemOffset = offset * itemSize;
71
+ newArray.set(bufferData.slice(itemOffset, itemOffset + itemSize), newOffset);
72
+ newOffset += itemSize;
73
+ }
74
+ gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
75
+ // @ts-ignore
76
+ gl.bufferData(gl.ARRAY_BUFFER, newCapacity * itemSize * 4, gl[bufferType]);
77
+ gl.bufferSubData(gl.ARRAY_BUFFER, 0, newArray);
78
+ gl.bindBuffer(gl.ARRAY_BUFFER, null);
79
+ }
80
+ extendBuffer(occupiedCapacity, newCapacity) {
81
+ const { gl, buffer, bufferType } = this;
82
+ const itemSize = this.itemSize;
83
+ const bufferData = this._getBufferData(occupiedCapacity);
84
+ gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
85
+ // @ts-ignore
86
+ gl.bufferData(gl.ARRAY_BUFFER, newCapacity * itemSize * 4, gl[bufferType]);
87
+ gl.bufferSubData(gl.ARRAY_BUFFER, 0, bufferData);
88
+ gl.bindBuffer(gl.ARRAY_BUFFER, null);
89
+ }
90
+ _getBufferData(occupiedCapacity) {
91
+ const { gl, buffer } = this;
92
+ const size = occupiedCapacity * this.itemSize;
93
+ const bufferData = new Float32Array(size);
94
+ gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
95
+ gl.getBufferSubData(gl.ARRAY_BUFFER, 0, bufferData);
96
+ gl.bindBuffer(gl.ARRAY_BUFFER, null);
97
+ return bufferData;
98
+ }
99
+ free() {
100
+ if (this.isFreed)
101
+ return;
102
+ this.gl.deleteBuffer(this.buffer);
103
+ // this.buffer = null;
104
+ // this.gl = null;
105
+ this.isFreed = true;
106
+ }
107
+ }
108
+ exports.BufferManager = BufferManager;
@@ -1,173 +1,150 @@
1
- import { BufferOrchestrator as BufferOrchestratorI, BufferManagersMap, BufferManager } from "./types";
2
-
3
- const EXTRA_SIZE = 10;
4
-
5
- export class BufferOrchestrator implements BufferOrchestratorI {
6
- _capacity: number;
7
- offsetMap: Map<string, number>;
8
- tombstoneOffsets: number[];
9
- _length: number;
10
-
11
- constructor({ capacity = 10 } = {}) {
12
- this._capacity = capacity;
13
- this.offsetMap = new Map();
14
- this.tombstoneOffsets = [];
15
- this._length = 0;
16
- }
17
-
18
-
19
- resetWithCapacity(bufferManagersMap: BufferManagersMap, capacity: number | null = null) {
20
- this._capacity = capacity !== null ? capacity : this._capacity;
21
- for (const [key, { bufferManager }] of bufferManagersMap) {
22
- bufferManager.resetWithCapacity(this._capacity);
23
- }
24
- this.offsetMap.clear();
25
- this.tombstoneOffsets = [];
26
- this._length = 0;
27
- }
28
-
29
- insertBulk(items: any[], bufferManagersMap: BufferManagersMap) {
30
- this.autoExtendBuffers(items.length, bufferManagersMap);
31
- const { offsetMap } = this;
32
- const offsets = [];
33
- for (const item of items) {
34
- let o = offsetMap.get(item.key);
35
- const offset = o !== undefined ? o : this.nextOffset() as number;
36
- offsetMap.set(item.key, offset);
37
- offsets.push(offset);
38
- }
39
- for (const [key, { bufferManager, adaptor }] of bufferManagersMap) {
40
- bufferManager.insertBulk(items.map(adaptor), offsets);
41
- }
42
- }
43
-
44
-
45
- // does not assign offset to the new items.
46
- updateBulk(items: any[], bufferManagersMap: BufferManagersMap, bufferKeys: string[] | null = null) {
47
- const { offsetMap } = this;
48
- const offsets = [];
49
- for (const item of items) {
50
- const offset = offsetMap.get(item.key);
51
- if (offset !== undefined) {
52
- offsets.push(offset);
53
- } else {
54
- throw new Error("updateBulk item Key does not exist");
55
- }
56
- }
57
- if (bufferKeys) {
58
- for (const key of bufferKeys) {
59
- const bufferManagerComp = bufferManagersMap.get(key);
60
- if (bufferManagerComp === undefined) throw new Error("updateBulk bufferKey does not exist");
61
- const { bufferManager, adaptor } = bufferManagerComp;
62
- bufferManager.insertBulk(items.map(adaptor), offsets);
63
- }
64
- } else {
65
- for (const [key, { bufferManager, adaptor }] of bufferManagersMap) {
66
- bufferManager.insertBulk(items.map(adaptor), offsets);
67
- }
68
- }
69
-
70
- }
71
-
72
-
73
- deleteBulk(keys: string[], bufferManagersMap: BufferManagersMap) {
74
- const offsets = [];
75
- for (const key of keys) {
76
- const 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 (const [key, { bufferManager }] of bufferManagersMap) {
84
- bufferManager.deleteBulk(offsets);
85
- }
86
- }
87
-
88
-
89
- getOffset(key: string) {
90
- return this.offsetMap.get(key);
91
- }
92
-
93
- nextOffset(): number | boolean {
94
- if (this.tombstoneOffsets.length > 0) {
95
- const offset = this.tombstoneOffsets.pop() as number;
96
- return offset;
97
- }
98
- if (this._length < this._capacity) {
99
- return this._length++;
100
- }
101
- return false;
102
- }
103
-
104
-
105
- autoExtendBuffers(itemsLength: number, bufferManagersMap: BufferManagersMap) {
106
- if (itemsLength <= this.emptySpace) return;
107
- const newCapacity = this.length + itemsLength;
108
- for (const [key, { bufferManager }] of bufferManagersMap) {
109
- bufferManager.extendBuffer(this.length, newCapacity);
110
- }
111
- this._capacity = newCapacity;
112
- }
113
-
114
-
115
- defrag(bufferManagers: BufferManagersMap, bufferKeys: string[]) { // TODO defrag and leave some empty space
116
- const offsetMap = this.offsetMap;
117
- const newCapacity = offsetMap.size + EXTRA_SIZE;
118
- if (bufferKeys) {
119
- for (const key of bufferKeys) {
120
- const offset = offsetMap.get(key);
121
- if (offset !== undefined) {
122
- for (const [key, { bufferManager }] of bufferManagers) {
123
- bufferManager.defrag([offset], this.length, newCapacity);
124
- }
125
- }
126
- }
127
- } else {
128
- for (const [key, { bufferManager }] of bufferManagers) {
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
-
139
- /**
140
- * Flushes metadata and sets length to 0 without actualize change on buffers
141
- * This method created for cases in which data is loaded on each frame
142
- */
143
- flush({ capacity = 10 } = {}) {
144
- this._length = 0;
145
- this._capacity = capacity;
146
- this.tombstoneOffsets = []
147
- this.offsetMap.clear();
148
- }
149
-
150
- _defrag() {
151
- const newOffsetMap = new Map();
152
- let newOffset = 0;
153
- for (const [key, offset] of this.offsetMap) {
154
- newOffsetMap.set(key, newOffset++);
155
- }
156
- this.offsetMap = newOffsetMap
157
- }
158
-
159
- get length() {
160
- return this._length;
161
- }
162
-
163
- get emptySpace() {
164
- return this._capacity - this.offsetMap.size;
165
- }
166
-
167
- get capacity() {
168
- return this._capacity;
169
- }
170
- }
171
-
172
-
173
-
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BufferOrchestrator = void 0;
4
+ const EXTRA_SIZE = 10;
5
+ class BufferOrchestrator {
6
+ constructor({ capacity = 10 } = {}) {
7
+ this._capacity = capacity;
8
+ this.offsetMap = new Map();
9
+ this.tombstoneOffsets = [];
10
+ this._length = 0;
11
+ }
12
+ resetWithCapacity(bufferManagersMap, capacity = null) {
13
+ this._capacity = capacity !== null ? capacity : this._capacity;
14
+ for (const [key, { bufferManager }] of bufferManagersMap) {
15
+ bufferManager.resetWithCapacity(this._capacity);
16
+ }
17
+ this.offsetMap.clear();
18
+ this.tombstoneOffsets = [];
19
+ this._length = 0;
20
+ }
21
+ insertBulk(items, bufferManagersMap) {
22
+ this.autoExtendBuffers(items.length, bufferManagersMap);
23
+ const { offsetMap } = this;
24
+ const offsets = [];
25
+ for (const item of items) {
26
+ let o = offsetMap.get(item.key);
27
+ const offset = o !== undefined ? o : this.nextOffset();
28
+ offsetMap.set(item.key, offset);
29
+ offsets.push(offset);
30
+ }
31
+ for (const [key, { bufferManager, adaptor }] of bufferManagersMap) {
32
+ bufferManager.insertBulk(items.map(adaptor), offsets);
33
+ }
34
+ }
35
+ // does not assign offset to the new items.
36
+ updateBulk(items, bufferManagersMap, bufferKeys = null) {
37
+ const { offsetMap } = this;
38
+ const offsets = [];
39
+ for (const item of items) {
40
+ const offset = offsetMap.get(item.key);
41
+ if (offset !== undefined) {
42
+ offsets.push(offset);
43
+ }
44
+ else {
45
+ throw new Error("updateBulk item Key does not exist");
46
+ }
47
+ }
48
+ if (bufferKeys) {
49
+ for (const key of bufferKeys) {
50
+ const bufferManagerComp = bufferManagersMap.get(key);
51
+ if (bufferManagerComp === undefined)
52
+ throw new Error("updateBulk bufferKey does not exist");
53
+ const { bufferManager, adaptor } = bufferManagerComp;
54
+ bufferManager.insertBulk(items.map(adaptor), offsets);
55
+ }
56
+ }
57
+ else {
58
+ for (const [key, { bufferManager, adaptor }] of bufferManagersMap) {
59
+ bufferManager.insertBulk(items.map(adaptor), offsets);
60
+ }
61
+ }
62
+ }
63
+ deleteBulk(keys, bufferManagersMap) {
64
+ const offsets = [];
65
+ for (const key of keys) {
66
+ const offset = this.getOffset(key);
67
+ if (offset !== undefined) {
68
+ offsets.push(offset);
69
+ this.offsetMap.delete(key);
70
+ this.tombstoneOffsets.push(offset);
71
+ }
72
+ }
73
+ for (const [key, { bufferManager }] of bufferManagersMap) {
74
+ bufferManager.deleteBulk(offsets);
75
+ }
76
+ }
77
+ getOffset(key) {
78
+ return this.offsetMap.get(key);
79
+ }
80
+ nextOffset() {
81
+ if (this.tombstoneOffsets.length > 0) {
82
+ const offset = this.tombstoneOffsets.pop();
83
+ return offset;
84
+ }
85
+ if (this._length < this._capacity) {
86
+ return this._length++;
87
+ }
88
+ return false;
89
+ }
90
+ autoExtendBuffers(itemsLength, bufferManagersMap) {
91
+ if (itemsLength <= this.emptySpace)
92
+ return;
93
+ const newCapacity = this.length + itemsLength;
94
+ for (const [key, { bufferManager }] of bufferManagersMap) {
95
+ bufferManager.extendBuffer(this.length, newCapacity);
96
+ }
97
+ this._capacity = newCapacity;
98
+ }
99
+ defrag(bufferManagers, bufferKeys) {
100
+ const offsetMap = this.offsetMap;
101
+ const newCapacity = offsetMap.size + EXTRA_SIZE;
102
+ if (bufferKeys) {
103
+ for (const key of bufferKeys) {
104
+ const offset = offsetMap.get(key);
105
+ if (offset !== undefined) {
106
+ for (const [key, { bufferManager }] of bufferManagers) {
107
+ bufferManager.defrag([offset], this.length, newCapacity);
108
+ }
109
+ }
110
+ }
111
+ }
112
+ else {
113
+ for (const [key, { bufferManager }] of bufferManagers) {
114
+ bufferManager.defrag(offsetMap.values(), this.length, newCapacity);
115
+ }
116
+ }
117
+ this._defrag();
118
+ this._length = offsetMap.size;
119
+ this._capacity = newCapacity;
120
+ this.tombstoneOffsets = [];
121
+ }
122
+ /**
123
+ * Flushes metadata and sets length to 0 without actualize change on buffers
124
+ * This method created for cases in which data is loaded on each frame
125
+ */
126
+ flush({ capacity = 10 } = {}) {
127
+ this._length = 0;
128
+ this._capacity = capacity;
129
+ this.tombstoneOffsets = [];
130
+ this.offsetMap.clear();
131
+ }
132
+ _defrag() {
133
+ const newOffsetMap = new Map();
134
+ let newOffset = 0;
135
+ for (const [key, offset] of this.offsetMap) {
136
+ newOffsetMap.set(key, newOffset++);
137
+ }
138
+ this.offsetMap = newOffsetMap;
139
+ }
140
+ get length() {
141
+ return this._length;
142
+ }
143
+ get emptySpace() {
144
+ return this._capacity - this.offsetMap.size;
145
+ }
146
+ get capacity() {
147
+ return this._capacity;
148
+ }
149
+ }
150
+ 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
+ const buffer_orchestrator_1 = require("./buffer-orchestrator");
5
+ Object.defineProperty(exports, "BufferOrchestrator", { enumerable: true, get: function () { return buffer_orchestrator_1.BufferOrchestrator; } });
6
+ const buffer_manager_1 = require("./buffer-manager");
7
+ Object.defineProperty(exports, "BufferManager", { enumerable: true, get: function () { return buffer_manager_1.BufferManager; } });
8
+ const object_store_1 = require("./object-store");
9
+ Object.defineProperty(exports, "ObjectStore", { enumerable: true, get: function () { return object_store_1.ObjectStore; } });