@pirireis/webglobeplugins 0.9.9 → 0.9.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (212) hide show
  1. package/Math/angle-calculation.js +15 -0
  2. package/Math/arc.js +65 -0
  3. package/Math/bounds/line-bbox.js +190 -0
  4. package/Math/constants.js +9 -0
  5. package/Math/frustum/camera.js +24 -0
  6. package/Math/frustum/from-globeinfo.js +48 -0
  7. package/Math/frustum/types.js +2 -0
  8. package/Math/globe-util/horizon-plane.js +112 -0
  9. package/Math/index.js +1 -0
  10. package/Math/juction/arc-plane.js +83 -0
  11. package/Math/juction/line-sphere.js +25 -0
  12. package/Math/juction/plane-plane.js +58 -0
  13. package/Math/line.js +58 -0
  14. package/Math/matrix4.js +1 -0
  15. package/Math/methods.js +206 -0
  16. package/Math/plane.js +62 -0
  17. package/Math/quaternion.js +108 -0
  18. package/Math/types.js +2 -0
  19. package/Math/utils.js +4 -0
  20. package/Math/vec3.js +129 -0
  21. package/algorithms/search-binary.js +19 -0
  22. package/altitude-locator/adaptors.js +1 -0
  23. package/altitude-locator/draw-subset-obj.js +19 -0
  24. package/altitude-locator/keymethod.js +1 -0
  25. package/altitude-locator/plugin.js +357 -0
  26. package/altitude-locator/types.js +23 -0
  27. package/arrowfield/adaptor.js +15 -0
  28. package/arrowfield/index.js +10 -0
  29. package/arrowfield/plugin.js +89 -0
  30. package/bearing-line/index.js +8 -0
  31. package/bearing-line/plugin.js +474 -0
  32. package/circle-line-chain/chain-list-map.js +211 -0
  33. package/circle-line-chain/init.js +1 -0
  34. package/circle-line-chain/plugin.js +449 -0
  35. package/circle-line-chain/util.js +5 -0
  36. package/compass-rose/compass-rose-padding-flat.js +247 -0
  37. package/compass-rose/compass-text-writer.js +161 -0
  38. package/compass-rose/index.js +7 -0
  39. package/compassrose/compassrose.js +300 -0
  40. package/compassrose/index.js +8 -0
  41. package/globe-types.js +1 -0
  42. package/heatwave/index.js +10 -0
  43. package/heatwave/isobar/objectarraylabels.js +206 -0
  44. package/heatwave/isobar/plugin.js +362 -0
  45. package/heatwave/isobar/quadtreecontours.js +316 -0
  46. package/heatwave/plugins/heatwaveglobeshell.js +224 -0
  47. package/index.js +11 -11
  48. package/jest.config.js +7 -0
  49. package/package.json +4 -4
  50. package/partialrings/buffer-manager.js +113 -0
  51. package/partialrings/index.js +41 -0
  52. package/partialrings/plugin.js +171 -0
  53. package/partialrings/program.js +197 -0
  54. package/pin/pin-object-array.js +308 -0
  55. package/pin/pin-point-totem.js +61 -0
  56. package/point-heat-map/adaptors/timetracksplugin-format-to-this.js +66 -0
  57. package/point-heat-map/index.js +1 -0
  58. package/point-heat-map/plugin-webworker.js +131 -0
  59. package/point-heat-map/point-to-heat-map-flow.js +129 -0
  60. package/point-tracks/key-methods.js +5 -0
  61. package/point-tracks/plugin.js +353 -0
  62. package/programs/arrowfield/index.js +7 -0
  63. package/programs/arrowfield/logic.js +149 -0
  64. package/programs/arrowfield/object.js +68 -0
  65. package/programs/data2legend/density-to-legend.js +77 -0
  66. package/programs/data2legend/point-to-density-texture.js +75 -0
  67. package/programs/float2legendwithratio/index.js +8 -0
  68. package/programs/float2legendwithratio/logic.js +125 -0
  69. package/programs/float2legendwithratio/object.js +113 -0
  70. package/programs/globe-util/is-globe-moved.js +22 -0
  71. package/programs/globeshell/index.js +8 -0
  72. package/programs/globeshell/noise/noises.js +1 -0
  73. package/programs/globeshell/wiggle/index.js +8 -0
  74. package/programs/globeshell/wiggle/logic.js +252 -0
  75. package/programs/globeshell/wiggle/object.js +74 -0
  76. package/programs/helpers/blender/index.js +1 -0
  77. package/programs/helpers/blender/program.js +62 -0
  78. package/programs/helpers/fadeaway/index.js +7 -0
  79. package/programs/helpers/fadeaway/logic.js +50 -0
  80. package/programs/helpers/fadeaway/object.js +21 -0
  81. package/programs/helpers/index.js +8 -0
  82. package/programs/index.js +58 -0
  83. package/programs/interface.js +1 -0
  84. package/programs/line-on-globe/angled-line.js +117 -0
  85. package/programs/line-on-globe/circle-accurate-3d.js +91 -0
  86. package/programs/line-on-globe/circle-accurate-flat.js +158 -0
  87. package/programs/line-on-globe/circle-accurate.js +108 -0
  88. package/programs/line-on-globe/circle.js +102 -0
  89. package/programs/line-on-globe/degree-padding-around-circle-3d.js +109 -0
  90. package/programs/line-on-globe/index.js +1 -0
  91. package/programs/line-on-globe/lines-color-instanced-flat.js +91 -0
  92. package/programs/line-on-globe/linestrip.js +110 -0
  93. package/programs/line-on-globe/naive-accurate-flexible.js +125 -0
  94. package/programs/line-on-globe/to-the-surface.js +82 -0
  95. package/programs/line-on-globe/util.js +8 -0
  96. package/programs/picking/pickable-renderer.js +104 -0
  97. package/programs/point-on-globe/element-globe-surface-glow.js +102 -0
  98. package/programs/point-on-globe/element-point-glow.js +85 -0
  99. package/programs/point-on-globe/square-pixel-point.js +125 -0
  100. package/programs/programcache.js +131 -0
  101. package/programs/rings/distancering/circleflatprogram.js +114 -0
  102. package/programs/rings/distancering/circlepaddingfreeangleprogram.js +358 -0
  103. package/programs/rings/distancering/circlepaddysharedbuffer.js +433 -0
  104. package/programs/rings/distancering/index.js +14 -0
  105. package/programs/rings/distancering/paddyflatprogram.js +119 -0
  106. package/programs/rings/distancering/paddyflatprogram2d.js +121 -0
  107. package/programs/rings/distancering/paddyflatprogram3d.js +119 -0
  108. package/programs/rings/distancering/shader.js +1 -0
  109. package/programs/rings/index.js +17 -0
  110. package/programs/rings/partial-ring/piece-of-pie.js +173 -0
  111. package/programs/totems/camerauniformblock.js +147 -0
  112. package/programs/totems/canvas-webglobe-info.js +102 -0
  113. package/programs/totems/gpu-selection-uniform-block.js +104 -0
  114. package/programs/totems/index.js +40 -0
  115. package/programs/two-d/pixel-circle.js +1 -0
  116. package/programs/two-d/pixel-padding-for-compass.js +101 -0
  117. package/programs/util.js +18 -0
  118. package/programs/vectorfields/index.js +23 -0
  119. package/programs/vectorfields/logics/drawrectangleparticles.js +66 -0
  120. package/programs/vectorfields/logics/index.js +12 -0
  121. package/programs/vectorfields/logics/pixelbased.js +86 -0
  122. package/programs/vectorfields/logics/ubo.js +57 -0
  123. package/programs/vectorfields/pingpongbuffermanager.js +80 -0
  124. package/rangerings/enum.js +5 -0
  125. package/rangerings/index.js +15 -0
  126. package/rangerings/plugin.js +610 -0
  127. package/rangerings/rangeringangletext.js +341 -0
  128. package/rangerings/ring-account.js +134 -0
  129. package/shaders/fragment-toy/firework.js +4 -0
  130. package/shaders/fragment-toy/singularity.js +5 -0
  131. package/shape-on-terrain/arc/naive/plugin.js +252 -0
  132. package/timetracks/adaptors-line-strip.js +82 -0
  133. package/timetracks/adaptors.js +136 -0
  134. package/timetracks/index.js +19 -0
  135. package/timetracks/plugin-line-strip.js +254 -0
  136. package/timetracks/plugin.js +262 -0
  137. package/timetracks/program-line-strip.js +418 -0
  138. package/timetracks/program.js +466 -0
  139. package/timetracks/programpoint-line-strip.js +101 -0
  140. package/timetracks/programpoint.js +101 -0
  141. package/types.js +15 -0
  142. package/util/account/bufferoffsetmanager.js +202 -0
  143. package/util/account/index.js +23 -0
  144. package/util/account/single-attribute-buffer-management/buffer-manager.js +112 -0
  145. package/util/account/single-attribute-buffer-management/buffer-orchestrator.js +180 -0
  146. package/util/account/single-attribute-buffer-management/index.js +9 -0
  147. package/util/account/single-attribute-buffer-management/object-store.js +53 -0
  148. package/util/account/single-attribute-buffer-management/types.js +2 -0
  149. package/util/account/util.js +24 -0
  150. package/util/algorithms/index.js +1 -0
  151. package/util/algorithms/search-binary.js +28 -0
  152. package/util/check/get.js +18 -0
  153. package/util/check/index.js +1 -0
  154. package/util/check/typecheck.js +51 -0
  155. package/util/geometry/index.js +53 -0
  156. package/util/gl-util/buffer/attribute-loader.js +81 -0
  157. package/util/gl-util/buffer/index.js +6 -0
  158. package/util/gl-util/buffer/types.js +1 -0
  159. package/util/gl-util/draw-options/methods.js +38 -0
  160. package/util/gl-util/draw-options/types.js +15 -0
  161. package/util/gl-util/uniform-block/manager.js +168 -0
  162. package/util/gl-util/uniform-block/shader.js +1 -0
  163. package/util/gl-util/uniform-block/types.js +8 -0
  164. package/util/heatwavedatamanager/datamanager.js +212 -0
  165. package/util/heatwavedatamanager/index.js +10 -0
  166. package/util/heatwavedatamanager/pointcoordinatesdatacalculator.js +125 -0
  167. package/util/heatwavedatamanager/pointcoordsmeta.js +21 -0
  168. package/util/index.js +57 -0
  169. package/util/interpolation/index.js +1 -0
  170. package/util/interpolation/timetrack/index.js +5 -0
  171. package/util/interpolation/timetrack/timetrack-interpolator.js +81 -0
  172. package/util/interpolation/timetrack/web-worker-str.js +5 -0
  173. package/util/interpolation/timetrack/web-worker.js +48 -0
  174. package/util/jshelpers/data-filler.js +20 -0
  175. package/util/jshelpers/equality.js +20 -0
  176. package/util/jshelpers/index.js +37 -0
  177. package/util/jshelpers/timefilters.js +32 -0
  178. package/util/picking/fence.js +46 -0
  179. package/util/picking/picker-displayer.js +145 -0
  180. package/util/programs/draw-texture-on-canvas.js +71 -0
  181. package/util/programs/index.js +17 -0
  182. package/util/programs/shapesonglobe.js +174 -0
  183. package/util/programs/supersampletotextures.js +107 -0
  184. package/util/programs/texturetoglobe.js +132 -0
  185. package/util/shaderfunctions/geometrytransformations.js +45 -0
  186. package/util/shaderfunctions/index.js +18 -0
  187. package/util/shaderfunctions/nodata.js +5 -0
  188. package/util/shaderfunctions/noisefunctions.js +13 -0
  189. package/util/surface-line-data/arc-bboxes.js +25 -0
  190. package/util/surface-line-data/arcs-to-cuts.js +53 -0
  191. package/util/surface-line-data/cut-arc.js +1 -0
  192. package/util/surface-line-data/flow.js +28 -0
  193. package/util/surface-line-data/rbush-manager.js +1 -0
  194. package/util/surface-line-data/types.js +1 -0
  195. package/util/surface-line-data/web-worker.js +1 -0
  196. package/util/webglobe/gldefaultstates.js +7 -0
  197. package/util/webglobe/index.js +18 -0
  198. package/util/webglobe/rasteroverlay.js +80 -0
  199. package/util/webglobjectbuilders.js +393 -0
  200. package/util/webglobjectbuilders1.js +238 -0
  201. package/waveparticles/adaptor.js +18 -0
  202. package/waveparticles/index.js +10 -0
  203. package/waveparticles/plugin.js +271 -0
  204. package/wind/imagetovectorfieldandmagnitude.js +35 -0
  205. package/wind/index.js +14 -0
  206. package/wind/plugin.js +724 -0
  207. package/wind/vectorfieldimage.js +25 -0
  208. package/write-text/attached-text-writer.js +93 -0
  209. package/write-text/context-text.js +105 -0
  210. package/write-text/context-text3.js +160 -0
  211. package/write-text/index.js +5 -0
  212. package/write-text/writer-plugin.js +8 -0
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+ // angle radius, rgba, dashRatio, rgbaMode
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.AngledLineProgramCache = void 0;
5
+ var util_1 = require("../../util");
6
+ var totems_1 = require("../totems");
7
+ var geometrytransformations_1 = require("../../util/shaderfunctions/geometrytransformations");
8
+ var programcache_1 = require("../programcache");
9
+ var EDGE_COUNT_ON_SPHERE = 50;
10
+ var vertexShaderSource = "#version 300 es\nprecision highp float;\n\n".concat(totems_1.CameraUniformBlockString, "\n").concat(geometrytransformations_1.longLatRadToMercator, "\n").concat(geometrytransformations_1.longLatRadToCartesian3D, "\n").concat(geometrytransformations_1.cartesian3DToGLPosition, "\n").concat(geometrytransformations_1.mercatorXYToGLPosition, "\n").concat(geometrytransformations_1.circleLimpFromLongLatRadCenterCartesian3D, "\n").concat(geometrytransformations_1.circleLimpFromLongLatRadCenterMercatorCompass, "\n").concat(geometrytransformations_1.circleLimpFromLongLatRadCenterMercatorRealDistance, "\n\nin vec2 center_point;\nin float angle;\nin float radius;\nin vec4 rgba;\nin float dash_ratio;\nin float dash_opacity;\n\nout vec4 v_color;\nout float v_dash_ratio;\nout float interpolation;\nout float v_dash_opacity;\nout vec2 v_limp;\n// TODO: Draw World Boundaries \nvoid main() {\n if ( is3D ) {\n interpolation = float( gl_VertexID ) / ").concat(EDGE_COUNT_ON_SPHERE - 1, ".0;\n float radius_ = radius* interpolation;\n vec3 position = circleLimpFromLongLatRadCenterCartesian3D( center_point, radius_, angle);\n gl_Position = cartesian3DToGLPosition( position);\n v_limp = vec2(0.0, 0.0);\n } else {\n interpolation = float( gl_VertexID );\n float radius_ = radius * interpolation;\n vec2 position = circleLimpFromLongLatRadCenterMercatorRealDistance( center_point, radius_, angle);\n v_limp = position;\n gl_Position = mercatorXYToGLPosition( position);\n }\n v_dash_opacity = dash_opacity;\n v_color = rgba;\n v_dash_ratio = dash_ratio;\n}");
11
+ var fragmentShaderSource = "#version 300 es\n".concat(geometrytransformations_1.POLE, "\nprecision highp float;\n\nuniform float opacity;\nin vec4 v_color;\nin float v_dash_ratio;\nin float v_dash_opacity;\nin float interpolation;\nin vec2 v_limp;\nout vec4 color;\n\nvoid main() {\n if ( v_limp.x < -POLE || v_limp.x > POLE || v_limp.y < -POLE || v_limp.y > POLE ){ color = vec4(0.0,0.0,0.0,0.0); return; }\n color = vec4(v_color.rgb, v_color.a * opacity);\n if (fract(interpolation / (2.0 * v_dash_ratio)) < 0.5 ) {\n color.a *= v_dash_opacity;\n } \n}");
12
+ var Logic = /** @class */ (function () {
13
+ function Logic(globe) {
14
+ this.globe = globe;
15
+ this.gl = globe.gl;
16
+ this.program = (0, util_1.createProgram)(this.gl, vertexShaderSource, fragmentShaderSource);
17
+ this._lastOpacity = 1;
18
+ var _a = this, gl = _a.gl, program = _a.program;
19
+ { // assign attribute locations
20
+ gl.bindAttribLocation(program, 0, "center_point");
21
+ gl.bindAttribLocation(program, 1, "angle");
22
+ gl.bindAttribLocation(program, 2, "radius");
23
+ gl.bindAttribLocation(program, 3, "rgba");
24
+ gl.bindAttribLocation(program, 4, "dash_ratio");
25
+ gl.bindAttribLocation(program, 5, "dash_opacity");
26
+ }
27
+ {
28
+ this._opacityLocation = gl.getUniformLocation(program, "opacity");
29
+ var currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);
30
+ gl.useProgram(program);
31
+ gl.uniform1f(this._opacityLocation, this._lastOpacity);
32
+ gl.useProgram(currentProgram);
33
+ }
34
+ this.cameraBlockBindingPoint = 0;
35
+ var cameraBlockIndex = gl.getUniformBlockIndex(program, "CameraUniformBlock");
36
+ this.cameraBlockTotem = totems_1.CameraUniformBlockTotemCache.get(globe);
37
+ gl.uniformBlockBinding(program, cameraBlockIndex, this.cameraBlockBindingPoint);
38
+ }
39
+ Logic.prototype.draw = function (vao, length, opacity) {
40
+ var _a = this, gl = _a.gl, program = _a.program, globe = _a.globe, cameraBlockTotem = _a.cameraBlockTotem, cameraBlockBindingPoint = _a.cameraBlockBindingPoint;
41
+ gl.useProgram(program);
42
+ if (opacity !== this._lastOpacity) {
43
+ gl.uniform1f(this._opacityLocation, opacity);
44
+ this._lastOpacity = opacity;
45
+ }
46
+ var drawCount = globe.api_GetCurrentGeometry() === 0 ? EDGE_COUNT_ON_SPHERE : 2;
47
+ gl.bindVertexArray(vao);
48
+ cameraBlockTotem.bind(cameraBlockBindingPoint);
49
+ // gl.disable(gl.DEPTH_TEST);
50
+ gl.drawArraysInstanced(gl.LINE_STRIP, 0, drawCount, length);
51
+ gl.bindVertexArray(null);
52
+ cameraBlockTotem.unbind(cameraBlockBindingPoint);
53
+ // gl.enable(gl.DEPTH_TEST);
54
+ };
55
+ Logic.prototype.createVAO = function (centerCoords, angle, radius, rgba, dashRatio, dashOpacity) {
56
+ var gl = this.gl;
57
+ var vao = gl.createVertexArray();
58
+ gl.bindVertexArray(vao);
59
+ {
60
+ var buffer = centerCoords.buffer, _a = centerCoords.stride, stride = _a === void 0 ? 0 : _a, _b = centerCoords.offset, offset = _b === void 0 ? 0 : _b;
61
+ gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
62
+ gl.enableVertexAttribArray(0);
63
+ gl.vertexAttribPointer(0, 2, gl.FLOAT, false, stride, offset);
64
+ gl.vertexAttribDivisor(0, 1);
65
+ }
66
+ {
67
+ var buffer = angle.buffer, _c = angle.stride, stride = _c === void 0 ? 0 : _c, _d = angle.offset, offset = _d === void 0 ? 0 : _d;
68
+ gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
69
+ gl.enableVertexAttribArray(1);
70
+ gl.vertexAttribPointer(1, 1, gl.FLOAT, false, stride, offset);
71
+ gl.vertexAttribDivisor(1, 1);
72
+ }
73
+ {
74
+ var buffer = radius.buffer, _e = radius.stride, stride = _e === void 0 ? 0 : _e, _f = radius.offset, offset = _f === void 0 ? 0 : _f;
75
+ gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
76
+ gl.enableVertexAttribArray(2);
77
+ gl.vertexAttribPointer(2, 1, gl.FLOAT, false, stride, offset);
78
+ gl.vertexAttribDivisor(2, 1);
79
+ }
80
+ {
81
+ var buffer = rgba.buffer, _g = rgba.stride, stride = _g === void 0 ? 0 : _g, _h = rgba.offset, offset = _h === void 0 ? 0 : _h;
82
+ gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
83
+ gl.enableVertexAttribArray(3);
84
+ gl.vertexAttribPointer(3, 4, gl.FLOAT, false, stride, offset);
85
+ gl.vertexAttribDivisor(3, 1);
86
+ }
87
+ {
88
+ var buffer = dashRatio.buffer, _j = dashRatio.stride, stride = _j === void 0 ? 0 : _j, _k = dashRatio.offset, offset = _k === void 0 ? 0 : _k;
89
+ gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
90
+ gl.enableVertexAttribArray(4);
91
+ gl.vertexAttribPointer(4, 1, gl.FLOAT, false, stride, offset);
92
+ gl.vertexAttribDivisor(4, 1);
93
+ }
94
+ {
95
+ var buffer = dashOpacity.buffer, _l = dashOpacity.stride, stride = _l === void 0 ? 0 : _l, _m = dashOpacity.offset, offset = _m === void 0 ? 0 : _m;
96
+ gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
97
+ gl.enableVertexAttribArray(5);
98
+ gl.vertexAttribPointer(5, 1, gl.FLOAT, false, stride, offset);
99
+ gl.vertexAttribDivisor(5, 1);
100
+ }
101
+ gl.bindVertexArray(null);
102
+ return vao;
103
+ };
104
+ Logic.prototype.free = function () {
105
+ if (this.isFreed)
106
+ return;
107
+ totems_1.CameraUniformBlockTotemCache.release(this.globe);
108
+ this.cameraBlockTotem = null;
109
+ this.gl.deleteProgram(this.program);
110
+ this.isFreed = true;
111
+ };
112
+ return Logic;
113
+ }());
114
+ exports.AngledLineProgramCache = Object.freeze({
115
+ get: function (globe) { return programcache_1.noRegisterGlobeProgramCache.getProgram(globe, Logic); },
116
+ release: function (globe) { return programcache_1.noRegisterGlobeProgramCache.releaseProgram(globe, Logic); }
117
+ });
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CircleCache = void 0;
4
+ var webglobjectbuilders_1 = require("../../util/webglobjectbuilders");
5
+ var camerauniformblock_1 = require("../totems/camerauniformblock");
6
+ var programcache_1 = require("../programcache");
7
+ // import { vaoAttributeLoader } from "../../util/account/util";
8
+ var attribute_loader_1 = require("../../util/gl-util/buffer/attribute-loader");
9
+ var geometrytransformations_1 = require("../../util/shaderfunctions/geometrytransformations");
10
+ /**
11
+ * TODO:
12
+ * 1. integrate geometry functions for radius angle and center
13
+ * 2. integrate attributes
14
+ *
15
+ * TODO:
16
+ * center_position is too small or doenst loaded as expected.
17
+ */
18
+ var EDGE_COUNT_ON_SPHERE = 360;
19
+ //${circleLimpFromLongLatRadCenterCartesian3D_accurate}
20
+ var vertexShaderSource = "#version 300 es\nprecision highp float;\n".concat(geometrytransformations_1.PI, "\n").concat(camerauniformblock_1.CameraUniformBlockString, "\n").concat(geometrytransformations_1.cartesian3DToGLPosition, "\n").concat(geometrytransformations_1.circleOnSphere, "\n\nuniform float edge_count;\n\nin vec3 center_position3d;\nin vec3 target_position3d;\n// in float radius;\nin vec4 color;\nin float dash_ratio;\nin float dash_opacity;\n\nout float interpolation;\nout vec4 v_color;\nout float v_dash_ratio;\nout float v_dash_opacity;\nvoid main() {\n interpolation = float( gl_VertexID ) / ").concat(EDGE_COUNT_ON_SPHERE, ".0;\n if ( is3D ) {\n float angle = PI * 2.0 * interpolation;\n vec3 position = circleOnSphere(center_position3d, target_position3d, angle);\n gl_Position = cartesian3DToGLPosition(position);\n } else {\n return;\n }\n v_dash_ratio = dash_ratio;\n v_dash_opacity = dash_opacity;\n v_color = color;\n gl_PointSize = 3.0;\n}");
21
+ var fragmentShaderSource = "#version 300 es\n".concat(geometrytransformations_1.POLE, "\nprecision highp float;\nuniform float opacity;\nin vec4 v_color;\nin float v_dash_ratio;\nin float v_dash_opacity;\nin float interpolation;\nin vec2 v_limp;\nout vec4 color;\nvoid main() {\n color = v_color;\n color.a *= opacity;\n if ( v_dash_ratio == 1.0 || v_dash_ratio == 0.0 ) return;\n if (fract(interpolation / (2.0 * v_dash_ratio)) < 0.5 ) {\n color.a *= v_dash_opacity;\n } \n}\n");
22
+ var Logic = /** @class */ (function () {
23
+ function Logic(globe) {
24
+ this.globe = globe;
25
+ this.gl = globe.gl;
26
+ this._lastOpacity = 1.0;
27
+ this.program = (0, webglobjectbuilders_1.createProgram)(this.gl, vertexShaderSource, fragmentShaderSource);
28
+ var _a = this, gl = _a.gl, program = _a.program;
29
+ this.program.uniforms = {
30
+ opacity: gl.getUniformLocation(program, "opacity")
31
+ };
32
+ { // initial uniform values
33
+ var currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);
34
+ gl.useProgram(program);
35
+ gl.uniform1f(program.uniforms.opacity, 1.0);
36
+ gl.useProgram(currentProgram);
37
+ }
38
+ { // assign attribute locations
39
+ gl.bindAttribLocation(program, 0, "center_position3d");
40
+ gl.bindAttribLocation(program, 1, "target_position3d");
41
+ gl.bindAttribLocation(program, 2, "color");
42
+ gl.bindAttribLocation(program, 3, "dash_ratio");
43
+ gl.bindAttribLocation(program, 4, "dash_opacity");
44
+ }
45
+ this.cameraBindingPoint = 0;
46
+ this.cameraBlockTotem = camerauniformblock_1.CameraUniformBlockTotemCache.get(globe);
47
+ var cameraBlockLocation = gl.getUniformBlockIndex(program, "CameraUniformBlock");
48
+ gl.uniformBlockBinding(program, cameraBlockLocation, this.cameraBindingPoint);
49
+ }
50
+ Logic.prototype.createVAO = function (center3dObj, target3dObj, colorObj, dashRatioObj, dashOpacityObj) {
51
+ var gl = this.gl;
52
+ var vao = gl.createVertexArray();
53
+ var divisor = 1;
54
+ gl.bindVertexArray(vao);
55
+ (0, attribute_loader_1.attributeLoader)(gl, center3dObj, 0, 3, { divisor: divisor });
56
+ (0, attribute_loader_1.attributeLoader)(gl, target3dObj, 1, 3, { divisor: divisor });
57
+ // attributeLoader(gl, radiusObj, 1, 1, { divisor });
58
+ (0, attribute_loader_1.attributeLoader)(gl, colorObj, 2, 4, { divisor: divisor });
59
+ (0, attribute_loader_1.attributeLoader)(gl, dashRatioObj, 3, 1, { divisor: divisor });
60
+ (0, attribute_loader_1.attributeLoader)(gl, dashOpacityObj, 4, 1, { divisor: divisor });
61
+ gl.bindVertexArray(null);
62
+ gl.bindVertexArray(null);
63
+ return vao;
64
+ };
65
+ Logic.prototype.draw = function (vao, length, opacity) {
66
+ var _a = this, gl = _a.gl, program = _a.program, cameraBlockTotem = _a.cameraBlockTotem, cameraBindingPoint = _a.cameraBindingPoint;
67
+ gl.useProgram(program);
68
+ if (this._lastOpacity !== opacity) {
69
+ gl.uniform1f(program.uniforms.opacity, opacity);
70
+ this._lastOpacity = opacity;
71
+ }
72
+ gl.bindVertexArray(vao);
73
+ cameraBlockTotem.bind(cameraBindingPoint);
74
+ gl.drawArraysInstanced(gl.LINE_STRIP, 0, EDGE_COUNT_ON_SPHERE + 1, length);
75
+ // gl.drawArraysInstanced(gl.POINTS, 0, EDGE_COUNT_ON_SPHERE + 1, length);
76
+ cameraBlockTotem.unbind(cameraBindingPoint);
77
+ gl.bindVertexArray(null);
78
+ };
79
+ Logic.prototype.free = function () {
80
+ if (this.isFreed)
81
+ return;
82
+ camerauniformblock_1.CameraUniformBlockTotemCache.release(this.globe);
83
+ this.gl.deleteProgram(this.program);
84
+ this.isFreed = true;
85
+ };
86
+ return Logic;
87
+ }());
88
+ exports.CircleCache = Object.freeze({
89
+ get: function (globe) { return programcache_1.noRegisterGlobeProgramCache.getProgram(globe, Logic); },
90
+ release: function (globe) { return programcache_1.noRegisterGlobeProgramCache.releaseProgram(globe, Logic); }
91
+ });
@@ -0,0 +1,158 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EDGE_COUNT = exports.CircleCache = void 0;
4
+ exports.centerCoords2dflatDataCreator = centerCoords2dflatDataCreator;
5
+ exports.centerCoords2dflatDataCreatorWithRadius = centerCoords2dflatDataCreatorWithRadius;
6
+ var webglobjectbuilders_1 = require("../../util/webglobjectbuilders");
7
+ var camerauniformblock_1 = require("../totems/camerauniformblock");
8
+ var programcache_1 = require("../programcache");
9
+ var util_1 = require("../../util/account/util");
10
+ var geometrytransformations_1 = require("../../util/shaderfunctions/geometrytransformations");
11
+ var Pole = 20037508.34;
12
+ /**
13
+ * Warning:
14
+ * Insert the points from the second index and skip 1 point as you placed 361 points
15
+ */
16
+ /**
17
+ * Plus 1 for returning to the start point. 1 for cutting the circle into pieces.
18
+ */
19
+ var EDGE_COUNT = 62;
20
+ exports.EDGE_COUNT = EDGE_COUNT;
21
+ var ESCAPE_VALUE = 200000000;
22
+ var vertexShaderSource = "#version 300 es\nprecision highp float;\n\n# define escape_value ".concat(ESCAPE_VALUE, ".0\n\n").concat(camerauniformblock_1.CameraUniformBlockString, "\n").concat(geometrytransformations_1.mercatorXYToGLPosition, "\n\nuniform int edge_count;\n\n\nin vec2 position2d;\nin vec4 color;\nin float dash_ratio;\nin float dash_opacity;\n\nout float interpolation;\nout vec4 v_color;\nout float v_dash_ratio;\nout float v_dash_opacity;\nout vec2 v_limp;\n\n\nvoid main() {\n if ( position2d.x == escape_value && position2d.y == escape_value){ return; }\n interpolation = float( gl_VertexID % edge_count ) / float(edge_count);\n if ( gl_VertexID % edge_count == 0 ) { return; } // cut on the first point.\n if ( is3D ) {\n return;\n v_limp = vec2(0.0, 0.0);\n } else {\n v_limp = position2d;\n gl_Position = mercatorXYToGLPosition( position2d);\n }\n v_dash_ratio = dash_ratio;\n v_dash_opacity = dash_opacity;\n v_color = color;\n gl_PointSize = 15.0;\n\n}");
23
+ var fragmentShaderSource = "#version 300 es\n".concat(geometrytransformations_1.POLE, "\nprecision highp float;\nuniform float opacity;\nin vec4 v_color;\nin float v_dash_ratio;\nin float v_dash_opacity;\nin float interpolation;\nin vec2 v_limp;\nout vec4 color;\nvoid main() {\n if ( v_limp.x < -POLE || v_limp.x > POLE || v_limp.y < -POLE || v_limp.y > POLE ){ \n discard;\n // color = vec4(0.0,0.0,0.0,0.0); \n // return; \n }\n color = v_color;\n color.a *= opacity;\n if ( v_dash_ratio == 1.0 || v_dash_ratio == 0.0 ) return;\n if (fract(interpolation / (2.0 * v_dash_ratio)) < 0.5 ) {\n color.a *= v_dash_opacity;\n } \n}");
24
+ var Logic = /** @class */ (function () {
25
+ function Logic(globe) {
26
+ this.globe = globe;
27
+ this.gl = globe.gl;
28
+ this._lastOpacity = 1.0;
29
+ this._lastMercatorMode = 0;
30
+ this._lastEdgeCount = EDGE_COUNT;
31
+ this.program = (0, webglobjectbuilders_1.createProgram)(this.gl, vertexShaderSource, fragmentShaderSource);
32
+ var _a = this, gl = _a.gl, program = _a.program;
33
+ this.program.uniforms = {
34
+ opacity: gl.getUniformLocation(program, "opacity"),
35
+ edgeCount: gl.getUniformLocation(program, "edge_count"),
36
+ mercator_calculation_mode: gl.getUniformLocation(program, "mercator_calculation_mode")
37
+ };
38
+ // initial uniform values
39
+ var currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);
40
+ gl.useProgram(program);
41
+ gl.uniform1f(program.uniforms.opacity, 1.0);
42
+ gl.uniform1i(program.uniforms.edgeCount, EDGE_COUNT);
43
+ gl.uniform1i(program.uniforms.mercator_calculation_mode, 0);
44
+ gl.useProgram(currentProgram);
45
+ // assign attribute locations
46
+ gl.bindAttribLocation(program, 0, "position2d");
47
+ gl.bindAttribLocation(program, 1, "color");
48
+ gl.bindAttribLocation(program, 2, "dash_ratio");
49
+ gl.bindAttribLocation(program, 3, "dash_opacity");
50
+ this.cameraBindingPoint = 0;
51
+ this.cameraBlockTotem = camerauniformblock_1.CameraUniformBlockTotemCache.get(globe);
52
+ var cameraBlockLocation = gl.getUniformBlockIndex(program, "CameraUniformBlock");
53
+ gl.uniformBlockBinding(program, cameraBlockLocation, this.cameraBindingPoint);
54
+ }
55
+ Logic.prototype.createVAO = function (centerObj, colorObj, dashRatioObj, dashOpacityObj) {
56
+ var gl = this.gl;
57
+ var vao = gl.createVertexArray();
58
+ gl.bindVertexArray(vao);
59
+ { // make this a function end import from account module.
60
+ var buffer = centerObj.buffer, _a = centerObj.stride, stride = _a === void 0 ? 0 : _a, _b = centerObj.offset, offset = _b === void 0 ? 0 : _b;
61
+ (0, util_1.vaoAttributeLoader)(gl, buffer, 0, 2, stride, offset, null);
62
+ }
63
+ {
64
+ var buffer = colorObj.buffer, _c = colorObj.stride, stride = _c === void 0 ? 0 : _c, _d = colorObj.offset, offset = _d === void 0 ? 0 : _d;
65
+ (0, util_1.vaoAttributeLoader)(gl, buffer, 1, 4, stride, offset, null);
66
+ }
67
+ {
68
+ var buffer = dashRatioObj.buffer, _e = dashRatioObj.stride, stride = _e === void 0 ? 0 : _e, _f = dashRatioObj.offset, offset = _f === void 0 ? 0 : _f;
69
+ (0, util_1.vaoAttributeLoader)(gl, buffer, 2, 1, stride, offset, null);
70
+ }
71
+ {
72
+ var buffer = dashOpacityObj.buffer, _g = dashOpacityObj.stride, stride = _g === void 0 ? 0 : _g, _h = dashOpacityObj.offset, offset = _h === void 0 ? 0 : _h;
73
+ (0, util_1.vaoAttributeLoader)(gl, buffer, 3, 1, stride, offset, null);
74
+ }
75
+ gl.bindVertexArray(null);
76
+ gl.bindVertexArray(null);
77
+ return vao;
78
+ };
79
+ Logic.prototype.draw = function (vao, length, edgeCount, opacity) {
80
+ var _a = this, gl = _a.gl, program = _a.program, cameraBlockTotem = _a.cameraBlockTotem, cameraBindingPoint = _a.cameraBindingPoint;
81
+ gl.useProgram(program);
82
+ if (this._lastOpacity !== opacity) {
83
+ gl.uniform1f(program.uniforms.opacity, opacity);
84
+ this._lastOpacity = opacity;
85
+ }
86
+ if (this._lastEdgeCount !== edgeCount) {
87
+ gl.uniform1i(program.uniforms.edgeCount, edgeCount);
88
+ this._lastEdgeCount = edgeCount;
89
+ }
90
+ gl.bindVertexArray(vao);
91
+ cameraBlockTotem.bind(cameraBindingPoint);
92
+ gl.drawArrays(gl.LINE_STRIP, 0, length * edgeCount);
93
+ // gl.drawArrays(gl.POINTS, 0, length * EDGE_COUNT)
94
+ cameraBlockTotem.unbind(cameraBindingPoint);
95
+ gl.bindVertexArray(null);
96
+ };
97
+ Logic.prototype.free = function () {
98
+ if (this.isFreed)
99
+ return;
100
+ camerauniformblock_1.CameraUniformBlockTotemCache.release(this.globe);
101
+ this.gl.deleteProgram(this.program);
102
+ this.isFreed = true;
103
+ };
104
+ return Logic;
105
+ }());
106
+ var CircleCache = Object.freeze({
107
+ get: function (globe) { return programcache_1.noRegisterGlobeProgramCache.getProgram(globe, Logic); },
108
+ release: function (globe) { return programcache_1.noRegisterGlobeProgramCache.releaseProgram(globe, Logic); }
109
+ });
110
+ exports.CircleCache = CircleCache;
111
+ function centerCoords2dflatDataCreator(globe, centerLong, centerLat, targetLong, targetLat, _a) {
112
+ var _b = _a === void 0 ? {} : _a, _c = _b.startAngleOfCircle, startAngleOfCircle = _c === void 0 ? null : _c, _d = _b.edgeCount, edgeCount = _d === void 0 ? EDGE_COUNT : _d, _e = _b.radiusOffset, radiusOffset = _e === void 0 ? 0 : _e;
113
+ var centerCoords2dflat = new Float32Array(edgeCount * 2);
114
+ var radius2d = globe.Math.GetDist2D(centerLong, centerLat, targetLong, targetLat) + radiusOffset;
115
+ var angle;
116
+ if (startAngleOfCircle === null) {
117
+ angle = globe.Math.GetAzimuthAngle(centerLong, centerLat, targetLong, targetLat);
118
+ }
119
+ else {
120
+ angle = startAngleOfCircle;
121
+ }
122
+ var pointsLongLat = globe.Math.GetEllipseGeo(centerLong, centerLat, radius2d, radius2d, angle, 360 / (edgeCount - 2));
123
+ var lastlg = pointsLongLat[0].long;
124
+ var lastlt = pointsLongLat[0].lat;
125
+ for (var i = 1; i < edgeCount; i++) {
126
+ var _f = pointsLongLat[i - 1], lg = _f.long, lt = _f.lat;
127
+ if (manhattanDistance(lastlg, lastlt, lg, lt) < 170) {
128
+ centerCoords2dflat.set(globe.api_GetMercator2DPoint(lg, lt), i * 2);
129
+ }
130
+ else {
131
+ centerCoords2dflat.set([NaN, NaN], i * 2);
132
+ }
133
+ lastlg = lg;
134
+ lastlt = lt;
135
+ }
136
+ return centerCoords2dflat;
137
+ }
138
+ function centerCoords2dflatDataCreatorWithRadius(globe, centerLong, centerLat, radius2d, _a) {
139
+ var _b = _a === void 0 ? {} : _a, _c = _b.startAngleOfCircle, startAngleOfCircle = _c === void 0 ? null : _c, _d = _b.edgeCount, edgeCount = _d === void 0 ? EDGE_COUNT : _d;
140
+ var centerCoords2dflat = new Float32Array(edgeCount * 2);
141
+ var pointsLongLat = globe.Math.GetEllipseGeo(centerLong, centerLat, radius2d, radius2d, 0, 360 / (edgeCount - 2));
142
+ var _e = pointsLongLat[0], lastlg = _e.long, lastlt = _e.lat;
143
+ for (var i = 1; i < edgeCount; i++) {
144
+ var _f = pointsLongLat[i - 1], lg = _f.long, lt = _f.lat;
145
+ if (manhattanDistance(lastlg, lastlt, lg, lt) < 170) {
146
+ centerCoords2dflat.set(globe.api_GetMercator2DPoint(lg, lt), i * 2);
147
+ }
148
+ else {
149
+ centerCoords2dflat.set([NaN, NaN], i * 2);
150
+ }
151
+ lastlg = lg;
152
+ lastlt = lt;
153
+ }
154
+ return centerCoords2dflat;
155
+ }
156
+ function manhattanDistance(x1, y1, x2, y2) {
157
+ return Math.max(Math.abs(x1 - x2), Math.abs(y1 - y2));
158
+ }
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CircleCache = void 0;
4
+ var webglobjectbuilders_1 = require("../../util/webglobjectbuilders");
5
+ var camerauniformblock_1 = require("../totems/camerauniformblock");
6
+ var programcache_1 = require("../programcache");
7
+ var util_1 = require("../../util/account/util");
8
+ var geometrytransformations_1 = require("../../util/shaderfunctions/geometrytransformations");
9
+ /**
10
+ * TODO:
11
+ * 1. integrate geometry functions for radius angle and center
12
+ * 2. integrate attributes
13
+ *
14
+ * TODO:
15
+ * center_position is too small or doenst loaded as expected.
16
+ */
17
+ var EDGE_COUNT_ON_SPHERE = 360;
18
+ var vertexShaderSource = "#version 300 es\nprecision highp float;\n".concat(camerauniformblock_1.CameraUniformBlockString, "\n").concat(geometrytransformations_1.longLatRadToMercator, "\n").concat(geometrytransformations_1.longLatRadToCartesian3D, "\n").concat(geometrytransformations_1.cartesian3DToGLPosition, "\n").concat(geometrytransformations_1.mercatorXYToGLPosition, "\n").concat(geometrytransformations_1.realDistanceOnSphereR1, "\n").concat(geometrytransformations_1.circleLimpFromLongLatRadCenterCartesian3D_accurate, "\n").concat(geometrytransformations_1.circleLimpFromLongLatRadCenterMercatorCompass_accurate, "\n").concat(geometrytransformations_1.circleLimpFromLongLatRadCenterMercatorRealDistanceNew_accurate, "\n\nuniform float edge_count;\n\nin vec2 center_position;\nin vec3 center_position3d;\nin float radius;\nin vec4 color;\nin float dash_ratio;\nin float dash_opacity;\n\nout float interpolation;\nout vec4 v_color;\nout float v_dash_ratio;\nout float v_dash_opacity;\nout vec2 v_limp;\nvoid main() {\n interpolation = float( gl_VertexID ) / ").concat(EDGE_COUNT_ON_SPHERE, ".0;\n float angle = PI * 2.0 * interpolation;\n if ( is3D ) {\n\n vec3 position = circleLimpFromLongLatRadCenterCartesian3D_accurate(center_position3d, radius, angle);\n \n gl_Position = cartesian3DToGLPosition(position);\n v_limp = vec2(0.0, 0.0);\n } else {\n vec2 position; \n if ( radius < 0.0) {\n float cosine1 = cos(asin(tanh(center_position.y / 6378137.0)));\n position = circleLimpFromLongLatRadCenterMercatorCompass_accurate(center_position, radius / cosine1 , angle);\n } else {\n position = circleLimpFromLongLatRadCenterMercatorRealDistanceNew_accurate( center_position, radius, angle);\n }\n v_limp = position;\n gl_Position = mercatorXYToGLPosition( position);\n\n }\n v_dash_ratio = dash_ratio;\n v_dash_opacity = dash_opacity;\n v_color = color;\n gl_PointSize = 3.0;\n\n}");
19
+ var fragmentShaderSource = "#version 300 es\n".concat(geometrytransformations_1.POLE, "\nprecision highp float;\nuniform float opacity;\nin vec4 v_color;\nin float v_dash_ratio;\nin float v_dash_opacity;\nin float interpolation;\nin vec2 v_limp;\nout vec4 color;\nvoid main() {\n if ( v_limp.x < -POLE || v_limp.x > POLE || v_limp.y < -POLE || v_limp.y > POLE ){ color = vec4(0.0,0.0,0.0,0.0); return; }\n color = v_color;\n color.a *= opacity;\n if ( v_dash_ratio == 1.0 || v_dash_ratio == 0.0 ) return;\n if (fract(interpolation / (2.0 * v_dash_ratio)) < 0.5 ) {\n color.a *= v_dash_opacity;\n } \n}\n");
20
+ var Logic = /** @class */ (function () {
21
+ function Logic(globe) {
22
+ this.globe = globe;
23
+ this.gl = globe.gl;
24
+ this._lastOpacity = 1.0;
25
+ this.program = (0, webglobjectbuilders_1.createProgram)(this.gl, vertexShaderSource, fragmentShaderSource);
26
+ var _a = this, gl = _a.gl, program = _a.program;
27
+ this.program.uniforms = {
28
+ opacity: gl.getUniformLocation(program, "opacity")
29
+ };
30
+ { // initial uniform values
31
+ var currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);
32
+ gl.useProgram(program);
33
+ gl.uniform1f(program.uniforms.opacity, 1.0);
34
+ gl.useProgram(currentProgram);
35
+ }
36
+ { // assign attribute locations
37
+ gl.bindAttribLocation(program, 0, "center_position");
38
+ gl.bindAttribLocation(program, 1, "center_position3d");
39
+ gl.bindAttribLocation(program, 2, "radius");
40
+ gl.bindAttribLocation(program, 3, "color");
41
+ gl.bindAttribLocation(program, 4, "dash_ratio");
42
+ gl.bindAttribLocation(program, 5, "dash_opacity");
43
+ }
44
+ this.cameraBindingPoint = 0;
45
+ this.cameraBlockTotem = camerauniformblock_1.CameraUniformBlockTotemCache.get(globe);
46
+ var cameraBlockLocation = gl.getUniformBlockIndex(program, "CameraUniformBlock");
47
+ gl.uniformBlockBinding(program, cameraBlockLocation, this.cameraBindingPoint);
48
+ }
49
+ Logic.prototype.createVAO = function (centerObj, center3dObj, radiusObj, colorObj, dashRatioObj, dashOpacityObj) {
50
+ var gl = this.gl;
51
+ var vao = gl.createVertexArray();
52
+ var divisor = 1;
53
+ gl.bindVertexArray(vao);
54
+ { // make this a function end import from account module.
55
+ var buffer = centerObj.buffer, _a = centerObj.stride, stride = _a === void 0 ? 0 : _a, _b = centerObj.offset, offset = _b === void 0 ? 0 : _b;
56
+ (0, util_1.vaoAttributeLoader)(gl, buffer, 0, 2, stride, offset, divisor);
57
+ }
58
+ { // make this a function end import from account module.
59
+ var buffer = center3dObj.buffer, _c = center3dObj.stride, stride = _c === void 0 ? 0 : _c, _d = center3dObj.offset, offset = _d === void 0 ? 0 : _d;
60
+ (0, util_1.vaoAttributeLoader)(gl, buffer, 1, 3, stride, offset, divisor);
61
+ }
62
+ {
63
+ var buffer = radiusObj.buffer, _e = radiusObj.stride, stride = _e === void 0 ? 0 : _e, _f = radiusObj.offset, offset = _f === void 0 ? 0 : _f;
64
+ (0, util_1.vaoAttributeLoader)(gl, buffer, 2, 1, stride, offset, divisor);
65
+ }
66
+ {
67
+ var buffer = colorObj.buffer, _g = colorObj.stride, stride = _g === void 0 ? 0 : _g, _h = colorObj.offset, offset = _h === void 0 ? 0 : _h;
68
+ (0, util_1.vaoAttributeLoader)(gl, buffer, 3, 4, stride, offset, divisor);
69
+ }
70
+ {
71
+ var buffer = dashRatioObj.buffer, _j = dashRatioObj.stride, stride = _j === void 0 ? 0 : _j, _k = dashRatioObj.offset, offset = _k === void 0 ? 0 : _k;
72
+ (0, util_1.vaoAttributeLoader)(gl, buffer, 4, 1, stride, offset, divisor);
73
+ }
74
+ {
75
+ var buffer = dashOpacityObj.buffer, _l = dashOpacityObj.stride, stride = _l === void 0 ? 0 : _l, _m = dashOpacityObj.offset, offset = _m === void 0 ? 0 : _m;
76
+ (0, util_1.vaoAttributeLoader)(gl, buffer, 5, 1, stride, offset, divisor);
77
+ }
78
+ gl.bindVertexArray(null);
79
+ gl.bindVertexArray(null);
80
+ return vao;
81
+ };
82
+ Logic.prototype.draw = function (vao, length, opacity) {
83
+ var _a = this, gl = _a.gl, program = _a.program, cameraBlockTotem = _a.cameraBlockTotem, cameraBindingPoint = _a.cameraBindingPoint;
84
+ gl.useProgram(program);
85
+ if (this._lastOpacity !== opacity) {
86
+ gl.uniform1f(program.uniforms.opacity, opacity);
87
+ this._lastOpacity = opacity;
88
+ }
89
+ gl.bindVertexArray(vao);
90
+ cameraBlockTotem.bind(cameraBindingPoint);
91
+ gl.drawArraysInstanced(gl.LINE_STRIP, 0, EDGE_COUNT_ON_SPHERE + 1, length);
92
+ gl.drawArraysInstanced(gl.POINTS, 0, EDGE_COUNT_ON_SPHERE + 1, length);
93
+ cameraBlockTotem.unbind(cameraBindingPoint);
94
+ gl.bindVertexArray(null);
95
+ };
96
+ Logic.prototype.free = function () {
97
+ if (this.isFreed)
98
+ return;
99
+ camerauniformblock_1.CameraUniformBlockTotemCache.release(this.globe);
100
+ this.gl.deleteProgram(this.program);
101
+ this.isFreed = true;
102
+ };
103
+ return Logic;
104
+ }());
105
+ exports.CircleCache = Object.freeze({
106
+ get: function (globe) { return programcache_1.noRegisterGlobeProgramCache.getProgram(globe, Logic); },
107
+ release: function (globe) { return programcache_1.noRegisterGlobeProgramCache.releaseProgram(globe, Logic); }
108
+ });
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CircleCache = void 0;
4
+ var webglobjectbuilders_1 = require("../../util/webglobjectbuilders");
5
+ var camerauniformblock_1 = require("../totems/camerauniformblock");
6
+ var programcache_1 = require("../programcache");
7
+ var util_1 = require("../../util/account/util");
8
+ var geometrytransformations_1 = require("../../util/shaderfunctions/geometrytransformations");
9
+ /**
10
+ * TODO:
11
+ * 1. integrate geometry functions for radius angle and center
12
+ * 2. integrate attributes
13
+ *
14
+ * TODO:
15
+ * center_position is too small or doenst loaded as expected.
16
+ */
17
+ var EDGE_COUNT_ON_SPHERE = 360;
18
+ var vertexShaderSource = "#version 300 es\nprecision highp float;\n".concat(camerauniformblock_1.CameraUniformBlockString, "\n").concat(geometrytransformations_1.longLatRadToMercator, "\n").concat(geometrytransformations_1.longLatRadToCartesian3D, "\n").concat(geometrytransformations_1.cartesian3DToGLPosition, "\n").concat(geometrytransformations_1.mercatorXYToGLPosition, "\n").concat(geometrytransformations_1.realDistanceOnSphereR1, "\n").concat(geometrytransformations_1.circleLimpFromLongLatRadCenterCartesian3D, "\n").concat(geometrytransformations_1.circleLimpFromLongLatRadCenterMercatorCompass, "\n").concat(geometrytransformations_1.circleLimpFromLongLatRadCenterMercatorRealDistance, "\n\nuniform float edge_count;\n\nin vec2 center_position;\nin float radius;\nin vec4 color;\nin float dash_ratio;\nin float dash_opacity;\n\nout float interpolation;\nout vec4 v_color;\nout float v_dash_ratio;\nout float v_dash_opacity;\nout vec2 v_limp;\nvoid main() {\n interpolation = float( gl_VertexID ) / ").concat(EDGE_COUNT_ON_SPHERE, ".0;\n float angle = PI * 2.0 * interpolation;\n if ( is3D ) {\n vec3 position = circleLimpFromLongLatRadCenterCartesian3D( center_position, radius, angle);\n gl_Position = cartesian3DToGLPosition(position);\n v_limp = vec2(0.0, 0.0);\n } else {\n vec2 position;\n if (radius < 1400.0) {\n position = circleLimpFromLongLatRadCenterMercatorCompass( center_position, radius/ cos(center_position.y), angle);\n } else {\n position = circleLimpFromLongLatRadCenterMercatorRealDistance( center_position, radius, angle);\n }\n v_limp = position;\n gl_Position = mercatorXYToGLPosition( position);\n\n }\n v_dash_ratio = dash_ratio;\n v_dash_opacity = dash_opacity;\n v_color = color;\n\n}");
19
+ var fragmentShaderSource = "#version 300 es\n".concat(geometrytransformations_1.POLE, "\nprecision highp float;\nuniform float opacity;\nin vec4 v_color;\nin float v_dash_ratio;\nin float v_dash_opacity;\nin float interpolation;\nin vec2 v_limp;\nout vec4 color;\nvoid main() {\n if ( v_limp.x < -POLE || v_limp.x > POLE || v_limp.y < -POLE || v_limp.y > POLE ){ color = vec4(0.0,0.0,0.0,0.0); return; }\n color = v_color;\n color.a *= opacity;\n if ( v_dash_ratio == 1.0 || v_dash_ratio == 0.0 ) return;\n if (fract(interpolation / (2.0 * v_dash_ratio)) < 0.5 ) {\n color.a *= v_dash_opacity;\n } \n}\n");
20
+ var Logic = /** @class */ (function () {
21
+ function Logic(globe) {
22
+ this.globe = globe;
23
+ this.gl = globe.gl;
24
+ this._lastOpacity = 1.0;
25
+ this.program = (0, webglobjectbuilders_1.createProgram)(this.gl, vertexShaderSource, fragmentShaderSource);
26
+ var _a = this, gl = _a.gl, program = _a.program;
27
+ this.program.uniforms = {
28
+ opacity: gl.getUniformLocation(program, "opacity")
29
+ };
30
+ { // initial uniform values
31
+ var currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);
32
+ gl.useProgram(program);
33
+ gl.uniform1f(program.uniforms.opacity, 1.0);
34
+ gl.useProgram(currentProgram);
35
+ }
36
+ { // assign attribute locations
37
+ gl.bindAttribLocation(program, 0, "center_position");
38
+ gl.bindAttribLocation(program, 1, "radius");
39
+ gl.bindAttribLocation(program, 2, "color");
40
+ gl.bindAttribLocation(program, 3, "dash_ratio");
41
+ gl.bindAttribLocation(program, 4, "dash_opacity");
42
+ }
43
+ this.cameraBindingPoint = 0;
44
+ this.cameraBlockTotem = camerauniformblock_1.CameraUniformBlockTotemCache.get(globe);
45
+ var cameraBlockLocation = gl.getUniformBlockIndex(program, "CameraUniformBlock");
46
+ gl.uniformBlockBinding(program, cameraBlockLocation, this.cameraBindingPoint);
47
+ }
48
+ Logic.prototype.createVAO = function (centerObj, radiusObj, colorObj, dashRatioObj, dashOpacityObj) {
49
+ var gl = this.gl;
50
+ var vao = gl.createVertexArray();
51
+ var divisor = 1;
52
+ gl.bindVertexArray(vao);
53
+ { // make this a function end import from account module.
54
+ var buffer = centerObj.buffer, _a = centerObj.stride, stride = _a === void 0 ? 0 : _a, _b = centerObj.offset, offset = _b === void 0 ? 0 : _b;
55
+ (0, util_1.vaoAttributeLoader)(gl, buffer, 0, 2, stride, offset, divisor);
56
+ }
57
+ {
58
+ var buffer = radiusObj.buffer, _c = radiusObj.stride, stride = _c === void 0 ? 0 : _c, _d = radiusObj.offset, offset = _d === void 0 ? 0 : _d;
59
+ (0, util_1.vaoAttributeLoader)(gl, buffer, 1, 1, stride, offset, divisor);
60
+ }
61
+ {
62
+ var buffer = colorObj.buffer, _e = colorObj.stride, stride = _e === void 0 ? 0 : _e, _f = colorObj.offset, offset = _f === void 0 ? 0 : _f;
63
+ (0, util_1.vaoAttributeLoader)(gl, buffer, 2, 4, stride, offset, divisor);
64
+ }
65
+ {
66
+ var buffer = dashRatioObj.buffer, _g = dashRatioObj.stride, stride = _g === void 0 ? 0 : _g, _h = dashRatioObj.offset, offset = _h === void 0 ? 0 : _h;
67
+ (0, util_1.vaoAttributeLoader)(gl, buffer, 3, 1, stride, offset, divisor);
68
+ }
69
+ {
70
+ var buffer = dashOpacityObj.buffer, _j = dashOpacityObj.stride, stride = _j === void 0 ? 0 : _j, _k = dashOpacityObj.offset, offset = _k === void 0 ? 0 : _k;
71
+ (0, util_1.vaoAttributeLoader)(gl, buffer, 4, 1, stride, offset, divisor);
72
+ }
73
+ gl.bindVertexArray(null);
74
+ gl.bindVertexArray(null);
75
+ return vao;
76
+ };
77
+ Logic.prototype.draw = function (vao, length, opacity) {
78
+ var _a = this, gl = _a.gl, program = _a.program, cameraBlockTotem = _a.cameraBlockTotem, cameraBindingPoint = _a.cameraBindingPoint;
79
+ gl.useProgram(program);
80
+ if (this._lastOpacity !== opacity) {
81
+ gl.uniform1f(program.uniforms.opacity, opacity);
82
+ this._lastOpacity = opacity;
83
+ }
84
+ gl.bindVertexArray(vao);
85
+ cameraBlockTotem.bind(cameraBindingPoint);
86
+ gl.drawArraysInstanced(gl.LINE_STRIP, 0, EDGE_COUNT_ON_SPHERE + 1, length);
87
+ cameraBlockTotem.unbind(cameraBindingPoint);
88
+ gl.bindVertexArray(null);
89
+ };
90
+ Logic.prototype.free = function () {
91
+ if (this.isFreed)
92
+ return;
93
+ camerauniformblock_1.CameraUniformBlockTotemCache.release(this.globe);
94
+ this.gl.deleteProgram(this.program);
95
+ this.isFreed = true;
96
+ };
97
+ return Logic;
98
+ }());
99
+ exports.CircleCache = Object.freeze({
100
+ get: function (globe) { return programcache_1.noRegisterGlobeProgramCache.getProgram(globe, Logic); },
101
+ release: function (globe) { return programcache_1.noRegisterGlobeProgramCache.releaseProgram(globe, Logic); }
102
+ });