@pirireis/webglobeplugins 0.16.7 → 0.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. package/Math/angle-calculation.js +1 -0
  2. package/Math/contour/quadtreecontours.js +300 -0
  3. package/Math/finite-line-2d.js +58 -0
  4. package/Math/tessellation/hybrid-triangle-tessellation-meta.js +123 -0
  5. package/Math/tessellation/tile-merger.js +56 -0
  6. package/Math/tessellation/triangle-tessellation-meta.js +178 -32
  7. package/Math/tessellation/triangle-tessellation.js +5 -1
  8. package/compass-rose/compass-text-writer.js +39 -33
  9. package/constants.js +3 -0
  10. package/{util/heatwavedatamanager → heatwave}/datamanager.js +1 -1
  11. package/heatwave/{plugins/heatwaveglobeshell.js → heatwave.js} +8 -6
  12. package/heatwave/index.js +5 -3
  13. package/heatwave/{isobar/plugin.js → isobar.js} +6 -5
  14. package/{util/heatwavedatamanager → heatwave}/texture-point-sampler.js +24 -3
  15. package/package.json +4 -2
  16. package/programs/arrowfield/{object.js → arrow-field.js} +1 -1
  17. package/programs/arrowfield/logic.js +1 -1
  18. package/programs/data2legend/density-to-legend.js +24 -29
  19. package/programs/data2legend/point-to-density-texture.js +14 -17
  20. package/programs/float2legendwithratio/logic.js +2 -2
  21. package/programs/float2legendwithratio/object.js +1 -1
  22. package/programs/helpers/{blender/program.js → blender.js} +1 -1
  23. package/programs/helpers/{fadeaway/logic.js → fadeaway.js} +11 -2
  24. package/programs/index.js +20 -9
  25. package/programs/line-on-globe/circle-accurate-3d.js +12 -14
  26. package/programs/line-on-globe/circle-accurate-flat.js +0 -1
  27. package/programs/line-on-globe/degree-padding-around-circle-3d.js +13 -15
  28. package/programs/line-on-globe/lines-color-instanced-flat.js +15 -18
  29. package/programs/line-on-globe/naive-accurate-flexible.js +0 -1
  30. package/programs/picking/pickable-polygon-renderer.js +1 -1
  31. package/programs/picking/pickable-renderer.js +2 -2
  32. package/programs/point-on-globe/element-globe-surface-glow.js +2 -2
  33. package/programs/point-on-globe/element-point-glow.js +1 -1
  34. package/programs/point-on-globe/square-pixel-point.js +1 -1
  35. package/programs/polygon-on-globe/texture-dem-triangle-test-plugin-triangle.js +32 -6
  36. package/programs/polygon-on-globe/texture-dem-triangles.js +32 -5
  37. package/programs/rings/partial-ring/piece-of-pie.js +26 -29
  38. package/programs/totems/camerauniformblock.js +31 -42
  39. package/programs/two-d/pixel-padding-for-compass.js +14 -24
  40. package/programs/vectorfields/logics/drawrectangleparticles.js +1 -2
  41. package/programs/vectorfields/logics/pixelbased.js +1 -2
  42. package/programs/vectorfields/pingpongbuffermanager.js +1 -1
  43. package/range-tools-on-terrain/bearing-line/adapters.js +1 -1
  44. package/range-tools-on-terrain/circle-line-chain/adapters.js +0 -5
  45. package/range-tools-on-terrain/circle-line-chain/plugin.js +1 -1
  46. package/range-tools-on-terrain/range-ring/plugin.js +4 -6
  47. package/semiplugins/lightweight/line-plugin.js +0 -1
  48. package/semiplugins/shape-on-terrain/arc-plugin.js +0 -2
  49. package/semiplugins/shape-on-terrain/circle-plugin.js +2 -2
  50. package/semiplugins/shape-on-terrain/padding-1-degree.js +1 -1
  51. package/semiplugins/shell/bbox-renderer/index.js +2 -0
  52. package/{programs/globeshell/wiggle → semiplugins/shell/bbox-renderer}/logic.js +101 -102
  53. package/{programs/globeshell/wiggle → semiplugins/shell/bbox-renderer}/object.js +6 -7
  54. package/semiplugins/utility/container-plugin.js +94 -0
  55. package/semiplugins/utility/object-pass-container-plugin.js +80 -0
  56. package/{point-heat-map → tracks/point-heat-map}/adaptors/timetracksplugin-format-to-this.js +1 -1
  57. package/{point-heat-map → tracks/point-heat-map}/plugin-webworker.js +3 -3
  58. package/{point-heat-map → tracks/point-heat-map}/point-to-heat-map-flow.js +11 -14
  59. package/{point-tracks → tracks/point-tracks}/plugin.js +5 -5
  60. package/{timetracks → tracks/timetracks}/adaptors-line-strip.js +1 -1
  61. package/{timetracks → tracks/timetracks}/program-line-strip.js +49 -49
  62. package/{timetracks → tracks/timetracks}/programpoint-line-strip.js +16 -13
  63. package/types.js +6 -0
  64. package/util/account/bufferoffsetmanager.js +1 -1
  65. package/util/account/single-attribute-buffer-management/buffer-orchestrator.js +9 -95
  66. package/util/gl-util/uniform-block/manager.js +0 -1
  67. package/util/gl-util/uniform-block/types.js +0 -7
  68. package/util/index.js +10 -13
  69. package/util/picking/fence.js +16 -18
  70. package/util/picking/picker-displayer.js +4 -6
  71. package/util/programs/{shapesonglobe.js → draw-from-pixel-coords.js} +4 -7
  72. package/util/programs/draw-texture-on-canvas.js +1 -1
  73. package/util/programs/texturetoglobe.js +3 -3
  74. package/util/webglobe/rasteroverlay.js +1 -0
  75. package/vectorfield/arrowfield/index.js +3 -0
  76. package/{arrowfield → vectorfield/arrowfield}/plugin.js +2 -2
  77. package/{waveparticles → vectorfield/waveparticles}/plugin.js +12 -12
  78. package/{wind → vectorfield/wind}/index.js +1 -1
  79. package/{wind → vectorfield/wind}/plugin.js +32 -32
  80. package/write-text/attached-text-writer.js +9 -1
  81. package/write-text/context-text3.js +0 -1
  82. package/write-text/objectarraylabels/index.js +2 -0
  83. package/Math/tessellation/tessellation-algorithm.js +0 -67
  84. package/arrowfield/index.js +0 -3
  85. package/bearing-line/index.js +0 -2
  86. package/bearing-line/plugin.js +0 -444
  87. package/circle-line-chain/chain-list-map.js +0 -201
  88. package/circle-line-chain/plugin.js +0 -411
  89. package/circle-line-chain/util.js +0 -1
  90. package/compassrose/compassrose.js +0 -293
  91. package/compassrose/index.js +0 -2
  92. package/index.js +0 -12
  93. package/partialrings/buffer-manager.js +0 -75
  94. package/partialrings/index.js +0 -2
  95. package/partialrings/plugin.js +0 -128
  96. package/partialrings/program.js +0 -279
  97. package/programs/arrowfield/index.js +0 -2
  98. package/programs/globe-util/is-globe-moved.js +0 -19
  99. package/programs/globeshell/index.js +0 -2
  100. package/programs/globeshell/wiggle/index.js +0 -2
  101. package/programs/helpers/blender/index.js +0 -1
  102. package/programs/helpers/fadeaway/index.js +0 -2
  103. package/programs/helpers/fadeaway/object.js +0 -14
  104. package/programs/helpers/index.js +0 -2
  105. package/programs/rings/distancering/circleflatprogram.js +0 -116
  106. package/programs/rings/distancering/circlepaddingfreeangleprogram.js +0 -326
  107. package/programs/rings/distancering/circlepaddysharedbuffer.js +0 -368
  108. package/programs/rings/distancering/index.js +0 -6
  109. package/programs/rings/distancering/paddyflatprogram.js +0 -127
  110. package/programs/rings/distancering/paddyflatprogram2d.js +0 -129
  111. package/programs/rings/distancering/paddyflatprogram3d.js +0 -128
  112. package/programs/two-d/pixel-circle.js +0 -1
  113. package/programs/vectorfields/index.js +0 -3
  114. package/rangerings/enum.js +0 -2
  115. package/rangerings/index.js +0 -5
  116. package/rangerings/plugin.js +0 -543
  117. package/rangerings/rangeringangletext.js +0 -326
  118. package/rangerings/ring-account.js +0 -112
  119. package/timetracks/index.js +0 -1
  120. package/util/build-strategy/general-strategy.js +0 -62
  121. package/util/gl-util/uniform-block/shader.js +0 -1
  122. package/util/heatwavedatamanager/index.js +0 -2
  123. package/util/heatwavedatamanager/pointcoordsmeta.js +0 -22
  124. package/util/jshelpers/data-filler.js +0 -17
  125. package/util/jshelpers/equality.js +0 -18
  126. package/util/jshelpers/index.js +0 -2
  127. package/util/jshelpers/timefilters.js +0 -30
  128. package/util/programs/index.js +0 -1
  129. package/util/surface-line-data/arc-bboxes.js +0 -25
  130. package/util/surface-line-data/arcs-to-cuts.js +0 -50
  131. package/util/surface-line-data/cut-arc.js +0 -1
  132. package/util/surface-line-data/flow.js +0 -28
  133. package/util/surface-line-data/rbush-manager.js +0 -1
  134. package/util/surface-line-data/types.js +0 -1
  135. package/util/surface-line-data/web-worker.js +0 -1
  136. package/write-text/context-text3old.js +0 -152
  137. package/write-text/index.js +0 -1
  138. package/write-text/writer-plugin.js +0 -8
  139. /package/{heatwave/isobar/quadtreecontours.js → Math/contour/quadtreecontours1.js} +0 -0
  140. /package/pin/{pin-object-array.js → pin-object-array1.js} +0 -0
  141. /package/pin/{pin-point-totem.js → pin-point-totem1.js} +0 -0
  142. /package/{circle-line-chain/init.js → programs/polygon-on-globe/partial-tesselation.js} +0 -0
  143. /package/{point-heat-map → tracks/point-heat-map}/index.js +0 -0
  144. /package/{point-tracks → tracks/point-tracks}/key-methods.js +0 -0
  145. /package/{timetracks → tracks/timetracks}/plugin-line-strip.js +0 -0
  146. /package/{arrowfield → vectorfield/arrowfield}/adaptor.js +0 -0
  147. /package/{waveparticles → vectorfield/waveparticles}/adaptor.js +0 -0
  148. /package/{waveparticles → vectorfield/waveparticles}/index.js +0 -0
  149. /package/{wind → vectorfield/wind}/imagetovectorfieldandmagnitude.js +0 -0
  150. /package/{wind → vectorfield/wind}/vectorfieldimage.js +0 -0
  151. /package/write-text/{context-text.js → context-textDELETE.js} +0 -0
  152. /package/{heatwave/isobar → write-text/objectarraylabels}/objectarraylabels.js +0 -0
