@pirireis/webglobeplugins 1.0.3 → 1.0.5

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 (210) hide show
  1. package/package.json +2 -2
  2. package/plugins/alarms/alarmFadeInFadeOutPlugin/AlarmTimeLineFadeInFadeOutPlugin.js +399 -0
  3. package/{Math → webglobeplugins/Math}/tessellation/triangle-tessellation.js +82 -4
  4. package/{heatwave → webglobeplugins/heatwave}/isobar.js +3 -0
  5. package/{programs → webglobeplugins/programs}/polygon-on-globe/texture-dem-triangles.js +17 -4
  6. package/webglobeplugins/programs/totems/attachments/adaptive-opacity.js +131 -0
  7. package/{programs/totems → webglobeplugins/programs/totems/attachments}/dem-textures-manager.js +11 -5
  8. package/{programs → webglobeplugins/programs}/vectorfields/logics/drawrectangleparticles.js +34 -28
  9. package/{programs → webglobeplugins/programs}/vectorfields/logics/particle-ubo.js +7 -4
  10. package/{programs → webglobeplugins/programs}/vectorfields/logics/pixelbased.js +3 -7
  11. package/{semiplugins → webglobeplugins/semiplugins}/shape-on-terrain/terrain-polygon/data/cache.js +10 -8
  12. package/{semiplugins → webglobeplugins/semiplugins}/shape-on-terrain/terrain-polygon/data/master-worker.js +104 -40
  13. package/webglobeplugins/semiplugins/shape-on-terrain/terrain-polygon/data/polygon-to-triangles.js +76 -0
  14. package/{semiplugins → webglobeplugins/semiplugins}/shape-on-terrain/terrain-polygon/data/worker-contact.js +3 -2
  15. package/webglobeplugins/semiplugins/shape-on-terrain/terrain-polygon/data/worker.js +162 -0
  16. package/{semiplugins → webglobeplugins/semiplugins}/shape-on-terrain/terrain-polygon/terrain-polygon.js +66 -3
  17. package/webglobeplugins/semiplugins/shape-on-terrain/terrain-polygon/test-records.js +14 -0
  18. package/{semiplugins → webglobeplugins/semiplugins}/shell/bbox-renderer/object.js +5 -2
  19. package/{tracks → webglobeplugins/tracks}/timetracks/program-line-strip.js +2 -0
  20. package/{util → webglobeplugins/util}/gl-util/buffer/attribute-loader.js +18 -6
  21. package/{util → webglobeplugins/util}/gl-util/uniform-block/manager.js +13 -4
  22. package/{vectorfield → webglobeplugins/vectorfield}/waveparticles/plugin.js +77 -37
  23. package/{vectorfield → webglobeplugins/vectorfield}/wind/adapters/image-to-fields.js +46 -15
  24. package/{vectorfield → webglobeplugins/vectorfield}/wind/plugin-persistant.js +32 -17
  25. package/{vectorfield → webglobeplugins/vectorfield}/wind/plugin.js +4 -4
  26. package/semiplugins/shape-on-terrain/terrain-polygon/data/polygon-to-triangles.js +0 -100
  27. package/semiplugins/shape-on-terrain/terrain-polygon/data/worker.js +0 -125
  28. package/vectorfield/wind/plugin-persistant copy.js +0 -364
  29. package/{Math → webglobeplugins/Math}/angle-calculation.js +0 -0
  30. package/{Math → webglobeplugins/Math}/arc-cdf-points.js +0 -0
  31. package/{Math → webglobeplugins/Math}/arc-generate-points-exponantial.js +0 -0
  32. package/{Math → webglobeplugins/Math}/arc.js +0 -0
  33. package/{Math → webglobeplugins/Math}/bounds/line-bbox.js +0 -0
  34. package/{Math → webglobeplugins/Math}/circle-cdf-points.js +0 -0
  35. package/{Math → webglobeplugins/Math}/circle.js +0 -0
  36. package/{Math → webglobeplugins/Math}/constants.js +0 -0
  37. package/{Math → webglobeplugins/Math}/contour/quadtreecontours.js +0 -0
  38. package/{Math → webglobeplugins/Math}/contour/quadtreecontours1.js +0 -0
  39. package/{Math → webglobeplugins/Math}/finite-line-2d.js +0 -0
  40. package/{Math → webglobeplugins/Math}/haversine.js +0 -0
  41. package/{Math → webglobeplugins/Math}/index.js +0 -0
  42. package/{Math → webglobeplugins/Math}/juction/arc-plane.js +0 -0
  43. package/{Math → webglobeplugins/Math}/juction/line-sphere.js +0 -0
  44. package/{Math → webglobeplugins/Math}/juction/plane-plane.js +0 -0
  45. package/{Math → webglobeplugins/Math}/line.js +0 -0
  46. package/{Math → webglobeplugins/Math}/matrix4.js +0 -0
  47. package/{Math → webglobeplugins/Math}/methods.js +0 -0
  48. package/{Math → webglobeplugins/Math}/plane.js +0 -0
  49. package/{Math → webglobeplugins/Math}/quaternion.js +0 -0
  50. package/{Math → webglobeplugins/Math}/templete-shapes/grid-visually-equal.js +0 -0
  51. package/{Math → webglobeplugins/Math}/tessellation/constants.js +0 -0
  52. package/{Math → webglobeplugins/Math}/tessellation/methods.js +0 -0
  53. package/{Math → webglobeplugins/Math}/tessellation/nearest-value-padding.js +0 -0
  54. package/{Math → webglobeplugins/Math}/tessellation/spherical-triangle-area.js +0 -0
  55. package/{Math → webglobeplugins/Math}/tessellation/tile-merger.js +0 -0
  56. package/{Math → webglobeplugins/Math}/tessellation/types.js +0 -0
  57. package/{Math → webglobeplugins/Math}/types.js +0 -0
  58. package/{Math → webglobeplugins/Math}/utils.js +0 -0
  59. package/{Math → webglobeplugins/Math}/vec3.js +0 -0
  60. package/{Math → webglobeplugins/Math}/xyz-tile.js +0 -0
  61. package/{algorithms → webglobeplugins/algorithms}/search-binary.js +0 -0
  62. package/{altitude-locator → webglobeplugins/altitude-locator}/adaptors.js +0 -0
  63. package/{altitude-locator → webglobeplugins/altitude-locator}/keymethod.js +0 -0
  64. package/{altitude-locator → webglobeplugins/altitude-locator}/plugin.js +0 -0
  65. package/{altitude-locator → webglobeplugins/altitude-locator}/types.js +0 -0
  66. package/{compass-rose → webglobeplugins/compass-rose}/compass-rose-padding-flat.js +0 -0
  67. package/{compass-rose → webglobeplugins/compass-rose}/compass-text-writer.js +0 -0
  68. package/{compass-rose → webglobeplugins/compass-rose}/index.js +0 -0
  69. package/{constants.js → webglobeplugins/constants.js} +0 -0
  70. package/{heatwave → webglobeplugins/heatwave}/datamanager.js +0 -0
  71. package/{heatwave → webglobeplugins/heatwave}/heatwave.js +0 -0
  72. package/{heatwave → webglobeplugins/heatwave}/index.js +0 -0
  73. package/{heatwave → webglobeplugins/heatwave}/texture-point-sampler.js +0 -0
  74. package/{investigation-tools → webglobeplugins/investigation-tools}/draw/tiles/adapters.js +0 -0
  75. package/{investigation-tools → webglobeplugins/investigation-tools}/draw/tiles/tiles.js +0 -0
  76. package/{jest.config.js → webglobeplugins/jest.config.js} +0 -0
  77. package/{pin → webglobeplugins/pin}/pin-object-array1.js +0 -0
  78. package/{pin → webglobeplugins/pin}/pin-point-totem1.js +0 -0
  79. package/{programs → webglobeplugins/programs}/arrowfield/arrow-field.js +0 -0
  80. package/{programs → webglobeplugins/programs}/arrowfield/logic.js +0 -0
  81. package/{programs → webglobeplugins/programs}/data2legend/density-to-legend.js +0 -0
  82. package/{programs → webglobeplugins/programs}/data2legend/point-to-density-texture.js +0 -0
  83. package/{programs → webglobeplugins/programs}/float2legendwithratio/index.js +0 -0
  84. package/{programs → webglobeplugins/programs}/float2legendwithratio/logic.js +0 -0
  85. package/{programs → webglobeplugins/programs}/float2legendwithratio/object.js +0 -0
  86. package/{programs → webglobeplugins/programs}/helpers/blender.js +0 -0
  87. package/{programs → webglobeplugins/programs}/helpers/fadeaway.js +0 -0
  88. package/{programs → webglobeplugins/programs}/index.js +0 -0
  89. package/{programs → webglobeplugins/programs}/line-on-globe/circle-accurate-3d.js +0 -0
  90. package/{programs → webglobeplugins/programs}/line-on-globe/circle-accurate-flat.js +0 -0
  91. package/{programs → webglobeplugins/programs}/line-on-globe/degree-padding-around-circle-3d.js +0 -0
  92. package/{programs → webglobeplugins/programs}/line-on-globe/index.js +0 -0
  93. package/{programs → webglobeplugins/programs}/line-on-globe/lines-color-instanced-flat.js +0 -0
  94. package/{programs → webglobeplugins/programs}/line-on-globe/linestrip/data.js +0 -0
  95. package/{programs → webglobeplugins/programs}/line-on-globe/linestrip/linestrip.js +0 -0
  96. package/{programs → webglobeplugins/programs}/line-on-globe/naive-accurate-flexible.js +0 -0
  97. package/{programs → webglobeplugins/programs}/line-on-globe/util.js +0 -0
  98. package/{programs → webglobeplugins/programs}/picking/pickable-polygon-renderer.js +0 -0
  99. package/{programs → webglobeplugins/programs}/picking/pickable-renderer.js +0 -0
  100. package/{programs → webglobeplugins/programs}/point-on-globe/element-globe-surface-glow.js +0 -0
  101. package/{programs → webglobeplugins/programs}/point-on-globe/element-point-glow.js +0 -0
  102. package/{programs → webglobeplugins/programs}/point-on-globe/square-pixel-point.js +0 -0
  103. package/{programs → webglobeplugins/programs}/programcache.js +0 -0
  104. package/{programs → webglobeplugins/programs}/rings/index.js +0 -0
  105. package/{programs → webglobeplugins/programs}/rings/partial-ring/piece-of-pie.js +0 -0
  106. package/{programs → webglobeplugins/programs}/totems/camera-totem-attactment-interface.js +0 -0
  107. package/{programs → webglobeplugins/programs}/totems/camerauniformblock.js +0 -0
  108. package/{programs → webglobeplugins/programs}/totems/canvas-webglobe-info.js +0 -0
  109. package/{programs → webglobeplugins/programs}/totems/globe-changes.js +0 -0
  110. package/{programs → webglobeplugins/programs}/totems/gpu-selection-uniform-block.js +0 -0
  111. package/{programs → webglobeplugins/programs}/totems/index.js +0 -0
  112. package/{programs → webglobeplugins/programs}/two-d/pixel-padding-for-compass.js +0 -0
  113. package/{programs → webglobeplugins/programs}/util.js +0 -0
  114. package/{programs → webglobeplugins/programs}/vectorfields/logics/constants.js +0 -0
  115. package/{programs → webglobeplugins/programs}/vectorfields/logics/index.js +0 -0
  116. package/{programs → webglobeplugins/programs}/vectorfields/logics/ubo.js +0 -0
  117. package/{programs → webglobeplugins/programs}/vectorfields/pingpongbuffermanager.js +0 -0
  118. package/{range-tools-on-terrain → webglobeplugins/range-tools-on-terrain}/bearing-line/adapters.js +0 -0
  119. package/{range-tools-on-terrain → webglobeplugins/range-tools-on-terrain}/bearing-line/plugin.js +1 -1
  120. /package/{range-tools-on-terrain → webglobeplugins/range-tools-on-terrain}/bearing-line/types.js +0 -0
  121. /package/{range-tools-on-terrain → webglobeplugins/range-tools-on-terrain}/circle-line-chain/adapters.js +0 -0
  122. /package/{range-tools-on-terrain → webglobeplugins/range-tools-on-terrain}/circle-line-chain/chain-list-map.js +0 -0
  123. /package/{range-tools-on-terrain → webglobeplugins/range-tools-on-terrain}/circle-line-chain/plugin.js +0 -0
  124. /package/{range-tools-on-terrain → webglobeplugins/range-tools-on-terrain}/circle-line-chain/types.js +0 -0
  125. /package/{range-tools-on-terrain → webglobeplugins/range-tools-on-terrain}/range-ring/adapters.js +0 -0
  126. /package/{range-tools-on-terrain → webglobeplugins/range-tools-on-terrain}/range-ring/enum.js +0 -0
  127. /package/{range-tools-on-terrain → webglobeplugins/range-tools-on-terrain}/range-ring/plugin.js +0 -0
  128. /package/{range-tools-on-terrain → webglobeplugins/range-tools-on-terrain}/range-ring/rangeringangletext.js +0 -0
  129. /package/{range-tools-on-terrain → webglobeplugins/range-tools-on-terrain}/range-ring/types.js +0 -0
  130. /package/{semiplugins → webglobeplugins/semiplugins}/interface.js +0 -0
  131. /package/{semiplugins → webglobeplugins/semiplugins}/lightweight/line-plugin.js +0 -0
  132. /package/{semiplugins → webglobeplugins/semiplugins}/lightweight/piece-of-pie-plugin.js +0 -0
  133. /package/{semiplugins → webglobeplugins/semiplugins}/shape-on-terrain/arc-plugin.js +0 -0
  134. /package/{semiplugins → webglobeplugins/semiplugins}/shape-on-terrain/circle-plugin.js +0 -0
  135. /package/{semiplugins → webglobeplugins/semiplugins}/shape-on-terrain/padding-1-degree.js +0 -0
  136. /package/{semiplugins → webglobeplugins/semiplugins}/shape-on-terrain/terrain-polygon/adapters.js +0 -0
  137. /package/{semiplugins → webglobeplugins/semiplugins}/shape-on-terrain/terrain-polygon/data/index-polygon-map.js +0 -0
  138. /package/{semiplugins → webglobeplugins/semiplugins}/shape-on-terrain/terrain-polygon/data/manager.js +0 -0
  139. /package/{semiplugins → webglobeplugins/semiplugins}/shape-on-terrain/terrain-polygon/data/random.js +0 -0
  140. /package/{semiplugins → webglobeplugins/semiplugins}/shape-on-terrain/terrain-polygon/data/types.js +0 -0
  141. /package/{semiplugins → webglobeplugins/semiplugins}/shape-on-terrain/terrain-polygon/types.js +0 -0
  142. /package/{semiplugins → webglobeplugins/semiplugins}/shell/bbox-renderer/index.js +0 -0
  143. /package/{semiplugins → webglobeplugins/semiplugins}/shell/bbox-renderer/logic.js +0 -0
  144. /package/{semiplugins → webglobeplugins/semiplugins}/type.js +0 -0
  145. /package/{semiplugins → webglobeplugins/semiplugins}/utility/container-plugin.js +0 -0
  146. /package/{semiplugins → webglobeplugins/semiplugins}/utility/object-pass-container-plugin.js +0 -0
  147. /package/{shaders → webglobeplugins/shaders}/fragment-toy/firework.js +0 -0
  148. /package/{shaders → webglobeplugins/shaders}/fragment-toy/singularity.js +0 -0
  149. /package/{tracks → webglobeplugins/tracks}/point-heat-map/adaptors/timetracksplugin-format-to-this.js +0 -0
  150. /package/{tracks → webglobeplugins/tracks}/point-heat-map/index.js +0 -0
  151. /package/{tracks → webglobeplugins/tracks}/point-heat-map/plugin-webworker.js +0 -0
  152. /package/{tracks → webglobeplugins/tracks}/point-heat-map/point-to-heat-map-flow.js +0 -0
  153. /package/{tracks → webglobeplugins/tracks}/point-tracks/key-methods.js +0 -0
  154. /package/{tracks → webglobeplugins/tracks}/point-tracks/plugin.js +0 -0
  155. /package/{tracks → webglobeplugins/tracks}/timetracks/adaptors-line-strip.js +0 -0
  156. /package/{tracks → webglobeplugins/tracks}/timetracks/plugin-line-strip.js +0 -0
  157. /package/{tracks → webglobeplugins/tracks}/timetracks/programpoint-line-strip.js +0 -0
  158. /package/{types.js → webglobeplugins/types.js} +0 -0
  159. /package/{util → webglobeplugins/util}/account/bufferoffsetmanager.js +0 -0
  160. /package/{util → webglobeplugins/util}/account/create-buffermap-orchastration.js +0 -0
  161. /package/{util → webglobeplugins/util}/account/index.js +0 -0
  162. /package/{util → webglobeplugins/util}/account/single-attribute-buffer-management/buffer-manager.js +0 -0
  163. /package/{util → webglobeplugins/util}/account/single-attribute-buffer-management/buffer-orchestrator.js +0 -0
  164. /package/{util → webglobeplugins/util}/account/single-attribute-buffer-management/buffer-orchestrator1.js +0 -0
  165. /package/{util → webglobeplugins/util}/account/single-attribute-buffer-management/index.js +0 -0
  166. /package/{util → webglobeplugins/util}/account/single-attribute-buffer-management/object-store.js +0 -0
  167. /package/{util → webglobeplugins/util}/account/single-attribute-buffer-management/types.js +0 -0
  168. /package/{util → webglobeplugins/util}/account/util.js +0 -0
  169. /package/{util → webglobeplugins/util}/algorithms/index.js +0 -0
  170. /package/{util → webglobeplugins/util}/algorithms/search-binary.js +0 -0
  171. /package/{util → webglobeplugins/util}/build-strategy/static-dynamic.js +0 -0
  172. /package/{util → webglobeplugins/util}/check/index.js +0 -0
  173. /package/{util → webglobeplugins/util}/check/typecheck.js +0 -0
  174. /package/{util → webglobeplugins/util}/frame-counter-trigger.js +0 -0
  175. /package/{util → webglobeplugins/util}/geometry/index.js +0 -0
  176. /package/{util → webglobeplugins/util}/gl-util/buffer/index.js +0 -0
  177. /package/{util → webglobeplugins/util}/gl-util/draw-options/methods.js +0 -0
  178. /package/{util → webglobeplugins/util}/globe-default-gl-states.js +0 -0
  179. /package/{util → webglobeplugins/util}/helper-methods.js +0 -0
  180. /package/{util → webglobeplugins/util}/index.js +0 -0
  181. /package/{util → webglobeplugins/util}/interpolation/index.js +0 -0
  182. /package/{util → webglobeplugins/util}/interpolation/timetrack/index.js +0 -0
  183. /package/{util → webglobeplugins/util}/interpolation/timetrack/timetrack-interpolator.js +0 -0
  184. /package/{util → webglobeplugins/util}/interpolation/timetrack/web-worker.js +0 -0
  185. /package/{util → webglobeplugins/util}/picking/fence.js +0 -0
  186. /package/{util → webglobeplugins/util}/picking/picker-displayer.js +0 -0
  187. /package/{util → webglobeplugins/util}/programs/draw-from-pixel-coords.js +0 -0
  188. /package/{util → webglobeplugins/util}/programs/draw-texture-on-canvas.js +0 -0
  189. /package/{util → webglobeplugins/util}/programs/supersampletotextures.js +0 -0
  190. /package/{util/programs/texturetoglobe.js → webglobeplugins/util/programs/texturetoglobe_delete.js} +0 -0
  191. /package/{util → webglobeplugins/util}/shaderfunctions/geometrytransformations.js +0 -0
  192. /package/{util → webglobeplugins/util}/shaderfunctions/index.js +0 -0
  193. /package/{util → webglobeplugins/util}/shaderfunctions/nodata.js +0 -0
  194. /package/{util → webglobeplugins/util}/shaderfunctions/noisefunctions.js +0 -0
  195. /package/{util → webglobeplugins/util}/webglobjectbuilders.js +0 -0
  196. /package/{vectorfield → webglobeplugins/vectorfield}/arrowfield/adaptor.js +0 -0
  197. /package/{vectorfield → webglobeplugins/vectorfield}/arrowfield/index.js +0 -0
  198. /package/{vectorfield → webglobeplugins/vectorfield}/arrowfield/plugin.js +0 -0
  199. /package/{vectorfield → webglobeplugins/vectorfield}/waveparticles/adaptor.js +0 -0
  200. /package/{vectorfield → webglobeplugins/vectorfield}/waveparticles/index.js +0 -0
  201. /package/{vectorfield → webglobeplugins/vectorfield}/wind/adapters/types.js +0 -0
  202. /package/{vectorfield → webglobeplugins/vectorfield}/wind/imagetovectorfieldandmagnitude.js +0 -0
  203. /package/{vectorfield → webglobeplugins/vectorfield}/wind/index.js +0 -0
  204. /package/{vectorfield → webglobeplugins/vectorfield}/wind/vectorfieldimage.js +0 -0
  205. /package/{write-text → webglobeplugins/write-text}/context-text-bulk.js +0 -0
  206. /package/{write-text → webglobeplugins/write-text}/context-text3.js +0 -0
  207. /package/{write-text → webglobeplugins/write-text}/context-text4.js +0 -0
  208. /package/{write-text → webglobeplugins/write-text}/context-textDELETE.js +0 -0
  209. /package/{write-text → webglobeplugins/write-text}/objectarraylabels/index.js +0 -0
  210. /package/{write-text → webglobeplugins/write-text}/objectarraylabels/objectarraylabels.js +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pirireis/webglobeplugins",
