@pirireis/webglobeplugins 0.9.9 → 0.9.10

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 (211) hide show
  1. package/Math/angle-calculation.js +15 -0
  2. package/Math/arc.js +65 -0
  3. package/Math/bounds/line-bbox.js +188 -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 +56 -0
  14. package/Math/matrix4.js +1 -0
  15. package/Math/methods.js +201 -0
  16. package/Math/plane.js +60 -0
  17. package/Math/quaternion.js +104 -0
  18. package/Math/types.js +2 -0
  19. package/Math/utils.js +4 -0
  20. package/Math/vec3.js +126 -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 +18 -0
  24. package/altitude-locator/keymethod.js +1 -0
  25. package/altitude-locator/plugin.js +341 -0
  26. package/altitude-locator/types.js +23 -0
  27. package/arrowfield/adaptor.js +14 -0
  28. package/arrowfield/index.js +10 -0
  29. package/arrowfield/plugin.js +86 -0
  30. package/bearing-line/index.js +8 -0
  31. package/bearing-line/plugin.js +449 -0
  32. package/circle-line-chain/chain-list-map.js +205 -0
  33. package/circle-line-chain/init.js +1 -0
  34. package/circle-line-chain/plugin.js +424 -0
  35. package/circle-line-chain/util.js +5 -0
  36. package/compass-rose/compass-rose-padding-flat.js +225 -0
  37. package/compass-rose/compass-text-writer.js +153 -0
  38. package/compass-rose/index.js +7 -0
  39. package/compassrose/compassrose.js +296 -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 +202 -0
  44. package/heatwave/isobar/plugin.js +343 -0
  45. package/heatwave/isobar/quadtreecontours.js +300 -0
  46. package/heatwave/plugins/heatwaveglobeshell.js +206 -0
  47. package/jest.config.js +7 -0
  48. package/package.json +4 -4
  49. package/partialrings/buffer-manager.js +81 -0
  50. package/partialrings/index.js +41 -0
  51. package/partialrings/plugin.js +135 -0
  52. package/partialrings/program.js +286 -0
  53. package/pin/pin-object-array.js +305 -0
  54. package/pin/pin-point-totem.js +60 -0
  55. package/point-heat-map/adaptors/timetracksplugin-format-to-this.js +66 -0
  56. package/point-heat-map/index.js +1 -0
  57. package/point-heat-map/plugin-webworker.js +126 -0
  58. package/point-heat-map/point-to-heat-map-flow.js +127 -0
  59. package/point-tracks/key-methods.js +5 -0
  60. package/point-tracks/plugin.js +338 -0
  61. package/programs/arrowfield/index.js +7 -0
  62. package/programs/arrowfield/logic.js +257 -0
  63. package/programs/arrowfield/object.js +66 -0
  64. package/programs/data2legend/density-to-legend.js +101 -0
  65. package/programs/data2legend/point-to-density-texture.js +100 -0
  66. package/programs/float2legendwithratio/index.js +8 -0
  67. package/programs/float2legendwithratio/logic.js +171 -0
  68. package/programs/float2legendwithratio/object.js +110 -0
  69. package/programs/globe-util/is-globe-moved.js +21 -0
  70. package/programs/globeshell/index.js +8 -0
  71. package/programs/globeshell/noise/noises.js +1 -0
  72. package/programs/globeshell/wiggle/index.js +8 -0
  73. package/programs/globeshell/wiggle/logic.js +345 -0
  74. package/programs/globeshell/wiggle/object.js +72 -0
  75. package/programs/helpers/blender/index.js +1 -0
  76. package/programs/helpers/blender/program.js +79 -0
  77. package/programs/helpers/fadeaway/index.js +7 -0
  78. package/programs/helpers/fadeaway/logic.js +72 -0
  79. package/programs/helpers/fadeaway/object.js +20 -0
  80. package/programs/helpers/index.js +8 -0
  81. package/programs/index.js +58 -0
  82. package/programs/interface.js +1 -0
  83. package/programs/line-on-globe/angled-line.js +176 -0
  84. package/programs/line-on-globe/circle-accurate-3d.js +141 -0
  85. package/programs/line-on-globe/circle-accurate-flat.js +216 -0
  86. package/programs/line-on-globe/circle-accurate.js +178 -0
  87. package/programs/line-on-globe/circle.js +167 -0
  88. package/programs/line-on-globe/degree-padding-around-circle-3d.js +159 -0
  89. package/programs/line-on-globe/index.js +1 -0
  90. package/programs/line-on-globe/lines-color-instanced-flat.js +136 -0
  91. package/programs/line-on-globe/linestrip.js +171 -0
  92. package/programs/line-on-globe/naive-accurate-flexible.js +195 -0
  93. package/programs/line-on-globe/to-the-surface.js +111 -0
  94. package/programs/line-on-globe/util.js +8 -0
  95. package/programs/picking/pickable-renderer.js +188 -0
  96. package/programs/point-on-globe/element-globe-surface-glow.js +142 -0
  97. package/programs/point-on-globe/element-point-glow.js +153 -0
  98. package/programs/point-on-globe/square-pixel-point.js +174 -0
  99. package/programs/programcache.js +131 -0
  100. package/programs/rings/distancering/circleflatprogram.js +156 -0
  101. package/programs/rings/distancering/circlepaddingfreeangleprogram.js +369 -0
  102. package/programs/rings/distancering/circlepaddysharedbuffer.js +357 -0
  103. package/programs/rings/distancering/index.js +14 -0
  104. package/programs/rings/distancering/paddyflatprogram.js +172 -0
  105. package/programs/rings/distancering/paddyflatprogram2d.js +174 -0
  106. package/programs/rings/distancering/paddyflatprogram3d.js +172 -0
  107. package/programs/rings/distancering/shader.js +1 -0
  108. package/programs/rings/index.js +17 -0
  109. package/programs/rings/partial-ring/piece-of-pie.js +275 -0
  110. package/programs/totems/camerauniformblock.js +160 -0
  111. package/programs/totems/canvas-webglobe-info.js +110 -0
  112. package/programs/totems/gpu-selection-uniform-block.js +108 -0
  113. package/programs/totems/index.js +40 -0
  114. package/programs/two-d/pixel-circle.js +1 -0
  115. package/programs/two-d/pixel-padding-for-compass.js +162 -0
  116. package/programs/util.js +17 -0
  117. package/programs/vectorfields/index.js +23 -0
  118. package/programs/vectorfields/logics/drawrectangleparticles.js +107 -0
  119. package/programs/vectorfields/logics/index.js +12 -0
  120. package/programs/vectorfields/logics/pixelbased.js +142 -0
  121. package/programs/vectorfields/logics/ubo.js +63 -0
  122. package/programs/vectorfields/pingpongbuffermanager.js +76 -0
  123. package/rangerings/enum.js +5 -0
  124. package/rangerings/index.js +15 -0
  125. package/rangerings/plugin.js +560 -0
  126. package/rangerings/rangeringangletext.js +329 -0
  127. package/rangerings/ring-account.js +117 -0
  128. package/shaders/fragment-toy/firework.js +58 -0
  129. package/shaders/fragment-toy/singularity.js +59 -0
  130. package/shape-on-terrain/arc/naive/plugin.js +252 -0
  131. package/timetracks/adaptors-line-strip.js +71 -0
  132. package/timetracks/adaptors.js +122 -0
  133. package/timetracks/index.js +19 -0
  134. package/timetracks/plugin-line-strip.js +250 -0
  135. package/timetracks/plugin.js +258 -0
  136. package/timetracks/program-line-strip.js +611 -0
  137. package/timetracks/program.js +772 -0
  138. package/timetracks/programpoint-line-strip.js +154 -0
  139. package/timetracks/programpoint.js +147 -0
  140. package/types.js +15 -0
  141. package/util/account/bufferoffsetmanager.js +179 -0
  142. package/util/account/index.js +23 -0
  143. package/util/account/single-attribute-buffer-management/buffer-manager.js +108 -0
  144. package/util/account/single-attribute-buffer-management/buffer-orchestrator.js +150 -0
  145. package/util/account/single-attribute-buffer-management/index.js +9 -0
  146. package/util/account/single-attribute-buffer-management/object-store.js +51 -0
  147. package/util/account/single-attribute-buffer-management/types.js +2 -0
  148. package/util/account/util.js +22 -0
  149. package/util/algorithms/index.js +1 -0
  150. package/util/algorithms/search-binary.js +28 -0
  151. package/util/check/get.js +18 -0
  152. package/util/check/index.js +1 -0
  153. package/util/check/typecheck.js +49 -0
  154. package/util/geometry/index.js +51 -0
  155. package/util/gl-util/buffer/attribute-loader.js +69 -0
  156. package/util/gl-util/buffer/index.js +6 -0
  157. package/util/gl-util/buffer/types.js +1 -0
  158. package/util/gl-util/draw-options/methods.js +38 -0
  159. package/util/gl-util/draw-options/types.js +15 -0
  160. package/util/gl-util/uniform-block/manager.js +156 -0
  161. package/util/gl-util/uniform-block/shader.js +1 -0
  162. package/util/gl-util/uniform-block/types.js +8 -0
  163. package/util/heatwavedatamanager/datamanager.js +152 -0
  164. package/util/heatwavedatamanager/index.js +10 -0
  165. package/util/heatwavedatamanager/pointcoordinatesdatacalculator.js +122 -0
  166. package/util/heatwavedatamanager/pointcoordsmeta.js +20 -0
  167. package/util/index.js +57 -0
  168. package/util/interpolation/index.js +1 -0
  169. package/util/interpolation/timetrack/index.js +5 -0
  170. package/util/interpolation/timetrack/timetrack-interpolator.js +79 -0
  171. package/util/interpolation/timetrack/web-worker-str.js +183 -0
  172. package/util/interpolation/timetrack/web-worker.js +48 -0
  173. package/util/jshelpers/data-filler.js +20 -0
  174. package/util/jshelpers/equality.js +20 -0
  175. package/util/jshelpers/index.js +37 -0
  176. package/util/jshelpers/timefilters.js +32 -0
  177. package/util/picking/fence.js +46 -0
  178. package/util/picking/picker-displayer.js +139 -0
  179. package/util/programs/draw-texture-on-canvas.js +89 -0
  180. package/util/programs/index.js +17 -0
  181. package/util/programs/shapesonglobe.js +214 -0
  182. package/util/programs/supersampletotextures.js +113 -0
  183. package/util/programs/texturetoglobe.js +182 -0
  184. package/util/shaderfunctions/geometrytransformations.js +340 -0
  185. package/util/shaderfunctions/index.js +18 -0
  186. package/util/shaderfunctions/nodata.js +11 -0
  187. package/util/shaderfunctions/noisefunctions.js +43 -0
  188. package/util/surface-line-data/arc-bboxes.js +25 -0
  189. package/util/surface-line-data/arcs-to-cuts.js +50 -0
  190. package/util/surface-line-data/cut-arc.js +1 -0
  191. package/util/surface-line-data/flow.js +28 -0
  192. package/util/surface-line-data/rbush-manager.js +1 -0
  193. package/util/surface-line-data/types.js +1 -0
  194. package/util/surface-line-data/web-worker.js +1 -0
  195. package/util/webglobe/gldefaultstates.js +7 -0
  196. package/util/webglobe/index.js +18 -0
  197. package/util/webglobe/rasteroverlay.js +78 -0
  198. package/util/webglobjectbuilders.js +388 -0
  199. package/util/webglobjectbuilders1.js +237 -0
  200. package/waveparticles/adaptor.js +17 -0
  201. package/waveparticles/index.js +10 -0
  202. package/waveparticles/plugin.js +266 -0
  203. package/wind/imagetovectorfieldandmagnitude.js +35 -0
  204. package/wind/index.js +14 -0
  205. package/wind/plugin.js +926 -0
  206. package/wind/vectorfieldimage.js +25 -0
  207. package/write-text/attached-text-writer.js +91 -0
  208. package/write-text/context-text.js +98 -0
  209. package/write-text/context-text3.js +155 -0
  210. package/write-text/index.js +5 -0
  211. package/write-text/writer-plugin.js +8 -0
