@pirireis/webglobeplugins 0.17.0 → 1.0.2

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 (274) hide show
  1. package/Math/{angle-calculation.js → angle-calculation.ts} +18 -14
  2. package/Math/{arc-cdf-points.js → arc-cdf-points.ts} +329 -272
  3. package/Math/{arc-generate-points-exponantial.js → arc-generate-points-exponantial.ts} +299 -254
  4. package/Math/{arc.js → arc.ts} +421 -292
  5. package/Math/bounds/line-bbox.js +225 -186
  6. package/Math/{circle-cdf-points.js → circle-cdf-points.ts} +143 -78
  7. package/Math/{circle.js → circle.ts} +49 -33
  8. package/Math/{constants.js → constants.ts} +12 -4
  9. package/Math/contour/{quadtreecontours.js → quadtreecontours.ts} +371 -300
  10. package/Math/contour/quadtreecontours1.js +336 -298
  11. package/Math/{finite-line-2d.js → finite-line-2d.ts} +68 -58
  12. package/Math/haversine.ts +33 -0
  13. package/Math/index.js +0 -1
  14. package/Math/juction/{arc-plane.js → arc-plane.ts} +203 -143
  15. package/Math/juction/{line-sphere.js → line-sphere.ts} +32 -22
  16. package/Math/juction/{plane-plane.js → plane-plane.ts} +62 -53
  17. package/Math/{line.js → line.ts} +84 -52
  18. package/Math/matrix4.ts +0 -0
  19. package/Math/mesh/mapbox-delaunay.d.ts +74 -0
  20. package/Math/{methods.js → methods.ts} +182 -107
  21. package/Math/{plane.js → plane.ts} +92 -56
  22. package/Math/{quaternion.js → quaternion.ts} +128 -106
  23. package/Math/roadmap.md +10 -0
  24. package/Math/templete-shapes/{grid-visually-equal.js → grid-visually-equal.ts} +118 -65
  25. package/Math/tessellation/constants.ts +1 -0
  26. package/Math/tessellation/methods.ts +79 -0
  27. package/Math/tessellation/nearest-value-padding.ts +147 -0
  28. package/Math/tessellation/roadmap.md +48 -0
  29. package/Math/tessellation/spherical-triangle-area.ts +127 -0
  30. package/Math/tessellation/tile-merger.ts +578 -0
  31. package/Math/tessellation/triangle-tessellation.ts +533 -0
  32. package/Math/tessellation/types.ts +1 -0
  33. package/Math/types.ts +68 -0
  34. package/Math/utils.js +3 -2
  35. package/Math/{vec3.js → vec3.ts} +227 -151
  36. package/Math/xyz-tile.ts +26 -0
  37. package/algorithms/search-binary.js +14 -16
  38. package/altitude-locator/adaptors.js +0 -1
  39. package/altitude-locator/keymethod.js +0 -1
  40. package/altitude-locator/plugin.js +445 -345
  41. package/altitude-locator/types.js +26 -21
  42. package/compass-rose/compass-rose-padding-flat.js +274 -230
  43. package/compass-rose/{compass-text-writer.js → compass-text-writer.ts} +210 -155
  44. package/compass-rose/index.js +3 -3
  45. package/{constants.js → constants.ts} +8 -6
  46. package/heatwave/datamanager.js +168 -149
  47. package/heatwave/heatwave.js +261 -206
  48. package/heatwave/index.js +5 -5
  49. package/heatwave/isobar.js +340 -303
  50. package/heatwave/{texture-point-sampler.js → texture-point-sampler.ts} +220 -187
  51. package/investigation-tools/draw/tiles/adapters.ts +133 -0
  52. package/investigation-tools/draw/tiles/tiles.ts +162 -0
  53. package/jest.config.js +6 -7
  54. package/package.json +1 -1
  55. package/pin/pin-object-array1.js +381 -300
  56. package/pin/pin-point-totem1.js +77 -60
  57. package/programs/arrowfield/arrow-field.js +89 -60
  58. package/programs/arrowfield/logic.js +173 -141
  59. package/programs/data2legend/density-to-legend.js +86 -68
  60. package/programs/data2legend/point-to-density-texture.js +84 -67
  61. package/programs/float2legendwithratio/index.js +3 -2
  62. package/programs/float2legendwithratio/logic.js +144 -118
  63. package/programs/float2legendwithratio/object.js +141 -104
  64. package/programs/helpers/blender.js +73 -58
  65. package/programs/helpers/{fadeaway.js → fadeaway.ts} +73 -55
  66. package/programs/index.js +19 -20
  67. package/programs/line-on-globe/circle-accurate-3d.js +112 -85
  68. package/programs/line-on-globe/circle-accurate-flat.js +200 -148
  69. package/programs/line-on-globe/degree-padding-around-circle-3d.js +134 -102
  70. package/programs/line-on-globe/index.js +0 -1
  71. package/programs/line-on-globe/lines-color-instanced-flat.js +99 -80
  72. package/programs/line-on-globe/linestrip/data.ts +29 -0
  73. package/programs/line-on-globe/linestrip/{linestrip.js → linestrip.ts} +152 -93
  74. package/programs/line-on-globe/{naive-accurate-flexible.js → naive-accurate-flexible.ts} +175 -126
  75. package/programs/line-on-globe/util.js +8 -5
  76. package/programs/picking/pickable-polygon-renderer.js +129 -98
  77. package/programs/picking/pickable-renderer.js +130 -98
  78. package/programs/point-on-globe/element-globe-surface-glow.js +122 -93
  79. package/programs/point-on-globe/element-point-glow.js +114 -80
  80. package/programs/point-on-globe/square-pixel-point.js +139 -120
  81. package/programs/polygon-on-globe/roadmap.md +8 -0
  82. package/programs/polygon-on-globe/texture-dem-triangles.ts +290 -0
  83. package/programs/{programcache.js → programcache.ts} +134 -126
  84. package/programs/rings/index.js +1 -1
  85. package/programs/rings/partial-ring/{piece-of-pie.js → piece-of-pie.ts} +222 -152
  86. package/programs/totems/camera-totem-attactment-interface.ts +4 -0
  87. package/programs/totems/{camerauniformblock.js → camerauniformblock.ts} +326 -230
  88. package/programs/totems/{canvas-webglobe-info.js → canvas-webglobe-info.ts} +147 -132
  89. package/programs/totems/dem-textures-manager.ts +368 -0
  90. package/programs/totems/{globe-changes.js → globe-changes.ts} +79 -59
  91. package/programs/totems/gpu-selection-uniform-block.js +127 -99
  92. package/programs/totems/{index.js → index.ts} +2 -2
  93. package/programs/two-d/pixel-padding-for-compass.js +101 -87
  94. package/programs/util.js +19 -14
  95. package/programs/vectorfields/logics/{constants.js → constants.ts} +5 -4
  96. package/programs/vectorfields/logics/drawrectangleparticles.ts +182 -0
  97. package/programs/vectorfields/logics/index.js +4 -2
  98. package/programs/vectorfields/logics/particle-ubo.ts +23 -0
  99. package/programs/vectorfields/logics/{pixelbased.js → pixelbased.ts} +119 -84
  100. package/programs/vectorfields/logics/ubo.js +57 -51
  101. package/programs/vectorfields/{pingpongbuffermanager.js → pingpongbuffermanager.ts} +113 -73
  102. package/publish.bat +62 -0
  103. package/range-tools-on-terrain/bearing-line/{adapters.js → adapters.ts} +154 -114
  104. package/range-tools-on-terrain/bearing-line/{plugin.js → plugin.ts} +569 -457
  105. package/range-tools-on-terrain/bearing-line/types.ts +65 -0
  106. package/range-tools-on-terrain/circle-line-chain/{adapters.js → adapters.ts} +104 -85
  107. package/range-tools-on-terrain/circle-line-chain/{chain-list-map.js → chain-list-map.ts} +446 -382
  108. package/range-tools-on-terrain/circle-line-chain/{plugin.js → plugin.ts} +607 -464
  109. package/range-tools-on-terrain/circle-line-chain/types.ts +43 -0
  110. package/range-tools-on-terrain/range-ring/{adapters.js → adapters.ts} +114 -93
  111. package/range-tools-on-terrain/range-ring/{enum.js → enum.ts} +2 -2
  112. package/range-tools-on-terrain/range-ring/{plugin.js → plugin.ts} +444 -377
  113. package/range-tools-on-terrain/range-ring/rangeringangletext.ts +396 -0
  114. package/range-tools-on-terrain/range-ring/types.ts +30 -0
  115. package/semiplugins/interface.ts +14 -0
  116. package/semiplugins/lightweight/{line-plugin.js → line-plugin.ts} +342 -221
  117. package/semiplugins/lightweight/{piece-of-pie-plugin.js → piece-of-pie-plugin.ts} +275 -200
  118. package/semiplugins/shape-on-terrain/{arc-plugin.js → arc-plugin.ts} +616 -472
  119. package/semiplugins/shape-on-terrain/{circle-plugin.js → circle-plugin.ts} +588 -444
  120. package/semiplugins/shape-on-terrain/goal.md +12 -0
  121. package/semiplugins/shape-on-terrain/{padding-1-degree.js → padding-1-degree.ts} +713 -539
  122. package/semiplugins/shape-on-terrain/terrain-polygon/adapters.ts +69 -0
  123. package/semiplugins/shape-on-terrain/terrain-polygon/data/cache-shortcuts.md +20 -0
  124. package/semiplugins/shape-on-terrain/terrain-polygon/data/cache.ts +149 -0
  125. package/semiplugins/shape-on-terrain/terrain-polygon/data/index-polygon-map.ts +58 -0
  126. package/semiplugins/shape-on-terrain/terrain-polygon/data/manager.ts +4 -0
  127. package/semiplugins/shape-on-terrain/terrain-polygon/data/master-worker.js +196 -0
  128. package/semiplugins/shape-on-terrain/terrain-polygon/data/master-worker.ts +209 -0
  129. package/semiplugins/shape-on-terrain/terrain-polygon/data/polygon-to-triangles.ts +144 -0
  130. package/semiplugins/shape-on-terrain/terrain-polygon/data/random.ts +165 -0
  131. package/semiplugins/shape-on-terrain/terrain-polygon/data/readme.md +5 -0
  132. package/semiplugins/shape-on-terrain/terrain-polygon/data/types.ts +37 -0
  133. package/semiplugins/shape-on-terrain/terrain-polygon/data/worker-contact.ts +81 -0
  134. package/semiplugins/shape-on-terrain/terrain-polygon/data/worker.js +146 -0
  135. package/semiplugins/shape-on-terrain/terrain-polygon/notes.md +90 -0
  136. package/semiplugins/shape-on-terrain/terrain-polygon/terrain-polygon.ts +265 -0
  137. package/semiplugins/shape-on-terrain/terrain-polygon/types.ts +69 -0
  138. package/semiplugins/shell/bbox-renderer/index.ts +2 -0
  139. package/semiplugins/shell/bbox-renderer/{logic.js → logic.ts} +273 -249
  140. package/semiplugins/shell/bbox-renderer/object.ts +129 -0
  141. package/semiplugins/type.ts +8 -0
  142. package/semiplugins/utility/{container-plugin.js → container-plugin.ts} +126 -94
  143. package/semiplugins/utility/{object-pass-container-plugin.js → object-pass-container-plugin.ts} +101 -80
  144. package/shaders/fragment-toy/firework.js +1 -1
  145. package/shaders/fragment-toy/singularity.js +5 -2
  146. package/terrain-plugin.mmd +83 -0
  147. package/tests/Math/arc-sampling-test.js +367 -0
  148. package/tests/Math/arc-sampling-test.ts +429 -0
  149. package/tests/Math/arc.test.ts +77 -0
  150. package/tests/Math/junction/arc-limit.test.ts +7 -0
  151. package/tests/Math/junction/arc-plane-points.test.ts +196 -0
  152. package/tests/Math/junction/arc-plane.test.ts +172 -0
  153. package/tests/Math/junction/line-sphere.test.ts +127 -0
  154. package/tests/Math/junction/plane-plane.test.ts +91 -0
  155. package/tests/Math/plane-test.ts +17 -0
  156. package/tests/Math/plane.test.ts +43 -0
  157. package/tests/Math/vec3.test.ts +33 -0
  158. package/tracks/point-heat-map/adaptors/timetracksplugin-format-to-this.js +78 -63
  159. package/tracks/point-heat-map/index.js +0 -1
  160. package/tracks/point-heat-map/plugin-webworker.js +148 -121
  161. package/tracks/point-heat-map/point-to-heat-map-flow.js +150 -121
  162. package/tracks/point-heat-map/readme.md +15 -0
  163. package/tracks/point-tracks/key-methods.js +3 -2
  164. package/tracks/point-tracks/plugin.js +487 -393
  165. package/tracks/timetracks/adaptors-line-strip.js +79 -65
  166. package/tracks/timetracks/plugin-line-strip.js +295 -240
  167. package/tracks/timetracks/program-line-strip.js +495 -411
  168. package/tracks/timetracks/programpoint-line-strip.js +137 -109
  169. package/tracks/timetracks/readme.md +1 -0
  170. package/tsconfig.json +22 -0
  171. package/types/@pirireis/webglobe.d.ts +102 -0
  172. package/types/delaunator.d.ts +40 -0
  173. package/types/earcut.d.ts +11 -0
  174. package/types/rbush.d.ts +57 -0
  175. package/types.ts +319 -0
  176. package/util/account/bufferoffsetmanager.js +209 -176
  177. package/util/account/create-buffermap-orchastration.ts +85 -0
  178. package/util/account/index.js +6 -3
  179. package/util/account/single-attribute-buffer-management/{buffer-manager.js → buffer-manager.ts} +151 -117
  180. package/util/account/single-attribute-buffer-management/{buffer-orchestrator.js → buffer-orchestrator.ts} +238 -212
  181. package/util/account/single-attribute-buffer-management/{buffer-orchestrator1.js → buffer-orchestrator1.ts} +184 -159
  182. package/util/account/single-attribute-buffer-management/{index.js → index.ts} +11 -4
  183. package/util/account/single-attribute-buffer-management/{object-store.js → object-store.ts} +76 -55
  184. package/util/account/single-attribute-buffer-management/types.ts +43 -0
  185. package/util/account/util.js +22 -18
  186. package/util/algorithms/index.js +0 -1
  187. package/util/algorithms/search-binary.js +26 -25
  188. package/util/build-strategy/{static-dynamic.js → static-dynamic.ts} +50 -41
  189. package/util/check/index.js +0 -1
  190. package/util/check/typecheck.ts +74 -0
  191. package/util/{frame-counter-trigger.js → frame-counter-trigger.ts} +99 -84
  192. package/util/geometry/{index.js → index.ts} +155 -121
  193. package/util/gl-util/buffer/{attribute-loader.js → attribute-loader.ts} +84 -62
  194. package/util/gl-util/buffer/{index.js → index.ts} +6 -3
  195. package/util/gl-util/draw-options/{methods.js → methods.ts} +47 -32
  196. package/util/gl-util/uniform-block/{manager.js → manager.ts} +232 -190
  197. package/util/{webglobe/gldefaultstates.js → globe-default-gl-states.ts} +5 -4
  198. package/util/helper-methods.ts +9 -0
  199. package/util/index.js +9 -10
  200. package/util/interpolation/index.js +0 -1
  201. package/util/interpolation/timetrack/index.js +9 -2
  202. package/util/interpolation/timetrack/timetrack-interpolator.js +94 -79
  203. package/util/interpolation/timetrack/web-worker.js +51 -46
  204. package/util/picking/{fence.js → fence.ts} +47 -41
  205. package/util/picking/picker-displayer.ts +226 -0
  206. package/util/programs/draw-from-pixel-coords.js +201 -164
  207. package/util/programs/{draw-texture-on-canvas.js → draw-texture-on-canvas.ts} +92 -67
  208. package/util/programs/supersampletotextures.js +130 -97
  209. package/util/programs/texturetoglobe.js +153 -128
  210. package/util/shaderfunctions/{geometrytransformations.js → geometrytransformations.ts} +169 -41
  211. package/util/shaderfunctions/index.js +2 -2
  212. package/util/shaderfunctions/nodata.js +4 -2
  213. package/util/shaderfunctions/noisefunctions.js +10 -7
  214. package/util/{webglobjectbuilders.js → webglobjectbuilders.ts} +446 -358
  215. package/vectorfield/arrowfield/adaptor.js +11 -11
  216. package/vectorfield/arrowfield/index.js +3 -3
  217. package/vectorfield/arrowfield/plugin.js +128 -83
  218. package/vectorfield/waveparticles/adaptor.js +16 -15
  219. package/vectorfield/waveparticles/index.js +3 -3
  220. package/vectorfield/waveparticles/plugin.ts +506 -0
  221. package/vectorfield/wind/adapters/image-to-fields.ts +74 -0
  222. package/vectorfield/wind/adapters/types.ts +12 -0
  223. package/vectorfield/wind/{imagetovectorfieldandmagnitude.js → imagetovectorfieldandmagnitude.ts} +78 -56
  224. package/vectorfield/wind/index.js +5 -5
  225. package/vectorfield/wind/plugin-persistant copy.ts +461 -0
  226. package/vectorfield/wind/plugin-persistant.ts +483 -0
  227. package/vectorfield/wind/plugin.js +883 -671
  228. package/vectorfield/wind/vectorfieldimage.js +27 -23
  229. package/write-text/{context-text-bulk.js → context-text-bulk.ts} +285 -200
  230. package/write-text/context-text3.ts +252 -0
  231. package/write-text/{context-text4.js → context-text4.ts} +231 -145
  232. package/write-text/context-textDELETE.js +125 -94
  233. package/write-text/objectarraylabels/{index.js → index.ts} +2 -2
  234. package/write-text/objectarraylabels/objectarraylabels.d.ts +72 -0
  235. package/write-text/objectarraylabels/objectarraylabels.js +247 -200
  236. package/Math/matrix4.js +0 -1
  237. package/Math/tessellation/earcut/adapters.js +0 -37
  238. package/Math/tessellation/hybrid-triangle-tessellation-meta.js +0 -123
  239. package/Math/tessellation/methods.js +0 -46
  240. package/Math/tessellation/shred-input.js +0 -18
  241. package/Math/tessellation/tile-merger.js +0 -56
  242. package/Math/tessellation/tiler.js +0 -50
  243. package/Math/tessellation/triangle-tessellation-meta.js +0 -516
  244. package/Math/tessellation/triangle-tessellation.js +0 -14
  245. package/Math/tessellation/types.js +0 -1
  246. package/Math/tessellation/zoom-catch.js +0 -1
  247. package/Math/types.js +0 -1
  248. package/programs/line-on-globe/linestrip/data.js +0 -4
  249. package/programs/polygon-on-globe/partial-tesselation.js +0 -1
  250. package/programs/polygon-on-globe/texture-dem-triangle-test-plugin-triangle.js +0 -204
  251. package/programs/polygon-on-globe/texture-dem-triangle-test-plugin.js +0 -118
  252. package/programs/polygon-on-globe/texture-dem-triangles.js +0 -236
  253. package/programs/vectorfields/logics/drawrectangleparticles.js +0 -112
  254. package/programs/vectorfields/logics/ubo-new.js +0 -25
  255. package/range-tools-on-terrain/bearing-line/types.js +0 -1
  256. package/range-tools-on-terrain/circle-line-chain/types.js +0 -1
  257. package/range-tools-on-terrain/range-ring/rangeringangletext.js +0 -331
  258. package/range-tools-on-terrain/range-ring/types.js +0 -9
  259. package/semiplugins/interface.js +0 -1
  260. package/semiplugins/shape-on-terrain/terrain-cover/texture-dem-cover.js +0 -1
  261. package/semiplugins/shell/bbox-renderer/index.js +0 -2
  262. package/semiplugins/shell/bbox-renderer/object.js +0 -65
  263. package/semiplugins/type.js +0 -1
  264. package/types.js +0 -19
  265. package/util/account/create-buffermap-orchastration.js +0 -39
  266. package/util/account/single-attribute-buffer-management/types.js +0 -1
  267. package/util/check/typecheck.js +0 -66
  268. package/util/gl-util/uniform-block/types.js +0 -1
  269. package/util/picking/picker-displayer.js +0 -134
  270. package/util/webglobe/index.js +0 -2
  271. package/util/webglobe/rasteroverlay.js +0 -76
  272. package/vectorfield/waveparticles/plugin.js +0 -290
  273. package/write-text/attached-text-writer.js +0 -95
  274. package/write-text/context-text3.js +0 -167
