@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.
- package/Math/angle-calculation.js +1 -0
- package/Math/arc.js +92 -2
- package/Math/circle-cdf-points.js +2 -2
- package/Math/circle.js +2 -2
- package/Math/contour/quadtreecontours.js +300 -0
- package/Math/finite-line-2d.js +58 -0
- package/Math/juction/arc-plane.js +67 -12
- package/Math/juction/line-sphere.js +6 -6
- package/Math/juction/plane-plane.js +4 -6
- package/Math/methods.js +5 -5
- package/Math/templete-shapes/grid-visually-equal.js +0 -1
- package/Math/tessellation/earcut/adapters.js +37 -0
- package/Math/tessellation/hybrid-triangle-tessellation-meta.js +123 -0
- package/Math/tessellation/methods.js +46 -0
- package/Math/tessellation/shred-input.js +18 -0
- package/Math/tessellation/tile-merger.js +56 -0
- package/Math/tessellation/tiler.js +50 -0
- package/Math/tessellation/triangle-tessellation-meta.js +516 -0
- package/Math/tessellation/triangle-tessellation.js +14 -0
- package/Math/tessellation/zoom-catch.js +1 -0
- package/Math/vec3.js +26 -1
- package/compass-rose/compass-text-writer.js +39 -33
- package/constants.js +3 -0
- package/{util/heatwavedatamanager → heatwave}/datamanager.js +1 -1
- package/heatwave/{plugins/heatwaveglobeshell.js → heatwave.js} +8 -6
- package/heatwave/index.js +5 -3
- package/heatwave/{isobar/plugin.js → isobar.js} +6 -5
- package/{util/heatwavedatamanager → heatwave}/texture-point-sampler.js +24 -3
- package/package.json +7 -3
- package/programs/arrowfield/{object.js → arrow-field.js} +1 -1
- package/programs/arrowfield/logic.js +1 -1
- package/programs/data2legend/density-to-legend.js +24 -29
- package/programs/data2legend/point-to-density-texture.js +14 -17
- package/programs/float2legendwithratio/logic.js +2 -2
- package/programs/float2legendwithratio/object.js +1 -1
- package/programs/helpers/{blender/program.js → blender.js} +1 -1
- package/programs/helpers/{fadeaway/logic.js → fadeaway.js} +11 -2
- package/programs/index.js +20 -9
- package/programs/line-on-globe/circle-accurate-3d.js +12 -14
- package/programs/line-on-globe/circle-accurate-flat.js +0 -1
- package/programs/line-on-globe/degree-padding-around-circle-3d.js +13 -15
- package/programs/line-on-globe/lines-color-instanced-flat.js +15 -18
- package/programs/line-on-globe/naive-accurate-flexible.js +0 -1
- package/programs/picking/pickable-polygon-renderer.js +1 -1
- package/programs/picking/pickable-renderer.js +2 -2
- package/programs/point-on-globe/element-globe-surface-glow.js +2 -2
- package/programs/point-on-globe/element-point-glow.js +1 -1
- package/programs/point-on-globe/square-pixel-point.js +1 -1
- package/programs/polygon-on-globe/texture-dem-triangle-test-plugin-triangle.js +204 -0
- package/programs/polygon-on-globe/texture-dem-triangle-test-plugin.js +31 -10
- package/programs/polygon-on-globe/texture-dem-triangles.js +81 -12
- package/programs/rings/partial-ring/piece-of-pie.js +26 -29
- package/programs/totems/camerauniformblock.js +34 -45
- package/programs/two-d/pixel-padding-for-compass.js +14 -24
- package/programs/vectorfields/logics/drawrectangleparticles.js +1 -2
- package/programs/vectorfields/logics/pixelbased.js +1 -2
- package/programs/vectorfields/pingpongbuffermanager.js +1 -1
- package/range-tools-on-terrain/bearing-line/adapters.js +1 -1
- package/range-tools-on-terrain/circle-line-chain/adapters.js +0 -5
- package/range-tools-on-terrain/circle-line-chain/plugin.js +1 -1
- package/range-tools-on-terrain/range-ring/plugin.js +4 -6
- package/semiplugins/lightweight/line-plugin.js +0 -1
- package/semiplugins/shape-on-terrain/arc-plugin.js +5 -7
- package/semiplugins/shape-on-terrain/circle-plugin.js +2 -2
- package/semiplugins/shape-on-terrain/padding-1-degree.js +1 -2
- package/semiplugins/shell/bbox-renderer/index.js +2 -0
- package/{programs/globeshell/wiggle → semiplugins/shell/bbox-renderer}/logic.js +101 -102
- package/{programs/globeshell/wiggle → semiplugins/shell/bbox-renderer}/object.js +6 -7
- package/semiplugins/utility/container-plugin.js +94 -0
- package/semiplugins/utility/object-pass-container-plugin.js +80 -0
- package/{point-heat-map → tracks/point-heat-map}/adaptors/timetracksplugin-format-to-this.js +1 -1
- package/{point-heat-map → tracks/point-heat-map}/plugin-webworker.js +3 -3
- package/{point-heat-map → tracks/point-heat-map}/point-to-heat-map-flow.js +11 -14
- package/{point-tracks → tracks/point-tracks}/plugin.js +5 -5
- package/{timetracks → tracks/timetracks}/adaptors-line-strip.js +1 -1
- package/{timetracks → tracks/timetracks}/program-line-strip.js +49 -49
- package/{timetracks → tracks/timetracks}/programpoint-line-strip.js +16 -13
- package/types.js +6 -0
- package/util/account/bufferoffsetmanager.js +1 -1
- package/util/account/single-attribute-buffer-management/buffer-orchestrator.js +9 -95
- package/util/gl-util/uniform-block/manager.js +4 -5
- package/util/gl-util/uniform-block/types.js +0 -7
- package/util/index.js +10 -13
- package/util/picking/fence.js +16 -18
- package/util/picking/picker-displayer.js +4 -6
- package/util/programs/{shapesonglobe.js → draw-from-pixel-coords.js} +4 -7
- package/util/programs/draw-texture-on-canvas.js +1 -1
- package/util/programs/texturetoglobe.js +3 -3
- package/util/shaderfunctions/geometrytransformations.js +6 -0
- package/util/webglobe/rasteroverlay.js +1 -0
- package/vectorfield/arrowfield/index.js +3 -0
- package/{arrowfield → vectorfield/arrowfield}/plugin.js +2 -2
- package/{waveparticles → vectorfield/waveparticles}/plugin.js +12 -12
- package/{wind → vectorfield/wind}/index.js +1 -1
- package/{wind → vectorfield/wind}/plugin.js +32 -32
- package/write-text/attached-text-writer.js +9 -1
- package/write-text/context-text3.js +0 -1
- package/write-text/objectarraylabels/index.js +2 -0
- package/Math/mesh/mapbox-delaunay.js +0 -544
- package/arrowfield/index.js +0 -3
- package/bearing-line/index.js +0 -2
- package/bearing-line/plugin.js +0 -444
- package/circle-line-chain/chain-list-map.js +0 -201
- package/circle-line-chain/plugin.js +0 -411
- package/circle-line-chain/util.js +0 -1
- package/compassrose/compassrose.js +0 -293
- package/compassrose/index.js +0 -2
- package/index.js +0 -12
- package/partialrings/buffer-manager.js +0 -75
- package/partialrings/index.js +0 -2
- package/partialrings/plugin.js +0 -128
- package/partialrings/program.js +0 -279
- package/programs/arrowfield/index.js +0 -2
- package/programs/globe-util/is-globe-moved.js +0 -19
- package/programs/globeshell/index.js +0 -2
- package/programs/globeshell/wiggle/index.js +0 -2
- package/programs/helpers/blender/index.js +0 -1
- package/programs/helpers/fadeaway/index.js +0 -2
- package/programs/helpers/fadeaway/object.js +0 -14
- package/programs/helpers/index.js +0 -2
- package/programs/rings/distancering/circleflatprogram.js +0 -116
- package/programs/rings/distancering/circlepaddingfreeangleprogram.js +0 -326
- package/programs/rings/distancering/circlepaddysharedbuffer.js +0 -368
- package/programs/rings/distancering/index.js +0 -6
- package/programs/rings/distancering/paddyflatprogram.js +0 -127
- package/programs/rings/distancering/paddyflatprogram2d.js +0 -129
- package/programs/rings/distancering/paddyflatprogram3d.js +0 -128
- package/programs/two-d/pixel-circle.js +0 -1
- package/programs/vectorfields/index.js +0 -3
- package/rangerings/enum.js +0 -2
- package/rangerings/index.js +0 -5
- package/rangerings/plugin.js +0 -543
- package/rangerings/rangeringangletext.js +0 -326
- package/rangerings/ring-account.js +0 -112
- package/timetracks/index.js +0 -1
- package/util/build-strategy/general-strategy.js +0 -62
- package/util/gl-util/uniform-block/shader.js +0 -1
- package/util/heatwavedatamanager/index.js +0 -2
- package/util/heatwavedatamanager/pointcoordsmeta.js +0 -22
- package/util/jshelpers/data-filler.js +0 -17
- package/util/jshelpers/equality.js +0 -18
- package/util/jshelpers/index.js +0 -2
- package/util/jshelpers/timefilters.js +0 -30
- package/util/programs/index.js +0 -1
- package/util/surface-line-data/arc-bboxes.js +0 -25
- package/util/surface-line-data/arcs-to-cuts.js +0 -50
- package/util/surface-line-data/cut-arc.js +0 -1
- package/util/surface-line-data/flow.js +0 -28
- package/util/surface-line-data/rbush-manager.js +0 -1
- package/util/surface-line-data/web-worker.js +0 -1
- package/write-text/context-text3old.js +0 -152
- package/write-text/index.js +0 -1
- package/write-text/writer-plugin.js +0 -8
- /package/{heatwave/isobar/quadtreecontours.js → Math/contour/quadtreecontours1.js} +0 -0
- /package/{util/surface-line-data → Math/tessellation}/types.js +0 -0
- /package/pin/{pin-object-array.js → pin-object-array1.js} +0 -0
- /package/pin/{pin-point-totem.js → pin-point-totem1.js} +0 -0
- /package/{circle-line-chain/init.js → programs/polygon-on-globe/partial-tesselation.js} +0 -0
- /package/{point-heat-map → tracks/point-heat-map}/index.js +0 -0
- /package/{point-tracks → tracks/point-tracks}/key-methods.js +0 -0
- /package/{timetracks → tracks/timetracks}/plugin-line-strip.js +0 -0
- /package/{arrowfield → vectorfield/arrowfield}/adaptor.js +0 -0
- /package/{waveparticles → vectorfield/waveparticles}/adaptor.js +0 -0
- /package/{waveparticles → vectorfield/waveparticles}/index.js +0 -0
- /package/{wind → vectorfield/wind}/imagetovectorfieldandmagnitude.js +0 -0
- /package/{wind → vectorfield/wind}/vectorfieldimage.js +0 -0
- /package/write-text/{context-text.js → context-textDELETE.js} +0 -0
- /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 "
|
|
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
|
-
${
|
|
402
|
-
${
|
|
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
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
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
|
-
{
|
|
565
|
-
gl.
|
|
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
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
gl.
|
|
581
|
-
gl.
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
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
|
|
2
|
-
import {
|
|
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
|
-
|
|
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
|
-
` +
|
|
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 [
|
|
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 [
|
|
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 [
|
|
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 [
|
|
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 [
|
|
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 [
|
|
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 [
|
|
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 [
|
|
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,
|
|
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
|
}
|
package/util/index.js
CHANGED
|
@@ -1,13 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
import * as
|
|
3
|
-
import * as
|
|
4
|
-
import * as
|
|
5
|
-
import * as
|
|
6
|
-
|
|
7
|
-
export
|
|
8
|
-
export * from './
|
|
9
|
-
export * from './
|
|
10
|
-
export * from './
|
|
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';
|
package/util/picking/fence.js
CHANGED
|
@@ -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
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
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
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
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 {
|
|
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
|
|
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
|
-
` +
|
|
61
|
-
` +
|
|
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 {
|
|
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
|
-
` +
|
|
55
|
-
` +
|
|
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');
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ArrowField } from '
|
|
2
|
-
export
|
|
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 {
|
|
2
|
-
import { defaultblendfunction } from "
|
|
3
|
-
import {
|
|
4
|
-
import { pixelBasedMoveProgramCache } from "
|
|
5
|
-
import { drawRectangleParticlesProgramCache } from "
|
|
6
|
-
import {
|
|
7
|
-
import { SeaWaveUbo } from "
|
|
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 =
|
|
54
|
-
this.globeShellWiggle = new
|
|
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,
|
|
126
|
-
fadeAway
|
|
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);
|