3
- "version": "1.0.3",
3
+ "version": "1.0.5",
4
4
  "main": "index.js",
5
5
  "author": "Toprak Nihat Deniz Ozturk",
6
6
  "license": "MIT",
@@ -13,6 +13,6 @@
13
13
  "rbush": "^4.0.1"
14
14
  },
15
15
  "peerDependencies": {
16
- "@pirireis/webglobe": "^6.2.22"
16
+ "@pirireis/webglobe": "6.2.51^"
17
17
  }
18
18
  }
@@ -0,0 +1,399 @@
1
+ /**
2
+ * Parametreler
3
+ * Toplam Animasyon suresi
4
+ * nokta konumu lat long
5
+ * nokta boyutu
6
+ * nokta rengi
7
+ * buyume kusulme olamlimi? Varsa fade in ile buyuyup, fade out ile kuculecek.
8
+ * fade in suresi
9
+ * fade out suresi
10
+ * */
11
+ /**
12
+ * TODO:
13
+ * AFAD verisini hizli yuklenmesi icin bir formata ceviren kod ekle
14
+ * CONTENT basligi altina veri cevirici ve webgl programini yaz
15
+ */
16
+ /**
17
+ * @typedef {Number[]} Color [r, g, b]
18
+ */
19
+ /**
20
+ * @typedef {Object} FadeAlarmPoint
21
+ * @property {number} long
22
+ * @property {number} lat
23
+ * @property {number} height
24
+ * @property {number} minSize
25
+ * @property {number} maxSize
26
+ * @property {Color} color
27
+ * @property {number} startTime
28
+ * @property {number} fadeInTime
29
+ * @property {number} fadeOutTime
30
+ * @property {number} minAlpha
31
+ * @property {number} maxAlpha
32
+ */
33
+ const floatCount = 13;
34
+ const TIME_STEP = 26;
35
+ export default class AlarmTimeLineFadeInFadeOut {
36
+ constructor(id) {
37
+ this.id = id;
38
+ this.pause();
39
+ this.globe = null;
40
+ this.gl = null;
41
+ this._buildLOD = 6;
42
+ this._lastLOD = 0;
43
+ this._shaderProgram = null;
44
+ this._animationDeltaTime = 0;
45
+ this._animationFullTimeLength = 50000.0;
46
+ this._continue = false;
47
+ this._speedMultiplier = 1.0;
48
+ // time relevant
49
+ this._tickTimerId = null;
50
+ // @type {FadeAlarmPoint[]}
51
+ this._dataArray = [];
52
+ this._translateFloat32Array = new Float32Array(3);
53
+ this._mixtureBuffer = null;
54
+ this._buildTimerId = null;
55
+ this._projectionFunction = null;
56
+ }
57
+ _vertexShaderSource = `
58
+ precision highp float;
59
+
60
+ attribute vec3 aVertexPosition;
61
+ attribute vec3 aVertexColor;
62
+ attribute float aMinSize;
63
+ attribute float aMaxSize;
64
+ attribute float aStartTime;
65
+ attribute float aFadeInTime;
66
+ attribute float aFadeOutTime;
67
+ attribute float aMinAlpha;
68
+ attribute float aMaxAlpha;
69
+
70
+ uniform bool u_is_flat;
71
+ uniform vec2 u_mapWH;
72
+ uniform vec2 u_scrWH;
73
+
74
+ varying vec3 vColor;
75
+ varying float vAlpha;
76
+
77
+ uniform float uDeltaTime;
78
+
79
+ uniform mat4 uModelViewMatrix;
80
+ uniform mat4 uProjectionMatrix;
81
+ uniform vec3 uTranslate;
82
+
83
+ void main(void) {
84
+ float time = uDeltaTime - aStartTime;
85
+
86
+ // exit case
87
+ if (time < 0.0 || (time > (aFadeInTime + aFadeOutTime)) ) {
88
+ gl_Position = vec4(-2.0, -2.0, 0.0, 1.0);
89
+ vColor = vec3(0.0, 0.0, 0.0);
90
+ vAlpha = 0.0;
91
+ return;
92
+ }
93
+ float ratio;
94
+ // fade in case
95
+ if (time < aFadeInTime) {
96
+ ratio = time / aFadeInTime;
97
+ }
98
+ // fade out case
99
+ if (time > aFadeInTime) {
100
+ ratio = 1.0 - ((time - aFadeInTime) / aFadeOutTime);
101
+ }
102
+ if(u_is_flat==true){
103
+ float normalizedX = ( aVertexPosition.x - uTranslate.x) / u_mapWH.x;
104
+ float normalizedY = ( aVertexPosition.y - uTranslate.y) / u_mapWH.y;
105
+ gl_Position = uProjectionMatrix * vec4(normalizedX * u_scrWH.x, (1.0 - normalizedY) * u_scrWH.y, 0.0, 1.0);
106
+ }else{
107
+ gl_Position = uProjectionMatrix * uModelViewMatrix * vec4(aVertexPosition - uTranslate, 1.0);
108
+ }
109
+ gl_PointSize = mix(aMinSize, aMaxSize, ratio);
110
+
111
+ vColor = aVertexColor;
112
+ vAlpha = mix(aMinAlpha, aMaxAlpha, ratio);
113
+ }
114
+ `;
115
+ _fragmentShaderSource = `
116
+ precision highp float;
117
+
118
+ varying vec3 vColor;
119
+ varying float vAlpha;
120
+
121
+ void main(void) {
122
+ // circle
123
+ vec2 cxy = 2.0 * gl_PointCoord - 1.0;
124
+ float r = dot(cxy, cxy);
125
+ if (r > 1.0) discard;
126
+ // square
127
+ // float t = abs(cxy.x) * abs(cxy.y);
128
+ // if (t > 0.1) discard;
129
+ if (vAlpha == 0.0) { discard;}
130
+ float alphaRatio = sqrt(1.0 - r) ;
131
+ gl_FragColor = vec4(vColor, vAlpha ) * alphaRatio;
132
+ }
133
+ `;
134
+ _createProgram() {
135
+ const { gl, _vertexShaderSource, _fragmentShaderSource } = this;
136
+ let vertexShader = gl.createShader(gl.VERTEX_SHADER);
137
+ gl.shaderSource(vertexShader, _vertexShaderSource);
138
+ gl.compileShader(vertexShader);
139
+ if (!gl.getShaderParameter(vertexShader, gl.COMPILE_STATUS)) {
140
+ alert("An error occurred compiling the vertex shader: " + gl.getShaderInfoLog(vertexShader));
141
+ return null;
142
+ }
143
+ let fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);
144
+ gl.shaderSource(fragmentShader, _fragmentShaderSource);
145
+ gl.compileShader(fragmentShader);
146
+ if (!gl.getShaderParameter(fragmentShader, gl.COMPILE_STATUS)) {
147
+ alert("An error occurred compiling the fragment shader: " + gl.getShaderInfoLog(fragmentShader));
148
+ return null;
149
+ }
150
+ this._shaderProgram = gl.createProgram();
151
+ gl.attachShader(this._shaderProgram, vertexShader);
152
+ gl.attachShader(this._shaderProgram, fragmentShader);
153
+ gl.linkProgram(this._shaderProgram);
154
+ if (!gl.getProgramParameter(this._shaderProgram, gl.LINK_STATUS)) {
155
+ alert("Could not initialise shaders");
156
+ console.log(gl.getProgramInfoLog(this._shaderProgram));
157
+ }
158
+ gl.detachShader(this._shaderProgram, vertexShader);
159
+ gl.detachShader(this._shaderProgram, fragmentShader);
160
+ gl.deleteShader(vertexShader);
161
+ gl.deleteShader(fragmentShader);
162
+ }
163
+ _assignProgramLocations() {
164
+ const { gl, _shaderProgram } = this;
165
+ this._aVertexPosition = gl.getAttribLocation(_shaderProgram, "aVertexPosition");
166
+ this._aVertexColor = gl.getAttribLocation(_shaderProgram, "aVertexColor");
167
+ this._aMinSize = gl.getAttribLocation(_shaderProgram, "aMinSize");
168
+ this._aMaxSize = gl.getAttribLocation(_shaderProgram, "aMaxSize");
169
+ this._aStartTime = gl.getAttribLocation(_shaderProgram, "aStartTime");
170
+ this._aFadeInTime = gl.getAttribLocation(_shaderProgram, "aFadeInTime");
171
+ this._aFadeOutTime = gl.getAttribLocation(_shaderProgram, "aFadeOutTime");
172
+ this._aMinAlpha = gl.getAttribLocation(_shaderProgram, "aMinAlpha");
173
+ this._aMaxAlpha = gl.getAttribLocation(_shaderProgram, "aMaxAlpha");
174
+ this._uDeltaTime = gl.getUniformLocation(_shaderProgram, "uDeltaTime");
175
+ this._uModelViewMatrix = gl.getUniformLocation(_shaderProgram, "uModelViewMatrix");
176
+ this._uProjectionMatrix = gl.getUniformLocation(_shaderProgram, "uProjectionMatrix");
177
+ this._uTranslate = gl.getUniformLocation(_shaderProgram, "uTranslate");
178
+ this._uMapWH = gl.getUniformLocation(_shaderProgram, "u_mapWH");
179
+ this._uScrWH = gl.getUniformLocation(_shaderProgram, "u_scrWH");
180
+ this._uIsFlat = gl.getUniformLocation(_shaderProgram, "u_is_flat");
181
+ }
182
+ // registry takes place here
183
+ init(globe, gl) {
184
+ console.log("init AlarmFadeInFadeOut");
185
+ this.globe = globe;
186
+ this.gl = gl;
187
+ this._mixtureBuffer = gl.createBuffer();
188
+ this.setGeometry();
189
+ this._createProgram();
190
+ this._assignProgramLocations();
191
+ this._startTickTimer();
192
+ this._resizeHandler = this._resizeEventHandler.bind(this);
193
+ window.addEventListener('resize', this._resizeHandler, true);
194
+ }
195
+ _resizeEventHandler() {
196
+ this._loadUniforms();
197
+ }
198
+ addPoint(long, lat, height, minSize, maxSize, color, startTime, fadeInTime, fadeOutTime, minAlpha, maxAlpha) {
199
+ // add point to the array
200
+ this._dataArray.push({
201
+ long,
202
+ lat,
203
+ height,
204
+ minSize,
205
+ maxSize,
206
+ color,
207
+ startTime,
208
+ fadeInTime,
209
+ fadeOutTime,
210
+ minAlpha,
211
+ maxAlpha
212
+ });
213
+ }
214
+ setAnimationFullTimeLength(time) {
215
+ this._animationFullTimeLength = time;
216
+ }
217
+ updateBuffer() {
218
+ if (this._dataArray.length === 0)
219
+ return;
220
+ this._build();
221
+ }
222
+ clearPoints() {
223
+ this._dataArray = [];
224
+ this._build();
225
+ }
226
+ setCurrentTimeByPercentage(percentage) {
227
+ const passingTime = this._animationFullTimeLength * (percentage % 100) / 100;
228
+ this._animationDeltaTime = passingTime;
229
+ }
230
+ setSpeedMultiplier(multiplier) {
231
+ this._speedMultiplier = multiplier;
232
+ }
233
+ continue() {
234
+ if (this._animationFullTimeLength == null)
235
+ throw new Error("Animation full time length is not set");
236
+ this._continue = true;
237
+ if (this._tickTimerId == null) {
238
+ this._startTickTimer();
239
+ }
240
+ console.log("continue");
241
+ }
242
+ isContinuing() {
243
+ return this._continue;
244
+ }
245
+ pause() {
246
+ this._continue = false;
247
+ if (this._tickTimerId != null) {
248
+ clearInterval(this._tickTimerId);
249
+ this._tickTimerId = null;
250
+ }
251
+ console.log("pause");
252
+ }
253
+ _tick() {
254
+ this._animationDeltaTime = (this._animationDeltaTime + TIME_STEP * this._speedMultiplier) % this._animationFullTimeLength;
255
+ }
256
+ _startTickTimer() {
257
+ this._tickTimerId = setInterval(() => {
258
+ if (this._continue)
259
+ this._tick();
260
+ }, TIME_STEP);
261
+ }
262
+ getPercentage() {
263
+ return this._animationDeltaTime / this._animationFullTimeLength;
264
+ }
265
+ // globe calls this function
266
+ draw3D(projMatrix, modelMatrix, transPos) {
267
+ // if (this._continue) this._tick();
268
+ this._draw(projMatrix, modelMatrix, transPos);
269
+ }
270
+ _draw(projMatrix, modelMatrix, transPos) {
271
+ if (this._dataArray.length === 0)
272
+ return;
273
+ const { gl, globe } = this;
274
+ if (globe == null) {
275
+ console.log("globe is null");
276
+ return;
277
+ }
278
+ const lastDepth = gl.getParameter(gl.DEPTH_TEST);
279
+ gl.disable(gl.DEPTH_TEST);
280
+ gl.enable(gl.BLEND);
281
+ gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
282
+ this._translateFloat32Array.set([transPos.x, transPos.y, transPos.z], 0);
283
+ gl.useProgram(this._shaderProgram);
284
+ gl.bindBuffer(gl.ARRAY_BUFFER, this._mixtureBuffer);
285
+ gl.enableVertexAttribArray(this._aVertexPosition); // devamli enable edilmesine gerek olmayabilir mi?
286
+ gl.vertexAttribPointer(this._aVertexPosition, 3, gl.FLOAT, false, floatCount * 4, 0);
287
+ gl.enableVertexAttribArray(this._aVertexColor);
288
+ gl.vertexAttribPointer(this._aVertexColor, 3, gl.FLOAT, false, floatCount * 4, 3 * 4);
289
+ gl.enableVertexAttribArray(this._aMinSize);
290
+ gl.vertexAttribPointer(this._aMinSize, 1, gl.FLOAT, false, floatCount * 4, 6 * 4);
291
+ gl.enableVertexAttribArray(this._aMaxSize);
292
+ gl.vertexAttribPointer(this._aMaxSize, 1, gl.FLOAT, false, floatCount * 4, 7 * 4);
293
+ gl.enableVertexAttribArray(this._aStartTime);
294
+ gl.vertexAttribPointer(this._aStartTime, 1, gl.FLOAT, false, floatCount * 4, 8 * 4);
295
+ gl.enableVertexAttribArray(this._aFadeInTime);
296
+ gl.vertexAttribPointer(this._aFadeInTime, 1, gl.FLOAT, false, floatCount * 4, 9 * 4);
297
+ gl.enableVertexAttribArray(this._aFadeOutTime);
298
+ gl.vertexAttribPointer(this._aFadeOutTime, 1, gl.FLOAT, false, floatCount * 4, 10 * 4);
299
+ gl.enableVertexAttribArray(this._aMinAlpha);
300
+ gl.vertexAttribPointer(this._aMinAlpha, 1, gl.FLOAT, false, floatCount * 4, 11 * 4);
301
+ gl.enableVertexAttribArray(this._aMaxAlpha);
302
+ gl.vertexAttribPointer(this._aMaxAlpha, 1, gl.FLOAT, false, floatCount * 4, 12 * 4);
303
+ gl.uniform1f(this._uDeltaTime, this._animationDeltaTime);
304
+ if (globe.api_GetCurrentGeometry() === globe.api_GeometryTypes().FLAT) {
305
+ const { width, height } = globe.api_GetCurrentWorldWH();
306
+ gl.uniform2f(this._uMapWH, width, height);
307
+ }
308
+ else {
309
+ gl.uniformMatrix4fv(this._uModelViewMatrix, false, modelMatrix);
310
+ }
311
+ gl.uniformMatrix4fv(this._uProjectionMatrix, false, projMatrix);
312
+ gl.uniform3fv(this._uTranslate, this._translateFloat32Array);
313
+ gl.drawArrays(gl.POINTS, 0, this._dataArray.length);
314
+ if (lastDepth) {
315
+ gl.enable(gl.DEPTH_TEST);
316
+ }
317
+ gl.disable(gl.BLEND);
318
+ globe.DrawRender();
319
+ }
320
+ _build() {
321
+ // build data and fill the buffer
322
+ const { gl, globe, _mixtureBuffer } = this;
323
+ if (globe == null || _mixtureBuffer == null) {
324
+ console.log("globe is null");
325
+ return;
326
+ }
327
+ const floatArray = new Float32Array(this._dataArray.length * floatCount);
328
+ for (let i = 0; i < this._dataArray.length; i += 1) {
329
+ const data = this._dataArray[i];
330
+ const { long, lat, height, minSize, maxSize, color, fadeInTime, fadeOutTime } = data;
331
+ const [x, y, z] = globe.api_Get3DPoint(long, lat, height, false);
332
+ const [r, g, b] = color;
333
+ const startTime = data.startTime;
334
+ const minAlpha = data.minAlpha;
335
+ const maxAlpha = data.maxAlpha;
336
+ floatArray.set([x, y, z, r, g, b, minSize, maxSize, startTime, fadeInTime, fadeOutTime, minAlpha, maxAlpha], i * floatCount);
337
+ }
338
+ console.log("floatArray", floatArray);
339
+ gl.bindBuffer(gl.ARRAY_BUFFER, _mixtureBuffer);
340
+ gl.bufferData(gl.ARRAY_BUFFER, floatArray, gl.STATIC_DRAW);
341
+ console.log("build");
342
+ if (this._buildTimerId == null) {
343
+ this._startBuildTimer();
344
+ }
345
+ }
346
+ _startBuildTimer() {
347
+ const { globe, _buildLOD } = this;
348
+ this._buildTimerId = setInterval(() => {
349
+ if (globe.api_GetCurrentGeometry() != globe.api_GeometryTypes().SPHERE)
350
+ return;
351
+ const LOD = globe.api_GetCurrentLOD();
352
+ if (!globe.api_IsScreenMoving() && LOD >= _buildLOD && LOD !== this._lastLOD) {
353
+ this._build();
354
+ this._lastLOD = LOD;
355
+ }
356
+ }, 1000);
357
+ console.log("startBuildTimer");
358
+ }
359
+ setGeometry() {
360
+ // arazi yuksekligine gore build tetikleyecek push mekanizmasi globeta yok
361
+ // timer start edilip durdurulacak
362
+ this._loadUniforms();
363
+ this.updateBuffer();
364
+ console.log("setGeometry");
365
+ }
366
+ _loadUniforms() {
367
+ const { gl, globe } = this;
368
+ const currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);
369
+ gl.useProgram(this._shaderProgram);
370
+ const geometry = globe.api_GetCurrentGeometry();
371
+ if (geometry === globe.api_GeometryTypes().SPHERE) {
372
+ gl.uniform1f(this._uIsFlat, false);
373
+ }
374
+ else if (geometry === globe.api_GeometryTypes().FLAT) {
375
+ gl.uniform1f(this._uIsFlat, true);
376
+ gl.uniform2f(this._uScrWH, globe.api_ScrW(), globe.api_ScrH());
377
+ }
378
+ else {
379
+ alert("Geometry is not supported");
380
+ }
381
+ gl.useProgram(currentProgram);
382
+ }
383
+ free() {
384
+ console.log("free AlarmFadeInFadeOut");
385
+ const { gl } = this;
386
+ this.globe = null;
387
+ this.gl = null;
388
+ this.draw3D = null;
389
+ this._build = null;
390
+ clearInterval(this._buildTimerId);
391
+ clearInterval(this._tickTimerId);
392
+ gl.disableVertexAttribArray(this._aVertexPosition);
393
+ // gl.deleteBuffer(this._mixtureBuffer);
394
+ // gl.deleteProgram(this._shaderProgram);
395
+ this._shaderProgram = null;
396
+ this._mixtureBuffer = null;
397
+ window.removeEventListener('resize', this._resizeHandler, true);
398
+ }
399
+ }
@@ -19,7 +19,7 @@ import { pointsOnArc } from "../juction/arc-plane";
19
19
  import { latToTileY, tileYtoLat } from "./methods";