@@ -1,30 +1,72 @@
1
- import { createProgram } from "../../../util/webglobjectbuilders";
2
- import { CameraUniformBlockTotem, CameraUniformBlockString } from "../../totems/index";
3
- import { noRegisterGlobeProgramCache, globeProgramCache } from "../../programcache";
4
- import { attributeLoader } from "../../../util/gl-util/buffer/attribute-loader";
5
- import { UniformBlockManager } from "../../../util/gl-util/uniform-block/manager";
6
- import { POLE, PI, longLatRadToMercator, mercatorXYToGLPosition, longLatRadToCartesian3D, circleLimpFromLongLatRadCenterCartesian3D_accurate, circleLimpFromLongLatRadCenterMercatorCompass_accurate,
7
- //circleLimpFromLongLatRadCenterMercatorRealDistanceNew_accurate,
8
- cartesian3DToGLPosition } from "../../../util/shaderfunctions/geometrytransformations";
9
- /**
10
- * TODO:
11
- * 1. Triangle face looks at screen. if rotation angle is positive the last vertex must be the faintest.
12
- *
13
- */
14
- const uniformBindingPoints = {
15
- camera: 0,
16
- flexible: 1,
17
- };
18
- const flexibleBlockManager = new UniformBlockManager('FlexibleAttributes', [
19
- { name: "u_color", type: "vec4", value: new Float32Array([0.12, 1, 0.1, 1]) },
20
- { name: "u_opacity", type: "float", value: new Float32Array([1]) },
21
- ], uniformBindingPoints.flexible);
22
- const drawModeMap = Object.freeze({
23
- LINE_STRIP: 0,
24
- TRIANGLE_FAN: 1,
25
- });
26
- //${ circleLimpFromLongLatRadCenterMercatorRealDistanceNew_accurate }
27
- const vertexShaderSource = `#version 300 es
1
+ import { createProgram } from "../../../util/webglobjectbuilders";
2
+ import { CameraUniformBlockTotem, CameraUniformBlockString } from "../../totems/index";
3
+ import { noRegisterGlobeProgramCache, globeProgramCache } from "../../programcache";
4
+ import { attributeLoader } from "../../../util/gl-util/buffer/attribute-loader";
5
+ import { UniformBlockManager } from "../../../util/gl-util/uniform-block/manager";
6
+ import { Globe, } from "../../../types";
7
+ import { UBOHandler } from "../../../types";
8
+
9
+ import {
10
+ POLE,
11
+ PI,
12
+ longLatRadToMercator,
13
+ mercatorXYToGLPosition,
14
+ longLatRadToCartesian3D,
15
+ circleLimpFromLongLatRadCenterCartesian3D_accurate,
16
+ circleLimpFromLongLatRadCenterMercatorCompass_accurate,
17
+ //circleLimpFromLongLatRadCenterMercatorRealDistanceNew_accurate,
18
+ cartesian3DToGLPosition
19
+ } from "../../../util/shaderfunctions/geometrytransformations";
20
+
21
+
22
+ export type BufferObject = {
23
+ buffer: WebGLBuffer;
24
+ stride: number;
25
+ offset: number;
26
+ }
27
+
28
+ export type DrawMode = 'LINE_STRIP' | 'TRIANGLE_FAN';
29
+
30
+ // interface DrawModeMap {
31
+ // readonly LINE_STRIP: 0;
32
+ // readonly TRIANGLE_FAN: 1;
33
+ // }
34
+
35
+ interface ProgramCache {
36
+ get: (globe: Globe) => Logic;
37
+ release: (globe: Globe) => void;
38
+ }
39
+
40
+ /**
41
+ * TODO:
42
+ * 1. Triangle face looks at screen. if rotation angle is positive the last vertex must be the faintest.
43
+ *
44
+ */
45
+
46
+ const uniformBindingPoints = {
47
+ camera: 0,
48
+ flexible: 1,
49
+ };
50
+
51
+ const flexibleBlockManager = new UniformBlockManager(
52
+ 'FlexibleAttributes',
53
+ [
54
+ { name: "u_color", type: "vec4", value: new Float32Array([0.12, 1, 0.1, 1]) },
55
+ { name: "u_opacity", type: "float", value: new Float32Array([1]) },
56
+
57
+ ],
58
+ uniformBindingPoints.flexible,
59
+ );
60
+
61
+
62
+ const drawModeMap = Object.freeze({
63
+ LINE_STRIP: 0,
64
+ TRIANGLE_FAN: 1,
65
+ });
66
+
67
+ //${ circleLimpFromLongLatRadCenterMercatorRealDistanceNew_accurate }
68
+
69
+ const vertexShaderSource: string = `#version 300 es
28
70
 
