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