@@ -2,7 +2,6 @@ import { globeProgramCache } from "../programcache";
2
2
  import { fromLongLatToUnitVector } from "../../Math/vec3";
3
3
  import { RADIAN } from "../../Math/methods";
4
4
  import { GlobeChangeObserver } from "./globe-changes";
5
- // import { approximatedZoomLevel } from "../../util/geometry/index";
6
5
  export const CameraUniformBlockString = `
7
6
  layout(std140) uniform CameraUniformBlock {
8
7
  mat4 view; // 64 bytes 0
@@ -93,49 +92,39 @@ export class CameraUniformBlockTotem {
93
92
  const globe = this.globe;
94
93
  this._globeChangeObserver?.checkChanges();
95
94
  gl.bindBuffer(gl.UNIFORM_BUFFER, ubo);
96
- {
97
- // view, projection, translate
98
- gl.bufferSubData(gl.UNIFORM_BUFFER, 0, modelView);
99
- gl.bufferSubData(gl.UNIFORM_BUFFER, 64, projection);
100
- traslateFloat32.set([translate.x, translate.y, translate.z], 0);
101
- gl.bufferSubData(gl.UNIFORM_BUFFER, 128, traslateFloat32);
102
- }
103
- {
104
- // zoom level
105
- gl.bufferSubData(gl.UNIFORM_BUFFER, 160, new Float32Array([globe.api_GetCurrentLODWithDecimal()]));
106
- }
107
- {
108
- // mapWH
109
- if (globe.api_GetCurrentGeometry() === 1) {
110
- const { width, height } = globe.api_GetCurrentWorldWH();
111
- mapWHFloat32.set([width, height]);
112
- gl.bufferSubData(gl.UNIFORM_BUFFER, 144, mapWHFloat32);
113
- }
114
- }
115
- {
116
- // float world_distance; // 4 bytes 164
117
- // float world_tilt; // 4 bytes 168
118
- // float world_north_angle; // 4 bytes 172
119
- // vec2 world_center_radian; // 8 bytes 180
120
- const { CenterLong, CenterLat, Distance, Tilt, NorthAng } = globe.api_GetCurrentLookInfo();
121
- gl.bufferSubData(gl.UNIFORM_BUFFER, 164, new Float32Array([
122
- Distance,
123
- Radian * Tilt,
124
- Radian * NorthAng,
125
- Radian * CenterLong,
126
- Radian * CenterLat,
127
- ]));
95
+ // view, projection, translate
96
+ gl.bufferSubData(gl.UNIFORM_BUFFER, 0, modelView);
97
+ gl.bufferSubData(gl.UNIFORM_BUFFER, 64, projection);
98
+ traslateFloat32.set([translate.x, translate.y, translate.z], 0);
99
+ gl.bufferSubData(gl.UNIFORM_BUFFER, 128, traslateFloat32);
100
+ // zoom level
101
+ gl.bufferSubData(gl.UNIFORM_BUFFER, 160, new Float32Array([globe.api_GetCurrentLODWithDecimal()]));
102
+ // mapWH
103
+ if (globe.api_GetCurrentGeometry() === 1) {
104
+ const { width, height } = globe.api_GetCurrentWorldWH();
105
+ mapWHFloat32.set([width, height]);
106
+ gl.bufferSubData(gl.UNIFORM_BUFFER, 144, mapWHFloat32);
128
107
  }
108
+ // float world_distance; // 4 bytes 164
109
+ // float world_tilt; // 4 bytes 168
110
+ // float world_north_angle; // 4 bytes 172
111
+ // vec2 world_center_radian; // 8 bytes 180
112
+ const { CenterLong, CenterLat, Distance, Tilt, NorthAng } = globe.api_GetCurrentLookInfo();
113
+ gl.bufferSubData(gl.UNIFORM_BUFFER, 164, new Float32Array([
114
+ Distance,
115
+ Radian * Tilt,
116
+ Radian * NorthAng,
117
+ Radian * CenterLong,
118
+ Radian * CenterLat,
119
+ ]));
129
120
  // this._frustumPlanes = getFrustumPlanes(projection, translate);
130
121
  gl.bindBuffer(gl.UNIFORM_BUFFER, null);
131
- {
132
- // isMoved
133
- const currentLOD = globe.api_GetCurrentLODWithDecimal();
134
- this._isMovedParams.isMoved =
135
- this._isMovedParams.lastLod !== currentLOD ||
136
- globe.api_IsScreenMoving();
137
- this._isMovedParams.lastLod = currentLOD;
138
- }
122
+ // isMoved
123
+ const currentLOD = globe.api_GetCurrentLODWithDecimal();
124
+ this._isMovedParams.isMoved =
125
+ this._isMovedParams.lastLod !== currentLOD ||
126
+ globe.api_IsScreenMoving();
127
+ this._isMovedParams.lastLod = currentLOD;
139
128
  this.__setCameraVectors();
140
129
  // this._calculateAproximatedLOD();
141
130
  }
@@ -146,7 +135,7 @@ export class CameraUniformBlockTotem {
146
135
  const globe = this.globe;
147
136
  const currentGeom = globe.api_GetCurrentGeometry();
148
137
  if (currentGeom === 0) {
149
- const { Fp, FUPos } = globe;
138
+ const { Fp } = globe; // FUPos
150
139
  const cameraVector = [Fp.x, Fp.y, Fp.z];
151
140
  const length = Math.sqrt(cameraVector.reduce((sum, val) => sum + val * val, 0));
152
141
  this._normalizedCameraVector[0] = cameraVector[0] / length;
@@ -1,4 +1,4 @@
1
- import { createProgram } from "../../util";
1
+ import { createProgram } from "../../util/webglobjectbuilders";
2
2
  import { CameraUniformBlockTotemCache, CameraUniformBlockString } from "../totems";
3
3
  import { noRegisterGlobeProgramCache } from "../programcache";
4
4
  const vertexCount = 720;
@@ -73,29 +73,19 @@ class Logic {
73
73
  this._lastOpacity = 1;
74
74
  this.program = createProgram(this.gl, vertexShaderSource, fragmentShaderSource);
75
75
  const { gl, program } = this;
76
- { // assign attribute locations
77
- // in vec2 screen_coordinate;
78
- // in float pixel_radius_small_ratio;
79
- // in float pixel_radius_big_ratio;
80
- // in vec4 rgba;
81
- gl.bindAttribLocation(program, 0, "screen_coordinate");
82
- gl.bindAttribLocation(program, 1, "pixel_radius_small_ratio");
83
- gl.bindAttribLocation(program, 2, "pixel_radius_big_ratio");
84
- gl.bindAttribLocation(program, 3, "rgba");
85
- }
86
- {
87
- this._opacityLocation = gl.getUniformLocation(program, "plugin_opacity");
88
- const currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);
89
- gl.useProgram(program);
90
- gl.uniform1f(this._opacityLocation, this._lastOpacity);
91
- gl.useProgram(currentProgram);
92
- }
93
- {
94
- this.cameraBlockBindingPoint = 0;
95
- const cameraBlockIndex = gl.getUniformBlockIndex(program, "CameraUniformBlock");
96
- this.cameraBlockTotem = CameraUniformBlockTotemCache.get(globe);
97
- gl.uniformBlockBinding(program, cameraBlockIndex, this.cameraBlockBindingPoint);
98
- }
76
+ gl.bindAttribLocation(program, 0, "screen_coordinate");
77
+ gl.bindAttribLocation(program, 1, "pixel_radius_small_ratio");
78
+ gl.bindAttribLocation(program, 2, "pixel_radius_big_ratio");
79
+ gl.bindAttribLocation(program, 3, "rgba");
80
+ this._opacityLocation = gl.getUniformLocation(program, "plugin_opacity");
81
+ const currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);
82
+ gl.useProgram(program);
83
+ gl.uniform1f(this._opacityLocation, this._lastOpacity);
84
+ gl.useProgram(currentProgram);
85
+ this.cameraBlockBindingPoint = 0;
86
+ const cameraBlockIndex = gl.getUniformBlockIndex(program, "CameraUniformBlock");
87
+ this.cameraBlockTotem = CameraUniformBlockTotemCache.get(globe);
88
+ gl.uniformBlockBinding(program, cameraBlockIndex, this.cameraBlockBindingPoint);
99
89
  }
100
90
  draw(vao, length, opacity) {
101
91
  const { globe, gl, program, cameraBlockTotem, cameraBlockBindingPoint, _opacityLocation } = this;
@@ -1,5 +1,4 @@
1
- import { createProgram } from "../../../util";
2
- import { UBO_BINDING_POINT, shaderUboSource } from "./ubo.js";
1
+ import { createProgram } from "../../../util/webglobjectbuilders";
3
2
  import { glProgramCache } from "../../programcache";
4
3
  import { SeaWaveUbo } from "./ubo-new";
5
4
  /**
@@ -1,5 +1,4 @@
1
- import { createShader } from "../../../util";
2
- import { UBO_SIZE, UBO_BINDING_POINT, shaderUboSource } from "./ubo.js";
1
+ import { createShader } from "../../../util/webglobjectbuilders";
3
2
  import { glProgramCache } from "../../programcache";
4
3
  import { SeaWaveUbo } from "./ubo-new";
5
4
  // program output is buffer
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * update coords and draw particles programs will use this class.
7
7
  */
8
- export default class {
8
+ export class PingPongBufferManager {
9
9
  constructor(gl, particleCount, inPositionLocation = 0) {
10
10
  this.gl = gl;
11
11
  this._inPositionLocation = inPositionLocation;
@@ -18,7 +18,7 @@ export const flatLinesInputAdapter = (bearingLine) => {
18
18
  };
19
19
  };
20
20
  export const flatLinesBearingInputAdapter = (bearingLine) => {
21
- const { long, lat, rgba, key, bearingLat = 0, bearingLong = 0, msl } = bearingLine;
21
+ const { long, lat, rgba, key, bearingLat = 0, bearingLong = 0 } = bearingLine;
22
22
  return {
23
23
  key: key,
24
24
  start: [long, lat],
@@ -1,9 +1,4 @@
1
1
  export const keyMethod = (chainKey, nodeKey) => `${chainKey}_${nodeKey}`;
2
- const distance = (node1, node2) => {
3
- const dx = node1.long - node2.long;
4
- const dy = node1.lat - node2.lat;
5
- return Math.sqrt(dx * dx + dy * dy);
6
- };
7
2
  export const circleDataAdaptor = (globe, chain) => {
8
3
  const circleInputs = [];
9
4
  const { chainKey, chainProperties, nodes } = chain;
@@ -102,7 +102,7 @@ export class CircleLineChainPlugin {
102
102
  return;
103
103
  const chainKeys = [];
104
104
  const chainsToClean = [];
105
- for (const { chainKey, chainProperties, nodes } of chains) {
105
+ for (const { chainKey } of chains) {
106
106
  if (this._chainListMap.hasChain(chainKey)) {
107
107
  chainsToClean.push(chainKey);
108
108
  }
@@ -1,7 +1,7 @@
1
1
  import { CircleOnTerrainPlugin } from "../../semiplugins/shape-on-terrain/circle-plugin";
2
2
  import { ArcOnTerrainPlugin } from "../../semiplugins/shape-on-terrain/arc-plugin";
3
3
  import { Padding1DegreePlugin } from '../../semiplugins/shape-on-terrain/padding-1-degree';
4
- import { padding1DegreeInputAdapter, rangeRingToArcInputAdapter, rangeRingToCircleInputAdapter, allCircleKeysAdapter, allArcKeysAdapter, createColorRatios } from "./adapters";
4
+ import { padding1DegreeInputAdapter, rangeRingToArcInputAdapter, rangeRingToCircleInputAdapter, allCircleKeysAdapter, allArcKeysAdapter, createColorRatios, } from "./adapters";
5
5
  import RangeRingAngleText from "./rangeringangletext";
6
6
  import { opacityCheck } from "../../util/check/typecheck";
7
7
  export var ENUM_HIDE;
@@ -311,7 +311,7 @@ export class RangeRingPlugin {
311
311
  if (this.draw1degrePadding) {
312
312
  this.paddingPlugin?.draw3D();
313
313
  }
314
- for (const [key, writer] of this.textWritersMap) {
314
+ for (const [, writer] of this.textWritersMap) {
315
315
  writer.draw();
316
316
  }
317
317
  }
@@ -338,7 +338,6 @@ export class RangeRingPlugin {
338
338
  console.warn("Globe or WebGL context is not initialized, cannot update text");
339
339
  return;
340
340
  }
341
- const globe = this.globe;
342
341
  const textWritersMap = this.textWritersMap;
343
342
  let keys = centerIDs ?? this._memory.keys();
344
343
  for (const centerID of keys) {
@@ -351,7 +350,7 @@ export class RangeRingPlugin {
351
350
  if (rangeRingData.textHide === ENUM_TEXT_HIDE.HIDE) {
352
351
  continue;
353
352
  }
354
- for (const [key, writer] of textWritersMap) {
353
+ for (const [, writer] of textWritersMap) {
355
354
  writer.insertText(rangeRingData);
356
355
  }
357
356
  }
@@ -365,13 +364,12 @@ export class RangeRingPlugin {
365
364
  console.warn("Globe or WebGL context is not initialized, cannot delete text");
366
365
  return;
367
366
  }
368
- const globe = this.globe;
369
367
  const textWritersMap = this.textWritersMap;
370
368
  for (const centerID of centerIDs) {
371
369
  const rangeRingData = this._memory.get(centerID);
372
370
  if (!rangeRingData)
373
371
  continue;
374
- for (const [key, writer] of textWritersMap) {
372
+ for (const [, writer] of textWritersMap) {
375
373
  writer.deleteText(rangeRingData);
376
374
  }
377
375
  }
@@ -164,7 +164,6 @@ export class LinePlugin {
164
164
  const globe = this.globe;
165
165
  const { flatViewOn, globeViewOn, variativeColorsOn, dashedLineOpacityVariativeOn, dashedLineRatioVariativeOn, bufferType = "DYNAMIC_DRAW" } = this._options;
166
166
  const m = this.bufferManagersMap;
167
- const initialCapacity = this._options.initialCapacity;
168
167
  if (flatViewOn) {
169
168
  m.set("start_position", {
170
169
  bufferManager: new BufferManager(globe.gl, 2, { bufferType, initialCapacity: this._options.initialCapacity }),
@@ -1,7 +1,6 @@
1
1
  // import { ArcOnTerrainPluginOptions } from "./type";
2
2
  import { LineStripProgramCache } from "../../programs/line-on-globe/linestrip/linestrip";
3
3
  import { createBufferAndReadInfo } from "../../util/gl-util/buffer/attribute-loader";
4
- // import { populateFloat32Array } from "../../util/jshelpers/data-filler";
5
4
  import { BufferManager, BufferOrchestrator } from "../../util/account/single-attribute-buffer-management/index";
6
5
  import { globe3Dcoordinates, globe2Dcoordinates, RADIAN } from "../../Math/methods";
7
6
  import { generateArcPoints, evenlySpacedArcPoints } from "../../Math/arc-cdf-points";
@@ -279,7 +278,6 @@ export class ArcOnTerrainPlugin {
279
278
  if (!this.bufferManagersMap?.has(bufferKey[0]))
280
279
  return;
281
280
  const longLat = [0, 0];
282
- const _attractionStrength = 0;
283
281
  const longLatArr = new Float32Array(2 * this._options.vertexCount);
284
282
  const data = [{
285
283
  key: "staticArcs",
@@ -297,7 +297,7 @@ export class CircleOnTerrainPlugin {
297
297
  return;
298
298
  const wrapper = [null];
299
299
  for (const key of subSetIDs) {
300
- const [circleInput, circleForAzimuthCalc] = this.circleMap.get(key) || [];
300
+ const [circleInput,] = this.circleMap.get(key) || [];
301
301
  if (circleInput) {
302
302
  wrapper[0] = circleInput;
303
303
  this.bufferOrchestrator.insertBulk(wrapper, this.bufferManagersMap, ["color"]);
@@ -393,7 +393,7 @@ export class CircleOnTerrainPlugin {
393
393
  console.warn(`CircleOnTerrainPlugin: Circle ${key} not found in circleMap.`);
394
394
  continue;
395
395
  }
396
- const [{ radius, center, height = null, color = null, msl = undefined }, _] = this.circleMap.get(key);
396
+ const [{ radius, center, height = null, color = null, msl = undefined },] = this.circleMap.get(key);
397
397
  const circlePointsLongLat = new Float64Array((CIRCLE_POINTS_COUNT) * 2);
398
398
  CircleCDF.globeFindPointByPolarHalfCircle(circlePointsLongLat, globe, center[0], center[1], radius, zeroRotation, templateAngles);
399
399
  datas.push({
@@ -513,7 +513,7 @@ function preAdapter(globe, paddingInput, paddingRatio, outerCoords) {
513
513
  paddingInput.radius * paddingRatio, // inner radius
514
514
  i);
515
515
  const longDifference = Math.abs(long - endLong);
516
- const latDifference = Math.abs(lat - endLat);
516
+ // const latDifference = Math.abs(lat - endLat);
517
517
  if (longDifference > 45) {
518
518
  outerCoords[i] = null;
519
519
  innerCoords[i] = null;
@@ -0,0 +1,2 @@
1
+ import { BBOXGlobeShell } from './object';
2
+ export { BBOXGlobeShell };
@@ -1,23 +1,11 @@
1
- import { createProgram } from '../../../util';
2
- export default class Logic {
3
- constructor() {
4
- this.id = "GlobeShellProgram";
5
- this.description = "This program implements flyweight pattern for globe." +
6
- "At globes draw3D call stack, this program should be prior to any program that uses it." +
7
- "draw3D method of this object only sets Projetion, ModelView and Translate matrices and if the mode is 2D mapWH .";
8
- }
9
- init(globe, gl) {
10
- this.gl = gl;
11
- this.globe = globe;
12
- this.programWrapper = this._createProgramWrapper();
13
- this._transformArray = new Float32Array(3);
14
- this.setGeometry();
15
- this.resize();
16
- this.updateTime(0);
17
- this.setMesh({ xRes: 64, yRes: 64, eastWestTied: false });
18
- }
19
- _createProgramWrapper() {
20
- const vertexShader = `#version 300 es
1
+ import { createProgram } from '../../../util/webglobjectbuilders';
2
+ import { noRegisterGlobeProgramCache } from '../../../programs/programcache';
3
+ import { CameraUniformBlockString, CameraUniformBlockTotemCache, CameraUniformBlockTotem } from "../../../programs/totems/camerauniformblock";
4
+ const UniformBlockBindingPoints = {
5
+ ShellBlock: 0,
6
+ CameraBlock: 1,
7
+ };
8
+ const vertexShader = `#version 300 es
21
9
  #define R 6378.137
22
10
  #define PI 3.1415926535897932384626433832795
23
11
  #define POLE 20037508.34
@@ -35,14 +23,7 @@ export default class Logic {
35
23
  float u_opacity;
36
24
  };
37
25
 
38
- uniform mat4 u_model_view_matrix;
39
- uniform mat4 u_projection_matrix;
40
- uniform vec3 u_translate;
41
-
42
- uniform vec2 u_mapWH;
43
- uniform vec2 u_scrWH;
44
-
45
- uniform bool u_is3D;
26
+ ${CameraUniformBlockString}
46
27
 
47
28
  out float v_opacity;
48
29
  out vec2 v_texture_coordinate;
@@ -72,8 +53,8 @@ export default class Logic {
72
53
  float mercX = x * POLE_BY_PI;
73
54
  float mercY = log(tan(HALF_PI - y / 2.0 )) * POLE_BY_PI;
74
55
 
75
- float normX = ( mercX - u_translate.x ) / u_mapWH.x;
76
- float normY = ( mercY - u_translate.y ) / u_mapWH.y;
56
+ float normX = ( mercX - translate.x ) / mapWH.x;
57
+ float normY = ( mercY - translate.y ) / mapWH.y;
77
58
  return vec2(normX, normY);
78
59
  }
79
60
 
@@ -89,16 +70,16 @@ export default class Logic {
89
70
 
90
71
  void main() {
91
72
  vec2 texCoord = f_texCoord();
92
- if (u_is3D){
73
+ if (is3D){
93
74
  vec3 unit_sphere_pos = f_onSphere(texCoord);
94
75
  float wiggle = f_wiggle(texCoord);
95
76
  vec3 position = f_position(unit_sphere_pos, wiggle);
96
- gl_Position = u_projection_matrix * u_model_view_matrix * vec4(position - u_translate, 1.0);
77
+ gl_Position = projection * view * vec4(position - translate, 1.0);
97
78
  } else {
98
79
  vec2 position = f_onFlat(texCoord);
99
- gl_Position = u_projection_matrix * vec4(
100
- position.x * u_scrWH.x,
101
- (1.0 - position.y) * u_scrWH.y,
80
+ gl_Position = projection * vec4(
81
+ position.x * screenWH.x,
82
+ (1.0 - position.y) * screenWH.y,
102
83
  0.0,
103
84
  1.0);
104
85
  }
@@ -106,7 +87,7 @@ export default class Logic {
106
87
  v_opacity = u_opacity;
107
88
  }
108
89
  `;
