@pirireis/webglobeplugins 0.16.4 → 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 (168) hide show
  1. package/Math/angle-calculation.js +1 -0
  2. package/Math/arc.js +92 -2
  3. package/Math/circle-cdf-points.js +2 -2
  4. package/Math/circle.js +2 -2
  5. package/Math/contour/quadtreecontours.js +300 -0
  6. package/Math/finite-line-2d.js +58 -0
  7. package/Math/juction/arc-plane.js +67 -12
  8. package/Math/juction/line-sphere.js +6 -6
  9. package/Math/juction/plane-plane.js +4 -6
  10. package/Math/methods.js +5 -5
  11. package/Math/templete-shapes/grid-visually-equal.js +0 -1
  12. package/Math/tessellation/earcut/adapters.js +37 -0
  13. package/Math/tessellation/hybrid-triangle-tessellation-meta.js +123 -0
  14. package/Math/tessellation/methods.js +46 -0
  15. package/Math/tessellation/shred-input.js +18 -0
  16. package/Math/tessellation/tile-merger.js +56 -0
  17. package/Math/tessellation/tiler.js +50 -0
  18. package/Math/tessellation/triangle-tessellation-meta.js +516 -0
  19. package/Math/tessellation/triangle-tessellation.js +14 -0
  20. package/Math/tessellation/zoom-catch.js +1 -0
  21. package/Math/vec3.js +26 -1
  22. package/compass-rose/compass-text-writer.js +39 -33
  23. package/constants.js +3 -0
  24. package/{util/heatwavedatamanager → heatwave}/datamanager.js +1 -1
  25. package/heatwave/{plugins/heatwaveglobeshell.js → heatwave.js} +8 -6
  26. package/heatwave/index.js +5 -3
  27. package/heatwave/{isobar/plugin.js → isobar.js} +6 -5
  28. package/{util/heatwavedatamanager → heatwave}/texture-point-sampler.js +24 -3
  29. package/package.json +7 -3
  30. package/programs/arrowfield/{object.js → arrow-field.js} +1 -1
  31. package/programs/arrowfield/logic.js +1 -1
  32. package/programs/data2legend/density-to-legend.js +24 -29
  33. package/programs/data2legend/point-to-density-texture.js +14 -17
  34. package/programs/float2legendwithratio/logic.js +2 -2
  35. package/programs/float2legendwithratio/object.js +1 -1
  36. package/programs/helpers/{blender/program.js → blender.js} +1 -1
  37. package/programs/helpers/{fadeaway/logic.js → fadeaway.js} +11 -2
  38. package/programs/index.js +20 -9
  39. package/programs/line-on-globe/circle-accurate-3d.js +12 -14
  40. package/programs/line-on-globe/circle-accurate-flat.js +0 -1
  41. package/programs/line-on-globe/degree-padding-around-circle-3d.js +13 -15
  42. package/programs/line-on-globe/lines-color-instanced-flat.js +15 -18
  43. package/programs/line-on-globe/naive-accurate-flexible.js +0 -1
  44. package/programs/picking/pickable-polygon-renderer.js +1 -1
  45. package/programs/picking/pickable-renderer.js +2 -2
  46. package/programs/point-on-globe/element-globe-surface-glow.js +2 -2
  47. package/programs/point-on-globe/element-point-glow.js +1 -1
  48. package/programs/point-on-globe/square-pixel-point.js +1 -1
  49. package/programs/polygon-on-globe/texture-dem-triangle-test-plugin-triangle.js +204 -0
  50. package/programs/polygon-on-globe/texture-dem-triangle-test-plugin.js +31 -10
  51. package/programs/polygon-on-globe/texture-dem-triangles.js +81 -12
  52. package/programs/rings/partial-ring/piece-of-pie.js +26 -29
  53. package/programs/totems/camerauniformblock.js +34 -45
  54. package/programs/two-d/pixel-padding-for-compass.js +14 -24
  55. package/programs/vectorfields/logics/drawrectangleparticles.js +1 -2
  56. package/programs/vectorfields/logics/pixelbased.js +1 -2
  57. package/programs/vectorfields/pingpongbuffermanager.js +1 -1
  58. package/range-tools-on-terrain/bearing-line/adapters.js +1 -1
  59. package/range-tools-on-terrain/circle-line-chain/adapters.js +0 -5
  60. package/range-tools-on-terrain/circle-line-chain/plugin.js +1 -1
  61. package/range-tools-on-terrain/range-ring/plugin.js +4 -6
  62. package/semiplugins/lightweight/line-plugin.js +0 -1
  63. package/semiplugins/shape-on-terrain/arc-plugin.js +5 -7
  64. package/semiplugins/shape-on-terrain/circle-plugin.js +2 -2
  65. package/semiplugins/shape-on-terrain/padding-1-degree.js +1 -2
  66. package/semiplugins/shell/bbox-renderer/index.js +2 -0
  67. package/{programs/globeshell/wiggle → semiplugins/shell/bbox-renderer}/logic.js +101 -102
  68. package/{programs/globeshell/wiggle → semiplugins/shell/bbox-renderer}/object.js +6 -7
  69. package/semiplugins/utility/container-plugin.js +94 -0
  70. package/semiplugins/utility/object-pass-container-plugin.js +80 -0
  71. package/{point-heat-map → tracks/point-heat-map}/adaptors/timetracksplugin-format-to-this.js +1 -1
  72. package/{point-heat-map → tracks/point-heat-map}/plugin-webworker.js +3 -3
  73. package/{point-heat-map → tracks/point-heat-map}/point-to-heat-map-flow.js +11 -14
  74. package/{point-tracks → tracks/point-tracks}/plugin.js +5 -5
  75. package/{timetracks → tracks/timetracks}/adaptors-line-strip.js +1 -1
  76. package/{timetracks → tracks/timetracks}/program-line-strip.js +49 -49
  77. package/{timetracks → tracks/timetracks}/programpoint-line-strip.js +16 -13
  78. package/types.js +6 -0
  79. package/util/account/bufferoffsetmanager.js +1 -1
  80. package/util/account/single-attribute-buffer-management/buffer-orchestrator.js +9 -95
  81. package/util/gl-util/uniform-block/manager.js +4 -5
  82. package/util/gl-util/uniform-block/types.js +0 -7
  83. package/util/index.js +10 -13
  84. package/util/picking/fence.js +16 -18
  85. package/util/picking/picker-displayer.js +4 -6
  86. package/util/programs/{shapesonglobe.js → draw-from-pixel-coords.js} +4 -7
  87. package/util/programs/draw-texture-on-canvas.js +1 -1
  88. package/util/programs/texturetoglobe.js +3 -3
  89. package/util/shaderfunctions/geometrytransformations.js +6 -0
  90. package/util/webglobe/rasteroverlay.js +1 -0
  91. package/vectorfield/arrowfield/index.js +3 -0
  92. package/{arrowfield → vectorfield/arrowfield}/plugin.js +2 -2
  93. package/{waveparticles → vectorfield/waveparticles}/plugin.js +12 -12
  94. package/{wind → vectorfield/wind}/index.js +1 -1
  95. package/{wind → vectorfield/wind}/plugin.js +32 -32
  96. package/write-text/attached-text-writer.js +9 -1
  97. package/write-text/context-text3.js +0 -1
  98. package/write-text/objectarraylabels/index.js +2 -0
  99. package/Math/mesh/mapbox-delaunay.js +0 -544
  100. package/arrowfield/index.js +0 -3
  101. package/bearing-line/index.js +0 -2
  102. package/bearing-line/plugin.js +0 -444
  103. package/circle-line-chain/chain-list-map.js +0 -201
  104. package/circle-line-chain/plugin.js +0 -411
  105. package/circle-line-chain/util.js +0 -1
  106. package/compassrose/compassrose.js +0 -293
  107. package/compassrose/index.js +0 -2
  108. package/index.js +0 -12
  109. package/partialrings/buffer-manager.js +0 -75
  110. package/partialrings/index.js +0 -2
  111. package/partialrings/plugin.js +0 -128
  112. package/partialrings/program.js +0 -279
  113. package/programs/arrowfield/index.js +0 -2
  114. package/programs/globe-util/is-globe-moved.js +0 -19
  115. package/programs/globeshell/index.js +0 -2
  116. package/programs/globeshell/wiggle/index.js +0 -2
  117. package/programs/helpers/blender/index.js +0 -1
  118. package/programs/helpers/fadeaway/index.js +0 -2
  119. package/programs/helpers/fadeaway/object.js +0 -14
  120. package/programs/helpers/index.js +0 -2
  121. package/programs/rings/distancering/circleflatprogram.js +0 -116
  122. package/programs/rings/distancering/circlepaddingfreeangleprogram.js +0 -326
  123. package/programs/rings/distancering/circlepaddysharedbuffer.js +0 -368
  124. package/programs/rings/distancering/index.js +0 -6
  125. package/programs/rings/distancering/paddyflatprogram.js +0 -127
  126. package/programs/rings/distancering/paddyflatprogram2d.js +0 -129
  127. package/programs/rings/distancering/paddyflatprogram3d.js +0 -128
  128. package/programs/two-d/pixel-circle.js +0 -1
  129. package/programs/vectorfields/index.js +0 -3
  130. package/rangerings/enum.js +0 -2
  131. package/rangerings/index.js +0 -5
  132. package/rangerings/plugin.js +0 -543
  133. package/rangerings/rangeringangletext.js +0 -326
  134. package/rangerings/ring-account.js +0 -112
  135. package/timetracks/index.js +0 -1
  136. package/util/build-strategy/general-strategy.js +0 -62
  137. package/util/gl-util/uniform-block/shader.js +0 -1
  138. package/util/heatwavedatamanager/index.js +0 -2
  139. package/util/heatwavedatamanager/pointcoordsmeta.js +0 -22
  140. package/util/jshelpers/data-filler.js +0 -17
  141. package/util/jshelpers/equality.js +0 -18
  142. package/util/jshelpers/index.js +0 -2
  143. package/util/jshelpers/timefilters.js +0 -30
  144. package/util/programs/index.js +0 -1
  145. package/util/surface-line-data/arc-bboxes.js +0 -25
  146. package/util/surface-line-data/arcs-to-cuts.js +0 -50
  147. package/util/surface-line-data/cut-arc.js +0 -1
  148. package/util/surface-line-data/flow.js +0 -28
  149. package/util/surface-line-data/rbush-manager.js +0 -1
  150. package/util/surface-line-data/web-worker.js +0 -1
  151. package/write-text/context-text3old.js +0 -152
  152. package/write-text/index.js +0 -1
  153. package/write-text/writer-plugin.js +0 -8
  154. /package/{heatwave/isobar/quadtreecontours.js → Math/contour/quadtreecontours1.js} +0 -0
  155. /package/{util/surface-line-data → Math/tessellation}/types.js +0 -0
  156. /package/pin/{pin-object-array.js → pin-object-array1.js} +0 -0
  157. /package/pin/{pin-point-totem.js → pin-point-totem1.js} +0 -0
  158. /package/{circle-line-chain/init.js → programs/polygon-on-globe/partial-tesselation.js} +0 -0
  159. /package/{point-heat-map → tracks/point-heat-map}/index.js +0 -0
  160. /package/{point-tracks → tracks/point-tracks}/key-methods.js +0 -0
  161. /package/{timetracks → tracks/timetracks}/plugin-line-strip.js +0 -0
  162. /package/{arrowfield → vectorfield/arrowfield}/adaptor.js +0 -0
  163. /package/{waveparticles → vectorfield/waveparticles}/adaptor.js +0 -0
  164. /package/{waveparticles → vectorfield/waveparticles}/index.js +0 -0
  165. /package/{wind → vectorfield/wind}/imagetovectorfieldandmagnitude.js +0 -0
  166. /package/{wind → vectorfield/wind}/vectorfieldimage.js +0 -0
  167. /package/write-text/{context-text.js → context-textDELETE.js} +0 -0
  168. /package/{heatwave/isobar → write-text/objectarraylabels}/objectarraylabels.js +0 -0
