@pirireis/webglobeplugins 0.9.7 → 0.9.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (212) hide show
  1. package/dist/Math/angle-calculation.js +15 -0
  2. package/dist/Math/arc.js +65 -0
  3. package/dist/Math/bounds/line-bbox.js +188 -0
  4. package/dist/Math/constants.js +9 -0
  5. package/dist/Math/frustum/camera.js +24 -0
  6. package/dist/Math/frustum/from-globeinfo.js +48 -0
  7. package/dist/Math/frustum/types.js +2 -0
  8. package/dist/Math/globe-util/horizon-plane.js +112 -0
  9. package/dist/Math/index.js +1 -0
  10. package/dist/Math/juction/arc-plane.js +83 -0
  11. package/dist/Math/juction/line-sphere.js +25 -0
  12. package/dist/Math/juction/plane-plane.js +58 -0
  13. package/dist/Math/line.js +56 -0
  14. package/dist/Math/matrix4.js +1 -0
  15. package/dist/Math/methods.js +201 -0
  16. package/dist/Math/plane.js +60 -0
  17. package/dist/Math/quaternion.js +104 -0
  18. package/dist/Math/types.js +2 -0
  19. package/dist/Math/utils.js +4 -0
  20. package/dist/Math/vec3.js +126 -0
  21. package/dist/algorithms/search-binary.js +19 -0
  22. package/dist/altitude-locator/adaptors.js +1 -0
  23. package/dist/altitude-locator/draw-subset-obj.js +18 -0
  24. package/dist/altitude-locator/keymethod.js +1 -0
  25. package/dist/altitude-locator/plugin.js +341 -0
  26. package/dist/altitude-locator/types.js +23 -0
  27. package/dist/arrowfield/adaptor.js +14 -0
  28. package/dist/arrowfield/index.js +10 -0
  29. package/dist/arrowfield/plugin.js +86 -0
  30. package/dist/bearing-line/index.js +8 -0
  31. package/dist/bearing-line/plugin.js +449 -0
  32. package/dist/circle-line-chain/chain-list-map.js +205 -0
  33. package/dist/circle-line-chain/init.js +1 -0
  34. package/dist/circle-line-chain/plugin.js +424 -0
  35. package/dist/circle-line-chain/util.js +5 -0
  36. package/dist/compass-rose/compass-rose-padding-flat.js +225 -0
  37. package/dist/compass-rose/compass-text-writer.js +153 -0
  38. package/dist/compass-rose/index.js +7 -0
  39. package/dist/compassrose/compassrose.js +296 -0
  40. package/dist/compassrose/index.js +8 -0
  41. package/dist/globe-types.js +1 -0
  42. package/dist/heatwave/index.js +10 -0
  43. package/dist/heatwave/isobar/objectarraylabels.js +202 -0
  44. package/dist/heatwave/isobar/plugin.js +343 -0
  45. package/dist/heatwave/isobar/quadtreecontours.js +300 -0
  46. package/dist/heatwave/plugins/heatwaveglobeshell.js +206 -0
  47. package/dist/index.js +58 -0
  48. package/dist/jest.config.js +7 -0
  49. package/dist/partialrings/buffer-manager.js +81 -0
  50. package/dist/partialrings/index.js +41 -0
  51. package/dist/partialrings/plugin.js +135 -0
  52. package/dist/partialrings/program.js +286 -0
  53. package/dist/pin/pin-object-array.js +305 -0
  54. package/dist/pin/pin-point-totem.js +60 -0
  55. package/dist/point-heat-map/adaptors/timetracksplugin-format-to-this.js +66 -0
  56. package/dist/point-heat-map/index.js +1 -0
  57. package/dist/point-heat-map/plugin-webworker.js +126 -0
  58. package/dist/point-heat-map/point-to-heat-map-flow.js +127 -0
  59. package/dist/point-tracks/key-methods.js +5 -0
  60. package/dist/point-tracks/plugin.js +338 -0
  61. package/dist/programs/arrowfield/index.js +7 -0
  62. package/dist/programs/arrowfield/logic.js +257 -0
  63. package/dist/programs/arrowfield/object.js +66 -0
  64. package/dist/programs/data2legend/density-to-legend.js +101 -0
  65. package/dist/programs/data2legend/point-to-density-texture.js +100 -0
  66. package/dist/programs/float2legendwithratio/index.js +8 -0
  67. package/dist/programs/float2legendwithratio/logic.js +171 -0
  68. package/dist/programs/float2legendwithratio/object.js +110 -0
  69. package/dist/programs/globe-util/is-globe-moved.js +21 -0
  70. package/dist/programs/globeshell/index.js +8 -0
  71. package/dist/programs/globeshell/noise/noises.js +1 -0
  72. package/dist/programs/globeshell/wiggle/index.js +8 -0
  73. package/dist/programs/globeshell/wiggle/logic.js +345 -0
  74. package/dist/programs/globeshell/wiggle/object.js +72 -0
  75. package/dist/programs/helpers/blender/index.js +1 -0
  76. package/dist/programs/helpers/blender/program.js +79 -0
  77. package/dist/programs/helpers/fadeaway/index.js +7 -0
  78. package/dist/programs/helpers/fadeaway/logic.js +72 -0
  79. package/dist/programs/helpers/fadeaway/object.js +20 -0
  80. package/dist/programs/helpers/index.js +8 -0
  81. package/dist/programs/index.js +58 -0
  82. package/dist/programs/interface.js +1 -0
  83. package/dist/programs/line-on-globe/angled-line.js +176 -0
  84. package/dist/programs/line-on-globe/circle-accurate-3d.js +141 -0
  85. package/dist/programs/line-on-globe/circle-accurate-flat.js +216 -0
  86. package/dist/programs/line-on-globe/circle-accurate.js +178 -0
  87. package/dist/programs/line-on-globe/circle.js +167 -0
  88. package/dist/programs/line-on-globe/degree-padding-around-circle-3d.js +159 -0
  89. package/dist/programs/line-on-globe/index.js +1 -0
  90. package/dist/programs/line-on-globe/lines-color-instanced-flat.js +136 -0
  91. package/dist/programs/line-on-globe/linestrip.js +171 -0
  92. package/dist/programs/line-on-globe/naive-accurate-flexible.js +195 -0
  93. package/dist/programs/line-on-globe/to-the-surface.js +111 -0
  94. package/dist/programs/line-on-globe/util.js +8 -0
  95. package/dist/programs/picking/pickable-renderer.js +188 -0
  96. package/dist/programs/point-on-globe/element-globe-surface-glow.js +142 -0
  97. package/dist/programs/point-on-globe/element-point-glow.js +153 -0
  98. package/dist/programs/point-on-globe/square-pixel-point.js +174 -0
  99. package/dist/programs/programcache.js +131 -0
  100. package/dist/programs/rings/distancering/circleflatprogram.js +156 -0
  101. package/dist/programs/rings/distancering/circlepaddingfreeangleprogram.js +369 -0
  102. package/dist/programs/rings/distancering/circlepaddysharedbuffer.js +357 -0
  103. package/dist/programs/rings/distancering/index.js +14 -0
  104. package/dist/programs/rings/distancering/paddyflatprogram.js +172 -0
  105. package/dist/programs/rings/distancering/paddyflatprogram2d.js +174 -0
  106. package/dist/programs/rings/distancering/paddyflatprogram3d.js +172 -0
  107. package/dist/programs/rings/distancering/shader.js +1 -0
  108. package/dist/programs/rings/index.js +17 -0
  109. package/dist/programs/rings/partial-ring/piece-of-pie.js +275 -0
  110. package/dist/programs/totems/camerauniformblock.js +160 -0
  111. package/dist/programs/totems/canvas-webglobe-info.js +110 -0
  112. package/dist/programs/totems/gpu-selection-uniform-block.js +108 -0
  113. package/dist/programs/totems/index.js +40 -0
  114. package/dist/programs/two-d/pixel-circle.js +1 -0
  115. package/dist/programs/two-d/pixel-padding-for-compass.js +162 -0
  116. package/dist/programs/util.js +17 -0
  117. package/dist/programs/vectorfields/index.js +23 -0
  118. package/dist/programs/vectorfields/logics/drawrectangleparticles.js +107 -0
  119. package/dist/programs/vectorfields/logics/index.js +12 -0
  120. package/dist/programs/vectorfields/logics/pixelbased.js +142 -0
  121. package/dist/programs/vectorfields/logics/ubo.js +63 -0
  122. package/dist/programs/vectorfields/pingpongbuffermanager.js +76 -0
  123. package/dist/rangerings/enum.js +5 -0
  124. package/dist/rangerings/index.js +15 -0
  125. package/dist/rangerings/plugin.js +560 -0
  126. package/dist/rangerings/rangeringangletext.js +329 -0
  127. package/dist/rangerings/ring-account.js +117 -0
  128. package/dist/shaders/fragment-toy/firework.js +58 -0
  129. package/dist/shaders/fragment-toy/singularity.js +59 -0
  130. package/dist/shape-on-terrain/arc/naive/plugin.js +252 -0
  131. package/dist/timetracks/adaptors-line-strip.js +71 -0
  132. package/dist/timetracks/adaptors.js +122 -0
  133. package/dist/timetracks/index.js +19 -0
  134. package/dist/timetracks/plugin-line-strip.js +250 -0
  135. package/dist/timetracks/plugin.js +258 -0
  136. package/dist/timetracks/program-line-strip.js +611 -0
  137. package/dist/timetracks/program.js +772 -0
  138. package/dist/timetracks/programpoint-line-strip.js +154 -0
  139. package/dist/timetracks/programpoint.js +147 -0
  140. package/dist/types.js +15 -0
  141. package/dist/util/account/bufferoffsetmanager.js +179 -0
  142. package/dist/util/account/index.js +23 -0
  143. package/dist/util/account/single-attribute-buffer-management/buffer-manager.js +108 -0
  144. package/dist/util/account/single-attribute-buffer-management/buffer-orchestrator.js +150 -0
  145. package/dist/util/account/single-attribute-buffer-management/index.js +9 -0
  146. package/dist/util/account/single-attribute-buffer-management/object-store.js +51 -0
  147. package/dist/util/account/single-attribute-buffer-management/types.js +2 -0
  148. package/dist/util/account/util.js +22 -0
  149. package/dist/util/algorithms/index.js +1 -0
  150. package/dist/util/algorithms/search-binary.js +28 -0
  151. package/dist/util/check/get.js +18 -0
  152. package/dist/util/check/index.js +1 -0
  153. package/dist/util/check/typecheck.js +49 -0
  154. package/dist/util/geometry/index.js +51 -0
  155. package/dist/util/gl-util/buffer/attribute-loader.js +69 -0
  156. package/dist/util/gl-util/buffer/index.js +6 -0
  157. package/dist/util/gl-util/buffer/types.js +1 -0
  158. package/dist/util/gl-util/draw-options/methods.js +38 -0
  159. package/dist/util/gl-util/draw-options/types.js +15 -0
  160. package/dist/util/gl-util/uniform-block/manager.js +156 -0
  161. package/dist/util/gl-util/uniform-block/shader.js +1 -0
  162. package/dist/util/gl-util/uniform-block/types.js +8 -0
  163. package/dist/util/heatwavedatamanager/datamanager.js +152 -0
  164. package/dist/util/heatwavedatamanager/index.js +10 -0
  165. package/dist/util/heatwavedatamanager/pointcoordinatesdatacalculator.js +122 -0
  166. package/dist/util/heatwavedatamanager/pointcoordsmeta.js +20 -0
  167. package/dist/util/index.js +57 -0
  168. package/dist/util/interpolation/index.js +1 -0
  169. package/dist/util/interpolation/timetrack/index.js +5 -0
  170. package/dist/util/interpolation/timetrack/timetrack-interpolator.js +79 -0
  171. package/dist/util/interpolation/timetrack/web-worker-str.js +183 -0
  172. package/dist/util/interpolation/timetrack/web-worker.js +48 -0
  173. package/dist/util/jshelpers/data-filler.js +20 -0
  174. package/dist/util/jshelpers/equality.js +20 -0
  175. package/dist/util/jshelpers/index.js +37 -0
  176. package/dist/util/jshelpers/timefilters.js +32 -0
  177. package/dist/util/picking/fence.js +46 -0
  178. package/dist/util/picking/picker-displayer.js +139 -0
  179. package/dist/util/programs/draw-texture-on-canvas.js +89 -0
  180. package/dist/util/programs/index.js +17 -0
  181. package/dist/util/programs/shapesonglobe.js +214 -0
  182. package/dist/util/programs/supersampletotextures.js +113 -0
  183. package/dist/util/programs/texturetoglobe.js +182 -0
  184. package/dist/util/shaderfunctions/geometrytransformations.js +340 -0
  185. package/dist/util/shaderfunctions/index.js +18 -0
  186. package/dist/util/shaderfunctions/nodata.js +11 -0
  187. package/dist/util/shaderfunctions/noisefunctions.js +43 -0
  188. package/dist/util/surface-line-data/arc-bboxes.js +25 -0
  189. package/dist/util/surface-line-data/arcs-to-cuts.js +50 -0
  190. package/dist/util/surface-line-data/cut-arc.js +1 -0
  191. package/dist/util/surface-line-data/flow.js +28 -0
  192. package/dist/util/surface-line-data/rbush-manager.js +1 -0
  193. package/dist/util/surface-line-data/types.js +1 -0
  194. package/dist/util/surface-line-data/web-worker.js +1 -0
  195. package/dist/util/webglobe/gldefaultstates.js +7 -0
  196. package/dist/util/webglobe/index.js +18 -0
  197. package/dist/util/webglobe/rasteroverlay.js +78 -0
  198. package/dist/util/webglobjectbuilders.js +388 -0
  199. package/dist/util/webglobjectbuilders1.js +237 -0
  200. package/dist/waveparticles/adaptor.js +17 -0
  201. package/dist/waveparticles/index.js +10 -0
  202. package/dist/waveparticles/plugin.js +266 -0
  203. package/dist/wind/imagetovectorfieldandmagnitude.js +35 -0
  204. package/dist/wind/index.js +14 -0
  205. package/dist/wind/plugin.js +926 -0
  206. package/dist/wind/vectorfieldimage.js +25 -0
  207. package/dist/write-text/attached-text-writer.js +91 -0
  208. package/dist/write-text/context-text.js +98 -0
  209. package/dist/write-text/context-text3.js +155 -0
  210. package/dist/write-text/index.js +5 -0
  211. package/dist/write-text/writer-plugin.js +8 -0
  212. package/package.json +1 -1