@@ -0,0 +1,772 @@
1
+ "use strict";
2
+ /**
3
+ * Author: Toprak Nihat Deniz Ozturk
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const util_1 = require("../util");
7
+ class TrackGlowLineProgram {
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
+ constructor(gl, attrBuffer, width, height, options = {}) {
23
+ this.gl = gl;
24
+ this.program = null;
25
+ this._premultipliedAlpha = false;
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
+ _createInnerTextures() {
42
+ this._middleTexture = this._createTextures();
43
+ this._blurTextures = [this._createTextures(), this._createTextures()];
44
+ }
45
+ _initUniforms(options = {}) {
46
+ const { gl, _lineProgram, _blurProgram, _combineProgram } = this;
47
+ const currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);
48
+ gl.useProgram(_lineProgram.program);
49
+ gl.uniform1f(_lineProgram.u_head_percentage, options.headPercentage || 1.0 / 30.0);
50
+ gl.uniform1f(_lineProgram.u_route_alpha, options.routeAlpha || 0.025);
51
+ gl.useProgram(_blurProgram.program);
52
+ gl.uniform1fv(_blurProgram.u_weight, options.weights || [1, 0.45045946, 0.2216216, 0.154054, 0.056216]);
53
+ gl.uniform1f(_blurProgram.u_alpha_threshold, options.alphaThreshold || 0.0);
54
+ gl.uniform1i(_blurProgram.u_glow, 1);
55
+ gl.useProgram(_combineProgram.program);
56
+ gl.uniform1f(_combineProgram.u_exposure, options.exposure || 1.0);
57
+ gl.uniform1f(_combineProgram.u_gamma, options.gamma || 1.0);
58
+ gl.uniform1f(_combineProgram.u_final_alpha_ratio, options.finalAlphaRatio || 1.0);
59
+ gl.useProgram(currentProgram);
60
+ }
61
+ setPremultipliedAlpha(boolean) {
62
+ if (typeof boolean !== 'boolean') {
63
+ console.warn("boolean should be a boolean value, but got", boolean);
64
+ return;
65
+ }
66
+ this._premultipliedAlpha = boolean;
67
+ }
68
+ /**
69
+ * @param {number} alpha 0 ~ 1
70
+ * @returns
71
+ */
72
+ setAlphaThreshold(alpha) {
73
+ if (alpha < 0 || alpha > 1) {
74
+ console.warn("alpha should be between 0 and 1, but got", alpha);
75
+ return;
76
+ }
77
+ const { gl, _blurProgram } = this;
78
+ const currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);
79
+ gl.useProgram(_blurProgram.program);
80
+ gl.uniform1f(_blurProgram.u_alpha_threshold, alpha);
81
+ gl.useProgram(currentProgram);
82
+ }
83
+ /**
84
+ * @param {number} gamma 0 ~ inf
85
+ */
86
+ setGamma(gamma) {
87
+ if (gamma < 0) {
88
+ console.warn("gamma should be equal or greater than 0, but got", gamma);
89
+ return;
90
+ }
91
+ const { gl, _combineProgram } = this;
92
+ const currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);
93
+ gl.useProgram(_combineProgram.program);
94
+ gl.uniform1f(_combineProgram.u_gamma, gamma);
95
+ gl.useProgram(currentProgram);
96
+ }
97
+ /**
98
+ *
99
+ * @param {number} exposure 0 ~ inf
100
+ * @returns
101
+ */
102
+ setExposure(exposure) {
103
+ if (exposure < 0) {
104
+ console.warn("exposure should be equal or greater than 0, but got", exposure);
105
+ return;
106
+ }
107
+ const { gl, _combineProgram } = this;
108
+ const currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);
109
+ gl.useProgram(_combineProgram.program);
110
+ gl.uniform1f(_combineProgram.u_exposure, exposure);
111
+ gl.useProgram(currentProgram);
112
+ }
113
+ /**
114
+ *
115
+ * @param {number} ratio 0 ~ 1
116
+ * @returns
117
+ */
118
+ setFinalAlphaRatio(ratio) {
119
+ if (ratio < 0 || ratio > 1) {
120
+ console.warn("ratio should be between 0 and 1, but got", ratio);
121
+ return;
122
+ }
123
+ const { gl, _combineProgram } = this;
124
+ const currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);
125
+ gl.useProgram(_combineProgram.program);
126
+ gl.uniform1f(_combineProgram.u_final_alpha_ratio, ratio);
127
+ gl.useProgram(currentProgram);
128
+ }
129
+ /**
130
+ * @param {Array.<Number>} weight [w1, w2, w3, w4, w5]
131
+ */
132
+ setBlurWeights(weights) {
133
+ if (weights.length !== 5) {
134
+ console.warn("weights should be an array of 5 numbers, but got", weights);
135
+ return;
136
+ }
137
+ const { gl, _blurProgram } = this;
138
+ const currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);
139
+ gl.useProgram(_blurProgram.program);
140
+ gl.uniform1fv(_blurProgram.u_weight, weights);
141
+ gl.useProgram(currentProgram);
142
+ }
143
+ /**
144
+ * @param {number} routeAlpha 0 ~ 1
145
+ */
146
+ setRouteAlpha(routeAlpha) {
147
+ if (routeAlpha < 0 || routeAlpha > 1) {
148
+ console.warn("routeAlpha should be between 0 and 1, but got", routeAlpha);
149
+ return;
150
+ }
151
+ const { gl, _lineProgram } = this;
152
+ const currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);
153
+ gl.useProgram(_lineProgram.program);
154
+ gl.uniform1f(_lineProgram.u_route_alpha, routeAlpha);
155
+ gl.useProgram(currentProgram);
156
+ }
157
+ setGlow(boolean) {
158
+ if (typeof boolean !== 'boolean') {
159
+ console.warn("boolean should be a boolean value, but got", boolean);
160
+ return;
161
+ }
162
+ const { gl, _blurProgram } = this;
163
+ const currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);
164
+ gl.useProgram(_blurProgram.program);
165
+ gl.uniform1i(_blurProgram.u_glow, boolean);
166
+ gl.useProgram(currentProgram);
167
+ }
168
+ /**
169
+ * blur uses pingpong effect. This number decides how many times the blur will be applied.
170
+ * @param {+int} repetition
171
+ * @returns
172
+ */
173
+ setBlurRepetition(repetition) {
174
+ if (repetition < 0 && repetition % 1 !== 0) {
175
+ console.warn("repetition should be an integer greater than 0, but got", repetition);
176
+ return;
177
+ }
178
+ this._blurRepetition = repetition;
179
+ }
180
+ /**
181
+ * Head Is colored as white. This number decides proportion of the head according to the total length of the line.
182
+ * @param {Number} percentage 0 ~ 1
183
+ */
184
+ setHeadPercentage(percentage) {
185
+ if (percentage < 0 || 1 < percentage) {
186
+ console.warn("percentage should be between 0 and 1, but got", percentage);
187
+ return;
188
+ }
189
+ ;
190
+ const { gl, _lineProgram } = this;
191
+ const currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);
192
+ gl.useProgram(_lineProgram.program);
193
+ gl.uniform1f(_lineProgram.u_head_percentage, percentage);
194
+ gl.useProgram(currentProgram);
195
+ }
196
+ _createCombineProgram() {
197
+ const gl = this.gl;
198
+ const vertexShader = `#version 300 es
199
+ precision lowp float;
200
+
201
+ in vec2 a_position;
202
+
203
+ out vec2 v_texcoord;
204
+
205
+ void main() {
206
+ gl_Position = vec4(a_position, 0.0, 1.0);
207
+ v_texcoord = a_position.xy * 0.5 + 0.5;
208
+ }
209
+ `;
210
+ const fragmentShader = `#version 300 es
211
+ precision lowp float;
212
+
213
+ in vec2 v_texcoord;
214
+
215
+ uniform sampler2D u_main_texture;
216
+ uniform sampler2D u_bloom_texture;
217
+
218
+ uniform float u_exposure;
219
+ uniform float u_gamma;
220
+ uniform float u_final_alpha_ratio;
221
+
222
+ out vec4 outColor;
223
+
224
+ void main() {
225
+ vec4 hdrColor = texture(u_main_texture, v_texcoord);
226
+ vec4 bloomColor = texture(u_bloom_texture, v_texcoord);
227
+ vec4 result;
228
+ if (bloomColor.a > 0.09){
229
+ result = bloomColor * u_exposure;
230
+ } else {
231
+ result = hdrColor + bloomColor * u_exposure;
232
+ }
233
+ result = pow(result, vec4(1.0 / u_gamma));
234
+ outColor = vec4(result.rgb, result.a * u_final_alpha_ratio);
235
+ }
236
+ `;
237
+ const program = (0, util_1.createProgram)(this.gl, vertexShader, fragmentShader);
238
+ const buffer = gl.createBuffer();
239
+ const a_position = gl.getAttribLocation(program, "a_position");
240
+ const vao = gl.createVertexArray();
241
+ gl.bindVertexArray(vao);
242
+ gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
243
+ gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([
244
+ -1, -1,
245
+ 1, -1,
246
+ 1, 1,
247
+ -1, -1,
248
+ 1, 1,
249
+ -1, 1,
250
+ ]), gl.STATIC_DRAW);
251
+ gl.enableVertexAttribArray(a_position);
252
+ gl.vertexAttribPointer(a_position, 2, gl.FLOAT, false, 0, 0);
253
+ gl.bindVertexArray(null);
254
+ return {
255
+ program: program,
256
+ vao: vao,
257
+ u_main_texture: gl.getUniformLocation(program, "u_main_texture"),
258
+ u_bloom_texture: gl.getUniformLocation(program, "u_bloom_texture"),
259
+ u_exposure: gl.getUniformLocation(program, "u_exposure"),
260
+ u_gamma: gl.getUniformLocation(program, "u_gamma"),
261
+ u_final_alpha_ratio: gl.getUniformLocation(program, "u_final_alpha_ratio"),
262
+ };
263
+ }
264
+ _createBlurProgram() {
265
+ const gl = this.gl;
266
+ const vertexShader = `#version 300 es
267
+ precision highp float;
268
+
269
+ in vec2 a_position;
270
+ out vec2 v_texcoord;
271
+
272
+ void main() {
273
+ gl_Position = vec4(a_position, 0.0, 1.0);
274
+ v_texcoord = a_position.xy * 0.5 + 0.5;
275
+ }
276
+ `;
277
+ const fragmentShader = `#version 300 es
278
+ precision highp float;
279
+
280
+ in vec2 v_texcoord;
281
+
282
+ uniform sampler2D u_texture;
283
+ uniform bool u_horizontal;
284
+ uniform float u_weight[5];
285
+ uniform float u_alpha_threshold;
286
+ uniform bool u_glow;
287
+ out vec4 outColor;
288
+
289
+ void main()
290
+ {
291
+ vec2 tex_offset = vec2(
292
+ 1.0 / float(textureSize(u_texture, 0).x),
293
+ 1.0 / float(textureSize(u_texture, 0).y) ); // gets size of single texel
294
+ vec3 color = vec3(0.0);
295
+ float total_alpha = texture(u_texture, v_texcoord).a * u_weight[0];
296
+ if (total_alpha > 0.0){
297
+ color = texture(u_texture, v_texcoord).rgb;
298
+ }
299
+ vec2 offset = vec2(0.0);
300
+ float alpha;
301
+ float color_count = 0.0;
302
+ if (!u_glow){
303
+ if(u_horizontal){
304
+ for(int i = 1; i < 5; ++i)
305
+ {
306
+ offset = vec2(tex_offset.x * float(i), 0.0);
307
+ alpha = texture(u_texture, v_texcoord + offset).a * u_weight[i];
308
+
309
+ if (alpha > u_alpha_threshold){
310
+ // color = max( color, texture(u_texture, v_texcoord + offset).rgb);
311
+ color += texture(u_texture, v_texcoord + offset).rgb;
312
+ total_alpha += alpha;
313
+ color_count += 1.0;
314
+ }
315
+ alpha = texture(u_texture, v_texcoord - offset).a * u_weight[i];
316
+ if (alpha > u_alpha_threshold){
317
+ // color = max( color, texture(u_texture, v_texcoord - offset).rgb);
318
+ color += texture(u_texture, v_texcoord - offset).rgb ;
319
+ total_alpha += alpha;
320
+ color_count += 1.0;
321
+
322
+ }
323
+ }
324
+ } else {
325
+ for(int i = 1; i < 5; ++i)
326
+ {
327
+ offset = vec2(0.0, tex_offset.y * float(i));
328
+ alpha = texture(u_texture, v_texcoord + offset).a * u_weight[i];
329
+ if (alpha > u_alpha_threshold){
330
+ // color = max( color , texture(u_texture, v_texcoord + offset).rgb);
331
+ color += texture(u_texture, v_texcoord + offset).rgb;
332
+ total_alpha += alpha;
333
+ color_count += 1.0;
334
+
335
+ }
336
+ alpha = texture(u_texture, v_texcoord - offset).a * u_weight[i];
337
+ if (alpha > u_alpha_threshold){
338
+ // color = max( color, texture(u_texture, v_texcoord - offset).rgb );
339
+ color += texture(u_texture, v_texcoord - offset).rgb ;
340
+ total_alpha += alpha;
341
+ color_count += 1.0;
342
+
343
+ }
344
+ }
345
+
346
+ }
347
+ if (color_count > 0.0){
348
+ color /= color_count;
349
+ }
350
+ } else {
351
+ if(u_horizontal)
352
+ {
353
+ for(int i = 1; i < 5; ++i)
354
+ {
355
+ offset = vec2(tex_offset.x * float(i), 0.0);
356
+ alpha = texture(u_texture, v_texcoord + offset).a * u_weight[i];
357
+
358
+ if (alpha > u_alpha_threshold){
359
+ color = max( color, texture(u_texture, v_texcoord + offset).rgb);
360
+ total_alpha += alpha;
361
+ }
362
+ alpha = texture(u_texture, v_texcoord - offset).a * u_weight[i];
363
+ if (alpha > u_alpha_threshold){
364
+ color = max( color, texture(u_texture, v_texcoord - offset).rgb);
365
+
366
+ total_alpha += alpha;
367
+ }
368
+ }
369
+ }
370
+ else
371
+ {
372
+ for(int i = 1; i < 5; ++i)
373
+ {
374
+ offset = vec2(0.0, tex_offset.y * float(i));
375
+ alpha = texture(u_texture, v_texcoord + offset).a * u_weight[i];
376
+ if (alpha > u_alpha_threshold){
377
+ color = max( color, texture(u_texture, v_texcoord + offset).rgb);
378
+ total_alpha += alpha;
379
+ }
380
+ alpha = texture(u_texture, v_texcoord - offset).a * u_weight[i];
381
+ if (alpha > u_alpha_threshold){
382
+ color = max( color, texture(u_texture, v_texcoord - offset).rgb );
383
+ total_alpha += alpha;
384
+ }
385
+ }
386
+ }
387
+ }
388
+ outColor = vec4(color, total_alpha);
389
+ }
390
+ `;
391
+ const program = (0, util_1.createProgram)(this.gl, vertexShader, fragmentShader);
392
+ const buffer = gl.createBuffer();
393
+ const a_position = gl.getAttribLocation(program, "a_position");
394
+ gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
395
+ gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([
396
+ -1, -1,
397
+ 1, -1,
398
+ 1, 1,
399
+ -1, -1,
400
+ 1, 1,
401
+ -1, 1,
402
+ ]), gl.STATIC_DRAW);
403
+ const vao = gl.createVertexArray();
404
+ gl.bindVertexArray(vao);
405
+ gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
406
+ gl.enableVertexAttribArray(a_position);
407
+ gl.vertexAttribPointer(a_position, 2, gl.FLOAT, false, 0, 0);
408
+ gl.bindVertexArray(null);
409
+ return {
410
+ program: program,
411
+ vao: vao,
412
+ u_texture: gl.getUniformLocation(program, "u_texture"),
413
+ u_horizontal: gl.getUniformLocation(program, "u_horizontal"),
414
+ u_weight: gl.getUniformLocation(program, "u_weight"),
415
+ u_alpha_threshold: gl.getUniformLocation(program, "u_alpha_threshold"),
416
+ u_glow: gl.getUniformLocation(program, "u_glow"),
417
+ };
418
+ }
419
+ _createBlurProgramHOLD() {
420
+ const gl = this.gl;
421
+ const vertexShader = `#version 300 es
422
+ precision highp float;
423
+
424
+ in vec2 a_position;
425
+ out vec2 v_texcoord;
426
+
427
+ void main() {
428
+ gl_Position = vec4(a_position, 0.0, 1.0);
429
+ v_texcoord = a_position.xy * 0.5 + 0.5;
430
+ }
431
+ `;
432
+ const fragmentShader = `#version 300 es
433
+ precision highp float;
434
+
435
+ in vec2 v_texcoord;
436
+
437
+ uniform sampler2D u_texture;
438
+ uniform bool u_horizontal;
439
+ uniform float u_weight[5];
440
+ uniform float u_alpha_threshold;
441
+
442
+ out vec4 outColor;
443
+
444
+ void main()
445
+ {
446
+ vec2 tex_offset = vec2(1) / vec2(textureSize(u_texture, 0)); // gets size of single texel
447
+ vec3 color = vec3(0.0);
448
+ float total_alpha = texture(u_texture, v_texcoord).a * u_weight[0];
449
+ if (total_alpha > 0.0){
450
+ color = texture(u_texture, v_texcoord).rgb;
451
+ }
452
+ vec2 offset = vec2(0.0);
453
+ float alpha;
454
+
455
+ if(u_horizontal)
456
+ {
457
+ for(int i = 1; i < 5; ++i)
458
+ {
459
+ offset = vec2(tex_offset.x * float(i), 0.0);
460
+ alpha = texture(u_texture, v_texcoord + offset).a * u_weight[i];
461
+
462
+ if (alpha > u_alpha_threshold){
463
+ color = max( color, texture(u_texture, v_texcoord + offset).rgb);
464
+ total_alpha += alpha;
465
+ }
466
+ alpha = texture(u_texture, v_texcoord - offset).a * u_weight[i];
467
+ if (alpha > u_alpha_threshold){
468
+ color = max( color, texture(u_texture, v_texcoord - offset).rgb);
469
+ total_alpha += alpha;
470
+ }
471
+ }
472
+ }
473
+ else
474
+ {
475
+ for(int i = 1; i < 5; ++i)
476
+ {
477
+ offset = vec2(0.0, tex_offset.y * float(i));
478
+ alpha = texture(u_texture, v_texcoord + offset).a * u_weight[i];
479
+ if (alpha > u_alpha_threshold){
480
+ color = max( color , texture(u_texture, v_texcoord + offset).rgb);
481
+ total_alpha += alpha;
482
+ }
483
+ alpha = texture(u_texture, v_texcoord - offset).a * u_weight[i];
484
+ if (alpha > u_alpha_threshold){
485
+ color = max( color, texture(u_texture, v_texcoord - offset).rgb );
486
+ total_alpha += alpha;
487
+ }
488
+ }
489
+ }
490
+ outColor = vec4(color, total_alpha);
491
+ }
492
+ `;
493
+ const program = (0, util_1.createProgram)(this.gl, vertexShader, fragmentShader);
494
+ const buffer = gl.createBuffer();
495
+ const a_position = gl.getAttribLocation(program, "a_position");
496
+ gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
497
+ gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([
498
+ -1, -1,
499
+ 1, -1,
500
+ 1, 1,
501
+ -1, -1,
502
+ 1, 1,
503
+ -1, 1,
504
+ ]), gl.STATIC_DRAW);
505
+ const vao = gl.createVertexArray();
506
+ gl.bindVertexArray(vao);
507
+ gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
508
+ gl.enableVertexAttribArray(a_position);
509
+ gl.vertexAttribPointer(a_position, 2, gl.FLOAT, false, 0, 0);
510
+ gl.bindVertexArray(null);
511
+ return {
512
+ program: program,
513
+ vao: vao,
514
+ u_texture: gl.getUniformLocation(program, "u_texture"),
515
+ u_horizontal: gl.getUniformLocation(program, "u_horizontal"),
516
+ u_weight: gl.getUniformLocation(program, "u_weight"),
517
+ u_alpha_threshold: gl.getUniformLocation(program, "u_alpha_threshold"),
518
+ };
519
+ }
520
+ resize(width, height) {
521
+ const { gl, _lineProgram } = this;
522
+ this._width = width;
523
+ this._height = height;
524
+ const currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);
525
+ this._createInnerTextures();
526
+ gl.useProgram(_lineProgram.program);
527
+ gl.uniform2fv(_lineProgram.u_scrWH, [width, height]);
528
+ gl.useProgram(currentProgram);
529
+ }
530
+ _createLineProgram() {
531
+ const gl = this.gl;
532
+ const vertexShader = `#version 300 es
533
+ precision highp float;
534
+
535
+ in vec3 a_position;
536
+ in float a_time;
537
+ in vec3 a_color;
538
+ in float a_track_start_time;
539
+ in float a_track_end_time;
540
+
541
+ uniform mat4 uModelViewMatrix;
542
+ uniform mat4 uProjectionMatrix;
543
+ uniform vec3 uTranslate;
544
+
545
+ uniform bool u_is_3d;
546
+ uniform vec2 u_mapWH;
547
+ uniform vec2 u_scrWH;
548
+
549
+ out float v_time;
550
+ out vec3 v_color;
551
+ out float v_track_start_time;
552
+ out float v_track_end_time;
553
+
554
+ ${util_1.shaderfunctions.pixelXYToCartesian3DPoint}
555
+ ${util_1.shaderfunctions.pixelXYToCartesian2DPoint}
556
+
557
+ void main() {
558
+ v_time = a_time;
559
+ v_color = a_color;
560
+ v_track_start_time = a_track_start_time;
561
+ v_track_end_time = a_track_end_time;
562
+ if (u_is_3d){
563
+ vec3 pos = pixelXYToCartesian3DPoint(a_position);
564
+ gl_Position = uProjectionMatrix * uModelViewMatrix * vec4(pos - uTranslate, 1.0);
565
+ } else {
566
+ vec2 xy = pixelXYToCartesian2DPoint(a_position.xy, uTranslate.xy, u_mapWH, u_scrWH);
567
+ gl_Position = uProjectionMatrix * vec4(xy.x, xy.y, 0.0, 1.0);
568
+
569
+ }
570
+ gl_PointSize = 1.0;
571
+ }
572
+ `;
573
+ const fragmentShader = `#version 300 es
574
+ precision lowp float;
575
+
576
+ in float v_time;
577
+ in vec3 v_color;
578
+ in float v_track_start_time;
579
+ in float v_track_end_time;
580
+
581
+ uniform float u_head_time;
582
+ uniform float u_tail_time;
583
+
584
+ uniform float u_head_percentage;
585
+ uniform float u_route_alpha;
586
+
587
+ layout(location = 0) out vec4 outColor0;
588
+ layout(location = 1) out vec4 outColor1;
589
+
590
+
591
+ void main() {
592
+ if ( u_tail_time > v_track_end_time || u_head_time < v_track_start_time) discard;
593
+ // if ( v_time < u_tail_time || v_time > u_head_time) discard;
594
+
595
+ float gap = u_head_time - u_tail_time;
596
+ float head = gap * u_head_percentage;
597
+ float dist = u_head_time - v_time;
598
+ if ((v_time > u_head_time ) || (v_time < u_tail_time) ){
599
+
600
+ outColor0 = vec4(v_color , u_route_alpha);
601
+ } else if (dist < head) {
602
+ // white head
603
+ outColor0 = vec4(1.0, 1.0, 1.0, 0.77 + ( u_route_alpha * 0.23));
604
+ outColor1 = vec4(1.0, 1.0, 1.0, 0.77 + ( u_route_alpha * 0.23));
605
+ //
606
+ } else {
607
+ // colored body of lines
608
+ float alpha = ((gap - dist) / gap) / 2.0 + 0.5;
609
+ outColor0 = vec4(v_color , alpha );
610
+ outColor1 = vec4(v_color , alpha );
611
+ }
612
+ }
613
+ `;
614
+ const program = (0, util_1.createProgram)(this.gl, vertexShader, fragmentShader);
615
+ const a_position = gl.getAttribLocation(program, "a_position");
616
+ const a_time = gl.getAttribLocation(program, "a_time");
617
+ const a_track_start_time = gl.getAttribLocation(program, "a_track_start_time");
618
+ const a_track_end_time = gl.getAttribLocation(program, "a_track_end_time");
619
+ const a_color = gl.getAttribLocation(program, "a_color");
620
+ const vao = gl.createVertexArray();
621
+ gl.bindVertexArray(vao);
622
+ gl.bindBuffer(gl.ARRAY_BUFFER, this._inBuffer);
623
+ gl.enableVertexAttribArray(a_position);
624
+ gl.vertexAttribPointer(a_position, 3, gl.FLOAT, false, 36, 0);
625
+ gl.enableVertexAttribArray(a_time);
626
+ gl.vertexAttribPointer(a_time, 1, gl.FLOAT, false, 36, 12);
627
+ gl.enableVertexAttribArray(a_color);
628
+ gl.vertexAttribPointer(a_color, 3, gl.FLOAT, false, 36, 16);
629
+ gl.enableVertexAttribArray(a_track_start_time);
630
+ gl.vertexAttribPointer(a_track_start_time, 1, gl.FLOAT, false, 36, 28);
631
+ gl.enableVertexAttribArray(a_track_end_time);
632
+ gl.vertexAttribPointer(a_track_end_time, 1, gl.FLOAT, false, 36, 32);
633
+ gl.bindVertexArray(null);
634
+ return {
635
+ program: program,
636
+ vao: vao,
637
+ u_head_time: gl.getUniformLocation(program, "u_head_time"),
638
+ u_tail_time: gl.getUniformLocation(program, "u_tail_time"),
639
+ uTranslate: gl.getUniformLocation(program, "uTranslate"),
640
+ uModelViewMatrix: gl.getUniformLocation(program, "uModelViewMatrix"),
641
+ uProjectionMatrix: gl.getUniformLocation(program, "uProjectionMatrix"),
642
+ u_is_3d: gl.getUniformLocation(program, "u_is_3d"),
643
+ u_mapWH: gl.getUniformLocation(program, "u_mapWH"),
644
+ u_scrWH: gl.getUniformLocation(program, "u_scrWH"),
645
+ u_head_percentage: gl.getUniformLocation(program, "u_head_percentage"),
646
+ u_route_alpha: gl.getUniformLocation(program, "u_route_alpha"),
647
+ };
648
+ }
649
+ /**
650
+ * @param { Float32Array} data // [x, y, z, time, x, y, z, time, ...]
651
+ */
652
+ // setInBuffer(data) {
653
+ // const gl = this.gl;
654
+ // gl.bindBuffer(gl.ARRAY_BUFFER, this._inBuffer);
655
+ // gl.bufferData(gl.ARRAY_BUFFER, data, gl.STATIC_DRAW);
656
+ // }
657
+ setIs3D(is3d) {
658
+ const { gl, _lineProgram } = this;
659
+ const currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);
660
+ gl.useProgram(_lineProgram.program);
661
+ gl.uniform1i(_lineProgram.u_is_3d, is3d);
662
+ gl.useProgram(currentProgram);
663
+ }
664
+ setTotalLength(totalLength) {
665
+ this._totalLength = totalLength;
666
+ }
667
+ _createTextures() {
668
+ const { gl, _width, _height } = this;
669
+ const texture = gl.createTexture();
670
+ gl.bindTexture(gl.TEXTURE_2D, texture);
671
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, _width, _height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null); // UNSIGNED_BYTE
672
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
673
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
674
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
675
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
676
+ gl.bindTexture(gl.TEXTURE_2D, null);
677
+ return texture;
678
+ }
679
+ _resetTexture() {
680
+ const { gl, _width, _height } = this;
681
+ gl.bindTexture(gl.TEXTURE_2D, this._middleTexture); // UNSIGNED_BYTE
682
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, _width, _height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);
683
+ gl.bindTexture(gl.TEXTURE_2D, this._blurTextures[0]);
684
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, _width, _height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);
685
+ gl.bindTexture(gl.TEXTURE_2D, this._blurTextures[1]);
686
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, _width, _height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);
687
+ gl.bindTexture(gl.TEXTURE_2D, null);
688
+ }
689
+ draw(u_head_time, u_tail_time, uProjectionMatrix, uModelViewMatrix, uTranslate, u_mapWH = null) {
690
+ const { gl, _lineProgram, _blurProgram, _blurRepetition, _premultipliedAlpha } = this;
691
+ this._resetTexture();
692
+ // if (_premultipliedAlpha) {
693
+ gl.enable(gl.BLEND);
694
+ gl.blendFuncSeparate(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
695
+ // }
696
+ { // draw lines
697
+ gl.bindFramebuffer(gl.FRAMEBUFFER, this._frameBuffer);
698
+ gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, this._middleTexture, 0);
699
+ gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT1, gl.TEXTURE_2D, this._blurTextures[0], 0);
700
+ gl.drawBuffers([
701
+ gl.COLOR_ATTACHMENT0,
702
+ gl.COLOR_ATTACHMENT1,
703
+ ]);
704
+ gl.useProgram(_lineProgram.program);
705
+ gl.uniform1f(_lineProgram.u_head_time, u_head_time);
706
+ gl.uniform1f(_lineProgram.u_tail_time, u_tail_time);
707
+ gl.uniformMatrix4fv(_lineProgram.uProjectionMatrix, false, uProjectionMatrix);
708
+ if (u_mapWH) {
709
+ gl.uniform2fv(_lineProgram.u_mapWH, u_mapWH);
710
+ }
711
+ else {
712
+ gl.uniformMatrix4fv(_lineProgram.uModelViewMatrix, false, uModelViewMatrix);
713
+ }
714
+ gl.uniform3fv(_lineProgram.uTranslate, uTranslate);
715
+ gl.bindVertexArray(_lineProgram.vao);
716
+ gl.drawArrays(gl.LINES, 0, this._totalLength);
717
+ gl.drawBuffers([
718
+ gl.COLOR_ATTACHMENT0,
719
+ gl.NONE
720
+ ]);
721
+ }
722
+ { // blur ping pong
723
+ gl.useProgram(_blurProgram.program);
724
+ gl.bindVertexArray(_blurProgram.vao);
725
+ for (let i = 0; i < _blurRepetition * 2; i++) {
726
+ gl.bindFramebuffer(gl.FRAMEBUFFER, this._blurFrameBuffers[i % 2]);
727
+ gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, this._blurTextures[(i + 1) % 2], 0);
728
+ gl.bindTexture(gl.TEXTURE_2D, this._blurTextures[i % 2]);
729
+ gl.uniform1i(_blurProgram.u_texture, 0);
730
+ gl.uniform1f(_blurProgram.u_horizontal, i % 2 == 0);
731
+ gl.drawArrays(gl.TRIANGLES, 0, 6);
732
+ }
733
+ }
734
+ if (!_premultipliedAlpha) {
735
+ (0, util_1.defaultblendfunction)(gl);
736
+ }
737
+ { // combine
738
+ gl.bindFramebuffer(gl.FRAMEBUFFER, null);
739
+ gl.useProgram(this._combineProgram.program);
740
+ gl.bindVertexArray(this._combineProgram.vao);
741
+ gl.activeTexture(gl.TEXTURE1);
742
+ gl.bindTexture(gl.TEXTURE_2D, this._blurTextures[1]);
743
+ gl.uniform1i(this._combineProgram.u_bloom_texture, 1);
744
+ gl.activeTexture(gl.TEXTURE0);
745
+ gl.bindTexture(gl.TEXTURE_2D, this._middleTexture);
746
+ gl.uniform1i(this._combineProgram.u_main_texture, 0);
747
+ gl.drawArrays(gl.TRIANGLES, 0, 6);
748
+ }
749
+ gl.bindVertexArray(null);
750
+ if (_premultipliedAlpha) {
751
+ (0, util_1.defaultblendfunction)(gl);
752
+ }
753
+ }
754
+ free() {
755
+ const { gl, _lineProgram, _blurProgram, _combineProgram } = this;
756
+ gl.deleteBuffer(this._inBuffer);
757
+ gl.deleteFramebuffer(this._frameBuffer);
758
+ gl.deleteFramebuffer(this._blurFrameBuffers[0]);
759
+ gl.deleteFramebuffer(this._blurFrameBuffers[1]);
760
+ // gl.deleteBuffer(this._middleTexture);
761
+ gl.deleteTexture(this._middleTexture);
762
+ gl.deleteTexture(this._blurTextures[0]);
763
+ gl.deleteTexture(this._blurTextures[1]);
764
+ gl.deleteVertexArray(_lineProgram.vao);
765
+ gl.deleteVertexArray(_blurProgram.vao);
766
+ gl.deleteVertexArray(_combineProgram.vao);
767
+ gl.deleteProgram(_lineProgram.program);
768
+ gl.deleteProgram(_blurProgram.program);
769
+ gl.deleteProgram(_combineProgram.program);
770
+ }
771
+ }
772
+ exports.default = TrackGlowLineProgram;