@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,20 +1,54 @@
1
- import { createProgram, shaderfunctions } from "../../../util";
2
- import { BufferOffsetManager } from "../../../util/account";
3
- import CameraUniformBlockTotem, { CameraUniformBlockString } from "../../totems/camerauniformblock";
4
- import { globeProgramCache, noRegisterGlobeProgramCache } from "../../programcache";
5
-
6
-
7
- const vertexShader = `#version 300 es ` +
8
- shaderfunctions.PI +
9
- shaderfunctions.R +
10
- shaderfunctions.POLE +
11
- CameraUniformBlockString +
12
- shaderfunctions.mercatorXYToGLPosition +
13
- shaderfunctions.longLatRadToMercator +
14
- shaderfunctions.longLatRadToCartesian3D +
15
- shaderfunctions.circleLimpFromLongLatRadCenterCartesian3D +
16
- shaderfunctions.circleLimpFromLongLatRadCenterMercatorCompass +
17
- shaderfunctions.circleLimpFromLongLatRadCenterMercatorRealDistance + `
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.BufferManager = exports.PaddingFreeAngleCache = void 0;
37
+ const util_1 = require("../../../util");
38
+ const account_1 = require("../../../util/account");
39
+ const camerauniformblock_1 = __importStar(require("../../totems/camerauniformblock"));
40
+ const programcache_1 = require("../../programcache");
41
+ const vertexShader = `#version 300 es ` +
42
+ util_1.shaderfunctions.PI +
43
+ util_1.shaderfunctions.R +
44
+ util_1.shaderfunctions.POLE +
45
+ camerauniformblock_1.CameraUniformBlockString +
46
+ util_1.shaderfunctions.mercatorXYToGLPosition +
47
+ util_1.shaderfunctions.longLatRadToMercator +
48
+ util_1.shaderfunctions.longLatRadToCartesian3D +
49
+ util_1.shaderfunctions.circleLimpFromLongLatRadCenterCartesian3D +
50
+ util_1.shaderfunctions.circleLimpFromLongLatRadCenterMercatorCompass +
51
+ util_1.shaderfunctions.circleLimpFromLongLatRadCenterMercatorRealDistance + `
18
52
 
19
53
  in vec2 center;
20
54
  in float radius;
@@ -57,322 +91,279 @@ void main() {
57
91
  }
58
92
  v_limp = limp;
59
93
  gl_Position = mercatorXYToGLPosition(limp);
60
- }`;
61
-
94
+ }`;
62
95
  const fragmentShader = `#version 300 es
63
- precision highp float; ` +
64
- shaderfunctions.POLE + `
96
+ precision highp float; ` +
97
+ util_1.shaderfunctions.POLE + `
65
98
  in vec4 v_color;
66
99
  in vec2 v_limp;
67
100
  out vec4 outColor;