@@ -0,0 +1,171 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const util_1 = require("../../util");
4
+ class default_1 {
5
+ constructor(gl) {
6
+ this.gl = gl;
7
+ // console.log("Float2LegendWithRatioProgram gl:", gl);
8
+ this._width = 1;
9
+ this._height = 1;
10
+ this._blendRatio = 0.0;
11
+ this.programWrapper = this._createProgramWrapper();
12
+ }
13
+ _createProgramWrapper() {
14
+ const vertexShaderSource = `#version 300 es
15
+ precision highp float;
16
+
17
+ in vec2 a_position;
18
+ out vec2 v_texcoord;
19
+
20
+ void main() {
21
+ gl_Position = vec4(a_position, 0.0, 1.0);
22
+ v_texcoord = a_position * 0.5 + 0.5;
23
+ v_texcoord.y = 1.0 - v_texcoord.y;
24
+ }
25
+ `;
26
+ const fragmentShaderSource = `#version 300 es
27
+ precision highp float;
28
+
29
+ in vec2 v_texcoord;
30
+ uniform sampler2D u_float_texture0;
31
+ uniform sampler2D u_float_texture1;
32
+ uniform sampler2D u_color_texture;
33
+
34
+ layout(std140) uniform HeatParametersBlock {
35
+ vec2 u_color_ramp_range; // x is min, y is range ( max - min)
36
+ vec2 u_min_max;
37
+ float u_escape_value;
38
+ float u_blend_ratio;
39
+ };
40
+
41
+ out vec4 outColor;
42
+
43
+ void main() {
44
+ if ( u_blend_ratio < 0.0) {
45
+ outColor = vec4(0.0, 0.0, 0.0, 0.0);
46
+ return;
47
+ }
48
+ float f0 = texture(u_float_texture0, v_texcoord).r;
49
+ float f1 = texture(u_float_texture1, v_texcoord).r;
50
+ // outColor = vec4(
51
+
52
+ if (f0 == u_escape_value || f1 == u_escape_value) {
53
+ outColor = vec4(0.0, 0.0, 0.0, 0.0);
54
+ return;
55
+ }
56
+ float x = mix(f0, f1, u_blend_ratio);
57
+ if ( x < u_min_max.x || x > u_min_max.y) {
58
+ outColor = vec4(0.0, 0.0, 0.0, 0.0);
59
+ return;
60
+ }
61
+ x = (x - u_color_ramp_range.x) / u_color_ramp_range.y;
62
+ outColor = texture(u_color_texture, vec2(x, 0.5));
63
+ }
64
+ `;
65
+ const gl = this.gl;
66
+ const program = (0, util_1.createProgram)(gl, vertexShaderSource, fragmentShaderSource);
67
+ const vao = gl.createVertexArray();
68
+ gl.bindVertexArray(vao);
69
+ const buffer = gl.createBuffer();
70
+ this._buffer = buffer;
71
+ gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
72
+ gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([
73
+ -1, -1,
74
+ 1, -1,
75
+ 1, 1,
76
+ -1, 1
77
+ ]), gl.STATIC_DRAW);
78
+ const positionLocation = gl.getAttribLocation(program, "a_position");
79
+ gl.enableVertexAttribArray(positionLocation);
80
+ gl.vertexAttribPointer(positionLocation, 2, gl.FLOAT, false, 0, 0);
81
+ gl.bindVertexArray(null);
82
+ this.heatParametersBlockBindingPoint = 0;
83
+ const heatParametersBlockIndex = gl.getUniformBlockIndex(program, "HeatParametersBlock");
84
+ gl.uniformBlockBinding(program, heatParametersBlockIndex, this.heatParametersBlockBindingPoint);
85
+ return {
86
+ program,
87
+ vao,
88
+ u_float_texture0: gl.getUniformLocation(program, "u_float_texture0"),
89
+ u_float_texture1: gl.getUniformLocation(program, "u_float_texture1"),
90
+ u_color_texture: gl.getUniformLocation(program, "u_color_texture"),
91
+ u_blend_ratio: gl.getUniformLocation(program, "u_blend_ratio"),
92
+ u_color_ramp_range: gl.getUniformLocation(program, "u_color_ramp_range"),
93
+ u_min_max: gl.getUniformLocation(program, "u_min_max"),
94
+ u_escape_value: gl.getUniformLocation(program, "u_escape_value")
95
+ };
96
+ }
97
+ getUniformBlockManager() {
98
+ return new HeatParametersBlockManager(this.gl);
99
+ }
100
+ draw(texture0, texture1, colorRampTexture, heatParametersBlockManager) {
101
+ const { gl, programWrapper } = this;
102
+ const { program, u_float_texture0, u_float_texture1, u_color_texture } = programWrapper;
103
+ gl.useProgram(program);
104
+ gl.bindVertexArray(programWrapper.vao);
105
+ gl.activeTexture(gl.TEXTURE1);
106
+ gl.bindTexture(gl.TEXTURE_2D, texture1);
107
+ gl.uniform1i(u_float_texture1, 1);
108
+ gl.activeTexture(gl.TEXTURE2);
109
+ gl.bindTexture(gl.TEXTURE_2D, colorRampTexture);
110
+ gl.uniform1i(u_color_texture, 2);
111
+ gl.activeTexture(gl.TEXTURE0);
112
+ gl.bindTexture(gl.TEXTURE_2D, texture0);
113
+ gl.uniform1i(u_float_texture0, 0);
114
+ heatParametersBlockManager.bind();
115
+ // clear output texture
116
+ gl.clearColor(0, 0, 0, 0);
117
+ gl.drawArrays(gl.TRIANGLE_FAN, 0, 4);
118
+ gl.bindVertexArray(null);
119
+ heatParametersBlockManager.unbind();
120
+ }
121
+ free() {
122
+ const gl = this.gl;
123
+ gl.deleteBuffer(this._buffer);
124
+ gl.deleteProgram(this.programWrapper.program);
125
+ gl.deleteVertexArray(this.programWrapper.vao);
126
+ }
127
+ }
128
+ exports.default = default_1;
129
+ class HeatParametersBlockManager {
130
+ constructor(gl) {
131
+ this.gl = gl;
132
+ this.buffer = gl.createBuffer();
133
+ gl.bindBuffer(gl.UNIFORM_BUFFER, this.buffer);
134
+ gl.bufferData(gl.UNIFORM_BUFFER, 24, gl.DYNAMIC_DRAW);
135
+ gl.bindBuffer(gl.UNIFORM_BUFFER, null);
136
+ }
137
+ /*
138
+ * @param {Array<number>} color_ramp_range [minValue,( maxValue - minValue)]
139
+ * @param {Array<number>} min_max [minEdge, maxEdge]
140
+ * @param {number} escape_value // value that will be ignored
141
+ * @param {number} blend_ratio // ratio of blending between two textures
142
+ * */
143
+ update({ color_ramp_range = null, min_max = null, escape_value = null, blend_ratio = null }) {
144
+ const { gl, buffer } = this;
145
+ gl.bindBuffer(gl.UNIFORM_BUFFER, buffer);
146
+ if (color_ramp_range) {
147
+ gl.bufferSubData(gl.UNIFORM_BUFFER, 0, new Float32Array(color_ramp_range));
148
+ }
149
+ if (min_max) {
150
+ gl.bufferSubData(gl.UNIFORM_BUFFER, 8, new Float32Array(min_max));
151
+ }
152
+ if (escape_value) {
153
+ gl.bufferSubData(gl.UNIFORM_BUFFER, 16, new Float32Array([escape_value]));
154
+ }
155
+ if (blend_ratio) {
156
+ gl.bufferSubData(gl.UNIFORM_BUFFER, 20, new Float32Array([blend_ratio]));
157
+ }
158
+ gl.bindBuffer(gl.UNIFORM_BUFFER, null);
159
+ }
160
+ bind() {
161
+ const { gl, buffer } = this;
162
+ gl.bindBufferBase(gl.UNIFORM_BUFFER, this.heatParametersBlockBindingPoint, buffer);
163
+ }
164
+ free() {
165
+ this.gl.deleteBuffer(this.buffer);
166
+ }
167
+ unbind() {
168
+ const { gl } = this;
169
+ gl.bindBufferBase(gl.UNIFORM_BUFFER, this.heatParametersBlockBindingPoint, null);
170
+ }
171
+ }
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const logic_1 = __importDefault(require("./logic"));
7
+ const programcache_1 = require("../programcache");
8
+ // Uniform Buffer Objects use this
9
+ class DataObject {
10
+ constructor(gl, { width = 1, height = 1, texture0 = null, texture1 = null, colorRampTexture = null, colorRampRange = null, escapeValue = 99999, blendRatio = 0.0, minMaxEdges = null, } = {}) {
11
+ this.gl = gl;
12
+ this.programlogic = programcache_1.glProgramCache.getProgram(gl, logic_1.default);
13
+ this.heatParametersBlockManager = this.programlogic.getUniformBlockManager();
14
+ this.width = width;
15
+ this.height = height;
16
+ this.texture0 = texture0 || this._createColorRampTexture(width, height);
17
+ this.texture1 = texture1 || this._createColorRampTexture(width, height);
18
+ this.colorRampTexture = colorRampTexture || this._createColorRampTexture();
19
+ this.minMaxEdges = minMaxEdges || new Float32Array([-99999, 99999]);
20
+ this.heatParametersBlockManager.update({
21
+ escape_value: escapeValue,
22
+ blend_ratio: blendRatio,
23
+ min_max: minMaxEdges,
24
+ color_ramp_range: colorRampRange
25
+ });
26
+ }
27
+ _bindBlock() {
28
+ const gl = this.gl;
29
+ const program = this.programlogic.programWrapper.program;
30
+ gl.uniformBlockBinding(program, gl.getUniformBlockIndex(program, 'Block'), 0);
31
+ }
32
+ _createColorRampTexture() {
33
+ const { gl } = this;
34
+ const texture = gl.createTexture();
35
+ gl.bindTexture(gl.TEXTURE_2D, texture);
36
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
37
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
38
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
39
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
40
+ gl.bindTexture(gl.TEXTURE_2D, null);
41
+ return texture;
42
+ }
43
+ setBlendRatio(ratio) {
44
+ if (ratio < 0 || ratio > 1) {
45
+ console.warn('Invalid blend ratio');
46
+ return;
47
+ }
48
+ this.heatParametersBlockManager.update({ blend_ratio: ratio });
49
+ }
50
+ setEscapeValue(value) {
51
+ this.heatParametersBlockManager.update({ escape_value: value });
52
+ }
53
+ setTexture0(texture) {
54
+ this.texture0 = texture;
55
+ }
56
+ setTexture1(texture) {
57
+ this.texture1 = texture;
58
+ }
59
+ setColorRampTexture(texture) {
60
+ this.colorRampTexture = texture;
61
+ }
62
+ setDataWidthHeight(width, height) {
63
+ this.width = width;
64
+ this.height = height;
65
+ }
66
+ setFloatTextureData(data0, data1, width, height, yFlip = false) {
67
+ const { texture0, texture1, gl } = this;
68
+ gl.bindTexture(gl.TEXTURE_2D, texture0);
69
+ gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, yFlip);
70
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.R16F, width, height, 0, gl.RED, gl.FLOAT, data0);
71
+ gl.bindTexture(gl.TEXTURE_2D, texture1);
72
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.R16F, width, height, 0, gl.RED, gl.FLOAT, data1);
73
+ gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);
74
+ }
75
+ discard() {
76
+ this.heatParametersBlockManager.update({ blend_ratio: -1 });
77
+ }
78
+ setColorRampTextureData(data, size) {
79
+ const { gl, colorRampTexture } = this;
80
+ gl.bindTexture(gl.TEXTURE_2D, colorRampTexture);
81
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, size, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, data);
82
+ }
83
+ setColorRampRange(min, max) {
84
+ if (min > max) {
85
+ console.warn('Invalid min max values');
86
+ return;
87
+ }
88
+ const range = max - min;
89
+ this.heatParametersBlockManager.update({ color_ramp_range: new Float32Array([min, range]) });
90
+ }
91
+ setMinMaxEdges(min, max) {
92
+ if (min)
93
+ this.minMaxEdges[0] = min;
94
+ if (max)
95
+ this.minMaxEdges[1] = max;
96
+ this.heatParametersBlockManager.update({ min_max: this.minMaxEdges });
97
+ }
98
+ draw() {
99
+ this.programlogic.draw(this.texture0, this.texture1, this.colorRampTexture, this.heatParametersBlockManager);
100
+ }
101
+ free() {
102
+ const { gl, texture0, texture1, colorRampTexture } = this;
103
+ gl.deleteTexture(texture0);
104
+ gl.deleteTexture(texture1);
105
+ gl.deleteTexture(colorRampTexture);
106
+ programcache_1.glProgramCache.releaseProgram(this.gl, logic_1.default);
107
+ this.heatParametersBlockManager.free();
108
+ }
109
+ }
110
+ exports.default = DataObject;
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const programcache_1 = require("../programcache");
4
+ class IsGlobeMoved {
5
+ constructor(globe) {
6
+ this.globe = globe;
7
+ this._lastLOD = globe.api_GetCurrentLODWithDecimal();
8
+ }
9
+ isMoved() {
10
+ const globe = this.globe;
11
+ if (globe.api_IsScreenMoving() || this._lastLOD != globe.api_GetCurrentLODWithDecimal()) {
12
+ this._lastLOD = globe.api_GetCurrentLODWithDecimal();
13
+ return true;
14
+ }
15
+ return false;
16
+ }
17
+ }
18
+ const IsGlobeMovedCache = Object.freeze({
19
+ get: (globe) => programcache_1.noRegisterGlobeProgramCache.getProgram(globe, IsGlobeMoved),
20
+ release: (globe) => programcache_1.noRegisterGlobeProgramCache.releaseProgram(globe, IsGlobeMoved)
21
+ });
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.GlobeShellWiggle = void 0;
7
+ const wiggle_1 = __importDefault(require("./globeshell/wiggle"));
8
+ exports.GlobeShellWiggle = wiggle_1.default;
@@ -0,0 +1 @@
1
+ "use strict";
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.GlobeShellWiggle = void 0;
7
+ const object_1 = __importDefault(require("./object"));
8
+ exports.GlobeShellWiggle = object_1.default;
@@ -0,0 +1,345 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const util_1 = require("../../../util");
4
+ class Logic {
5
+ constructor() {
6
+ this.id = "GlobeShellProgram";
7
+ this.description = "This program implements flyweight pattern for globe." +
8
+ "At globes draw3D call stack, this program should be prior to any program that uses it." +
9
+ "draw3D method of this object only sets Projetion, ModelView and Translate matrices and if the mode is 2D mapWH .";
10
+ }
11
+ init(globe, gl) {
12
+ this.gl = gl;
13
+ this.globe = globe;
14
+ this.programWrapper = this._createProgramWrapper();
15
+ this._transformArray = new Float32Array(3);
16
+ this.setGeometry();
17
+ this.resize();
18
+ this.updateTime(0);
19
+ this.setMesh({ xRes: 64, yRes: 64, eastWestTied: false });
20
+ }
21
+ _createProgramWrapper() {
22
+ const vertexShader = `#version 300 es
23
+ #define R 6378.137
24
+ #define PI 3.1415926535897932384626433832795
25
+ #define POLE 20037508.34
26
+ #define POLE_BY_PI 6366198.2
27
+ #define HALF_PI 1.5707963267948966192313216916398
28
+
29
+ uniform vec2 u_mesh_resolution;
30
+
31
+ layout(std140) uniform ShellBlock {
32
+ vec2 u_grid_offset_rad;
33
+ vec2 u_grid_size_rad;
34
+ float u_height;
35
+ float u_wiggle;
36
+ float u_time;
37
+ float u_opacity;
38
+ };
39
+
40
+ uniform mat4 u_model_view_matrix;
41
+ uniform mat4 u_projection_matrix;
42
+ uniform vec3 u_translate;
43
+
44
+ uniform vec2 u_mapWH;
45
+ uniform vec2 u_scrWH;
46
+
47
+ uniform bool u_is3D;
48
+
49
+ out float v_opacity;
50
+ out vec2 v_texture_coordinate;
51
+
52
+ vec2 f_texCoord(){
53
+
54
+ float x = mod( float(gl_VertexID), u_mesh_resolution.x ) / ( u_mesh_resolution.x - 1.0);
55
+ float y = floor( float(gl_VertexID) / u_mesh_resolution.x ) / ( u_mesh_resolution.y - 1.0);
56
+ return vec2(x, y);
57
+ //return vec2( fract( float(gl_VertexID) / u_mesh_resolution.x ), floor(float(gl_VertexID) / u_mesh_resolution.x) / u_mesh_resolution.y);
58
+ }
59
+
60
+ vec3 f_onSphere(vec2 texCoord){
61
+ float vert = (texCoord.y * u_grid_size_rad.y ) + u_grid_offset_rad.y;
62
+ float hor = (texCoord.x * u_grid_size_rad.x ) + u_grid_offset_rad.x;
63
+ float x = sin(vert) * cos(hor);
64
+ float y = sin(vert) * sin(hor);
65
+ float z = cos(vert);
66
+ return vec3(x, y, z);
67
+ }
68
+
69
+ vec2 f_onFlat(vec2 texCoord){
70
+ float x = (texCoord.x * u_grid_size_rad.x ) + u_grid_offset_rad.x;
71
+ float y = (texCoord.y * u_grid_size_rad.y ) + u_grid_offset_rad.y;
72
+
73
+
74
+ float mercX = x * POLE_BY_PI;
75
+ float mercY = log(tan(HALF_PI - y / 2.0 )) * POLE_BY_PI;
76
+
77
+ float normX = ( mercX - u_translate.x ) / u_mapWH.x;
78
+ float normY = ( mercY - u_translate.y ) / u_mapWH.y;
79
+ return vec2(normX, normY);
80
+ }
81
+
82
+ vec3 f_position(vec3 unit_sphere_pos, float wiggle){
83
+ return unit_sphere_pos * (R + u_height + wiggle);
84
+ }
85
+
86
+ float f_wiggle(vec2 texCoord){
87
+ float s_contrib = 0.6*sin(texCoord.x*2.0*PI + 3.0*u_time);
88
+ float t_contrib = 0.8*cos(texCoord.y*4.1 + 5.0*u_time);
89
+ return u_wiggle * s_contrib * t_contrib * sin(texCoord.y*PI*2.0);
90
+ }
91
+
92
+ void main() {
93
+ vec2 texCoord = f_texCoord();
94
+ if (u_is3D){
95
+ vec3 unit_sphere_pos = f_onSphere(texCoord);
96
+ float wiggle = f_wiggle(texCoord);
97
+ vec3 position = f_position(unit_sphere_pos, wiggle);
98
+ gl_Position = u_projection_matrix * u_model_view_matrix * vec4(position - u_translate, 1.0);
99
+ } else {
100
+ vec2 position = f_onFlat(texCoord);
101
+ gl_Position = u_projection_matrix * vec4(
102
+ position.x * u_scrWH.x,
103
+ (1.0 - position.y) * u_scrWH.y,
104
+ 0.0,
105
+ 1.0);
106
+ }
107
+ v_texture_coordinate = texCoord;
108
+ v_opacity = u_opacity;
109
+ }
110
+ `;
111
+ const fragmentShader = `#version 300 es
112
+ precision lowp float;
113
+ in vec2 v_texture_coordinate;
114
+ in float v_opacity;
115
+ uniform sampler2D u_texture;
116
+ out vec4 outColor;
117
+
118
+
119
+ void main() {
120
+ outColor = texture(u_texture, v_texture_coordinate);
121
+ outColor.a *= v_opacity;
122
+ }`;
123
+ const gl = this.gl;
124
+ const program = (0, util_1.createProgram)(gl, vertexShader, fragmentShader);
125
+ const currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);
126
+ gl.useProgram(program);
127
+ this.shellBlockBindingPoint = 0;
128
+ const shellBlockIndex = gl.getUniformBlockIndex(program, "ShellBlock");
129
+ gl.uniformBlockBinding(program, shellBlockIndex, this.shellBlockBindingPoint);
130
+ gl.useProgram(currentProgram);
131
+ return {
132
+ program,
133
+ u_model_view_matrix: gl.getUniformLocation(program, "u_model_view_matrix"),
134
+ u_projection_matrix: gl.getUniformLocation(program, "u_projection_matrix"),
135
+ u_translate: gl.getUniformLocation(program, "u_translate"),
136
+ u_is3D: gl.getUniformLocation(program, "u_is3D"),
137
+ u_scrWH: gl.getUniformLocation(program, "u_scrWH"),
138
+ u_mapWH: gl.getUniformLocation(program, "u_mapWH"),
139
+ u_texture: gl.getUniformLocation(program, "u_texture"),
140
+ u_mesh_resolution: gl.getUniformLocation(program, "u_mesh_resolution"),
141
+ };
142
+ }
143
+ // this method implements data part of flyweight pattern
144
+ getShellBlockBufferManager() {
145
+ return new ShellBlockManager(this.gl);
146
+ }
147
+ updateTime(time) {
148
+ const { gl, programWrapper } = this;
149
+ const currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);
150
+ gl.useProgram(programWrapper.program);
151
+ gl.uniform1f(this.programWrapper.u_time, time);
152
+ gl.useProgram(currentProgram);
153
+ }
154
+ setRotationAndTranslation(uProjectionMatrix, uModelViewMatrix, uTranslate, resetCurrentProgram = false) {
155
+ const gl = this.gl;
156
+ let currentProgram = null;
157
+ if (resetCurrentProgram) {
158
+ currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);
159
+ }
160
+ ;
161
+ gl.useProgram(this.programWrapper.program);
162
+ gl.uniformMatrix4fv(this.programWrapper.u_projection_matrix, false, uProjectionMatrix);
163
+ gl.uniformMatrix4fv(this.programWrapper.u_model_view_matrix, false, uModelViewMatrix);
164
+ this._transformArray.set([uTranslate.x, uTranslate.y, uTranslate.z], 0);
165
+ gl.uniform3fv(this.programWrapper.u_translate, this._transformArray);
166
+ if (resetCurrentProgram)
167
+ gl.useProgram(currentProgram);
168
+ }
169
+ setGeometry() {
170
+ const { globe, gl } = this;
171
+ const { u_is3D, u_scrWH, program } = this.programWrapper;
172
+ const currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);
173
+ const is3D = this.globe.api_GetCurrentGeometry() === 0;
174
+ gl.useProgram(program);
175
+ if (globe.api_GetCurrentGeometry() === globe.api_GeometryTypes().FLAT) {
176
+ gl.uniform2f(u_scrWH, globe.api_ScrW(), globe.api_ScrH());
177
+ }
178
+ gl.uniform1i(u_is3D, is3D);
179
+ gl.useProgram(currentProgram);
180
+ }
181
+ resize() {
182
+ const { gl, globe } = this;
183
+ if (!globe)
184
+ return;
185
+ const { program, u_scrWH } = this.programWrapper;
186
+ const currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);
187
+ gl.useProgram(program);
188
+ if (globe.api_GetCurrentGeometry() === globe.api_GeometryTypes().FLAT) {
189
+ gl.uniform2f(u_scrWH, globe.api_ScrW(), globe.api_ScrH());
190
+ }
191
+ gl.useProgram(currentProgram);
192
+ }
193
+ // only sets data does not draw
194
+ draw3D(uProjectionMatrix, uModelViewMatrix, uTranslate) {
195
+ const { gl, globe } = this;
196
+ const { program, u_model_view_matrix, u_projection_matrix, u_translate } = this.programWrapper;
197
+ gl.disable(gl.DEPTH_TEST);
198
+ gl.useProgram(program);
199
+ gl.uniformMatrix4fv(u_projection_matrix, false, uProjectionMatrix);
200
+ gl.uniformMatrix4fv(u_model_view_matrix, false, uModelViewMatrix);
201
+ // this._transformArray.set([], 0);
202
+ gl.uniform3f(u_translate, uTranslate.x, uTranslate.y, uTranslate.z);
203
+ if (globe.api_GetCurrentGeometry() === 1) {
204
+ const { width, height } = globe.api_GetCurrentWorldWH();
205
+ gl.uniform2fv(this.programWrapper.u_mapWH, [width, height]);
206
+ }
207
+ gl.enable(gl.DEPTH_TEST);
208
+ }
209
+ draw(texture, shellBlockDataManager, drawLines = false) {
210
+ const { gl, programWrapper, _vao, _drawCount } = this;
211
+ const { program, u_texture } = programWrapper;
212
+ gl.useProgram(program);
213
+ gl.bindVertexArray(_vao);
214
+ gl.activeTexture(gl.TEXTURE0);
215
+ gl.bindTexture(gl.TEXTURE_2D, texture);
216
+ gl.uniform1i(u_texture, 0);
217
+ shellBlockDataManager.bind();
218
+ if (drawLines)
219
+ gl.drawElements(gl.LINES, _drawCount, gl.UNSIGNED_SHORT, 0);
220
+ gl.clearColor(0, 0, 0, 0);
221
+ gl.drawElements(gl.TRIANGLES, _drawCount, gl.UNSIGNED_SHORT, 0);
222
+ shellBlockDataManager.unbind();
223
+ gl.bindVertexArray(null);
224
+ }
225
+ free() {
226
+ const { gl, programWrapper, _vao, _indexBuffer } = this;
227
+ gl.deleteBuffer(_indexBuffer);
228
+ gl.deleteVertexArray(_vao);
229
+ gl.deleteProgram(programWrapper.program);
230
+ }
231
+ setMesh({ xRes, yRes, eastWestTied }) {
232
+ this._xRes = xRes;
233
+ this._yRes = yRes;
234
+ const { _vao } = this._meshUP(xRes, yRes, eastWestTied);
235
+ this._vao = _vao;
236
+ this._setUMeshResolution(xRes, yRes);
237
+ }
238
+ _setUMeshResolution(xRes, yRes) {
239
+ const { gl, programWrapper } = this;
240
+ const { u_mesh_resolution } = programWrapper;
241
+ const currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);
242
+ gl.useProgram(programWrapper.program);
243
+ gl.uniform2f(u_mesh_resolution, xRes, yRes);
244
+ gl.useProgram(currentProgram);
245
+ this._drawCount = 6 * ((xRes - 1) * (yRes - 1));
246
+ }
247
+ _meshUP(xRes, yRes, eastWestTied) {
248
+ this._drawCount = 6 * ((xRes - 1) * (yRes - 1));
249
+ const indices = new Uint16Array(this._drawCount);
250
+ {
251
+ let indicesIndex = 0;
252
+ let index = 0;
253
+ for (let j = 0; j < yRes - 1; j++) {
254
+ for (let i = 0; i < xRes - 1; i++) {
255
+ const ind = index + i;
256
+ indices[indicesIndex++] = ind + xRes;
257
+ indices[indicesIndex++] = ind + 1;
258
+ indices[indicesIndex++] = ind;
259
+ indices[indicesIndex++] = ind + xRes + 1;
260
+ indices[indicesIndex++] = ind + 1;
261
+ indices[indicesIndex++] = ind + xRes;
262
+ }
263
+ index += xRes;
264
+ }
265
+ if (eastWestTied) {
266
+ let left = (yRes - 1);
267
+ let right = 0;
268
+ for (let i = 0; i < xRes - 1; i++) {
269
+ indices[indicesIndex++] = left + xRes;
270
+ indices[indicesIndex++] = right;
271
+ indices[indicesIndex++] = left;
272
+ indices[indicesIndex++] = right + xRes;
273
+ indices[indicesIndex++] = right;
274
+ indices[indicesIndex++] = left + xRes;
275
+ left += xRes;
276
+ right += xRes;
277
+ }
278
+ }
279
+ }
280
+ const gl = this.gl;
281
+ const _vao = gl.createVertexArray();
282
+ gl.bindVertexArray(_vao);
283
+ const indexBuffer = gl.createBuffer();
284
+ this._indexBuffer = indexBuffer;
285
+ gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indexBuffer);
286
+ gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, indices, gl.STATIC_DRAW);
287
+ gl.bindVertexArray(null);
288
+ return { _vao };
289
+ }
290
+ }
291
+ exports.default = Logic;
292
+ class ShellBlockManager {
293
+ constructor(gl) {
294
+ this.gl = gl;
295
+ this.buffer = gl.createBuffer();
296
+ gl.bindBuffer(gl.UNIFORM_BUFFER, this.buffer);
297
+ gl.bufferData(gl.UNIFORM_BUFFER, 32, gl.DYNAMIC_DRAW);
298
+ gl.bindBuffer(gl.UNIFORM_BUFFER, null);
299
+ }
300
+ update({ gridSizeRad = null, gridOffsetRad = null, height = null, wiggleInKM = null, innerTime = null, opacity = null } = {}) {
301
+ const { gl, buffer } = this;
302
+ gl.bindBuffer(gl.UNIFORM_BUFFER, buffer);
303
+ if (gridOffsetRad !== null) {
304
+ const offset = new Float32Array(gridOffsetRad);
305
+ gl.bufferSubData(gl.UNIFORM_BUFFER, 0, offset);
306
+ }
307
+ if (gridSizeRad !== null) {
308
+ const size = new Float32Array(gridSizeRad);
309
+ gl.bufferSubData(gl.UNIFORM_BUFFER, 8, size);
310
+ }
311
+ if (height !== null) {
312
+ const heightArray = new Float32Array([height]);
313
+ gl.bufferSubData(gl.UNIFORM_BUFFER, 16, heightArray);
314
+ }
315
+ if (wiggleInKM !== null) {
316
+ const wiggleArray = new Float32Array([wiggleInKM]);
317
+ gl.bufferSubData(gl.UNIFORM_BUFFER, 20, wiggleArray);
318
+ }
319
+ if (innerTime !== null) {
320
+ const innerTimeArray = new Float32Array([innerTime]);
321
+ gl.bufferSubData(gl.UNIFORM_BUFFER, 24, innerTimeArray);
322
+ }
323
+ if (opacity !== null) {
324
+ if (opacity < 0 || opacity > 1) {
325
+ console.warn('Invalid opacity value');
326
+ return;
327
+ }
328
+ const op = new Float32Array([opacity]);
329
+ gl.bufferSubData(gl.UNIFORM_BUFFER, 28, op);
330
+ }
331
+ gl.bindBuffer(gl.UNIFORM_BUFFER, null);
332
+ }
333
+ bind() {
334
+ const { gl, buffer } = this;
335
+ gl.bindBufferBase(gl.UNIFORM_BUFFER, this.shellBlockBindingPoint, buffer);
336
+ }
337
+ free() {
338
+ const { gl, buffer } = this;
339
+ gl.deleteBuffer(buffer);
340
+ }
341
+ unbind() {
342
+ const { gl } = this;
343
+ gl.bindBufferBase(gl.UNIFORM_BUFFER, this.shellBlockBindingPoint, null);
344
+ }
345
+ }