109
- const fragmentShader = `#version 300 es
90
+ const fragmentShader = `#version 300 es
110
91
  precision lowp float;
111
92
  in vec2 v_texture_coordinate;
112
93
  in float v_opacity;
@@ -118,22 +99,33 @@ export default class Logic {
118
99
  outColor = texture(u_texture, v_texture_coordinate);
119
100
  outColor.a *= v_opacity;
120
101
  }`;
102
+ class BBOXGlobeShellProgram {
103
+ constructor(globe) {
104
+ this.id = "BBOXGlobeShellProgram";
105
+ this.description = "This program implements flyweight pattern for globe." +
106
+ "At globes draw3D call stack, this program should be prior to any program that uses it." +
107
+ "draw3D method of this object only sets Projetion, ModelView and Translate matrices and if the mode is 2D mapWH .";
108
+ this.gl = globe.gl;
109
+ this.globe = globe;
110
+ this.programWrapper = this._createProgramWrapper();
111
+ this.cameraBlockTotem = CameraUniformBlockTotemCache.get(globe);
112
+ this.cameraBlockTotem.assignBindingPoint(this.programWrapper.program, UniformBlockBindingPoints.CameraBlock);
113
+ this._transformArray = new Float32Array(3);
114
+ // this.setGeometry();
115
+ // this.resize();
116
+ this.updateTime(0);
117
+ this.setMesh({ xRes: 64, yRes: 64, eastWestTied: false });
118
+ }
119
+ _createProgramWrapper() {
121
120
  const gl = this.gl;
122
121
  const program = createProgram(gl, vertexShader, fragmentShader);
123
122
  const currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);
124
123
  gl.useProgram(program);
125
- this.shellBlockBindingPoint = 0;
126
124
  const shellBlockIndex = gl.getUniformBlockIndex(program, "ShellBlock");
127
- gl.uniformBlockBinding(program, shellBlockIndex, this.shellBlockBindingPoint);
125
+ gl.uniformBlockBinding(program, shellBlockIndex, UniformBlockBindingPoints.ShellBlock);
128
126
  gl.useProgram(currentProgram);
129
127
  return {
130
128
  program,
131
- u_model_view_matrix: gl.getUniformLocation(program, "u_model_view_matrix"),
132
- u_projection_matrix: gl.getUniformLocation(program, "u_projection_matrix"),
133
- u_translate: gl.getUniformLocation(program, "u_translate"),
134
- u_is3D: gl.getUniformLocation(program, "u_is3D"),
135
- u_scrWH: gl.getUniformLocation(program, "u_scrWH"),
136
- u_mapWH: gl.getUniformLocation(program, "u_mapWH"),
137
129
  u_texture: gl.getUniformLocation(program, "u_texture"),
138
130
  u_mesh_resolution: gl.getUniformLocation(program, "u_mesh_resolution"),
139
131
  };
@@ -149,62 +141,58 @@ export default class Logic {
149
141
  gl.uniform1f(this.programWrapper.u_time, time);
150
142
  gl.useProgram(currentProgram);
151
143
  }
152
- setRotationAndTranslation(uProjectionMatrix, uModelViewMatrix, uTranslate, resetCurrentProgram = false) {
153
- const gl = this.gl;
154
- let currentProgram = null;
155
- if (resetCurrentProgram) {
156
- currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);
157
- }
158
- ;
159
- gl.useProgram(this.programWrapper.program);
160
- gl.uniformMatrix4fv(this.programWrapper.u_projection_matrix, false, uProjectionMatrix);
161
- gl.uniformMatrix4fv(this.programWrapper.u_model_view_matrix, false, uModelViewMatrix);
162
- this._transformArray.set([uTranslate.x, uTranslate.y, uTranslate.z], 0);
163
- gl.uniform3fv(this.programWrapper.u_translate, this._transformArray);
164
- if (resetCurrentProgram)
165
- gl.useProgram(currentProgram);
166
- }
167
- setGeometry() {
168
- const { globe, gl } = this;
169
- const { u_is3D, u_scrWH, program } = this.programWrapper;
170
- const currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);
171
- const is3D = this.globe.api_GetCurrentGeometry() === 0;
172
- gl.useProgram(program);
173
- if (globe.api_GetCurrentGeometry() === globe.api_GeometryTypes().FLAT) {
174
- gl.uniform2f(u_scrWH, globe.api_ScrW(), globe.api_ScrH());
175
- }
176
- gl.uniform1i(u_is3D, is3D);
177
- gl.useProgram(currentProgram);
178
- }
179
- resize() {
180
- const { gl, globe } = this;
181
- if (!globe)
182
- return;
183
- const { program, u_scrWH } = this.programWrapper;
184
- const currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);
185
- gl.useProgram(program);
186
- if (globe.api_GetCurrentGeometry() === globe.api_GeometryTypes().FLAT) {
187
- gl.uniform2f(u_scrWH, globe.api_ScrW(), globe.api_ScrH());
188
- }
189
- gl.useProgram(currentProgram);
190
- }
191
- // only sets data does not draw
192
- draw3D(uProjectionMatrix, uModelViewMatrix, uTranslate) {
193
- const { gl, globe } = this;
194
- const { program, u_model_view_matrix, u_projection_matrix, u_translate } = this.programWrapper;
195
- gl.disable(gl.DEPTH_TEST);
196
- gl.useProgram(program);
197
- gl.uniformMatrix4fv(u_projection_matrix, false, uProjectionMatrix);
198
- gl.uniformMatrix4fv(u_model_view_matrix, false, uModelViewMatrix);
199
- // this._transformArray.set([], 0);
200
- gl.uniform3f(u_translate, uTranslate.x, uTranslate.y, uTranslate.z);
201
- if (globe.api_GetCurrentGeometry() === 1) {
202
- const { width, height } = globe.api_GetCurrentWorldWH();
203
- gl.uniform2fv(this.programWrapper.u_mapWH, [width, height]);
204
- }
205
- gl.enable(gl.DEPTH_TEST);
206
- }
207
- draw(texture, shellBlockDataManager, drawLines = false) {
144
+ // setRotationAndTranslation(uProjectionMatrix, uModelViewMatrix, uTranslate, resetCurrentProgram = false) {
145
+ // const gl = this.gl;
146
+ // let currentProgram = null;
147
+ // if (resetCurrentProgram) { currentProgram = gl.getParameter(gl.CURRENT_PROGRAM) };
148
+ // gl.useProgram(this.programWrapper.program);
149
+ // gl.uniformMatrix4fv(this.programWrapper.projection, false, uProjectionMatrix);
150
+ // gl.uniformMatrix4fv(this.programWrapper.view, false, uModelViewMatrix);
151
+ // this._transformArray.set([uTranslate.x, uTranslate.y, uTranslate.z], 0);
152
+ // gl.uniform3fv(this.programWrapper.translate, this._transformArray);
153
+ // if (resetCurrentProgram) gl.useProgram(currentProgram);
154
+ // }
155
+ // setGeometry() {
156
+ // const { globe, gl } = this;
157
+ // const { is3D, screenWH, program } = this.programWrapper;
158
+ // const currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);
159
+ // const is3D = this.globe.api_GetCurrentGeometry() === 0;
160
+ // gl.useProgram(program);
161
+ // if (globe.api_GetCurrentGeometry() === globe.api_GeometryTypes().FLAT) {
162
+ // gl.uniform2f(screenWH, globe.api_ScrW(), globe.api_ScrH());
163
+ // }
164
+ // gl.uniform1i(is3D, is3D);
165
+ // gl.useProgram(currentProgram);
166
+ // }
167
+ // resize() {
168
+ // const { gl, globe } = this;
169
+ // if (!globe) return;
170
+ // const { program, screenWH } = this.programWrapper;
171
+ // const currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);
172
+ // gl.useProgram(program);
173
+ // if (globe.api_GetCurrentGeometry() === globe.api_GeometryTypes().FLAT) {
174
+ // gl.uniform2f(screenWH, globe.api_ScrW(), globe.api_ScrH());
175
+ // }
176
+ // gl.useProgram(currentProgram);
177
+ // }
178
+ // only sets
179
+ // data does not draw
180
+ // draw3D(csRenderPass) {
181
+ // const { gl, globe } = this;
182
+ // const { program } = this.programWrapper; //view, projection, translate
183
+ // gl.disable(gl.DEPTH_TEST);
184
+ // gl.useProgram(program);
185
+ // // gl.uniformMatrix4fv(projection, false, uProjectionMatrix);
186
+ // // gl.uniformMatrix4fv(view, false, uModelViewMatrix);
187
+ // // // this._transformArray.set([], 0);
188
+ // // gl.uniform3f(translate, uTranslate.x, uTranslate.y, uTranslate.z);
189
+ // if (globe.api_GetCurrentGeometry() === 1) {
190
+ // const { width, height } = globe.api_GetCurrentWorldWH();
191
+ // gl.uniform2fv(this.programWrapper.mapWH, [width, height]);
192
+ // }
193
+ // gl.enable(gl.DEPTH_TEST);
194
+ // }
195
+ draw(texture, shellBlockDataManager, drawLines = false, csRenderPass) {
208
196
  const { gl, programWrapper, _vao, _drawCount } = this;
209
197
  const { program, u_texture } = programWrapper;
210
198
  gl.useProgram(program);
@@ -213,15 +201,18 @@ export default class Logic {
213
201
  gl.bindTexture(gl.TEXTURE_2D, texture);
214
202
  gl.uniform1i(u_texture, 0);
215
203
  shellBlockDataManager.bind();
204
+ this.cameraBlockTotem.bind(UniformBlockBindingPoints.CameraBlock);
216
205
  if (drawLines)
217
206
  gl.drawElements(gl.LINES, _drawCount, gl.UNSIGNED_SHORT, 0);
218
207
  gl.clearColor(0, 0, 0, 0);
219
208
  gl.drawElements(gl.TRIANGLES, _drawCount, gl.UNSIGNED_SHORT, 0);
220
209
  shellBlockDataManager.unbind();
210
+ this.cameraBlockTotem.unbind(UniformBlockBindingPoints.CameraBlock);
221
211
  gl.bindVertexArray(null);
222
212
  }
223
213
  free() {
224
214
  const { gl, programWrapper, _vao, _indexBuffer } = this;
215
+ CameraUniformBlockTotemCache.release(this.globe);
225
216
  gl.deleteBuffer(_indexBuffer);
226
217
  gl.deleteVertexArray(_vao);
227
218
  gl.deleteProgram(programWrapper.program);
@@ -329,7 +320,7 @@ class ShellBlockManager {
329
320
  }
330
321
  bind() {
331
322
  const { gl, buffer } = this;
332
- gl.bindBufferBase(gl.UNIFORM_BUFFER, this.shellBlockBindingPoint, buffer);
323
+ gl.bindBufferBase(gl.UNIFORM_BUFFER, UniformBlockBindingPoints.ShellBlock, buffer);
333
324
  }
334
325
  free() {
335
326
  const { gl, buffer } = this;
@@ -337,6 +328,14 @@ class ShellBlockManager {
337
328
  }
338
329
  unbind() {
339
330
  const { gl } = this;
340
- gl.bindBufferBase(gl.UNIFORM_BUFFER, this.shellBlockBindingPoint, null);
331
+ gl.bindBufferBase(gl.UNIFORM_BUFFER, UniformBlockBindingPoints.ShellBlock, null);
341
332
  }
342
333
  }
334
+ export const BBOXGlobeShellProgramCache = Object.freeze({
335
+ get: function (globe) {
336
+ return noRegisterGlobeProgramCache.getProgram(globe, BBOXGlobeShellProgram);
337
+ },
338
+ release: function (globe) {
339
+ noRegisterGlobeProgramCache.releaseProgram(globe, BBOXGlobeShellProgram);
340
+ }
341
+ });
@@ -1,12 +1,11 @@
1
- import { globeProgramCache } from '../../programcache';
2
- import GlobeShellProgram from './logic';
3
- export default class GlobeShell {
1
+ import { BBOXGlobeShellProgramCache } from './logic';
2
+ export class BBOXGlobeShell {
4
3
  constructor(gl, globe, { minLon = -180, maxLon = 180, minLat = -90, maxLat = 90, height = 0, u_opacity = 1, wiggleInKM = 0, wiggleSpeed = 0,
5
4
  // eastWestTied, Not implemented yet
6
5
  } = {}) {
7
6
  this.gl = gl;
8
7
  this.globe = globe;
9
- this.program = globeProgramCache.getProgram(globe, GlobeShellProgram);
8
+ this.program = BBOXGlobeShellProgramCache.get(globe);
10
9
  this.shellBlockManager = this.program.getShellBlockBufferManager();
11
10
  this.update = this.shellBlockManager.update.bind(this.shellBlockManager);
12
11
  this.innerTime = 0;
@@ -51,8 +50,8 @@ export default class GlobeShell {
51
50
  *
52
51
  * @param {*} program modelView, projection, translate, mapWH, scrWH, should be set before calling this function
53
52
  */
54
- draw() {
55
- this.program.draw(this.texture, this.shellBlockManager);
53
+ draw(csRenderPass) {
54
+ this.program.draw(this.texture, this.shellBlockManager, csRenderPass);
56
55
  if (this.wiggleInKM > 0 && this.wiggleSpeed > 0) {
57
56
  this.innerTime += this.wiggleSpeed;
58
57
  this.shellBlockManager.update({ innerTime: this.innerTime });
@@ -60,7 +59,7 @@ export default class GlobeShell {
60
59
  }
61
60
  }
62
61
  free() {
63
- globeProgramCache.releaseProgram(this.globe, GlobeShellProgram);
62
+ BBOXGlobeShellProgramCache.release(this.globe);
64
63
  this.shellBlockManager.free();
65
64
  }
66
65
  }