29
71
  ${CameraUniformBlockString}
30
72
  ${PI}
@@ -114,8 +156,9 @@ void main() {
114
156
  }
115
157
 
116
158
  gl_PointSize = 10.0;
117
- }`;
118
- const fragmentShaderSource = `#version 300 es` + POLE + PI + `
159
+ }`;
160
+
161
+ const fragmentShaderSource: string = `#version 300 es` + POLE + PI + `
119
162
  precision highp float;
120
163
  in vec4 v_color;
121
164
  in vec2 v_pos;
@@ -124,126 +167,153 @@ void main() {
124
167
 
125
168
  if ( v_pos.x < -POLE || v_pos.x > POLE || v_pos.y < -POLE || v_pos.y > POLE ) { discard; }
126
169
  outColor = v_color;
127
- }`;
128
- export const ITEM_SIZE = 10;
129
- export class Logic {
130
- globe;
131
- gl;
132
- _lastMode;
133
- _lastEdgeCount;
134
- _lastAlphaMultiplier;
135
- program;
136
- _edgeCountLocation;
137
- _draw_modeLocation;
138
- cameraBlockBindingPoint;
139
- cameraBlockTotem; // Type this based on your CameraUniformBlockTotem implementation
140
- _ubosPublished = [];
141
- _defaultFlexibleUBO;
142
- constructor(globe) {
143
- this.globe = globe;
144
- this.gl = globe.gl;
145
- this._lastMode = 0;
146
- this._lastEdgeCount = 64;
147
- this._lastAlphaMultiplier = 1.0;
148
- this.program = createProgram(this.gl, vertexShaderSource, fragmentShaderSource);
149
- const { gl, program } = this;
150
- // set attributes locations
151
- gl.bindAttribLocation(program, 0, 'center2d');
152
- gl.bindAttribLocation(program, 1, 'center3d');
153
- gl.bindAttribLocation(program, 2, 'start_angle2d');
154
- gl.bindAttribLocation(program, 3, 'tail_angle2d');
155
- gl.bindAttribLocation(program, 4, 'start_angle3d');
156
- gl.bindAttribLocation(program, 5, 'tail_angle3d');
157
- gl.bindAttribLocation(program, 6, 'color');
158
- gl.bindAttribLocation(program, 7, 'radius');
159
- gl.bindAttribLocation(program, 8, 'filling_mode');
160
- // vao
161
- // instanced draw read 1
162
- // Uniforms
163
- this._edgeCountLocation = gl.getUniformLocation(program, 'edge_count');
164
- this._draw_modeLocation = gl.getUniformLocation(program, 'draw_mode');
165
- const currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);
166
- gl.useProgram(program);
167
- gl.uniform1i(this._draw_modeLocation, this._lastMode);
168
- gl.uniform1f(this._edgeCountLocation, this._lastEdgeCount);
169
- this.cameraBlockBindingPoint = 0;
170
- this.cameraBlockTotem = globeProgramCache.getProgram(globe, CameraUniformBlockTotem);
171
- const cameraBlockIndex = gl.getUniformBlockIndex(program, "CameraUniformBlock");
172
- gl.uniformBlockBinding(program, cameraBlockIndex, this.cameraBlockBindingPoint);
173
- flexibleBlockManager.assignBindingPoint(gl, program);
174
- this._defaultFlexibleUBO = flexibleBlockManager.createUBO(gl);
175
- gl.useProgram(currentProgram);
176
- }
177
- draw(length, vao, edgeCount, drawMode, ubo = null) {
178
- const { gl, program, cameraBlockTotem, cameraBlockBindingPoint } = this;
179
- gl.useProgram(program);
180
- if (drawModeMap[drawMode] !== this._lastMode) {
181
- gl.uniform1i(this._draw_modeLocation, drawModeMap[drawMode]);
182
- this._lastMode = drawModeMap[drawMode];
183
- }
184
- if (edgeCount !== this._lastEdgeCount) {
185
- gl.uniform1f(this._edgeCountLocation, edgeCount);
186
- this._lastEdgeCount = edgeCount;
187
- }
188
- if (ubo) {
189
- ubo.bind();
190
- }
191
- else {
192
- this._defaultFlexibleUBO.bind();
193
- }
194
- const overdraw = drawModeMap[drawMode];
195
- cameraBlockTotem.bind(cameraBlockBindingPoint);
196
- gl.bindVertexArray(vao);
197
- gl.drawArraysInstanced(gl[drawMode], 0, edgeCount + overdraw, length);
198
- cameraBlockTotem.unbind(cameraBlockBindingPoint);
199
- gl.bindVertexArray(null);
200
- if (ubo) {
201
- ubo.unbind();
202
- }
203
- else {
204
- this._defaultFlexibleUBO.unbind();
205
- }
206
- }
207
- free() {
208
- noRegisterGlobeProgramCache.releaseProgram(this.globe, CameraUniformBlockTotem);
209
- this.gl.deleteProgram(this.program);
210
- this._defaultFlexibleUBO.free();
211
- this._ubosPublished.forEach(ubo => ubo.free()); // TODO: can be called 2 times. is it a problem?
212
- this.program = null;
213
- }
214
- /**
215
- * in vec2 center; // long, lat in radian
216
- in float start_angle; // the start of partial circle from bearing point
217
- in float tail_angle; // the rotation of the partial circle
218
- in vec4 color;
219
- in float radius; // in meter
220
- in float filling_mode; // 0.0: constant, 1.0: fading, 2.0: hide
221
- */
222
- createVAO(center2dObj, center3dObj, startAngle2DObj, tailAngle2DObj, startAngle3DObj, tailAngle3DObj, colorObj, radiusObj, colorModeObj) {
223
- const { gl } = this;
224
- const vao = gl.createVertexArray();
225
- gl.bindVertexArray(vao);
226
- attributeLoader(gl, center2dObj, 0, 2, { divisor: 1 });
227
- attributeLoader(gl, center3dObj, 1, 3, { divisor: 1 });
228
- attributeLoader(gl, startAngle2DObj, 2, 1, { divisor: 1 });
229
- attributeLoader(gl, tailAngle2DObj, 3, 1, { divisor: 1 });
230
- attributeLoader(gl, startAngle3DObj, 4, 1, { divisor: 1 });
231
- attributeLoader(gl, tailAngle3DObj, 5, 1, { divisor: 1 });
232
- attributeLoader(gl, colorObj, 6, 4, { divisor: 1, escapeValues: [-1.0, -1.0, -1.0, -1.0] });
233
- attributeLoader(gl, radiusObj, 7, 1, { divisor: 1, escapeValues: [-1.0] });
234
- attributeLoader(gl, colorModeObj, 8, 1, { divisor: 1, escapeValues: [-1.0] });
235
- gl.bindVertexArray(null);
236
- gl.bindBuffer(gl.ARRAY_BUFFER, null);
237
- return vao;
238
- }
239
- createUBO() {
240
- const { gl } = this;
241
- const ubo = flexibleBlockManager.createUBO(gl, "STATIC_DRAW");
242
- this._ubosPublished.push(ubo);
243
- return ubo;
244
- }
245
- }
246
- export const PieceOfPieProgramCache = Object.freeze({
247
- get: (globe) => noRegisterGlobeProgramCache.getProgram(globe, Logic),
248
- release: (globe) => noRegisterGlobeProgramCache.releaseProgram(globe, Logic)
249
- });
170
+ }`;
171
+
172
+ export const ITEM_SIZE: number = 10;
173
+
174
+ export class Logic {
175
+ private globe: Globe;
176
+ private gl: WebGL2RenderingContext;
177
+ private _lastMode: number;
178
+ private _lastEdgeCount: number;
179
+ private _lastAlphaMultiplier: number;
180
+ private program: WebGLProgram;
181
+ private _edgeCountLocation: WebGLUniformLocation | null;
182
+ private _draw_modeLocation: WebGLUniformLocation | null;
183
+ private cameraBlockBindingPoint: number;
184
+ private cameraBlockTotem: any; // Type this based on your CameraUniformBlockTotem implementation
185
+ private _ubosPublished: UBOHandler[] = [];
186
+ private _defaultFlexibleUBO: UBOHandler;
187
+ constructor(globe: Globe) {
188
+ this.globe = globe;
189
+ this.gl = globe.gl;
190
+ this._lastMode = 0;
191
+ this._lastEdgeCount = 64;
192
+ this._lastAlphaMultiplier = 1.0;
193
+
194
+ this.program = createProgram(this.gl, vertexShaderSource, fragmentShaderSource);
195
+ const { gl, program } = this;
196
+ // set attributes locations
197
+ gl.bindAttribLocation(program, 0, 'center2d');
198
+ gl.bindAttribLocation(program, 1, 'center3d')
199
+ gl.bindAttribLocation(program, 2, 'start_angle2d');
200
+ gl.bindAttribLocation(program, 3, 'tail_angle2d');
201
+ gl.bindAttribLocation(program, 4, 'start_angle3d');
202
+ gl.bindAttribLocation(program, 5, 'tail_angle3d');
203
+ gl.bindAttribLocation(program, 6, 'color');
204
+ gl.bindAttribLocation(program, 7, 'radius');
205
+ gl.bindAttribLocation(program, 8, 'filling_mode');
206
+ // vao
207
+ // instanced draw read 1
208
+ // Uniforms
209
+ this._edgeCountLocation = gl.getUniformLocation(program, 'edge_count');
210
+ this._draw_modeLocation = gl.getUniformLocation(program, 'draw_mode');
211
+ const currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);
212
+ gl.useProgram(program);
213
+ gl.uniform1i(this._draw_modeLocation!, this._lastMode);
214
+ gl.uniform1f(this._edgeCountLocation!, this._lastEdgeCount);
215
+
216
+ this.cameraBlockBindingPoint = 0;
217
+ this.cameraBlockTotem = globeProgramCache.getProgram(globe, CameraUniformBlockTotem);
218
+ const cameraBlockIndex = gl.getUniformBlockIndex(program, "CameraUniformBlock");
219
+ gl.uniformBlockBinding(program, cameraBlockIndex, this.cameraBlockBindingPoint);
220
+
221
+ flexibleBlockManager.assignBindingPoint(gl, program);
222
+ this._defaultFlexibleUBO = flexibleBlockManager.createUBO(gl);
223
+ gl.useProgram(currentProgram);
224
+ }
225
+
226
+ draw(
227
+ length: number,
228
+ vao: WebGLVertexArrayObject,
229
+ edgeCount: number,
230
+ drawMode: DrawMode,
231
+ ubo: UBOHandler | null = null): void {
232
+ const { gl, program, cameraBlockTotem, cameraBlockBindingPoint } = this;
233
+
234
+ gl.useProgram(program);
235
+ if (drawModeMap[drawMode] !== this._lastMode) {
236
+ gl.uniform1i(this._draw_modeLocation!, drawModeMap[drawMode]);
237
+ this._lastMode = drawModeMap[drawMode];
238
+ }
239
+ if (edgeCount !== this._lastEdgeCount) {
240
+ gl.uniform1f(this._edgeCountLocation!, edgeCount);
241
+ this._lastEdgeCount = edgeCount;
242
+ }
243
+
244
+ if (ubo) {
245
+ ubo.bind();
246
+ } else {
247
+ this._defaultFlexibleUBO.bind();
248
+ }
249
+ const overdraw = drawModeMap[drawMode];
250
+ cameraBlockTotem.bind(cameraBlockBindingPoint);
251
+ gl.bindVertexArray(vao);
252
+ gl.drawArraysInstanced(gl[drawMode], 0, edgeCount + overdraw, length);
253
+ cameraBlockTotem.unbind(cameraBlockBindingPoint);
254
+ gl.bindVertexArray(null);
255
+ if (ubo) {
256
+ ubo.unbind();
257
+ } else {
258
+ this._defaultFlexibleUBO.unbind();
259
+ }
260
+ }
261
+
262
+ free(): void {
263
+ noRegisterGlobeProgramCache.releaseProgram(this.globe, CameraUniformBlockTotem);
264
+ this.gl.deleteProgram(this.program);
265
+ this._defaultFlexibleUBO.free();
266
+ this._ubosPublished.forEach(ubo => ubo.free()); // TODO: can be called 2 times. is it a problem?
267
+ this.program = null!;
268
+ }
269
+
270
+ /**
271
+ * in vec2 center; // long, lat in radian
272
+ in float start_angle; // the start of partial circle from bearing point
273
+ in float tail_angle; // the rotation of the partial circle
274
+ in vec4 color;
275
+ in float radius; // in meter
276
+ in float filling_mode; // 0.0: constant, 1.0: fading, 2.0: hide
277
+ */
278
+
279
+ createVAO(
280
+ center2dObj: BufferObject,
281
+ center3dObj: BufferObject,
282
+ startAngle2DObj: BufferObject,
283
+ tailAngle2DObj: BufferObject,
284
+ startAngle3DObj: BufferObject,
285
+ tailAngle3DObj: BufferObject,
286
+ colorObj: BufferObject,
287
+ radiusObj: BufferObject,
288
+ colorModeObj: BufferObject
289
+ ): WebGLVertexArrayObject {
290
+ const { gl } = this;
291
+ const vao = gl.createVertexArray()!;
292
+ gl.bindVertexArray(vao);
293
+ attributeLoader(gl, center2dObj, 0, 2, { divisor: 1 });
294
+ attributeLoader(gl, center3dObj, 1, 3, { divisor: 1 });
295
+ attributeLoader(gl, startAngle2DObj, 2, 1, { divisor: 1 });
296
+ attributeLoader(gl, tailAngle2DObj, 3, 1, { divisor: 1 });
297
+ attributeLoader(gl, startAngle3DObj, 4, 1, { divisor: 1 });
298
+ attributeLoader(gl, tailAngle3DObj, 5, 1, { divisor: 1 });
299
+ attributeLoader(gl, colorObj, 6, 4, { divisor: 1, escapeValues: [-1.0, -1.0, -1.0, -1.0] });
300
+ attributeLoader(gl, radiusObj, 7, 1, { divisor: 1, escapeValues: [-1.0] });
301
+ attributeLoader(gl, colorModeObj, 8, 1, { divisor: 1, escapeValues: [-1.0] });
302
+ gl.bindVertexArray(null);
303
+ gl.bindBuffer(gl.ARRAY_BUFFER, null);
304
+ return vao;
305
+ }
306
+
307
+
308
+ createUBO() {
309
+ const { gl } = this;
310
+ const ubo = flexibleBlockManager.createUBO(gl, "STATIC_DRAW");
311
+ this._ubosPublished.push(ubo);
312
+ return ubo;
313
+ }
314
+ }
315
+
316
+ export const PieceOfPieProgramCache: ProgramCache = Object.freeze({
317
+ get: (globe: Globe): Logic => noRegisterGlobeProgramCache.getProgram(globe, Logic),
318
+ release: (globe: Globe): void => noRegisterGlobeProgramCache.releaseProgram(globe, Logic)
319
+ });
@@ -0,0 +1,4 @@
1
+ export interface CameraTotemAttachmentInterface {
2
+ update(): void; // CameraTotem calls this on draw3D method
3
+ free(): void
4
+ }