@@ -1,7 +1,10 @@
1
1
  /**
2
2
  * Author: Toprak Nihat Deniz Ozturk
3
3
  */
4
- import { createProgram, defaultblendfunction, shaderfunctions } from "../util";
4
+ // import { createProgram, defaultblendfunction, shaderfunctions } from "../../util";
5
+ import { createProgram } from "../../util/webglobjectbuilders";
6
+ import { defaultblendfunction } from "../../util/webglobe/gldefaultstates";
7
+ import { pixelXYToCartesian2DPoint, pixelXYToCartesian3DPoint, } from "../../util/shaderfunctions";
5
8
  export default class TrackGlowLineProgram {
6
9
  /**
7
10
  * @param {WebGL2RenderingContext} gl
@@ -398,8 +401,8 @@ out float v_time;
398
401
  out vec3 v_color;
399
402
  out float v_track_start_time;
400
403
  out float v_track_end_time;
401
- ${shaderfunctions.pixelXYToCartesian3DPoint}
402
- ${shaderfunctions.pixelXYToCartesian2DPoint}
404
+ ${pixelXYToCartesian3DPoint}
405
+ ${pixelXYToCartesian2DPoint}
403
406
 
404
407
  void main() {
405
408
 
@@ -535,56 +538,53 @@ void main() {
535
538
  this._resetTexture();
536
539
  gl.enable(gl.BLEND);
537
540
  gl.blendFuncSeparate(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
538
- { // draw lines
539
- gl.bindFramebuffer(gl.FRAMEBUFFER, this._frameBuffer);
540
- gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, this._middleTexture, 0);
541
- gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT1, gl.TEXTURE_2D, this._blurTextures[0], 0);
542
- gl.drawBuffers([
543
- gl.COLOR_ATTACHMENT0,
544
- gl.COLOR_ATTACHMENT1,
545
- ]);
546
- gl.useProgram(_lineProgram.program);
547
- gl.uniform1f(_lineProgram.u_head_time, u_head_time);
548
- gl.uniform1f(_lineProgram.u_tail_time, u_tail_time);
549
- gl.uniformMatrix4fv(_lineProgram.uProjectionMatrix, false, uProjectionMatrix);
550
- if (u_mapWH) {
551
- gl.uniform2fv(_lineProgram.u_mapWH, u_mapWH);
552
- }
553
- else {
554
- gl.uniformMatrix4fv(_lineProgram.uModelViewMatrix, false, uModelViewMatrix);
555
- }
556
- gl.uniform3fv(_lineProgram.uTranslate, uTranslate);
557
- gl.bindVertexArray(_lineProgram.vao);
558
- gl.drawArrays(gl.LINE_STRIP, 0, this._totalLength);
559
- gl.drawBuffers([
560
- gl.COLOR_ATTACHMENT0,
561
- gl.NONE
562
- ]);
541
+ // draw lines
542
+ gl.bindFramebuffer(gl.FRAMEBUFFER, this._frameBuffer);
543
+ gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, this._middleTexture, 0);
544
+ gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT1, gl.TEXTURE_2D, this._blurTextures[0], 0);
545
+ gl.drawBuffers([
546
+ gl.COLOR_ATTACHMENT0,
547
+ gl.COLOR_ATTACHMENT1,
548
+ ]);
549
+ gl.useProgram(_lineProgram.program);
550
+ gl.uniform1f(_lineProgram.u_head_time, u_head_time);
551
+ gl.uniform1f(_lineProgram.u_tail_time, u_tail_time);
552
+ gl.uniformMatrix4fv(_lineProgram.uProjectionMatrix, false, uProjectionMatrix);
553
+ if (u_mapWH) {
554
+ gl.uniform2fv(_lineProgram.u_mapWH, u_mapWH);
563
555
  }
564
- { // blur ping pong
565
- gl.useProgram(_blurProgram.program);
566
- gl.bindVertexArray(_blurProgram.vao);
567
- for (let i = 0; i < _blurRepetition * 2; i++) {
568
- gl.bindFramebuffer(gl.FRAMEBUFFER, this._blurFrameBuffers[i % 2]);
569
- gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, this._blurTextures[(i + 1) % 2], 0);
570
- gl.bindTexture(gl.TEXTURE_2D, this._blurTextures[i % 2]);
571
- gl.uniform1i(_blurProgram.u_texture, 0);
572
- gl.uniform1f(_blurProgram.u_horizontal, i % 2 == 0);
573
- gl.drawArrays(gl.TRIANGLES, 0, 6);
574
- }
556
+ else {
557
+ gl.uniformMatrix4fv(_lineProgram.uModelViewMatrix, false, uModelViewMatrix);
575
558
  }
576
- { // combine
577
- gl.bindFramebuffer(gl.FRAMEBUFFER, null);
578
- gl.useProgram(this._combineProgram.program);
579
- gl.bindVertexArray(this._combineProgram.vao);
580
- gl.activeTexture(gl.TEXTURE1);
581
- gl.bindTexture(gl.TEXTURE_2D, this._blurTextures[1]);
582
- gl.uniform1i(this._combineProgram.u_bloom_texture, 1);
583
- gl.activeTexture(gl.TEXTURE0);
584
- gl.bindTexture(gl.TEXTURE_2D, this._middleTexture);
585
- gl.uniform1i(this._combineProgram.u_main_texture, 0);
559
+ gl.uniform3fv(_lineProgram.uTranslate, uTranslate);
560
+ gl.bindVertexArray(_lineProgram.vao);
561
+ gl.drawArrays(gl.LINE_STRIP, 0, this._totalLength);
562
+ gl.drawBuffers([
563
+ gl.COLOR_ATTACHMENT0,
564
+ gl.NONE
565
+ ]);
566
+ // blur ping pong
567
+ gl.useProgram(_blurProgram.program);
568
+ gl.bindVertexArray(_blurProgram.vao);
569
+ for (let i = 0; i < _blurRepetition * 2; i++) {
570
+ gl.bindFramebuffer(gl.FRAMEBUFFER, this._blurFrameBuffers[i % 2]);
571
+ gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, this._blurTextures[(i + 1) % 2], 0);
572
+ gl.bindTexture(gl.TEXTURE_2D, this._blurTextures[i % 2]);
573
+ gl.uniform1i(_blurProgram.u_texture, 0);
574
+ gl.uniform1f(_blurProgram.u_horizontal, i % 2 === 0);
586
575
  gl.drawArrays(gl.TRIANGLES, 0, 6);
587
576
  }
577
+ // combine
578
+ gl.bindFramebuffer(gl.FRAMEBUFFER, null);
579
+ gl.useProgram(this._combineProgram.program);
580
+ gl.bindVertexArray(this._combineProgram.vao);
581
+ gl.activeTexture(gl.TEXTURE1);
582
+ gl.bindTexture(gl.TEXTURE_2D, this._blurTextures[1]);
583
+ gl.uniform1i(this._combineProgram.u_bloom_texture, 1);
584
+ gl.activeTexture(gl.TEXTURE0);
585
+ gl.bindTexture(gl.TEXTURE_2D, this._middleTexture);
586
+ gl.uniform1i(this._combineProgram.u_main_texture, 0);
587
+ gl.drawArrays(gl.TRIANGLES, 0, 6);
588
588
  gl.bindVertexArray(null);
589
589
  defaultblendfunction(gl);
590
590
  }
@@ -1,16 +1,19 @@
1
- import { createProgram, shaderfunctions } from "../util";
2
- import { CameraUniformBlockTotem, globeProgramCache } from "../programs";
1
+ import { createProgram } from "../../util/webglobjectbuilders";
2
+ import { pixelXYToCartesian2DPoint, pixelXYToCartesian3DPoint } from "../../util/shaderfunctions";
3
+ import { CameraUniformBlockTotem, globeProgramCache } from "../../programs";
4
+ import { CameraUniformBlockString } from "../../programs/totems/camerauniformblock";
5
+ // layout(std140) uniform GlobeCamera {
6
+ // mat4 view; // 64 bytes 0
7
+ // mat4 projection; // 64 bytes 64
8
+ // vec3 translate; // 12 bytes 128
9
+ // bool is3D; // 4 bytes 140
10
+ // vec2 mapWH; // 8 bytes 144
11
+ // vec2 screenWH; // 8 bytes 152
12
+ // float z_level; // 4 bytes 160
13
+ // };
3
14
  const vertexShader = `#version 300 es
4
15
 
5
- layout(std140) uniform GlobeCamera {
6
- mat4 view; // 64 bytes 0
7
- mat4 projection; // 64 bytes 64
8
- vec3 translate; // 12 bytes 128
9
- bool is3D; // 4 bytes 140
10
- vec2 mapWH; // 8 bytes 144
11
- vec2 screenWH; // 8 bytes 152
12
- float z_level; // 4 bytes 160
13
- };
16
+ ${CameraUniformBlockString}
14
17
 
15
18
  layout(std140) uniform Globals {
16
19
  float head_time;
@@ -26,7 +29,7 @@ in float end_time;
26
29
  in vec3 end_color;
27
30
  out vec4 v_color;
28
31
 
29
- ` + shaderfunctions.pixelXYToCartesian3DPoint + shaderfunctions.pixelXYToCartesian2DPoint + `
32
+ ` + pixelXYToCartesian3DPoint + pixelXYToCartesian2DPoint + `
30
33
 
31
34
  void main() {
32
35
  if (head_time < start_time || head_time > end_time) { return; }
@@ -56,7 +59,7 @@ void main() {
56
59
  outColor.a = 0.0;
57
60
  }
58
61
  }`;
59
- export default class {
62
+ export default class ProgramPointLineStrip {
60
63
  constructor(gl, globe, attrBuffer, options) {
61
64
  this.gl = gl;
62
65
  this._cameraBlockBindingPoint = 0;
package/types.js CHANGED
@@ -1,3 +1,9 @@
1
+ export var CSRenderPass;
2
+ (function (CSRenderPass) {
3
+ CSRenderPass[CSRenderPass["NORMAL"] = 0] = "NORMAL";
4
+ CSRenderPass[CSRenderPass["SELECTED"] = 1] = "SELECTED";
5
+ CSRenderPass[CSRenderPass["EDITING"] = 2] = "EDITING";
6
+ })(CSRenderPass || (CSRenderPass = {}));
1
7
  export var CSMeasureTextPositionTypes;
2
8
  (function (CSMeasureTextPositionTypes) {
3
9
  CSMeasureTextPositionTypes["CENTER"] = "center";
@@ -17,7 +17,7 @@
17
17
  * READ, most of the time is not needed to be read, unless for defraging.
18
18
  * This unpredicatable behavior is not handled by this class.
19
19
  */
20
- export default class {
20
+ export default class BufferOffsetManager {
21
21
  constructor(itemSize, { capacity = 10, bufferType = "STATIC_DRAW" } = {}) {
22
22
  this.itemSize = itemSize;
23
23
  this.bufferType = bufferType;
@@ -12,99 +12,13 @@ export class BufferOrchestrator {
12
12
  }
13
13
  resetWithCapacity(bufferManagersMap, capacity = null) {
14
14
  this._capacity = capacity !== null ? capacity : this._capacity;
15
- for (const [key, { bufferManager }] of bufferManagersMap) {
15
+ for (const [, { bufferManager }] of bufferManagersMap) {
16
16
  bufferManager.resetWithCapacity(this._capacity);
17
17
  }
18
18
  this.offsetMap.clear();
19
19
  this.tombstoneOffsets = [];
20
20
  this._length = 0;
21
21
  }
22
- // ...existing code...
23
- // TODO: CLEAN THIS
24
- // insertBulk2(items: any[], bufferManagersMap: BufferManagersMap, bufferKeys: string[] | null = null) {
25
- // this.ensureSpace(items.length, bufferManagersMap);
26
- // const { offsetMap } = this;
27
- // // For block insert (truly new, consecutive offsets)
28
- // const blockItems: any[] = [];
29
- // let blockStart: number | null = null;
30
- // let lastBlockOffset: number | null = null;
31
- // // For single insert (existing or tombstone-assigned)
32
- // const singleItems: any[] = [];
33
- // const singleOffsets: number[] = [];
34
- // for (const item of items) {
35
- // let offset = offsetMap.get(item.key);
36
- // if (offset !== undefined) {
37
- // // Already present, update in place
38
- // singleItems.push(item);
39
- // singleOffsets.push(offset);
40
- // } else {
41
- // // Assign offset (tombstone or new)
42
- // if (this.tombstoneOffsets.length > 0) {
43
- // offset = this.tombstoneOffsets.pop() as number;
44
- // offsetMap.set(item.key, offset);
45
- // singleItems.push(item);
46
- // singleOffsets.push(offset);
47
- // } else {
48
- // offset = this._length++;
49
- // if (offset >= this._capacity) throw new Error("The Size Should Be Increased!!");
50
- // offsetMap.set(item.key, offset);
51
- // // Check for consecutive block
52
- // if (blockStart === null) {
53
- // blockStart = offset;
54
- // lastBlockOffset = offset;
55
- // blockItems.push(item);
56
- // } else if (lastBlockOffset !== null && offset === lastBlockOffset + 1) {
57
- // lastBlockOffset = offset;
58
- // blockItems.push(item);
59
- // } else {
60
- // // Not consecutive, flush current block
61
- // if (blockItems.length > 0) {
62
- // this._insertBlock(blockItems, blockStart, bufferManagersMap, bufferKeys);
63
- // blockItems.length = 0;
64
- // }
65
- // blockStart = offset;
66
- // lastBlockOffset = offset;
67
- // blockItems.push(item);
68
- // }
69
- // }
70
- // }
71
- // }
72
- // // Flush any remaining block
73
- // if (blockItems.length > 0 && blockStart !== null) {
74
- // this._insertBlock(blockItems, blockStart, bufferManagersMap, bufferKeys);
75
- // }
76
- // // Insert singles
77
- // if (singleItems.length > 0) {
78
- // if (bufferKeys) {
79
- // for (const key of bufferKeys) {
80
- // const bufferManagerComp = bufferManagersMap.get(key);
81
- // if (!bufferManagerComp) throw new Error("insertBulk bufferKey does not exist");
82
- // const { bufferManager, adaptor } = bufferManagerComp;
83
- // bufferManager.insertBulk(singleItems.map(adaptor), singleOffsets);
84
- // }
85
- // } else {
86
- // for (const [key, { bufferManager, adaptor }] of bufferManagersMap) {
87
- // bufferManager.insertBulk(singleItems.map(adaptor), singleOffsets);
88
- // }
89
- // }
90
- // }
91
- // }
92
- // // Helper for block insert
93
- // private _insertBlock(blockItems: any[], blockStart: number, bufferManagersMap: BufferManagersMap, bufferKeys: string[] | null) {
94
- // if (bufferKeys) {
95
- // for (const key of bufferKeys) {
96
- // const bufferManagerComp = bufferManagersMap.get(key);
97
- // if (!bufferManagerComp) throw new Error("insertBulk bufferKey does not exist");
98
- // const { bufferManager, adaptor } = bufferManagerComp;
99
- // bufferManager.insertBlock(blockItems, blockStart, adaptor, Float32Array);
100
- // }
101
- // } else {
102
- // for (const [key, { bufferManager, adaptor }] of bufferManagersMap) {
103
- // bufferManager.insertBlock(blockItems, blockStart, adaptor, Float32Array);
104
- // }
105
- // }
106
- // }
107
- // ...existing code...
108
22
  // want to add stack load to this method
109
23
  // if offsetMap.has(item.key) === false get next offset, add the item to stack
110
24
  // create a single big float32array and fill it with the items
@@ -135,7 +49,7 @@ export class BufferOrchestrator {
135
49
  }
136
50
  }
137
51
  else {
138
- for (const [key, { bufferManager, adaptor }] of bufferManagersMap) {
52
+ for (const [, { bufferManager, adaptor }] of bufferManagersMap) {
139
53
  bufferManager.insertBulk([adaptor(item)], [o]);
140
54
  }
141
55
  }
@@ -173,7 +87,7 @@ export class BufferOrchestrator {
173
87
  }
174
88
  }
175
89
  else {
176
- for (const [key, { bufferManager, adaptor }] of bufferManagersMap) {
90
+ for (const [, { bufferManager, adaptor }] of bufferManagersMap) {
177
91
  bufferManager.insertBlock(blockLoad, offsetStart, adaptor, Float32Array);
178
92
  }
179
93
  }
@@ -201,7 +115,7 @@ export class BufferOrchestrator {
201
115
  }
202
116
  }
203
117
  else {
204
- for (const [key, { bufferManager, adaptor }] of bufferManagersMap) {
118
+ for (const [, { bufferManager, adaptor }] of bufferManagersMap) {
205
119
  bufferManager.insertBulk(items.map(adaptor), offsets);
206
120
  }
207
121
  }
@@ -216,7 +130,7 @@ export class BufferOrchestrator {
216
130
  this.tombstoneOffsets.push(offset);
217
131
  }
218
132
  }
219
- for (const [key, { bufferManager }] of bufferManagersMap) {
133
+ for (const [, { bufferManager }] of bufferManagersMap) {
220
134
  bufferManager.deleteBulk(offsets);
221
135
  }
222
136
  }
@@ -240,7 +154,7 @@ export class BufferOrchestrator {
240
154
  if (itemsLength <= this.emptySpace)
241
155
  return;
242
156
  const newCapacity = this.length + itemsLength;
243
- for (const [key, { bufferManager }] of bufferManagersMap) {
157
+ for (const [, { bufferManager }] of bufferManagersMap) {
244
158
  bufferManager.extendBuffer(this.length, newCapacity);
245
159
  }
246
160
  this._capacity = newCapacity;
@@ -252,14 +166,14 @@ export class BufferOrchestrator {
252
166
  for (const key of bufferKeys) {
253
167
  const offset = offsetMap.get(key);
254
168
  if (offset !== undefined) {
255
- for (const [key, { bufferManager }] of bufferManagers) {
169
+ for (const [, { bufferManager }] of bufferManagers) {
256
170
  bufferManager.defrag([offset], this.length, newCapacity);
257
171
  }
258
172
  }
259
173
  }
260
174
  }
261
175
  else {
262
- for (const [key, { bufferManager }] of bufferManagers) {
176
+ for (const [, { bufferManager }] of bufferManagers) {
263
177
  bufferManager.defrag(offsetMap.values(), this.length, newCapacity);
264
178
  }
265
179
  }
@@ -281,7 +195,7 @@ export class BufferOrchestrator {
281
195
  _defrag() {
282
196
  const newOffsetMap = new Map();
283
197
  let newOffset = 0;
284
- for (const [key, offset] of this.offsetMap) {
198
+ for (const [key,] of this.offsetMap) {
285
199
  newOffsetMap.set(key, newOffset++);
286
200
  }
287
201
  this.offsetMap = newOffsetMap;
@@ -1,4 +1,3 @@
1
- import "./types";
2
1
  const typeSizes = {
3
2
  'float': 4,
4
3
  'vec2': 8,
@@ -103,7 +102,7 @@ export class UniformBlockManager {
103
102
  gl.bindBuffer(gl.UNIFORM_BUFFER, ubo);
104
103
  const offset = this.offsetMap.get(key);
105
104
  if (offset === undefined) {
106
- throw new Error(`Uniform block member ${key} not found in offset map.`);
105
+ throw new Error(`Uniform block member ${key} not found in offset map.\nPossible members: ${Array.from(this.offsetMap.keys()).join(", ")}`);
107
106
  }
108
107
  // @ts-ignore
109
108
  const type = this.blockMembers.find(member => member.name === key).type;
@@ -121,7 +120,7 @@ export class UniformBlockManager {
121
120
  data = (typeof value === 'number') ? new typeArrayConstructors[type]([value]) : new typeArrayConstructors[type](value);
122
121
  }
123
122
  else {
124
- throw new Error(`Unsupported value type for ${key}: ${typeof value}`);
123
+ throw new Error(`Unsupported value type for ${key}: ${typeof value}.\n Supported types are: number, Array, ArrayBuffer, TypedArray.`);
125
124
  }
126
125
  gl.bufferSubData(gl.UNIFORM_BUFFER, offset, data);
127
126
  gl.bindBuffer(gl.UNIFORM_BUFFER, null);
@@ -131,7 +130,7 @@ export class UniformBlockManager {
131
130
  for (const [name, value] of nameValueMap.entries()) {
132
131
  const offset = this.offsetMap.get(name);
133
132
  if (offset === undefined) {
134
- throw new Error(`Uniform block member ${name} not found in offset map.`);
133
+ throw new Error(`Uniform block member ${name} not found in offset map.\nPossible members: ${Array.from(this.offsetMap.keys()).join(", ")}`);
135
134
  }
136
135
  // @ts-ignore
137
136
  const type = this.blockMembers.find(member => member.name === name).type;
@@ -148,7 +147,7 @@ export class UniformBlockManager {
148
147
  else if (ArrayBuffer.isView(value) && !(value instanceof DataView))
149
148
  data = (typeof value === 'number') ? new typeArrayConstructors[type]([value]) : new typeArrayConstructors[type](value);
150
149
  else {
151
- throw new Error(`Unsupported value type for ${name}: ${typeof value}`);
150
+ throw new Error(`Unsupported value type for ${name}: ${typeof value}.\n Supported types are: number, Array, ArrayBuffer, TypedArray.`);
152
151
  }
153
152
  gl.bufferSubData(gl.UNIFORM_BUFFER, offset, data);
154
153
  }
@@ -1,8 +1 @@
1
1
  "use strict";
2
- /**
3
- * @typedef {string} UniformBlockName
4
- *
5
- * @typedef {string} GLSLType | mat4, mat3, vec4, vec3, vec2, float, int, bool
6
- * @typedef {{name: string, type: GLSLType, value: null|Float32Array}} UniformBlockMember
7
- *
8
- */
package/util/index.js CHANGED
@@ -1,13 +1,10 @@
1
- import * as webglobjectbuilders from './webglobjectbuilders';
2
- import * as shaderfunctions from './shaderfunctions';
3
- import * as geometry from './geometry';
4
- import * as webglobe from './webglobe';
5
- import * as programs from './programs';
6
- import * as heatwavedatamanager from './heatwavedatamanager';
7
- export { webglobjectbuilders, shaderfunctions, geometry, webglobe, programs, heatwavedatamanager };
8
- export * from './webglobe';
9
- export * from './webglobjectbuilders';
10
- export * from './shaderfunctions';
11
- export * from './geometry';
12
- export * from './programs';
13
- export * from './heatwavedatamanager';
1
+ "use strict";
2
+ // import * as webglobjectbuilders from './webglobjectbuilders';
3
+ // import * as shaderfunctions from './shaderfunctions';
4
+ // import * as geometry from './geometry';
5
+ // import * as webglobe from './webglobe';
6
+ // export { webglobjectbuilders, shaderfunctions, geometry, webglobe };
7
+ // export * from './webglobe';
8
+ // export * from './webglobjectbuilders';
9
+ // export * from './shaderfunctions';
10
+ // export * from './geometry';
@@ -7,24 +7,22 @@ const fence = (gl) => new Promise((resolve, reject) => {
7
7
  gl.flush();
8
8
  // There are TWO possible ways to check on the status of a WebGLSync object.
9
9
  // 1. This will check it using clientWaitSync()
10
- const checkStatus_v1 = () => {
11
- const status = gl.clientWaitSync(sync, 0, 0);
12
- // There are four possible values for status:
13
- // a. ALREADY_SIGNALED and CONDITION_SATISFIED (done)
14
- // b. TIMEOUT_EXPIRED (check again later)
15
- // c. WAIT_FAILED (there was an error)
16
- if (status === gl.TIMEOUT_EXPIRED) {
17
- setTimeout(checkStatus_v1, 1);
18
- }
19
- else if (status === gl.ALREADY_SIGNALED || status === gl.CONDITION_SATISFIED) {
20
- gl.deleteSync(sync);
21
- resolve();
22
- }
23
- else {
24
- gl.deleteSync(sync);
25
- reject(new Error('Fence did not resolve normally for some reason'));
26
- }
27
- };
10
+ // const checkStatus_v1 = () => {
11
+ // const status = gl.clientWaitSync(sync, 0, 0);
12
+ // // There are four possible values for status:
13
+ // // a. ALREADY_SIGNALED and CONDITION_SATISFIED (done)
14
+ // // b. TIMEOUT_EXPIRED (check again later)
15
+ // // c. WAIT_FAILED (there was an error)
16
+ // if (status === gl.TIMEOUT_EXPIRED) {
17
+ // setTimeout(checkStatus_v1, 1);
18
+ // } else if (status === gl.ALREADY_SIGNALED || status === gl.CONDITION_SATISFIED) {
19
+ // gl.deleteSync(sync);
20
+ // resolve();
21
+ // } else {
22
+ // gl.deleteSync(sync);
23
+ // reject(new Error('Fence did not resolve normally for some reason'));
24
+ // }
25
+ // };
28
26
  // 2. This will check with getSyncParameter(s, gl.SYNC_STATUS)
29
27
  const checkStatus_v2 = () => {
30
28
  const status = gl.getSyncParameter(sync, gl.SYNC_STATUS);
@@ -53,12 +53,10 @@ class PickerDisplayer {
53
53
  gl.bindTexture(gl.TEXTURE_2D, indexTexture);
54
54
  gl.activeTexture(gl.TEXTURE0);
55
55
  gl.bindTexture(gl.TEXTURE_2D, colorTexture);
56
- { // bind framebuffer
57
- gl.bindFramebuffer(gl.FRAMEBUFFER, fbo);
58
- gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, this.colorTexture, 0);
59
- gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT1, gl.TEXTURE_2D, this.indexTexture, 0);
60
- gl.drawBuffers([gl.COLOR_ATTACHMENT0, gl.COLOR_ATTACHMENT1]);
61
- }
56
+ gl.bindFramebuffer(gl.FRAMEBUFFER, fbo);
57
+ gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, this.colorTexture, 0);
58
+ gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT1, gl.TEXTURE_2D, this.indexTexture, 0);
59
+ gl.drawBuffers([gl.COLOR_ATTACHMENT0, gl.COLOR_ATTACHMENT1]);
62
60
  }
63
61
  // call after drawing the scene with gl picker shader
64
62
  drawColorTexture() {
@@ -1,9 +1,6 @@
1
1
  import { createProgram } from "../webglobjectbuilders";
2
2
  import { CameraUniformBlockString, CameraUniformBlockTotemCache } from "../../programs/totems/camerauniformblock";
3
- import { shaderfunctions } from "..";
4
- /** TODO:
5
- * 3d icin calistir
6
- */
3
+ import { pixelXYToCartesian2DPoint, pixelXYToCartesian3DPoint } from "../shaderfunctions";
7
4
  const drawModeFunc = (gl) => {
8
5
  return (mode) => {
9
6
  return {
@@ -17,7 +14,7 @@ const drawModeFunc = (gl) => {
17
14
  }[mode];
18
15
  };
19
16
  };
20
- export class ShapesOnGlobeProgram {
17
+ export class DrawFromPixelCoords {
21
18
  constructor(gl, globe, drawMode = 'point') {
22
19
  this.globe = globe;
23
20
  this.gl = gl;
@@ -57,8 +54,8 @@ export class ShapesOnGlobeProgram {
57
54
 
58
55
  out vec4 v_color;
59
56
 
60
- ` + shaderfunctions.pixelXYToCartesian3DPoint + `
61
- ` + shaderfunctions.pixelXYToCartesian2DPoint + `
57
+ ` + pixelXYToCartesian3DPoint + `
58
+ ` + pixelXYToCartesian2DPoint + `
62
59
 
63
60
 
64
61
  void main() {
@@ -1,5 +1,5 @@
1
1
  import { createProgram } from "../webglobjectbuilders";
2
- import { glProgramCache } from "../../programs";
2
+ import { glProgramCache } from "../../programs/programcache";
3
3
  // import { CameraUniformBlockTotemCache, CameraUniformBlockString } from "../../programs/totems";
4
4
  const vs = `#version 300 es
5
5
  precision highp float;
@@ -1,5 +1,5 @@
1
1
  import { createProgram } from "../webglobjectbuilders";
2
- import { shaderfunctions } from "..";
2
+ import { pixelXYToCartesian2DPoint, pixelXYToCartesian3DPoint } from "../shaderfunctions";
3
3
  import { latLongBboxtoPixelXYBbox } from "..";
4
4
  /** TODO:
5
5
  * 3d icin calistir
@@ -51,8 +51,8 @@ class TextureToGlobeProgram {
51
51
  out vec2 v_texcoord;
52
52
 
53
53
 
54
- ` + shaderfunctions.pixelXYToCartesian3DPoint + `
55
- ` + shaderfunctions.pixelXYToCartesian2DPoint + `
54
+ ` + pixelXYToCartesian3DPoint + `
55
+ ` + pixelXYToCartesian2DPoint + `
56
56
 
57
57
 
58
58
  void main() {
@@ -1,5 +1,6 @@
1
1
  // Z in kolometers
2
2
  //
3
+ const EPSILON = 0.00001;
3
4
  export const POLE = `
4
5
  #ifndef POLE
5
6
  #define POLE 20037508.34
@@ -197,6 +198,11 @@ float realDistanceOnSphereR1(vec2 longLat1, vec2 longLat2) {
197
198
  return c;
198
199
  }
199
200
  `;
201
+ export const isPointInBBox = `
202
+ bool isPointInBBox(vec2 point, vec4 bbox) {
203
+ return point.x + ${EPSILON} >= bbox.x && point.x <= bbox.z + ${EPSILON} && point.y + ${EPSILON} >= bbox.y && point.y <= bbox.w + ${EPSILON};
204
+ }
205
+ `;
200
206
  const pointsOnSphereBetween = `
201
207
  vec3 pointsOnSphereBetween(vec3 a, vec3 b, float ratio) {
202
208
  // Normalize the input points to ensure they are on the unit sphere
@@ -2,6 +2,7 @@
2
2
  * Iceride bir canvas uretir ve degisiklikler bu kanvasta yapilir
3
3
  */
4
4
  // this class loads texture to raster overlay
5
+ // TODO: IS DEADCODE?
5
6
  class RasterOverlayLoader {
6
7
  constructor(id, globe, { opacity = 1.0, minLon = -180, minLat = -90, maxLon = 180, maxLat = 90, beforeObject = null, canvas = null, callBack = null } = {}) {
7
8
  this.canvas = canvas || document.createElement('canvas');
@@ -0,0 +1,3 @@
1
+ import { ArrowFieldPlugin } from "./plugin";
2
+ import { centigradePlus90ToRadians } from "./adaptor";
3
+ export { ArrowFieldPlugin as ArrowField, centigradePlus90ToRadians };
@@ -1,5 +1,5 @@
1
- import { ArrowField } from '../programs';
2
- export default class ArrowFieldPlugin {
1
+ import { ArrowField } from '../../programs/arrowfield/arrow-field';
2
+ export class ArrowFieldPlugin {
3
3
  constructor(id, { minLon = -180, maxLon = 180, minLat = -90, maxLat = 90, height = 0, opacity = 1, tailLengthRatio = 1, wingLengthRatio = 0.5, color = [0.04, 0.2, 0.8], targetWidth = 100, targetHeight = 100, data = null, dataWidth = null, dataHeight = null, maxMagnitude = null, noDataValue = null } = {}) {
4
4
  this.id = id;
5
5
  this.options = {
@@ -1,11 +1,10 @@
1
- import { GlobeShellWiggle } from "../programs";
2
- import { defaultblendfunction } from "../util";
3
- import { vectorfield } from "../programs/index";
4
- import { pixelBasedMoveProgramCache } from "../programs/vectorfields/logics/pixelbased";
5
- import { drawRectangleParticlesProgramCache } from "../programs/vectorfields/logics/drawrectangleparticles";
6
- import { FadeAway } from "../programs";
7
- import { SeaWaveUbo } from "../programs/vectorfields/logics/ubo-new";
8
- const { PingPongBufferManager, WaveParticalUboManager } = vectorfield;
1
+ import { BBOXGlobeShell } from "../../semiplugins/shell/bbox-renderer";
2
+ import { defaultblendfunction } from "../../util/webglobe/gldefaultstates";
3
+ import { PingPongBufferManager } from "../../programs/vectorfields/pingpongbuffermanager";
4
+ import { pixelBasedMoveProgramCache } from "../../programs/vectorfields/logics/pixelbased";
5
+ import { drawRectangleParticlesProgramCache } from "../../programs/vectorfields/logics/drawrectangleparticles";
6
+ import { FadeAwayProgramCache } from "../../programs/helpers/fadeaway";
7
+ import { SeaWaveUbo } from "../../programs/vectorfields/logics/ubo-new";
9
8
  /**
10
9
  * STEPS:
11
10
  * 1. move particle | buffers: read b1 write b2 | swap buffers b1 <-> b2
@@ -50,8 +49,8 @@ export default class Plugin {
50
49
  this.gl = gl;
51
50
  this.moveParticle = pixelBasedMoveProgramCache.getProgram(gl);
52
51
  this.drawParticle = drawRectangleParticlesProgramCache.getProgram(gl);
53
- this.fadeAway = new FadeAway(gl);
54
- this.globeShellWiggle = new GlobeShellWiggle(gl, globe, this._globeshellparameters);
52
+ this.fadeAway = FadeAwayProgramCache.get(gl);
53
+ this.globeShellWiggle = new BBOXGlobeShell(gl, globe, this._globeshellparameters);
55
54
  const inPositionLocation = this.moveParticle.getInPositionLocation();
56
55
  this.bufferManager = new PingPongBufferManager(gl, this._particleCount, inPositionLocation);
57
56
  this._rgVectorFieldTexture = this._createRGTexture();
@@ -122,8 +121,9 @@ export default class Plugin {
122
121
  }
123
122
  ;
124
123
  this._isFreed = true;
125
- const { gl, fadeAway, globeShellWiggle, _rgVectorFieldTexture, bufferManager, waveUbo, _drawTextures, _frameBuffer } = this;
126
- fadeAway.free();
124
+ const { gl, globeShellWiggle, _rgVectorFieldTexture, bufferManager, waveUbo, _drawTextures, _frameBuffer } = this;
125
+ this.fadeAway = null;
126
+ FadeAwayProgramCache.release(gl);
127
127
  globeShellWiggle.free();
128
128
  gl.deleteTexture(_rgVectorFieldTexture);
129
129
  // glProgramCache.releaseProgram(gl, MoveParticle);