@pirireis/webglobeplugins 0.9.9 → 0.9.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Math/angle-calculation.js +15 -0
- package/Math/arc.js +65 -0
- package/Math/bounds/line-bbox.js +190 -0
- package/Math/constants.js +9 -0
- package/Math/frustum/camera.js +24 -0
- package/Math/frustum/from-globeinfo.js +48 -0
- package/Math/frustum/types.js +2 -0
- package/Math/globe-util/horizon-plane.js +112 -0
- package/Math/index.js +1 -0
- package/Math/juction/arc-plane.js +83 -0
- package/Math/juction/line-sphere.js +25 -0
- package/Math/juction/plane-plane.js +58 -0
- package/Math/line.js +58 -0
- package/Math/matrix4.js +1 -0
- package/Math/methods.js +206 -0
- package/Math/plane.js +62 -0
- package/Math/quaternion.js +108 -0
- package/Math/types.js +2 -0
- package/Math/utils.js +4 -0
- package/Math/vec3.js +129 -0
- package/algorithms/search-binary.js +19 -0
- package/altitude-locator/adaptors.js +1 -0
- package/altitude-locator/draw-subset-obj.js +19 -0
- package/altitude-locator/keymethod.js +1 -0
- package/altitude-locator/plugin.js +357 -0
- package/altitude-locator/types.js +23 -0
- package/arrowfield/adaptor.js +15 -0
- package/arrowfield/index.js +10 -0
- package/arrowfield/plugin.js +89 -0
- package/bearing-line/index.js +8 -0
- package/bearing-line/plugin.js +474 -0
- package/circle-line-chain/chain-list-map.js +211 -0
- package/circle-line-chain/init.js +1 -0
- package/circle-line-chain/plugin.js +449 -0
- package/circle-line-chain/util.js +5 -0
- package/compass-rose/compass-rose-padding-flat.js +247 -0
- package/compass-rose/compass-text-writer.js +161 -0
- package/compass-rose/index.js +7 -0
- package/compassrose/compassrose.js +300 -0
- package/compassrose/index.js +8 -0
- package/globe-types.js +1 -0
- package/heatwave/index.js +10 -0
- package/heatwave/isobar/objectarraylabels.js +206 -0
- package/heatwave/isobar/plugin.js +362 -0
- package/heatwave/isobar/quadtreecontours.js +316 -0
- package/heatwave/plugins/heatwaveglobeshell.js +224 -0
- package/index.js +11 -11
- package/jest.config.js +7 -0
- package/package.json +4 -4
- package/partialrings/buffer-manager.js +113 -0
- package/partialrings/index.js +41 -0
- package/partialrings/plugin.js +171 -0
- package/partialrings/program.js +197 -0
- package/pin/pin-object-array.js +308 -0
- package/pin/pin-point-totem.js +61 -0
- package/point-heat-map/adaptors/timetracksplugin-format-to-this.js +66 -0
- package/point-heat-map/index.js +1 -0
- package/point-heat-map/plugin-webworker.js +131 -0
- package/point-heat-map/point-to-heat-map-flow.js +129 -0
- package/point-tracks/key-methods.js +5 -0
- package/point-tracks/plugin.js +353 -0
- package/programs/arrowfield/index.js +7 -0
- package/programs/arrowfield/logic.js +149 -0
- package/programs/arrowfield/object.js +68 -0
- package/programs/data2legend/density-to-legend.js +77 -0
- package/programs/data2legend/point-to-density-texture.js +75 -0
- package/programs/float2legendwithratio/index.js +8 -0
- package/programs/float2legendwithratio/logic.js +125 -0
- package/programs/float2legendwithratio/object.js +113 -0
- package/programs/globe-util/is-globe-moved.js +22 -0
- package/programs/globeshell/index.js +8 -0
- package/programs/globeshell/noise/noises.js +1 -0
- package/programs/globeshell/wiggle/index.js +8 -0
- package/programs/globeshell/wiggle/logic.js +252 -0
- package/programs/globeshell/wiggle/object.js +74 -0
- package/programs/helpers/blender/index.js +1 -0
- package/programs/helpers/blender/program.js +62 -0
- package/programs/helpers/fadeaway/index.js +7 -0
- package/programs/helpers/fadeaway/logic.js +50 -0
- package/programs/helpers/fadeaway/object.js +21 -0
- package/programs/helpers/index.js +8 -0
- package/programs/index.js +58 -0
- package/programs/interface.js +1 -0
- package/programs/line-on-globe/angled-line.js +117 -0
- package/programs/line-on-globe/circle-accurate-3d.js +91 -0
- package/programs/line-on-globe/circle-accurate-flat.js +158 -0
- package/programs/line-on-globe/circle-accurate.js +108 -0
- package/programs/line-on-globe/circle.js +102 -0
- package/programs/line-on-globe/degree-padding-around-circle-3d.js +109 -0
- package/programs/line-on-globe/index.js +1 -0
- package/programs/line-on-globe/lines-color-instanced-flat.js +91 -0
- package/programs/line-on-globe/linestrip.js +110 -0
- package/programs/line-on-globe/naive-accurate-flexible.js +125 -0
- package/programs/line-on-globe/to-the-surface.js +82 -0
- package/programs/line-on-globe/util.js +8 -0
- package/programs/picking/pickable-renderer.js +104 -0
- package/programs/point-on-globe/element-globe-surface-glow.js +102 -0
- package/programs/point-on-globe/element-point-glow.js +85 -0
- package/programs/point-on-globe/square-pixel-point.js +125 -0
- package/programs/programcache.js +131 -0
- package/programs/rings/distancering/circleflatprogram.js +114 -0
- package/programs/rings/distancering/circlepaddingfreeangleprogram.js +358 -0
- package/programs/rings/distancering/circlepaddysharedbuffer.js +433 -0
- package/programs/rings/distancering/index.js +14 -0
- package/programs/rings/distancering/paddyflatprogram.js +119 -0
- package/programs/rings/distancering/paddyflatprogram2d.js +121 -0
- package/programs/rings/distancering/paddyflatprogram3d.js +119 -0
- package/programs/rings/distancering/shader.js +1 -0
- package/programs/rings/index.js +17 -0
- package/programs/rings/partial-ring/piece-of-pie.js +173 -0
- package/programs/totems/camerauniformblock.js +147 -0
- package/programs/totems/canvas-webglobe-info.js +102 -0
- package/programs/totems/gpu-selection-uniform-block.js +104 -0
- package/programs/totems/index.js +40 -0
- package/programs/two-d/pixel-circle.js +1 -0
- package/programs/two-d/pixel-padding-for-compass.js +101 -0
- package/programs/util.js +18 -0
- package/programs/vectorfields/index.js +23 -0
- package/programs/vectorfields/logics/drawrectangleparticles.js +66 -0
- package/programs/vectorfields/logics/index.js +12 -0
- package/programs/vectorfields/logics/pixelbased.js +86 -0
- package/programs/vectorfields/logics/ubo.js +57 -0
- package/programs/vectorfields/pingpongbuffermanager.js +80 -0
- package/rangerings/enum.js +5 -0
- package/rangerings/index.js +15 -0
- package/rangerings/plugin.js +610 -0
- package/rangerings/rangeringangletext.js +341 -0
- package/rangerings/ring-account.js +134 -0
- package/shaders/fragment-toy/firework.js +4 -0
- package/shaders/fragment-toy/singularity.js +5 -0
- package/shape-on-terrain/arc/naive/plugin.js +252 -0
- package/timetracks/adaptors-line-strip.js +82 -0
- package/timetracks/adaptors.js +136 -0
- package/timetracks/index.js +19 -0
- package/timetracks/plugin-line-strip.js +254 -0
- package/timetracks/plugin.js +262 -0
- package/timetracks/program-line-strip.js +418 -0
- package/timetracks/program.js +466 -0
- package/timetracks/programpoint-line-strip.js +101 -0
- package/timetracks/programpoint.js +101 -0
- package/types.js +15 -0
- package/util/account/bufferoffsetmanager.js +202 -0
- package/util/account/index.js +23 -0
- package/util/account/single-attribute-buffer-management/buffer-manager.js +112 -0
- package/util/account/single-attribute-buffer-management/buffer-orchestrator.js +180 -0
- package/util/account/single-attribute-buffer-management/index.js +9 -0
- package/util/account/single-attribute-buffer-management/object-store.js +53 -0
- package/util/account/single-attribute-buffer-management/types.js +2 -0
- package/util/account/util.js +24 -0
- package/util/algorithms/index.js +1 -0
- package/util/algorithms/search-binary.js +28 -0
- package/util/check/get.js +18 -0
- package/util/check/index.js +1 -0
- package/util/check/typecheck.js +51 -0
- package/util/geometry/index.js +53 -0
- package/util/gl-util/buffer/attribute-loader.js +81 -0
- package/util/gl-util/buffer/index.js +6 -0
- package/util/gl-util/buffer/types.js +1 -0
- package/util/gl-util/draw-options/methods.js +38 -0
- package/util/gl-util/draw-options/types.js +15 -0
- package/util/gl-util/uniform-block/manager.js +168 -0
- package/util/gl-util/uniform-block/shader.js +1 -0
- package/util/gl-util/uniform-block/types.js +8 -0
- package/util/heatwavedatamanager/datamanager.js +212 -0
- package/util/heatwavedatamanager/index.js +10 -0
- package/util/heatwavedatamanager/pointcoordinatesdatacalculator.js +125 -0
- package/util/heatwavedatamanager/pointcoordsmeta.js +21 -0
- package/util/index.js +57 -0
- package/util/interpolation/index.js +1 -0
- package/util/interpolation/timetrack/index.js +5 -0
- package/util/interpolation/timetrack/timetrack-interpolator.js +81 -0
- package/util/interpolation/timetrack/web-worker-str.js +5 -0
- package/util/interpolation/timetrack/web-worker.js +48 -0
- package/util/jshelpers/data-filler.js +20 -0
- package/util/jshelpers/equality.js +20 -0
- package/util/jshelpers/index.js +37 -0
- package/util/jshelpers/timefilters.js +32 -0
- package/util/picking/fence.js +46 -0
- package/util/picking/picker-displayer.js +145 -0
- package/util/programs/draw-texture-on-canvas.js +71 -0
- package/util/programs/index.js +17 -0
- package/util/programs/shapesonglobe.js +174 -0
- package/util/programs/supersampletotextures.js +107 -0
- package/util/programs/texturetoglobe.js +132 -0
- package/util/shaderfunctions/geometrytransformations.js +45 -0
- package/util/shaderfunctions/index.js +18 -0
- package/util/shaderfunctions/nodata.js +5 -0
- package/util/shaderfunctions/noisefunctions.js +13 -0
- package/util/surface-line-data/arc-bboxes.js +25 -0
- package/util/surface-line-data/arcs-to-cuts.js +53 -0
- package/util/surface-line-data/cut-arc.js +1 -0
- package/util/surface-line-data/flow.js +28 -0
- package/util/surface-line-data/rbush-manager.js +1 -0
- package/util/surface-line-data/types.js +1 -0
- package/util/surface-line-data/web-worker.js +1 -0
- package/util/webglobe/gldefaultstates.js +7 -0
- package/util/webglobe/index.js +18 -0
- package/util/webglobe/rasteroverlay.js +80 -0
- package/util/webglobjectbuilders.js +393 -0
- package/util/webglobjectbuilders1.js +238 -0
- package/waveparticles/adaptor.js +18 -0
- package/waveparticles/index.js +10 -0
- package/waveparticles/plugin.js +271 -0
- package/wind/imagetovectorfieldandmagnitude.js +35 -0
- package/wind/index.js +14 -0
- package/wind/plugin.js +724 -0
- package/wind/vectorfieldimage.js +25 -0
- package/write-text/attached-text-writer.js +93 -0
- package/write-text/context-text.js +105 -0
- package/write-text/context-text3.js +160 -0
- package/write-text/index.js +5 -0
- package/write-text/writer-plugin.js +8 -0
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CameraUniformBlockTotemCache = exports.WebglobeInfoUniformBlockString = void 0;
|
|
4
|
+
var programcache_1 = require("../programcache");
|
|
5
|
+
exports.WebglobeInfoUniformBlockString = "\nlayout(std140) uniform WebglobeInfo {\n vec2 canvas_resolution;\n vec2 mouse_radian_long_lat;\n vec2 mouse_pixel_xy;\n float north_angle;\n float world_tilt;\n float earth_distance;\n}; \n";
|
|
6
|
+
var CameraUniformBlockTotem = /** @class */ (function () {
|
|
7
|
+
function CameraUniformBlockTotem() {
|
|
8
|
+
this.id = "CameraUniformBlockTotem";
|
|
9
|
+
this.description = "Sets a uniform block and provides buffer for it. The following is the glsl uniform block:" + CameraUniformBlockString;
|
|
10
|
+
this.gl = null;
|
|
11
|
+
this.globe = null;
|
|
12
|
+
this.ubo = null;
|
|
13
|
+
}
|
|
14
|
+
CameraUniformBlockTotem.prototype.init = function (globe, gl) {
|
|
15
|
+
this.gl = gl;
|
|
16
|
+
this.globe = globe;
|
|
17
|
+
this.ubo = this._createUBO();
|
|
18
|
+
this.traslateFloat32 = new Float32Array(3);
|
|
19
|
+
this.mapWHFloat32 = new Float32Array(2);
|
|
20
|
+
this.setGeometry();
|
|
21
|
+
this.resize();
|
|
22
|
+
};
|
|
23
|
+
CameraUniformBlockTotem.prototype._createUBO = function () {
|
|
24
|
+
var gl = this.gl;
|
|
25
|
+
var ubo = gl.createBuffer();
|
|
26
|
+
gl.bindBuffer(gl.UNIFORM_BUFFER, ubo);
|
|
27
|
+
gl.bufferData(gl.UNIFORM_BUFFER, 164, gl.STREAM_DRAW);
|
|
28
|
+
gl.bindBufferBase(gl.UNIFORM_BUFFER, 0, ubo);
|
|
29
|
+
gl.bindBuffer(gl.UNIFORM_BUFFER, null);
|
|
30
|
+
return ubo;
|
|
31
|
+
};
|
|
32
|
+
CameraUniformBlockTotem.prototype.resize = function () {
|
|
33
|
+
var _a = this, gl = _a.gl, globe = _a.globe, ubo = _a.ubo;
|
|
34
|
+
gl.bindBuffer(gl.UNIFORM_BUFFER, ubo);
|
|
35
|
+
gl.bufferSubData(gl.UNIFORM_BUFFER, 152, new Float32Array([globe.api_ScrW(), globe.api_ScrH()]));
|
|
36
|
+
gl.bindBuffer(gl.UNIFORM_BUFFER, null);
|
|
37
|
+
};
|
|
38
|
+
CameraUniformBlockTotem.prototype.setGeometry = function () {
|
|
39
|
+
var _a = this, gl = _a.gl, globe = _a.globe, ubo = _a.ubo;
|
|
40
|
+
var is3D = globe.api_GetCurrentGeometry() === 0;
|
|
41
|
+
gl.bindBuffer(gl.UNIFORM_BUFFER, ubo);
|
|
42
|
+
gl.bufferSubData(gl.UNIFORM_BUFFER, 140, new Float32Array([is3D]));
|
|
43
|
+
};
|
|
44
|
+
CameraUniformBlockTotem.prototype.draw3D = function (projection, modelView, translate) {
|
|
45
|
+
var _a = this, gl = _a.gl, traslateFloat32 = _a.traslateFloat32, ubo = _a.ubo, mapWHFloat32 = _a.mapWHFloat32, globe = _a.globe;
|
|
46
|
+
gl.bindBuffer(gl.UNIFORM_BUFFER, ubo);
|
|
47
|
+
{ // view, projection, translate
|
|
48
|
+
gl.bufferSubData(gl.UNIFORM_BUFFER, 0, modelView);
|
|
49
|
+
gl.bufferSubData(gl.UNIFORM_BUFFER, 64, projection);
|
|
50
|
+
traslateFloat32.set([translate.x, translate.y, translate.z], 0);
|
|
51
|
+
gl.bufferSubData(gl.UNIFORM_BUFFER, 128, traslateFloat32);
|
|
52
|
+
}
|
|
53
|
+
{
|
|
54
|
+
// zoom level
|
|
55
|
+
gl.bufferSubData(gl.UNIFORM_BUFFER, 160, new Float32Array([globe.api_GetCurrentLODWithDecimal()]));
|
|
56
|
+
}
|
|
57
|
+
{ // mapWH
|
|
58
|
+
if (globe.api_GetCurrentGeometry() === 1) {
|
|
59
|
+
var _b = globe.api_GetCurrentWorldWH(), width = _b.width, height = _b.height;
|
|
60
|
+
mapWHFloat32.set([width, height]);
|
|
61
|
+
gl.bufferSubData(gl.UNIFORM_BUFFER, 144, mapWHFloat32);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
gl.bindBuffer(gl.UNIFORM_BUFFER, null);
|
|
65
|
+
};
|
|
66
|
+
CameraUniformBlockTotem.prototype.getUBO = function () {
|
|
67
|
+
return this.ubo;
|
|
68
|
+
};
|
|
69
|
+
CameraUniformBlockTotem.prototype.bind = function (bindingPoint) {
|
|
70
|
+
var _a = this, gl = _a.gl, ubo = _a.ubo;
|
|
71
|
+
gl.bindBufferBase(gl.UNIFORM_BUFFER, bindingPoint, ubo);
|
|
72
|
+
};
|
|
73
|
+
CameraUniformBlockTotem.prototype.unbind = function (bindingPoint) {
|
|
74
|
+
var gl = this.gl;
|
|
75
|
+
gl.bindBufferBase(gl.UNIFORM_BUFFER, bindingPoint, null);
|
|
76
|
+
};
|
|
77
|
+
CameraUniformBlockTotem.prototype.free = function () {
|
|
78
|
+
var _a = this, gl = _a.gl, ubo = _a.ubo;
|
|
79
|
+
gl.deleteBuffer(ubo);
|
|
80
|
+
};
|
|
81
|
+
CameraUniformBlockTotem.prototype.readBuffer = function () {
|
|
82
|
+
var result = new Float32Array(41);
|
|
83
|
+
this.gl.bindBuffer(this.gl.UNIFORM_BUFFER, this.ubo);
|
|
84
|
+
this.gl.getBufferSubData(this.gl.UNIFORM_BUFFER, 0, result);
|
|
85
|
+
this.gl.bindBuffer(this.gl.UNIFORM_BUFFER, null);
|
|
86
|
+
return {
|
|
87
|
+
view: result.slice(0, 16),
|
|
88
|
+
projection: result.slice(16, 32),
|
|
89
|
+
translate: result.slice(32, 35),
|
|
90
|
+
is3D: result[35],
|
|
91
|
+
mapWH: result.slice(36, 38),
|
|
92
|
+
screenWH: result.slice(38, 40),
|
|
93
|
+
z_level: result[40]
|
|
94
|
+
};
|
|
95
|
+
};
|
|
96
|
+
return CameraUniformBlockTotem;
|
|
97
|
+
}());
|
|
98
|
+
exports.default = CameraUniformBlockTotem;
|
|
99
|
+
exports.CameraUniformBlockTotemCache = Object.freeze({
|
|
100
|
+
get: function (globe) { return programcache_1.globeProgramCache.getProgram(globe, CameraUniformBlockTotem); },
|
|
101
|
+
release: function (globe) { return programcache_1.globeProgramCache.releaseProgram(globe, CameraUniformBlockTotem); }
|
|
102
|
+
});
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CameraUniformBlockTotemCache = exports.CameraUniformBlockString = void 0;
|
|
4
|
+
var programcache_1 = require("../programcache");
|
|
5
|
+
// Loads mouse position to buffer
|
|
6
|
+
// TODO implement it
|
|
7
|
+
exports.CameraUniformBlockString = "\nlayout(std140) uniform GpuSelectionUniformBlock {\n vec2 mouse_pixel_position;\n vec2 mouse_radian_long_lat;\n}; // 11 lines\n";
|
|
8
|
+
var CameraUniformBlockTotem = /** @class */ (function () {
|
|
9
|
+
function CameraUniformBlockTotem() {
|
|
10
|
+
this.id = "CameraUniformBlockTotem";
|
|
11
|
+
this.description = "Sets a uniform block and provides buffer for it. The following is the glsl uniform block:" + exports.CameraUniformBlockString;
|
|
12
|
+
this.gl = null;
|
|
13
|
+
this.globe = null;
|
|
14
|
+
this.ubo = null;
|
|
15
|
+
}
|
|
16
|
+
CameraUniformBlockTotem.prototype.init = function (globe, gl) {
|
|
17
|
+
this.gl = gl;
|
|
18
|
+
this.globe = globe;
|
|
19
|
+
this.ubo = this._createUBO();
|
|
20
|
+
this.traslateFloat32 = new Float32Array(3);
|
|
21
|
+
this.mapWHFloat32 = new Float32Array(2);
|
|
22
|
+
this.setGeometry();
|
|
23
|
+
this.resize();
|
|
24
|
+
};
|
|
25
|
+
CameraUniformBlockTotem.prototype._createUBO = function () {
|
|
26
|
+
var gl = this.gl;
|
|
27
|
+
var ubo = gl.createBuffer();
|
|
28
|
+
gl.bindBuffer(gl.UNIFORM_BUFFER, ubo);
|
|
29
|
+
gl.bufferData(gl.UNIFORM_BUFFER, 164, gl.STREAM_DRAW);
|
|
30
|
+
gl.bindBufferBase(gl.UNIFORM_BUFFER, 0, ubo);
|
|
31
|
+
gl.bindBuffer(gl.UNIFORM_BUFFER, null);
|
|
32
|
+
return ubo;
|
|
33
|
+
};
|
|
34
|
+
CameraUniformBlockTotem.prototype.resize = function () {
|
|
35
|
+
var _a = this, gl = _a.gl, globe = _a.globe, ubo = _a.ubo;
|
|
36
|
+
gl.bindBuffer(gl.UNIFORM_BUFFER, ubo);
|
|
37
|
+
gl.bufferSubData(gl.UNIFORM_BUFFER, 152, new Float32Array([globe.api_ScrW(), globe.api_ScrH()]));
|
|
38
|
+
gl.bindBuffer(gl.UNIFORM_BUFFER, null);
|
|
39
|
+
};
|
|
40
|
+
CameraUniformBlockTotem.prototype.setGeometry = function () {
|
|
41
|
+
var _a = this, gl = _a.gl, globe = _a.globe, ubo = _a.ubo;
|
|
42
|
+
var is3D = globe.api_GetCurrentGeometry() === 0;
|
|
43
|
+
gl.bindBuffer(gl.UNIFORM_BUFFER, ubo);
|
|
44
|
+
gl.bufferSubData(gl.UNIFORM_BUFFER, 140, new Float32Array([is3D]));
|
|
45
|
+
};
|
|
46
|
+
CameraUniformBlockTotem.prototype.draw3D = function (projection, modelView, translate) {
|
|
47
|
+
var _a = this, gl = _a.gl, traslateFloat32 = _a.traslateFloat32, ubo = _a.ubo, mapWHFloat32 = _a.mapWHFloat32, globe = _a.globe;
|
|
48
|
+
gl.bindBuffer(gl.UNIFORM_BUFFER, ubo);
|
|
49
|
+
{ // view, projection, translate
|
|
50
|
+
gl.bufferSubData(gl.UNIFORM_BUFFER, 0, modelView);
|
|
51
|
+
gl.bufferSubData(gl.UNIFORM_BUFFER, 64, projection);
|
|
52
|
+
traslateFloat32.set([translate.x, translate.y, translate.z], 0);
|
|
53
|
+
gl.bufferSubData(gl.UNIFORM_BUFFER, 128, traslateFloat32);
|
|
54
|
+
}
|
|
55
|
+
{
|
|
56
|
+
// zoom level
|
|
57
|
+
gl.bufferSubData(gl.UNIFORM_BUFFER, 160, new Float32Array([globe.api_GetCurrentLODWithDecimal()]));
|
|
58
|
+
}
|
|
59
|
+
{ // mapWH
|
|
60
|
+
if (globe.api_GetCurrentGeometry() === 1) {
|
|
61
|
+
var _b = globe.api_GetCurrentWorldWH(), width = _b.width, height = _b.height;
|
|
62
|
+
mapWHFloat32.set([width, height]);
|
|
63
|
+
gl.bufferSubData(gl.UNIFORM_BUFFER, 144, mapWHFloat32);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
gl.bindBuffer(gl.UNIFORM_BUFFER, null);
|
|
67
|
+
};
|
|
68
|
+
CameraUniformBlockTotem.prototype.getUBO = function () {
|
|
69
|
+
return this.ubo;
|
|
70
|
+
};
|
|
71
|
+
CameraUniformBlockTotem.prototype.bind = function (bindingPoint) {
|
|
72
|
+
var _a = this, gl = _a.gl, ubo = _a.ubo;
|
|
73
|
+
gl.bindBufferBase(gl.UNIFORM_BUFFER, bindingPoint, ubo);
|
|
74
|
+
};
|
|
75
|
+
CameraUniformBlockTotem.prototype.unbind = function (bindingPoint) {
|
|
76
|
+
var gl = this.gl;
|
|
77
|
+
gl.bindBufferBase(gl.UNIFORM_BUFFER, bindingPoint, null);
|
|
78
|
+
};
|
|
79
|
+
CameraUniformBlockTotem.prototype.free = function () {
|
|
80
|
+
var _a = this, gl = _a.gl, ubo = _a.ubo;
|
|
81
|
+
gl.deleteBuffer(ubo);
|
|
82
|
+
};
|
|
83
|
+
CameraUniformBlockTotem.prototype.readBuffer = function () {
|
|
84
|
+
var result = new Float32Array(41);
|
|
85
|
+
this.gl.bindBuffer(this.gl.UNIFORM_BUFFER, this.ubo);
|
|
86
|
+
this.gl.getBufferSubData(this.gl.UNIFORM_BUFFER, 0, result);
|
|
87
|
+
this.gl.bindBuffer(this.gl.UNIFORM_BUFFER, null);
|
|
88
|
+
return {
|
|
89
|
+
view: result.slice(0, 16),
|
|
90
|
+
projection: result.slice(16, 32),
|
|
91
|
+
translate: result.slice(32, 35),
|
|
92
|
+
is3D: result[35],
|
|
93
|
+
mapWH: result.slice(36, 38),
|
|
94
|
+
screenWH: result.slice(38, 40),
|
|
95
|
+
z_level: result[40]
|
|
96
|
+
};
|
|
97
|
+
};
|
|
98
|
+
return CameraUniformBlockTotem;
|
|
99
|
+
}());
|
|
100
|
+
exports.default = CameraUniformBlockTotem;
|
|
101
|
+
exports.CameraUniformBlockTotemCache = Object.freeze({
|
|
102
|
+
get: function (globe) { return programcache_1.globeProgramCache.getProgram(globe, CameraUniformBlockTotem); },
|
|
103
|
+
release: function (globe) { return programcache_1.globeProgramCache.releaseProgram(globe, CameraUniformBlockTotem); }
|
|
104
|
+
});
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.CameraUniformBlockTotemCache = exports.CameraUniformBlockString = exports.CameraUniformBlockTotem = void 0;
|
|
37
|
+
var camerauniformblock_1 = __importStar(require("./camerauniformblock"));
|
|
38
|
+
exports.CameraUniformBlockTotem = camerauniformblock_1.default;
|
|
39
|
+
Object.defineProperty(exports, "CameraUniformBlockString", { enumerable: true, get: function () { return camerauniformblock_1.CameraUniformBlockString; } });
|
|
40
|
+
Object.defineProperty(exports, "CameraUniformBlockTotemCache", { enumerable: true, get: function () { return camerauniformblock_1.CameraUniformBlockTotemCache; } });
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PixelPaddingForFlatCompassCache = void 0;
|
|
4
|
+
var util_1 = require("../../util");
|
|
5
|
+
var totems_1 = require("../totems");
|
|
6
|
+
var programcache_1 = require("../programcache");
|
|
7
|
+
var vertexCount = 720;
|
|
8
|
+
var vertexShaderSource = "#version 300 es\n".concat(totems_1.CameraUniformBlockString, "\n\nin vec2 screen_coordinate;\nin float pixel_radius_small_ratio;\nin float pixel_radius_big_ratio;\nin vec4 rgba;\nout vec4 v_rgba;\nuniform float plugin_opacity;\n\nvec3 coord_opacity(){\n float radius;\n float angle;\n float gap = (pixel_radius_big_ratio - pixel_radius_small_ratio);\n if( gl_VertexID % 2 == 0){\n // if( gl_VertexID % 180 == 0){\n // radius = pixel_radius_small_ratio ;\n // } else\n if ( gl_VertexID % 60 == 0){\n radius = pixel_radius_small_ratio; \n } else if( gl_VertexID % 10 == 0) {\n radius = pixel_radius_small_ratio + gap * 0.5;\n } else {\n radius = pixel_radius_small_ratio + gap* 0.75;\n }\n angle = (float(gl_VertexID) / (").concat(vertexCount, ".0));\n } else {\n if ( gl_VertexID % 180 == 1){\n radius = pixel_radius_big_ratio + gap * 0.1;\n\n } else {\n radius = pixel_radius_big_ratio;\n }\n angle = (float(gl_VertexID - 1) / (").concat(vertexCount, ".0));\n }\n float opacity = fract(angle + 0.2475) / 1.5 + 0.33;\n angle = angle * ").concat(Math.PI * 2.0, " + world_north_angle;\n radius = radius * min(screenWH.x, screenWH.y) / 2.0;;\n return vec3( screen_coordinate + vec2( cos(angle), sin(angle)) * radius, opacity);\n}\n\nvec2 adjust_pos(vec2 pos) {\n return vec2(\n (pos.x / screenWH.x - 0.5) * 2.0,\n (0.5 - pos.y / screenWH.y) * 2.0\n );\n}\n\nvoid main(){\n vec3 c = coord_opacity();\n gl_Position = vec4( adjust_pos(c.xy), 0.0, 1.0);\n v_rgba = rgba;\n v_rgba.a *= plugin_opacity;\n gl_PointSize = 10.0;\n}\n");
|
|
9
|
+
var fragmentShaderSource = "#version 300 es\nprecision highp float;\nin vec4 v_rgba;\nout vec4 color;\nvoid main(){\n color = v_rgba;\n}\n";
|
|
10
|
+
var Logic = /** @class */ (function () {
|
|
11
|
+
function Logic(globe) {
|
|
12
|
+
this.globe = globe;
|
|
13
|
+
this.gl = globe.gl;
|
|
14
|
+
this._lastOpacity = 1;
|
|
15
|
+
this.program = (0, util_1.createProgram)(this.gl, vertexShaderSource, fragmentShaderSource);
|
|
16
|
+
var _a = this, gl = _a.gl, program = _a.program;
|
|
17
|
+
{ // assign attribute locations
|
|
18
|
+
// in vec2 screen_coordinate;
|
|
19
|
+
// in float pixel_radius_small_ratio;
|
|
20
|
+
// in float pixel_radius_big_ratio;
|
|
21
|
+
// in vec4 rgba;
|
|
22
|
+
gl.bindAttribLocation(program, 0, "screen_coordinate");
|
|
23
|
+
gl.bindAttribLocation(program, 1, "pixel_radius_small_ratio");
|
|
24
|
+
gl.bindAttribLocation(program, 2, "pixel_radius_big_ratio");
|
|
25
|
+
gl.bindAttribLocation(program, 3, "rgba");
|
|
26
|
+
}
|
|
27
|
+
{
|
|
28
|
+
this._opacityLocation = gl.getUniformLocation(program, "plugin_opacity");
|
|
29
|
+
var currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);
|
|
30
|
+
gl.useProgram(program);
|
|
31
|
+
gl.uniform1f(this._opacityLocation, this._lastOpacity);
|
|
32
|
+
gl.useProgram(currentProgram);
|
|
33
|
+
}
|
|
34
|
+
{
|
|
35
|
+
this.cameraBlockBindingPoint = 0;
|
|
36
|
+
var cameraBlockIndex = gl.getUniformBlockIndex(program, "CameraUniformBlock");
|
|
37
|
+
this.cameraBlockTotem = totems_1.CameraUniformBlockTotemCache.get(globe);
|
|
38
|
+
gl.uniformBlockBinding(program, cameraBlockIndex, this.cameraBlockBindingPoint);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
Logic.prototype.draw = function (vao, length, opacity) {
|
|
42
|
+
var _a = this, globe = _a.globe, gl = _a.gl, program = _a.program, cameraBlockTotem = _a.cameraBlockTotem, cameraBlockBindingPoint = _a.cameraBlockBindingPoint, _opacityLocation = _a._opacityLocation;
|
|
43
|
+
if (globe.api_GetCurrentGeometry() === 0)
|
|
44
|
+
return;
|
|
45
|
+
gl.useProgram(program);
|
|
46
|
+
cameraBlockTotem.bind(cameraBlockBindingPoint);
|
|
47
|
+
if (opacity !== this._lastOpacity) {
|
|
48
|
+
this._lastOpacity = opacity;
|
|
49
|
+
gl.uniform1f(_opacityLocation, opacity);
|
|
50
|
+
}
|
|
51
|
+
gl.bindVertexArray(vao);
|
|
52
|
+
gl.drawArraysInstanced(gl.LINES, 0, vertexCount, length);
|
|
53
|
+
gl.bindVertexArray(null);
|
|
54
|
+
cameraBlockTotem.unbind(cameraBlockBindingPoint);
|
|
55
|
+
};
|
|
56
|
+
Logic.prototype.createVAO = function (screenCoordsBufferObj, pixelRadiusRatioSmallBufferObj, pixelRadiusRatioBigBufferObj, rgbaBufferObj) {
|
|
57
|
+
var gl = this.gl;
|
|
58
|
+
var vao = gl.createVertexArray();
|
|
59
|
+
gl.bindVertexArray(vao);
|
|
60
|
+
{
|
|
61
|
+
var buffer = screenCoordsBufferObj.buffer, _a = screenCoordsBufferObj.stride, stride = _a === void 0 ? 0 : _a, _b = screenCoordsBufferObj.offset, offset = _b === void 0 ? 0 : _b;
|
|
62
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
|
|
63
|
+
gl.enableVertexAttribArray(0);
|
|
64
|
+
gl.vertexAttribPointer(0, 2, gl.FLOAT, false, stride, offset);
|
|
65
|
+
gl.vertexAttribDivisor(0, 1);
|
|
66
|
+
}
|
|
67
|
+
{
|
|
68
|
+
var buffer = pixelRadiusRatioSmallBufferObj.buffer, _c = pixelRadiusRatioSmallBufferObj.stride, stride = _c === void 0 ? 0 : _c, _d = pixelRadiusRatioSmallBufferObj.offset, offset = _d === void 0 ? 0 : _d;
|
|
69
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
|
|
70
|
+
gl.enableVertexAttribArray(1);
|
|
71
|
+
gl.vertexAttribPointer(1, 1, gl.FLOAT, false, stride, offset);
|
|
72
|
+
gl.vertexAttribDivisor(1, 1);
|
|
73
|
+
}
|
|
74
|
+
{
|
|
75
|
+
var buffer = pixelRadiusRatioBigBufferObj.buffer, _e = pixelRadiusRatioBigBufferObj.stride, stride = _e === void 0 ? 0 : _e, _f = pixelRadiusRatioBigBufferObj.offset, offset = _f === void 0 ? 0 : _f;
|
|
76
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
|
|
77
|
+
gl.enableVertexAttribArray(2);
|
|
78
|
+
gl.vertexAttribPointer(2, 1, gl.FLOAT, false, stride, offset);
|
|
79
|
+
gl.vertexAttribDivisor(2, 1);
|
|
80
|
+
}
|
|
81
|
+
{
|
|
82
|
+
var buffer = rgbaBufferObj.buffer, _g = rgbaBufferObj.stride, stride = _g === void 0 ? 0 : _g, _h = rgbaBufferObj.offset, offset = _h === void 0 ? 0 : _h;
|
|
83
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
|
|
84
|
+
gl.enableVertexAttribArray(3);
|
|
85
|
+
gl.vertexAttribPointer(3, 4, gl.FLOAT, false, stride, offset);
|
|
86
|
+
gl.vertexAttribDivisor(3, 1);
|
|
87
|
+
}
|
|
88
|
+
gl.bindVertexArray(null);
|
|
89
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, null);
|
|
90
|
+
return vao;
|
|
91
|
+
};
|
|
92
|
+
Logic.prototype.free = function () {
|
|
93
|
+
var globe = this.globe;
|
|
94
|
+
totems_1.CameraUniformBlockTotemCache.release(globe);
|
|
95
|
+
};
|
|
96
|
+
return Logic;
|
|
97
|
+
}());
|
|
98
|
+
exports.PixelPaddingForFlatCompassCache = Object.freeze({
|
|
99
|
+
get: function (globe) { return programcache_1.noRegisterGlobeProgramCache.getProgram(globe, Logic); },
|
|
100
|
+
release: function (globe) { return programcache_1.noRegisterGlobeProgramCache.releaseProgram(globe, Logic); }
|
|
101
|
+
});
|
package/programs/util.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.longlatbbox2normalbbox = longlatbbox2normalbbox;
|
|
4
|
+
function longlatbbox2normalbbox(_a) {
|
|
5
|
+
var _b = _a === void 0 ? {} : _a, _c = _b.minLon, minLon = _c === void 0 ? -180 : _c, _d = _b.maxLon, maxLon = _d === void 0 ? 180 : _d, _e = _b.minLat, minLat = _e === void 0 ? -90 : _e, _f = _b.maxLat, maxLat = _f === void 0 ? 90 : _f;
|
|
6
|
+
// x
|
|
7
|
+
var horOffset = (minLon) * Math.PI / 180;
|
|
8
|
+
var horSize = (maxLon - minLon) * Math.PI / 180;
|
|
9
|
+
// y
|
|
10
|
+
var vertOffset = (90 - maxLat) * Math.PI / 180;
|
|
11
|
+
var vertSize = (maxLat - minLat) * Math.PI / 180;
|
|
12
|
+
var result = {
|
|
13
|
+
bboxOffsetRad: new Float32Array([horOffset, vertOffset]),
|
|
14
|
+
bboxSizeRad: new Float32Array([horSize, vertSize])
|
|
15
|
+
};
|
|
16
|
+
console.log("longlatbbox2normalbbox", result);
|
|
17
|
+
return result;
|
|
18
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
17
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
18
|
+
};
|
|
19
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
exports.PingPongBufferManager = void 0;
|
|
21
|
+
var pingpongbuffermanager_1 = __importDefault(require("./pingpongbuffermanager"));
|
|
22
|
+
exports.PingPongBufferManager = pingpongbuffermanager_1.default;
|
|
23
|
+
__exportStar(require("./logics"), exports);
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
var util_1 = require("../../../util");
|
|
4
|
+
var ubo_js_1 = require("./ubo.js");
|
|
5
|
+
var programcache_1 = require("../../programcache");
|
|
6
|
+
/**
|
|
7
|
+
* [+] ubo
|
|
8
|
+
*/
|
|
9
|
+
var vertexShaderSource = "#version 300 es\nprecision highp float;\n" + ubo_js_1.shaderUboSource + "\nuniform sampler2D u_vector_field;\nin vec2 in_position;\nout vec3 base_color;\nvec2 lookup_wind(const vec2 uv) { // gerek kalmayabilir. sampler linear methodu ayni isi yapiyor \n // return texture(u_vector_field, uv).rg; // lower-res hardware filtering\n vec2 res = vec2(textureSize(u_vector_field, 0));\n vec2 px = 1.0 / res;\n vec2 vc = (floor(uv * res)) * px;\n vec2 f = fract(uv * res);\n vec2 tl = texture(u_vector_field, vc).rg;\n vec2 tr = texture(u_vector_field, vc + vec2(px.x, 0)).rg;\n vec2 bl = texture(u_vector_field, vc + vec2(0, px.y)).rg;\n vec2 br = texture(u_vector_field, vc + px).rg;\n return mix(mix(tl, tr, f.x), mix(bl, br, f.x), f.y);\n}\n\n\nvoid main(){\n vec2 direction_vector = lookup_wind(in_position);\n if (direction_vector.r == 0.0 && direction_vector.g == 0.0){ return;}\n\n vec2 limp;\n if ( 0 == gl_VertexID) { limp = -tail_wing_base_limp; }\n else if ( 1 == gl_VertexID) { limp = vec2( tail_wing_base_limp.x, -tail_wing_base_limp.y); }\n else if ( 2 == gl_VertexID) { limp = tail_wing_base_limp; }\n else { limp = vec2(-tail_wing_base_limp.x, tail_wing_base_limp.y); } // if ( 3 == gl_VertexID)\n\n limp = (limp * mat2( \n direction_vector.x, -direction_vector.y,\n direction_vector.y, direction_vector.x)) / draw_texture_size;\n\n vec2 pos = in_position * 2.0 - 1.0;\n gl_Position = vec4(pos + limp, 0.0, 1.0);\n base_color = color;\n}";
|
|
10
|
+
var fragmentShaderSource = "#version 300 es\nprecision highp float;\nout vec4 outColor;\nin vec3 base_color;\nvoid main(){\n outColor = vec4(base_color, 1.0);\n}";
|
|
11
|
+
var Logic = /** @class */ (function () {
|
|
12
|
+
function Logic(gl) {
|
|
13
|
+
var _a;
|
|
14
|
+
this.gl = gl;
|
|
15
|
+
_a = this._createProgram(), this.program = _a[0], this._vector_field_location = _a[1];
|
|
16
|
+
// this.decoyBuffer = new DecoyBufferManager(gl);
|
|
17
|
+
}
|
|
18
|
+
Logic.prototype._createProgram = function () {
|
|
19
|
+
var gl = this.gl;
|
|
20
|
+
var program = (0, util_1.createProgram)(gl, vertexShaderSource, fragmentShaderSource);
|
|
21
|
+
// ubo point
|
|
22
|
+
var ubo_location = gl.getUniformBlockIndex(program, 'UBO');
|
|
23
|
+
gl.uniformBlockBinding(program, ubo_location, ubo_js_1.UBO_BINDING_POINT);
|
|
24
|
+
return [program, gl.getUniformLocation(program, 'u_vector_field')];
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* @param {*} bufferManager | PingPongBufferManager
|
|
28
|
+
* @param {*} vectorTexture | RG32F texture R: x, G: y
|
|
29
|
+
* @param {*} uboManager | WaveParticalUboManager under ubo.js
|
|
30
|
+
*/
|
|
31
|
+
Logic.prototype.draw = function (bufferManager, vectorTexture, uboManager) {
|
|
32
|
+
var _a = this, gl = _a.gl, program = _a.program;
|
|
33
|
+
gl.useProgram(program);
|
|
34
|
+
gl.bindVertexArray(bufferManager.getSourceVao());
|
|
35
|
+
// gl.bindVertexArray(this.decoyBuffer.getSourceVao());
|
|
36
|
+
uboManager.bind();
|
|
37
|
+
gl.activeTexture(gl.TEXTURE0);
|
|
38
|
+
gl.uniform1i(this._vector_field_location, 0);
|
|
39
|
+
gl.bindTexture(gl.TEXTURE_2D, vectorTexture);
|
|
40
|
+
gl.drawArraysInstanced(gl.TRIANGLE_FAN, 0, 4, bufferManager.length);
|
|
41
|
+
gl.drawArraysInstanced(gl.POINTS, 0, 4, bufferManager.length);
|
|
42
|
+
gl.bindVertexArray(null);
|
|
43
|
+
uboManager.unbind();
|
|
44
|
+
};
|
|
45
|
+
Logic.prototype.free = function () {
|
|
46
|
+
this.gl.deleteProgram(this.program);
|
|
47
|
+
this.program = null;
|
|
48
|
+
};
|
|
49
|
+
return Logic;
|
|
50
|
+
}());
|
|
51
|
+
var default_1 = /** @class */ (function () {
|
|
52
|
+
function default_1(gl) {
|
|
53
|
+
this.gl = gl;
|
|
54
|
+
this.logic = programcache_1.glProgramCache.getProgram(gl, Logic);
|
|
55
|
+
}
|
|
56
|
+
default_1.prototype.draw = function (bufferManager, vectorTexture, uboManager) {
|
|
57
|
+
this.logic.draw(bufferManager, vectorTexture, uboManager);
|
|
58
|
+
};
|
|
59
|
+
default_1.prototype.free = function () {
|
|
60
|
+
programcache_1.glProgramCache.releaseProgram(this.gl, Logic);
|
|
61
|
+
this.logic = null;
|
|
62
|
+
this.gl = null;
|
|
63
|
+
};
|
|
64
|
+
return default_1;
|
|
65
|
+
}());
|
|
66
|
+
exports.default = default_1;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.WaveParticalUboManager = exports.DrawRectangleParticles = exports.PixelBasedMove = void 0;
|
|
7
|
+
var pixelbased_1 = __importDefault(require("./pixelbased"));
|
|
8
|
+
exports.PixelBasedMove = pixelbased_1.default;
|
|
9
|
+
var drawrectangleparticles_1 = __importDefault(require("./drawrectangleparticles"));
|
|
10
|
+
exports.DrawRectangleParticles = drawrectangleparticles_1.default;
|
|
11
|
+
var ubo_1 = require("./ubo");
|
|
12
|
+
Object.defineProperty(exports, "WaveParticalUboManager", { enumerable: true, get: function () { return ubo_1.WaveParticalUboManager; } });
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
var util_1 = require("../../../util");
|
|
4
|
+
var ubo_js_1 = require("./ubo.js");
|
|
5
|
+
var programcache_1 = require("../../programcache");
|
|
6
|
+
// program output is buffer
|
|
7
|
+
// TODO: Mechanism for randomness
|
|
8
|
+
// drop out mechanism
|
|
9
|
+
// random particle position mechanism
|
|
10
|
+
var vertexShaderSource = "#version 300 es\n" + ubo_js_1.shaderUboSource + "\n\nuniform sampler2D vector_field;\nin vec2 in_position;\nout vec2 out_position;\n\n// float random(vec2 st){\n// float t = dot(st, vec2(12.9898,78.233));\n// return fract(sin(t) * (t+43758.5453123));\n// }\n\n\nconst vec3 rand_constants = vec3(12.9898, 78.233, 4375.85453);\nfloat random(const vec2 co) {\n float t = dot(rand_constants.xy, co);\n return fract(sin(t) * (rand_constants.z + t));\n}\n\nvec2 lookup_wind(const vec2 uv) { // gerek kalmayabilir. sampler linear methodu ayni isi yapiyor\n // return texture(vector_field, uv).rg; // lower-res hardware filtering\n vec2 res = vec2(textureSize(vector_field, 0));\n if (res.x == 0.0 || res.y == 0.0){ return vec2(0.0);}\n vec2 px = 1.0 / res;\n vec2 vc = (floor(uv * res)) * px;\n vec2 f = fract(uv * res);\n vec2 tl = texture(vector_field, vc).rg;\n vec2 tr = texture(vector_field, vc + vec2(px.x, 0)).rg;\n vec2 bl = texture(vector_field, vc + vec2(0, px.y)).rg;\n vec2 br = texture(vector_field, vc + px).rg;\n if (tl.x == 0.0 && tl.y == 0.0){ return vec2(0.0);}\n if (tr.x == 0.0 && tr.y == 0.0){ return vec2(0.0);}\n if (bl.x == 0.0 && bl.y == 0.0){ return vec2(0.0);}\n if (br.x == 0.0 && br.y == 0.0){ return vec2(0.0);}\n return mix(mix(tl, tr, f.x), mix(bl, br, f.x), f.y);\n}\n\n\nvec2 random_position(vec2 st){\n return vec2(random(st), random(st + 1.0));\n}\n\n\nvoid main(){\n vec2 vec = lookup_wind(in_position).xy;\n if (vec.x == 0.0 && vec.y == 0.0){\n out_position = random_position(in_position);\n return;\n }\n float random_value = random(in_position + random_seed);\n if (random_value < drop_rate){ //TODO: more sophisticated drop out mechanism mi\n out_position = random_position(in_position);\n return;\n }\n out_position = in_position - (vec / draw_texture_size) * range; //*0.0014\n}\n";
|
|
11
|
+
var fragmentShaderSource = "#version 300 es\nprecision highp float;\nvoid main(){\n}";
|
|
12
|
+
var Logic = /** @class */ (function () {
|
|
13
|
+
function Logic(gl) {
|
|
14
|
+
var _a;
|
|
15
|
+
this.gl = gl;
|
|
16
|
+
_a = this._createProgram(), this.program = _a[0], this._vector_field_location = _a[1];
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* @param {*} bufferManager | PingPongBufferManager
|
|
20
|
+
* @param {*} vectorTexture RG32F texture R: x, G: y
|
|
21
|
+
* @param {*} uboManager | WaveParticalUboManager under ubo.js
|
|
22
|
+
*/
|
|
23
|
+
Logic.prototype.move = function (bufferManager, vectorTexture, uboManager) {
|
|
24
|
+
var _a = this, gl = _a.gl, program = _a.program, _vector_field_location = _a._vector_field_location;
|
|
25
|
+
gl.useProgram(program);
|
|
26
|
+
gl.enable(gl.RASTERIZER_DISCARD);
|
|
27
|
+
gl.bindVertexArray(bufferManager.getSourceVao());
|
|
28
|
+
gl.bindTransformFeedback(gl.TRANSFORM_FEEDBACK, bufferManager.getTargetTF());
|
|
29
|
+
gl.beginTransformFeedback(gl.POINTS);
|
|
30
|
+
uboManager.bind();
|
|
31
|
+
gl.activeTexture(gl.TEXTURE0);
|
|
32
|
+
gl.bindTexture(gl.TEXTURE_2D, vectorTexture);
|
|
33
|
+
gl.uniform1i(_vector_field_location, 0);
|
|
34
|
+
gl.drawArraysInstanced(gl.POINTS, 0, 1, bufferManager.length);
|
|
35
|
+
gl.endTransformFeedback();
|
|
36
|
+
gl.bindTransformFeedback(gl.TRANSFORM_FEEDBACK, null);
|
|
37
|
+
gl.bindVertexArray(null);
|
|
38
|
+
uboManager.unbind();
|
|
39
|
+
gl.disable(gl.RASTERIZER_DISCARD);
|
|
40
|
+
};
|
|
41
|
+
// -- private methods
|
|
42
|
+
Logic.prototype._createProgram = function () {
|
|
43
|
+
var gl = this.gl;
|
|
44
|
+
var vertexShader = (0, util_1.createShader)(gl, gl.VERTEX_SHADER, vertexShaderSource);
|
|
45
|
+
var fragmentShader = (0, util_1.createShader)(gl, gl.FRAGMENT_SHADER, fragmentShaderSource);
|
|
46
|
+
var program = gl.createProgram();
|
|
47
|
+
gl.attachShader(program, vertexShader);
|
|
48
|
+
gl.attachShader(program, fragmentShader);
|
|
49
|
+
gl.transformFeedbackVaryings(program, ["out_position"], gl.SEPARATE_ATTRIBS);
|
|
50
|
+
gl.linkProgram(program);
|
|
51
|
+
if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {
|
|
52
|
+
throw new Error(gl.getProgramParameter(program));
|
|
53
|
+
}
|
|
54
|
+
var ubo_location = gl.getUniformBlockIndex(program, 'UBO');
|
|
55
|
+
gl.uniformBlockBinding(program, ubo_location, ubo_js_1.UBO_BINDING_POINT);
|
|
56
|
+
return [program, gl.getUniformLocation(program, 'vector_field')];
|
|
57
|
+
;
|
|
58
|
+
};
|
|
59
|
+
Logic.prototype.free = function () {
|
|
60
|
+
this.gl.deleteProgram(this.program);
|
|
61
|
+
this.program = null;
|
|
62
|
+
};
|
|
63
|
+
Logic.prototype.getInPositionLocation = function () {
|
|
64
|
+
return this.gl.getAttribLocation(this.program, 'in_position');
|
|
65
|
+
};
|
|
66
|
+
return Logic;
|
|
67
|
+
}());
|
|
68
|
+
var default_1 = /** @class */ (function () {
|
|
69
|
+
function default_1(gl) {
|
|
70
|
+
this.gl = gl;
|
|
71
|
+
this.logic = programcache_1.glProgramCache.getProgram(gl, Logic);
|
|
72
|
+
}
|
|
73
|
+
default_1.prototype.move = function (bufferManager, vectorTexture, uboManager) {
|
|
74
|
+
this.logic.move(bufferManager, vectorTexture, uboManager);
|
|
75
|
+
};
|
|
76
|
+
default_1.prototype.free = function () {
|
|
77
|
+
programcache_1.glProgramCache.releaseProgram(this.gl, Logic);
|
|
78
|
+
this.program = null;
|
|
79
|
+
this.gl = null;
|
|
80
|
+
};
|
|
81
|
+
default_1.prototype.getInPositionLocation = function () {
|
|
82
|
+
return this.logic.getInPositionLocation();
|
|
83
|
+
};
|
|
84
|
+
return default_1;
|
|
85
|
+
}());
|
|
86
|
+
exports.default = default_1;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.shaderUboSource = exports.UBO_BINDING_POINT = exports.UBO_SIZE = exports.WaveParticalUboManager = void 0;
|
|
4
|
+
var UBO_BINDING_POINT = 0;
|
|
5
|
+
exports.UBO_BINDING_POINT = UBO_BINDING_POINT;
|
|
6
|
+
var INITIAL_UBO_DATA = new Float32Array([93.17, 0.2, 1.0, 7.0, 1.0, 1.0, 1.0, 0.05, 2000, 2000]);
|
|
7
|
+
var shaderUboSource = "\nlayout(std140) uniform UBO {\n float random_seed;\n float range;\n vec2 tail_wing_base_limp;\n vec3 color;\n float drop_rate;\n vec2 draw_texture_size;\n};";
|
|
8
|
+
exports.shaderUboSource = shaderUboSource;
|
|
9
|
+
var UBO_SIZE = 40;
|
|
10
|
+
exports.UBO_SIZE = UBO_SIZE;
|
|
11
|
+
var WaveParticalUboManager = /** @class */ (function () {
|
|
12
|
+
function WaveParticalUboManager(gl) {
|
|
13
|
+
this.gl = gl;
|
|
14
|
+
this.ubo = this._createBuffer();
|
|
15
|
+
this._data = null;
|
|
16
|
+
}
|
|
17
|
+
WaveParticalUboManager.prototype.update = function (_a) {
|
|
18
|
+
var range = _a.range, random_seed = _a.random_seed, tail_wing_base_limp = _a.tail_wing_base_limp, draw_texture_size = _a.draw_texture_size, drop_rate = _a.drop_rate, color = _a.color;
|
|
19
|
+
var _b = this, gl = _b.gl, ubo = _b.ubo;
|
|
20
|
+
gl.bindBuffer(gl.UNIFORM_BUFFER, ubo);
|
|
21
|
+
if (random_seed !== undefined)
|
|
22
|
+
gl.bufferSubData(gl.UNIFORM_BUFFER, 0, new Float32Array([random_seed]));
|
|
23
|
+
if (range !== undefined)
|
|
24
|
+
gl.bufferSubData(gl.UNIFORM_BUFFER, 4, new Float32Array([range]));
|
|
25
|
+
if (tail_wing_base_limp !== undefined)
|
|
26
|
+
gl.bufferSubData(gl.UNIFORM_BUFFER, 8, new Float32Array(tail_wing_base_limp));
|
|
27
|
+
if (color !== undefined)
|
|
28
|
+
gl.bufferSubData(gl.UNIFORM_BUFFER, 16, new Float32Array(color));
|
|
29
|
+
if (drop_rate !== undefined)
|
|
30
|
+
gl.bufferSubData(gl.UNIFORM_BUFFER, 28, new Float32Array([drop_rate]));
|
|
31
|
+
if (draw_texture_size !== undefined)
|
|
32
|
+
gl.bufferSubData(gl.UNIFORM_BUFFER, 32, new Float32Array(draw_texture_size));
|
|
33
|
+
gl.bindBuffer(gl.UNIFORM_BUFFER, null);
|
|
34
|
+
};
|
|
35
|
+
WaveParticalUboManager.prototype._createBuffer = function () {
|
|
36
|
+
var gl = this.gl;
|
|
37
|
+
var buffer = gl.createBuffer();
|
|
38
|
+
gl.bindBuffer(gl.UNIFORM_BUFFER, buffer);
|
|
39
|
+
gl.bufferData(gl.UNIFORM_BUFFER, INITIAL_UBO_DATA, gl.STATIC_DRAW);
|
|
40
|
+
gl.bindBuffer(gl.UNIFORM_BUFFER, null);
|
|
41
|
+
return buffer;
|
|
42
|
+
};
|
|
43
|
+
WaveParticalUboManager.prototype.bind = function () {
|
|
44
|
+
var _a = this, gl = _a.gl, ubo = _a.ubo;
|
|
45
|
+
gl.bindBufferBase(gl.UNIFORM_BUFFER, UBO_BINDING_POINT, ubo);
|
|
46
|
+
};
|
|
47
|
+
WaveParticalUboManager.prototype.unbind = function () {
|
|
48
|
+
var gl = this.gl;
|
|
49
|
+
gl.bindBufferBase(gl.UNIFORM_BUFFER, UBO_BINDING_POINT, null);
|
|
50
|
+
};
|
|
51
|
+
WaveParticalUboManager.prototype.free = function () {
|
|
52
|
+
var _a = this, gl = _a.gl, _buffer = _a._buffer;
|
|
53
|
+
gl.deleteBuffer(_buffer);
|
|
54
|
+
};
|
|
55
|
+
return WaveParticalUboManager;
|
|
56
|
+
}());
|
|
57
|
+
exports.WaveParticalUboManager = WaveParticalUboManager;
|