68
101
  void main() {
69
102
  if ( v_limp.x < -POLE || v_limp.x > POLE || v_limp.y < -POLE || v_limp.y > POLE ){ discard; }
70
103
  outColor = v_color;
71
- }`;
72
-
73
-
74
-
75
-
76
- class Logic {
77
-
78
- constructor(globe) {
79
-
80
- this.globe = globe;
81
- this.gl = globe.gl;
82
- this.program = createProgram(this.gl, vertexShader, fragmentShader);
83
-
84
- {
85
- const gl = this.gl;
86
- // assign attribute locations
87
- gl.bindAttribLocation(this.program, 0, "center");
88
- gl.bindAttribLocation(this.program, 1, "radius");
89
- gl.bindAttribLocation(this.program, 2, "pad_range");
90
- gl.bindAttribLocation(this.program, 3, "color");
91
- gl.bindAttribLocation(this.program, 4, "flag");
92
- gl.bindAttribLocation(this.program, 5, "pad_angle");
93
-
94
- }
95
-
96
- this.cameraBlockBindingPoint = 0;
97
- const cameraBlockIndex = this.gl.getUniformBlockIndex(this.program, "CameraUniformBlock");
98
- this.gl.uniformBlockBinding(this.program, cameraBlockIndex, this.cameraBlockBindingPoint);
99
- this.cameraBlockTotem = globeProgramCache.getProgram(globe, CameraUniformBlockTotem);
100
- this._compassLocation = this.gl.getUniformLocation(this.program, "compass");
101
- this._opacityLocation = this.gl.getUniformLocation(this.program, "opacity");
102
- this._opacity = 1.0;
103
- {
104
- const currentProgram = this.gl.getParameter(this.gl.CURRENT_PROGRAM);
105
- this.gl.useProgram(this.program);
106
- this.gl.uniform1i(this._compassLocation, 1);
107
- this.gl.uniform1f(this._opacityLocation, 1.0);
108
- this._lastCompass = 1;
109
- this.gl.useProgram(currentProgram);
110
- }
111
- }
112
-
113
-
114
- draw(attrBufferManager, compass, opacity) {
115
-
116
- const { gl, program, cameraBlockBindingPoint, cameraBlockTotem, _compassLocation } = this;
117
-
118
- gl.useProgram(program);
119
- attrBufferManager.bindPaddingVAO();
120
- cameraBlockTotem.bind(cameraBlockBindingPoint);
121
- if (compass !== this._lastCompass) {
122
- gl.uniform1i(_compassLocation, compass);
123
- this._lastCompass = compass;
124
- }
125
- if (opacity !== this._opacity) {
126
- gl.uniform1f(this._opacityLocation, opacity);
127
- this._opacity = opacity;
128
- }
129
- gl.disable(gl.DEPTH_TEST);
130
- gl.drawArraysInstanced(gl.LINES, 0, 2, attrBufferManager.length);
131
- cameraBlockTotem.unbind(cameraBlockBindingPoint);
132
- gl.enable(gl.DEPTH_TEST);
133
- gl.bindVertexArray(null);
134
-
135
- }
136
- createBuffer({ bufferType = "DYNAMIC_DRAW", initialRingCapacity = 10 } = {}) {
137
- return new BufferManager(this.gl, bufferType, initialRingCapacity);
138
-
139
- }
140
-
141
- }
142
-
143
-
144
- export const PaddingFreeAngleCache = Object.freeze({
145
- getProgram: (globe) => noRegisterGlobeProgramCache.getProgram(globe, Logic),
146
- releaseProgram: (globe) => globeProgramCache.releaseProgram(globe, Logic)
147
- })
148
-
149
-
150
-
151
- export class BufferManager extends BufferOffsetManager {
152
- constructor(gl, bufferType, initialRingCapacity = 10) {
153
- super(10, { capacity: initialRingCapacity, bufferType });
154
- this.gl = gl;
155
- this.bufferType = bufferType;
156
- this.buffer = gl.createBuffer();
157
- gl.bindBuffer(gl.ARRAY_BUFFER, this.buffer);
158
- gl.bufferData(gl.ARRAY_BUFFER, this.capacity * this.itemSize * 4, gl[bufferType]);
159
- gl.bindBuffer(gl.ARRAY_BUFFER, null);
160
- this._centerMaps = new Map();
161
- this.vao = gl.createVertexArray();
162
-
163
- {
164
- gl.bindVertexArray(this.vao);
165
- gl.bindBuffer(gl.ARRAY_BUFFER, this.buffer);
166
- gl.enableVertexAttribArray(0);
167
- gl.enableVertexAttribArray(1);
168
- gl.enableVertexAttribArray(2);
169
- gl.enableVertexAttribArray(3);
170
- gl.enableVertexAttribArray(4);
171
- gl.enableVertexAttribArray(5);
172
- gl.vertexAttribPointer(0, 2, gl.FLOAT, false, 40, 0);
173
- gl.vertexAttribPointer(1, 1, gl.FLOAT, false, 40, 8);
174
- gl.vertexAttribPointer(2, 1, gl.FLOAT, false, 40, 12);
175
- gl.vertexAttribPointer(3, 4, gl.FLOAT, false, 40, 16);
176
- gl.vertexAttribPointer(4, 1, gl.FLOAT, false, 40, 32);
177
- gl.vertexAttribPointer(5, 1, gl.FLOAT, false, 40, 36);
178
- // divisor
179
- gl.vertexAttribDivisor(0, 1);
180
- gl.vertexAttribDivisor(1, 1);
181
- gl.vertexAttribDivisor(2, 1);
182
- gl.vertexAttribDivisor(3, 1);
183
- gl.vertexAttribDivisor(4, 1);
184
- gl.vertexAttribDivisor(5, 1);
185
- gl.bindBuffer(gl.ARRAY_BUFFER, null);
186
- gl.bindVertexArray(null);
187
- }
188
- }
189
-
190
-
191
- __centerMapMethod(rings, paddingAngles) {
192
- return new Map([
193
- ["rings", rings],
194
- ["paddingAngles", paddingAngles]
195
- ])
196
- }
197
-
198
-
199
-
200
-
201
- bindPaddingVAO() {
202
- this.gl.bindVertexArray(this.vao);
203
- }
204
-
205
- //TODO: implement this
206
- // insertBulk is gone. no update feature
207
- // addBulk is added.
208
- // deletes old centers given
209
- insertBulk(data) {
210
- const { gl, buffer } = this;
211
-
212
- const deleteCentersList = [];
213
- for (const { centerID } of data) {
214
- if (this._centerMaps.has(centerID)) {
215
- deleteCentersList.push(centerID);
216
- }
217
- }
218
- if (deleteCentersList.length > 0) {
219
- this.removeCenters(deleteCentersList);
220
- }
221
- const requiredSpace = this.__requiredSpaceForBulk(data);
222
- const spaceLeft = this.spaceLeft;
223
- // console.log("space left:", spaceLeft, "required space:", requiredSpace);
224
- if (requiredSpace > spaceLeft) {
225
- // console.log("new capacity:", this.capacity + requiredSpace - spaceLeft)
226
- this.extendBuffer(this.capacity + requiredSpace - spaceLeft);
227
- }
228
-
229
- const items = [];
230
- for (const { centerID, x, y, rgba, paddingAngles, hide = 0, rings } of data) {
231
- this._centerMaps.set(centerID, this.__centerMapMethod(rings, paddingAngles)); // x,y, rgba, hide prograbably not needed
232
- for (const { ringID, radius, padding } of rings) {
233
- for (const paddingAngle of paddingAngles) {
234
- const _offsetMapKey = `${centerID}_${ringID}_${paddingAngle}`;
235
- const offset = this.getOffset(_offsetMapKey) | this.nextOffset();
236
- items.push({
237
- offset: offset,
238
- payload: new Float32Array([x, y, radius, padding, rgba[0], rgba[1], rgba[2], rgba[3], hide, paddingAngle])
239
- })
240
- this.offSetMap.set(_offsetMapKey, offset);
241
- }
242
- }
243
- }
244
- gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
245
- for (let { offset, payload } of items) {
246
- gl.bufferSubData(gl.ARRAY_BUFFER, offset, payload);
247
- }
248
- }
249
-
250
-
251
- updateCentersXY(data) {
252
- const { gl, buffer } = this;
253
- const items = [];
254
-
255
- for (const { centerID, x, y } of data) {
256
- const center = this._centerMaps.get(centerID);
257
- const payload = new Float32Array([x, y]);
258
- const paddingAngles = center.get("paddingAngles");
259
- const rings = center.get("rings");
260
- for (const { ringID } of rings) {
261
- for (const paddingAngle of paddingAngles) {
262
- const offsetKey = offsetMapKey(centerID, ringID, paddingAngle);
263
- items.push({ offset: this.getOffset(offsetKey), payload });
264
- }
265
- }
266
- }
267
- gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
268
- for (let { offset, payload } of items) {
269
- gl.bufferSubData(gl.ARRAY_BUFFER, offset, payload);
270
- }
271
- gl.bindBuffer(gl.ARRAY_BUFFER, null);
272
- }
273
-
274
-
275
-
276
- //TODO: test
277
- updateCentersHide(data) {
278
- const { gl, buffer } = this;
279
- const items = [];
280
- for (const { centerID, hide = null } of data) {
281
- if (hide === null) continue;
282
- const block = new Float32Array([hide]);
283
- const center = this._centerMaps.get(centerID);
284
- if (!center) continue;
285
- const paddingAngles = center.get("paddingAngles");
286
- const rings = center.get("rings");
287
- for (const { ringID } of rings) {
288
- for (const paddingAngle of paddingAngles) {
289
- const offsetKey = offsetMapKey(centerID, ringID, paddingAngle);
290
- items.push({ key: offsetKey, payload: block });
291
- }
292
- }
293
- }
294
- this._updatePartial(items, 8, gl, buffer);
295
- }
296
-
297
- updateCentersColor(data) {
298
- const { gl, buffer } = this;
299
- const items = [];
300
- for (const { centerID, rgba } of data) {
301
- const center = this._centerMaps.get(centerID);
302
- if (!center) continue;
303
- center.set("rgba", rgba);
304
- const paddingAngles = center.get("paddingAngles");
305
- const rings = center.get("rings");
306
- const payload = new Float32Array(rgba);
307
- for (const { ringID } of rings) {
308
- for (const paddingAngle of paddingAngles) {
309
- const offsetKey = offsetMapKey(centerID, ringID, paddingAngle);
310
- items.push({ key: offsetKey, payload });
311
- }
312
- }
313
- }
314
- this._updatePartial(items, 4, gl, buffer);
315
- }
316
-
317
-
318
-
319
- __requiredSpaceForBulk(data) {
320
- let space = 0;
321
- for (const { paddingAngles, rings } of data) {
322
- space += paddingAngles.length * rings.length;
323
- }
324
- return space;
325
- }
326
-
327
- // TODO: TEST IT WITH INSERT
328
- removeCenters(centerIDs) {
329
- const keys = [];
330
- for (const centerID of centerIDs) {
331
- const center = this._centerMaps.get(centerID);
332
- if (!center) continue;
333
- const rings = center.get("rings");
334
- const paddingAngles = center.get("paddingAngles");
335
- for (const { ringID } of rings) {
336
- for (const paddingAngle of paddingAngles) {
337
- keys.push(offsetMapKey(centerID, ringID, paddingAngle));
338
- }
339
- }
340
- this._centerMaps.delete(centerID);
341
- }
342
- this._removeFromBuffer(keys);
343
- }
344
- }
345
-
346
-
347
- const offsetMapKey = (centerID, ringID, paddingAngle) => `${centerID}_${ringID}_${paddingAngle}`;
348
-
349
-
350
-
351
- /**
352
- * {center has x,y, color, paddingAngles, rings} key: centerID
353
- * {ring has ranges, paddings} key: ringKey
354
- * _offSetMap => | key: centerID_ringKey_paddingAngle | value: offset |
355
- *
356
- * insertCenter
357
- *
358
- * insertRing
359
- *
360
- * updateCenter ---> updatesRings ---> updatesPaddings
361
- * centerMap ringMap
362
- * keeps keeps
363
- * list of Rings list of Paddings
364
- *
365
- *
366
- * needs an adaptor to convert currently implemented data into this format.
367
- * current format:
368
- * center = {
369
- * centerID,
370
- * x,
371
- * y,
372
- * rings: [
373
- * radius,
374
- * paddingRadius,
375
- * rgba,
376
- * ]
377
- * }
378
- */
104
+ }`;
105
+ class Logic {
106
+ constructor(globe) {
107
+ this.globe = globe;
108
+ this.gl = globe.gl;
109
+ this.program = (0, util_1.createProgram)(this.gl, vertexShader, fragmentShader);
110
+ {
111
+ const gl = this.gl;
112
+ // assign attribute locations
113
+ gl.bindAttribLocation(this.program, 0, "center");
114
+ gl.bindAttribLocation(this.program, 1, "radius");
115
+ gl.bindAttribLocation(this.program, 2, "pad_range");
116
+ gl.bindAttribLocation(this.program, 3, "color");
117
+ gl.bindAttribLocation(this.program, 4, "flag");
118
+ gl.bindAttribLocation(this.program, 5, "pad_angle");
119
+ }
120
+ this.cameraBlockBindingPoint = 0;
121
+ const cameraBlockIndex = this.gl.getUniformBlockIndex(this.program, "CameraUniformBlock");
122
+ this.gl.uniformBlockBinding(this.program, cameraBlockIndex, this.cameraBlockBindingPoint);
123
+ this.cameraBlockTotem = programcache_1.globeProgramCache.getProgram(globe, camerauniformblock_1.default);
124
+ this._compassLocation = this.gl.getUniformLocation(this.program, "compass");
125
+ this._opacityLocation = this.gl.getUniformLocation(this.program, "opacity");
126
+ this._opacity = 1.0;
127
+ {
128
+ const currentProgram = this.gl.getParameter(this.gl.CURRENT_PROGRAM);
129
+ this.gl.useProgram(this.program);
130
+ this.gl.uniform1i(this._compassLocation, 1);
131
+ this.gl.uniform1f(this._opacityLocation, 1.0);
132
+ this._lastCompass = 1;
133
+ this.gl.useProgram(currentProgram);
134
+ }
135
+ }
136
+ draw(attrBufferManager, compass, opacity) {
137
+ const { gl, program, cameraBlockBindingPoint, cameraBlockTotem, _compassLocation } = this;
138
+ gl.useProgram(program);
139
+ attrBufferManager.bindPaddingVAO();
140
+ cameraBlockTotem.bind(cameraBlockBindingPoint);
141
+ if (compass !== this._lastCompass) {
142
+ gl.uniform1i(_compassLocation, compass);
143
+ this._lastCompass = compass;
144
+ }
145
+ if (opacity !== this._opacity) {
146
+ gl.uniform1f(this._opacityLocation, opacity);
147
+ this._opacity = opacity;
148
+ }
149
+ gl.disable(gl.DEPTH_TEST);
150
+ gl.drawArraysInstanced(gl.LINES, 0, 2, attrBufferManager.length);
151
+ cameraBlockTotem.unbind(cameraBlockBindingPoint);
152
+ gl.enable(gl.DEPTH_TEST);
153
+ gl.bindVertexArray(null);
154
+ }
155
+ createBuffer({ bufferType = "DYNAMIC_DRAW", initialRingCapacity = 10 } = {}) {
156
+ return new BufferManager(this.gl, bufferType, initialRingCapacity);
157
+ }
158
+ }
159
+ exports.PaddingFreeAngleCache = Object.freeze({
160
+ getProgram: (globe) => programcache_1.noRegisterGlobeProgramCache.getProgram(globe, Logic),
161
+ releaseProgram: (globe) => programcache_1.globeProgramCache.releaseProgram(globe, Logic)
162
+ });
163
+ class BufferManager extends account_1.BufferOffsetManager {
164
+ constructor(gl, bufferType, initialRingCapacity = 10) {
165
+ super(10, { capacity: initialRingCapacity, bufferType });
166
+ this.gl = gl;
167
+ this.bufferType = bufferType;
168
+ this.buffer = gl.createBuffer();
169
+ gl.bindBuffer(gl.ARRAY_BUFFER, this.buffer);
170
+ gl.bufferData(gl.ARRAY_BUFFER, this.capacity * this.itemSize * 4, gl[bufferType]);
171
+ gl.bindBuffer(gl.ARRAY_BUFFER, null);
172
+ this._centerMaps = new Map();
173
+ this.vao = gl.createVertexArray();
174
+ {
175
+ gl.bindVertexArray(this.vao);
176
+ gl.bindBuffer(gl.ARRAY_BUFFER, this.buffer);
177
+ gl.enableVertexAttribArray(0);
178
+ gl.enableVertexAttribArray(1);
179
+ gl.enableVertexAttribArray(2);
180
+ gl.enableVertexAttribArray(3);
181
+ gl.enableVertexAttribArray(4);
182
+ gl.enableVertexAttribArray(5);
183
+ gl.vertexAttribPointer(0, 2, gl.FLOAT, false, 40, 0);
184
+ gl.vertexAttribPointer(1, 1, gl.FLOAT, false, 40, 8);
185
+ gl.vertexAttribPointer(2, 1, gl.FLOAT, false, 40, 12);
186
+ gl.vertexAttribPointer(3, 4, gl.FLOAT, false, 40, 16);
187
+ gl.vertexAttribPointer(4, 1, gl.FLOAT, false, 40, 32);
188
+ gl.vertexAttribPointer(5, 1, gl.FLOAT, false, 40, 36);
189
+ // divisor
190
+ gl.vertexAttribDivisor(0, 1);
191
+ gl.vertexAttribDivisor(1, 1);
192
+ gl.vertexAttribDivisor(2, 1);
193
+ gl.vertexAttribDivisor(3, 1);
194
+ gl.vertexAttribDivisor(4, 1);
195
+ gl.vertexAttribDivisor(5, 1);
196
+ gl.bindBuffer(gl.ARRAY_BUFFER, null);
197
+ gl.bindVertexArray(null);
198
+ }
199
+ }
200
+ __centerMapMethod(rings, paddingAngles) {
201
+ return new Map([
202
+ ["rings", rings],
203
+ ["paddingAngles", paddingAngles]
204
+ ]);
205
+ }
206
+ bindPaddingVAO() {
207
+ this.gl.bindVertexArray(this.vao);
208
+ }
209
+ //TODO: implement this
210
+ // insertBulk is gone. no update feature
211
+ // addBulk is added.
212
+ // deletes old centers given
213
+ insertBulk(data) {
214
+ const { gl, buffer } = this;
215
+ const deleteCentersList = [];
216
+ for (const { centerID } of data) {
217
+ if (this._centerMaps.has(centerID)) {
218
+ deleteCentersList.push(centerID);
219
+ }
220
+ }
221
+ if (deleteCentersList.length > 0) {
222
+ this.removeCenters(deleteCentersList);
223
+ }
224
+ const requiredSpace = this.__requiredSpaceForBulk(data);
225
+ const spaceLeft = this.spaceLeft;
226
+ // console.log("space left:", spaceLeft, "required space:", requiredSpace);
227
+ if (requiredSpace > spaceLeft) {
228
+ // console.log("new capacity:", this.capacity + requiredSpace - spaceLeft)
229
+ this.extendBuffer(this.capacity + requiredSpace - spaceLeft);
230
+ }
231
+ const items = [];
232
+ for (const { centerID, x, y, rgba, paddingAngles, hide = 0, rings } of data) {
233
+ this._centerMaps.set(centerID, this.__centerMapMethod(rings, paddingAngles)); // x,y, rgba, hide prograbably not needed
234
+ for (const { ringID, radius, padding } of rings) {
235
+ for (const paddingAngle of paddingAngles) {
236
+ const _offsetMapKey = `${centerID}_${ringID}_${paddingAngle}`;
237
+ const offset = this.getOffset(_offsetMapKey) | this.nextOffset();
238
+ items.push({
239
+ offset: offset,
240
+ payload: new Float32Array([x, y, radius, padding, rgba[0], rgba[1], rgba[2], rgba[3], hide, paddingAngle])
241
+ });
242
+ this.offSetMap.set(_offsetMapKey, offset);
243
+ }
244
+ }
245
+ }
246
+ gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
247
+ for (let { offset, payload } of items) {
248
+ gl.bufferSubData(gl.ARRAY_BUFFER, offset, payload);
249
+ }
250
+ }
251
+ updateCentersXY(data) {
252
+ const { gl, buffer } = this;
253
+ const items = [];
254
+ for (const { centerID, x, y } of data) {
255
+ const center = this._centerMaps.get(centerID);
256
+ const payload = new Float32Array([x, y]);
257
+ const paddingAngles = center.get("paddingAngles");
258
+ const rings = center.get("rings");
259
+ for (const { ringID } of rings) {
260
+ for (const paddingAngle of paddingAngles) {
261
+ const offsetKey = offsetMapKey(centerID, ringID, paddingAngle);
262
+ items.push({ offset: this.getOffset(offsetKey), payload });
263
+ }
264
+ }
265
+ }
266
+ gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
267
+ for (let { offset, payload } of items) {
268
+ gl.bufferSubData(gl.ARRAY_BUFFER, offset, payload);
269
+ }
270
+ gl.bindBuffer(gl.ARRAY_BUFFER, null);
271
+ }
272
+ //TODO: test
273
+ updateCentersHide(data) {
274
+ const { gl, buffer } = this;
275
+ const items = [];
276
+ for (const { centerID, hide = null } of data) {
277
+ if (hide === null)
278
+ continue;
279
+ const block = new Float32Array([hide]);
280
+ const center = this._centerMaps.get(centerID);
281
+ if (!center)
282
+ continue;
283
+ const paddingAngles = center.get("paddingAngles");
284
+ const rings = center.get("rings");
285
+ for (const { ringID } of rings) {
286
+ for (const paddingAngle of paddingAngles) {
287
+ const offsetKey = offsetMapKey(centerID, ringID, paddingAngle);
288
+ items.push({ key: offsetKey, payload: block });
289
+ }
290
+ }
291
+ }
292
+ this._updatePartial(items, 8, gl, buffer);
293
+ }
294
+ updateCentersColor(data) {
295
+ const { gl, buffer } = this;
296
+ const items = [];
297
+ for (const { centerID, rgba } of data) {
298
+ const center = this._centerMaps.get(centerID);
299
+ if (!center)
300
+ continue;
301
+ center.set("rgba", rgba);
302
+ const paddingAngles = center.get("paddingAngles");
303
+ const rings = center.get("rings");
304
+ const payload = new Float32Array(rgba);
305
+ for (const { ringID } of rings) {
306
+ for (const paddingAngle of paddingAngles) {
307
+ const offsetKey = offsetMapKey(centerID, ringID, paddingAngle);
308
+ items.push({ key: offsetKey, payload });
309
+ }
310
+ }
311
+ }
312
+ this._updatePartial(items, 4, gl, buffer);
313
+ }
314
+ __requiredSpaceForBulk(data) {
315
+ let space = 0;
316
+ for (const { paddingAngles, rings } of data) {
317
+ space += paddingAngles.length * rings.length;
318
+ }
319
+ return space;
320
+ }
321
+ // TODO: TEST IT WITH INSERT
322
+ removeCenters(centerIDs) {
323
+ const keys = [];
324
+ for (const centerID of centerIDs) {
325
+ const center = this._centerMaps.get(centerID);
326
+ if (!center)
327
+ continue;
328
+ const rings = center.get("rings");
329
+ const paddingAngles = center.get("paddingAngles");
330
+ for (const { ringID } of rings) {
331
+ for (const paddingAngle of paddingAngles) {
332
+ keys.push(offsetMapKey(centerID, ringID, paddingAngle));
333
+ }
334
+ }
335
+ this._centerMaps.delete(centerID);
336
+ }
337
+ this._removeFromBuffer(keys);
338
+ }
339
+ }
340
+ exports.BufferManager = BufferManager;
341
+ const offsetMapKey = (centerID, ringID, paddingAngle) => `${centerID}_${ringID}_${paddingAngle}`;
342
+ /**
343
+ * {center has x,y, color, paddingAngles, rings} key: centerID
344
+ * {ring has ranges, paddings} key: ringKey
345
+ * _offSetMap => | key: centerID_ringKey_paddingAngle | value: offset |
346
+ *
347
+ * insertCenter
348
+ *
349
+ * insertRing
350
+ *
351
+ * updateCenter ---> updatesRings ---> updatesPaddings
352
+ * centerMap ringMap
353
+ * keeps keeps
354
+ * list of Rings list of Paddings
355
+ *
356
+ *
357
+ * needs an adaptor to convert currently implemented data into this format.
358
+ * current format:
359
+ * center = {
360
+ * centerID,
361
+ * x,
362
+ * y,
363
+ * rings: [
364
+ * radius,
365
+ * paddingRadius,
366
+ * rgba,
367
+ * ]
368
+ * }
369
+ */