@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,418 @@
1
+ "use strict";
2
+ /**
3
+ * Author: Toprak Nihat Deniz Ozturk
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ var util_1 = require("../util");
7
+ var TrackGlowLineProgram = /** @class */ (function () {
8
+ /**
9
+ * @param {WebGL2RenderingContext} gl
10
+ * @param {number} width
11
+ * @param {number} height
12
+ * @param {Object} options
13
+ * @param {number} options.headPercentage 0 ~ 1
14
+ * @param {number} options.routeAlpha 0 ~ 1
15
+ * @param {Array.<Number>} options.weights [w1, w2, w3, w4, w5]
16
+ * @param {number} options.alphaThreshold 0 ~ 1
17
+ * @param {number} options.exposure 0 ~ inf
18
+ * @param {number} options.gamma 0 ~ inf
19
+ * @param {number} options.finalAlphaRatio 0 ~ 1
20
+ * @param {+int} options.blurRepetition 1 ~ inf default 2
21
+ */
22
+ function TrackGlowLineProgram(gl, attrBuffer, width, height, options) {
23
+ if (options === void 0) { options = {}; }
24
+ this.gl = gl;
25
+ this.program = null;
26
+ // this._inBuffer = gl.createBuffer();
27
+ this._inBuffer = attrBuffer;
28
+ this._frameBuffer = gl.createFramebuffer();
29
+ this._lineProgram = this._createLineProgram();
30
+ this._blurProgram = this._createBlurProgram();
31
+ this._combineProgram = this._createCombineProgram();
32
+ this.resize(width, height);
33
+ this._middleTexture = null;
34
+ this._blurTextures = null;
35
+ this._createInnerTextures();
36
+ this._blurFrameBuffers = [gl.createFramebuffer(), gl.createFramebuffer()];
37
+ this._blurRepetition = options.blurRepetition || 1;
38
+ this._totalLength = 0;
39
+ this._initUniforms(options);
40
+ }
41
+ TrackGlowLineProgram.prototype._createInnerTextures = function () {
42
+ this._middleTexture = this._createTextures();
43
+ this._blurTextures = [this._createTextures(), this._createTextures()];
44
+ };
45
+ TrackGlowLineProgram.prototype._initUniforms = function (options) {
46
+ if (options === void 0) { options = {}; }
47
+ var _a = this, gl = _a.gl, _lineProgram = _a._lineProgram, _blurProgram = _a._blurProgram, _combineProgram = _a._combineProgram;
48
+ var currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);
49
+ gl.useProgram(_lineProgram.program);
50
+ gl.uniform1f(_lineProgram.u_head_percentage, options.headPercentage || 1.0 / 30.0);
51
+ gl.uniform1f(_lineProgram.u_route_alpha, options.routeAlpha || 0.025);
52
+ gl.useProgram(_blurProgram.program);
53
+ gl.uniform1fv(_blurProgram.u_weight, options.weights || [0.55, 0.45045946, 0.3216216, 0.254054, 0.056216]);
54
+ gl.useProgram(_combineProgram.program);
55
+ gl.uniform1f(_combineProgram.u_exposure, options.exposure || 1.0);
56
+ gl.uniform1f(_combineProgram.u_gamma, options.gamma || 1.0);
57
+ gl.uniform1f(_combineProgram.u_final_alpha_ratio, options.finalAlphaRatio || 1.0);
58
+ gl.useProgram(currentProgram);
59
+ };
60
+ /**
61
+ * @param {number} gamma 0 ~ inf
62
+ */
63
+ TrackGlowLineProgram.prototype.setGamma = function (gamma) {
64
+ if (gamma < 0) {
65
+ console.warn("gamma should be equal or greater than 0, but got", gamma);
66
+ return;
67
+ }
68
+ var _a = this, gl = _a.gl, _combineProgram = _a._combineProgram;
69
+ var currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);
70
+ gl.useProgram(_combineProgram.program);
71
+ gl.uniform1f(_combineProgram.u_gamma, gamma);
72
+ gl.useProgram(currentProgram);
73
+ };
74
+ /**
75
+ *
76
+ * @param {number} exposure 0 ~ inf
77
+ * @returns
78
+ */
79
+ TrackGlowLineProgram.prototype.setExposure = function (exposure) {
80
+ if (exposure < 0) {
81
+ console.warn("exposure should be equal or greater than 0, but got", exposure);
82
+ return;
83
+ }
84
+ var _a = this, gl = _a.gl, _combineProgram = _a._combineProgram;
85
+ var currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);
86
+ gl.useProgram(_combineProgram.program);
87
+ gl.uniform1f(_combineProgram.u_exposure, exposure);
88
+ gl.useProgram(currentProgram);
89
+ };
90
+ /**
91
+ *
92
+ * @param {number} ratio 0 ~ 1
93
+ * @returns
94
+ */
95
+ TrackGlowLineProgram.prototype.setFinalAlphaRatio = function (ratio) {
96
+ if (ratio < 0 || ratio > 1) {
97
+ console.warn("ratio should be between 0 and 1, but got", ratio);
98
+ return;
99
+ }
100
+ var _a = this, gl = _a.gl, _combineProgram = _a._combineProgram;
101
+ var currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);
102
+ gl.useProgram(_combineProgram.program);
103
+ gl.uniform1f(_combineProgram.u_final_alpha_ratio, ratio);
104
+ gl.useProgram(currentProgram);
105
+ };
106
+ /**
107
+ * @param {Array.<Number>} weight [w1, w2, w3, w4, w5]
108
+ */
109
+ TrackGlowLineProgram.prototype.setBlurWeights = function (weights) {
110
+ if (weights.length !== 5) {
111
+ console.warn("weights should be an array of 5 numbers, but got", weights);
112
+ return;
113
+ }
114
+ var _a = this, gl = _a.gl, _blurProgram = _a._blurProgram;
115
+ var currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);
116
+ gl.useProgram(_blurProgram.program);
117
+ gl.uniform1fv(_blurProgram.u_weight, weights);
118
+ gl.useProgram(currentProgram);
119
+ };
120
+ /**
121
+ * @param {number} routeAlpha 0 ~ 1
122
+ */
123
+ TrackGlowLineProgram.prototype.setRouteAlpha = function (routeAlpha) {
124
+ if (routeAlpha < 0 || routeAlpha > 1) {
125
+ console.warn("routeAlpha should be between 0 and 1, but got", routeAlpha);
126
+ return;
127
+ }
128
+ var _a = this, gl = _a.gl, _lineProgram = _a._lineProgram;
129
+ var currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);
130
+ gl.useProgram(_lineProgram.program);
131
+ gl.uniform1f(_lineProgram.u_route_alpha, routeAlpha);
132
+ gl.useProgram(currentProgram);
133
+ };
134
+ /**
135
+ * blur uses pingpong effect. This number decides how many times the blur will be applied.
136
+ * @param {+int} repetition
137
+ * @returns
138
+ */
139
+ TrackGlowLineProgram.prototype.setBlurRepetition = function (repetition) {
140
+ if (repetition < 0 && repetition % 1 !== 0) {
141
+ console.warn("repetition should be an integer greater than 0, but got", repetition);
142
+ return;
143
+ }
144
+ this._blurRepetition = repetition;
145
+ };
146
+ /**
147
+ * Head Is colored as white. This number decides proportion of the head according to the total length of the line.
148
+ * @param {Number} percentage 0 ~ 1
149
+ */
150
+ TrackGlowLineProgram.prototype.setHeadPercentage = function (percentage) {
151
+ if (percentage < 0 || 1 < percentage) {
152
+ console.warn("percentage should be between 0 and 1, but got", percentage);
153
+ return;
154
+ }
155
+ ;
156
+ var _a = this, gl = _a.gl, _lineProgram = _a._lineProgram;
157
+ var currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);
158
+ gl.useProgram(_lineProgram.program);
159
+ gl.uniform1f(_lineProgram.u_head_percentage, percentage);
160
+ gl.useProgram(currentProgram);
161
+ };
162
+ TrackGlowLineProgram.prototype._createDrawTextureProgram = function () {
163
+ var gl = this.gl;
164
+ var vertexShader = "#version 300 es\nprecision highp float;\n\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.xy * 0.5 + 0.5;\n}\n ";
165
+ var fragmentShader = "#version 300 es\nprecision highp float;\n\nin vec2 v_texcoord;\n\nuniform sampler2D u_main_texture;\n\n\nuniform float u_final_alpha_ratio;\n\nout vec4 outColor;\n\nvoid main() {\n\n vec4 hdrColor = texture(u_main_texture, v_texcoord); \n outColor = hdrColor;\n outColor.a *= u_final_alpha_ratio;\n}\n ";
166
+ var program = (0, util_1.createProgram)(this.gl, vertexShader, fragmentShader);
167
+ var buffer = gl.createBuffer();
168
+ var a_position = gl.getAttribLocation(program, "a_position");
169
+ var vao = gl.createVertexArray();
170
+ gl.bindVertexArray(vao);
171
+ gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
172
+ gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([
173
+ -1, -1,
174
+ 1, -1,
175
+ 1, 1,
176
+ -1, -1,
177
+ 1, 1,
178
+ -1, 1,
179
+ ]), gl.STATIC_DRAW);
180
+ gl.enableVertexAttribArray(a_position);
181
+ gl.vertexAttribPointer(a_position, 2, gl.FLOAT, false, 0, 0);
182
+ gl.bindVertexArray(null);
183
+ return {
184
+ program: program,
185
+ vao: vao,
186
+ u_main_texture: gl.getUniformLocation(program, "u_main_texture"),
187
+ u_final_alpha_ratio: gl.getUniformLocation(program, "u_final_alpha_ratio"),
188
+ };
189
+ };
190
+ TrackGlowLineProgram.prototype._createCombineProgram = function () {
191
+ var gl = this.gl;
192
+ var vertexShader = "#version 300 es\nprecision highp float;\n\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.xy * 0.5 + 0.5;\n}\n ";
193
+ var fragmentShader = "#version 300 es\nprecision highp float;\n\nin vec2 v_texcoord;\n\nuniform sampler2D u_main_texture;\nuniform sampler2D u_bloom_texture;\n\nuniform float u_exposure;\nuniform float u_gamma;\nuniform float u_final_alpha_ratio;\n\nout vec4 outColor;\n\nvoid main() {\n\n vec4 hdrColor = texture(u_main_texture, v_texcoord); \n vec4 bloomColor = texture(u_bloom_texture, v_texcoord);\n vec4 result = hdrColor + bloomColor * u_exposure;\n result = pow(result, vec4(1.0 / u_gamma));\n result.a *= u_final_alpha_ratio;\n outColor = result;\n}\n ";
194
+ var program = (0, util_1.createProgram)(this.gl, vertexShader, fragmentShader);
195
+ var buffer = gl.createBuffer();
196
+ var a_position = gl.getAttribLocation(program, "a_position");
197
+ var vao = gl.createVertexArray();
198
+ gl.bindVertexArray(vao);
199
+ gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
200
+ gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([
201
+ -1, -1,
202
+ 1, -1,
203
+ 1, 1,
204
+ -1, -1,
205
+ 1, 1,
206
+ -1, 1,
207
+ ]), gl.STATIC_DRAW);
208
+ gl.enableVertexAttribArray(a_position);
209
+ gl.vertexAttribPointer(a_position, 2, gl.FLOAT, false, 0, 0);
210
+ gl.bindVertexArray(null);
211
+ return {
212
+ program: program,
213
+ vao: vao,
214
+ u_main_texture: gl.getUniformLocation(program, "u_main_texture"),
215
+ u_bloom_texture: gl.getUniformLocation(program, "u_bloom_texture"),
216
+ u_exposure: gl.getUniformLocation(program, "u_exposure"),
217
+ u_gamma: gl.getUniformLocation(program, "u_gamma"),
218
+ u_final_alpha_ratio: gl.getUniformLocation(program, "u_final_alpha_ratio"),
219
+ };
220
+ };
221
+ TrackGlowLineProgram.prototype._createBlurProgram = function () {
222
+ var gl = this.gl;
223
+ var vertexShader = "#version 300 es\nprecision highp float;\n\nin vec2 a_position;\nout vec2 v_texcoord;\n\nvoid main() {\n gl_Position = vec4(a_position, 0.0, 1.0);\n v_texcoord = a_position.xy * 0.5 + 0.5;\n}";
224
+ var fragmentShader = "#version 300 es\nprecision highp float;\n\nin vec2 v_texcoord;\n\nuniform sampler2D u_texture;\nuniform bool u_horizontal;\nuniform float u_weight[5];\nout vec4 outColor;\n\nvoid main()\n{ \n vec2 tex_offset = vec2( \n 1.0 / float(textureSize(u_texture, 0).x),\n 1.0 / float(textureSize(u_texture, 0).y) ); // gets size of single texel\n vec3 color = vec3(0.0);\n float total_alpha = texture(u_texture, v_texcoord).a * u_weight[0]; \n if (total_alpha > 0.0){\n color = texture(u_texture, v_texcoord).rgb;\n }\n vec2 offset = vec2(0.0);\n float alpha;\n\n if(u_horizontal){\n for(int i = 1; i < 5; ++i){\n offset = vec2(tex_offset.x * float(i), 0.0);\n alpha = texture(u_texture, v_texcoord + offset).a * u_weight[i];\n color = mix( color, texture(u_texture, v_texcoord + offset).rgb, alpha);\n total_alpha += alpha;\n alpha = texture(u_texture, v_texcoord - offset).a * u_weight[i];\n color = mix( color, texture(u_texture, v_texcoord - offset).rgb, alpha);\n total_alpha += alpha;\n }\n }\n else\n {\n for(int i = 1; i < 5; ++i)\n {\n offset = vec2(0.0, tex_offset.y * float(i));\n alpha = texture(u_texture, v_texcoord + offset).a * u_weight[i];\n color = mix( color, texture(u_texture, v_texcoord + offset).rgb, alpha);\n total_alpha += alpha;\n alpha = texture(u_texture, v_texcoord - offset).a * u_weight[i];\n color = mix( color, texture(u_texture, v_texcoord - offset).rgb, alpha);\n total_alpha += alpha;\n }\n }\n outColor = vec4(color, total_alpha);\n}\n";
225
+ var program = (0, util_1.createProgram)(this.gl, vertexShader, fragmentShader);
226
+ var buffer = gl.createBuffer();
227
+ var a_position = gl.getAttribLocation(program, "a_position");
228
+ gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
229
+ gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([
230
+ -1, -1,
231
+ 1, -1,
232
+ 1, 1,
233
+ -1, -1,
234
+ 1, 1,
235
+ -1, 1,
236
+ ]), gl.STATIC_DRAW);
237
+ var vao = gl.createVertexArray();
238
+ gl.bindVertexArray(vao);
239
+ gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
240
+ gl.enableVertexAttribArray(a_position);
241
+ gl.vertexAttribPointer(a_position, 2, gl.FLOAT, false, 0, 0);
242
+ gl.bindVertexArray(null);
243
+ return {
244
+ program: program,
245
+ vao: vao,
246
+ u_texture: gl.getUniformLocation(program, "u_texture"),
247
+ u_horizontal: gl.getUniformLocation(program, "u_horizontal"),
248
+ u_weight: gl.getUniformLocation(program, "u_weight"),
249
+ };
250
+ };
251
+ TrackGlowLineProgram.prototype.resize = function (width, height) {
252
+ var _a = this, gl = _a.gl, _lineProgram = _a._lineProgram;
253
+ this._width = width;
254
+ this._height = height;
255
+ var currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);
256
+ this._createInnerTextures();
257
+ gl.useProgram(_lineProgram.program);
258
+ gl.uniform2fv(_lineProgram.u_scrWH, [width, height]);
259
+ gl.useProgram(currentProgram);
260
+ };
261
+ TrackGlowLineProgram.prototype._createLineProgram = function () {
262
+ var gl = this.gl;
263
+ var vertexShader = "#version 300 es\nprecision highp float;\n\nin vec3 a_position;\nin float a_time;\nin vec3 a_color;\nin float a_track_start_time;\nin float a_track_end_time;\n\nuniform mat4 uModelViewMatrix;\nuniform mat4 uProjectionMatrix;\nuniform vec3 uTranslate;\n\nuniform bool u_is_3d;\nuniform vec2 u_mapWH;\nuniform vec2 u_scrWH;\n\nout float v_time;\nout vec3 v_color;\nout float v_track_start_time;\nout float v_track_end_time;\n".concat(util_1.shaderfunctions.pixelXYToCartesian3DPoint, "\n").concat(util_1.shaderfunctions.pixelXYToCartesian2DPoint, "\n \nvoid main() {\n\n v_time = a_time;\n v_color = a_color;\n v_track_start_time = a_track_start_time;\n v_track_end_time = a_track_end_time;\n if (u_is_3d){\n vec3 pos = pixelXYToCartesian3DPoint(a_position);\n gl_Position = uProjectionMatrix * uModelViewMatrix * vec4(pos - uTranslate, 1.0);\n } else {\n vec2 xy = pixelXYToCartesian2DPoint(a_position.xy, uTranslate.xy, u_mapWH, u_scrWH);\n gl_Position = uProjectionMatrix * vec4(xy.x, xy.y, 0.0, 1.0);\n }\n}\n");
264
+ var fragmentShader = "#version 300 es\nprecision lowp float;\n\nin float v_time;\nin vec3 v_color;\nin float v_track_start_time;\nin float v_track_end_time;\nuniform float u_head_time;\nuniform float u_tail_time;\n\nuniform float u_head_percentage;\nuniform float u_route_alpha;\n\nlayout(location = 0) out vec4 outColor0;\nlayout(location = 1) out vec4 outColor1;\n\n\nvoid main() {\n if ( u_tail_time > v_track_end_time || u_head_time < v_track_start_time) discard;\n float gap = u_head_time - u_tail_time;\n float head = gap * u_head_percentage;\n float dist = u_head_time - v_time;\n\n if ((v_time > u_head_time ) || (v_time < u_tail_time) ){ \n outColor0 = vec4(v_color , u_route_alpha);\n return;\n } else if (dist < head) { \n // white head\n outColor1 = vec4(1.0, 1.0, 1.0, 1.0); \n // \n } else {\n // colored body of lines\n float alpha = ((gap - dist) / gap) * 0.4 + 0.6;\n // outColor0 = vec4(v_color , alpha ); \n outColor1 = vec4(v_color , alpha ); \n }\n outColor0 = vec4(v_color , 1.0);\n}\n";
265
+ var program = (0, util_1.createProgram)(this.gl, vertexShader, fragmentShader);
266
+ var a_position = gl.getAttribLocation(program, "a_position");
267
+ var a_time = gl.getAttribLocation(program, "a_time");
268
+ var a_track_start_time = gl.getAttribLocation(program, "a_track_start_time");
269
+ var a_track_end_time = gl.getAttribLocation(program, "a_track_end_time");
270
+ var a_color = gl.getAttribLocation(program, "a_color");
271
+ var vao = gl.createVertexArray();
272
+ gl.bindVertexArray(vao);
273
+ gl.bindBuffer(gl.ARRAY_BUFFER, this._inBuffer);
274
+ gl.enableVertexAttribArray(a_position);
275
+ gl.vertexAttribPointer(a_position, 3, gl.FLOAT, false, 36, 0);
276
+ gl.enableVertexAttribArray(a_time);
277
+ gl.vertexAttribPointer(a_time, 1, gl.FLOAT, false, 36, 12);
278
+ gl.enableVertexAttribArray(a_color);
279
+ gl.vertexAttribPointer(a_color, 3, gl.FLOAT, false, 36, 16);
280
+ gl.enableVertexAttribArray(a_track_start_time);
281
+ gl.vertexAttribPointer(a_track_start_time, 1, gl.FLOAT, false, 36, 28);
282
+ gl.enableVertexAttribArray(a_track_end_time);
283
+ gl.vertexAttribPointer(a_track_end_time, 1, gl.FLOAT, false, 36, 32);
284
+ gl.bindVertexArray(null);
285
+ return {
286
+ program: program,
287
+ vao: vao,
288
+ u_head_time: gl.getUniformLocation(program, "u_head_time"),
289
+ u_tail_time: gl.getUniformLocation(program, "u_tail_time"),
290
+ uTranslate: gl.getUniformLocation(program, "uTranslate"),
291
+ uModelViewMatrix: gl.getUniformLocation(program, "uModelViewMatrix"),
292
+ uProjectionMatrix: gl.getUniformLocation(program, "uProjectionMatrix"),
293
+ u_is_3d: gl.getUniformLocation(program, "u_is_3d"),
294
+ u_mapWH: gl.getUniformLocation(program, "u_mapWH"),
295
+ u_scrWH: gl.getUniformLocation(program, "u_scrWH"),
296
+ u_head_percentage: gl.getUniformLocation(program, "u_head_percentage"),
297
+ u_route_alpha: gl.getUniformLocation(program, "u_route_alpha"),
298
+ };
299
+ };
300
+ /**
301
+ * @param { Float32Array} data // [x, y, z, time, x, y, z, time, ...]
302
+ */
303
+ // setInBuffer(data) {
304
+ // const gl = this.gl;
305
+ // gl.bindBuffer(gl.ARRAY_BUFFER, this._inBuffer);
306
+ // gl.bufferData(gl.ARRAY_BUFFER, data, gl.STATIC_DRAW);
307
+ // }
308
+ TrackGlowLineProgram.prototype.setIs3D = function (is3d) {
309
+ var _a = this, gl = _a.gl, _lineProgram = _a._lineProgram;
310
+ var currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);
311
+ gl.useProgram(_lineProgram.program);
312
+ gl.uniform1i(_lineProgram.u_is_3d, is3d);
313
+ gl.useProgram(currentProgram);
314
+ };
315
+ TrackGlowLineProgram.prototype.setTotalLength = function (totalLength) {
316
+ this._totalLength = totalLength;
317
+ };
318
+ TrackGlowLineProgram.prototype._createTextures = function () {
319
+ var _a = this, gl = _a.gl, _width = _a._width, _height = _a._height;
320
+ var texture = gl.createTexture();
321
+ gl.bindTexture(gl.TEXTURE_2D, texture);
322
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA8, _width, _height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null); // UNSIGNED_BYTE
323
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
324
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
325
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
326
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
327
+ gl.bindTexture(gl.TEXTURE_2D, null);
328
+ return texture;
329
+ };
330
+ TrackGlowLineProgram.prototype._resetTexture = function () {
331
+ var _a = this, gl = _a.gl, _width = _a._width, _height = _a._height;
332
+ gl.bindTexture(gl.TEXTURE_2D, this._middleTexture); // UNSIGNED_BYTE
333
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA8, _width, _height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);
334
+ gl.bindTexture(gl.TEXTURE_2D, this._blurTextures[0]);
335
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA8, _width, _height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);
336
+ gl.bindTexture(gl.TEXTURE_2D, this._blurTextures[1]);
337
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA8, _width, _height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);
338
+ gl.bindTexture(gl.TEXTURE_2D, null);
339
+ };
340
+ TrackGlowLineProgram.prototype.draw = function (u_head_time, u_tail_time, uProjectionMatrix, uModelViewMatrix, uTranslate, u_mapWH) {
341
+ if (u_mapWH === void 0) { u_mapWH = null; }
342
+ var _a = this, gl = _a.gl, _lineProgram = _a._lineProgram, _blurProgram = _a._blurProgram, _blurRepetition = _a._blurRepetition;
343
+ this._resetTexture();
344
+ gl.enable(gl.BLEND);
345
+ gl.blendFuncSeparate(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
346
+ { // draw lines
347
+ gl.bindFramebuffer(gl.FRAMEBUFFER, this._frameBuffer);
348
+ gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, this._middleTexture, 0);
349
+ gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT1, gl.TEXTURE_2D, this._blurTextures[0], 0);
350
+ gl.drawBuffers([
351
+ gl.COLOR_ATTACHMENT0,
352
+ gl.COLOR_ATTACHMENT1,
353
+ ]);
354
+ gl.useProgram(_lineProgram.program);
355
+ gl.uniform1f(_lineProgram.u_head_time, u_head_time);
356
+ gl.uniform1f(_lineProgram.u_tail_time, u_tail_time);
357
+ gl.uniformMatrix4fv(_lineProgram.uProjectionMatrix, false, uProjectionMatrix);
358
+ if (u_mapWH) {
359
+ gl.uniform2fv(_lineProgram.u_mapWH, u_mapWH);
360
+ }
361
+ else {
362
+ gl.uniformMatrix4fv(_lineProgram.uModelViewMatrix, false, uModelViewMatrix);
363
+ }
364
+ gl.uniform3fv(_lineProgram.uTranslate, uTranslate);
365
+ gl.bindVertexArray(_lineProgram.vao);
366
+ gl.drawArrays(gl.LINE_STRIP, 0, this._totalLength);
367
+ gl.drawBuffers([
368
+ gl.COLOR_ATTACHMENT0,
369
+ gl.NONE
370
+ ]);
371
+ }
372
+ { // blur ping pong
373
+ gl.useProgram(_blurProgram.program);
374
+ gl.bindVertexArray(_blurProgram.vao);
375
+ for (var i = 0; i < _blurRepetition * 2; i++) {
376
+ gl.bindFramebuffer(gl.FRAMEBUFFER, this._blurFrameBuffers[i % 2]);
377
+ gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, this._blurTextures[(i + 1) % 2], 0);
378
+ gl.bindTexture(gl.TEXTURE_2D, this._blurTextures[i % 2]);
379
+ gl.uniform1i(_blurProgram.u_texture, 0);
380
+ gl.uniform1f(_blurProgram.u_horizontal, i % 2 == 0);
381
+ gl.drawArrays(gl.TRIANGLES, 0, 6);
382
+ }
383
+ }
384
+ { // combine
385
+ gl.bindFramebuffer(gl.FRAMEBUFFER, null);
386
+ gl.useProgram(this._combineProgram.program);
387
+ gl.bindVertexArray(this._combineProgram.vao);
388
+ gl.activeTexture(gl.TEXTURE1);
389
+ gl.bindTexture(gl.TEXTURE_2D, this._blurTextures[1]);
390
+ gl.uniform1i(this._combineProgram.u_bloom_texture, 1);
391
+ gl.activeTexture(gl.TEXTURE0);
392
+ gl.bindTexture(gl.TEXTURE_2D, this._middleTexture);
393
+ gl.uniform1i(this._combineProgram.u_main_texture, 0);
394
+ gl.drawArrays(gl.TRIANGLES, 0, 6);
395
+ }
396
+ gl.bindVertexArray(null);
397
+ (0, util_1.defaultblendfunction)(gl);
398
+ };
399
+ TrackGlowLineProgram.prototype.free = function () {
400
+ var _a = this, gl = _a.gl, _lineProgram = _a._lineProgram, _blurProgram = _a._blurProgram, _combineProgram = _a._combineProgram;
401
+ gl.deleteBuffer(this._inBuffer);
402
+ gl.deleteFramebuffer(this._frameBuffer);
403
+ gl.deleteFramebuffer(this._blurFrameBuffers[0]);
404
+ gl.deleteFramebuffer(this._blurFrameBuffers[1]);
405
+ // gl.deleteBuffer(this._middleTexture);
406
+ gl.deleteTexture(this._middleTexture);
407
+ gl.deleteTexture(this._blurTextures[0]);
408
+ gl.deleteTexture(this._blurTextures[1]);
409
+ gl.deleteVertexArray(_lineProgram.vao);
410
+ gl.deleteVertexArray(_blurProgram.vao);
411
+ gl.deleteVertexArray(_combineProgram.vao);
412
+ gl.deleteProgram(_lineProgram.program);
413
+ gl.deleteProgram(_blurProgram.program);
414
+ gl.deleteProgram(_combineProgram.program);
415
+ };
416
+ return TrackGlowLineProgram;
417
+ }());
418
+ exports.default = TrackGlowLineProgram;