@pirireis/webglobeplugins 0.9.11 → 0.9.13
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.
- package/Math/angle-calculation.js +9 -11
- package/Math/arc.js +38 -41
- package/Math/bounds/line-bbox.js +79 -83
- package/Math/constants.js +4 -9
- package/Math/frustum/types.js +1 -2
- package/Math/juction/arc-plane.js +33 -36
- package/Math/juction/line-sphere.js +15 -18
- package/Math/juction/plane-plane.js +20 -23
- package/Math/line.js +42 -47
- package/Math/methods.js +69 -92
- package/Math/plane.js +33 -38
- package/Math/quaternion.js +48 -55
- package/Math/types.js +1 -2
- package/Math/utils.js +2 -4
- package/Math/vec3.js +46 -52
- package/algorithms/search-binary.js +5 -8
- package/altitude-locator/draw-subset-obj.js +8 -11
- package/altitude-locator/plugin.js +114 -133
- package/altitude-locator/types.js +1 -3
- package/arrowfield/adaptor.js +3 -7
- package/arrowfield/index.js +3 -10
- package/arrowfield/plugin.js +63 -69
- package/bearing-line/index.js +2 -8
- package/bearing-line/plugin.js +218 -248
- package/circle-line-chain/chain-list-map.js +82 -92
- package/circle-line-chain/plugin.js +147 -182
- package/circle-line-chain/util.js +1 -5
- package/compass-rose/compass-rose-padding-flat.js +111 -140
- package/compass-rose/compass-text-writer.js +63 -75
- package/compass-rose/index.js +3 -7
- package/compassrose/compassrose.js +50 -57
- package/compassrose/index.js +2 -8
- package/heatwave/index.js +3 -10
- package/heatwave/isobar/objectarraylabels.js +50 -56
- package/heatwave/isobar/plugin.js +111 -170
- package/heatwave/isobar/quadtreecontours.js +78 -96
- package/heatwave/plugins/heatwaveglobeshell.js +73 -94
- package/index.js +12 -58
- package/package.json +1 -1
- package/partialrings/buffer-manager.js +32 -70
- package/partialrings/index.js +2 -41
- package/partialrings/plugin.js +55 -98
- package/partialrings/program.js +141 -59
- package/pin/pin-object-array.js +89 -97
- package/pin/pin-point-totem.js +21 -22
- package/point-heat-map/adaptors/timetracksplugin-format-to-this.js +11 -14
- package/point-heat-map/plugin-webworker.js +45 -53
- package/point-heat-map/point-to-heat-map-flow.js +46 -51
- package/point-tracks/key-methods.js +2 -5
- package/point-tracks/plugin.js +141 -170
- package/programs/arrowfield/index.js +2 -7
- package/programs/arrowfield/logic.js +172 -67
- package/programs/arrowfield/object.js +35 -43
- package/programs/data2legend/density-to-legend.js +47 -26
- package/programs/data2legend/point-to-density-texture.js +56 -34
- package/programs/float2legendwithratio/index.js +2 -8
- package/programs/float2legendwithratio/logic.js +88 -45
- package/programs/float2legendwithratio/object.js +45 -54
- package/programs/globe-util/is-globe-moved.js +10 -13
- package/programs/globeshell/index.js +2 -8
- package/programs/globeshell/wiggle/index.js +2 -8
- package/programs/globeshell/wiggle/logic.js +191 -101
- package/programs/globeshell/wiggle/object.js +35 -43
- package/programs/helpers/blender/program.js +36 -22
- package/programs/helpers/fadeaway/index.js +2 -7
- package/programs/helpers/fadeaway/logic.js +36 -17
- package/programs/helpers/fadeaway/object.js +11 -18
- package/programs/helpers/index.js +2 -8
- package/programs/index.js +9 -58
- package/programs/line-on-globe/angled-line.js +95 -39
- package/programs/line-on-globe/circle-accurate-3d.js +86 -39
- package/programs/line-on-globe/circle-accurate-flat.js +116 -64
- package/programs/line-on-globe/circle-accurate.js +113 -46
- package/programs/line-on-globe/circle.js +106 -44
- package/programs/line-on-globe/degree-padding-around-circle-3d.js +89 -42
- package/programs/line-on-globe/lines-color-instanced-flat.js +84 -43
- package/programs/line-on-globe/linestrip.js +126 -63
- package/programs/line-on-globe/naive-accurate-flexible.js +126 -59
- package/programs/line-on-globe/to-the-surface.js +62 -35
- package/programs/line-on-globe/util.js +2 -5
- package/programs/picking/pickable-renderer.js +127 -46
- package/programs/point-on-globe/element-globe-surface-glow.js +83 -46
- package/programs/point-on-globe/element-point-glow.js +112 -47
- package/programs/point-on-globe/square-pixel-point.js +80 -34
- package/programs/programcache.js +14 -19
- package/programs/rings/distancering/circleflatprogram.js +76 -70
- package/programs/rings/distancering/circlepaddingfreeangleprogram.js +168 -194
- package/programs/rings/distancering/circlepaddysharedbuffer.js +121 -200
- package/programs/rings/distancering/index.js +5 -14
- package/programs/rings/distancering/paddyflatprogram.js +87 -70
- package/programs/rings/distancering/paddyflatprogram2d.js +89 -72
- package/programs/rings/distancering/paddyflatprogram3d.js +87 -70
- package/programs/rings/index.js +1 -17
- package/programs/rings/partial-ring/piece-of-pie.js +144 -44
- package/programs/totems/camerauniformblock.js +65 -56
- package/programs/totems/canvas-webglobe-info.js +49 -45
- package/programs/totems/gpu-selection-uniform-block.js +45 -45
- package/programs/totems/index.js +2 -40
- package/programs/two-d/pixel-padding-for-compass.js +94 -36
- package/programs/util.js +7 -10
- package/programs/vectorfields/index.js +3 -23
- package/programs/vectorfields/logics/drawrectangleparticles.js +73 -35
- package/programs/vectorfields/logics/index.js +4 -12
- package/programs/vectorfields/logics/pixelbased.js +94 -41
- package/programs/vectorfields/logics/ubo.js +32 -32
- package/programs/vectorfields/pingpongbuffermanager.js +30 -37
- package/rangerings/enum.js +2 -5
- package/rangerings/index.js +5 -15
- package/rangerings/plugin.js +223 -286
- package/rangerings/rangeringangletext.js +122 -137
- package/rangerings/ring-account.js +53 -75
- package/shaders/fragment-toy/firework.js +55 -4
- package/shaders/fragment-toy/singularity.js +56 -5
- package/timetracks/adaptors-line-strip.js +27 -44
- package/timetracks/adaptors.js +48 -67
- package/timetracks/index.js +5 -19
- package/timetracks/plugin-line-strip.js +65 -79
- package/timetracks/plugin.js +71 -85
- package/timetracks/program-line-strip.js +297 -107
- package/timetracks/program.js +421 -118
- package/timetracks/programpoint-line-strip.js +98 -48
- package/timetracks/programpoint.js +91 -48
- package/util/account/bufferoffsetmanager.js +72 -98
- package/util/account/index.js +3 -23
- package/util/account/single-attribute-buffer-management/buffer-manager.js +44 -48
- package/util/account/single-attribute-buffer-management/buffer-orchestrator.js +68 -98
- package/util/account/single-attribute-buffer-management/index.js +4 -9
- package/util/account/single-attribute-buffer-management/object-store.js +29 -34
- package/util/account/single-attribute-buffer-management/types.js +1 -2
- package/util/account/util.js +2 -8
- package/util/algorithms/search-binary.js +5 -8
- package/util/check/get.js +5 -9
- package/util/check/typecheck.js +13 -24
- package/util/geometry/index.js +10 -18
- package/util/gl-util/buffer/attribute-loader.js +10 -26
- package/util/gl-util/buffer/index.js +2 -5
- package/util/gl-util/draw-options/methods.js +10 -15
- package/util/gl-util/uniform-block/manager.js +69 -72
- package/util/heatwavedatamanager/datamanager.js +56 -119
- package/util/heatwavedatamanager/index.js +3 -10
- package/util/heatwavedatamanager/pointcoordinatesdatacalculator.js +38 -47
- package/util/heatwavedatamanager/pointcoordsmeta.js +9 -13
- package/util/index.js +13 -57
- package/util/interpolation/timetrack/index.js +2 -5
- package/util/interpolation/timetrack/timetrack-interpolator.js +30 -36
- package/util/interpolation/timetrack/web-worker-str.js +180 -5
- package/util/interpolation/timetrack/web-worker.js +4 -6
- package/util/jshelpers/data-filler.js +8 -11
- package/util/jshelpers/equality.js +1 -3
- package/util/jshelpers/index.js +2 -37
- package/util/jshelpers/timefilters.js +8 -10
- package/util/picking/fence.js +8 -11
- package/util/picking/picker-displayer.js +49 -58
- package/util/programs/draw-texture-on-canvas.js +41 -26
- package/util/programs/index.js +1 -17
- package/util/programs/shapesonglobe.js +104 -68
- package/util/programs/supersampletotextures.js +45 -43
- package/util/programs/texturetoglobe.js +99 -52
- package/util/shaderfunctions/geometrytransformations.js +323 -35
- package/util/shaderfunctions/index.js +2 -18
- package/util/shaderfunctions/nodata.js +8 -5
- package/util/shaderfunctions/noisefunctions.js +40 -12
- package/util/surface-line-data/arcs-to-cuts.js +20 -23
- package/util/webglobe/gldefaultstates.js +1 -4
- package/util/webglobe/index.js +2 -18
- package/util/webglobe/rasteroverlay.js +36 -41
- package/util/webglobjectbuilders.js +70 -93
- package/util/webglobjectbuilders1.js +63 -82
- package/waveparticles/adaptor.js +7 -10
- package/waveparticles/index.js +3 -10
- package/waveparticles/plugin.js +82 -90
- package/wind/imagetovectorfieldandmagnitude.js +16 -19
- package/wind/index.js +5 -14
- package/wind/plugin.js +454 -291
- package/wind/vectorfieldimage.js +6 -8
- package/write-text/attached-text-writer.js +48 -54
- package/write-text/context-text.js +52 -63
- package/write-text/context-text3.js +71 -80
- package/write-text/index.js +1 -5
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/**
|
|
3
2
|
* Author: Toprak Nihat Deniz Ozturk
|
|
4
3
|
*/
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
var TrackGlowLineProgram = /** @class */ (function () {
|
|
4
|
+
import { createProgram, defaultblendfunction, shaderfunctions } from "../util";
|
|
5
|
+
export default class TrackGlowLineProgram {
|
|
8
6
|
/**
|
|
9
7
|
* @param {WebGL2RenderingContext} gl
|
|
10
8
|
* @param {number} width
|
|
@@ -19,8 +17,7 @@ var TrackGlowLineProgram = /** @class */ (function () {
|
|
|
19
17
|
* @param {number} options.finalAlphaRatio 0 ~ 1
|
|
20
18
|
* @param {+int} options.blurRepetition 1 ~ inf default 2
|
|
21
19
|
*/
|
|
22
|
-
|
|
23
|
-
if (options === void 0) { options = {}; }
|
|
20
|
+
constructor(gl, attrBuffer, width, height, options = {}) {
|
|
24
21
|
this.gl = gl;
|
|
25
22
|
this.program = null;
|
|
26
23
|
// this._inBuffer = gl.createBuffer();
|
|
@@ -38,14 +35,13 @@ var TrackGlowLineProgram = /** @class */ (function () {
|
|
|
38
35
|
this._totalLength = 0;
|
|
39
36
|
this._initUniforms(options);
|
|
40
37
|
}
|
|
41
|
-
|
|
38
|
+
_createInnerTextures() {
|
|
42
39
|
this._middleTexture = this._createTextures();
|
|
43
40
|
this._blurTextures = [this._createTextures(), this._createTextures()];
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
var currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);
|
|
41
|
+
}
|
|
42
|
+
_initUniforms(options = {}) {
|
|
43
|
+
const { gl, _lineProgram, _blurProgram, _combineProgram } = this;
|
|
44
|
+
const currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);
|
|
49
45
|
gl.useProgram(_lineProgram.program);
|
|
50
46
|
gl.uniform1f(_lineProgram.u_head_percentage, options.headPercentage || 1.0 / 30.0);
|
|
51
47
|
gl.uniform1f(_lineProgram.u_route_alpha, options.routeAlpha || 0.025);
|
|
@@ -56,117 +52,146 @@ var TrackGlowLineProgram = /** @class */ (function () {
|
|
|
56
52
|
gl.uniform1f(_combineProgram.u_gamma, options.gamma || 1.0);
|
|
57
53
|
gl.uniform1f(_combineProgram.u_final_alpha_ratio, options.finalAlphaRatio || 1.0);
|
|
58
54
|
gl.useProgram(currentProgram);
|
|
59
|
-
}
|
|
55
|
+
}
|
|
60
56
|
/**
|
|
61
57
|
* @param {number} gamma 0 ~ inf
|
|
62
58
|
*/
|
|
63
|
-
|
|
59
|
+
setGamma(gamma) {
|
|
64
60
|
if (gamma < 0) {
|
|
65
61
|
console.warn("gamma should be equal or greater than 0, but got", gamma);
|
|
66
62
|
return;
|
|
67
63
|
}
|
|
68
|
-
|
|
69
|
-
|
|
64
|
+
const { gl, _combineProgram } = this;
|
|
65
|
+
const currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);
|
|
70
66
|
gl.useProgram(_combineProgram.program);
|
|
71
67
|
gl.uniform1f(_combineProgram.u_gamma, gamma);
|
|
72
68
|
gl.useProgram(currentProgram);
|
|
73
|
-
}
|
|
69
|
+
}
|
|
74
70
|
/**
|
|
75
71
|
*
|
|
76
72
|
* @param {number} exposure 0 ~ inf
|
|
77
73
|
* @returns
|
|
78
74
|
*/
|
|
79
|
-
|
|
75
|
+
setExposure(exposure) {
|
|
80
76
|
if (exposure < 0) {
|
|
81
77
|
console.warn("exposure should be equal or greater than 0, but got", exposure);
|
|
82
78
|
return;
|
|
83
79
|
}
|
|
84
|
-
|
|
85
|
-
|
|
80
|
+
const { gl, _combineProgram } = this;
|
|
81
|
+
const currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);
|
|
86
82
|
gl.useProgram(_combineProgram.program);
|
|
87
83
|
gl.uniform1f(_combineProgram.u_exposure, exposure);
|
|
88
84
|
gl.useProgram(currentProgram);
|
|
89
|
-
}
|
|
85
|
+
}
|
|
90
86
|
/**
|
|
91
87
|
*
|
|
92
88
|
* @param {number} ratio 0 ~ 1
|
|
93
89
|
* @returns
|
|
94
90
|
*/
|
|
95
|
-
|
|
91
|
+
setFinalAlphaRatio(ratio) {
|
|
96
92
|
if (ratio < 0 || ratio > 1) {
|
|
97
93
|
console.warn("ratio should be between 0 and 1, but got", ratio);
|
|
98
94
|
return;
|
|
99
95
|
}
|
|
100
|
-
|
|
101
|
-
|
|
96
|
+
const { gl, _combineProgram } = this;
|
|
97
|
+
const currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);
|
|
102
98
|
gl.useProgram(_combineProgram.program);
|
|
103
99
|
gl.uniform1f(_combineProgram.u_final_alpha_ratio, ratio);
|
|
104
100
|
gl.useProgram(currentProgram);
|
|
105
|
-
}
|
|
101
|
+
}
|
|
106
102
|
/**
|
|
107
103
|
* @param {Array.<Number>} weight [w1, w2, w3, w4, w5]
|
|
108
104
|
*/
|
|
109
|
-
|
|
105
|
+
setBlurWeights(weights) {
|
|
110
106
|
if (weights.length !== 5) {
|
|
111
107
|
console.warn("weights should be an array of 5 numbers, but got", weights);
|
|
112
108
|
return;
|
|
113
109
|
}
|
|
114
|
-
|
|
115
|
-
|
|
110
|
+
const { gl, _blurProgram } = this;
|
|
111
|
+
const currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);
|
|
116
112
|
gl.useProgram(_blurProgram.program);
|
|
117
113
|
gl.uniform1fv(_blurProgram.u_weight, weights);
|
|
118
114
|
gl.useProgram(currentProgram);
|
|
119
|
-
}
|
|
115
|
+
}
|
|
120
116
|
/**
|
|
121
117
|
* @param {number} routeAlpha 0 ~ 1
|
|
122
118
|
*/
|
|
123
|
-
|
|
119
|
+
setRouteAlpha(routeAlpha) {
|
|
124
120
|
if (routeAlpha < 0 || routeAlpha > 1) {
|
|
125
121
|
console.warn("routeAlpha should be between 0 and 1, but got", routeAlpha);
|
|
126
122
|
return;
|
|
127
123
|
}
|
|
128
|
-
|
|
129
|
-
|
|
124
|
+
const { gl, _lineProgram } = this;
|
|
125
|
+
const currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);
|
|
130
126
|
gl.useProgram(_lineProgram.program);
|
|
131
127
|
gl.uniform1f(_lineProgram.u_route_alpha, routeAlpha);
|
|
132
128
|
gl.useProgram(currentProgram);
|
|
133
|
-
}
|
|
129
|
+
}
|
|
134
130
|
/**
|
|
135
131
|
* blur uses pingpong effect. This number decides how many times the blur will be applied.
|
|
136
132
|
* @param {+int} repetition
|
|
137
133
|
* @returns
|
|
138
134
|
*/
|
|
139
|
-
|
|
135
|
+
setBlurRepetition(repetition) {
|
|
140
136
|
if (repetition < 0 && repetition % 1 !== 0) {
|
|
141
137
|
console.warn("repetition should be an integer greater than 0, but got", repetition);
|
|
142
138
|
return;
|
|
143
139
|
}
|
|
144
140
|
this._blurRepetition = repetition;
|
|
145
|
-
}
|
|
141
|
+
}
|
|
146
142
|
/**
|
|
147
143
|
* Head Is colored as white. This number decides proportion of the head according to the total length of the line.
|
|
148
144
|
* @param {Number} percentage 0 ~ 1
|
|
149
145
|
*/
|
|
150
|
-
|
|
146
|
+
setHeadPercentage(percentage) {
|
|
151
147
|
if (percentage < 0 || 1 < percentage) {
|
|
152
148
|
console.warn("percentage should be between 0 and 1, but got", percentage);
|
|
153
149
|
return;
|
|
154
150
|
}
|
|
155
151
|
;
|
|
156
|
-
|
|
157
|
-
|
|
152
|
+
const { gl, _lineProgram } = this;
|
|
153
|
+
const currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);
|
|
158
154
|
gl.useProgram(_lineProgram.program);
|
|
159
155
|
gl.uniform1f(_lineProgram.u_head_percentage, percentage);
|
|
160
156
|
gl.useProgram(currentProgram);
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
157
|
+
}
|
|
158
|
+
_createDrawTextureProgram() {
|
|
159
|
+
const gl = this.gl;
|
|
160
|
+
const vertexShader = `#version 300 es
|
|
161
|
+
precision highp float;
|
|
162
|
+
|
|
163
|
+
in vec2 a_position;
|
|
164
|
+
|
|
165
|
+
out vec2 v_texcoord;
|
|
166
|
+
|
|
167
|
+
void main() {
|
|
168
|
+
gl_Position = vec4(a_position, 0.0, 1.0);
|
|
169
|
+
v_texcoord = a_position.xy * 0.5 + 0.5;
|
|
170
|
+
}
|
|
171
|
+
`;
|
|
172
|
+
const fragmentShader = `#version 300 es
|
|
173
|
+
precision highp float;
|
|
174
|
+
|
|
175
|
+
in vec2 v_texcoord;
|
|
176
|
+
|
|
177
|
+
uniform sampler2D u_main_texture;
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
uniform float u_final_alpha_ratio;
|
|
181
|
+
|
|
182
|
+
out vec4 outColor;
|
|
183
|
+
|
|
184
|
+
void main() {
|
|
185
|
+
|
|
186
|
+
vec4 hdrColor = texture(u_main_texture, v_texcoord);
|
|
187
|
+
outColor = hdrColor;
|
|
188
|
+
outColor.a *= u_final_alpha_ratio;
|
|
189
|
+
}
|
|
190
|
+
`;
|
|
191
|
+
const program = createProgram(this.gl, vertexShader, fragmentShader);
|
|
192
|
+
const buffer = gl.createBuffer();
|
|
193
|
+
const a_position = gl.getAttribLocation(program, "a_position");
|
|
194
|
+
const vao = gl.createVertexArray();
|
|
170
195
|
gl.bindVertexArray(vao);
|
|
171
196
|
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
|
|
172
197
|
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([
|
|
@@ -186,15 +211,49 @@ var TrackGlowLineProgram = /** @class */ (function () {
|
|
|
186
211
|
u_main_texture: gl.getUniformLocation(program, "u_main_texture"),
|
|
187
212
|
u_final_alpha_ratio: gl.getUniformLocation(program, "u_final_alpha_ratio"),
|
|
188
213
|
};
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
214
|
+
}
|
|
215
|
+
_createCombineProgram() {
|
|
216
|
+
const gl = this.gl;
|
|
217
|
+
const vertexShader = `#version 300 es
|
|
218
|
+
precision highp float;
|
|
219
|
+
|
|
220
|
+
in vec2 a_position;
|
|
221
|
+
|
|
222
|
+
out vec2 v_texcoord;
|
|
223
|
+
|
|
224
|
+
void main() {
|
|
225
|
+
gl_Position = vec4(a_position, 0.0, 1.0);
|
|
226
|
+
v_texcoord = a_position.xy * 0.5 + 0.5;
|
|
227
|
+
}
|
|
228
|
+
`;
|
|
229
|
+
const fragmentShader = `#version 300 es
|
|
230
|
+
precision highp float;
|
|
231
|
+
|
|
232
|
+
in vec2 v_texcoord;
|
|
233
|
+
|
|
234
|
+
uniform sampler2D u_main_texture;
|
|
235
|
+
uniform sampler2D u_bloom_texture;
|
|
236
|
+
|
|
237
|
+
uniform float u_exposure;
|
|
238
|
+
uniform float u_gamma;
|
|
239
|
+
uniform float u_final_alpha_ratio;
|
|
240
|
+
|
|
241
|
+
out vec4 outColor;
|
|
242
|
+
|
|
243
|
+
void main() {
|
|
244
|
+
|
|
245
|
+
vec4 hdrColor = texture(u_main_texture, v_texcoord);
|
|
246
|
+
vec4 bloomColor = texture(u_bloom_texture, v_texcoord);
|
|
247
|
+
vec4 result = hdrColor + bloomColor * u_exposure;
|
|
248
|
+
result = pow(result, vec4(1.0 / u_gamma));
|
|
249
|
+
result.a *= u_final_alpha_ratio;
|
|
250
|
+
outColor = result;
|
|
251
|
+
}
|
|
252
|
+
`;
|
|
253
|
+
const program = createProgram(this.gl, vertexShader, fragmentShader);
|
|
254
|
+
const buffer = gl.createBuffer();
|
|
255
|
+
const a_position = gl.getAttribLocation(program, "a_position");
|
|
256
|
+
const vao = gl.createVertexArray();
|
|
198
257
|
gl.bindVertexArray(vao);
|
|
199
258
|
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
|
|
200
259
|
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([
|
|
@@ -217,14 +276,72 @@ var TrackGlowLineProgram = /** @class */ (function () {
|
|
|
217
276
|
u_gamma: gl.getUniformLocation(program, "u_gamma"),
|
|
218
277
|
u_final_alpha_ratio: gl.getUniformLocation(program, "u_final_alpha_ratio"),
|
|
219
278
|
};
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
279
|
+
}
|
|
280
|
+
_createBlurProgram() {
|
|
281
|
+
const gl = this.gl;
|
|
282
|
+
const vertexShader = `#version 300 es
|
|
283
|
+
precision highp float;
|
|
284
|
+
|
|
285
|
+
in vec2 a_position;
|
|
286
|
+
out vec2 v_texcoord;
|
|
287
|
+
|
|
288
|
+
void main() {
|
|
289
|
+
gl_Position = vec4(a_position, 0.0, 1.0);
|
|
290
|
+
v_texcoord = a_position.xy * 0.5 + 0.5;
|
|
291
|
+
}`;
|
|
292
|
+
const fragmentShader = `#version 300 es
|
|
293
|
+
precision highp float;
|
|
294
|
+
|
|
295
|
+
in vec2 v_texcoord;
|
|
296
|
+
|
|
297
|
+
uniform sampler2D u_texture;
|
|
298
|
+
uniform bool u_horizontal;
|
|
299
|
+
uniform float u_weight[5];
|
|
300
|
+
out vec4 outColor;
|
|
301
|
+
|
|
302
|
+
void main()
|
|
303
|
+
{
|
|
304
|
+
vec2 tex_offset = vec2(
|
|
305
|
+
1.0 / float(textureSize(u_texture, 0).x),
|
|
306
|
+
1.0 / float(textureSize(u_texture, 0).y) ); // gets size of single texel
|
|
307
|
+
vec3 color = vec3(0.0);
|
|
308
|
+
float total_alpha = texture(u_texture, v_texcoord).a * u_weight[0];
|
|
309
|
+
if (total_alpha > 0.0){
|
|
310
|
+
color = texture(u_texture, v_texcoord).rgb;
|
|
311
|
+
}
|
|
312
|
+
vec2 offset = vec2(0.0);
|
|
313
|
+
float alpha;
|
|
314
|
+
|
|
315
|
+
if(u_horizontal){
|
|
316
|
+
for(int i = 1; i < 5; ++i){
|
|
317
|
+
offset = vec2(tex_offset.x * float(i), 0.0);
|
|
318
|
+
alpha = texture(u_texture, v_texcoord + offset).a * u_weight[i];
|
|
319
|
+
color = mix( color, texture(u_texture, v_texcoord + offset).rgb, alpha);
|
|
320
|
+
total_alpha += alpha;
|
|
321
|
+
alpha = texture(u_texture, v_texcoord - offset).a * u_weight[i];
|
|
322
|
+
color = mix( color, texture(u_texture, v_texcoord - offset).rgb, alpha);
|
|
323
|
+
total_alpha += alpha;
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
else
|
|
327
|
+
{
|
|
328
|
+
for(int i = 1; i < 5; ++i)
|
|
329
|
+
{
|
|
330
|
+
offset = vec2(0.0, tex_offset.y * float(i));
|
|
331
|
+
alpha = texture(u_texture, v_texcoord + offset).a * u_weight[i];
|
|
332
|
+
color = mix( color, texture(u_texture, v_texcoord + offset).rgb, alpha);
|
|
333
|
+
total_alpha += alpha;
|
|
334
|
+
alpha = texture(u_texture, v_texcoord - offset).a * u_weight[i];
|
|
335
|
+
color = mix( color, texture(u_texture, v_texcoord - offset).rgb, alpha);
|
|
336
|
+
total_alpha += alpha;
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
outColor = vec4(color, total_alpha);
|
|
340
|
+
}
|
|
341
|
+
`;
|
|
342
|
+
const program = createProgram(this.gl, vertexShader, fragmentShader);
|
|
343
|
+
const buffer = gl.createBuffer();
|
|
344
|
+
const a_position = gl.getAttribLocation(program, "a_position");
|
|
228
345
|
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
|
|
229
346
|
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([
|
|
230
347
|
-1, -1,
|
|
@@ -234,7 +351,7 @@ var TrackGlowLineProgram = /** @class */ (function () {
|
|
|
234
351
|
1, 1,
|
|
235
352
|
-1, 1,
|
|
236
353
|
]), gl.STATIC_DRAW);
|
|
237
|
-
|
|
354
|
+
const vao = gl.createVertexArray();
|
|
238
355
|
gl.bindVertexArray(vao);
|
|
239
356
|
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
|
|
240
357
|
gl.enableVertexAttribArray(a_position);
|
|
@@ -247,28 +364,104 @@ var TrackGlowLineProgram = /** @class */ (function () {
|
|
|
247
364
|
u_horizontal: gl.getUniformLocation(program, "u_horizontal"),
|
|
248
365
|
u_weight: gl.getUniformLocation(program, "u_weight"),
|
|
249
366
|
};
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
|
|
367
|
+
}
|
|
368
|
+
resize(width, height) {
|
|
369
|
+
const { gl, _lineProgram } = this;
|
|
253
370
|
this._width = width;
|
|
254
371
|
this._height = height;
|
|
255
|
-
|
|
372
|
+
const currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);
|
|
256
373
|
this._createInnerTextures();
|
|
257
374
|
gl.useProgram(_lineProgram.program);
|
|
258
375
|
gl.uniform2fv(_lineProgram.u_scrWH, [width, height]);
|
|
259
376
|
gl.useProgram(currentProgram);
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
377
|
+
}
|
|
378
|
+
_createLineProgram() {
|
|
379
|
+
const gl = this.gl;
|
|
380
|
+
const vertexShader = `#version 300 es
|
|
381
|
+
precision highp float;
|
|
382
|
+
|
|
383
|
+
in vec3 a_position;
|
|
384
|
+
in float a_time;
|
|
385
|
+
in vec3 a_color;
|
|
386
|
+
in float a_track_start_time;
|
|
387
|
+
in float a_track_end_time;
|
|
388
|
+
|
|
389
|
+
uniform mat4 uModelViewMatrix;
|
|
390
|
+
uniform mat4 uProjectionMatrix;
|
|
391
|
+
uniform vec3 uTranslate;
|
|
392
|
+
|
|
393
|
+
uniform bool u_is_3d;
|
|
394
|
+
uniform vec2 u_mapWH;
|
|
395
|
+
uniform vec2 u_scrWH;
|
|
396
|
+
|
|
397
|
+
out float v_time;
|
|
398
|
+
out vec3 v_color;
|
|
399
|
+
out float v_track_start_time;
|
|
400
|
+
out float v_track_end_time;
|
|
401
|
+
${shaderfunctions.pixelXYToCartesian3DPoint}
|
|
402
|
+
${shaderfunctions.pixelXYToCartesian2DPoint}
|
|
403
|
+
|
|
404
|
+
void main() {
|
|
405
|
+
|
|
406
|
+
v_time = a_time;
|
|
407
|
+
v_color = a_color;
|
|
408
|
+
v_track_start_time = a_track_start_time;
|
|
409
|
+
v_track_end_time = a_track_end_time;
|
|
410
|
+
if (u_is_3d){
|
|
411
|
+
vec3 pos = pixelXYToCartesian3DPoint(a_position);
|
|
412
|
+
gl_Position = uProjectionMatrix * uModelViewMatrix * vec4(pos - uTranslate, 1.0);
|
|
413
|
+
} else {
|
|
414
|
+
vec2 xy = pixelXYToCartesian2DPoint(a_position.xy, uTranslate.xy, u_mapWH, u_scrWH);
|
|
415
|
+
gl_Position = uProjectionMatrix * vec4(xy.x, xy.y, 0.0, 1.0);
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
`;
|
|
419
|
+
const fragmentShader = `#version 300 es
|
|
420
|
+
precision lowp float;
|
|
421
|
+
|
|
422
|
+
in float v_time;
|
|
423
|
+
in vec3 v_color;
|
|
424
|
+
in float v_track_start_time;
|
|
425
|
+
in float v_track_end_time;
|
|
426
|
+
uniform float u_head_time;
|
|
427
|
+
uniform float u_tail_time;
|
|
428
|
+
|
|
429
|
+
uniform float u_head_percentage;
|
|
430
|
+
uniform float u_route_alpha;
|
|
431
|
+
|
|
432
|
+
layout(location = 0) out vec4 outColor0;
|
|
433
|
+
layout(location = 1) out vec4 outColor1;
|
|
434
|
+
|
|
435
|
+
|
|
436
|
+
void main() {
|
|
437
|
+
if ( u_tail_time > v_track_end_time || u_head_time < v_track_start_time) discard;
|
|
438
|
+
float gap = u_head_time - u_tail_time;
|
|
439
|
+
float head = gap * u_head_percentage;
|
|
440
|
+
float dist = u_head_time - v_time;
|
|
441
|
+
|
|
442
|
+
if ((v_time > u_head_time ) || (v_time < u_tail_time) ){
|
|
443
|
+
outColor0 = vec4(v_color , u_route_alpha);
|
|
444
|
+
return;
|
|
445
|
+
} else if (dist < head) {
|
|
446
|
+
// white head
|
|
447
|
+
outColor1 = vec4(1.0, 1.0, 1.0, 1.0);
|
|
448
|
+
//
|
|
449
|
+
} else {
|
|
450
|
+
// colored body of lines
|
|
451
|
+
float alpha = ((gap - dist) / gap) * 0.4 + 0.6;
|
|
452
|
+
// outColor0 = vec4(v_color , alpha );
|
|
453
|
+
outColor1 = vec4(v_color , alpha );
|
|
454
|
+
}
|
|
455
|
+
outColor0 = vec4(v_color , 1.0);
|
|
456
|
+
}
|
|
457
|
+
`;
|
|
458
|
+
const program = createProgram(this.gl, vertexShader, fragmentShader);
|
|
459
|
+
const a_position = gl.getAttribLocation(program, "a_position");
|
|
460
|
+
const a_time = gl.getAttribLocation(program, "a_time");
|
|
461
|
+
const a_track_start_time = gl.getAttribLocation(program, "a_track_start_time");
|
|
462
|
+
const a_track_end_time = gl.getAttribLocation(program, "a_track_end_time");
|
|
463
|
+
const a_color = gl.getAttribLocation(program, "a_color");
|
|
464
|
+
const vao = gl.createVertexArray();
|
|
272
465
|
gl.bindVertexArray(vao);
|
|
273
466
|
gl.bindBuffer(gl.ARRAY_BUFFER, this._inBuffer);
|
|
274
467
|
gl.enableVertexAttribArray(a_position);
|
|
@@ -296,7 +489,7 @@ var TrackGlowLineProgram = /** @class */ (function () {
|
|
|
296
489
|
u_head_percentage: gl.getUniformLocation(program, "u_head_percentage"),
|
|
297
490
|
u_route_alpha: gl.getUniformLocation(program, "u_route_alpha"),
|
|
298
491
|
};
|
|
299
|
-
}
|
|
492
|
+
}
|
|
300
493
|
/**
|
|
301
494
|
* @param { Float32Array} data // [x, y, z, time, x, y, z, time, ...]
|
|
302
495
|
*/
|
|
@@ -305,19 +498,19 @@ var TrackGlowLineProgram = /** @class */ (function () {
|
|
|
305
498
|
// gl.bindBuffer(gl.ARRAY_BUFFER, this._inBuffer);
|
|
306
499
|
// gl.bufferData(gl.ARRAY_BUFFER, data, gl.STATIC_DRAW);
|
|
307
500
|
// }
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
501
|
+
setIs3D(is3d) {
|
|
502
|
+
const { gl, _lineProgram } = this;
|
|
503
|
+
const currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);
|
|
311
504
|
gl.useProgram(_lineProgram.program);
|
|
312
505
|
gl.uniform1i(_lineProgram.u_is_3d, is3d);
|
|
313
506
|
gl.useProgram(currentProgram);
|
|
314
|
-
}
|
|
315
|
-
|
|
507
|
+
}
|
|
508
|
+
setTotalLength(totalLength) {
|
|
316
509
|
this._totalLength = totalLength;
|
|
317
|
-
}
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
510
|
+
}
|
|
511
|
+
_createTextures() {
|
|
512
|
+
const { gl, _width, _height } = this;
|
|
513
|
+
const texture = gl.createTexture();
|
|
321
514
|
gl.bindTexture(gl.TEXTURE_2D, texture);
|
|
322
515
|
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA8, _width, _height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null); // UNSIGNED_BYTE
|
|
323
516
|
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
|
|
@@ -326,9 +519,9 @@ var TrackGlowLineProgram = /** @class */ (function () {
|
|
|
326
519
|
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
|
|
327
520
|
gl.bindTexture(gl.TEXTURE_2D, null);
|
|
328
521
|
return texture;
|
|
329
|
-
}
|
|
330
|
-
|
|
331
|
-
|
|
522
|
+
}
|
|
523
|
+
_resetTexture() {
|
|
524
|
+
const { gl, _width, _height } = this;
|
|
332
525
|
gl.bindTexture(gl.TEXTURE_2D, this._middleTexture); // UNSIGNED_BYTE
|
|
333
526
|
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA8, _width, _height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);
|
|
334
527
|
gl.bindTexture(gl.TEXTURE_2D, this._blurTextures[0]);
|
|
@@ -336,10 +529,9 @@ var TrackGlowLineProgram = /** @class */ (function () {
|
|
|
336
529
|
gl.bindTexture(gl.TEXTURE_2D, this._blurTextures[1]);
|
|
337
530
|
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA8, _width, _height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);
|
|
338
531
|
gl.bindTexture(gl.TEXTURE_2D, null);
|
|
339
|
-
}
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
var _a = this, gl = _a.gl, _lineProgram = _a._lineProgram, _blurProgram = _a._blurProgram, _blurRepetition = _a._blurRepetition;
|
|
532
|
+
}
|
|
533
|
+
draw(u_head_time, u_tail_time, uProjectionMatrix, uModelViewMatrix, uTranslate, u_mapWH = null) {
|
|
534
|
+
const { gl, _lineProgram, _blurProgram, _blurRepetition } = this;
|
|
343
535
|
this._resetTexture();
|
|
344
536
|
gl.enable(gl.BLEND);
|
|
345
537
|
gl.blendFuncSeparate(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
|
|
@@ -372,7 +564,7 @@ var TrackGlowLineProgram = /** @class */ (function () {
|
|
|
372
564
|
{ // blur ping pong
|
|
373
565
|
gl.useProgram(_blurProgram.program);
|
|
374
566
|
gl.bindVertexArray(_blurProgram.vao);
|
|
375
|
-
for (
|
|
567
|
+
for (let i = 0; i < _blurRepetition * 2; i++) {
|
|
376
568
|
gl.bindFramebuffer(gl.FRAMEBUFFER, this._blurFrameBuffers[i % 2]);
|
|
377
569
|
gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, this._blurTextures[(i + 1) % 2], 0);
|
|
378
570
|
gl.bindTexture(gl.TEXTURE_2D, this._blurTextures[i % 2]);
|
|
@@ -394,10 +586,10 @@ var TrackGlowLineProgram = /** @class */ (function () {
|
|
|
394
586
|
gl.drawArrays(gl.TRIANGLES, 0, 6);
|
|
395
587
|
}
|
|
396
588
|
gl.bindVertexArray(null);
|
|
397
|
-
|
|
398
|
-
}
|
|
399
|
-
|
|
400
|
-
|
|
589
|
+
defaultblendfunction(gl);
|
|
590
|
+
}
|
|
591
|
+
free() {
|
|
592
|
+
const { gl, _lineProgram, _blurProgram, _combineProgram } = this;
|
|
401
593
|
gl.deleteBuffer(this._inBuffer);
|
|
402
594
|
gl.deleteFramebuffer(this._frameBuffer);
|
|
403
595
|
gl.deleteFramebuffer(this._blurFrameBuffers[0]);
|
|
@@ -412,7 +604,5 @@ var TrackGlowLineProgram = /** @class */ (function () {
|
|
|
412
604
|
gl.deleteProgram(_lineProgram.program);
|
|
413
605
|
gl.deleteProgram(_blurProgram.program);
|
|
414
606
|
gl.deleteProgram(_combineProgram.program);
|
|
415
|
-
}
|
|
416
|
-
|
|
417
|
-
}());
|
|
418
|
-
exports.default = TrackGlowLineProgram;
|
|
607
|
+
}
|
|
608
|
+
}
|