@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.
- package/Math/angle-calculation.js +15 -0
- package/Math/arc.js +65 -0
- package/Math/bounds/line-bbox.js +190 -0
- package/Math/constants.js +9 -0
- package/Math/frustum/camera.js +24 -0
- package/Math/frustum/from-globeinfo.js +48 -0
- package/Math/frustum/types.js +2 -0
- package/Math/globe-util/horizon-plane.js +112 -0
- package/Math/index.js +1 -0
- package/Math/juction/arc-plane.js +83 -0
- package/Math/juction/line-sphere.js +25 -0
- package/Math/juction/plane-plane.js +58 -0
- package/Math/line.js +58 -0
- package/Math/matrix4.js +1 -0
- package/Math/methods.js +206 -0
- package/Math/plane.js +62 -0
- package/Math/quaternion.js +108 -0
- package/Math/types.js +2 -0
- package/Math/utils.js +4 -0
- package/Math/vec3.js +129 -0
- package/algorithms/search-binary.js +19 -0
- package/altitude-locator/adaptors.js +1 -0
- package/altitude-locator/draw-subset-obj.js +19 -0
- package/altitude-locator/keymethod.js +1 -0
- package/altitude-locator/plugin.js +357 -0
- package/altitude-locator/types.js +23 -0
- package/arrowfield/adaptor.js +15 -0
- package/arrowfield/index.js +10 -0
- package/arrowfield/plugin.js +89 -0
- package/bearing-line/index.js +8 -0
- package/bearing-line/plugin.js +474 -0
- package/circle-line-chain/chain-list-map.js +211 -0
- package/circle-line-chain/init.js +1 -0
- package/circle-line-chain/plugin.js +449 -0
- package/circle-line-chain/util.js +5 -0
- package/compass-rose/compass-rose-padding-flat.js +247 -0
- package/compass-rose/compass-text-writer.js +161 -0
- package/compass-rose/index.js +7 -0
- package/compassrose/compassrose.js +300 -0
- package/compassrose/index.js +8 -0
- package/globe-types.js +1 -0
- package/heatwave/index.js +10 -0
- package/heatwave/isobar/objectarraylabels.js +206 -0
- package/heatwave/isobar/plugin.js +362 -0
- package/heatwave/isobar/quadtreecontours.js +316 -0
- package/heatwave/plugins/heatwaveglobeshell.js +224 -0
- package/index.js +11 -11
- package/jest.config.js +7 -0
- package/package.json +4 -4
- package/partialrings/buffer-manager.js +113 -0
- package/partialrings/index.js +41 -0
- package/partialrings/plugin.js +171 -0
- package/partialrings/program.js +197 -0
- package/pin/pin-object-array.js +308 -0
- package/pin/pin-point-totem.js +61 -0
- package/point-heat-map/adaptors/timetracksplugin-format-to-this.js +66 -0
- package/point-heat-map/index.js +1 -0
- package/point-heat-map/plugin-webworker.js +131 -0
- package/point-heat-map/point-to-heat-map-flow.js +129 -0
- package/point-tracks/key-methods.js +5 -0
- package/point-tracks/plugin.js +353 -0
- package/programs/arrowfield/index.js +7 -0
- package/programs/arrowfield/logic.js +149 -0
- package/programs/arrowfield/object.js +68 -0
- package/programs/data2legend/density-to-legend.js +77 -0
- package/programs/data2legend/point-to-density-texture.js +75 -0
- package/programs/float2legendwithratio/index.js +8 -0
- package/programs/float2legendwithratio/logic.js +125 -0
- package/programs/float2legendwithratio/object.js +113 -0
- package/programs/globe-util/is-globe-moved.js +22 -0
- package/programs/globeshell/index.js +8 -0
- package/programs/globeshell/noise/noises.js +1 -0
- package/programs/globeshell/wiggle/index.js +8 -0
- package/programs/globeshell/wiggle/logic.js +252 -0
- package/programs/globeshell/wiggle/object.js +74 -0
- package/programs/helpers/blender/index.js +1 -0
- package/programs/helpers/blender/program.js +62 -0
- package/programs/helpers/fadeaway/index.js +7 -0
- package/programs/helpers/fadeaway/logic.js +50 -0
- package/programs/helpers/fadeaway/object.js +21 -0
- package/programs/helpers/index.js +8 -0
- package/programs/index.js +58 -0
- package/programs/interface.js +1 -0
- package/programs/line-on-globe/angled-line.js +117 -0
- package/programs/line-on-globe/circle-accurate-3d.js +91 -0
- package/programs/line-on-globe/circle-accurate-flat.js +158 -0
- package/programs/line-on-globe/circle-accurate.js +108 -0
- package/programs/line-on-globe/circle.js +102 -0
- package/programs/line-on-globe/degree-padding-around-circle-3d.js +109 -0
- package/programs/line-on-globe/index.js +1 -0
- package/programs/line-on-globe/lines-color-instanced-flat.js +91 -0
- package/programs/line-on-globe/linestrip.js +110 -0
- package/programs/line-on-globe/naive-accurate-flexible.js +125 -0
- package/programs/line-on-globe/to-the-surface.js +82 -0
- package/programs/line-on-globe/util.js +8 -0
- package/programs/picking/pickable-renderer.js +104 -0
- package/programs/point-on-globe/element-globe-surface-glow.js +102 -0
- package/programs/point-on-globe/element-point-glow.js +85 -0
- package/programs/point-on-globe/square-pixel-point.js +125 -0
- package/programs/programcache.js +131 -0
- package/programs/rings/distancering/circleflatprogram.js +114 -0
- package/programs/rings/distancering/circlepaddingfreeangleprogram.js +358 -0
- package/programs/rings/distancering/circlepaddysharedbuffer.js +433 -0
- package/programs/rings/distancering/index.js +14 -0
- package/programs/rings/distancering/paddyflatprogram.js +119 -0
- package/programs/rings/distancering/paddyflatprogram2d.js +121 -0
- package/programs/rings/distancering/paddyflatprogram3d.js +119 -0
- package/programs/rings/distancering/shader.js +1 -0
- package/programs/rings/index.js +17 -0
- package/programs/rings/partial-ring/piece-of-pie.js +173 -0
- package/programs/totems/camerauniformblock.js +147 -0
- package/programs/totems/canvas-webglobe-info.js +102 -0
- package/programs/totems/gpu-selection-uniform-block.js +104 -0
- package/programs/totems/index.js +40 -0
- package/programs/two-d/pixel-circle.js +1 -0
- package/programs/two-d/pixel-padding-for-compass.js +101 -0
- package/programs/util.js +18 -0
- package/programs/vectorfields/index.js +23 -0
- package/programs/vectorfields/logics/drawrectangleparticles.js +66 -0
- package/programs/vectorfields/logics/index.js +12 -0
- package/programs/vectorfields/logics/pixelbased.js +86 -0
- package/programs/vectorfields/logics/ubo.js +57 -0
- package/programs/vectorfields/pingpongbuffermanager.js +80 -0
- package/rangerings/enum.js +5 -0
- package/rangerings/index.js +15 -0
- package/rangerings/plugin.js +610 -0
- package/rangerings/rangeringangletext.js +341 -0
- package/rangerings/ring-account.js +134 -0
- package/shaders/fragment-toy/firework.js +4 -0
- package/shaders/fragment-toy/singularity.js +5 -0
- package/shape-on-terrain/arc/naive/plugin.js +252 -0
- package/timetracks/adaptors-line-strip.js +82 -0
- package/timetracks/adaptors.js +136 -0
- package/timetracks/index.js +19 -0
- package/timetracks/plugin-line-strip.js +254 -0
- package/timetracks/plugin.js +262 -0
- package/timetracks/program-line-strip.js +418 -0
- package/timetracks/program.js +466 -0
- package/timetracks/programpoint-line-strip.js +101 -0
- package/timetracks/programpoint.js +101 -0
- package/types.js +15 -0
- package/util/account/bufferoffsetmanager.js +202 -0
- package/util/account/index.js +23 -0
- package/util/account/single-attribute-buffer-management/buffer-manager.js +112 -0
- package/util/account/single-attribute-buffer-management/buffer-orchestrator.js +180 -0
- package/util/account/single-attribute-buffer-management/index.js +9 -0
- package/util/account/single-attribute-buffer-management/object-store.js +53 -0
- package/util/account/single-attribute-buffer-management/types.js +2 -0
- package/util/account/util.js +24 -0
- package/util/algorithms/index.js +1 -0
- package/util/algorithms/search-binary.js +28 -0
- package/util/check/get.js +18 -0
- package/util/check/index.js +1 -0
- package/util/check/typecheck.js +51 -0
- package/util/geometry/index.js +53 -0
- package/util/gl-util/buffer/attribute-loader.js +81 -0
- package/util/gl-util/buffer/index.js +6 -0
- package/util/gl-util/buffer/types.js +1 -0
- package/util/gl-util/draw-options/methods.js +38 -0
- package/util/gl-util/draw-options/types.js +15 -0
- package/util/gl-util/uniform-block/manager.js +168 -0
- package/util/gl-util/uniform-block/shader.js +1 -0
- package/util/gl-util/uniform-block/types.js +8 -0
- package/util/heatwavedatamanager/datamanager.js +212 -0
- package/util/heatwavedatamanager/index.js +10 -0
- package/util/heatwavedatamanager/pointcoordinatesdatacalculator.js +125 -0
- package/util/heatwavedatamanager/pointcoordsmeta.js +21 -0
- package/util/index.js +57 -0
- package/util/interpolation/index.js +1 -0
- package/util/interpolation/timetrack/index.js +5 -0
- package/util/interpolation/timetrack/timetrack-interpolator.js +81 -0
- package/util/interpolation/timetrack/web-worker-str.js +5 -0
- package/util/interpolation/timetrack/web-worker.js +48 -0
- package/util/jshelpers/data-filler.js +20 -0
- package/util/jshelpers/equality.js +20 -0
- package/util/jshelpers/index.js +37 -0
- package/util/jshelpers/timefilters.js +32 -0
- package/util/picking/fence.js +46 -0
- package/util/picking/picker-displayer.js +145 -0
- package/util/programs/draw-texture-on-canvas.js +71 -0
- package/util/programs/index.js +17 -0
- package/util/programs/shapesonglobe.js +174 -0
- package/util/programs/supersampletotextures.js +107 -0
- package/util/programs/texturetoglobe.js +132 -0
- package/util/shaderfunctions/geometrytransformations.js +45 -0
- package/util/shaderfunctions/index.js +18 -0
- package/util/shaderfunctions/nodata.js +5 -0
- package/util/shaderfunctions/noisefunctions.js +13 -0
- package/util/surface-line-data/arc-bboxes.js +25 -0
- package/util/surface-line-data/arcs-to-cuts.js +53 -0
- package/util/surface-line-data/cut-arc.js +1 -0
- package/util/surface-line-data/flow.js +28 -0
- package/util/surface-line-data/rbush-manager.js +1 -0
- package/util/surface-line-data/types.js +1 -0
- package/util/surface-line-data/web-worker.js +1 -0
- package/util/webglobe/gldefaultstates.js +7 -0
- package/util/webglobe/index.js +18 -0
- package/util/webglobe/rasteroverlay.js +80 -0
- package/util/webglobjectbuilders.js +393 -0
- package/util/webglobjectbuilders1.js +238 -0
- package/waveparticles/adaptor.js +18 -0
- package/waveparticles/index.js +10 -0
- package/waveparticles/plugin.js +271 -0
- package/wind/imagetovectorfieldandmagnitude.js +35 -0
- package/wind/index.js +14 -0
- package/wind/plugin.js +724 -0
- package/wind/vectorfieldimage.js +25 -0
- package/write-text/attached-text-writer.js +93 -0
- package/write-text/context-text.js +105 -0
- package/write-text/context-text3.js +160 -0
- package/write-text/index.js +5 -0
- package/write-text/writer-plugin.js +8 -0
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* *
|
|
4
|
+
* * *
|
|
5
|
+
* * * *
|
|
6
|
+
* * *
|
|
7
|
+
* *
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.ElementGlobeSufaceGlowCache = void 0;
|
|
11
|
+
var totems_1 = require("../totems");
|
|
12
|
+
var geometrytransformations_1 = require("../../util/shaderfunctions/geometrytransformations");
|
|
13
|
+
var util_1 = require("../../util");
|
|
14
|
+
var programcache_1 = require("../programcache");
|
|
15
|
+
var attribute_loader_1 = require("../../util/gl-util/buffer/attribute-loader");
|
|
16
|
+
var methods_1 = require("../../util/gl-util/draw-options/methods");
|
|
17
|
+
var manager_1 = require("../../util/gl-util/uniform-block/manager");
|
|
18
|
+
var uboBlockManager = new manager_1.UniformBlockManager("FlexibleBlock", [
|
|
19
|
+
{ name: "u_color", type: "vec4" },
|
|
20
|
+
{ name: "u_radius", type: "float" }
|
|
21
|
+
], 1);
|
|
22
|
+
var vs = "#version 300 es\n".concat(geometrytransformations_1.PI, "\n").concat(totems_1.CameraUniformBlockString, "\n").concat(geometrytransformations_1.cartesian3DToGLPosition, "\n").concat(geometrytransformations_1.circleLimpFromLongLatRadCenterCartesian3D_accurate, "\n\nuniform float edge_count;\n\nin vec3 pos3D;\nin float radius;\nin vec4 color;\n\n").concat(uboBlockManager.glslCode(), "\n\nout vec4 vColor;\n\nvoid main() {\n\n float radius_ = ( radius == -1.0 ) ? u_radius : radius;\n vec4 color = ( color.r == -1.0 ) ? u_color : color;\n\n if ( gl_VertexID == 0 ) {\n gl_Position = cartesian3DToGLPosition(pos3D);\n vColor = vColor;\n } else {\n float angle = PI * 2.0 * float( gl_VertexID - 1 ) / edge_count;\n vec3 position = circleLimpFromLongLatRadCenterCartesian3D_accurate(pos3D, radius, angle);\n gl_Position = cartesian3DToGLPosition(position);\n float distance = distance(position, pos3D);\n\n \n\n vColor = vec4(color.rgb, color.a * (1.0 - distance / radius));\n }\n}");
|
|
23
|
+
var fs = "#version 300 es\nprecision highp float;\n\nuniform float opacity;\nin vec4 vColor;\n\nout vec4 fragColor;\n\nvoid main() {\n fragColor = vColor;\n fragColor.a *= opacity;\n}";
|
|
24
|
+
var Logic = /** @class */ (function () {
|
|
25
|
+
function Logic(globe) {
|
|
26
|
+
this.globe = globe;
|
|
27
|
+
this.gl = globe.gl;
|
|
28
|
+
this._vaoCache = [];
|
|
29
|
+
this.program = (0, util_1.createProgram)(this.gl, vs, fs);
|
|
30
|
+
var _a = this, gl = _a.gl, program = _a.program;
|
|
31
|
+
var currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);
|
|
32
|
+
gl.useProgram(program);
|
|
33
|
+
// set uniform locations
|
|
34
|
+
this._uniforms = {
|
|
35
|
+
edge_count_loc: gl.getUniformLocation(program, "edge_count"),
|
|
36
|
+
edge_count: 40,
|
|
37
|
+
opacity_loc: gl.getUniformLocation(program, "opacity"),
|
|
38
|
+
opacity: 1.0
|
|
39
|
+
};
|
|
40
|
+
// last values
|
|
41
|
+
gl.uniform1f(this._uniforms.edge_count_loc, this._uniforms.edge_count);
|
|
42
|
+
gl.uniform1f(this._uniforms.opacity_loc, this._uniforms.opacity);
|
|
43
|
+
gl.useProgram(currentProgram);
|
|
44
|
+
// assign attribute locations
|
|
45
|
+
gl.bindAttribLocation(program, 0, "pos3D");
|
|
46
|
+
gl.bindAttribLocation(program, 1, "radius");
|
|
47
|
+
gl.bindAttribLocation(program, 2, "color");
|
|
48
|
+
// camera uniform block
|
|
49
|
+
this.cameraUniformBlockTotem = totems_1.CameraUniformBlockTotemCache.get(globe);
|
|
50
|
+
this.cameraBlockBindingPoint = 0;
|
|
51
|
+
var cameraBlockIndex = gl.getUniformBlockIndex(program, "CameraUniformBlock");
|
|
52
|
+
gl.uniformBlockBinding(program, cameraBlockIndex, this.cameraBlockBindingPoint);
|
|
53
|
+
uboBlockManager.assignBindingPoint(this.gl, this.program);
|
|
54
|
+
this._defaultUBO = uboBlockManager.createUBO(this.gl);
|
|
55
|
+
}
|
|
56
|
+
Logic.prototype.createVAO = function (pos3DObj, radiusObj, colorObj) {
|
|
57
|
+
var gl = this.gl;
|
|
58
|
+
var vao = gl.createVertexArray();
|
|
59
|
+
var divisor = 1;
|
|
60
|
+
gl.bindVertexArray(vao);
|
|
61
|
+
// TODO constants to escape values
|
|
62
|
+
(0, attribute_loader_1.attributeLoader)(gl, pos3DObj, 0, 3, { divisor: divisor });
|
|
63
|
+
(0, attribute_loader_1.attributeLoader)(gl, radiusObj, 1, 1, { divisor: divisor, escapeValues: [-1] });
|
|
64
|
+
(0, attribute_loader_1.attributeLoader)(gl, colorObj, 2, 4, { divisor: divisor, escapeValues: [-1, -1, -1, -1] });
|
|
65
|
+
gl.bindVertexArray(null);
|
|
66
|
+
this._vaoCache.push(vao);
|
|
67
|
+
return vao;
|
|
68
|
+
};
|
|
69
|
+
Logic.prototype.draw = function (vao, drawOptions, opacity, ubo) {
|
|
70
|
+
if (opacity === void 0) { opacity = 1.0; }
|
|
71
|
+
if (ubo === void 0) { ubo = null; }
|
|
72
|
+
var _a = this, gl = _a.gl, program = _a.program;
|
|
73
|
+
gl.useProgram(program);
|
|
74
|
+
gl.bindVertexArray(vao);
|
|
75
|
+
if (opacity !== this._uniforms.opacity) {
|
|
76
|
+
gl.uniform1f(this._uniforms.opacity_loc, opacity);
|
|
77
|
+
this._uniforms.opacity = opacity;
|
|
78
|
+
}
|
|
79
|
+
ubo = ubo || this._defaultUBO;
|
|
80
|
+
ubo.bind();
|
|
81
|
+
(0, methods_1.drawInstanced)(gl, gl.TRIANGLE_FAN, drawOptions);
|
|
82
|
+
ubo.unbind();
|
|
83
|
+
gl.bindVertexArray(null);
|
|
84
|
+
};
|
|
85
|
+
Logic.prototype.free = function () {
|
|
86
|
+
if (this._isFreed)
|
|
87
|
+
return;
|
|
88
|
+
totems_1.CameraUniformBlockTotemCache.release(this.globe);
|
|
89
|
+
this.gl.deleteProgram(this.program);
|
|
90
|
+
for (var _i = 0, _a = this._vaoCache; _i < _a.length; _i++) {
|
|
91
|
+
var vao = _a[_i];
|
|
92
|
+
this.gl.deleteVertexArray(vao);
|
|
93
|
+
}
|
|
94
|
+
this._isFreed = true;
|
|
95
|
+
};
|
|
96
|
+
return Logic;
|
|
97
|
+
}());
|
|
98
|
+
var ElementGlobeSufaceGlowCache = Object.freeze({
|
|
99
|
+
get: function (globe) { return programcache_1.noRegisterGlobeProgramCache.getProgram(globe, Logic); },
|
|
100
|
+
release: function (globe) { return programcache_1.noRegisterGlobeProgramCache.releaseProgram(globe); }
|
|
101
|
+
});
|
|
102
|
+
exports.ElementGlobeSufaceGlowCache = ElementGlobeSufaceGlowCache;
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ElementPointGlowProgramCache = void 0;
|
|
4
|
+
var util_1 = require("../../util");
|
|
5
|
+
var totems_1 = require("../totems");
|
|
6
|
+
var geometrytransformations_1 = require("../../util/shaderfunctions/geometrytransformations");
|
|
7
|
+
var programcache_1 = require("../programcache");
|
|
8
|
+
var attribute_loader_1 = require("../../util/gl-util/buffer/attribute-loader");
|
|
9
|
+
var methods_1 = require("../../util/gl-util/draw-options/methods");
|
|
10
|
+
var manager_1 = require("../../util/gl-util/uniform-block/manager");
|
|
11
|
+
var singularity_1 = require("../../shaders/fragment-toy/singularity");
|
|
12
|
+
var firework_1 = require("../../shaders/fragment-toy/firework");
|
|
13
|
+
var cameraBlockBindingPoint = 0;
|
|
14
|
+
var flexibleBlockBindingPoint = 1;
|
|
15
|
+
var uniformBlockManager = new manager_1.UniformBlockManager("FlexibleBlock", [
|
|
16
|
+
{ name: "u_rgba", type: "vec4", value: new Float32Array([1, 1, 1, 1]) },
|
|
17
|
+
{ name: "u_size_multiplier", type: "float", value: new Float32Array([1.0]) },
|
|
18
|
+
{ name: "u_opacity", type: "float", value: new Float32Array([1.0]) },
|
|
19
|
+
{ name: "u_size", type: "float", value: new Float32Array([1.0]) },
|
|
20
|
+
{ name: "u_minimumSize", type: "float", value: new Float32Array([25.0]) },
|
|
21
|
+
{ name: "u_phase", type: "float", value: new Float32Array([1.0]) },
|
|
22
|
+
], flexibleBlockBindingPoint);
|
|
23
|
+
var vs = "#version 300 es\nprecision highp float;\n\n".concat(totems_1.CameraUniformBlockString, "\n").concat(geometrytransformations_1.mercatorXYToGLPosition, "\n").concat(geometrytransformations_1.cartesian3DToGLPosition, "\n\n").concat(uniformBlockManager.glslCode(), "\n\n\nin vec3 pos3D;\nin vec2 pos2D;\nin vec4 color;\nin float size;\n\nout vec4 vColor;\nflat out float v_size;\n\n\n\nvoid main() {\n\n if(is3D){\n gl_Position = cartesian3DToGLPosition(pos3D);\n }\n else {\n gl_Position = mercatorXYToGLPosition(pos2D);\n }\n\n gl_PointSize = max(\n ((size == -1.0) ? u_size : size ) * u_size_multiplier,\n u_minimumSize);\n v_size = gl_PointSize;\n vColor = (color.r == -1.0) ? u_rgba : color;\n vColor.a *= u_opacity;\n\n}");
|
|
24
|
+
var fs = "#version 300 es\nprecision highp float;\n\n".concat(uniformBlockManager.glslCode(), "\n\nin vec4 vColor;\nout vec4 fragColor;\n\nflat in float v_size;\n\n").concat(firework_1.firework, "\n").concat(singularity_1.singularity, " \n\nvoid main() {\n fragColor = vColor;\n\n float dist = distance(gl_PointCoord, vec2(0.5, 0.5)) * 2.0;\n if ( dist > 1.0) discard;\n\n // center glow\n float center_alpha = smoothstep(0.5, 0.0, dist) * 0.3;\n // center_alpha = smoothstep(0.0, 1.0, center_alpha);\n\n // circle pattern\n float threshold = fract(( - dist + u_phase - 0.5));\n float circle_alpha = sin( threshold * 1.57 );\n circle_alpha = smoothstep((v_size / (v_size + .5)), 1.0, circle_alpha);\n\n float outer_circle_alpha = sin(dist * 1.57 );\n outer_circle_alpha = smoothstep((v_size / (v_size + .5)), 1.0, outer_circle_alpha);\n\n // fragColor = singularity(gl_PointCoord, u_phase);\n\n fragColor.a *= smoothstep(0.0, 1.1, ( 0.4 * u_opacity + center_alpha + circle_alpha+ outer_circle_alpha)); \n}");
|
|
25
|
+
var Logic = /** @class */ (function () {
|
|
26
|
+
function Logic(globe) {
|
|
27
|
+
this.globe = globe;
|
|
28
|
+
this.gl = globe.gl;
|
|
29
|
+
this.program = (0, util_1.createProgram)(this.gl, vs, fs);
|
|
30
|
+
var _a = this, gl = _a.gl, program = _a.program;
|
|
31
|
+
gl.bindAttribLocation(program, 0, "pos3D");
|
|
32
|
+
gl.bindAttribLocation(program, 1, "pos2D");
|
|
33
|
+
gl.bindAttribLocation(program, 2, "color");
|
|
34
|
+
gl.bindAttribLocation(program, 3, "size");
|
|
35
|
+
// assign uniform block
|
|
36
|
+
this.cameraBlockTotem = totems_1.CameraUniformBlockTotemCache.get(globe);
|
|
37
|
+
this.cameraBlockTotem.assignBindingPoint(program, cameraBlockBindingPoint);
|
|
38
|
+
uniformBlockManager.assignBindingPoint(this.gl, this.program);
|
|
39
|
+
this._defaultUBO = uniformBlockManager.createUBO(this.gl);
|
|
40
|
+
}
|
|
41
|
+
Logic.prototype.createVAO = function (pos3DBuffer, pos2DBuffer, colorBuffer, sizeBuffer) {
|
|
42
|
+
var gl = this.gl;
|
|
43
|
+
var vao = gl.createVertexArray();
|
|
44
|
+
gl.bindVertexArray(vao);
|
|
45
|
+
(0, attribute_loader_1.attributeLoader)(gl, pos3DBuffer, 0, 3);
|
|
46
|
+
(0, attribute_loader_1.attributeLoader)(gl, pos2DBuffer, 1, 2);
|
|
47
|
+
(0, attribute_loader_1.attributeLoader)(gl, colorBuffer, 2, 4, { escapeValues: [-1, -1, -1, -1] });
|
|
48
|
+
(0, attribute_loader_1.attributeLoader)(gl, sizeBuffer, 3, 1, { escapeValues: [-1] });
|
|
49
|
+
gl.bindVertexArray(null);
|
|
50
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, null);
|
|
51
|
+
return vao;
|
|
52
|
+
};
|
|
53
|
+
Logic.prototype.createUBO = function () {
|
|
54
|
+
var ubo = uniformBlockManager.createUBO(this.gl);
|
|
55
|
+
return ubo;
|
|
56
|
+
};
|
|
57
|
+
Logic.prototype.draw = function (vao, drawOptions, ubo) {
|
|
58
|
+
if (ubo === void 0) { ubo = null; }
|
|
59
|
+
var _a = this, gl = _a.gl, program = _a.program, cameraBlockTotem = _a.cameraBlockTotem;
|
|
60
|
+
gl.useProgram(program);
|
|
61
|
+
gl.bindVertexArray(vao);
|
|
62
|
+
cameraBlockTotem.bind(cameraBlockBindingPoint);
|
|
63
|
+
ubo = ubo || this._defaultUBO;
|
|
64
|
+
ubo.bind();
|
|
65
|
+
(0, methods_1.drawArrays)(gl, gl.POINTS, drawOptions);
|
|
66
|
+
ubo.unbind();
|
|
67
|
+
gl.bindVertexArray(null);
|
|
68
|
+
cameraBlockTotem.unbind(cameraBlockBindingPoint);
|
|
69
|
+
this.globe.DrawRender();
|
|
70
|
+
};
|
|
71
|
+
// for singleton cache interation
|
|
72
|
+
Logic.prototype.free = function () {
|
|
73
|
+
if (this._isFreed)
|
|
74
|
+
return;
|
|
75
|
+
totems_1.CameraUniformBlockTotemCache.release(this.globe);
|
|
76
|
+
this.gl.deleteProgram(this.program);
|
|
77
|
+
this._isFreed = true;
|
|
78
|
+
};
|
|
79
|
+
return Logic;
|
|
80
|
+
}());
|
|
81
|
+
var ElementPointGlowProgramCache = Object.freeze({
|
|
82
|
+
get: function (globe) { return programcache_1.noRegisterGlobeProgramCache.getProgram(globe, Logic); },
|
|
83
|
+
release: function (globe) { return programcache_1.noRegisterGlobeProgramCache.releaseProgram(globe, Logic); }
|
|
84
|
+
});
|
|
85
|
+
exports.ElementPointGlowProgramCache = ElementPointGlowProgramCache;
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PointOnGlobeProgramCache = void 0;
|
|
4
|
+
var util_1 = require("../../util");
|
|
5
|
+
var totems_1 = require("../totems");
|
|
6
|
+
var geometrytransformations_1 = require("../../util/shaderfunctions/geometrytransformations");
|
|
7
|
+
var programcache_1 = require("../programcache");
|
|
8
|
+
var vs = "#version 300 es\n".concat(totems_1.CameraUniformBlockString, "\n").concat(geometrytransformations_1.mercatorXYToGLPosition, "\n").concat(geometrytransformations_1.cartesian3DToGLPosition, "\nprecision highp float;\nprecision highp int;\n\nuniform int hovered_vertexID; // can be removed\n\nin vec3 pos3D;\nin vec2 pos2D;\nin vec4 rgba;\n\nuniform float pointSize;\nuniform float hoveredPointSize;\n\nflat out highp int vVertexID;\n\n\nout vec4 v_rgba;\n\nvoid main() {\n\n if(is3D){\n gl_Position = cartesian3DToGLPosition(pos3D);\n }\n else{\n gl_Position = mercatorXYToGLPosition(pos2D);\n }\n if (hovered_vertexID == gl_VertexID) {\n gl_PointSize = hoveredPointSize;\n } else {\n gl_PointSize = pointSize;\n }\n v_rgba = rgba;\n vVertexID = gl_VertexID;\n}");
|
|
9
|
+
var fs = "#version 300 es\nprecision highp float;\n\nuniform float opacity;\n\nflat in highp int vVertexID;\nin vec4 v_rgba;\n\nlayout(location = 0) out vec4 fragColor;\nlayout(location = 1) out int vertexID;\n\nvoid main() {\n vertexID = vVertexID; \n fragColor = v_rgba;\n fragColor.a *= opacity;\n}";
|
|
10
|
+
var PointOnGlobeProgram = /** @class */ (function () {
|
|
11
|
+
function PointOnGlobeProgram(globe) {
|
|
12
|
+
this.globe = globe;
|
|
13
|
+
this.gl = globe.gl;
|
|
14
|
+
this.program = (0, util_1.createProgram)(this.gl, vs, fs);
|
|
15
|
+
var _a = this, gl = _a.gl, program = _a.program;
|
|
16
|
+
this.uniforms = {
|
|
17
|
+
opacity: gl.getUniformLocation(program, "opacity"),
|
|
18
|
+
hovered_vertexID: gl.getUniformLocation(program, "hovered_vertexID"),
|
|
19
|
+
hoveredPointSize: gl.getUniformLocation(program, "hoveredPointSize"),
|
|
20
|
+
pointSize: gl.getUniformLocation(program, "pointSize"),
|
|
21
|
+
};
|
|
22
|
+
// eslint-disable-next-line
|
|
23
|
+
{ // assign opacity
|
|
24
|
+
this._lastOpacity = 1.0;
|
|
25
|
+
this._lastPointSize = 2.0;
|
|
26
|
+
this._lastHoveredPointSize = 4.0;
|
|
27
|
+
this._lastHoveredID = -1;
|
|
28
|
+
var currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);
|
|
29
|
+
gl.useProgram(program);
|
|
30
|
+
gl.uniform1f(this.uniforms.opacity, this._lastOpacity);
|
|
31
|
+
gl.uniform1f(this.uniforms.pointSize, this._lastPointSize);
|
|
32
|
+
gl.uniform1f(this.uniforms.hoveredPointSize, this._lastHoveredPointSize);
|
|
33
|
+
gl.uniform1i(this.uniforms.hovered_vertexID, this._lastHoveredID);
|
|
34
|
+
gl.useProgram(currentProgram);
|
|
35
|
+
}
|
|
36
|
+
// eslint-disable-next-line
|
|
37
|
+
{ // assign attribute locations
|
|
38
|
+
gl.bindAttribLocation(program, 0, "pos3D");
|
|
39
|
+
gl.bindAttribLocation(program, 1, "pos2D");
|
|
40
|
+
gl.bindAttribLocation(program, 2, "rgba");
|
|
41
|
+
}
|
|
42
|
+
// eslint-disable-next-line
|
|
43
|
+
{ // arrange camera uniform block
|
|
44
|
+
this.cameraBlockBingingPoint = 0;
|
|
45
|
+
this.cameraBlockTotem = totems_1.CameraUniformBlockTotemCache.get(globe);
|
|
46
|
+
var cameraBlockIndex = gl.getUniformBlockIndex(program, "CameraUniformBlock");
|
|
47
|
+
gl.uniformBlockBinding(program, cameraBlockIndex, this.cameraBlockBingingPoint);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
PointOnGlobeProgram.prototype.createVAO = function (pos3DBuffer, pos2DBuffer, rgbaBuffer) {
|
|
51
|
+
var gl = this.gl;
|
|
52
|
+
var vao = gl.createVertexArray();
|
|
53
|
+
gl.bindVertexArray(vao);
|
|
54
|
+
// eslint-disable-next-line
|
|
55
|
+
{
|
|
56
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, pos3DBuffer);
|
|
57
|
+
gl.enableVertexAttribArray(0);
|
|
58
|
+
gl.vertexAttribPointer(0, 3, gl.FLOAT, false, 0, 0);
|
|
59
|
+
}
|
|
60
|
+
// eslint-disable-next-line
|
|
61
|
+
{
|
|
62
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, pos2DBuffer);
|
|
63
|
+
gl.enableVertexAttribArray(1);
|
|
64
|
+
gl.vertexAttribPointer(1, 2, gl.FLOAT, false, 0, 0);
|
|
65
|
+
}
|
|
66
|
+
// eslint-disable-next-line
|
|
67
|
+
{
|
|
68
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, rgbaBuffer);
|
|
69
|
+
gl.enableVertexAttribArray(2);
|
|
70
|
+
gl.vertexAttribPointer(2, 4, gl.FLOAT, false, 0, 0);
|
|
71
|
+
}
|
|
72
|
+
gl.bindVertexArray(null);
|
|
73
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, null);
|
|
74
|
+
return vao;
|
|
75
|
+
};
|
|
76
|
+
PointOnGlobeProgram.prototype.draw = function (vao, length, _a) {
|
|
77
|
+
var _b = _a === void 0 ? {} : _a, _c = _b.opacity, opacity = _c === void 0 ? 1.0 : _c, _d = _b.hoveredID, hoveredID = _d === void 0 ? -1 : _d, _e = _b.pointSize, pointSize = _e === void 0 ? 2.0 : _e, _f = _b.hoveredPointSize, hoveredPointSize = _f === void 0 ? 4.0 : _f, _g = _b.elementBuffer, elementBuffer = _g === void 0 ? null : _g;
|
|
78
|
+
if (length === 0 || opacity === 0)
|
|
79
|
+
return;
|
|
80
|
+
var _h = this, gl = _h.gl, program = _h.program, uniforms = _h.uniforms;
|
|
81
|
+
gl.useProgram(program);
|
|
82
|
+
if (this._lastOpacity !== opacity) {
|
|
83
|
+
gl.uniform1f(uniforms.opacity, opacity);
|
|
84
|
+
this._lastOpacity = opacity;
|
|
85
|
+
}
|
|
86
|
+
if (this._lastPointSize !== pointSize) {
|
|
87
|
+
gl.uniform1f(uniforms.pointSize, pointSize);
|
|
88
|
+
this._lastPointSize = pointSize;
|
|
89
|
+
}
|
|
90
|
+
if (this._lastHoveredPointSize !== hoveredPointSize) {
|
|
91
|
+
gl.uniform1f(uniforms.hoveredPointSize, hoveredPointSize);
|
|
92
|
+
this._lastHoveredPointSize = hoveredPointSize;
|
|
93
|
+
}
|
|
94
|
+
if (this._lastHoveredID !== hoveredID) {
|
|
95
|
+
gl.uniform1i(uniforms.hovered_vertexID, hoveredID);
|
|
96
|
+
this._lastHoveredID = hoveredID;
|
|
97
|
+
}
|
|
98
|
+
gl.bindVertexArray(vao);
|
|
99
|
+
this.cameraBlockTotem.bind(this.cameraBlockBingingPoint);
|
|
100
|
+
if (elementBuffer) {
|
|
101
|
+
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, elementBuffer);
|
|
102
|
+
gl.drawElements(gl.POINTS, length, gl.UNSIGNED_INT, 0);
|
|
103
|
+
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, null);
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
gl.drawArrays(gl.POINTS, 0, length);
|
|
107
|
+
}
|
|
108
|
+
this.cameraBlockTotem.unbind(this.cameraBlockBingingPoint);
|
|
109
|
+
gl.bindVertexArray(null);
|
|
110
|
+
};
|
|
111
|
+
PointOnGlobeProgram.prototype.free = function () {
|
|
112
|
+
if (this._isFreed)
|
|
113
|
+
return;
|
|
114
|
+
var _a = this, gl = _a.gl, globe = _a.globe;
|
|
115
|
+
totems_1.CameraUniformBlockTotemCache.release(globe);
|
|
116
|
+
gl.deleteProgram(this.program);
|
|
117
|
+
this._isFreed = true;
|
|
118
|
+
};
|
|
119
|
+
return PointOnGlobeProgram;
|
|
120
|
+
}());
|
|
121
|
+
var PointOnGlobeProgramCache = Object.freeze({
|
|
122
|
+
get: function (globe) { return programcache_1.noRegisterGlobeProgramCache.getProgram(globe, PointOnGlobeProgram); },
|
|
123
|
+
release: function (globe) { return programcache_1.noRegisterGlobeProgramCache.releaseProgram(globe, PointOnGlobeProgram); }
|
|
124
|
+
});
|
|
125
|
+
exports.PointOnGlobeProgramCache = PointOnGlobeProgramCache;
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @module programcache
|
|
4
|
+
* @description This module provides a cache for programs. It is used to avoid creating the same program multiple times.
|
|
5
|
+
*
|
|
6
|
+
* # globeProgramCache
|
|
7
|
+
* Creates and registers programs to the globe. To the 1st object in the draw order.
|
|
8
|
+
* The programs are generally sets sets a global uniform block.
|
|
9
|
+
*
|
|
10
|
+
* # glProgramCache
|
|
11
|
+
* Creates and manages programs that are not related to the globe but to the WebGL context.
|
|
12
|
+
* The programs created by are lightweight absraction of program logic with `constructer(gl)`.
|
|
13
|
+
* These programs are generally wrapped by another class with more functionality.
|
|
14
|
+
*/
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.noRegisterGlobeProgramCache = exports.glProgramCache = exports.globeProgramCache = void 0;
|
|
17
|
+
var globeProgramCache = (function () {
|
|
18
|
+
var cache = new Map();
|
|
19
|
+
function getProgram(globe, ProgramClass) {
|
|
20
|
+
if (!cache.has(globe)) {
|
|
21
|
+
cache.set(globe, new Map());
|
|
22
|
+
}
|
|
23
|
+
;
|
|
24
|
+
if (!cache.get(globe).has(ProgramClass)) {
|
|
25
|
+
cache.get(globe).set(ProgramClass, {
|
|
26
|
+
program: new ProgramClass(),
|
|
27
|
+
count: 1
|
|
28
|
+
});
|
|
29
|
+
var firstObject = globe.DrawOrder.GetObj(0);
|
|
30
|
+
globe.api_RegisterPlugin(cache.get(globe).get(ProgramClass).program, firstObject);
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
cache.get(globe).get(ProgramClass).count++;
|
|
34
|
+
}
|
|
35
|
+
return cache.get(globe).get(ProgramClass).program;
|
|
36
|
+
}
|
|
37
|
+
;
|
|
38
|
+
function releaseProgram(globe, ProgramClass) {
|
|
39
|
+
if (cache.has(globe) && cache.get(globe).has(ProgramClass)) {
|
|
40
|
+
if (cache.get(globe).get(ProgramClass).count === 0) {
|
|
41
|
+
throw new Error("The program counter is already 0, cannot release program");
|
|
42
|
+
}
|
|
43
|
+
cache.get(globe).get(ProgramClass).count--;
|
|
44
|
+
if (cache.get(globe).get(ProgramClass).count === 0) {
|
|
45
|
+
globe.api_UnRegisterPlugin(cache.get(globe).get(ProgramClass).program.id); // it calls program.free()
|
|
46
|
+
cache.get(globe).delete(ProgramClass);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
;
|
|
51
|
+
return Object.freeze({
|
|
52
|
+
getProgram: getProgram,
|
|
53
|
+
releaseProgram: releaseProgram
|
|
54
|
+
});
|
|
55
|
+
})();
|
|
56
|
+
exports.globeProgramCache = globeProgramCache;
|
|
57
|
+
var glProgramCache = (function () {
|
|
58
|
+
var cache = new Map();
|
|
59
|
+
function getProgram(gl, ProgramClass) {
|
|
60
|
+
if (!cache.has(gl)) {
|
|
61
|
+
cache.set(gl, new Map());
|
|
62
|
+
}
|
|
63
|
+
;
|
|
64
|
+
if (!cache.get(gl).has(ProgramClass)) {
|
|
65
|
+
cache.get(gl).set(ProgramClass, {
|
|
66
|
+
program: new ProgramClass(gl),
|
|
67
|
+
count: 1
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
cache.get(gl).get(ProgramClass).count++;
|
|
72
|
+
}
|
|
73
|
+
return cache.get(gl).get(ProgramClass).program;
|
|
74
|
+
}
|
|
75
|
+
;
|
|
76
|
+
function releaseProgram(gl, ProgramClass) {
|
|
77
|
+
if (cache.has(gl) && cache.get(gl).has(ProgramClass)) {
|
|
78
|
+
if (cache.get(gl).get(ProgramClass).count === 0) {
|
|
79
|
+
throw new Error("The program counter is already 0, cannot release program");
|
|
80
|
+
}
|
|
81
|
+
cache.get(gl).get(ProgramClass).count--;
|
|
82
|
+
if (cache.get(gl).get(ProgramClass).count === 0) {
|
|
83
|
+
cache.get(gl).get(ProgramClass).program.free();
|
|
84
|
+
cache.get(gl).delete(ProgramClass);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
;
|
|
89
|
+
return Object.freeze({
|
|
90
|
+
getProgram: getProgram,
|
|
91
|
+
releaseProgram: releaseProgram
|
|
92
|
+
});
|
|
93
|
+
})();
|
|
94
|
+
exports.glProgramCache = glProgramCache;
|
|
95
|
+
var noRegisterGlobeProgramCache = (function () {
|
|
96
|
+
var cache = new Map();
|
|
97
|
+
function getProgram(globe, ProgramClass) {
|
|
98
|
+
if (!cache.has(globe)) {
|
|
99
|
+
cache.set(globe, new Map());
|
|
100
|
+
}
|
|
101
|
+
;
|
|
102
|
+
if (!cache.get(globe).has(ProgramClass)) {
|
|
103
|
+
cache.get(globe).set(ProgramClass, {
|
|
104
|
+
program: new ProgramClass(globe),
|
|
105
|
+
count: 1
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
cache.get(globe).get(ProgramClass).count++;
|
|
110
|
+
}
|
|
111
|
+
return cache.get(globe).get(ProgramClass).program;
|
|
112
|
+
}
|
|
113
|
+
;
|
|
114
|
+
function releaseProgram(globe, ProgramClass) {
|
|
115
|
+
if (cache.has(globe) && cache.get(globe).has(ProgramClass)) {
|
|
116
|
+
if (cache.get(globe).get(ProgramClass).count === 0) {
|
|
117
|
+
throw new Error("The program counter is already 0, cannot release program");
|
|
118
|
+
}
|
|
119
|
+
cache.get(globe).get(ProgramClass).count--;
|
|
120
|
+
if (cache.get(globe).get(ProgramClass).count === 0) {
|
|
121
|
+
cache.get(globe).get(ProgramClass).program.free();
|
|
122
|
+
cache.get(globe).delete(ProgramClass);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return Object.freeze({
|
|
127
|
+
getProgram: getProgram,
|
|
128
|
+
releaseProgram: releaseProgram
|
|
129
|
+
});
|
|
130
|
+
})();
|
|
131
|
+
exports.noRegisterGlobeProgramCache = noRegisterGlobeProgramCache;
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.programCache = void 0;
|
|
37
|
+
var util_1 = require("../../../util");
|
|
38
|
+
var camerauniformblock_1 = __importStar(require("../../totems/camerauniformblock"));
|
|
39
|
+
var programcache_1 = require("../../programcache");
|
|
40
|
+
var CIRCLE_EDGE_COUNT = 360;
|
|
41
|
+
var vertexShader = "#version 300 es " +
|
|
42
|
+
util_1.shaderfunctions.PI +
|
|
43
|
+
util_1.shaderfunctions.R +
|
|
44
|
+
util_1.shaderfunctions.POLE +
|
|
45
|
+
camerauniformblock_1.CameraUniformBlockString +
|
|
46
|
+
util_1.shaderfunctions.mercatorXYToGLPosition +
|
|
47
|
+
util_1.shaderfunctions.longLatRadToMercator +
|
|
48
|
+
util_1.shaderfunctions.longLatRadToCartesian3D +
|
|
49
|
+
util_1.shaderfunctions.circleLimpFromLongLatRadCenterCartesian3D +
|
|
50
|
+
util_1.shaderfunctions.circleLimpFromLongLatRadCenterMercatorCompass +
|
|
51
|
+
util_1.shaderfunctions.circleLimpFromLongLatRadCenterMercatorRealDistance + "\n\nuniform int compass;\nuniform float circle_edge_count;\n\nuniform float opacity;\n\nin vec2 center;\nin float radius;\nin vec4 color;\nin float flag;\nout vec4 v_color;\nout vec2 v_limp;\n\nvoid main() {\n if( flag == 1.0 || radius == 0.0) return; // flag 1.0 is hide\n v_color = vec4(color.rgb, color.a * opacity);\n if ( gl_VertexID == 270 ) v_color.rgb += 0.2;\n float angle = 3.1415926535897932384626433832795 * 2.0 * (float(gl_VertexID) / circle_edge_count);\n if ( is3D ){\n gl_Position = projection * view * vec4(\n circleLimpFromLongLatRadCenterCartesian3D( center, radius, angle) - translate, 1.0);\n v_limp = vec2(0.0, 0.0);\n return;\n }\n vec2 limp;\n if ( compass == 1 ){\n limp = circleLimpFromLongLatRadCenterMercatorCompass(center, radius, angle);\n } else {\n limp = circleLimpFromLongLatRadCenterMercatorRealDistance(center, radius, angle);\n } \n v_limp = limp;\n gl_Position = mercatorXYToGLPosition(limp);\n \n}";
|
|
52
|
+
var fragmentShader = "#version 300 es\nprecision highp float;" +
|
|
53
|
+
util_1.shaderfunctions.POLE + "\n\nin vec4 v_color;\nin vec2 v_limp;\nout vec4 outColor;\nvoid main() {\n if ( v_limp.x < -POLE || v_limp.x > POLE || v_limp.y < -POLE || v_limp.y > POLE ){ discard; }\n outColor = v_color;\n}";
|
|
54
|
+
var Logic = /** @class */ (function () {
|
|
55
|
+
function Logic(globe) {
|
|
56
|
+
this.globe = globe;
|
|
57
|
+
this.gl = globe.gl;
|
|
58
|
+
this.program = (0, util_1.createProgram)(this.gl, vertexShader, fragmentShader);
|
|
59
|
+
{ // bind positions so bufferManager can use them
|
|
60
|
+
this.gl.bindAttribLocation(this.program, 0, "center");
|
|
61
|
+
this.gl.bindAttribLocation(this.program, 1, "radius");
|
|
62
|
+
this.gl.bindAttribLocation(this.program, 2, "color");
|
|
63
|
+
this.gl.bindAttribLocation(this.program, 3, "flag");
|
|
64
|
+
}
|
|
65
|
+
this.cameraBlockBindingPoint = 0;
|
|
66
|
+
this.cameraBlockTotem = programcache_1.globeProgramCache.getProgram(globe, camerauniformblock_1.default);
|
|
67
|
+
var cameraBlockIndex = this.gl.getUniformBlockIndex(this.program, "CameraUniformBlock");
|
|
68
|
+
this.gl.uniformBlockBinding(this.program, cameraBlockIndex, this.cameraBlockBindingPoint);
|
|
69
|
+
this._opacityLocation = this.gl.getUniformLocation(this.program, "opacity");
|
|
70
|
+
this._compassLocation = this.gl.getUniformLocation(this.program, "compass");
|
|
71
|
+
this._circleEdgeCountLocation = this.gl.getUniformLocation(this.program, "circle_edge_count");
|
|
72
|
+
this._circleEdgeCount = CIRCLE_EDGE_COUNT;
|
|
73
|
+
this._compassmode = 1;
|
|
74
|
+
this._opacity = 1.0;
|
|
75
|
+
{
|
|
76
|
+
var currentProgram = this.gl.getParameter(this.gl.CURRENT_PROGRAM);
|
|
77
|
+
this.gl.useProgram(this.program);
|
|
78
|
+
this.gl.uniform1i(this._compassLocation, 1);
|
|
79
|
+
this.gl.uniform1f(this._circleEdgeCountLocation, CIRCLE_EDGE_COUNT);
|
|
80
|
+
this.gl.uniform1f(this._opacityLocation, 1.0);
|
|
81
|
+
this.gl.useProgram(currentProgram);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
Logic.prototype.draw = function (attrBufferManager, compass, circleEdgeCount, opacity) {
|
|
85
|
+
var _a = this, gl = _a.gl, program = _a.program, cameraBlockTotem = _a.cameraBlockTotem, cameraBlockBindingPoint = _a.cameraBlockBindingPoint;
|
|
86
|
+
gl.useProgram(program);
|
|
87
|
+
cameraBlockTotem.bind(cameraBlockBindingPoint);
|
|
88
|
+
attrBufferManager.bindCircleVAO();
|
|
89
|
+
if (compass !== this._compassmode) {
|
|
90
|
+
gl.uniform1i(this._compassLocation, compass);
|
|
91
|
+
this._compassmode = compass;
|
|
92
|
+
}
|
|
93
|
+
if (opacity !== this._opacity) {
|
|
94
|
+
gl.uniform1f(this._opacityLocation, opacity);
|
|
95
|
+
this._opacity = opacity;
|
|
96
|
+
}
|
|
97
|
+
if (circleEdgeCount !== this._circleEdgeCount) {
|
|
98
|
+
gl.uniform1f(this._circleEdgeCountLocation, circleEdgeCount);
|
|
99
|
+
this._circleEdgeCount = circleEdgeCount;
|
|
100
|
+
}
|
|
101
|
+
gl.drawArraysInstanced(gl.LINE_LOOP, 0, circleEdgeCount, attrBufferManager.length);
|
|
102
|
+
gl.bindVertexArray(null);
|
|
103
|
+
cameraBlockTotem.unbind(cameraBlockBindingPoint);
|
|
104
|
+
};
|
|
105
|
+
Logic.prototype.free = function () {
|
|
106
|
+
this.gl.deleteProgram(this.program);
|
|
107
|
+
programcache_1.globeProgramCache.releaseProgram(this.globe, camerauniformblock_1.default);
|
|
108
|
+
};
|
|
109
|
+
return Logic;
|
|
110
|
+
}());
|
|
111
|
+
exports.programCache = Object.freeze({
|
|
112
|
+
getProgram: function (globe) { return programcache_1.noRegisterGlobeProgramCache.getProgram(globe, Logic); },
|
|
113
|
+
releaseProgram: function (globe) { programcache_1.noRegisterGlobeProgramCache.releaseProgram(globe, Logic); }
|
|
114
|
+
});
|