@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,121 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.PaddingProgramCache = void 0;
37
+ var util_1 = require("../../../util");
38
+ var camerauniformblock_1 = __importStar(require("../../totems/camerauniformblock"));
39
+ var programcache_1 = require("../../programcache");
40
+ var vertexShader = "#version 300 es " +
41
+ util_1.shaderfunctions.PI +
42
+ util_1.shaderfunctions.R +
43
+ util_1.shaderfunctions.POLE +
44
+ camerauniformblock_1.CameraUniformBlockString +
45
+ util_1.shaderfunctions.mercatorXYToGLPosition +
46
+ util_1.shaderfunctions.longLatRadToMercator +
47
+ util_1.shaderfunctions.longLatRadToCartesian3D +
48
+ util_1.shaderfunctions.circleLimpFromLongLatRadCenterCartesian3D +
49
+ util_1.shaderfunctions.circleLimpFromLongLatRadCenterMercatorCompass +
50
+ util_1.shaderfunctions.circleLimpFromLongLatRadCenterMercatorRealDistancePadding +
51
+ util_1.shaderfunctions.circleLimpFromLongLatRadCenterMercatorRealDistance + "\n\nin vec2 center;\nin float radius;\nin float pad_range;\nin vec4 color;\nin float flag;\n\nuniform int compass;\nuniform float pad_count;\n\nuniform float opacity;\n\n\nout vec2 v_limp;\nout vec4 v_color;\n\n\nvoid main() { \n\n float alpha_padding = z_level * z_level / (pad_range/ 100.0 );\n if( flag == 2.0 || flag == 1.0 || radius == 0.0 || alpha_padding < 0.1 || z_level < 3.0 ) return; // 1.0 is hide \n v_color = vec4(color.rgb, color.a * alpha_padding * opacity);\n\n gl_PointSize = 2.0;\n\n float odd = mod(float(gl_VertexID), 2.0);\n float index = (float(gl_VertexID)- odd ) / 2.0;\n float angle = 3.1415926535897932384626433832795 * 2.0 * (index / pad_count );\n float radius_ = radius - (pad_range * odd);\n\n if ( is3D){ \n gl_Position = projection * view * vec4(\n circleLimpFromLongLatRadCenterCartesian3D( center, radius_, angle) - translate, 1.0);\n v_limp = vec2(0.0, 0.0);\n return;\n }\n vec2 limp;\n if ( compass == 1 ){\n limp = circleLimpFromLongLatRadCenterMercatorCompass(center , radius_, angle);\n } else {\n // limp = circleLimpFromLongLatRadCenterMercatorRealDistancePadding(center, radius_, angle);\n limp = circleLimpFromLongLatRadCenterMercatorRealDistance(center, radius_, angle);\n }\n v_limp = limp;\n gl_Position = mercatorXYToGLPosition(limp);\n}";
52
+ var fragmentShader = "#version 300 es\nprecision highp float; " +
53
+ util_1.shaderfunctions.POLE + "\nin vec4 v_color;\nin vec2 v_limp;\nout vec4 outColor;\nvoid main() {\n if ( v_limp.x < -POLE || v_limp.x > POLE || v_limp.y < -POLE || v_limp.y > POLE ){ discard; }\n outColor = v_color;\n}";
54
+ var Logic = /** @class */ (function () {
55
+ function Logic(globe) {
56
+ this.globe = globe;
57
+ this.gl = globe.gl;
58
+ this.program = (0, util_1.createProgram)(this.gl, vertexShader, fragmentShader);
59
+ { // bind positions so bufferManager can use them
60
+ this.gl.bindAttribLocation(this.program, 0, "center");
61
+ this.gl.bindAttribLocation(this.program, 1, "radius");
62
+ this.gl.bindAttribLocation(this.program, 2, "pad_range");
63
+ this.gl.bindAttribLocation(this.program, 3, "color");
64
+ this.gl.bindAttribLocation(this.program, 4, "flag");
65
+ }
66
+ this.cameraBlockBindingPoint = 0;
67
+ var cameraBlockIndex = this.gl.getUniformBlockIndex(this.program, "CameraUniformBlock");
68
+ this.gl.uniformBlockBinding(this.program, cameraBlockIndex, this.cameraBlockBindingPoint);
69
+ this.cameraBlockTotem = programcache_1.globeProgramCache.getProgram(globe, camerauniformblock_1.default);
70
+ this._padCountLocation = this.gl.getUniformLocation(this.program, "pad_count");
71
+ this._opacityLocation = this.gl.getUniformLocation(this.program, "opacity");
72
+ this._compassLocation = this.gl.getUniformLocation(this.program, "compass");
73
+ this._compassMode = 1;
74
+ this._opacity = 1.0;
75
+ this._padCount = 360;
76
+ {
77
+ var currentProgram = this.gl.getParameter(this.gl.CURRENT_PROGRAM);
78
+ this.gl.useProgram(this.program);
79
+ this.gl.uniform1i(this._compassLocation, 1);
80
+ this.gl.uniform1f(this._opacityLocation, 1.0);
81
+ this.gl.uniform1f(this._padCountLocation, 360);
82
+ this.gl.useProgram(currentProgram);
83
+ }
84
+ }
85
+ Logic.prototype.draw = function (vao, length, opaity) {
86
+ };
87
+ Logic.prototype.draw = function (attrBufferManager, padCount, compass, opacity) {
88
+ var _a = this, gl = _a.gl, program = _a.program, _padCountLocation = _a._padCountLocation, cameraBlockBindingPoint = _a.cameraBlockBindingPoint, cameraBlockTotem = _a.cameraBlockTotem, _compassLocation = _a._compassLocation;
89
+ gl.useProgram(program);
90
+ attrBufferManager.bindPaddingVAO();
91
+ cameraBlockTotem.bind(cameraBlockBindingPoint);
92
+ // draw instanced
93
+ if (padCount !== this._padCount) {
94
+ this._padCount = padCount;
95
+ // console.log("padCount", padCount);
96
+ gl.uniform1f(_padCountLocation, padCount);
97
+ }
98
+ if (compass !== this._compassMode) {
99
+ // console.log("compass", compass);
100
+ gl.uniform1i(_compassLocation, compass);
101
+ this._compassMode = compass;
102
+ }
103
+ if (opacity !== this._opacity) {
104
+ // console.log("opacity", opacity);
105
+ this._opacity = opacity;
106
+ gl.uniform1f(this._opacityLocation, opacity);
107
+ }
108
+ gl.drawArraysInstanced(gl.LINES, 0, padCount * 2, attrBufferManager.length);
109
+ gl.bindVertexArray(null);
110
+ cameraBlockTotem.unbind(cameraBlockBindingPoint);
111
+ };
112
+ Logic.prototype.free = function () {
113
+ this.gl.deleteProgram(this.program);
114
+ programcache_1.globeProgramCache.releaseProgram(this.globe, camerauniformblock_1.default);
115
+ };
116
+ return Logic;
117
+ }());
118
+ exports.PaddingProgramCache = Object.freeze({
119
+ getProgram: function (globe) { return programcache_1.noRegisterGlobeProgramCache.getProgram(globe, Logic); },
120
+ releaseProgram: function (globe) { programcache_1.noRegisterGlobeProgramCache.releaseProgram(globe, Logic); }
121
+ });
@@ -0,0 +1,119 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.PaddingProgramCache = void 0;
37
+ var util_1 = require("../../../util");
38
+ var camerauniformblock_1 = __importStar(require("../../totems/camerauniformblock"));
39
+ var programcache_1 = require("../../programcache");
40
+ var vertexShader = "#version 300 es " +
41
+ util_1.shaderfunctions.PI +
42
+ util_1.shaderfunctions.R +
43
+ util_1.shaderfunctions.POLE +
44
+ camerauniformblock_1.CameraUniformBlockString +
45
+ util_1.shaderfunctions.mercatorXYToGLPosition +
46
+ util_1.shaderfunctions.longLatRadToMercator +
47
+ util_1.shaderfunctions.longLatRadToCartesian3D +
48
+ util_1.shaderfunctions.circleLimpFromLongLatRadCenterCartesian3D +
49
+ util_1.shaderfunctions.circleLimpFromLongLatRadCenterMercatorCompass +
50
+ util_1.shaderfunctions.circleLimpFromLongLatRadCenterMercatorRealDistancePadding +
51
+ util_1.shaderfunctions.circleLimpFromLongLatRadCenterMercatorRealDistance + "\n\nin vec2 center;\nin float radius;\nin float pad_range;\nin vec4 color;\nin float flag;\n\nuniform int compass;\nuniform float pad_count;\n\nuniform float opacity;\n\n\nout vec2 v_limp;\nout vec4 v_color;\n\n\nvoid main() { \n\n float alpha_padding = z_level * z_level / (pad_range/ 100.0 );\n if( flag == 2.0 || flag == 1.0 || radius == 0.0 || alpha_padding < 0.1 || z_level < 3.0 ) return; // 1.0 is hide \n v_color = vec4(color.rgb, color.a * alpha_padding * opacity);\n\n gl_PointSize = 2.0;\n\n float odd = mod(float(gl_VertexID), 2.0);\n float index = (float(gl_VertexID)- odd ) / 2.0;\n float angle = 3.1415926535897932384626433832795 * 2.0 * (index / pad_count );\n float radius_ = radius - (pad_range * odd);\n\n if ( is3D){ \n gl_Position = projection * view * vec4(\n circleLimpFromLongLatRadCenterCartesian3D( center, radius_, angle) - translate, 1.0);\n v_limp = vec2(0.0, 0.0);\n return;\n }\n vec2 limp;\n if ( compass == 1 ){\n limp = circleLimpFromLongLatRadCenterMercatorCompass(center , radius_, angle);\n } else {\n // limp = circleLimpFromLongLatRadCenterMercatorRealDistancePadding(center, radius_, angle);\n limp = circleLimpFromLongLatRadCenterMercatorRealDistance(center, radius_, angle);\n }\n v_limp = limp;\n gl_Position = mercatorXYToGLPosition(limp);\n}";
52
+ var fragmentShader = "#version 300 es\nprecision highp float; " +
53
+ util_1.shaderfunctions.POLE + "\nin vec4 v_color;\nin vec2 v_limp;\nout vec4 outColor;\nvoid main() {\n if ( v_limp.x < -POLE || v_limp.x > POLE || v_limp.y < -POLE || v_limp.y > POLE ){ discard; }\n outColor = v_color;\n}";
54
+ var Logic = /** @class */ (function () {
55
+ function Logic(globe) {
56
+ this.globe = globe;
57
+ this.gl = globe.gl;
58
+ this.program = (0, util_1.createProgram)(this.gl, vertexShader, fragmentShader);
59
+ { // bind positions so bufferManager can use them
60
+ this.gl.bindAttribLocation(this.program, 0, "center");
61
+ this.gl.bindAttribLocation(this.program, 1, "radius");
62
+ this.gl.bindAttribLocation(this.program, 2, "pad_range");
63
+ this.gl.bindAttribLocation(this.program, 3, "color");
64
+ this.gl.bindAttribLocation(this.program, 4, "flag");
65
+ }
66
+ this.cameraBlockBindingPoint = 0;
67
+ var cameraBlockIndex = this.gl.getUniformBlockIndex(this.program, "CameraUniformBlock");
68
+ this.gl.uniformBlockBinding(this.program, cameraBlockIndex, this.cameraBlockBindingPoint);
69
+ this.cameraBlockTotem = programcache_1.globeProgramCache.getProgram(globe, camerauniformblock_1.default);
70
+ this._padCountLocation = this.gl.getUniformLocation(this.program, "pad_count");
71
+ this._opacityLocation = this.gl.getUniformLocation(this.program, "opacity");
72
+ this._compassLocation = this.gl.getUniformLocation(this.program, "compass");
73
+ this._compassMode = 1;
74
+ this._opacity = 1.0;
75
+ this._padCount = 360;
76
+ {
77
+ var currentProgram = this.gl.getParameter(this.gl.CURRENT_PROGRAM);
78
+ this.gl.useProgram(this.program);
79
+ this.gl.uniform1i(this._compassLocation, 1);
80
+ this.gl.uniform1f(this._opacityLocation, 1.0);
81
+ this.gl.uniform1f(this._padCountLocation, 360);
82
+ this.gl.useProgram(currentProgram);
83
+ }
84
+ }
85
+ Logic.prototype.draw = function (attrBufferManager, padCount, compass, opacity) {
86
+ var _a = this, gl = _a.gl, program = _a.program, _padCountLocation = _a._padCountLocation, cameraBlockBindingPoint = _a.cameraBlockBindingPoint, cameraBlockTotem = _a.cameraBlockTotem, _compassLocation = _a._compassLocation;
87
+ gl.useProgram(program);
88
+ attrBufferManager.bindPaddingVAO();
89
+ cameraBlockTotem.bind(cameraBlockBindingPoint);
90
+ // draw instanced
91
+ if (padCount !== this._padCount) {
92
+ this._padCount = padCount;
93
+ // console.log("padCount", padCount);
94
+ gl.uniform1f(_padCountLocation, padCount);
95
+ }
96
+ if (compass !== this._compassMode) {
97
+ // console.log("compass", compass);
98
+ gl.uniform1i(_compassLocation, compass);
99
+ this._compassMode = compass;
100
+ }
101
+ if (opacity !== this._opacity) {
102
+ // console.log("opacity", opacity);
103
+ this._opacity = opacity;
104
+ gl.uniform1f(this._opacityLocation, opacity);
105
+ }
106
+ gl.drawArraysInstanced(gl.LINES, 0, padCount * 2, attrBufferManager.length);
107
+ gl.bindVertexArray(null);
108
+ cameraBlockTotem.unbind(cameraBlockBindingPoint);
109
+ };
110
+ Logic.prototype.free = function () {
111
+ this.gl.deleteProgram(this.program);
112
+ programcache_1.globeProgramCache.releaseProgram(this.globe, camerauniformblock_1.default);
113
+ };
114
+ return Logic;
115
+ }());
116
+ exports.PaddingProgramCache = Object.freeze({
117
+ getProgram: function (globe) { return programcache_1.noRegisterGlobeProgramCache.getProgram(globe, Logic); },
118
+ releaseProgram: function (globe) { programcache_1.noRegisterGlobeProgramCache.releaseProgram(globe, Logic); }
119
+ });
@@ -0,0 +1 @@
1
+ "use strict";
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./distancering"), exports);
@@ -0,0 +1,173 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PieceOfPieProgramCache = exports.Logic = exports.ITEM_SIZE = void 0;
4
+ var util_1 = require("../../../util");
5
+ var totems_1 = require("../../totems");
6
+ var programcache_1 = require("../../programcache");
7
+ var geometrytransformations_1 = require("../../../util/shaderfunctions/geometrytransformations");
8
+ /**
9
+ * TODO:
10
+ * 1. Triangle face looks at screen. if rotation angle is positive the last vertex must be the faintest.
11
+ *
12
+ */
13
+ var drawModeMap = Object.freeze({
14
+ LINE_STRIP: 0,
15
+ TRIANGLE_FAN: 1,
16
+ });
17
+ //${ circleLimpFromLongLatRadCenterMercatorRealDistanceNew_accurate }
18
+ var vertexShaderSource = "#version 300 es\n\n".concat(totems_1.CameraUniformBlockString, " \n").concat(geometrytransformations_1.PI, " \n").concat(geometrytransformations_1.longLatRadToMercator, "\n").concat(geometrytransformations_1.mercatorXYToGLPosition, "\n").concat(geometrytransformations_1.longLatRadToCartesian3D, "\n").concat(geometrytransformations_1.circleLimpFromLongLatRadCenterCartesian3D_accurate, "\n").concat(geometrytransformations_1.circleLimpFromLongLatRadCenterMercatorCompass_accurate, "\n").concat(geometrytransformations_1.cartesian3DToGLPosition, "\n\nuniform float edge_count;\nuniform int draw_mode; // %2 => 0: LINE_STRIP, 1: TRIANGLE_FAN \nuniform float plugin_alpha_multiplier;\n//, lat, startAngle, tailAngle, ...rgba, radius, rgbaMode\n// in vec2 center; // long, lat in radian\nin vec2 center2d;\nin vec3 center3d;\nin float start_angle2d; \nin float tail_angle2d;\n\nin float start_angle3d;\nin float tail_angle3d;\n\nin vec4 color;\nin float radius; // in meter\nin float color_mode; // 0.0: constant, 1.0: fading, 2.0: hide\n// flat out int vid;\n// flat out float v_phase;\nout vec2 v_pos;\nout vec4 v_color;\n// flat out float v_angle;\n\nvoid main() {\n // vid = gl_VertexID;\n if (color_mode == 2.0 || radius == 0.0) { return; }\n float start_angle, tail_angle;\n if (is3D) {\n start_angle = start_angle3d;\n tail_angle = tail_angle3d;\n } else {\n start_angle = start_angle2d;\n tail_angle = tail_angle2d;\n }\n float color_mode_ = color_mode;\n if ( draw_mode == 0 && color_mode == 1.0) {color_mode_ = 0.0;}\n float vertexID = float(gl_VertexID);\n float radius_ = radius;\n float alpha = plugin_alpha_multiplier;\n if (draw_mode == 1) { // TRIANGLE_FAN\n if (gl_VertexID == 0) { \n radius_ = 0.0; \n if ( color_mode == 1.0 ) { alpha = 0.0; }\n }\n vertexID -= 1.0;\n }\n float phase = ( vertexID / (edge_count - 1.0) );\n // v_angle = tail_angle;\n \n if ( color_mode_ == 1.0 ) {\n if ( tail_angle < 0.0 ) {\n v_color = vec4( color.rgb , color.a * ( 1.0 - phase ) * alpha );\n } else {\n v_color = vec4( color.rgb , color.a * phase * alpha );\n }\n } else {\n v_color = vec4( color.rgb , color.a * alpha );\n }\n if ( color_mode == 0.0 && draw_mode == 1 ) {\n v_color.a /= 2.0;\n }\n float angle;\n if ( tail_angle > 0.0 ) { \n angle = tail_angle * (-phase + 1.0) + start_angle;\n } else {\n angle = tail_angle * phase + start_angle;\n }\n if (is3D) {\n vec3 pos = circleLimpFromLongLatRadCenterCartesian3D_accurate(center3d, radius_, angle);\n v_pos = vec2(0.0, 0.0);\n gl_Position = cartesian3DToGLPosition(pos);\n }\n else {\n vec2 pos2 = circleLimpFromLongLatRadCenterMercatorCompass_accurate(center2d, radius_, angle);\n v_pos = pos2;\n gl_Position = mercatorXYToGLPosition(pos2);\n }\n\n gl_PointSize = 10.0;\n}");
19
+ var fragmentShaderSource = "#version 300 es" + geometrytransformations_1.POLE + geometrytransformations_1.PI + "\nprecision highp float;\n// flat in int vid;\nin vec4 v_color;\nin vec2 v_pos;\n// flat in float v_phase;\n// in float v_angle;\nout vec4 outColor;\nvoid main() {\n // if( vid % 2 == 0 ) { discard; }\n // if ( mod(v_angle, PI / 36.0 ) < (PI / 72.0)) { discard; }\n // if ( mod(v_angle * v_phase, PI / 90.0 ) < (PI / 180.0)) { discard; }\n if ( v_pos.x < -POLE || v_pos.x > POLE || v_pos.y < -POLE || v_pos.y > POLE ) { discard; }\n outColor = v_color;\n}";
20
+ exports.ITEM_SIZE = 10;
21
+ var Logic = /** @class */ (function () {
22
+ function Logic(globe) {
23
+ this.globe = globe;
24
+ this.gl = globe.gl;
25
+ this._lastMode = 0;
26
+ this._lastEdgeCount = 64;
27
+ this._lastAlphaMultiplier = 1.0;
28
+ this.program = (0, util_1.createProgram)(this.gl, vertexShaderSource, fragmentShaderSource);
29
+ var _a = this, gl = _a.gl, program = _a.program;
30
+ { // set attributes locations
31
+ gl.bindAttribLocation(program, 0, 'center2d');
32
+ gl.bindAttribLocation(program, 1, 'center3d');
33
+ gl.bindAttribLocation(program, 2, 'start_angle2d');
34
+ gl.bindAttribLocation(program, 3, 'tail_angle2d');
35
+ gl.bindAttribLocation(program, 4, 'start_angle3d');
36
+ gl.bindAttribLocation(program, 5, 'tail_angle3d');
37
+ gl.bindAttribLocation(program, 6, 'color');
38
+ gl.bindAttribLocation(program, 7, 'radius');
39
+ gl.bindAttribLocation(program, 8, 'color_mode');
40
+ // vao
41
+ // instanced draw read 1
42
+ }
43
+ { // Uniforms
44
+ this._edgeCountLocation = gl.getUniformLocation(program, 'edge_count');
45
+ this._draw_modeLocation = gl.getUniformLocation(program, 'draw_mode');
46
+ this._plugin_alpha_multiplierLocation = gl.getUniformLocation(program, 'plugin_alpha_multiplier');
47
+ var currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);
48
+ gl.useProgram(program);
49
+ gl.uniform1i(this._draw_modeLocation, this._lastMode);
50
+ gl.uniform1f(this._edgeCountLocation, this._lastEdgeCount);
51
+ gl.uniform1f(this._plugin_alpha_multiplierLocation, 1.0);
52
+ this.cameraBlockBindingPoint = 0;
53
+ this.cameraBlockTotem = programcache_1.globeProgramCache.getProgram(globe, totems_1.CameraUniformBlockTotem);
54
+ var cameraBlockIndex = gl.getUniformBlockIndex(program, "CameraUniformBlock");
55
+ gl.uniformBlockBinding(program, cameraBlockIndex, this.cameraBlockBindingPoint);
56
+ gl.useProgram(currentProgram);
57
+ }
58
+ }
59
+ Logic.prototype.draw = function (length, vao, edgeCount, alphaMultiplier, drawMode) {
60
+ var _a = this, gl = _a.gl, program = _a.program, cameraBlockTotem = _a.cameraBlockTotem, cameraBlockBindingPoint = _a.cameraBlockBindingPoint;
61
+ // gl.disable(gl.DEPTH_TEST);
62
+ gl.useProgram(program);
63
+ if (drawMode !== this._lastMode) {
64
+ gl.uniform1i(this._draw_modeLocation, drawModeMap[drawMode]);
65
+ this._lastMode = drawMode;
66
+ }
67
+ if (edgeCount !== this._lastEdgeCount) {
68
+ gl.uniform1f(this._edgeCountLocation, edgeCount);
69
+ this._lastEdgeCount = edgeCount;
70
+ }
71
+ if (alphaMultiplier !== this._lastAlphaMultiplier) {
72
+ gl.uniform1f(this._plugin_alpha_multiplierLocation, alphaMultiplier);
73
+ this._lastAlphaMultiplier = alphaMultiplier;
74
+ }
75
+ var overdraw = drawModeMap[drawMode];
76
+ cameraBlockTotem.bind(cameraBlockBindingPoint);
77
+ gl.bindVertexArray(vao);
78
+ gl.drawArraysInstanced(gl[drawMode], 0, edgeCount + overdraw, length);
79
+ cameraBlockTotem.unbind(cameraBlockBindingPoint);
80
+ gl.bindVertexArray(null);
81
+ // gl.enable(gl.DEPTH_TEST);
82
+ };
83
+ Logic.prototype.free = function () {
84
+ programcache_1.noRegisterGlobeProgramCache.releaseProgram(this.globe, totems_1.CameraUniformBlockTotem);
85
+ this.gl.deleteProgram(this.program);
86
+ this.program = null;
87
+ };
88
+ /**
89
+ * in vec2 center; // long, lat in radian
90
+ in float start_angle; // the start of partial circle from bearing point
91
+ in float tail_angle; // the rotation of the partial circle
92
+ in vec4 color;
93
+ in float radius; // in meter
94
+ in float color_mode; // 0.0: constant, 1.0: fading, 2.0: hide
95
+ */
96
+ Logic.prototype.createVAO = function (center2dObj, center3dObj, startAngle2DObj, tailAngle2DObj, startAngle3DObj, tailAngle3DObj, colorObj, radiusObj, colorModeObj) {
97
+ var gl = this.gl;
98
+ var vao = gl.createVertexArray();
99
+ gl.bindVertexArray(vao);
100
+ {
101
+ var buffer = center2dObj.buffer, stride = center2dObj.stride, offset = center2dObj.offset;
102
+ gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
103
+ gl.enableVertexAttribArray(0);
104
+ gl.vertexAttribPointer(0, 2, gl.FLOAT, false, stride, offset);
105
+ gl.vertexAttribDivisor(0, 1);
106
+ }
107
+ {
108
+ var buffer = center3dObj.buffer, stride = center3dObj.stride, offset = center3dObj.offset;
109
+ gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
110
+ gl.enableVertexAttribArray(1);
111
+ gl.vertexAttribPointer(1, 3, gl.FLOAT, false, stride, offset);
112
+ gl.vertexAttribDivisor(1, 1);
113
+ }
114
+ {
115
+ var buffer = startAngle2DObj.buffer, stride = startAngle2DObj.stride, offset = startAngle2DObj.offset;
116
+ gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
117
+ gl.enableVertexAttribArray(2);
118
+ gl.vertexAttribPointer(2, 1, gl.FLOAT, false, stride, offset);
119
+ gl.vertexAttribDivisor(2, 1);
120
+ }
121
+ {
122
+ var buffer = tailAngle2DObj.buffer, stride = tailAngle2DObj.stride, offset = tailAngle2DObj.offset;
123
+ gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
124
+ gl.enableVertexAttribArray(3);
125
+ gl.vertexAttribPointer(3, 1, gl.FLOAT, false, stride, offset);
126
+ gl.vertexAttribDivisor(3, 1);
127
+ }
128
+ {
129
+ var buffer = startAngle3DObj.buffer, stride = startAngle3DObj.stride, offset = startAngle3DObj.offset;
130
+ gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
131
+ gl.enableVertexAttribArray(4);
132
+ gl.vertexAttribPointer(4, 1, gl.FLOAT, false, stride, offset);
133
+ gl.vertexAttribDivisor(4, 1);
134
+ }
135
+ {
136
+ var buffer = tailAngle3DObj.buffer, stride = tailAngle3DObj.stride, offset = tailAngle3DObj.offset;
137
+ gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
138
+ gl.enableVertexAttribArray(5);
139
+ gl.vertexAttribPointer(5, 1, gl.FLOAT, false, stride, offset);
140
+ gl.vertexAttribDivisor(5, 1);
141
+ }
142
+ {
143
+ var buffer = colorObj.buffer, stride = colorObj.stride, offset = colorObj.offset;
144
+ gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
145
+ gl.enableVertexAttribArray(6);
146
+ gl.vertexAttribPointer(6, 4, gl.FLOAT, false, stride, offset);
147
+ gl.vertexAttribDivisor(6, 1);
148
+ }
149
+ {
150
+ var buffer = radiusObj.buffer, stride = radiusObj.stride, offset = radiusObj.offset;
151
+ gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
152
+ gl.enableVertexAttribArray(7);
153
+ gl.vertexAttribPointer(7, 1, gl.FLOAT, false, stride, offset);
154
+ gl.vertexAttribDivisor(7, 1);
155
+ }
156
+ {
157
+ var buffer = colorModeObj.buffer, stride = colorModeObj.stride, offset = colorModeObj.offset;
158
+ gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
159
+ gl.enableVertexAttribArray(8);
160
+ gl.vertexAttribPointer(8, 1, gl.FLOAT, false, stride, offset);
161
+ gl.vertexAttribDivisor(8, 1);
162
+ }
163
+ gl.bindVertexArray(null);
164
+ gl.bindBuffer(gl.ARRAY_BUFFER, null);
165
+ return vao;
166
+ };
167
+ return Logic;
168
+ }());
169
+ exports.Logic = Logic;
170
+ exports.PieceOfPieProgramCache = Object.freeze({
171
+ get: function (globe) { return programcache_1.noRegisterGlobeProgramCache.getProgram(globe, Logic); },
172
+ release: function (globe) { return programcache_1.noRegisterGlobeProgramCache.releaseProgram(globe, Logic); }
173
+ });
@@ -0,0 +1,147 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CameraUniformBlockTotemCache = exports.CameraUniformBlockString = void 0;
4
+ var programcache_1 = require("../programcache");
5
+ // import { getFrustumPlanes } from "../../Math/frustum/from-projection-matrix";
6
+ // import { getFrustum } from "../../Math/frustum/from-globeinfo"
7
+ // import { Plane } from "../../Math/";
8
+ exports.CameraUniformBlockString = "\nlayout(std140) uniform CameraUniformBlock {\n mat4 view; // 64 bytes 0\n mat4 projection; // 64 bytes 64\n vec3 translate; // 12 bytes 128\n bool is3D; // 4 bytes 140\n vec2 mapWH; // 8 bytes 144\n vec2 screenWH; // 8 bytes 152\n float z_level; // 4 bytes 160 | 164\n float world_distance; // 4 bytes 164\n float world_tilt; // 4 bytes 168\n float world_north_angle; // 4 bytes 172\n vec2 world_center_radian; // 8 bytes 176 | 184\n}; // 14 lines\n";
9
+ var Radian = Math.PI / 180.0;
10
+ var CameraUniformBlockTotem = /** @class */ (function () {
11
+ function CameraUniformBlockTotem() {
12
+ this.id = "CameraUniformBlockTotem";
13
+ this.description = "Sets a uniform block and provides buffer for it. The following is the glsl uniform block:" + exports.CameraUniformBlockString;
14
+ this.gl = null;
15
+ this.globe = null;
16
+ this.ubo = null;
17
+ // this._frustumPlanes = {
18
+ // left: new Plane(),
19
+ // right: new Plane(),
20
+ // top: new Plane(),
21
+ // bottom: new Plane(),
22
+ // near: new Plane(),
23
+ // far: new Plane()
24
+ // }
25
+ this._isMovedParams = {
26
+ lastLod: null,
27
+ isMoved: false,
28
+ };
29
+ }
30
+ CameraUniformBlockTotem.prototype.init = function (globe, gl) {
31
+ this.gl = gl;
32
+ this.globe = globe;
33
+ this.ubo = this._createUBO();
34
+ this.traslateFloat32 = new Float32Array(3);
35
+ this.mapWHFloat32 = new Float32Array(2);
36
+ this.setGeometry();
37
+ this.resize();
38
+ };
39
+ CameraUniformBlockTotem.prototype._createUBO = function () {
40
+ var gl = this.gl;
41
+ var ubo = gl.createBuffer();
42
+ gl.bindBuffer(gl.UNIFORM_BUFFER, ubo);
43
+ // 184 bytes in reality. Overflow on linux for some reason. So, 200 bytes.
44
+ gl.bufferData(gl.UNIFORM_BUFFER, 200, gl.STREAM_DRAW);
45
+ gl.bindBufferBase(gl.UNIFORM_BUFFER, 0, ubo);
46
+ gl.bindBuffer(gl.UNIFORM_BUFFER, null);
47
+ return ubo;
48
+ };
49
+ CameraUniformBlockTotem.prototype.resize = function () {
50
+ var _a = this, gl = _a.gl, globe = _a.globe, ubo = _a.ubo;
51
+ gl.bindBuffer(gl.UNIFORM_BUFFER, ubo);
52
+ gl.bufferSubData(gl.UNIFORM_BUFFER, 152, new Float32Array([globe.api_ScrW(), globe.api_ScrH()]));
53
+ gl.bindBuffer(gl.UNIFORM_BUFFER, null);
54
+ };
55
+ CameraUniformBlockTotem.prototype.setGeometry = function () {
56
+ var _a = this, gl = _a.gl, globe = _a.globe, ubo = _a.ubo;
57
+ var is3D = globe.api_GetCurrentGeometry() === 0;
58
+ gl.bindBuffer(gl.UNIFORM_BUFFER, ubo);
59
+ gl.bufferSubData(gl.UNIFORM_BUFFER, 140, new Float32Array([is3D]));
60
+ };
61
+ CameraUniformBlockTotem.prototype.draw3D = function (projection, modelView, translate) {
62
+ var _a = this, gl = _a.gl, traslateFloat32 = _a.traslateFloat32, ubo = _a.ubo, mapWHFloat32 = _a.mapWHFloat32, globe = _a.globe;
63
+ gl.bindBuffer(gl.UNIFORM_BUFFER, ubo);
64
+ { // view, projection, translat
65
+ gl.bufferSubData(gl.UNIFORM_BUFFER, 0, modelView);
66
+ gl.bufferSubData(gl.UNIFORM_BUFFER, 64, projection);
67
+ traslateFloat32.set([translate.x, translate.y, translate.z], 0);
68
+ gl.bufferSubData(gl.UNIFORM_BUFFER, 128, traslateFloat32);
69
+ }
70
+ {
71
+ // zoom level
72
+ gl.bufferSubData(gl.UNIFORM_BUFFER, 160, new Float32Array([globe.api_GetCurrentLODWithDecimal()]));
73
+ }
74
+ { // mapWH
75
+ if (globe.api_GetCurrentGeometry() === 1) {
76
+ var _b = globe.api_GetCurrentWorldWH(), width = _b.width, height = _b.height;
77
+ mapWHFloat32.set([width, height]);
78
+ gl.bufferSubData(gl.UNIFORM_BUFFER, 144, mapWHFloat32);
79
+ }
80
+ }
81
+ {
82
+ // float world_distance; // 4 bytes 164
83
+ // float world_tilt; // 4 bytes 168
84
+ // float world_north_angle; // 4 bytes 172
85
+ // vec2 world_center_radian; // 8 bytes 180
86
+ var _c = globe.api_GetCurrentLookInfo(), CenterLong = _c.CenterLong, CenterLat = _c.CenterLat, Distance = _c.Distance, Tilt = _c.Tilt, NorthAng = _c.NorthAng;
87
+ gl.bufferSubData(gl.UNIFORM_BUFFER, 164, new Float32Array([
88
+ Distance, Radian * Tilt, Radian * NorthAng, Radian * CenterLong, Radian * CenterLat
89
+ ]));
90
+ }
91
+ // this._frustumPlanes = getFrustumPlanes(projection, translate);
92
+ gl.bindBuffer(gl.UNIFORM_BUFFER, null);
93
+ { // isMoved
94
+ var currentLOD = globe.api_GetCurrentLODWithDecimal();
95
+ this._isMovedParams.isMoved = this._isMovedParams.lastLod !== currentLOD || globe.api_IsScreenMoving();
96
+ this._isMovedParams.lastLod = currentLOD;
97
+ }
98
+ // getFrustum(globe, 50, this._frustumPlanes);
99
+ };
100
+ CameraUniformBlockTotem.prototype.assignBindingPoint = function (program, bindingPoint) {
101
+ var gl = this.gl;
102
+ var cameraBlockIndex = gl.getUniformBlockIndex(program, "CameraUniformBlock");
103
+ gl.uniformBlockBinding(program, cameraBlockIndex, bindingPoint);
104
+ };
105
+ CameraUniformBlockTotem.prototype.getUBO = function () {
106
+ return this.ubo;
107
+ };
108
+ CameraUniformBlockTotem.prototype.getFrustumPlanes = function () {
109
+ return this._frustumPlanes;
110
+ };
111
+ CameraUniformBlockTotem.prototype.bind = function (bindingPoint) {
112
+ var _a = this, gl = _a.gl, ubo = _a.ubo;
113
+ gl.bindBufferBase(gl.UNIFORM_BUFFER, bindingPoint, ubo);
114
+ };
115
+ CameraUniformBlockTotem.prototype.unbind = function (bindingPoint) {
116
+ var gl = this.gl;
117
+ gl.bindBufferBase(gl.UNIFORM_BUFFER, bindingPoint, null);
118
+ };
119
+ CameraUniformBlockTotem.prototype.isMoved = function () {
120
+ return this._isMovedParams.isMoved;
121
+ };
122
+ CameraUniformBlockTotem.prototype.free = function () {
123
+ var _a = this, gl = _a.gl, ubo = _a.ubo;
124
+ gl.deleteBuffer(ubo);
125
+ };
126
+ CameraUniformBlockTotem.prototype.readBuffer = function () {
127
+ var result = new Float32Array(41);
128
+ this.gl.bindBuffer(this.gl.UNIFORM_BUFFER, this.ubo);
129
+ this.gl.getBufferSubData(this.gl.UNIFORM_BUFFER, 0, result);
130
+ this.gl.bindBuffer(this.gl.UNIFORM_BUFFER, null);
131
+ return {
132
+ view: result.slice(0, 16),
133
+ projection: result.slice(16, 32),
134
+ translate: result.slice(32, 35),
135
+ is3D: result[35],
136
+ mapWH: result.slice(36, 38),
137
+ screenWH: result.slice(38, 40),
138
+ z_level: result[40]
139
+ };
140
+ };
141
+ return CameraUniformBlockTotem;
142
+ }());
143
+ exports.default = CameraUniformBlockTotem;
144
+ exports.CameraUniformBlockTotemCache = Object.freeze({
145
+ get: function (globe) { return programcache_1.globeProgramCache.getProgram(globe, CameraUniformBlockTotem); },
146
+ release: function (globe) { return programcache_1.globeProgramCache.releaseProgram(globe, CameraUniformBlockTotem); }
147
+ });