@pirireis/webglobeplugins 0.9.10 → 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 +8 -8
- package/Math/arc.js +18 -18
- package/Math/bounds/line-bbox.js +80 -78
- package/Math/constants.js +3 -3
- package/Math/juction/arc-plane.js +23 -23
- package/Math/juction/line-sphere.js +11 -11
- package/Math/juction/plane-plane.js +11 -11
- package/Math/line.js +16 -14
- package/Math/methods.js +72 -67
- package/Math/plane.js +18 -16
- package/Math/quaternion.js +49 -45
- package/Math/utils.js +2 -2
- package/Math/vec3.js +45 -42
- package/algorithms/search-binary.js +4 -4
- package/altitude-locator/draw-subset-obj.js +8 -7
- package/altitude-locator/plugin.js +113 -97
- package/arrowfield/adaptor.js +4 -3
- package/arrowfield/index.js +2 -2
- package/arrowfield/plugin.js +65 -62
- package/bearing-line/index.js +1 -1
- package/bearing-line/plugin.js +225 -200
- package/circle-line-chain/chain-list-map.js +88 -82
- package/circle-line-chain/plugin.js +154 -129
- package/circle-line-chain/util.js +1 -1
- package/compass-rose/compass-rose-padding-flat.js +126 -104
- package/compass-rose/compass-text-writer.js +70 -62
- package/compass-rose/index.js +2 -2
- package/compassrose/compassrose.js +50 -46
- package/compassrose/index.js +1 -1
- package/heatwave/index.js +2 -2
- package/heatwave/isobar/objectarraylabels.js +48 -44
- package/heatwave/isobar/plugin.js +123 -104
- package/heatwave/isobar/quadtreecontours.js +92 -76
- package/heatwave/plugins/heatwaveglobeshell.js +87 -69
- package/index.js +11 -11
- package/package.json +1 -1
- package/partialrings/buffer-manager.js +64 -32
- package/partialrings/index.js +1 -1
- package/partialrings/plugin.js +84 -48
- package/partialrings/program.js +47 -136
- package/pin/pin-object-array.js +86 -83
- package/pin/pin-point-totem.js +22 -21
- package/point-heat-map/adaptors/timetracksplugin-format-to-this.js +10 -10
- package/point-heat-map/plugin-webworker.js +45 -40
- package/point-heat-map/point-to-heat-map-flow.js +42 -40
- package/point-tracks/key-methods.js +1 -1
- package/point-tracks/plugin.js +142 -127
- package/programs/arrowfield/index.js +1 -1
- package/programs/arrowfield/logic.js +62 -170
- package/programs/arrowfield/object.js +35 -33
- package/programs/data2legend/density-to-legend.js +21 -45
- package/programs/data2legend/point-to-density-texture.js +27 -52
- package/programs/float2legendwithratio/index.js +1 -1
- package/programs/float2legendwithratio/logic.js +42 -88
- package/programs/float2legendwithratio/object.js +46 -43
- package/programs/globe-util/is-globe-moved.js +11 -10
- package/programs/globeshell/index.js +1 -1
- package/programs/globeshell/wiggle/index.js +1 -1
- package/programs/globeshell/wiggle/logic.js +98 -191
- package/programs/globeshell/wiggle/object.js +35 -33
- package/programs/helpers/blender/program.js +19 -36
- package/programs/helpers/fadeaway/index.js +1 -1
- package/programs/helpers/fadeaway/logic.js +13 -35
- package/programs/helpers/fadeaway/object.js +10 -9
- package/programs/helpers/index.js +1 -1
- package/programs/index.js +8 -8
- package/programs/line-on-globe/angled-line.js +32 -91
- package/programs/line-on-globe/circle-accurate-3d.js +32 -82
- package/programs/line-on-globe/circle-accurate-flat.js +50 -108
- package/programs/line-on-globe/circle-accurate.js +33 -103
- package/programs/line-on-globe/circle.js +32 -97
- package/programs/line-on-globe/degree-padding-around-circle-3d.js +33 -83
- package/programs/line-on-globe/lines-color-instanced-flat.js +34 -79
- package/programs/line-on-globe/linestrip.js +39 -100
- package/programs/line-on-globe/naive-accurate-flexible.js +48 -118
- package/programs/line-on-globe/to-the-surface.js +29 -58
- package/programs/line-on-globe/util.js +1 -1
- package/programs/picking/pickable-renderer.js +33 -117
- package/programs/point-on-globe/element-globe-surface-glow.js +38 -78
- package/programs/point-on-globe/element-point-glow.js +35 -103
- package/programs/point-on-globe/square-pixel-point.js +27 -76
- package/programs/programcache.js +13 -13
- package/programs/rings/distancering/circleflatprogram.js +21 -63
- package/programs/rings/distancering/circlepaddingfreeangleprogram.js +145 -156
- package/programs/rings/distancering/circlepaddysharedbuffer.js +197 -121
- package/programs/rings/distancering/index.js +4 -4
- package/programs/rings/distancering/paddyflatprogram.js +20 -73
- package/programs/rings/distancering/paddyflatprogram2d.js +22 -75
- package/programs/rings/distancering/paddyflatprogram3d.js +20 -73
- package/programs/rings/partial-ring/piece-of-pie.js +35 -137
- package/programs/totems/camerauniformblock.js +51 -64
- package/programs/totems/canvas-webglobe-info.js +40 -48
- package/programs/totems/gpu-selection-uniform-block.js +40 -44
- package/programs/totems/index.js +1 -1
- package/programs/two-d/pixel-padding-for-compass.js +29 -90
- package/programs/util.js +7 -6
- package/programs/vectorfields/index.js +1 -1
- package/programs/vectorfields/logics/drawrectangleparticles.js +29 -70
- package/programs/vectorfields/logics/index.js +3 -3
- package/programs/vectorfields/logics/pixelbased.js +35 -91
- package/programs/vectorfields/logics/ubo.js +25 -31
- package/programs/vectorfields/pingpongbuffermanager.js +34 -30
- package/rangerings/index.js +4 -4
- package/rangerings/plugin.js +252 -202
- package/rangerings/rangeringangletext.js +120 -108
- package/rangerings/ring-account.js +69 -52
- package/shaders/fragment-toy/firework.js +1 -55
- package/shaders/fragment-toy/singularity.js +1 -55
- package/timetracks/adaptors-line-strip.js +37 -26
- package/timetracks/adaptors.js +61 -47
- package/timetracks/index.js +4 -4
- package/timetracks/plugin-line-strip.js +63 -59
- package/timetracks/plugin.js +69 -65
- package/timetracks/program-line-strip.js +103 -296
- package/timetracks/program.js +113 -419
- package/timetracks/programpoint-line-strip.js +44 -97
- package/timetracks/programpoint.js +44 -90
- package/util/account/bufferoffsetmanager.js +95 -72
- package/util/account/index.js +1 -1
- package/util/account/single-attribute-buffer-management/buffer-manager.js +43 -39
- package/util/account/single-attribute-buffer-management/buffer-orchestrator.js +94 -64
- package/util/account/single-attribute-buffer-management/index.js +3 -3
- package/util/account/single-attribute-buffer-management/object-store.js +30 -28
- package/util/account/util.js +4 -2
- package/util/algorithms/search-binary.js +4 -4
- package/util/check/get.js +5 -5
- package/util/check/typecheck.js +15 -13
- package/util/geometry/index.js +11 -9
- package/util/gl-util/buffer/attribute-loader.js +20 -8
- package/util/gl-util/buffer/index.js +1 -1
- package/util/gl-util/draw-options/methods.js +7 -7
- package/util/gl-util/uniform-block/manager.js +67 -55
- package/util/heatwavedatamanager/datamanager.js +116 -56
- package/util/heatwavedatamanager/index.js +2 -2
- package/util/heatwavedatamanager/pointcoordinatesdatacalculator.js +40 -37
- package/util/heatwavedatamanager/pointcoordsmeta.js +10 -9
- package/util/index.js +6 -6
- package/util/interpolation/timetrack/index.js +1 -1
- package/util/interpolation/timetrack/timetrack-interpolator.js +29 -27
- package/util/interpolation/timetrack/web-worker-str.js +1 -179
- package/util/interpolation/timetrack/web-worker.js +4 -4
- package/util/jshelpers/data-filler.js +7 -7
- package/util/jshelpers/timefilters.js +7 -7
- package/util/picking/fence.js +7 -7
- package/util/picking/picker-displayer.js +52 -46
- package/util/programs/draw-texture-on-canvas.js +21 -39
- package/util/programs/shapesonglobe.js +64 -104
- package/util/programs/supersampletotextures.js +39 -45
- package/util/programs/texturetoglobe.js +48 -98
- package/util/shaderfunctions/geometrytransformations.js +27 -322
- package/util/shaderfunctions/nodata.js +1 -7
- package/util/shaderfunctions/noisefunctions.js +9 -39
- package/util/surface-line-data/arcs-to-cuts.js +23 -20
- package/util/webglobe/rasteroverlay.js +37 -35
- package/util/webglobjectbuilders.js +60 -55
- package/util/webglobjectbuilders1.js +49 -48
- package/waveparticles/adaptor.js +7 -6
- package/waveparticles/index.js +2 -2
- package/waveparticles/plugin.js +84 -79
- package/wind/imagetovectorfieldandmagnitude.js +15 -15
- package/wind/index.js +4 -4
- package/wind/plugin.js +251 -453
- package/wind/vectorfieldimage.js +5 -5
- package/write-text/attached-text-writer.js +48 -46
- package/write-text/context-text.js +58 -51
- package/write-text/context-text3.js +74 -69
|
@@ -25,18 +25,18 @@ exports.reloadCurrentGLProgram = reloadCurrentGLProgram;
|
|
|
25
25
|
* @throws An error if shader compilation fails.
|
|
26
26
|
*/
|
|
27
27
|
function createShader(gl, type, source) {
|
|
28
|
-
|
|
28
|
+
var shader = gl.createShader(type);
|
|
29
29
|
if (!shader) {
|
|
30
30
|
throw new Error("Failed to create WebGLShader.");
|
|
31
31
|
}
|
|
32
32
|
gl.shaderSource(shader, source);
|
|
33
33
|
gl.compileShader(shader);
|
|
34
34
|
if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
35
|
+
var errorLog = gl.getShaderInfoLog(shader);
|
|
36
|
+
var shaderType = type === gl.VERTEX_SHADER ? 'VERTEX_SHADER' : 'FRAGMENT_SHADER';
|
|
37
|
+
var sourceWithLineNumbers = source.split('\n').map(function (line, i) { return "".concat(i + 1, ": ").concat(line); }).join('\n');
|
|
38
38
|
gl.deleteShader(shader); // Clean up the failed shader
|
|
39
|
-
throw new Error(
|
|
39
|
+
throw new Error("Error compiling ".concat(shaderType, ":\n").concat(errorLog, "\nSource:\n").concat(sourceWithLineNumbers));
|
|
40
40
|
}
|
|
41
41
|
return shader;
|
|
42
42
|
}
|
|
@@ -50,13 +50,13 @@ function createShader(gl, type, source) {
|
|
|
50
50
|
* @returns The linked WebGLProgram, or `undefined` if compilation or linking fails.
|
|
51
51
|
*/
|
|
52
52
|
function createProgram(gl, vertexSource, fragmentSource) {
|
|
53
|
-
|
|
53
|
+
var program = gl.createProgram();
|
|
54
54
|
if (!program) {
|
|
55
55
|
console.error("Failed to create WebGLProgram.");
|
|
56
56
|
return undefined;
|
|
57
57
|
}
|
|
58
|
-
|
|
59
|
-
|
|
58
|
+
var vertexShader;
|
|
59
|
+
var fragmentShader;
|
|
60
60
|
try {
|
|
61
61
|
vertexShader = createShader(gl, gl.VERTEX_SHADER, vertexSource);
|
|
62
62
|
fragmentShader = createShader(gl, gl.FRAGMENT_SHADER, fragmentSource);
|
|
@@ -93,21 +93,21 @@ function createProgram(gl, vertexSource, fragmentSource) {
|
|
|
93
93
|
* @throws An error if shader compilation or program linking fails.
|
|
94
94
|
*/
|
|
95
95
|
function createProgramWrapper(gl, vertexSource, fragmentSource) {
|
|
96
|
-
|
|
96
|
+
var program = gl.createProgram();
|
|
97
97
|
if (!program) {
|
|
98
98
|
throw new Error("Failed to create WebGLProgram.");
|
|
99
99
|
}
|
|
100
|
-
|
|
101
|
-
|
|
100
|
+
var vertexShader = createShader(gl, gl.VERTEX_SHADER, vertexSource);
|
|
101
|
+
var fragmentShader = createShader(gl, gl.FRAGMENT_SHADER, fragmentSource);
|
|
102
102
|
gl.attachShader(program, vertexShader);
|
|
103
103
|
gl.attachShader(program, fragmentShader);
|
|
104
104
|
gl.linkProgram(program);
|
|
105
105
|
if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {
|
|
106
|
-
|
|
106
|
+
var errorLog = gl.getProgramInfoLog(program);
|
|
107
107
|
gl.deleteProgram(program);
|
|
108
108
|
gl.deleteShader(vertexShader);
|
|
109
109
|
gl.deleteShader(fragmentShader);
|
|
110
|
-
throw new Error(
|
|
110
|
+
throw new Error("Error linking program:\n".concat(errorLog));
|
|
111
111
|
}
|
|
112
112
|
// Detach and delete shaders after linking
|
|
113
113
|
gl.detachShader(program, vertexShader);
|
|
@@ -115,17 +115,17 @@ function createProgramWrapper(gl, vertexSource, fragmentSource) {
|
|
|
115
115
|
gl.deleteShader(vertexShader);
|
|
116
116
|
gl.deleteShader(fragmentShader);
|
|
117
117
|
// Using an object literal for dynamic properties
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
for (
|
|
121
|
-
|
|
118
|
+
var wrapper = { program: program };
|
|
119
|
+
var numAttributes = gl.getProgramParameter(program, gl.ACTIVE_ATTRIBUTES);
|
|
120
|
+
for (var i = 0; i < numAttributes; i++) {
|
|
121
|
+
var attribute = gl.getActiveAttrib(program, i);
|
|
122
122
|
if (attribute) {
|
|
123
123
|
wrapper[attribute.name] = gl.getAttribLocation(program, attribute.name);
|
|
124
124
|
}
|
|
125
125
|
}
|
|
126
|
-
|
|
127
|
-
for (
|
|
128
|
-
|
|
126
|
+
var numUniforms = gl.getProgramParameter(program, gl.ACTIVE_UNIFORMS);
|
|
127
|
+
for (var i = 0; i < numUniforms; i++) {
|
|
128
|
+
var uniform = gl.getActiveUniform(program, i);
|
|
129
129
|
if (uniform) {
|
|
130
130
|
wrapper[uniform.name] = gl.getUniformLocation(program, uniform.name);
|
|
131
131
|
}
|
|
@@ -143,7 +143,7 @@ function createProgramWrapper(gl, vertexSource, fragmentSource) {
|
|
|
143
143
|
* @throws An error if texture creation fails.
|
|
144
144
|
*/
|
|
145
145
|
function createTexture(gl, filter, data, width, height) {
|
|
146
|
-
|
|
146
|
+
var texture = gl.createTexture();
|
|
147
147
|
if (!texture) {
|
|
148
148
|
throw new Error("Failed to create WebGLTexture.");
|
|
149
149
|
}
|
|
@@ -182,7 +182,7 @@ function bindTexture(gl, texture, unit) {
|
|
|
182
182
|
* @throws An error if buffer creation fails.
|
|
183
183
|
*/
|
|
184
184
|
function createBuffer(gl, data) {
|
|
185
|
-
|
|
185
|
+
var buffer = gl.createBuffer();
|
|
186
186
|
if (!buffer) {
|
|
187
187
|
throw new Error("Failed to create WebGLBuffer.");
|
|
188
188
|
}
|
|
@@ -220,10 +220,10 @@ function bindFramebuffer(gl, framebuffer, texture) {
|
|
|
220
220
|
* @returns A Uint8Array containing the decoded bytes.
|
|
221
221
|
*/
|
|
222
222
|
function decodeBase64(data) {
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
for (
|
|
223
|
+
var binary_string = atob(data);
|
|
224
|
+
var len = binary_string.length;
|
|
225
|
+
var bytes = new Uint8Array(len);
|
|
226
|
+
for (var i = 0; i < len; i++) {
|
|
227
227
|
bytes[i] = binary_string.charCodeAt(i);
|
|
228
228
|
}
|
|
229
229
|
return bytes;
|
|
@@ -234,14 +234,14 @@ function decodeBase64(data) {
|
|
|
234
234
|
* @returns An HTMLImageElement with the image data loaded.
|
|
235
235
|
*/
|
|
236
236
|
function createImageFromBase64(encodedData) {
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
237
|
+
var bytes = decodeBase64(encodedData);
|
|
238
|
+
var blob = new Blob([bytes.buffer], { type: "image/png" });
|
|
239
|
+
var urlCreator = window.URL || window.webkitURL;
|
|
240
|
+
var imageUrl = urlCreator.createObjectURL(blob);
|
|
241
|
+
var image = new Image();
|
|
242
242
|
image.src = imageUrl;
|
|
243
243
|
// Revoke the object URL after the image has loaded to free up memory
|
|
244
|
-
image.onload = ()
|
|
244
|
+
image.onload = function () { return urlCreator.revokeObjectURL(imageUrl); };
|
|
245
245
|
return image;
|
|
246
246
|
}
|
|
247
247
|
/**
|
|
@@ -250,23 +250,23 @@ function createImageFromBase64(encodedData) {
|
|
|
250
250
|
* @returns A Uint8Array representing the RGBA pixel data of the 1x256 color ramp.
|
|
251
251
|
*/
|
|
252
252
|
function getColorRamp(colors) {
|
|
253
|
-
|
|
254
|
-
|
|
253
|
+
var canvas = document.createElement('canvas');
|
|
254
|
+
var ctx = canvas.getContext('2d');
|
|
255
255
|
if (!ctx) {
|
|
256
256
|
throw new Error("Failed to get 2D rendering context for canvas.");
|
|
257
257
|
}
|
|
258
258
|
canvas.width = 256;
|
|
259
259
|
canvas.height = 1;
|
|
260
|
-
|
|
261
|
-
for (
|
|
260
|
+
var gradient = ctx.createLinearGradient(0, 0, 256, 0);
|
|
261
|
+
for (var stop_1 in colors) {
|
|
262
262
|
// Ensure the stop is a valid number, although `addColorStop` can parse strings,
|
|
263
263
|
// explicit conversion is safer for object keys if they come from arbitrary sources.
|
|
264
|
-
|
|
264
|
+
var stopValue = parseFloat(stop_1);
|
|
265
265
|
if (isNaN(stopValue)) {
|
|
266
|
-
console.warn(
|
|
266
|
+
console.warn("Invalid stop value for color ramp: ".concat(stop_1, ". Skipping."));
|
|
267
267
|
continue;
|
|
268
268
|
}
|
|
269
|
-
gradient.addColorStop(stopValue, colors[
|
|
269
|
+
gradient.addColorStop(stopValue, colors[stop_1]);
|
|
270
270
|
}
|
|
271
271
|
ctx.fillStyle = gradient;
|
|
272
272
|
ctx.fillRect(0, 0, 256, 1);
|
|
@@ -280,16 +280,16 @@ function getColorRamp(colors) {
|
|
|
280
280
|
* @returns A Uint8Array representing the RGBA pixel data of the 1x256 discrete color ramp.
|
|
281
281
|
*/
|
|
282
282
|
function getColorRampDiscrate(values, thresholds) {
|
|
283
|
-
|
|
284
|
-
|
|
283
|
+
var canvas = document.createElement('canvas');
|
|
284
|
+
var ctx = canvas.getContext('2d');
|
|
285
285
|
if (!ctx) {
|
|
286
286
|
throw new Error("Failed to get 2D rendering context for canvas.");
|
|
287
287
|
}
|
|
288
288
|
canvas.width = 256;
|
|
289
289
|
canvas.height = 1;
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
for (
|
|
290
|
+
var gap = 1.0 / 256; // Represents one pixel width in normalized coordinates
|
|
291
|
+
var gradient = ctx.createLinearGradient(0, 0, 256, 0);
|
|
292
|
+
for (var i = 0; i < thresholds.length - 1; i++) {
|
|
293
293
|
gradient.addColorStop(thresholds[i], values[i]);
|
|
294
294
|
// Create a sharp transition by setting the next stop just before the next threshold
|
|
295
295
|
gradient.addColorStop(Math.max(0, thresholds[i + 1] - gap), values[i]);
|
|
@@ -307,15 +307,15 @@ function getColorRampDiscrate(values, thresholds) {
|
|
|
307
307
|
* @returns A Uint8Array representing the RGBA pixel data of the 1x256 interpolated color ramp.
|
|
308
308
|
*/
|
|
309
309
|
function getColorRampInterpolated(values, thresholds) {
|
|
310
|
-
|
|
311
|
-
|
|
310
|
+
var canvas = document.createElement('canvas');
|
|
311
|
+
var ctx = canvas.getContext('2d');
|
|
312
312
|
if (!ctx) {
|
|
313
313
|
throw new Error("Failed to get 2D rendering context for canvas.");
|
|
314
314
|
}
|
|
315
315
|
canvas.width = 256;
|
|
316
316
|
canvas.height = 1;
|
|
317
|
-
|
|
318
|
-
for (
|
|
317
|
+
var gradient = ctx.createLinearGradient(0, 0, 256, 0);
|
|
318
|
+
for (var i = 0; i < thresholds.length; i++) {
|
|
319
319
|
gradient.addColorStop(thresholds[i], values[i]);
|
|
320
320
|
}
|
|
321
321
|
ctx.fillStyle = gradient;
|
|
@@ -330,7 +330,8 @@ function getColorRampInterpolated(values, thresholds) {
|
|
|
330
330
|
* @returns A Uint8Array representing the RGBA pixel data of the 1x256 color ramp.
|
|
331
331
|
* @throws An error if an invalid mode is provided.
|
|
332
332
|
*/
|
|
333
|
-
function getColorRampModed(values, thresholds, mode
|
|
333
|
+
function getColorRampModed(values, thresholds, mode) {
|
|
334
|
+
if (mode === void 0) { mode = "interpolated"; }
|
|
334
335
|
if (mode === "discrete") {
|
|
335
336
|
return getColorRampDiscrate(values, thresholds);
|
|
336
337
|
}
|
|
@@ -346,7 +347,7 @@ function getColorRampModed(values, thresholds, mode = "interpolated") {
|
|
|
346
347
|
* @returns A Uint8Array representing the RGBA pixel data of the default 1x256 color ramp.
|
|
347
348
|
*/
|
|
348
349
|
function defaultColorRamp() {
|
|
349
|
-
|
|
350
|
+
var defaultRampColors = {
|
|
350
351
|
"0.0": '#5e4fa2',
|
|
351
352
|
"0.15": '#3288bd',
|
|
352
353
|
"0.20": '#66c2a5',
|
|
@@ -367,19 +368,23 @@ function defaultColorRamp() {
|
|
|
367
368
|
*/
|
|
368
369
|
function reloadCurrentGLProgram() {
|
|
369
370
|
return function (target, key, descriptor) {
|
|
370
|
-
|
|
371
|
+
var originalMethod = descriptor.value;
|
|
371
372
|
// Ensure the target has a 'gl' property of type WebGL2RenderingContext
|
|
372
373
|
if (!('gl' in target) || !(target.gl instanceof WebGL2RenderingContext)) {
|
|
373
|
-
console.warn(
|
|
374
|
+
console.warn("Decorator 'reloadCurrentGLProgram' applied to a method where 'this.gl' is not a WebGL2RenderingContext. This may not function as expected.");
|
|
374
375
|
// Optionally, throw an error here if strictness is desired
|
|
375
376
|
}
|
|
376
|
-
descriptor.value = function (
|
|
377
|
-
|
|
377
|
+
descriptor.value = function () {
|
|
378
|
+
var args = [];
|
|
379
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
|
380
|
+
args[_i] = arguments[_i];
|
|
381
|
+
}
|
|
382
|
+
var gl = this.gl;
|
|
378
383
|
if (!gl) {
|
|
379
384
|
console.error("reloadCurrentGLProgram decorator: 'gl' context not found on 'this'.");
|
|
380
385
|
return originalMethod.apply(this, args);
|
|
381
386
|
}
|
|
382
|
-
|
|
387
|
+
var currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);
|
|
383
388
|
originalMethod.apply(this, args);
|
|
384
389
|
gl.useProgram(currentProgram);
|
|
385
390
|
};
|
|
@@ -26,21 +26,21 @@ exports.reloadCurrentGLProgram = reloadCurrentGLProgram;
|
|
|
26
26
|
// return shader;
|
|
27
27
|
// }
|
|
28
28
|
function createShader(gl, type, source) {
|
|
29
|
-
|
|
29
|
+
var shader = gl.createShader(type);
|
|
30
30
|
gl.shaderSource(shader, source);
|
|
31
31
|
gl.compileShader(shader);
|
|
32
32
|
if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
throw new Error(
|
|
33
|
+
var errorLog = gl.getShaderInfoLog(shader);
|
|
34
|
+
var shaderType = type === gl.VERTEX_SHADER ? 'VERTEX_SHADER' : 'FRAGMENT_SHADER';
|
|
35
|
+
var sourceWithLineNumbers = source.split('\n').map(function (line, i) { return "".concat(i + 1, ": ").concat(line); }).join('\n');
|
|
36
|
+
throw new Error("Error compiling ".concat(shaderType, ":\n").concat(errorLog, "\nSource:\n").concat(sourceWithLineNumbers));
|
|
37
37
|
}
|
|
38
38
|
return shader;
|
|
39
39
|
}
|
|
40
40
|
function createProgram(gl, vertexSource, fragmentSource) {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
41
|
+
var program = gl.createProgram();
|
|
42
|
+
var vertexShader = createShader(gl, gl.VERTEX_SHADER, vertexSource);
|
|
43
|
+
var fragmentShader = createShader(gl, gl.FRAGMENT_SHADER, fragmentSource);
|
|
44
44
|
gl.compileShader(vertexShader);
|
|
45
45
|
if (!gl.getShaderParameter(vertexShader, gl.COMPILE_STATUS)) {
|
|
46
46
|
console.error(gl.getShaderInfoLog(vertexShader));
|
|
@@ -61,9 +61,9 @@ function createProgram(gl, vertexSource, fragmentSource) {
|
|
|
61
61
|
return program;
|
|
62
62
|
}
|
|
63
63
|
function createProgramWrapper(gl, vertexSource, fragmentSource) {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
64
|
+
var program = gl.createProgram();
|
|
65
|
+
var vertexShader = createShader(gl, gl.VERTEX_SHADER, vertexSource);
|
|
66
|
+
var fragmentShader = createShader(gl, gl.FRAGMENT_SHADER, fragmentSource);
|
|
67
67
|
gl.attachShader(program, vertexShader);
|
|
68
68
|
gl.attachShader(program, fragmentShader);
|
|
69
69
|
gl.linkProgram(program);
|
|
@@ -71,21 +71,21 @@ function createProgramWrapper(gl, vertexSource, fragmentSource) {
|
|
|
71
71
|
// console.log(gl.getProgramInfoLog(program));
|
|
72
72
|
throw new Error(gl.getProgramInfoLog(program));
|
|
73
73
|
}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
for (
|
|
77
|
-
|
|
74
|
+
var wrapper = { program: program };
|
|
75
|
+
var numAttributes = gl.getProgramParameter(program, gl.ACTIVE_ATTRIBUTES);
|
|
76
|
+
for (var i = 0; i < numAttributes; i++) {
|
|
77
|
+
var attribute = gl.getActiveAttrib(program, i);
|
|
78
78
|
wrapper[attribute.name] = gl.getAttribLocation(program, attribute.name);
|
|
79
79
|
}
|
|
80
|
-
|
|
81
|
-
for (
|
|
82
|
-
|
|
80
|
+
var numUniforms = gl.getProgramParameter(program, gl.ACTIVE_UNIFORMS);
|
|
81
|
+
for (var i = 0; i < numUniforms; i++) {
|
|
82
|
+
var uniform = gl.getActiveUniform(program, i);
|
|
83
83
|
wrapper[uniform.name] = gl.getUniformLocation(program, uniform.name);
|
|
84
84
|
}
|
|
85
85
|
return wrapper;
|
|
86
86
|
}
|
|
87
87
|
function createTexture(gl, filter, data, width, height) {
|
|
88
|
-
|
|
88
|
+
var texture = gl.createTexture();
|
|
89
89
|
gl.bindTexture(gl.TEXTURE_2D, texture);
|
|
90
90
|
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
|
|
91
91
|
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
|
|
@@ -105,7 +105,7 @@ function bindTexture(gl, texture, unit) {
|
|
|
105
105
|
gl.bindTexture(gl.TEXTURE_2D, texture);
|
|
106
106
|
}
|
|
107
107
|
function createBuffer(gl, data) {
|
|
108
|
-
|
|
108
|
+
var buffer = gl.createBuffer();
|
|
109
109
|
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
|
|
110
110
|
gl.bufferData(gl.ARRAY_BUFFER, data, gl.STATIC_DRAW);
|
|
111
111
|
return buffer;
|
|
@@ -125,33 +125,33 @@ function bindFramebuffer(gl, framebuffer, texture) {
|
|
|
125
125
|
}
|
|
126
126
|
}
|
|
127
127
|
function decodeBase64(data) {
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
for (
|
|
128
|
+
var binary_string = atob(data);
|
|
129
|
+
var len = binary_string.length;
|
|
130
|
+
var bytes = new Uint8Array(len);
|
|
131
|
+
for (var i = 0; i < len; i++) {
|
|
132
132
|
bytes[i] = binary_string.charCodeAt(i);
|
|
133
133
|
}
|
|
134
134
|
return bytes;
|
|
135
135
|
}
|
|
136
136
|
function createImageFromBase64(encodedData) {
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
137
|
+
var bytes = decodeBase64(encodedData);
|
|
138
|
+
var blob = new Blob([bytes.buffer], { type: "image/png" });
|
|
139
|
+
var urlCreator = window.URL || window.webkitURL;
|
|
140
|
+
var imageUrl = urlCreator.createObjectURL(blob);
|
|
141
|
+
var image = new Image();
|
|
142
142
|
image.src = imageUrl;
|
|
143
143
|
return image;
|
|
144
144
|
}
|
|
145
145
|
function getColorRamp(colors) {
|
|
146
146
|
// console.log("getColorRamp", colors)
|
|
147
|
-
|
|
148
|
-
|
|
147
|
+
var canvas = document.createElement('canvas');
|
|
148
|
+
var ctx = canvas.getContext('2d');
|
|
149
149
|
canvas.width = 256;
|
|
150
150
|
canvas.height = 1;
|
|
151
|
-
|
|
152
|
-
for (
|
|
151
|
+
var gradient = ctx.createLinearGradient(0, 0, 256, 0);
|
|
152
|
+
for (var stop_1 in colors) {
|
|
153
153
|
// console.log("stop", stop);
|
|
154
|
-
gradient.addColorStop(colors[
|
|
154
|
+
gradient.addColorStop(colors[stop_1][0], colors[stop_1][1]);
|
|
155
155
|
// Alttaki satir ile gradienti cevirip, shaderda ki `speed_t = 1.0 - speed_t`' kaldirdim.
|
|
156
156
|
// gradientin en dusuk olmasi gereken siyah - mavi aralikta, mor renk gozlemledim.
|
|
157
157
|
// gradient.addColorStop( 1.0 - colors[stop][0], colors[stop][1]);
|
|
@@ -161,13 +161,13 @@ function getColorRamp(colors) {
|
|
|
161
161
|
return new Uint8Array(ctx.getImageData(0, 0, 256, 1).data);
|
|
162
162
|
}
|
|
163
163
|
function getColorRampDiscrate(values, thresholds) {
|
|
164
|
-
|
|
165
|
-
|
|
164
|
+
var canvas = document.createElement('canvas');
|
|
165
|
+
var ctx = canvas.getContext('2d');
|
|
166
166
|
canvas.width = 256;
|
|
167
167
|
canvas.height = 1;
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
for (
|
|
168
|
+
var gap = 1.0 / 256;
|
|
169
|
+
var gradient = ctx.createLinearGradient(0, 0, 256, 0);
|
|
170
|
+
for (var i = 0; i < thresholds.length - 1; i++) {
|
|
171
171
|
gradient.addColorStop(thresholds[i], values[i]);
|
|
172
172
|
gradient.addColorStop(thresholds[i + 1] - gap, values[i]);
|
|
173
173
|
}
|
|
@@ -177,15 +177,15 @@ function getColorRampDiscrate(values, thresholds) {
|
|
|
177
177
|
return new Uint8Array(ctx.getImageData(0, 0, 256, 1).data);
|
|
178
178
|
}
|
|
179
179
|
function getColorRampInterpolated(values, thresholds) {
|
|
180
|
-
|
|
181
|
-
|
|
180
|
+
var canvas = document.createElement('canvas');
|
|
181
|
+
var ctx = canvas.getContext('2d');
|
|
182
182
|
canvas.width = 256;
|
|
183
183
|
canvas.height = 1;
|
|
184
|
-
|
|
184
|
+
var gradient = ctx.createLinearGradient(0, 0, 256, 0);
|
|
185
185
|
// const gap = 1.0 / 256;
|
|
186
186
|
// gradient.addColorStop(thresholds[0], values[0]);
|
|
187
187
|
// gradient.addColorStop(thresholds[0] + gap, values[1]);
|
|
188
|
-
for (
|
|
188
|
+
for (var i = 0; i < thresholds.length; i++) {
|
|
189
189
|
gradient.addColorStop(thresholds[i], values[i]);
|
|
190
190
|
}
|
|
191
191
|
// gradient.addColorStop(thresholds[thresholds.length - 1] - gap, values[values.length - 1]);
|
|
@@ -198,7 +198,8 @@ function getColorRampInterpolated(values, thresholds) {
|
|
|
198
198
|
* thresholds: n number of thresholds. Ex: [0, 10, 20]
|
|
199
199
|
* mode: [discrete, interpolated,]
|
|
200
200
|
*/
|
|
201
|
-
function getColorRampModed(values, thresholds, mode
|
|
201
|
+
function getColorRampModed(values, thresholds, mode) {
|
|
202
|
+
if (mode === void 0) { mode = "interpolated"; }
|
|
202
203
|
if (mode === "discrete") {
|
|
203
204
|
return getColorRampDiscrate(values, thresholds);
|
|
204
205
|
}
|
|
@@ -210,7 +211,7 @@ function getColorRampModed(values, thresholds, mode = "interpolated") {
|
|
|
210
211
|
}
|
|
211
212
|
}
|
|
212
213
|
function defaultColorRamp() {
|
|
213
|
-
|
|
214
|
+
var defaultRampColors = [
|
|
214
215
|
[0.0, '#5e4fa2'],
|
|
215
216
|
[0.15, '#3288bd'],
|
|
216
217
|
[0.20, '#66c2a5'],
|
|
@@ -226,10 +227,10 @@ function defaultColorRamp() {
|
|
|
226
227
|
}
|
|
227
228
|
function reloadCurrentGLProgram() {
|
|
228
229
|
return function (target, key, descriptor) {
|
|
229
|
-
|
|
230
|
+
var originalMethod = descriptor.value;
|
|
230
231
|
descriptor.value = function () {
|
|
231
|
-
|
|
232
|
-
|
|
232
|
+
var gl = target.gl;
|
|
233
|
+
var currentProgram = gl.getParameter(gl.CURRENT_PROGRAM);
|
|
233
234
|
originalMethod.apply(this, arguments);
|
|
234
235
|
gl.useProgram(currentProgram);
|
|
235
236
|
};
|
package/waveparticles/adaptor.js
CHANGED
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.centigradePlus90ToVectorArray = centigradePlus90ToVectorArray;
|
|
4
|
-
function centigradePlus90ToVectorArray(centigradeArray, noDataValue
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
function centigradePlus90ToVectorArray(centigradeArray, noDataValue) {
|
|
5
|
+
if (noDataValue === void 0) { noDataValue = -9999; }
|
|
6
|
+
var vectorArray = new Float32Array(centigradeArray.length * 2);
|
|
7
|
+
for (var i = 0; i < centigradeArray.length; i++) {
|
|
7
8
|
if (centigradeArray[i] === noDataValue) {
|
|
8
9
|
vectorArray.set([0, 0], i * 2);
|
|
9
10
|
continue;
|
|
10
11
|
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
var rad = (centigradeArray[i] + 90.0) * Math.PI / 180;
|
|
13
|
+
var x = Math.cos(rad);
|
|
14
|
+
var y = Math.sin(rad);
|
|
14
15
|
vectorArray.set([x, y], i * 2);
|
|
15
16
|
}
|
|
16
17
|
return vectorArray;
|
package/waveparticles/index.js
CHANGED
|
@@ -4,7 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.VectorFieldWaveParticle = exports.centigradePlus90ToVectorArray = void 0;
|
|
7
|
-
|
|
7
|
+
var plugin_1 = __importDefault(require("./plugin"));
|
|
8
8
|
exports.VectorFieldWaveParticle = plugin_1.default;
|
|
9
|
-
|
|
9
|
+
var adaptor_1 = require("./adaptor");
|
|
10
10
|
Object.defineProperty(exports, "centigradePlus90ToVectorArray", { enumerable: true, get: function () { return adaptor_1.centigradePlus90ToVectorArray; } });
|