@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,149 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var util_1 = require("../../util");
4
+ var programcache_1 = require("../programcache");
5
+ var totems_1 = require("../totems");
6
+ var arrowVertexShader = "#version 300 es\n#define R 6378.137\n#define PI 3.1415926535897932384626433832795\n#define POLE 20037508.34\n#define POLE_BY_PI 6366198.2\n#define HALF_PI 1.5707963267948966192313216916398\n\nuniform sampler2D rotation; // rotation of arrow\n\nout vec4 v_color;\n\nlayout(std140) uniform CameraBlock {\n mat4 u_view;\n mat4 u_projection;\n vec3 u_translate;\n bool u_is3D;\n vec2 u_mapWH;\n vec2 u_scrWH;\n float u_zlevel;\n};\n\nlayout(std140) uniform ArrowBlock {\n vec4 u_color;\n vec2 u_bbox_offset_rad;\n vec2 u_bbox_size_rad;\n vec2 u_resolution;\n float u_length_ratio;\n float u_width_ratio;\n float u_height;\n float u_no_data_value;\n};\n\nvec2 f_texCoord(){\n float fID = float(gl_InstanceID);\n float x = mod( fID, u_resolution.x ) / ( u_resolution.x - 1.0);\n float y = 1.0 - floor( fID / u_resolution.x ) / ( u_resolution.y - 1.0);\n return vec2(x, y);\n}\n\nvec2 f_radCoord(vec2 texCoord){\n float x = (texCoord.x * u_bbox_size_rad.x ) + u_bbox_offset_rad.x;\n float y = (texCoord.y * u_bbox_size_rad.y ) + u_bbox_offset_rad.y;\n return vec2(x, y);\n}\n\nvec3 f_onSphere(vec2 radCoord){\n float x = sin(radCoord.y) * cos(radCoord.x);\n float y = sin(radCoord.y) * sin(radCoord.x);\n float z = cos(radCoord.y);\n return vec3(x, y, z) * (R + u_height);\n}\n\n\nvec2 f_onFlat(vec2 radCoord){\n float mercX = radCoord.x * POLE_BY_PI;\n float mercY = log(tan(HALF_PI - radCoord.y * 0.5)) * POLE_BY_PI;\n float normX = ( mercX - u_translate.x ) / u_mapWH.x;\n float normY = ( mercY - u_translate.y ) / u_mapWH.y;\n return vec2(normX, normY);\n}\n\nvoid main() {\n // escape if no data\n vec2 texCoord = f_texCoord();\n vec2 geoCoord = vec2( texCoord.x , 1.0 - texCoord.y );\n\n\n float angle = texture(rotation, texCoord).r;\n\n if ( angle == u_no_data_value ) {\n gl_Position = vec4(-2.0, -2.0, 0.0, 1.0);\n return;\n }\n vec2 arrowLimb;\n if (0.0 == mod(float(gl_VertexID), 2.0)) {\n arrowLimb = vec2(0.0, 0.0);\n } else if (gl_VertexID == 1) {\n // tail\n arrowLimb = vec2( cos(angle), sin(angle)) * u_length_ratio / (170.0 );\n } else if (gl_VertexID == 3) {\n // right wing\n arrowLimb = vec2( cos(angle + 0.45), sin(angle + 0.45)) * u_width_ratio / (170.0 );\n } else if (gl_VertexID == 5) {\n // left wing\n arrowLimb = vec2( cos(angle - 0.45), sin(angle - 0.45)) * u_width_ratio / (170.0 );\n }\n\n\n vec2 radCoord = f_radCoord(geoCoord + arrowLimb);\n if ( u_is3D ) {\n vec3 spherePos = f_onSphere(radCoord);\n gl_Position = u_projection * u_view * vec4(spherePos - u_translate, 1.0);\n } else {\n vec2 flatPos = f_onFlat(radCoord);\n gl_Position = u_projection * vec4(\n flatPos.x * u_scrWH.x, \n (1.0 - flatPos.y) * u_scrWH.y,\n 0.0, 1.0\n );\n }\n\n\n v_color = u_color;\n gl_PointSize = 4.0;\n}\n";
7
+ var arrowFragmentShader = "#version 300 es\nprecision highp float;\nin vec4 v_color;\nout vec4 outColor;\n\nvoid main() {\n outColor = v_color;\n}\n";
8
+ var ArrowFieldLogic = /** @class */ (function () {
9
+ function ArrowFieldLogic() {
10
+ this.gl = null;
11
+ this.globe = null;
12
+ this.cameraUniformBlockTotem = null;
13
+ this.program = null;
14
+ this.cameraBlockBindingPoint = 0;
15
+ this.arrayBlockBindingPoint = 1;
16
+ }
17
+ ArrowFieldLogic.prototype.init = function (globe, gl) {
18
+ this.gl = gl;
19
+ this.globe = globe;
20
+ this.cameraUniformBlockTotem = programcache_1.globeProgramCache.getProgram(globe, totems_1.CameraUniformBlockTotem);
21
+ this.program = this._createProgram();
22
+ };
23
+ ArrowFieldLogic.prototype._createProgram = function () {
24
+ var gl = this.gl;
25
+ var program = (0, util_1.createProgram)(gl, arrowVertexShader, arrowFragmentShader);
26
+ var cameraBlockIndex = gl.getUniformBlockIndex(program, "CameraBlock");
27
+ gl.uniformBlockBinding(program, cameraBlockIndex, this.cameraBlockBindingPoint);
28
+ var arrowBlockIndex = gl.getUniformBlockIndex(program, "ArrowBlock");
29
+ gl.uniformBlockBinding(program, arrowBlockIndex, this.arrayBlockBindingPoint);
30
+ this.textureLocations = {
31
+ rotationLocation: gl.getUniformLocation(program, "rotation"),
32
+ };
33
+ return program;
34
+ };
35
+ ArrowFieldLogic.prototype.getArrowBlockBufferManager = function () {
36
+ return new ArrowBlockBufferManager(this.gl, this.arrayBlockBindingPoint);
37
+ };
38
+ // initial load type is static.
39
+ // after that, it is dynamic.
40
+ ArrowFieldLogic.prototype.getTextureManager = function (width, height) {
41
+ return new TextureManager(this.gl, width, height, this.textureLocations);
42
+ };
43
+ ArrowFieldLogic.prototype.draw = function (arrowBlockManager, textureManager, instanceCount) {
44
+ var _a = this, gl = _a.gl, cameraBlockBindingPoint = _a.cameraBlockBindingPoint, cameraUniformBlockTotem = _a.cameraUniformBlockTotem;
45
+ gl.useProgram(this.program);
46
+ arrowBlockManager.bind();
47
+ textureManager.activate();
48
+ cameraUniformBlockTotem.bind(cameraBlockBindingPoint);
49
+ gl.drawArraysInstanced(gl.LINES, 0, 6, instanceCount);
50
+ // gl.drawArraysInstanced(gl.POINTS, 0, 4, instanceCount);
51
+ cameraUniformBlockTotem.unbind(cameraBlockBindingPoint);
52
+ arrowBlockManager.unbind();
53
+ };
54
+ ArrowFieldLogic.prototype.free = function () {
55
+ var _a = this, gl = _a.gl, program = _a.program;
56
+ gl.deleteProgram(program);
57
+ programcache_1.globeProgramCache.releaseProgram(this.globe, totems_1.CameraUniformBlockTotem);
58
+ };
59
+ return ArrowFieldLogic;
60
+ }());
61
+ exports.default = ArrowFieldLogic;
62
+ var ArrowBlockBufferManager = /** @class */ (function () {
63
+ function ArrowBlockBufferManager(gl, bindingPoint) {
64
+ this.gl = gl;
65
+ this.bindingPoint = bindingPoint;
66
+ this.ubo = gl.createBuffer();
67
+ gl.bindBuffer(gl.UNIFORM_BUFFER, this.ubo);
68
+ // 4 + 2+ 2 + 2 + 1 +1 +1 +1+1= 15 ~= 16
69
+ gl.bufferData(gl.UNIFORM_BUFFER, 56, gl.DYNAMIC_DRAW);
70
+ gl.bindBuffer(gl.UNIFORM_BUFFER, null);
71
+ }
72
+ ArrowBlockBufferManager.prototype.update = function (_a) {
73
+ var _b = _a === void 0 ? {} : _a, _c = _b.color, color = _c === void 0 ? null : _c, _d = _b.bboxOffsetRad, bboxOffsetRad = _d === void 0 ? null : _d, _e = _b.bboxSizeRad, bboxSizeRad = _e === void 0 ? null : _e, _f = _b.resolution, resolution = _f === void 0 ? null : _f, _g = _b.tailLengthRatio, tailLengthRatio = _g === void 0 ? null : _g, _h = _b.wingLengthRatio, wingLengthRatio = _h === void 0 ? null : _h, _j = _b.height, height = _j === void 0 ? null : _j, _k = _b.opacity, opacity = _k === void 0 ? null : _k, _l = _b.noDataValue, noDataValue = _l === void 0 ? null : _l;
74
+ var _m = this, gl = _m.gl, ubo = _m.ubo;
75
+ gl.bindBuffer(gl.UNIFORM_BUFFER, ubo);
76
+ if (color !== null)
77
+ gl.bufferSubData(gl.UNIFORM_BUFFER, 0, new Float32Array(color));
78
+ if (opacity !== null)
79
+ gl.bufferSubData(gl.UNIFORM_BUFFER, 12, new Float32Array([opacity]));
80
+ if (bboxOffsetRad !== null)
81
+ gl.bufferSubData(gl.UNIFORM_BUFFER, 16, new Float32Array(bboxOffsetRad));
82
+ if (bboxSizeRad !== null)
83
+ gl.bufferSubData(gl.UNIFORM_BUFFER, 24, new Float32Array(bboxSizeRad));
84
+ if (resolution !== null)
85
+ gl.bufferSubData(gl.UNIFORM_BUFFER, 32, new Float32Array(resolution));
86
+ if (tailLengthRatio !== null)
87
+ gl.bufferSubData(gl.UNIFORM_BUFFER, 40, new Float32Array([tailLengthRatio]));
88
+ if (wingLengthRatio !== null)
89
+ gl.bufferSubData(gl.UNIFORM_BUFFER, 44, new Float32Array([wingLengthRatio]));
90
+ if (height !== null)
91
+ gl.bufferSubData(gl.UNIFORM_BUFFER, 48, new Float32Array([height]));
92
+ if (noDataValue !== null)
93
+ gl.bufferSubData(gl.UNIFORM_BUFFER, 52, new Float32Array([noDataValue]));
94
+ gl.bindBuffer(gl.UNIFORM_BUFFER, null);
95
+ };
96
+ ArrowBlockBufferManager.prototype.bind = function () {
97
+ var _a = this, gl = _a.gl, ubo = _a.ubo, bindingPoint = _a.bindingPoint;
98
+ gl.bindBufferBase(gl.UNIFORM_BUFFER, bindingPoint, ubo);
99
+ };
100
+ ArrowBlockBufferManager.prototype.unbind = function () {
101
+ var _a = this, gl = _a.gl, bindingPoint = _a.bindingPoint;
102
+ gl.bindBufferBase(gl.UNIFORM_BUFFER, bindingPoint, null);
103
+ };
104
+ ArrowBlockBufferManager.prototype.free = function () {
105
+ var _a = this, gl = _a.gl, ubo = _a.ubo;
106
+ gl.deleteBuffer(ubo);
107
+ };
108
+ return ArrowBlockBufferManager;
109
+ }());
110
+ var TextureManager = /** @class */ (function () {
111
+ function TextureManager(gl, width, height, _a) {
112
+ var rotationLocation = _a.rotationLocation;
113
+ this.gl = gl;
114
+ this.width = width;
115
+ this.height = height;
116
+ this.rotationLocation = rotationLocation;
117
+ this.rotationTexture = this._createFloatTexture();
118
+ }
119
+ TextureManager.prototype._createFloatTexture = function () {
120
+ var _a = this, gl = _a.gl, width = _a.width, height = _a.height;
121
+ var texture = gl.createTexture();
122
+ gl.bindTexture(gl.TEXTURE_2D, texture);
123
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
124
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
125
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.R32F, width, height, 0, gl.RED, gl.FLOAT, null);
126
+ gl.bindTexture(gl.TEXTURE_2D, null);
127
+ return texture;
128
+ };
129
+ TextureManager.prototype.setData = function (rotation) {
130
+ var _a = this, gl = _a.gl, rotationTexture = _a.rotationTexture, width = _a.width, height = _a.height;
131
+ // gl flip y axis
132
+ gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true);
133
+ gl.bindTexture(gl.TEXTURE_2D, rotationTexture);
134
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.R32F, width, height, 0, gl.RED, gl.FLOAT, rotation);
135
+ gl.bindTexture(gl.TEXTURE_2D, null);
136
+ gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);
137
+ };
138
+ TextureManager.prototype.activate = function () {
139
+ var _a = this, gl = _a.gl, rotationTexture = _a.rotationTexture;
140
+ gl.activeTexture(gl.TEXTURE0);
141
+ gl.bindTexture(gl.TEXTURE_2D, rotationTexture);
142
+ gl.uniform1i(this.rotationLocation, 0);
143
+ };
144
+ TextureManager.prototype.free = function () {
145
+ var _a = this, gl = _a.gl, rotationTexture = _a.rotationTexture;
146
+ gl.deleteTexture(rotationTexture);
147
+ };
148
+ return TextureManager;
149
+ }());
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ // this contains vao, drawCount, ArrowBufferBlock, vao,
3
+ // how to, where to set instanced parameters
4
+ // the vectorfield buffer should be managed outside, since it can be static or dynamic.
5
+ var __importDefault = (this && this.__importDefault) || function (mod) {
6
+ return (mod && mod.__esModule) ? mod : { "default": mod };
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ var logic_1 = __importDefault(require("./logic"));
10
+ var programcache_1 = require("../programcache");
11
+ var util_1 = require("../util");
12
+ var ArrowField = /** @class */ (function () {
13
+ function ArrowField(gl, globe, _a) {
14
+ var _b = _a === void 0 ? {} : _a, _c = _b.minLon, minLon = _c === void 0 ? -180 : _c, _d = _b.maxLon, maxLon = _d === void 0 ? 180 : _d, _e = _b.minLat, minLat = _e === void 0 ? -90 : _e, _f = _b.maxLat, maxLat = _f === void 0 ? 90 : _f, _g = _b.height, height = _g === void 0 ? 0 : _g, _h = _b.opacity, opacity = _h === void 0 ? 1 : _h, _j = _b.color, color = _j === void 0 ? [0.04, 0.2, 0.8] : _j, _k = _b.targetWidth, targetWidth = _k === void 0 ? 100 : _k, _l = _b.targetHeight, targetHeight = _l === void 0 ? 100 : _l, _m = _b.dataWidth, dataWidth = _m === void 0 ? null : _m, _o = _b.dataHeight, dataHeight = _o === void 0 ? null : _o, _p = _b.tailLengthRatio, tailLengthRatio = _p === void 0 ? 1 : _p, _q = _b.wingLengthRatio, wingLengthRatio = _q === void 0 ? 0.5 : _q, _r = _b.noDataValue, noDataValue = _r === void 0 ? null : _r;
15
+ this.gl = gl;
16
+ this.globe = globe;
17
+ this.program = programcache_1.globeProgramCache.getProgram(globe, logic_1.default);
18
+ this.arrowBlockManager = this.program.getArrowBlockBufferManager();
19
+ this.instanceCount = targetWidth * targetHeight;
20
+ this.arrowBlockManager.update({ resolution: [targetWidth, targetHeight] });
21
+ this.textureManager = this.program.getTextureManager(dataWidth, dataHeight);
22
+ this.setBBox({ minLon: minLon, maxLon: maxLon, minLat: minLat, maxLat: maxLat });
23
+ this.update({ height: height, opacity: opacity, color: color, tailLengthRatio: tailLengthRatio, wingLengthRatio: wingLengthRatio, noDataValue: noDataValue });
24
+ }
25
+ ArrowField.prototype.setBBox = function (_a) {
26
+ var _b = _a === void 0 ? {} : _a, _c = _b.minLon, minLon = _c === void 0 ? -180 : _c, _d = _b.maxLon, maxLon = _d === void 0 ? 180 : _d, _e = _b.minLat, minLat = _e === void 0 ? -90 : _e, _f = _b.maxLat, maxLat = _f === void 0 ? 90 : _f;
27
+ this.bbox = { minLon: minLon, maxLon: maxLon, minLat: minLat, maxLat: maxLat };
28
+ var _g = (0, util_1.longlatbbox2normalbbox)(this.bbox), bboxSizeRad = _g.bboxSizeRad, bboxOffsetRad = _g.bboxOffsetRad;
29
+ this.arrowBlockManager.update({ bboxSizeRad: bboxSizeRad, bboxOffsetRad: bboxOffsetRad });
30
+ this.globe.DrawRender();
31
+ };
32
+ ArrowField.prototype.update = function (_a) {
33
+ var _b = _a === void 0 ? {} : _a, height = _b.height, opacity = _b.opacity, color = _b.color, resolution = _b.resolution, tailLengthRatio = _b.tailLengthRatio, wingLengthRatio = _b.wingLengthRatio, noDataValue = _b.noDataValue;
34
+ if (resolution) {
35
+ this.instanceCount = resolution[0] * resolution[1];
36
+ }
37
+ this.arrowBlockManager.update({
38
+ color: color,
39
+ resolution: resolution,
40
+ height: height,
41
+ opacity: opacity,
42
+ tailLengthRatio: tailLengthRatio,
43
+ wingLengthRatio: wingLengthRatio,
44
+ noDataValue: noDataValue,
45
+ });
46
+ this.globe.DrawRender();
47
+ };
48
+ ArrowField.prototype.setTargetResolution = function (width, height) {
49
+ this.instanceCount = width * height;
50
+ this.arrowBlockManager.update({ resolution: [width, height] });
51
+ this.globe.DrawRender();
52
+ };
53
+ ArrowField.prototype.draw = function () {
54
+ var _a = this, program = _a.program, arrowBlockManager = _a.arrowBlockManager, textureManager = _a.textureManager, instanceCount = _a.instanceCount;
55
+ program.draw(arrowBlockManager, textureManager, instanceCount);
56
+ };
57
+ ArrowField.prototype.setData = function (rotation) {
58
+ this.textureManager.setData(rotation);
59
+ this.globe.DrawRender();
60
+ };
61
+ ArrowField.prototype.free = function () {
62
+ this.arrowBlockManager.free();
63
+ this.textureManager.free();
64
+ programcache_1.globeProgramCache.releaseProgram(this.gl, logic_1.default);
65
+ };
66
+ return ArrowField;
67
+ }());
68
+ exports.default = ArrowField;
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.densityToLegendProgramCache = void 0;
4
+ var util_1 = require("../../util/");
5
+ var programcache_1 = require("../programcache");
6
+ var vs = "#version 300 es\nprecision highp float;\n\nuniform sampler2D u_density_texture;\nin vec2 a_position;\n\nout vec2 v_texcoord;\n\nvoid main() {\n gl_Position = vec4(a_position, 0.0, 1.0);\n v_texcoord = a_position * 0.5 + 0.5;\n}";
7
+ var fs = "#version 300 es\nprecision highp float;\n\nuniform sampler2D u_legend_texture;\nuniform sampler2D u_density_texture;\n\nuniform float u_opacity;\nin vec2 v_texcoord;\nout vec4 fragColor;\n\nvoid main() {\n float density = texture(u_density_texture, v_texcoord).r;\n fragColor = texture(u_legend_texture, vec2(density, 0.5));\n fragColor.a *= u_opacity * sqrt(density);\n}";
8
+ var DensityToLegendProgram = /** @class */ (function () {
9
+ function DensityToLegendProgram(globe) {
10
+ this.globe = globe;
11
+ this.gl = globe.gl;
12
+ this.program = (0, util_1.createProgram)(globe.gl, vs, fs);
13
+ var _a = this, gl = _a.gl, program = _a.program;
14
+ this.uniforms = {
15
+ densityTexture: gl.getUniformLocation(program, "u_density_texture"),
16
+ legendTexture: gl.getUniformLocation(program, "u_legend_texture"),
17
+ opacity: gl.getUniformLocation(program, "u_opacity"),
18
+ };
19
+ { // assign attribute locations
20
+ gl.bindAttribLocation(program, 0, "a_position");
21
+ }
22
+ {
23
+ this.vao = gl.createVertexArray();
24
+ var a_positionLocation = gl.getAttribLocation(program, "a_position");
25
+ gl.bindVertexArray(this.vao);
26
+ var buffer = gl.createBuffer();
27
+ gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
28
+ gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([
29
+ -1, -1,
30
+ 1, -1,
31
+ 1, 1,
32
+ -1, 1,
33
+ ]), gl.STATIC_DRAW);
34
+ gl.enableVertexAttribArray(a_positionLocation);
35
+ gl.vertexAttribPointer(0, 2, gl.FLOAT, false, 0, 0);
36
+ gl.bindVertexArray(null);
37
+ // gl.bindBuffer(gl.ARRAY_BUFFER, null);
38
+ this._buffer = buffer;
39
+ }
40
+ {
41
+ this._lastOpacity = 1;
42
+ var currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);
43
+ gl.useProgram(program);
44
+ gl.uniform1f(this.uniforms.opacity, this._lastOpacity);
45
+ gl.useProgram(currentProgram);
46
+ }
47
+ }
48
+ DensityToLegendProgram.prototype.draw = function (densityTexture, legendTexture, opacity) {
49
+ var _a = this, gl = _a.gl, program = _a.program, uniforms = _a.uniforms;
50
+ gl.useProgram(program);
51
+ gl.bindVertexArray(this.vao);
52
+ gl.activeTexture(gl.TEXTURE1);
53
+ gl.bindTexture(gl.TEXTURE_2D, legendTexture);
54
+ gl.uniform1i(uniforms.legendTexture, 1);
55
+ gl.activeTexture(gl.TEXTURE0);
56
+ gl.bindTexture(gl.TEXTURE_2D, densityTexture);
57
+ gl.uniform1i(uniforms.densityTexture, 0);
58
+ if (this._lastOpacity !== opacity) {
59
+ gl.uniform1f(uniforms.opacity, opacity);
60
+ this._lastOpacity = opacity;
61
+ }
62
+ gl.drawArrays(gl.TRIANGLE_FAN, 0, 4);
63
+ gl.bindVertexArray(null);
64
+ };
65
+ DensityToLegendProgram.prototype.free = function () {
66
+ var gl = this.gl;
67
+ gl.deleteVertexArray(this.vao);
68
+ gl.deleteBuffer(this._buffer);
69
+ gl.deleteProgram(this.program);
70
+ };
71
+ return DensityToLegendProgram;
72
+ }());
73
+ var densityToLegendProgramCache = {
74
+ get: function (globe) { return programcache_1.noRegisterGlobeProgramCache.getProgram(globe, DensityToLegendProgram); },
75
+ release: function (globe) { return programcache_1.noRegisterGlobeProgramCache.releaseProgram(globe, DensityToLegendProgram); }
76
+ };
77
+ exports.densityToLegendProgramCache = densityToLegendProgramCache;
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.pointToDensityTextureCache = void 0;
4
+ var util_1 = require("../../util/");
5
+ var programcache_1 = require("../programcache");
6
+ var camerauniformblock_1 = require("../totems/camerauniformblock");
7
+ var geometrytransformations_1 = require("../../util/shaderfunctions/geometrytransformations");
8
+ var vs = "#version 300 es\nprecision highp float;\n\n".concat(camerauniformblock_1.CameraUniformBlockString, "\n").concat(geometrytransformations_1.mercatorXYToGLPosition, "\n").concat(geometrytransformations_1.cartesian3DToGLPosition, "\n\nin vec3 position;\nuniform float pointSize;\n\nvoid main() {\n if (is3D) {\n gl_Position = cartesian3DToGLPosition(position);\n } else {\n gl_Position = mercatorXYToGLPosition(position.xy);\n }\n gl_PointSize = pointSize;\n}\n");
9
+ var fs = "#version 300 es\nprecision highp float;\nout vec4 fragColor;\n\nvoid main() {\n float r = length(gl_PointCoord - 0.5) * 2.0;\n if (r > 1.0) discard;\n // float density = smoothstep(0.1, 1.0, 1.0 - r);\n fragColor = vec4((15.0/16.0)*sqrt(1.0-sqrt(r)));\n}";
10
+ var PointHeatmapProgram = /** @class */ (function () {
11
+ function PointHeatmapProgram(globe) {
12
+ this.globe = globe;
13
+ this.gl = globe.gl;
14
+ this._isFreed = false;
15
+ this.program = (0, util_1.createProgram)(globe.gl, vs, fs);
16
+ var _a = this, gl = _a.gl, program = _a.program;
17
+ this.uniforms = {
18
+ pointSize: gl.getUniformLocation(this.program, "pointSize"),
19
+ };
20
+ { // assign attribute locations
21
+ gl.bindAttribLocation(program, 0, "position");
22
+ }
23
+ { // arrange camera uniform block
24
+ this.cameraBlockBingingPoint = 0;
25
+ this.cameraBlockTotem = camerauniformblock_1.CameraUniformBlockTotemCache.get(globe);
26
+ var cameraBlockIndex = gl.getUniformBlockIndex(program, "CameraUniformBlock");
27
+ gl.uniformBlockBinding(program, cameraBlockIndex, this.cameraBlockBingingPoint);
28
+ }
29
+ { // last values
30
+ this._lastPointSize = 0;
31
+ var currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);
32
+ gl.useProgram(program);
33
+ gl.uniform1f(this.uniforms.pointSize, this._lastPointSize);
34
+ gl.useProgram(currentProgram);
35
+ }
36
+ }
37
+ PointHeatmapProgram.prototype.createVAO = function (positionBuffer, vectorSize) {
38
+ var gl = this.gl;
39
+ var vao = gl.createVertexArray();
40
+ gl.bindVertexArray(vao);
41
+ gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer);
42
+ gl.enableVertexAttribArray(0);
43
+ gl.vertexAttribPointer(0, vectorSize, gl.FLOAT, false, 0, 0);
44
+ gl.bindVertexArray(null);
45
+ return vao;
46
+ };
47
+ PointHeatmapProgram.prototype.draw = function (vao, length, pointSize) {
48
+ if (pointSize === void 0) { pointSize = 5.0; }
49
+ var gl = this.gl;
50
+ gl.useProgram(this.program);
51
+ if (pointSize !== this._lastPointSize) {
52
+ gl.uniform1f(this.uniforms.pointSize, pointSize);
53
+ this._lastPointSize = pointSize;
54
+ }
55
+ gl.bindVertexArray(vao);
56
+ this.cameraBlockTotem.bind(this.cameraBlockBingingPoint);
57
+ gl.drawArrays(gl.POINTS, 0, length);
58
+ this.cameraBlockTotem.unbind(this.cameraBlockBingingPoint);
59
+ gl.bindVertexArray(null);
60
+ };
61
+ PointHeatmapProgram.prototype.free = function () {
62
+ if (this._isFreed)
63
+ return;
64
+ var _a = this, gl = _a.gl, globe = _a.globe;
65
+ camerauniformblock_1.CameraUniformBlockTotemCache.release(globe);
66
+ gl.deleteProgram(this.program);
67
+ this._isFreed = true;
68
+ };
69
+ return PointHeatmapProgram;
70
+ }());
71
+ var pointToDensityTextureCache = {
72
+ get: function (globe) { return programcache_1.noRegisterGlobeProgramCache.getProgram(globe, PointHeatmapProgram); },
73
+ release: function (globe) { return programcache_1.noRegisterGlobeProgramCache.releaseProgram(globe, PointHeatmapProgram); }
74
+ };
75
+ exports.pointToDensityTextureCache = pointToDensityTextureCache;
@@ -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.Float2LegendWithRatio = void 0;
7
+ var object_1 = __importDefault(require("./object"));
8
+ exports.Float2LegendWithRatio = object_1.default;
@@ -0,0 +1,125 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var util_1 = require("../../util");
4
+ var default_1 = /** @class */ (function () {
5
+ function default_1(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
+ default_1.prototype._createProgramWrapper = function () {
14
+ var vertexShaderSource = "#version 300 es\n precision highp float;\n\n in vec2 a_position;\n out vec2 v_texcoord;\n \n void main() {\n gl_Position = vec4(a_position, 0.0, 1.0);\n v_texcoord = a_position * 0.5 + 0.5;\n v_texcoord.y = 1.0 - v_texcoord.y;\n }\n ";
15
+ var fragmentShaderSource = "#version 300 es\n precision highp float;\n\n in vec2 v_texcoord;\n uniform sampler2D u_float_texture0;\n uniform sampler2D u_float_texture1;\n uniform sampler2D u_color_texture;\n \n layout(std140) uniform HeatParametersBlock {\n vec2 u_color_ramp_range; // x is min, y is range ( max - min)\n vec2 u_min_max;\n float u_escape_value;\n float u_blend_ratio;\n };\n\n out vec4 outColor;\n\n void main() {\n if ( u_blend_ratio < 0.0) {\n outColor = vec4(0.0, 0.0, 0.0, 0.0);\n return;\n }\n float f0 = texture(u_float_texture0, v_texcoord).r;\n float f1 = texture(u_float_texture1, v_texcoord).r;\n // outColor = vec4(\n\n if (f0 == u_escape_value || f1 == u_escape_value) { \n outColor = vec4(0.0, 0.0, 0.0, 0.0);\n return;\n }\n float x = mix(f0, f1, u_blend_ratio);\n if ( x < u_min_max.x || x > u_min_max.y) {\n outColor = vec4(0.0, 0.0, 0.0, 0.0);\n return; \n }\n x = (x - u_color_ramp_range.x) / u_color_ramp_range.y; \n outColor = texture(u_color_texture, vec2(x, 0.5));\n }\n ";
16
+ var gl = this.gl;
17
+ var program = (0, util_1.createProgram)(gl, vertexShaderSource, fragmentShaderSource);
18
+ var vao = gl.createVertexArray();
19
+ gl.bindVertexArray(vao);
20
+ var buffer = gl.createBuffer();
21
+ this._buffer = buffer;
22
+ gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
23
+ gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([
24
+ -1, -1,
25
+ 1, -1,
26
+ 1, 1,
27
+ -1, 1
28
+ ]), gl.STATIC_DRAW);
29
+ var positionLocation = gl.getAttribLocation(program, "a_position");
30
+ gl.enableVertexAttribArray(positionLocation);
31
+ gl.vertexAttribPointer(positionLocation, 2, gl.FLOAT, false, 0, 0);
32
+ gl.bindVertexArray(null);
33
+ this.heatParametersBlockBindingPoint = 0;
34
+ var heatParametersBlockIndex = gl.getUniformBlockIndex(program, "HeatParametersBlock");
35
+ gl.uniformBlockBinding(program, heatParametersBlockIndex, this.heatParametersBlockBindingPoint);
36
+ return {
37
+ program: program,
38
+ vao: vao,
39
+ u_float_texture0: gl.getUniformLocation(program, "u_float_texture0"),
40
+ u_float_texture1: gl.getUniformLocation(program, "u_float_texture1"),
41
+ u_color_texture: gl.getUniformLocation(program, "u_color_texture"),
42
+ u_blend_ratio: gl.getUniformLocation(program, "u_blend_ratio"),
43
+ u_color_ramp_range: gl.getUniformLocation(program, "u_color_ramp_range"),
44
+ u_min_max: gl.getUniformLocation(program, "u_min_max"),
45
+ u_escape_value: gl.getUniformLocation(program, "u_escape_value")
46
+ };
47
+ };
48
+ default_1.prototype.getUniformBlockManager = function () {
49
+ return new HeatParametersBlockManager(this.gl);
50
+ };
51
+ default_1.prototype.draw = function (texture0, texture1, colorRampTexture, heatParametersBlockManager) {
52
+ var _a = this, gl = _a.gl, programWrapper = _a.programWrapper;
53
+ var program = programWrapper.program, u_float_texture0 = programWrapper.u_float_texture0, u_float_texture1 = programWrapper.u_float_texture1, u_color_texture = programWrapper.u_color_texture;
54
+ gl.useProgram(program);
55
+ gl.bindVertexArray(programWrapper.vao);
56
+ gl.activeTexture(gl.TEXTURE1);
57
+ gl.bindTexture(gl.TEXTURE_2D, texture1);
58
+ gl.uniform1i(u_float_texture1, 1);
59
+ gl.activeTexture(gl.TEXTURE2);
60
+ gl.bindTexture(gl.TEXTURE_2D, colorRampTexture);
61
+ gl.uniform1i(u_color_texture, 2);
62
+ gl.activeTexture(gl.TEXTURE0);
63
+ gl.bindTexture(gl.TEXTURE_2D, texture0);
64
+ gl.uniform1i(u_float_texture0, 0);
65
+ heatParametersBlockManager.bind();
66
+ // clear output texture
67
+ gl.clearColor(0, 0, 0, 0);
68
+ gl.drawArrays(gl.TRIANGLE_FAN, 0, 4);
69
+ gl.bindVertexArray(null);
70
+ heatParametersBlockManager.unbind();
71
+ };
72
+ default_1.prototype.free = function () {
73
+ var gl = this.gl;
74
+ gl.deleteBuffer(this._buffer);
75
+ gl.deleteProgram(this.programWrapper.program);
76
+ gl.deleteVertexArray(this.programWrapper.vao);
77
+ };
78
+ return default_1;
79
+ }());
80
+ exports.default = default_1;
81
+ var HeatParametersBlockManager = /** @class */ (function () {
82
+ function HeatParametersBlockManager(gl) {
83
+ this.gl = gl;
84
+ this.buffer = gl.createBuffer();
85
+ gl.bindBuffer(gl.UNIFORM_BUFFER, this.buffer);
86
+ gl.bufferData(gl.UNIFORM_BUFFER, 24, gl.DYNAMIC_DRAW);
87
+ gl.bindBuffer(gl.UNIFORM_BUFFER, null);
88
+ }
89
+ /*
90
+ * @param {Array<number>} color_ramp_range [minValue,( maxValue - minValue)]
91
+ * @param {Array<number>} min_max [minEdge, maxEdge]
92
+ * @param {number} escape_value // value that will be ignored
93
+ * @param {number} blend_ratio // ratio of blending between two textures
94
+ * */
95
+ HeatParametersBlockManager.prototype.update = function (_a) {
96
+ var _b = _a.color_ramp_range, color_ramp_range = _b === void 0 ? null : _b, _c = _a.min_max, min_max = _c === void 0 ? null : _c, _d = _a.escape_value, escape_value = _d === void 0 ? null : _d, _e = _a.blend_ratio, blend_ratio = _e === void 0 ? null : _e;
97
+ var _f = this, gl = _f.gl, buffer = _f.buffer;
98
+ gl.bindBuffer(gl.UNIFORM_BUFFER, buffer);
99
+ if (color_ramp_range) {
100
+ gl.bufferSubData(gl.UNIFORM_BUFFER, 0, new Float32Array(color_ramp_range));
101
+ }
102
+ if (min_max) {
103
+ gl.bufferSubData(gl.UNIFORM_BUFFER, 8, new Float32Array(min_max));
104
+ }
105
+ if (escape_value) {
106
+ gl.bufferSubData(gl.UNIFORM_BUFFER, 16, new Float32Array([escape_value]));
107
+ }
108
+ if (blend_ratio) {
109
+ gl.bufferSubData(gl.UNIFORM_BUFFER, 20, new Float32Array([blend_ratio]));
110
+ }
111
+ gl.bindBuffer(gl.UNIFORM_BUFFER, null);
112
+ };
113
+ HeatParametersBlockManager.prototype.bind = function () {
114
+ var _a = this, gl = _a.gl, buffer = _a.buffer;
115
+ gl.bindBufferBase(gl.UNIFORM_BUFFER, this.heatParametersBlockBindingPoint, buffer);
116
+ };
117
+ HeatParametersBlockManager.prototype.free = function () {
118
+ this.gl.deleteBuffer(this.buffer);
119
+ };
120
+ HeatParametersBlockManager.prototype.unbind = function () {
121
+ var gl = this.gl;
122
+ gl.bindBufferBase(gl.UNIFORM_BUFFER, this.heatParametersBlockBindingPoint, null);
123
+ };
124
+ return HeatParametersBlockManager;
125
+ }());
@@ -0,0 +1,113 @@
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
+ var logic_1 = __importDefault(require("./logic"));
7
+ var programcache_1 = require("../programcache");
8
+ // Uniform Buffer Objects use this
9
+ var DataObject = /** @class */ (function () {
10
+ function DataObject(gl, _a) {
11
+ var _b = _a === void 0 ? {} : _a, _c = _b.width, width = _c === void 0 ? 1 : _c, _d = _b.height, height = _d === void 0 ? 1 : _d, _e = _b.texture0, texture0 = _e === void 0 ? null : _e, _f = _b.texture1, texture1 = _f === void 0 ? null : _f, _g = _b.colorRampTexture, colorRampTexture = _g === void 0 ? null : _g, _h = _b.colorRampRange, colorRampRange = _h === void 0 ? null : _h, _j = _b.escapeValue, escapeValue = _j === void 0 ? 99999 : _j, _k = _b.blendRatio, blendRatio = _k === void 0 ? 0.0 : _k, _l = _b.minMaxEdges, minMaxEdges = _l === void 0 ? null : _l;
12
+ this.gl = gl;
13
+ this.programlogic = programcache_1.glProgramCache.getProgram(gl, logic_1.default);
14
+ this.heatParametersBlockManager = this.programlogic.getUniformBlockManager();
15
+ this.width = width;
16
+ this.height = height;
17
+ this.texture0 = texture0 || this._createColorRampTexture(width, height);
18
+ this.texture1 = texture1 || this._createColorRampTexture(width, height);
19
+ this.colorRampTexture = colorRampTexture || this._createColorRampTexture();
20
+ this.minMaxEdges = minMaxEdges || new Float32Array([-99999, 99999]);
21
+ this.heatParametersBlockManager.update({
22
+ escape_value: escapeValue,
23
+ blend_ratio: blendRatio,
24
+ min_max: minMaxEdges,
25
+ color_ramp_range: colorRampRange
26
+ });
27
+ }
28
+ DataObject.prototype._bindBlock = function () {
29
+ var gl = this.gl;
30
+ var program = this.programlogic.programWrapper.program;
31
+ gl.uniformBlockBinding(program, gl.getUniformBlockIndex(program, 'Block'), 0);
32
+ };
33
+ DataObject.prototype._createColorRampTexture = function () {
34
+ var gl = this.gl;
35
+ var texture = gl.createTexture();
36
+ gl.bindTexture(gl.TEXTURE_2D, texture);
37
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
38
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
39
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
40
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
41
+ gl.bindTexture(gl.TEXTURE_2D, null);
42
+ return texture;
43
+ };
44
+ DataObject.prototype.setBlendRatio = function (ratio) {
45
+ if (ratio < 0 || ratio > 1) {
46
+ console.warn('Invalid blend ratio');
47
+ return;
48
+ }
49
+ this.heatParametersBlockManager.update({ blend_ratio: ratio });
50
+ };
51
+ DataObject.prototype.setEscapeValue = function (value) {
52
+ this.heatParametersBlockManager.update({ escape_value: value });
53
+ };
54
+ DataObject.prototype.setTexture0 = function (texture) {
55
+ this.texture0 = texture;
56
+ };
57
+ DataObject.prototype.setTexture1 = function (texture) {
58
+ this.texture1 = texture;
59
+ };
60
+ DataObject.prototype.setColorRampTexture = function (texture) {
61
+ this.colorRampTexture = texture;
62
+ };
63
+ DataObject.prototype.setDataWidthHeight = function (width, height) {
64
+ this.width = width;
65
+ this.height = height;
66
+ };
67
+ DataObject.prototype.setFloatTextureData = function (data0, data1, width, height, yFlip) {
68
+ if (yFlip === void 0) { yFlip = false; }
69
+ var _a = this, texture0 = _a.texture0, texture1 = _a.texture1, gl = _a.gl;
70
+ gl.bindTexture(gl.TEXTURE_2D, texture0);
71
+ gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, yFlip);
72
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.R16F, width, height, 0, gl.RED, gl.FLOAT, data0);
73
+ gl.bindTexture(gl.TEXTURE_2D, texture1);
74
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.R16F, width, height, 0, gl.RED, gl.FLOAT, data1);
75
+ gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);
76
+ };
77
+ DataObject.prototype.discard = function () {
78
+ this.heatParametersBlockManager.update({ blend_ratio: -1 });
79
+ };
80
+ DataObject.prototype.setColorRampTextureData = function (data, size) {
81
+ var _a = this, gl = _a.gl, colorRampTexture = _a.colorRampTexture;
82
+ gl.bindTexture(gl.TEXTURE_2D, colorRampTexture);
83
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, size, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, data);
84
+ };
85
+ DataObject.prototype.setColorRampRange = function (min, max) {
86
+ if (min > max) {
87
+ console.warn('Invalid min max values');
88
+ return;
89
+ }
90
+ var range = max - min;
91
+ this.heatParametersBlockManager.update({ color_ramp_range: new Float32Array([min, range]) });
92
+ };
93
+ DataObject.prototype.setMinMaxEdges = function (min, max) {
94
+ if (min)
95
+ this.minMaxEdges[0] = min;
96
+ if (max)
97
+ this.minMaxEdges[1] = max;
98
+ this.heatParametersBlockManager.update({ min_max: this.minMaxEdges });
99
+ };
100
+ DataObject.prototype.draw = function () {
101
+ this.programlogic.draw(this.texture0, this.texture1, this.colorRampTexture, this.heatParametersBlockManager);
102
+ };
103
+ DataObject.prototype.free = function () {
104
+ var _a = this, gl = _a.gl, texture0 = _a.texture0, texture1 = _a.texture1, colorRampTexture = _a.colorRampTexture;
105
+ gl.deleteTexture(texture0);
106
+ gl.deleteTexture(texture1);
107
+ gl.deleteTexture(colorRampTexture);
108
+ programcache_1.glProgramCache.releaseProgram(this.gl, logic_1.default);
109
+ this.heatParametersBlockManager.free();
110
+ };
111
+ return DataObject;
112
+ }());
113
+ exports.default = DataObject;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var programcache_1 = require("../programcache");
4
+ var IsGlobeMoved = /** @class */ (function () {
5
+ function IsGlobeMoved(globe) {
6
+ this.globe = globe;
7
+ this._lastLOD = globe.api_GetCurrentLODWithDecimal();
8
+ }
9
+ IsGlobeMoved.prototype.isMoved = function () {
10
+ var 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
+ return IsGlobeMoved;
18
+ }());
19
+ var IsGlobeMovedCache = Object.freeze({
20
+ get: function (globe) { return programcache_1.noRegisterGlobeProgramCache.getProgram(globe, IsGlobeMoved); },
21
+ release: function (globe) { return programcache_1.noRegisterGlobeProgramCache.releaseProgram(globe, IsGlobeMoved); }
22
+ });
@@ -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
+ var wiggle_1 = __importDefault(require("./globeshell/wiggle"));
8
+ exports.GlobeShellWiggle = wiggle_1.default;
@@ -0,0 +1 @@
1
+ "use strict";