@pirireis/webglobeplugins 0.9.11 → 0.9.12
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 +8 -8
- package/Math/arc.js +18 -18
- package/Math/bounds/line-bbox.js +78 -80
- package/Math/constants.js +3 -3
- package/Math/juction/arc-plane.js +23 -23
- package/Math/juction/line-sphere.js +11 -11
- package/Math/juction/plane-plane.js +11 -11
- package/Math/line.js +14 -16
- package/Math/methods.js +65 -70
- package/Math/plane.js +16 -18
- package/Math/quaternion.js +45 -49
- package/Math/utils.js +2 -2
- package/Math/vec3.js +42 -45
- package/algorithms/search-binary.js +4 -4
- package/altitude-locator/draw-subset-obj.js +7 -8
- package/altitude-locator/plugin.js +98 -114
- package/arrowfield/adaptor.js +3 -4
- package/arrowfield/index.js +2 -2
- package/arrowfield/plugin.js +62 -65
- package/bearing-line/index.js +1 -1
- package/bearing-line/plugin.js +200 -226
- package/circle-line-chain/chain-list-map.js +82 -88
- package/circle-line-chain/plugin.js +134 -165
- package/circle-line-chain/util.js +1 -1
- package/compass-rose/compass-rose-padding-flat.js +108 -133
- package/compass-rose/compass-text-writer.js +62 -70
- package/compass-rose/index.js +2 -2
- package/compassrose/compassrose.js +46 -50
- package/compassrose/index.js +1 -1
- package/heatwave/index.js +2 -2
- package/heatwave/isobar/objectarraylabels.js +44 -48
- package/heatwave/isobar/plugin.js +104 -123
- package/heatwave/isobar/quadtreecontours.js +76 -92
- package/heatwave/plugins/heatwaveglobeshell.js +69 -87
- package/index.js +11 -11
- package/package.json +1 -1
- package/partialrings/buffer-manager.js +32 -64
- package/partialrings/index.js +1 -1
- package/partialrings/plugin.js +48 -84
- package/partialrings/program.js +136 -47
- package/pin/pin-object-array.js +83 -86
- package/pin/pin-point-totem.js +21 -22
- package/point-heat-map/adaptors/timetracksplugin-format-to-this.js +10 -10
- package/point-heat-map/plugin-webworker.js +40 -45
- package/point-heat-map/point-to-heat-map-flow.js +40 -42
- package/point-tracks/key-methods.js +1 -1
- package/point-tracks/plugin.js +137 -162
- package/programs/arrowfield/index.js +1 -1
- package/programs/arrowfield/logic.js +170 -62
- package/programs/arrowfield/object.js +33 -35
- package/programs/data2legend/density-to-legend.js +45 -21
- package/programs/data2legend/point-to-density-texture.js +52 -27
- package/programs/float2legendwithratio/index.js +1 -1
- package/programs/float2legendwithratio/logic.js +88 -42
- package/programs/float2legendwithratio/object.js +43 -46
- package/programs/globe-util/is-globe-moved.js +10 -11
- package/programs/globeshell/index.js +1 -1
- package/programs/globeshell/wiggle/index.js +1 -1
- package/programs/globeshell/wiggle/logic.js +191 -98
- package/programs/globeshell/wiggle/object.js +33 -35
- package/programs/helpers/blender/program.js +36 -19
- package/programs/helpers/fadeaway/index.js +1 -1
- package/programs/helpers/fadeaway/logic.js +35 -13
- package/programs/helpers/fadeaway/object.js +9 -10
- package/programs/helpers/index.js +1 -1
- package/programs/index.js +8 -8
- package/programs/line-on-globe/angled-line.js +91 -32
- package/programs/line-on-globe/circle-accurate-3d.js +82 -32
- package/programs/line-on-globe/circle-accurate-flat.js +108 -50
- package/programs/line-on-globe/circle-accurate.js +103 -33
- package/programs/line-on-globe/circle.js +97 -32
- package/programs/line-on-globe/degree-padding-around-circle-3d.js +83 -33
- package/programs/line-on-globe/lines-color-instanced-flat.js +79 -34
- package/programs/line-on-globe/linestrip.js +111 -45
- package/programs/line-on-globe/naive-accurate-flexible.js +120 -50
- package/programs/line-on-globe/to-the-surface.js +58 -29
- package/programs/line-on-globe/util.js +1 -1
- package/programs/picking/pickable-renderer.js +117 -33
- package/programs/point-on-globe/element-globe-surface-glow.js +78 -38
- package/programs/point-on-globe/element-point-glow.js +103 -35
- package/programs/point-on-globe/square-pixel-point.js +76 -27
- package/programs/programcache.js +13 -13
- package/programs/rings/distancering/circleflatprogram.js +63 -21
- package/programs/rings/distancering/circlepaddingfreeangleprogram.js +156 -145
- package/programs/rings/distancering/circlepaddysharedbuffer.js +121 -197
- package/programs/rings/distancering/index.js +4 -4
- package/programs/rings/distancering/paddyflatprogram.js +73 -20
- package/programs/rings/distancering/paddyflatprogram2d.js +75 -22
- package/programs/rings/distancering/paddyflatprogram3d.js +73 -20
- package/programs/rings/partial-ring/piece-of-pie.js +137 -35
- package/programs/totems/camerauniformblock.js +64 -51
- package/programs/totems/canvas-webglobe-info.js +48 -40
- package/programs/totems/gpu-selection-uniform-block.js +44 -40
- package/programs/totems/index.js +1 -1
- package/programs/two-d/pixel-padding-for-compass.js +90 -29
- package/programs/util.js +6 -7
- package/programs/vectorfields/index.js +1 -1
- package/programs/vectorfields/logics/drawrectangleparticles.js +70 -29
- package/programs/vectorfields/logics/index.js +3 -3
- package/programs/vectorfields/logics/pixelbased.js +91 -35
- package/programs/vectorfields/logics/ubo.js +31 -25
- package/programs/vectorfields/pingpongbuffermanager.js +30 -34
- package/rangerings/index.js +4 -4
- package/rangerings/plugin.js +202 -258
- package/rangerings/rangeringangletext.js +108 -120
- package/rangerings/ring-account.js +52 -69
- package/shaders/fragment-toy/firework.js +55 -1
- package/shaders/fragment-toy/singularity.js +55 -1
- package/timetracks/adaptors-line-strip.js +26 -37
- package/timetracks/adaptors.js +47 -61
- package/timetracks/index.js +4 -4
- package/timetracks/plugin-line-strip.js +63 -71
- package/timetracks/plugin.js +69 -77
- package/timetracks/program-line-strip.js +296 -103
- package/timetracks/program.js +419 -113
- package/timetracks/programpoint-line-strip.js +97 -44
- package/timetracks/programpoint.js +90 -44
- package/util/account/bufferoffsetmanager.js +72 -95
- package/util/account/index.js +1 -1
- package/util/account/single-attribute-buffer-management/buffer-manager.js +44 -44
- package/util/account/single-attribute-buffer-management/buffer-orchestrator.js +68 -94
- package/util/account/single-attribute-buffer-management/index.js +3 -3
- package/util/account/single-attribute-buffer-management/object-store.js +29 -30
- package/util/account/util.js +2 -4
- package/util/algorithms/search-binary.js +4 -4
- package/util/check/get.js +5 -5
- package/util/check/typecheck.js +13 -15
- package/util/geometry/index.js +9 -11
- package/util/gl-util/buffer/attribute-loader.js +8 -20
- package/util/gl-util/buffer/index.js +1 -1
- package/util/gl-util/draw-options/methods.js +8 -9
- package/util/gl-util/uniform-block/manager.js +67 -67
- package/util/heatwavedatamanager/datamanager.js +56 -116
- package/util/heatwavedatamanager/index.js +2 -2
- package/util/heatwavedatamanager/pointcoordinatesdatacalculator.js +37 -40
- package/util/heatwavedatamanager/pointcoordsmeta.js +9 -10
- package/util/index.js +6 -6
- package/util/interpolation/timetrack/index.js +1 -1
- package/util/interpolation/timetrack/timetrack-interpolator.js +27 -29
- package/util/interpolation/timetrack/web-worker-str.js +179 -1
- package/util/interpolation/timetrack/web-worker.js +4 -4
- package/util/jshelpers/data-filler.js +7 -7
- package/util/jshelpers/timefilters.js +7 -7
- package/util/picking/fence.js +7 -7
- package/util/picking/picker-displayer.js +46 -52
- package/util/programs/draw-texture-on-canvas.js +39 -21
- package/util/programs/shapesonglobe.js +104 -64
- package/util/programs/supersampletotextures.js +45 -39
- package/util/programs/texturetoglobe.js +98 -48
- package/util/shaderfunctions/geometrytransformations.js +322 -27
- package/util/shaderfunctions/nodata.js +7 -1
- package/util/shaderfunctions/noisefunctions.js +39 -9
- package/util/surface-line-data/arcs-to-cuts.js +20 -23
- package/util/webglobe/rasteroverlay.js +35 -37
- package/util/webglobjectbuilders.js +55 -60
- package/util/webglobjectbuilders1.js +48 -49
- package/waveparticles/adaptor.js +6 -7
- package/waveparticles/index.js +2 -2
- package/waveparticles/plugin.js +79 -84
- package/wind/imagetovectorfieldandmagnitude.js +15 -15
- package/wind/index.js +4 -4
- package/wind/plugin.js +453 -251
- package/wind/vectorfieldimage.js +5 -5
- package/write-text/attached-text-writer.js +46 -48
- package/write-text/context-text.js +51 -58
- package/write-text/context-text3.js +69 -74
|
@@ -1,10 +1,33 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
3
|
+
const util_1 = require("../../../util");
|
|
4
|
+
const vertexShaderSource = `#version 300 es
|
|
5
|
+
precision highp float;
|
|
6
|
+
in vec2 a_position;
|
|
7
|
+
out vec2 v_texCoord;
|
|
8
|
+
void main() {
|
|
9
|
+
gl_Position = vec4(a_position, 0.0, 1.0);
|
|
10
|
+
v_texCoord = a_position * 0.5 + vec2(0.5);
|
|
11
|
+
}
|
|
12
|
+
`;
|
|
13
|
+
const fragmentShaderSource = `#version 300 es
|
|
14
|
+
precision highp float;
|
|
15
|
+
uniform float opacity;
|
|
16
|
+
uniform sampler2D u_texture;
|
|
17
|
+
in vec2 v_texCoord;
|
|
18
|
+
out vec4 outColor;
|
|
19
|
+
void main() {
|
|
20
|
+
|
|
21
|
+
vec4 color = texture(u_texture, v_texCoord);
|
|
22
|
+
if (color.a <= 0.2) {
|
|
23
|
+
outColor = vec4(0.0);
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
outColor = vec4(color.rgb, color.a * opacity);
|
|
27
|
+
}
|
|
28
|
+
`;
|
|
29
|
+
class FadeAwayProgram {
|
|
30
|
+
constructor(gl) {
|
|
8
31
|
this.gl = gl;
|
|
9
32
|
this.program = (0, util_1.createProgram)(gl, vertexShaderSource, fragmentShaderSource);
|
|
10
33
|
this.vao = gl.createVertexArray();
|
|
@@ -28,8 +51,8 @@ var FadeAwayProgram = /** @class */ (function () {
|
|
|
28
51
|
opacity: gl.getUniformLocation(this.program, 'opacity')
|
|
29
52
|
};
|
|
30
53
|
}
|
|
31
|
-
|
|
32
|
-
|
|
54
|
+
draw(texture, opacity) {
|
|
55
|
+
const { gl, vao, uniforms, program } = this;
|
|
33
56
|
gl.useProgram(program);
|
|
34
57
|
gl.bindVertexArray(vao);
|
|
35
58
|
gl.uniform1f(uniforms.opacity, opacity);
|
|
@@ -38,13 +61,12 @@ var FadeAwayProgram = /** @class */ (function () {
|
|
|
38
61
|
gl.bindTexture(gl.TEXTURE_2D, texture);
|
|
39
62
|
gl.drawArrays(gl.TRIANGLES, 0, 6);
|
|
40
63
|
gl.bindVertexArray(null);
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
|
|
64
|
+
}
|
|
65
|
+
free() {
|
|
66
|
+
const { gl, vao, _buffer, program } = this;
|
|
44
67
|
gl.deleteVertexArray(vao);
|
|
45
68
|
gl.deleteProgram(program);
|
|
46
69
|
gl.deleteBuffer(_buffer);
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
}());
|
|
70
|
+
}
|
|
71
|
+
}
|
|
50
72
|
exports.default = FadeAwayProgram;
|
|
@@ -3,19 +3,18 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
const programcache_1 = require("../../programcache");
|
|
7
|
+
const logic_1 = __importDefault(require("./logic"));
|
|
8
|
+
class FadeAway {
|
|
9
|
+
constructor(gl) {
|
|
10
10
|
this.gl = gl;
|
|
11
11
|
this.program = programcache_1.glProgramCache.getProgram(gl, logic_1.default);
|
|
12
12
|
}
|
|
13
|
-
|
|
13
|
+
draw(sourceTexture, opacity) {
|
|
14
14
|
this.program.draw(sourceTexture, opacity);
|
|
15
|
-
}
|
|
16
|
-
|
|
15
|
+
}
|
|
16
|
+
free() {
|
|
17
17
|
programcache_1.glProgramCache.releaseProgram(logic_1.default);
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
}());
|
|
18
|
+
}
|
|
19
|
+
}
|
|
21
20
|
exports.default = FadeAway;
|
|
@@ -4,5 +4,5 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.FadeAway = void 0;
|
|
7
|
-
|
|
7
|
+
const fadeaway_1 = __importDefault(require("./fadeaway"));
|
|
8
8
|
exports.FadeAway = fadeaway_1.default;
|
package/programs/index.js
CHANGED
|
@@ -37,22 +37,22 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
37
37
|
};
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
39
|
exports.rings = exports.FadeAway = exports.vectorfield = exports.noRegisterGlobeProgramCache = exports.globeProgramCache = exports.glProgramCache = exports.CameraUniformBlockString = exports.CameraUniformBlockTotem = exports.ArrowField = exports.GlobeShellWiggle = exports.Float2LegendWithRatio = void 0;
|
|
40
|
-
|
|
40
|
+
const float2legendwithratio_1 = require("./float2legendwithratio");
|
|
41
41
|
Object.defineProperty(exports, "Float2LegendWithRatio", { enumerable: true, get: function () { return float2legendwithratio_1.Float2LegendWithRatio; } });
|
|
42
|
-
|
|
42
|
+
const wiggle_1 = require("./globeshell/wiggle");
|
|
43
43
|
Object.defineProperty(exports, "GlobeShellWiggle", { enumerable: true, get: function () { return wiggle_1.GlobeShellWiggle; } });
|
|
44
|
-
|
|
44
|
+
const index_1 = require("./totems/index");
|
|
45
45
|
Object.defineProperty(exports, "CameraUniformBlockTotem", { enumerable: true, get: function () { return index_1.CameraUniformBlockTotem; } });
|
|
46
46
|
Object.defineProperty(exports, "CameraUniformBlockString", { enumerable: true, get: function () { return index_1.CameraUniformBlockString; } });
|
|
47
|
-
|
|
47
|
+
const arrowfield_1 = __importDefault(require("./arrowfield"));
|
|
48
48
|
exports.ArrowField = arrowfield_1.default;
|
|
49
|
-
|
|
49
|
+
const programcache_1 = require("./programcache");
|
|
50
50
|
Object.defineProperty(exports, "glProgramCache", { enumerable: true, get: function () { return programcache_1.glProgramCache; } });
|
|
51
51
|
Object.defineProperty(exports, "globeProgramCache", { enumerable: true, get: function () { return programcache_1.globeProgramCache; } });
|
|
52
52
|
Object.defineProperty(exports, "noRegisterGlobeProgramCache", { enumerable: true, get: function () { return programcache_1.noRegisterGlobeProgramCache; } });
|
|
53
|
-
|
|
53
|
+
const vectorfield = __importStar(require("./vectorfields"));
|
|
54
54
|
exports.vectorfield = vectorfield;
|
|
55
|
-
|
|
55
|
+
const helpers_1 = require("./helpers");
|
|
56
56
|
Object.defineProperty(exports, "FadeAway", { enumerable: true, get: function () { return helpers_1.FadeAway; } });
|
|
57
|
-
|
|
57
|
+
const rings = __importStar(require("./rings"));
|
|
58
58
|
exports.rings = rings;
|
|
@@ -2,20 +2,80 @@
|
|
|
2
2
|
// angle radius, rgba, dashRatio, rgbaMode
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
exports.AngledLineProgramCache = void 0;
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
5
|
+
const util_1 = require("../../util");
|
|
6
|
+
const totems_1 = require("../totems");
|
|
7
|
+
const geometrytransformations_1 = require("../../util/shaderfunctions/geometrytransformations");
|
|
8
|
+
const programcache_1 = require("../programcache");
|
|
9
|
+
const EDGE_COUNT_ON_SPHERE = 50;
|
|
10
|
+
const vertexShaderSource = `#version 300 es
|
|
11
|
+
precision highp float;
|
|
12
|
+
|
|
13
|
+
${totems_1.CameraUniformBlockString}
|
|
14
|
+
${geometrytransformations_1.longLatRadToMercator}
|
|
15
|
+
${geometrytransformations_1.longLatRadToCartesian3D}
|
|
16
|
+
${geometrytransformations_1.cartesian3DToGLPosition}
|
|
17
|
+
${geometrytransformations_1.mercatorXYToGLPosition}
|
|
18
|
+
${geometrytransformations_1.circleLimpFromLongLatRadCenterCartesian3D}
|
|
19
|
+
${geometrytransformations_1.circleLimpFromLongLatRadCenterMercatorCompass}
|
|
20
|
+
${geometrytransformations_1.circleLimpFromLongLatRadCenterMercatorRealDistance}
|
|
21
|
+
|
|
22
|
+
in vec2 center_point;
|
|
23
|
+
in float angle;
|
|
24
|
+
in float radius;
|
|
25
|
+
in vec4 rgba;
|
|
26
|
+
in float dash_ratio;
|
|
27
|
+
in float dash_opacity;
|
|
28
|
+
|
|
29
|
+
out vec4 v_color;
|
|
30
|
+
out float v_dash_ratio;
|
|
31
|
+
out float interpolation;
|
|
32
|
+
out float v_dash_opacity;
|
|
33
|
+
out vec2 v_limp;
|
|
34
|
+
// TODO: Draw World Boundaries
|
|
35
|
+
void main() {
|
|
36
|
+
if ( is3D ) {
|
|
37
|
+
interpolation = float( gl_VertexID ) / ${EDGE_COUNT_ON_SPHERE - 1}.0;
|
|
38
|
+
float radius_ = radius* interpolation;
|
|
39
|
+
vec3 position = circleLimpFromLongLatRadCenterCartesian3D( center_point, radius_, angle);
|
|
40
|
+
gl_Position = cartesian3DToGLPosition( position);
|
|
41
|
+
v_limp = vec2(0.0, 0.0);
|
|
42
|
+
} else {
|
|
43
|
+
interpolation = float( gl_VertexID );
|
|
44
|
+
float radius_ = radius * interpolation;
|
|
45
|
+
vec2 position = circleLimpFromLongLatRadCenterMercatorRealDistance( center_point, radius_, angle);
|
|
46
|
+
v_limp = position;
|
|
47
|
+
gl_Position = mercatorXYToGLPosition( position);
|
|
48
|
+
}
|
|
49
|
+
v_dash_opacity = dash_opacity;
|
|
50
|
+
v_color = rgba;
|
|
51
|
+
v_dash_ratio = dash_ratio;
|
|
52
|
+
}`;
|
|
53
|
+
const fragmentShaderSource = `#version 300 es
|
|
54
|
+
${geometrytransformations_1.POLE}
|
|
55
|
+
precision highp float;
|
|
56
|
+
|
|
57
|
+
uniform float opacity;
|
|
58
|
+
in vec4 v_color;
|
|
59
|
+
in float v_dash_ratio;
|
|
60
|
+
in float v_dash_opacity;
|
|
61
|
+
in float interpolation;
|
|
62
|
+
in vec2 v_limp;
|
|
63
|
+
out vec4 color;
|
|
64
|
+
|
|
65
|
+
void main() {
|
|
66
|
+
if ( v_limp.x < -POLE || v_limp.x > POLE || v_limp.y < -POLE || v_limp.y > POLE ){ color = vec4(0.0,0.0,0.0,0.0); return; }
|
|
67
|
+
color = vec4(v_color.rgb, v_color.a * opacity);
|
|
68
|
+
if (fract(interpolation / (2.0 * v_dash_ratio)) < 0.5 ) {
|
|
69
|
+
color.a *= v_dash_opacity;
|
|
70
|
+
}
|
|
71
|
+
}`;
|
|
72
|
+
class Logic {
|
|
73
|
+
constructor(globe) {
|
|
14
74
|
this.globe = globe;
|
|
15
75
|
this.gl = globe.gl;
|
|
16
76
|
this.program = (0, util_1.createProgram)(this.gl, vertexShaderSource, fragmentShaderSource);
|
|
17
77
|
this._lastOpacity = 1;
|
|
18
|
-
|
|
78
|
+
const { gl, program } = this;
|
|
19
79
|
{ // assign attribute locations
|
|
20
80
|
gl.bindAttribLocation(program, 0, "center_point");
|
|
21
81
|
gl.bindAttribLocation(program, 1, "angle");
|
|
@@ -26,24 +86,24 @@ var Logic = /** @class */ (function () {
|
|
|
26
86
|
}
|
|
27
87
|
{
|
|
28
88
|
this._opacityLocation = gl.getUniformLocation(program, "opacity");
|
|
29
|
-
|
|
89
|
+
const currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);
|
|
30
90
|
gl.useProgram(program);
|
|
31
91
|
gl.uniform1f(this._opacityLocation, this._lastOpacity);
|
|
32
92
|
gl.useProgram(currentProgram);
|
|
33
93
|
}
|
|
34
94
|
this.cameraBlockBindingPoint = 0;
|
|
35
|
-
|
|
95
|
+
const cameraBlockIndex = gl.getUniformBlockIndex(program, "CameraUniformBlock");
|
|
36
96
|
this.cameraBlockTotem = totems_1.CameraUniformBlockTotemCache.get(globe);
|
|
37
97
|
gl.uniformBlockBinding(program, cameraBlockIndex, this.cameraBlockBindingPoint);
|
|
38
98
|
}
|
|
39
|
-
|
|
40
|
-
|
|
99
|
+
draw(vao, length, opacity) {
|
|
100
|
+
const { gl, program, globe, cameraBlockTotem, cameraBlockBindingPoint } = this;
|
|
41
101
|
gl.useProgram(program);
|
|
42
102
|
if (opacity !== this._lastOpacity) {
|
|
43
103
|
gl.uniform1f(this._opacityLocation, opacity);
|
|
44
104
|
this._lastOpacity = opacity;
|
|
45
105
|
}
|
|
46
|
-
|
|
106
|
+
const drawCount = globe.api_GetCurrentGeometry() === 0 ? EDGE_COUNT_ON_SPHERE : 2;
|
|
47
107
|
gl.bindVertexArray(vao);
|
|
48
108
|
cameraBlockTotem.bind(cameraBlockBindingPoint);
|
|
49
109
|
// gl.disable(gl.DEPTH_TEST);
|
|
@@ -51,48 +111,48 @@ var Logic = /** @class */ (function () {
|
|
|
51
111
|
gl.bindVertexArray(null);
|
|
52
112
|
cameraBlockTotem.unbind(cameraBlockBindingPoint);
|
|
53
113
|
// gl.enable(gl.DEPTH_TEST);
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
114
|
+
}
|
|
115
|
+
createVAO(centerCoords, angle, radius, rgba, dashRatio, dashOpacity) {
|
|
116
|
+
const { gl } = this;
|
|
117
|
+
const vao = gl.createVertexArray();
|
|
58
118
|
gl.bindVertexArray(vao);
|
|
59
119
|
{
|
|
60
|
-
|
|
120
|
+
const { buffer, stride = 0, offset = 0 } = centerCoords;
|
|
61
121
|
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
|
|
62
122
|
gl.enableVertexAttribArray(0);
|
|
63
123
|
gl.vertexAttribPointer(0, 2, gl.FLOAT, false, stride, offset);
|
|
64
124
|
gl.vertexAttribDivisor(0, 1);
|
|
65
125
|
}
|
|
66
126
|
{
|
|
67
|
-
|
|
127
|
+
const { buffer, stride = 0, offset = 0 } = angle;
|
|
68
128
|
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
|
|
69
129
|
gl.enableVertexAttribArray(1);
|
|
70
130
|
gl.vertexAttribPointer(1, 1, gl.FLOAT, false, stride, offset);
|
|
71
131
|
gl.vertexAttribDivisor(1, 1);
|
|
72
132
|
}
|
|
73
133
|
{
|
|
74
|
-
|
|
134
|
+
const { buffer, stride = 0, offset = 0 } = radius;
|
|
75
135
|
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
|
|
76
136
|
gl.enableVertexAttribArray(2);
|
|
77
137
|
gl.vertexAttribPointer(2, 1, gl.FLOAT, false, stride, offset);
|
|
78
138
|
gl.vertexAttribDivisor(2, 1);
|
|
79
139
|
}
|
|
80
140
|
{
|
|
81
|
-
|
|
141
|
+
const { buffer, stride = 0, offset = 0 } = rgba;
|
|
82
142
|
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
|
|
83
143
|
gl.enableVertexAttribArray(3);
|
|
84
144
|
gl.vertexAttribPointer(3, 4, gl.FLOAT, false, stride, offset);
|
|
85
145
|
gl.vertexAttribDivisor(3, 1);
|
|
86
146
|
}
|
|
87
147
|
{
|
|
88
|
-
|
|
148
|
+
const { buffer, stride = 0, offset = 0 } = dashRatio;
|
|
89
149
|
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
|
|
90
150
|
gl.enableVertexAttribArray(4);
|
|
91
151
|
gl.vertexAttribPointer(4, 1, gl.FLOAT, false, stride, offset);
|
|
92
152
|
gl.vertexAttribDivisor(4, 1);
|
|
93
153
|
}
|
|
94
154
|
{
|
|
95
|
-
|
|
155
|
+
const { buffer, stride = 0, offset = 0 } = dashOpacity;
|
|
96
156
|
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
|
|
97
157
|
gl.enableVertexAttribArray(5);
|
|
98
158
|
gl.vertexAttribPointer(5, 1, gl.FLOAT, false, stride, offset);
|
|
@@ -100,18 +160,17 @@ var Logic = /** @class */ (function () {
|
|
|
100
160
|
}
|
|
101
161
|
gl.bindVertexArray(null);
|
|
102
162
|
return vao;
|
|
103
|
-
}
|
|
104
|
-
|
|
163
|
+
}
|
|
164
|
+
free() {
|
|
105
165
|
if (this.isFreed)
|
|
106
166
|
return;
|
|
107
167
|
totems_1.CameraUniformBlockTotemCache.release(this.globe);
|
|
108
168
|
this.cameraBlockTotem = null;
|
|
109
169
|
this.gl.deleteProgram(this.program);
|
|
110
170
|
this.isFreed = true;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
}());
|
|
171
|
+
}
|
|
172
|
+
}
|
|
114
173
|
exports.AngledLineProgramCache = Object.freeze({
|
|
115
|
-
get:
|
|
116
|
-
release:
|
|
174
|
+
get: (globe) => { return programcache_1.noRegisterGlobeProgramCache.getProgram(globe, Logic); },
|
|
175
|
+
release: (globe) => { return programcache_1.noRegisterGlobeProgramCache.releaseProgram(globe, Logic); }
|
|
117
176
|
});
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.CircleCache = void 0;
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
const webglobjectbuilders_1 = require("../../util/webglobjectbuilders");
|
|
5
|
+
const camerauniformblock_1 = require("../totems/camerauniformblock");
|
|
6
|
+
const programcache_1 = require("../programcache");
|
|
7
7
|
// import { vaoAttributeLoader } from "../../util/account/util";
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
const attribute_loader_1 = require("../../util/gl-util/buffer/attribute-loader");
|
|
9
|
+
const geometrytransformations_1 = require("../../util/shaderfunctions/geometrytransformations");
|
|
10
10
|
/**
|
|
11
11
|
* TODO:
|
|
12
12
|
* 1. integrate geometry functions for radius angle and center
|
|
@@ -15,22 +15,73 @@ var geometrytransformations_1 = require("../../util/shaderfunctions/geometrytran
|
|
|
15
15
|
* TODO:
|
|
16
16
|
* center_position is too small or doenst loaded as expected.
|
|
17
17
|
*/
|
|
18
|
-
|
|
18
|
+
const EDGE_COUNT_ON_SPHERE = 360;
|
|
19
19
|
//${circleLimpFromLongLatRadCenterCartesian3D_accurate}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
20
|
+
const vertexShaderSource = `#version 300 es
|
|
21
|
+
precision highp float;
|
|
22
|
+
${geometrytransformations_1.PI}
|
|
23
|
+
${camerauniformblock_1.CameraUniformBlockString}
|
|
24
|
+
${geometrytransformations_1.cartesian3DToGLPosition}
|
|
25
|
+
${geometrytransformations_1.circleOnSphere}
|
|
26
|
+
|
|
27
|
+
uniform float edge_count;
|
|
28
|
+
|
|
29
|
+
in vec3 center_position3d;
|
|
30
|
+
in vec3 target_position3d;
|
|
31
|
+
// in float radius;
|
|
32
|
+
in vec4 color;
|
|
33
|
+
in float dash_ratio;
|
|
34
|
+
in float dash_opacity;
|
|
35
|
+
|
|
36
|
+
out float interpolation;
|
|
37
|
+
out vec4 v_color;
|
|
38
|
+
out float v_dash_ratio;
|
|
39
|
+
out float v_dash_opacity;
|
|
40
|
+
void main() {
|
|
41
|
+
interpolation = float( gl_VertexID ) / ${EDGE_COUNT_ON_SPHERE}.0;
|
|
42
|
+
if ( is3D ) {
|
|
43
|
+
float angle = PI * 2.0 * interpolation;
|
|
44
|
+
vec3 position = circleOnSphere(center_position3d, target_position3d, angle);
|
|
45
|
+
gl_Position = cartesian3DToGLPosition(position);
|
|
46
|
+
} else {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
v_dash_ratio = dash_ratio;
|
|
50
|
+
v_dash_opacity = dash_opacity;
|
|
51
|
+
v_color = color;
|
|
52
|
+
gl_PointSize = 3.0;
|
|
53
|
+
}`;
|
|
54
|
+
const fragmentShaderSource = `#version 300 es
|
|
55
|
+
${geometrytransformations_1.POLE}
|
|
56
|
+
precision highp float;
|
|
57
|
+
uniform float opacity;
|
|
58
|
+
in vec4 v_color;
|
|
59
|
+
in float v_dash_ratio;
|
|
60
|
+
in float v_dash_opacity;
|
|
61
|
+
in float interpolation;
|
|
62
|
+
in vec2 v_limp;
|
|
63
|
+
out vec4 color;
|
|
64
|
+
void main() {
|
|
65
|
+
color = v_color;
|
|
66
|
+
color.a *= opacity;
|
|
67
|
+
if ( v_dash_ratio == 1.0 || v_dash_ratio == 0.0 ) return;
|
|
68
|
+
if (fract(interpolation / (2.0 * v_dash_ratio)) < 0.5 ) {
|
|
69
|
+
color.a *= v_dash_opacity;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
`;
|
|
73
|
+
class Logic {
|
|
74
|
+
constructor(globe) {
|
|
24
75
|
this.globe = globe;
|
|
25
76
|
this.gl = globe.gl;
|
|
26
77
|
this._lastOpacity = 1.0;
|
|
27
78
|
this.program = (0, webglobjectbuilders_1.createProgram)(this.gl, vertexShaderSource, fragmentShaderSource);
|
|
28
|
-
|
|
79
|
+
const { gl, program } = this;
|
|
29
80
|
this.program.uniforms = {
|
|
30
81
|
opacity: gl.getUniformLocation(program, "opacity")
|
|
31
82
|
};
|
|
32
83
|
{ // initial uniform values
|
|
33
|
-
|
|
84
|
+
const currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);
|
|
34
85
|
gl.useProgram(program);
|
|
35
86
|
gl.uniform1f(program.uniforms.opacity, 1.0);
|
|
36
87
|
gl.useProgram(currentProgram);
|
|
@@ -44,26 +95,26 @@ var Logic = /** @class */ (function () {
|
|
|
44
95
|
}
|
|
45
96
|
this.cameraBindingPoint = 0;
|
|
46
97
|
this.cameraBlockTotem = camerauniformblock_1.CameraUniformBlockTotemCache.get(globe);
|
|
47
|
-
|
|
98
|
+
const cameraBlockLocation = gl.getUniformBlockIndex(program, "CameraUniformBlock");
|
|
48
99
|
gl.uniformBlockBinding(program, cameraBlockLocation, this.cameraBindingPoint);
|
|
49
100
|
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
101
|
+
createVAO(center3dObj, target3dObj, colorObj, dashRatioObj, dashOpacityObj) {
|
|
102
|
+
const { gl } = this;
|
|
103
|
+
const vao = gl.createVertexArray();
|
|
104
|
+
const divisor = 1;
|
|
54
105
|
gl.bindVertexArray(vao);
|
|
55
|
-
(0, attribute_loader_1.attributeLoader)(gl, center3dObj, 0, 3, { divisor
|
|
56
|
-
(0, attribute_loader_1.attributeLoader)(gl, target3dObj, 1, 3, { divisor
|
|
106
|
+
(0, attribute_loader_1.attributeLoader)(gl, center3dObj, 0, 3, { divisor });
|
|
107
|
+
(0, attribute_loader_1.attributeLoader)(gl, target3dObj, 1, 3, { divisor });
|
|
57
108
|
// attributeLoader(gl, radiusObj, 1, 1, { divisor });
|
|
58
|
-
(0, attribute_loader_1.attributeLoader)(gl, colorObj, 2, 4, { divisor
|
|
59
|
-
(0, attribute_loader_1.attributeLoader)(gl, dashRatioObj, 3, 1, { divisor
|
|
60
|
-
(0, attribute_loader_1.attributeLoader)(gl, dashOpacityObj, 4, 1, { divisor
|
|
109
|
+
(0, attribute_loader_1.attributeLoader)(gl, colorObj, 2, 4, { divisor });
|
|
110
|
+
(0, attribute_loader_1.attributeLoader)(gl, dashRatioObj, 3, 1, { divisor });
|
|
111
|
+
(0, attribute_loader_1.attributeLoader)(gl, dashOpacityObj, 4, 1, { divisor });
|
|
61
112
|
gl.bindVertexArray(null);
|
|
62
113
|
gl.bindVertexArray(null);
|
|
63
114
|
return vao;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
|
|
115
|
+
}
|
|
116
|
+
draw(vao, length, opacity) {
|
|
117
|
+
const { gl, program, cameraBlockTotem, cameraBindingPoint } = this;
|
|
67
118
|
gl.useProgram(program);
|
|
68
119
|
if (this._lastOpacity !== opacity) {
|
|
69
120
|
gl.uniform1f(program.uniforms.opacity, opacity);
|
|
@@ -75,17 +126,16 @@ var Logic = /** @class */ (function () {
|
|
|
75
126
|
// gl.drawArraysInstanced(gl.POINTS, 0, EDGE_COUNT_ON_SPHERE + 1, length);
|
|
76
127
|
cameraBlockTotem.unbind(cameraBindingPoint);
|
|
77
128
|
gl.bindVertexArray(null);
|
|
78
|
-
}
|
|
79
|
-
|
|
129
|
+
}
|
|
130
|
+
free() {
|
|
80
131
|
if (this.isFreed)
|
|
81
132
|
return;
|
|
82
133
|
camerauniformblock_1.CameraUniformBlockTotemCache.release(this.globe);
|
|
83
134
|
this.gl.deleteProgram(this.program);
|
|
84
135
|
this.isFreed = true;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
}());
|
|
136
|
+
}
|
|
137
|
+
}
|
|
88
138
|
exports.CircleCache = Object.freeze({
|
|
89
|
-
get:
|
|
90
|
-
release:
|
|
139
|
+
get: (globe) => programcache_1.noRegisterGlobeProgramCache.getProgram(globe, Logic),
|
|
140
|
+
release: (globe) => programcache_1.noRegisterGlobeProgramCache.releaseProgram(globe, Logic)
|
|
91
141
|
});
|