@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,32 +1,134 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
var geometrytransformations_1 = require("../../../util/shaderfunctions/geometrytransformations");
|
|
1
|
+
import { createProgram, shaderfunctions } from "../../../util";
|
|
2
|
+
import { CameraUniformBlockTotem, CameraUniformBlockString } from "../../totems";
|
|
3
|
+
import { noRegisterGlobeProgramCache, globeProgramCache } from "../../programcache";
|
|
4
|
+
import { POLE, PI, longLatRadToMercator, mercatorXYToGLPosition, longLatRadToCartesian3D, circleLimpFromLongLatRadCenterCartesian3D_accurate, circleLimpFromLongLatRadCenterMercatorCompass_accurate,
|
|
5
|
+
//circleLimpFromLongLatRadCenterMercatorRealDistanceNew_accurate,
|
|
6
|
+
cartesian3DToGLPosition } from "../../../util/shaderfunctions/geometrytransformations";
|
|
8
7
|
/**
|
|
9
8
|
* TODO:
|
|
10
9
|
* 1. Triangle face looks at screen. if rotation angle is positive the last vertex must be the faintest.
|
|
11
10
|
*
|
|
12
11
|
*/
|
|
13
|
-
|
|
12
|
+
const drawModeMap = Object.freeze({
|
|
14
13
|
LINE_STRIP: 0,
|
|
15
14
|
TRIANGLE_FAN: 1,
|
|
16
15
|
});
|
|
17
16
|
//${ circleLimpFromLongLatRadCenterMercatorRealDistanceNew_accurate }
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
17
|
+
const vertexShaderSource = `#version 300 es
|
|
18
|
+
|
|
19
|
+
${CameraUniformBlockString}
|
|
20
|
+
${PI}
|
|
21
|
+
${longLatRadToMercator}
|
|
22
|
+
${mercatorXYToGLPosition}
|
|
23
|
+
${longLatRadToCartesian3D}
|
|
24
|
+
${circleLimpFromLongLatRadCenterCartesian3D_accurate}
|
|
25
|
+
${circleLimpFromLongLatRadCenterMercatorCompass_accurate}
|
|
26
|
+
${cartesian3DToGLPosition}
|
|
27
|
+
|
|
28
|
+
uniform float edge_count;
|
|
29
|
+
uniform int draw_mode; // %2 => 0: LINE_STRIP, 1: TRIANGLE_FAN
|
|
30
|
+
uniform float plugin_alpha_multiplier;
|
|
31
|
+
//, lat, startAngle, tailAngle, ...rgba, radius, rgbaMode
|
|
32
|
+
// in vec2 center; // long, lat in radian
|
|
33
|
+
in vec2 center2d;
|
|
34
|
+
in vec3 center3d;
|
|
35
|
+
in float start_angle2d;
|
|
36
|
+
in float tail_angle2d;
|
|
37
|
+
|
|
38
|
+
in float start_angle3d;
|
|
39
|
+
in float tail_angle3d;
|
|
40
|
+
|
|
41
|
+
in vec4 color;
|
|
42
|
+
in float radius; // in meter
|
|
43
|
+
in float color_mode; // 0.0: constant, 1.0: fading, 2.0: hide
|
|
44
|
+
// flat out int vid;
|
|
45
|
+
// flat out float v_phase;
|
|
46
|
+
out vec2 v_pos;
|
|
47
|
+
out vec4 v_color;
|
|
48
|
+
// flat out float v_angle;
|
|
49
|
+
|
|
50
|
+
void main() {
|
|
51
|
+
// vid = gl_VertexID;
|
|
52
|
+
if (color_mode == 2.0 || radius == 0.0) { return; }
|
|
53
|
+
float start_angle, tail_angle;
|
|
54
|
+
if (is3D) {
|
|
55
|
+
start_angle = start_angle3d;
|
|
56
|
+
tail_angle = tail_angle3d;
|
|
57
|
+
} else {
|
|
58
|
+
start_angle = start_angle2d;
|
|
59
|
+
tail_angle = tail_angle2d;
|
|
60
|
+
}
|
|
61
|
+
float color_mode_ = color_mode;
|
|
62
|
+
if ( draw_mode == 0 && color_mode == 1.0) {color_mode_ = 0.0;}
|
|
63
|
+
float vertexID = float(gl_VertexID);
|
|
64
|
+
float radius_ = radius;
|
|
65
|
+
float alpha = plugin_alpha_multiplier;
|
|
66
|
+
if (draw_mode == 1) { // TRIANGLE_FAN
|
|
67
|
+
if (gl_VertexID == 0) {
|
|
68
|
+
radius_ = 0.0;
|
|
69
|
+
if ( color_mode == 1.0 ) { alpha = 0.0; }
|
|
70
|
+
}
|
|
71
|
+
vertexID -= 1.0;
|
|
72
|
+
}
|
|
73
|
+
float phase = ( vertexID / (edge_count - 1.0) );
|
|
74
|
+
// v_angle = tail_angle;
|
|
75
|
+
|
|
76
|
+
if ( color_mode_ == 1.0 ) {
|
|
77
|
+
if ( tail_angle < 0.0 ) {
|
|
78
|
+
v_color = vec4( color.rgb , color.a * ( 1.0 - phase ) * alpha );
|
|
79
|
+
} else {
|
|
80
|
+
v_color = vec4( color.rgb , color.a * phase * alpha );
|
|
81
|
+
}
|
|
82
|
+
} else {
|
|
83
|
+
v_color = vec4( color.rgb , color.a * alpha );
|
|
84
|
+
}
|
|
85
|
+
if ( color_mode == 0.0 && draw_mode == 1 ) {
|
|
86
|
+
v_color.a /= 2.0;
|
|
87
|
+
}
|
|
88
|
+
float angle;
|
|
89
|
+
if ( tail_angle > 0.0 ) {
|
|
90
|
+
angle = tail_angle * (-phase + 1.0) + start_angle;
|
|
91
|
+
} else {
|
|
92
|
+
angle = tail_angle * phase + start_angle;
|
|
93
|
+
}
|
|
94
|
+
if (is3D) {
|
|
95
|
+
vec3 pos = circleLimpFromLongLatRadCenterCartesian3D_accurate(center3d, radius_, angle);
|
|
96
|
+
v_pos = vec2(0.0, 0.0);
|
|
97
|
+
gl_Position = cartesian3DToGLPosition(pos);
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
vec2 pos2 = circleLimpFromLongLatRadCenterMercatorCompass_accurate(center2d, radius_, angle);
|
|
101
|
+
v_pos = pos2;
|
|
102
|
+
gl_Position = mercatorXYToGLPosition(pos2);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
gl_PointSize = 10.0;
|
|
106
|
+
}`;
|
|
107
|
+
const fragmentShaderSource = `#version 300 es` + POLE + PI + `
|
|
108
|
+
precision highp float;
|
|
109
|
+
// flat in int vid;
|
|
110
|
+
in vec4 v_color;
|
|
111
|
+
in vec2 v_pos;
|
|
112
|
+
// flat in float v_phase;
|
|
113
|
+
// in float v_angle;
|
|
114
|
+
out vec4 outColor;
|
|
115
|
+
void main() {
|
|
116
|
+
// if( vid % 2 == 0 ) { discard; }
|
|
117
|
+
// if ( mod(v_angle, PI / 36.0 ) < (PI / 72.0)) { discard; }
|
|
118
|
+
// if ( mod(v_angle * v_phase, PI / 90.0 ) < (PI / 180.0)) { discard; }
|
|
119
|
+
if ( v_pos.x < -POLE || v_pos.x > POLE || v_pos.y < -POLE || v_pos.y > POLE ) { discard; }
|
|
120
|
+
outColor = v_color;
|
|
121
|
+
}`;
|
|
122
|
+
export const ITEM_SIZE = 10;
|
|
123
|
+
export class Logic {
|
|
124
|
+
constructor(globe) {
|
|
23
125
|
this.globe = globe;
|
|
24
126
|
this.gl = globe.gl;
|
|
25
127
|
this._lastMode = 0;
|
|
26
128
|
this._lastEdgeCount = 64;
|
|
27
129
|
this._lastAlphaMultiplier = 1.0;
|
|
28
|
-
this.program =
|
|
29
|
-
|
|
130
|
+
this.program = createProgram(this.gl, vertexShaderSource, fragmentShaderSource);
|
|
131
|
+
const { gl, program } = this;
|
|
30
132
|
{ // set attributes locations
|
|
31
133
|
gl.bindAttribLocation(program, 0, 'center2d');
|
|
32
134
|
gl.bindAttribLocation(program, 1, 'center3d');
|
|
@@ -44,20 +146,20 @@ var Logic = /** @class */ (function () {
|
|
|
44
146
|
this._edgeCountLocation = gl.getUniformLocation(program, 'edge_count');
|
|
45
147
|
this._draw_modeLocation = gl.getUniformLocation(program, 'draw_mode');
|
|
46
148
|
this._plugin_alpha_multiplierLocation = gl.getUniformLocation(program, 'plugin_alpha_multiplier');
|
|
47
|
-
|
|
149
|
+
const currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);
|
|
48
150
|
gl.useProgram(program);
|
|
49
151
|
gl.uniform1i(this._draw_modeLocation, this._lastMode);
|
|
50
152
|
gl.uniform1f(this._edgeCountLocation, this._lastEdgeCount);
|
|
51
153
|
gl.uniform1f(this._plugin_alpha_multiplierLocation, 1.0);
|
|
52
154
|
this.cameraBlockBindingPoint = 0;
|
|
53
|
-
this.cameraBlockTotem =
|
|
54
|
-
|
|
155
|
+
this.cameraBlockTotem = globeProgramCache.getProgram(globe, CameraUniformBlockTotem);
|
|
156
|
+
const cameraBlockIndex = gl.getUniformBlockIndex(program, "CameraUniformBlock");
|
|
55
157
|
gl.uniformBlockBinding(program, cameraBlockIndex, this.cameraBlockBindingPoint);
|
|
56
158
|
gl.useProgram(currentProgram);
|
|
57
159
|
}
|
|
58
160
|
}
|
|
59
|
-
|
|
60
|
-
|
|
161
|
+
draw(length, vao, edgeCount, alphaMultiplier, drawMode) {
|
|
162
|
+
const { gl, program, cameraBlockTotem, cameraBlockBindingPoint } = this;
|
|
61
163
|
// gl.disable(gl.DEPTH_TEST);
|
|
62
164
|
gl.useProgram(program);
|
|
63
165
|
if (drawMode !== this._lastMode) {
|
|
@@ -72,19 +174,19 @@ var Logic = /** @class */ (function () {
|
|
|
72
174
|
gl.uniform1f(this._plugin_alpha_multiplierLocation, alphaMultiplier);
|
|
73
175
|
this._lastAlphaMultiplier = alphaMultiplier;
|
|
74
176
|
}
|
|
75
|
-
|
|
177
|
+
const overdraw = drawModeMap[drawMode];
|
|
76
178
|
cameraBlockTotem.bind(cameraBlockBindingPoint);
|
|
77
179
|
gl.bindVertexArray(vao);
|
|
78
180
|
gl.drawArraysInstanced(gl[drawMode], 0, edgeCount + overdraw, length);
|
|
79
181
|
cameraBlockTotem.unbind(cameraBlockBindingPoint);
|
|
80
182
|
gl.bindVertexArray(null);
|
|
81
183
|
// gl.enable(gl.DEPTH_TEST);
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
|
|
184
|
+
}
|
|
185
|
+
free() {
|
|
186
|
+
noRegisterGlobeProgramCache.releaseProgram(this.globe, CameraUniformBlockTotem);
|
|
85
187
|
this.gl.deleteProgram(this.program);
|
|
86
188
|
this.program = null;
|
|
87
|
-
}
|
|
189
|
+
}
|
|
88
190
|
/**
|
|
89
191
|
* in vec2 center; // long, lat in radian
|
|
90
192
|
in float start_angle; // the start of partial circle from bearing point
|
|
@@ -93,68 +195,68 @@ var Logic = /** @class */ (function () {
|
|
|
93
195
|
in float radius; // in meter
|
|
94
196
|
in float color_mode; // 0.0: constant, 1.0: fading, 2.0: hide
|
|
95
197
|
*/
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
198
|
+
createVAO(center2dObj, center3dObj, startAngle2DObj, tailAngle2DObj, startAngle3DObj, tailAngle3DObj, colorObj, radiusObj, colorModeObj) {
|
|
199
|
+
const { gl } = this;
|
|
200
|
+
const vao = gl.createVertexArray();
|
|
99
201
|
gl.bindVertexArray(vao);
|
|
100
202
|
{
|
|
101
|
-
|
|
203
|
+
const { buffer, stride, offset } = center2dObj;
|
|
102
204
|
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
|
|
103
205
|
gl.enableVertexAttribArray(0);
|
|
104
206
|
gl.vertexAttribPointer(0, 2, gl.FLOAT, false, stride, offset);
|
|
105
207
|
gl.vertexAttribDivisor(0, 1);
|
|
106
208
|
}
|
|
107
209
|
{
|
|
108
|
-
|
|
210
|
+
const { buffer, stride, offset } = center3dObj;
|
|
109
211
|
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
|
|
110
212
|
gl.enableVertexAttribArray(1);
|
|
111
213
|
gl.vertexAttribPointer(1, 3, gl.FLOAT, false, stride, offset);
|
|
112
214
|
gl.vertexAttribDivisor(1, 1);
|
|
113
215
|
}
|
|
114
216
|
{
|
|
115
|
-
|
|
217
|
+
const { buffer, stride, offset } = startAngle2DObj;
|
|
116
218
|
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
|
|
117
219
|
gl.enableVertexAttribArray(2);
|
|
118
220
|
gl.vertexAttribPointer(2, 1, gl.FLOAT, false, stride, offset);
|
|
119
221
|
gl.vertexAttribDivisor(2, 1);
|
|
120
222
|
}
|
|
121
223
|
{
|
|
122
|
-
|
|
224
|
+
const { buffer, stride, offset } = tailAngle2DObj;
|
|
123
225
|
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
|
|
124
226
|
gl.enableVertexAttribArray(3);
|
|
125
227
|
gl.vertexAttribPointer(3, 1, gl.FLOAT, false, stride, offset);
|
|
126
228
|
gl.vertexAttribDivisor(3, 1);
|
|
127
229
|
}
|
|
128
230
|
{
|
|
129
|
-
|
|
231
|
+
const { buffer, stride, offset } = startAngle3DObj;
|
|
130
232
|
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
|
|
131
233
|
gl.enableVertexAttribArray(4);
|
|
132
234
|
gl.vertexAttribPointer(4, 1, gl.FLOAT, false, stride, offset);
|
|
133
235
|
gl.vertexAttribDivisor(4, 1);
|
|
134
236
|
}
|
|
135
237
|
{
|
|
136
|
-
|
|
238
|
+
const { buffer, stride, offset } = tailAngle3DObj;
|
|
137
239
|
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
|
|
138
240
|
gl.enableVertexAttribArray(5);
|
|
139
241
|
gl.vertexAttribPointer(5, 1, gl.FLOAT, false, stride, offset);
|
|
140
242
|
gl.vertexAttribDivisor(5, 1);
|
|
141
243
|
}
|
|
142
244
|
{
|
|
143
|
-
|
|
245
|
+
const { buffer, stride, offset } = colorObj;
|
|
144
246
|
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
|
|
145
247
|
gl.enableVertexAttribArray(6);
|
|
146
248
|
gl.vertexAttribPointer(6, 4, gl.FLOAT, false, stride, offset);
|
|
147
249
|
gl.vertexAttribDivisor(6, 1);
|
|
148
250
|
}
|
|
149
251
|
{
|
|
150
|
-
|
|
252
|
+
const { buffer, stride, offset } = radiusObj;
|
|
151
253
|
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
|
|
152
254
|
gl.enableVertexAttribArray(7);
|
|
153
255
|
gl.vertexAttribPointer(7, 1, gl.FLOAT, false, stride, offset);
|
|
154
256
|
gl.vertexAttribDivisor(7, 1);
|
|
155
257
|
}
|
|
156
258
|
{
|
|
157
|
-
|
|
259
|
+
const { buffer, stride, offset } = colorModeObj;
|
|
158
260
|
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
|
|
159
261
|
gl.enableVertexAttribArray(8);
|
|
160
262
|
gl.vertexAttribPointer(8, 1, gl.FLOAT, false, stride, offset);
|
|
@@ -163,11 +265,9 @@ var Logic = /** @class */ (function () {
|
|
|
163
265
|
gl.bindVertexArray(null);
|
|
164
266
|
gl.bindBuffer(gl.ARRAY_BUFFER, null);
|
|
165
267
|
return vao;
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
get: function (globe) { return programcache_1.noRegisterGlobeProgramCache.getProgram(globe, Logic); },
|
|
172
|
-
release: function (globe) { return programcache_1.noRegisterGlobeProgramCache.releaseProgram(globe, Logic); }
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
export const PieceOfPieProgramCache = Object.freeze({
|
|
271
|
+
get: (globe) => noRegisterGlobeProgramCache.getProgram(globe, Logic),
|
|
272
|
+
release: (globe) => noRegisterGlobeProgramCache.releaseProgram(globe, Logic)
|
|
173
273
|
});
|
|
@@ -1,16 +1,27 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.CameraUniformBlockTotemCache = exports.CameraUniformBlockString = void 0;
|
|
4
|
-
var programcache_1 = require("../programcache");
|
|
1
|
+
import { globeProgramCache } from "../programcache";
|
|
5
2
|
// import { getFrustumPlanes } from "../../Math/frustum/from-projection-matrix";
|
|
6
3
|
// import { getFrustum } from "../../Math/frustum/from-globeinfo"
|
|
7
4
|
// import { Plane } from "../../Math/";
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
5
|
+
export const CameraUniformBlockString = `
|
|
6
|
+
layout(std140) uniform CameraUniformBlock {
|
|
7
|
+
mat4 view; // 64 bytes 0
|
|
8
|
+
mat4 projection; // 64 bytes 64
|
|
9
|
+
vec3 translate; // 12 bytes 128
|
|
10
|
+
bool is3D; // 4 bytes 140
|
|
11
|
+
vec2 mapWH; // 8 bytes 144
|
|
12
|
+
vec2 screenWH; // 8 bytes 152
|
|
13
|
+
float z_level; // 4 bytes 160 | 164
|
|
14
|
+
float world_distance; // 4 bytes 164
|
|
15
|
+
float world_tilt; // 4 bytes 168
|
|
16
|
+
float world_north_angle; // 4 bytes 172
|
|
17
|
+
vec2 world_center_radian; // 8 bytes 176 | 184
|
|
18
|
+
}; // 14 lines
|
|
19
|
+
`;
|
|
20
|
+
const Radian = Math.PI / 180.0;
|
|
21
|
+
export default class CameraUniformBlockTotem {
|
|
22
|
+
constructor() {
|
|
12
23
|
this.id = "CameraUniformBlockTotem";
|
|
13
|
-
this.description =
|
|
24
|
+
this.description = `Sets a uniform block and provides buffer for it. The following is the glsl uniform block:` + CameraUniformBlockString;
|
|
14
25
|
this.gl = null;
|
|
15
26
|
this.globe = null;
|
|
16
27
|
this.ubo = null;
|
|
@@ -27,7 +38,7 @@ var CameraUniformBlockTotem = /** @class */ (function () {
|
|
|
27
38
|
isMoved: false,
|
|
28
39
|
};
|
|
29
40
|
}
|
|
30
|
-
|
|
41
|
+
init(globe, gl) {
|
|
31
42
|
this.gl = gl;
|
|
32
43
|
this.globe = globe;
|
|
33
44
|
this.ubo = this._createUBO();
|
|
@@ -35,31 +46,31 @@ var CameraUniformBlockTotem = /** @class */ (function () {
|
|
|
35
46
|
this.mapWHFloat32 = new Float32Array(2);
|
|
36
47
|
this.setGeometry();
|
|
37
48
|
this.resize();
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
49
|
+
}
|
|
50
|
+
_createUBO() {
|
|
51
|
+
const { gl } = this;
|
|
52
|
+
const ubo = gl.createBuffer();
|
|
42
53
|
gl.bindBuffer(gl.UNIFORM_BUFFER, ubo);
|
|
43
54
|
// 184 bytes in reality. Overflow on linux for some reason. So, 200 bytes.
|
|
44
55
|
gl.bufferData(gl.UNIFORM_BUFFER, 200, gl.STREAM_DRAW);
|
|
45
56
|
gl.bindBufferBase(gl.UNIFORM_BUFFER, 0, ubo);
|
|
46
57
|
gl.bindBuffer(gl.UNIFORM_BUFFER, null);
|
|
47
58
|
return ubo;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
|
|
59
|
+
}
|
|
60
|
+
resize() {
|
|
61
|
+
const { gl, globe, ubo } = this;
|
|
51
62
|
gl.bindBuffer(gl.UNIFORM_BUFFER, ubo);
|
|
52
63
|
gl.bufferSubData(gl.UNIFORM_BUFFER, 152, new Float32Array([globe.api_ScrW(), globe.api_ScrH()]));
|
|
53
64
|
gl.bindBuffer(gl.UNIFORM_BUFFER, null);
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
65
|
+
}
|
|
66
|
+
setGeometry() {
|
|
67
|
+
const { gl, globe, ubo } = this;
|
|
68
|
+
const is3D = globe.api_GetCurrentGeometry() === 0;
|
|
58
69
|
gl.bindBuffer(gl.UNIFORM_BUFFER, ubo);
|
|
59
70
|
gl.bufferSubData(gl.UNIFORM_BUFFER, 140, new Float32Array([is3D]));
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
|
|
71
|
+
}
|
|
72
|
+
draw3D(projection, modelView, translate) {
|
|
73
|
+
const { gl, traslateFloat32, ubo, mapWHFloat32, globe } = this;
|
|
63
74
|
gl.bindBuffer(gl.UNIFORM_BUFFER, ubo);
|
|
64
75
|
{ // view, projection, translat
|
|
65
76
|
gl.bufferSubData(gl.UNIFORM_BUFFER, 0, modelView);
|
|
@@ -73,7 +84,7 @@ var CameraUniformBlockTotem = /** @class */ (function () {
|
|
|
73
84
|
}
|
|
74
85
|
{ // mapWH
|
|
75
86
|
if (globe.api_GetCurrentGeometry() === 1) {
|
|
76
|
-
|
|
87
|
+
const { width, height } = globe.api_GetCurrentWorldWH();
|
|
77
88
|
mapWHFloat32.set([width, height]);
|
|
78
89
|
gl.bufferSubData(gl.UNIFORM_BUFFER, 144, mapWHFloat32);
|
|
79
90
|
}
|
|
@@ -83,7 +94,7 @@ var CameraUniformBlockTotem = /** @class */ (function () {
|
|
|
83
94
|
// float world_tilt; // 4 bytes 168
|
|
84
95
|
// float world_north_angle; // 4 bytes 172
|
|
85
96
|
// vec2 world_center_radian; // 8 bytes 180
|
|
86
|
-
|
|
97
|
+
const { CenterLong, CenterLat, Distance, Tilt, NorthAng } = globe.api_GetCurrentLookInfo();
|
|
87
98
|
gl.bufferSubData(gl.UNIFORM_BUFFER, 164, new Float32Array([
|
|
88
99
|
Distance, Radian * Tilt, Radian * NorthAng, Radian * CenterLong, Radian * CenterLat
|
|
89
100
|
]));
|
|
@@ -91,40 +102,40 @@ var CameraUniformBlockTotem = /** @class */ (function () {
|
|
|
91
102
|
// this._frustumPlanes = getFrustumPlanes(projection, translate);
|
|
92
103
|
gl.bindBuffer(gl.UNIFORM_BUFFER, null);
|
|
93
104
|
{ // isMoved
|
|
94
|
-
|
|
105
|
+
const currentLOD = globe.api_GetCurrentLODWithDecimal();
|
|
95
106
|
this._isMovedParams.isMoved = this._isMovedParams.lastLod !== currentLOD || globe.api_IsScreenMoving();
|
|
96
107
|
this._isMovedParams.lastLod = currentLOD;
|
|
97
108
|
}
|
|
98
109
|
// getFrustum(globe, 50, this._frustumPlanes);
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
110
|
+
}
|
|
111
|
+
assignBindingPoint(program, bindingPoint) {
|
|
112
|
+
const { gl } = this;
|
|
113
|
+
const cameraBlockIndex = gl.getUniformBlockIndex(program, "CameraUniformBlock");
|
|
103
114
|
gl.uniformBlockBinding(program, cameraBlockIndex, bindingPoint);
|
|
104
|
-
}
|
|
105
|
-
|
|
115
|
+
}
|
|
116
|
+
getUBO() {
|
|
106
117
|
return this.ubo;
|
|
107
|
-
}
|
|
108
|
-
|
|
118
|
+
}
|
|
119
|
+
getFrustumPlanes() {
|
|
109
120
|
return this._frustumPlanes;
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
|
|
121
|
+
}
|
|
122
|
+
bind(bindingPoint) {
|
|
123
|
+
const { gl, ubo } = this;
|
|
113
124
|
gl.bindBufferBase(gl.UNIFORM_BUFFER, bindingPoint, ubo);
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
|
|
125
|
+
}
|
|
126
|
+
unbind(bindingPoint) {
|
|
127
|
+
const { gl } = this;
|
|
117
128
|
gl.bindBufferBase(gl.UNIFORM_BUFFER, bindingPoint, null);
|
|
118
|
-
}
|
|
119
|
-
|
|
129
|
+
}
|
|
130
|
+
isMoved() {
|
|
120
131
|
return this._isMovedParams.isMoved;
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
|
|
132
|
+
}
|
|
133
|
+
free() {
|
|
134
|
+
const { gl, ubo } = this;
|
|
124
135
|
gl.deleteBuffer(ubo);
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
|
|
136
|
+
}
|
|
137
|
+
readBuffer() {
|
|
138
|
+
const result = new Float32Array(41);
|
|
128
139
|
this.gl.bindBuffer(this.gl.UNIFORM_BUFFER, this.ubo);
|
|
129
140
|
this.gl.getBufferSubData(this.gl.UNIFORM_BUFFER, 0, result);
|
|
130
141
|
this.gl.bindBuffer(this.gl.UNIFORM_BUFFER, null);
|
|
@@ -137,11 +148,9 @@ var CameraUniformBlockTotem = /** @class */ (function () {
|
|
|
137
148
|
screenWH: result.slice(38, 40),
|
|
138
149
|
z_level: result[40]
|
|
139
150
|
};
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
get: function (globe) { return programcache_1.globeProgramCache.getProgram(globe, CameraUniformBlockTotem); },
|
|
146
|
-
release: function (globe) { return programcache_1.globeProgramCache.releaseProgram(globe, CameraUniformBlockTotem); }
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
export const CameraUniformBlockTotemCache = Object.freeze({
|
|
154
|
+
get: (globe) => { return globeProgramCache.getProgram(globe, CameraUniformBlockTotem); },
|
|
155
|
+
release: (globe) => { return globeProgramCache.releaseProgram(globe, CameraUniformBlockTotem); }
|
|
147
156
|
});
|
|
@@ -1,17 +1,23 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
import { globeProgramCache } from "../programcache";
|
|
2
|
+
export const WebglobeInfoUniformBlockString = `
|
|
3
|
+
layout(std140) uniform WebglobeInfo {
|
|
4
|
+
vec2 canvas_resolution;
|
|
5
|
+
vec2 mouse_radian_long_lat;
|
|
6
|
+
vec2 mouse_pixel_xy;
|
|
7
|
+
float north_angle;
|
|
8
|
+
float world_tilt;
|
|
9
|
+
float earth_distance;
|
|
10
|
+
};
|
|
11
|
+
`;
|
|
12
|
+
export default class CameraUniformBlockTotem {
|
|
13
|
+
constructor() {
|
|
8
14
|
this.id = "CameraUniformBlockTotem";
|
|
9
|
-
this.description =
|
|
15
|
+
this.description = `Sets a uniform block and provides buffer for it. The following is the glsl uniform block:` + CameraUniformBlockString;
|
|
10
16
|
this.gl = null;
|
|
11
17
|
this.globe = null;
|
|
12
18
|
this.ubo = null;
|
|
13
19
|
}
|
|
14
|
-
|
|
20
|
+
init(globe, gl) {
|
|
15
21
|
this.gl = gl;
|
|
16
22
|
this.globe = globe;
|
|
17
23
|
this.ubo = this._createUBO();
|
|
@@ -19,30 +25,30 @@ var CameraUniformBlockTotem = /** @class */ (function () {
|
|
|
19
25
|
this.mapWHFloat32 = new Float32Array(2);
|
|
20
26
|
this.setGeometry();
|
|
21
27
|
this.resize();
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
28
|
+
}
|
|
29
|
+
_createUBO() {
|
|
30
|
+
const { gl } = this;
|
|
31
|
+
const ubo = gl.createBuffer();
|
|
26
32
|
gl.bindBuffer(gl.UNIFORM_BUFFER, ubo);
|
|
27
33
|
gl.bufferData(gl.UNIFORM_BUFFER, 164, gl.STREAM_DRAW);
|
|
28
34
|
gl.bindBufferBase(gl.UNIFORM_BUFFER, 0, ubo);
|
|
29
35
|
gl.bindBuffer(gl.UNIFORM_BUFFER, null);
|
|
30
36
|
return ubo;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
|
|
37
|
+
}
|
|
38
|
+
resize() {
|
|
39
|
+
const { gl, globe, ubo } = this;
|
|
34
40
|
gl.bindBuffer(gl.UNIFORM_BUFFER, ubo);
|
|
35
41
|
gl.bufferSubData(gl.UNIFORM_BUFFER, 152, new Float32Array([globe.api_ScrW(), globe.api_ScrH()]));
|
|
36
42
|
gl.bindBuffer(gl.UNIFORM_BUFFER, null);
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
43
|
+
}
|
|
44
|
+
setGeometry() {
|
|
45
|
+
const { gl, globe, ubo } = this;
|
|
46
|
+
const is3D = globe.api_GetCurrentGeometry() === 0;
|
|
41
47
|
gl.bindBuffer(gl.UNIFORM_BUFFER, ubo);
|
|
42
48
|
gl.bufferSubData(gl.UNIFORM_BUFFER, 140, new Float32Array([is3D]));
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
|
|
49
|
+
}
|
|
50
|
+
draw3D(projection, modelView, translate) {
|
|
51
|
+
const { gl, traslateFloat32, ubo, mapWHFloat32, globe } = this;
|
|
46
52
|
gl.bindBuffer(gl.UNIFORM_BUFFER, ubo);
|
|
47
53
|
{ // view, projection, translate
|
|
48
54
|
gl.bufferSubData(gl.UNIFORM_BUFFER, 0, modelView);
|
|
@@ -56,30 +62,30 @@ var CameraUniformBlockTotem = /** @class */ (function () {
|
|
|
56
62
|
}
|
|
57
63
|
{ // mapWH
|
|
58
64
|
if (globe.api_GetCurrentGeometry() === 1) {
|
|
59
|
-
|
|
65
|
+
const { width, height } = globe.api_GetCurrentWorldWH();
|
|
60
66
|
mapWHFloat32.set([width, height]);
|
|
61
67
|
gl.bufferSubData(gl.UNIFORM_BUFFER, 144, mapWHFloat32);
|
|
62
68
|
}
|
|
63
69
|
}
|
|
64
70
|
gl.bindBuffer(gl.UNIFORM_BUFFER, null);
|
|
65
|
-
}
|
|
66
|
-
|
|
71
|
+
}
|
|
72
|
+
getUBO() {
|
|
67
73
|
return this.ubo;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
|
|
74
|
+
}
|
|
75
|
+
bind(bindingPoint) {
|
|
76
|
+
const { gl, ubo } = this;
|
|
71
77
|
gl.bindBufferBase(gl.UNIFORM_BUFFER, bindingPoint, ubo);
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
|
|
78
|
+
}
|
|
79
|
+
unbind(bindingPoint) {
|
|
80
|
+
const { gl } = this;
|
|
75
81
|
gl.bindBufferBase(gl.UNIFORM_BUFFER, bindingPoint, null);
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
|
|
82
|
+
}
|
|
83
|
+
free() {
|
|
84
|
+
const { gl, ubo } = this;
|
|
79
85
|
gl.deleteBuffer(ubo);
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
|
|
86
|
+
}
|
|
87
|
+
readBuffer() {
|
|
88
|
+
const result = new Float32Array(41);
|
|
83
89
|
this.gl.bindBuffer(this.gl.UNIFORM_BUFFER, this.ubo);
|
|
84
90
|
this.gl.getBufferSubData(this.gl.UNIFORM_BUFFER, 0, result);
|
|
85
91
|
this.gl.bindBuffer(this.gl.UNIFORM_BUFFER, null);
|
|
@@ -92,11 +98,9 @@ var CameraUniformBlockTotem = /** @class */ (function () {
|
|
|
92
98
|
screenWH: result.slice(38, 40),
|
|
93
99
|
z_level: result[40]
|
|
94
100
|
};
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
get: function (globe) { return programcache_1.globeProgramCache.getProgram(globe, CameraUniformBlockTotem); },
|
|
101
|
-
release: function (globe) { return programcache_1.globeProgramCache.releaseProgram(globe, CameraUniformBlockTotem); }
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
export const CameraUniformBlockTotemCache = Object.freeze({
|
|
104
|
+
get: (globe) => { return globeProgramCache.getProgram(globe, CameraUniformBlockTotem); },
|
|
105
|
+
release: (globe) => { return globeProgramCache.releaseProgram(globe, CameraUniformBlockTotem); }
|
|
102
106
|
});
|