20
20
  import Delaunator from "delaunator";
21
21
  import { radianToMercatorXY } from "../methods";
22
- const KEY_PRECISION = 9;
22
+ export const uint32Escape = 4294967295;
23
23
  // TODO:get rid of embedded lists. always flat list
24
24
  const TILE_DEM_VERTEX_COUNT = 5; // 5x5 grid for DEM
25
25
  const TILE_DEM_STEPCOUNT = TILE_DEM_VERTEX_COUNT - 1; // 4 inner divisions in each dimension
@@ -42,7 +42,16 @@ function radianCheck(point) {
42
42
  return point[0] >= -Math.PI && point[0] <= Math.PI && point[1] >= -Math.PI
43
43
  && point[1] <= Math.PI / 2 && point[1] >= -Math.PI / 2;
44
44
  }
45
- export function createTriangleTessellationMeta(p1, p2, p3) {
45
+ const _3RealEdges = new Uint32Array([uint32Escape, 0, 1, 2, 0]);
46
+ const _2RealEdges_dismiss2 = new Uint32Array([uint32Escape, 0, 1, 2]);
47
+ const _2RealEdges_dismiss1 = new Uint32Array([uint32Escape, 2, 0, 1]);
48
+ const _2RealEdges_dismiss0 = new Uint32Array([uint32Escape, 1, 2, 0]);
49
+ const _1realEdge_0 = new Uint32Array([uint32Escape, 0, 1]);
50
+ const _1realEdge_1 = new Uint32Array([uint32Escape, 1, 2]);
51
+ const _1realEdge_2 = new Uint32Array([uint32Escape, 2, 0]);
52
+ const _noRealEdges = null;
53
+ export function createTriangleTessellationMeta(p1, p2, p3, isRealp0p1 = false, isRealp1p2 = false, isRealp2p3 = false) {
54
+ // TODO: this might be a problem
46
55
  if (!radianCheck(p1) || !radianCheck(p2) || !radianCheck(p3)) {
47
56
  throw new Error('Points must be in radian range: ' +
48
57
  'p1:' + p1[0] + ',' + p1[1] +
@@ -55,6 +64,29 @@ export function createTriangleTessellationMeta(p1, p2, p3) {
55
64
  const arc1 = createArc(p1v3, p2v3);
56
65
  const arc2 = createArc(p2v3, p3v3);
57
66
  const arc3 = createArc(p3v3, p1v3);
67
+ arc1.realEdge = isRealp0p1;
68
+ arc2.realEdge = isRealp1p2;
69
+ arc3.realEdge = isRealp2p3;
70
+ const realEdgeArcIndices = (() => {
71
+ switch (true) {
72
+ case isRealp0p1 && isRealp1p2 && isRealp2p3:
73
+ return _3RealEdges;
74
+ case isRealp0p1 && isRealp1p2 && !isRealp2p3:
75
+ return _2RealEdges_dismiss2;
76
+ case isRealp1p2 && isRealp2p3 && !isRealp0p1:
77
+ return _2RealEdges_dismiss1;
78
+ case isRealp2p3 && isRealp0p1 && !isRealp1p2:
79
+ return _2RealEdges_dismiss0;
80
+ case isRealp0p1 && !isRealp1p2 && !isRealp2p3:
81
+ return _1realEdge_0;
82
+ case isRealp1p2 && !isRealp2p3 && !isRealp0p1:
83
+ return _1realEdge_1;
84
+ case isRealp2p3 && !isRealp0p1 && !isRealp1p2:
85
+ return _1realEdge_2;
86
+ default:
87
+ return _noRealEdges;
88
+ }
89
+ })();
58
90
  const limitVec = [0, 0, 0];
59
91
  if (calculateZLimitPoint(arc1, limitVec)) {
60
92
  arc1.exceededLimit = [limitVec[0], limitVec[1], limitVec[2]];
@@ -87,12 +119,15 @@ export function createTriangleTessellationMeta(p1, p2, p3) {
87
119
  const meta = {
88
120
  arcs: [arc1, arc2, arc3],
89
121
  bbox,
90
- showThreshold: calculateShowThreshold(arc1, arc2, arc3)
122
+ showThreshold: calculateShowThreshold(arc1, arc2, arc3),
91
123
  };
124
+ // @ts-ignore
92
125
  meta.shortCut = partialTessellation(meta, [{
93
126
  bbox: meta.bbox,
94
127
  zoom: 0
95
128
  }], TILE_DEM_STEPCOUNT);
129
+ meta.shortCut.realEdgeArcIndices = realEdgeArcIndices;
130
+ // arcShortCut
96
131
  return meta;
97
132
  }
98
133
  function calculateShowThreshold(arc1, arc2, arc3) {
@@ -221,7 +256,13 @@ function filterEdgePointTriangles(indeces, edgePointIndices) {
221
256
  }
222
257
  return new Uint32Array(result);
223
258
  }
224
- export function partialTessellation(triangleMeta, limits, innerCuts) {
259
+ // function createArcPointHarvestingMeta(): ArcPointHarvestingMeta {
260
+ // return {
261
+ // parallelCutIndices: [],
262
+ // meridianCutIndices: [],
263
+ // };
264
+ // }
265
+ export function partialTessellation(triangleMeta, limits, innerCuts, calculateRealEdgeArc = false) {
225
266
  // TODO: pointMap can be local variable and cleaned after function call to avoid reinitialization overhead
226
267
  const pointMap = new Map(); // Key: "lon|lat", Value: index
227
268
  const allVec3s = [];
@@ -367,6 +408,7 @@ export function partialTessellation(triangleMeta, limits, innerCuts) {
367
408
  vec3s: new Float32Array(),
368
409
  longLats: new Float32Array(),
369
410
  indices: new Uint32Array(),
411
+ realEdgeArcIndices: null,
370
412
  };
371
413
  }
372
414
  const delaunator = new Delaunator(allLongLats);
@@ -378,9 +420,45 @@ export function partialTessellation(triangleMeta, limits, innerCuts) {
378
420
  allLongLats[i * 2] = xy[0];
379
421
  allLongLats[i * 2 + 1] = xy[1];
380
422
  }
423
+ const realEdgeArcIndices = calculateRealEdgeArc ? orderIndcecesAlongArc(triangleMeta, edgePointIndexSets, allLongLats) : null;
381
424
  return {
382
425
  vec3s: new Float32Array(allVec3s),
383
426
  longLats: new Float32Array(allLongLats),
384
427
  indices: indices,
428
+ realEdgeArcIndices,
385
429
  };
386
430
  }
431
+ function orderIndcecesAlongArc(triangleMeta, edgePointIndexSets, allLongLats) {
432
+ let result = [];
433
+ let itemCounter = 0;
434
+ for (let i = 0; i < 3; i++) {
435
+ const arc = triangleMeta.arcs[i];
436
+ if (!arc.realEdge) {
437
+ continue;
438
+ }
439
+ // convert set to list
440
+ const indices = Array.from(edgePointIndexSets[i]);
441
+ if (indices.length == 0) {
442
+ continue;
443
+ }
444
+ const dimension = Math.abs(arc.normal[2]) < 0.0001 ? 0 : 1;
445
+ indices.sort((a, b) => {
446
+ return allLongLats[a * 2 + dimension] - allLongLats[b * 2 + dimension];
447
+ });
448
+ result.push(indices);
449
+ itemCounter += indices.length + 1;
450
+ }
451
+ if (result.length === 0) {
452
+ return null;
453
+ }
454
+ const finalResult = new Uint32Array(itemCounter);
455
+ let counter = 0;
456
+ for (let i = 0; i < result.length; i++) {
457
+ finalResult[counter++] = uint32Escape;
458
+ const indices = result[i];
459
+ for (let j = 0; j < indices.length; j++) {
460
+ finalResult[counter++] = indices[j];
461
+ }
462
+ }
463
+ return finalResult;
464
+ }
@@ -1,3 +1,6 @@
1
+ /**
2
+ * Author: Toprak Nihat Deniz Ozturk
3
+ */
1
4
  import { DrawFromPixelCoords, } from "../util/programs/draw-from-pixel-coords";
2
5
  import { latLongToPixelXY } from "../util/geometry/index";
3
6
  import ContourMipmap, { scaleParameters } from "../Math/contour/quadtreecontours";
@@ -1,6 +1,6 @@
1
1
  import { createProgram } from "../../util/webglobjectbuilders";
2
2
  import { CameraUniformBlockTotemCache, CameraUniformBlockString } from "../totems/camerauniformblock";
3
- import { DemTextureManagerCache, DEM_TEXTURE_BLOCK_STRING } from "../totems/dem-textures-manager";
3
+ import { DemTextureManagerCache, DEM_TEXTURE_BLOCK_STRING } from "../totems/attachments/dem-textures-manager";
4
4
  import { cartesian3DToGLPosition, mercatorXYToGLPosition, POLE_BY_PI } from "../../util/shaderfunctions/geometrytransformations";
5
5
  import { relativeBBoxPositionRadian } from "../../util/shaderfunctions/geometrytransformations";
6
6
  import { drawArrays } from "../../util/gl-util/draw-options/methods";
@@ -22,6 +22,7 @@ const styleBlockManager = new UniformBlockManager('Style', [
22
22
  { name: "opacity", type: "float", value: new Float32Array([1.0]) },
23
23
  { name: "private_isPickedOn", type: "float", value: new Float32Array([0]) },
24
24
  { name: "private_pickedIndex", type: "float", value: new Float32Array([0]) },
25
+ { name: "dontUseColor", type: "float", value: new Float32Array([0]) },
25
26
  ], uniformBindingPoints.style);
26
27
  const vertexShaderSource = `#version 300 es
27
28
  #pragma vscode_glsllint_stage : vert
@@ -39,7 +40,7 @@ ${DEM_TEXTURE_BLOCK_STRING}
39
40
  in vec3 a_position;
40
41
  in vec2 a_xy;
41
42
  in float a_index;
42
- in vec4 a_color;
43
+ in uvec4 a_color;
43
44
 
44
45
  ${styleBlockManager.glslCode()}
45
46
 
@@ -52,7 +53,16 @@ ${relativeBBoxPositionRadian}
52
53
  void main() {
53
54
  float elevation = ${WORLD_RADIUS_3D};
54
55
  float altitude = 0.0;
55
- v_color = (a_color.a != -1.0) ? a_color : defaultColor;
56
+
57
+ vec4 decodedColor = vec4(
58
+ float(a_color.r) / 255.0,
59
+ float(a_color.g) / 255.0,
60
+ float(a_color.b) / 255.0,
61
+ float(a_color.a) / 254.0
62
+ );
63
+
64
+ // a_color.a == 255u is reserved as "no per-vertex color" sentinel.
65
+ v_color = (a_color.a == 255u || dontUseColor == 1.0) ? defaultColor : decodedColor;
56
66
 
57
67
  if (is3D == true) {
58
68
  for (int i = 0; i < 6; i++) {
@@ -171,7 +181,10 @@ export class TextureDemTriangles {
171
181
  normalized: false,
172
182
  });
173
183
  attributeLoader(this.gl, variativeColorBuffer, this.locations.attributes.a_color, 4, {
174
- escapeValues: [IndexAttributeEscapeValue, IndexAttributeEscapeValue, IndexAttributeEscapeValue, IndexAttributeEscapeValue]
184
+ type: this.gl.UNSIGNED_BYTE,
185
+ integer: true,
186
+ integerUnsigned: true,
187
+ escapeValues: [0, 0, 0, 255]
175
188
  });
176
189
  this.gl.bindVertexArray(null);
177
190
  return vao;