@pirireis/webglobeplugins 0.9.11 → 0.9.13
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 +9 -11
- package/Math/arc.js +38 -41
- package/Math/bounds/line-bbox.js +79 -83
- package/Math/constants.js +4 -9
- package/Math/frustum/types.js +1 -2
- package/Math/juction/arc-plane.js +33 -36
- package/Math/juction/line-sphere.js +15 -18
- package/Math/juction/plane-plane.js +20 -23
- package/Math/line.js +42 -47
- package/Math/methods.js +69 -92
- package/Math/plane.js +33 -38
- package/Math/quaternion.js +48 -55
- package/Math/types.js +1 -2
- package/Math/utils.js +2 -4
- package/Math/vec3.js +46 -52
- package/algorithms/search-binary.js +5 -8
- package/altitude-locator/draw-subset-obj.js +8 -11
- package/altitude-locator/plugin.js +114 -133
- package/altitude-locator/types.js +1 -3
- package/arrowfield/adaptor.js +3 -7
- package/arrowfield/index.js +3 -10
- package/arrowfield/plugin.js +63 -69
- package/bearing-line/index.js +2 -8
- package/bearing-line/plugin.js +218 -248
- package/circle-line-chain/chain-list-map.js +82 -92
- package/circle-line-chain/plugin.js +147 -182
- package/circle-line-chain/util.js +1 -5
- package/compass-rose/compass-rose-padding-flat.js +111 -140
- package/compass-rose/compass-text-writer.js +63 -75
- package/compass-rose/index.js +3 -7
- package/compassrose/compassrose.js +50 -57
- package/compassrose/index.js +2 -8
- package/heatwave/index.js +3 -10
- package/heatwave/isobar/objectarraylabels.js +50 -56
- package/heatwave/isobar/plugin.js +111 -170
- package/heatwave/isobar/quadtreecontours.js +78 -96
- package/heatwave/plugins/heatwaveglobeshell.js +73 -94
- package/index.js +12 -58
- package/package.json +1 -1
- package/partialrings/buffer-manager.js +32 -70
- package/partialrings/index.js +2 -41
- package/partialrings/plugin.js +55 -98
- package/partialrings/program.js +141 -59
- package/pin/pin-object-array.js +89 -97
- package/pin/pin-point-totem.js +21 -22
- package/point-heat-map/adaptors/timetracksplugin-format-to-this.js +11 -14
- package/point-heat-map/plugin-webworker.js +45 -53
- package/point-heat-map/point-to-heat-map-flow.js +46 -51
- package/point-tracks/key-methods.js +2 -5
- package/point-tracks/plugin.js +141 -170
- package/programs/arrowfield/index.js +2 -7
- package/programs/arrowfield/logic.js +172 -67
- package/programs/arrowfield/object.js +35 -43
- package/programs/data2legend/density-to-legend.js +47 -26
- package/programs/data2legend/point-to-density-texture.js +56 -34
- package/programs/float2legendwithratio/index.js +2 -8
- package/programs/float2legendwithratio/logic.js +88 -45
- package/programs/float2legendwithratio/object.js +45 -54
- package/programs/globe-util/is-globe-moved.js +10 -13
- package/programs/globeshell/index.js +2 -8
- package/programs/globeshell/wiggle/index.js +2 -8
- package/programs/globeshell/wiggle/logic.js +191 -101
- package/programs/globeshell/wiggle/object.js +35 -43
- package/programs/helpers/blender/program.js +36 -22
- package/programs/helpers/fadeaway/index.js +2 -7
- package/programs/helpers/fadeaway/logic.js +36 -17
- package/programs/helpers/fadeaway/object.js +11 -18
- package/programs/helpers/index.js +2 -8
- package/programs/index.js +9 -58
- package/programs/line-on-globe/angled-line.js +95 -39
- package/programs/line-on-globe/circle-accurate-3d.js +86 -39
- package/programs/line-on-globe/circle-accurate-flat.js +116 -64
- package/programs/line-on-globe/circle-accurate.js +113 -46
- package/programs/line-on-globe/circle.js +106 -44
- package/programs/line-on-globe/degree-padding-around-circle-3d.js +89 -42
- package/programs/line-on-globe/lines-color-instanced-flat.js +84 -43
- package/programs/line-on-globe/linestrip.js +126 -63
- package/programs/line-on-globe/naive-accurate-flexible.js +126 -59
- package/programs/line-on-globe/to-the-surface.js +62 -35
- package/programs/line-on-globe/util.js +2 -5
- package/programs/picking/pickable-renderer.js +127 -46
- package/programs/point-on-globe/element-globe-surface-glow.js +83 -46
- package/programs/point-on-globe/element-point-glow.js +112 -47
- package/programs/point-on-globe/square-pixel-point.js +80 -34
- package/programs/programcache.js +14 -19
- package/programs/rings/distancering/circleflatprogram.js +76 -70
- package/programs/rings/distancering/circlepaddingfreeangleprogram.js +168 -194
- package/programs/rings/distancering/circlepaddysharedbuffer.js +121 -200
- package/programs/rings/distancering/index.js +5 -14
- package/programs/rings/distancering/paddyflatprogram.js +87 -70
- package/programs/rings/distancering/paddyflatprogram2d.js +89 -72
- package/programs/rings/distancering/paddyflatprogram3d.js +87 -70
- package/programs/rings/index.js +1 -17
- package/programs/rings/partial-ring/piece-of-pie.js +144 -44
- package/programs/totems/camerauniformblock.js +65 -56
- package/programs/totems/canvas-webglobe-info.js +49 -45
- package/programs/totems/gpu-selection-uniform-block.js +45 -45
- package/programs/totems/index.js +2 -40
- package/programs/two-d/pixel-padding-for-compass.js +94 -36
- package/programs/util.js +7 -10
- package/programs/vectorfields/index.js +3 -23
- package/programs/vectorfields/logics/drawrectangleparticles.js +73 -35
- package/programs/vectorfields/logics/index.js +4 -12
- package/programs/vectorfields/logics/pixelbased.js +94 -41
- package/programs/vectorfields/logics/ubo.js +32 -32
- package/programs/vectorfields/pingpongbuffermanager.js +30 -37
- package/rangerings/enum.js +2 -5
- package/rangerings/index.js +5 -15
- package/rangerings/plugin.js +223 -286
- package/rangerings/rangeringangletext.js +122 -137
- package/rangerings/ring-account.js +53 -75
- package/shaders/fragment-toy/firework.js +55 -4
- package/shaders/fragment-toy/singularity.js +56 -5
- package/timetracks/adaptors-line-strip.js +27 -44
- package/timetracks/adaptors.js +48 -67
- package/timetracks/index.js +5 -19
- package/timetracks/plugin-line-strip.js +65 -79
- package/timetracks/plugin.js +71 -85
- package/timetracks/program-line-strip.js +297 -107
- package/timetracks/program.js +421 -118
- package/timetracks/programpoint-line-strip.js +98 -48
- package/timetracks/programpoint.js +91 -48
- package/util/account/bufferoffsetmanager.js +72 -98
- package/util/account/index.js +3 -23
- package/util/account/single-attribute-buffer-management/buffer-manager.js +44 -48
- package/util/account/single-attribute-buffer-management/buffer-orchestrator.js +68 -98
- package/util/account/single-attribute-buffer-management/index.js +4 -9
- package/util/account/single-attribute-buffer-management/object-store.js +29 -34
- package/util/account/single-attribute-buffer-management/types.js +1 -2
- package/util/account/util.js +2 -8
- package/util/algorithms/search-binary.js +5 -8
- package/util/check/get.js +5 -9
- package/util/check/typecheck.js +13 -24
- package/util/geometry/index.js +10 -18
- package/util/gl-util/buffer/attribute-loader.js +10 -26
- package/util/gl-util/buffer/index.js +2 -5
- package/util/gl-util/draw-options/methods.js +10 -15
- package/util/gl-util/uniform-block/manager.js +69 -72
- package/util/heatwavedatamanager/datamanager.js +56 -119
- package/util/heatwavedatamanager/index.js +3 -10
- package/util/heatwavedatamanager/pointcoordinatesdatacalculator.js +38 -47
- package/util/heatwavedatamanager/pointcoordsmeta.js +9 -13
- package/util/index.js +13 -57
- package/util/interpolation/timetrack/index.js +2 -5
- package/util/interpolation/timetrack/timetrack-interpolator.js +30 -36
- package/util/interpolation/timetrack/web-worker-str.js +180 -5
- package/util/interpolation/timetrack/web-worker.js +4 -6
- package/util/jshelpers/data-filler.js +8 -11
- package/util/jshelpers/equality.js +1 -3
- package/util/jshelpers/index.js +2 -37
- package/util/jshelpers/timefilters.js +8 -10
- package/util/picking/fence.js +8 -11
- package/util/picking/picker-displayer.js +49 -58
- package/util/programs/draw-texture-on-canvas.js +41 -26
- package/util/programs/index.js +1 -17
- package/util/programs/shapesonglobe.js +104 -68
- package/util/programs/supersampletotextures.js +45 -43
- package/util/programs/texturetoglobe.js +99 -52
- package/util/shaderfunctions/geometrytransformations.js +323 -35
- package/util/shaderfunctions/index.js +2 -18
- package/util/shaderfunctions/nodata.js +8 -5
- package/util/shaderfunctions/noisefunctions.js +40 -12
- package/util/surface-line-data/arcs-to-cuts.js +20 -23
- package/util/webglobe/gldefaultstates.js +1 -4
- package/util/webglobe/index.js +2 -18
- package/util/webglobe/rasteroverlay.js +36 -41
- package/util/webglobjectbuilders.js +70 -93
- package/util/webglobjectbuilders1.js +63 -82
- package/waveparticles/adaptor.js +7 -10
- package/waveparticles/index.js +3 -10
- package/waveparticles/plugin.js +82 -90
- package/wind/imagetovectorfieldandmagnitude.js +16 -19
- package/wind/index.js +5 -14
- package/wind/plugin.js +454 -291
- package/wind/vectorfieldimage.js +6 -8
- package/write-text/attached-text-writer.js +48 -54
- package/write-text/context-text.js +52 -63
- package/write-text/context-text3.js +71 -80
- package/write-text/index.js +1 -5
package/util/check/typecheck.js
CHANGED
|
@@ -1,51 +1,40 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
// Generic
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
return function (object) {
|
|
7
|
-
properties.forEach(function (element) {
|
|
2
|
+
const doesOwnProperties = (properties, errorMessage) => {
|
|
3
|
+
return (object) => {
|
|
4
|
+
properties.forEach(element => {
|
|
8
5
|
if (!Object.hasOwn(object, element))
|
|
9
6
|
throw new TypeError(errorMessage + ':' + element);
|
|
10
7
|
});
|
|
11
8
|
};
|
|
12
9
|
};
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
exports.isHexColorWithOpacity = isHexColorWithOpacity;
|
|
17
|
-
var opacityCheck = function (opacity) {
|
|
10
|
+
export const isHexColor = (hexColor) => /^#[0-9A-F]{6}$/i.test(hexColor);
|
|
11
|
+
export const isHexColorWithOpacity = (hexColor) => /^#[0-9A-F]{6}[0-9a-f]{0,2}$/i.test(hexColor);
|
|
12
|
+
export const opacityCheck = (opacity) => {
|
|
18
13
|
if (typeof opacity !== "number")
|
|
19
14
|
throw new TypeError("style.opacity must a number");
|
|
20
15
|
if (opacity < 0 || 1 < opacity)
|
|
21
16
|
throw new RangeError("Opacity Range Must be 0-1");
|
|
22
17
|
};
|
|
23
|
-
exports.opacityCheck = opacityCheck;
|
|
24
18
|
// Text Related
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
19
|
+
const fontCheckTypes = doesOwnProperties(["name", "textColor", "hollowColor", "size", "bold", "italic"], "font does not have");
|
|
20
|
+
const fontCheckColors = (textColor, hollowColor) => isHexColor(textColor) && isHexColor(hollowColor);
|
|
21
|
+
export const isTextFont = (textFont) => {
|
|
28
22
|
fontCheckTypes(textFont);
|
|
29
23
|
fontCheckColors(textFont.textColor, textFont.hollowColor);
|
|
30
24
|
if (typeof textFont.size !== "number")
|
|
31
25
|
throw new TypeError("textFont size is not a number");
|
|
32
26
|
};
|
|
33
|
-
|
|
34
|
-
var constraintFloat = function (x, lowerBound, upperBound) {
|
|
35
|
-
if (lowerBound === void 0) { lowerBound = null; }
|
|
36
|
-
if (upperBound === void 0) { upperBound = null; }
|
|
27
|
+
export const constraintFloat = (x, lowerBound = null, upperBound = null) => {
|
|
37
28
|
if (typeof x !== "number")
|
|
38
29
|
throw new Error("type must be numberic");
|
|
39
30
|
if (lowerBound === null && upperBound === null)
|
|
40
31
|
return;
|
|
41
32
|
if (lowerBound !== null && lowerBound > x)
|
|
42
|
-
throw new Error(
|
|
33
|
+
throw new Error(`input must be greater than ${lowerBound}`);
|
|
43
34
|
if (upperBound !== null && x > upperBound)
|
|
44
|
-
throw new Error(
|
|
35
|
+
throw new Error(`input must be less than ${upperBound}`);
|
|
45
36
|
};
|
|
46
|
-
|
|
47
|
-
var isBoolean = function (x) {
|
|
37
|
+
export const isBoolean = (x) => {
|
|
48
38
|
if (typeof x !== "boolean")
|
|
49
39
|
throw new TypeError("type must be boolean");
|
|
50
40
|
};
|
|
51
|
-
exports.isBoolean = isBoolean;
|
package/util/geometry/index.js
CHANGED
|
@@ -1,10 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createBBoxMatrix = createBBoxMatrix;
|
|
4
|
-
exports.latLongToPixelXY = latLongToPixelXY;
|
|
5
|
-
exports.latLongBboxtoPixelXYBbox = latLongBboxtoPixelXYBbox;
|
|
6
|
-
exports.sphereCoord = sphereCoord;
|
|
7
|
-
exports.normalize = normalize;
|
|
8
1
|
function latLongToPixelXY(latitude, longitude) {
|
|
9
2
|
return {
|
|
10
3
|
x: (longitude + 180) / 360,
|
|
@@ -25,8 +18,8 @@ function createBBoxMatrix(minX, maxX, minY, maxY) {
|
|
|
25
18
|
]);
|
|
26
19
|
}
|
|
27
20
|
function latLongBboxtoPixelXYBbox(minX, minY, maxX, maxY) {
|
|
28
|
-
|
|
29
|
-
|
|
21
|
+
const minXY = latLongToPixelXY(minY, minX);
|
|
22
|
+
const maxXY = latLongToPixelXY(maxY, maxX);
|
|
30
23
|
return createBBoxMatrix(minXY.x, maxXY.x, minXY.y, maxXY.y);
|
|
31
24
|
}
|
|
32
25
|
/**
|
|
@@ -34,20 +27,19 @@ function latLongBboxtoPixelXYBbox(minX, minY, maxX, maxY) {
|
|
|
34
27
|
* @param {Float32List} array
|
|
35
28
|
* @returns {Float32Array}
|
|
36
29
|
*/
|
|
37
|
-
function normalize(array, newLength) {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
for (var i = 0; i < array.length; i++) {
|
|
30
|
+
function normalize(array, newLength = 1) {
|
|
31
|
+
let total = 0;
|
|
32
|
+
for (let i = 0; i < array.length; i++) {
|
|
41
33
|
total += array[i] * array[i];
|
|
42
34
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
for (
|
|
35
|
+
const len = newLength / Math.sqrt(total);
|
|
36
|
+
const result = new Float32Array(array.length);
|
|
37
|
+
for (let i = 0; i < array.length; i++) {
|
|
46
38
|
result[i] = array[i] * len;
|
|
47
39
|
}
|
|
48
40
|
return result;
|
|
49
41
|
}
|
|
50
|
-
function sphereCoord(long, lat, globe, height) {
|
|
51
|
-
if (height === void 0) { height = 0; }
|
|
42
|
+
function sphereCoord(long, lat, globe, height = 0) {
|
|
52
43
|
return normalize(globe.api_GetCartesian3DPoint(long, lat, 0, 0), 6378.137 + height);
|
|
53
44
|
}
|
|
45
|
+
export { createBBoxMatrix, latLongToPixelXY, latLongBboxtoPixelXYBbox, sphereCoord, normalize };
|
|
@@ -1,16 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
3
|
-
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
4
|
-
if (ar || !(i in from)) {
|
|
5
|
-
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
6
|
-
ar[i] = from[i];
|
|
7
|
-
}
|
|
8
|
-
}
|
|
9
|
-
return to.concat(ar || Array.prototype.slice.call(from));
|
|
10
|
-
};
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.createBufferAndReadInfo = exports.attributeLoader = void 0;
|
|
13
|
-
require("./types");
|
|
1
|
+
import './types';
|
|
14
2
|
/**
|
|
15
3
|
* @typedef BufferAndReadInfo Buffers can be intertwined or interleaved.
|
|
16
4
|
* This object forces user to adapt generic convention of buffer and read information.
|
|
@@ -31,8 +19,7 @@ require("./types");
|
|
|
31
19
|
* @param {Array<number>} options.escapeValues
|
|
32
20
|
* @returns
|
|
33
21
|
*/
|
|
34
|
-
|
|
35
|
-
var _b = _a === void 0 ? {} : _a, _c = _b.divisor, divisor = _c === void 0 ? null : _c, _d = _b.type, type = _d === void 0 ? null : _d, _e = _b.escapeValues, escapeValues = _e === void 0 ? null : _e, _f = _b.normalized, normalized = _f === void 0 ? false : _f;
|
|
22
|
+
const attributeLoader = (gl, bufferAndReadInfo, index, size, { divisor = null, type = null, escapeValues = null, normalized = false } = {}) => {
|
|
36
23
|
if (size < 1 || size > 4)
|
|
37
24
|
throw new Error("Size must be between 1 and 4");
|
|
38
25
|
if (bufferAndReadInfo == null) {
|
|
@@ -40,7 +27,7 @@ var attributeLoader = function (gl, bufferAndReadInfo, index, size, _a) {
|
|
|
40
27
|
constantFunction(gl, index, size, escapeValues);
|
|
41
28
|
return;
|
|
42
29
|
}
|
|
43
|
-
|
|
30
|
+
const { buffer, stride, offset } = bufferAndReadInfo;
|
|
44
31
|
if (!gl || !buffer) {
|
|
45
32
|
throw new Error("Invalid WebGL context or buffer");
|
|
46
33
|
}
|
|
@@ -50,7 +37,7 @@ var attributeLoader = function (gl, bufferAndReadInfo, index, size, _a) {
|
|
|
50
37
|
if (stride < 0 || offset < 0) {
|
|
51
38
|
throw new Error("Stride and offset must be non-negative");
|
|
52
39
|
}
|
|
53
|
-
|
|
40
|
+
const attribType = type === null ? gl.FLOAT : type;
|
|
54
41
|
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
|
|
55
42
|
gl.enableVertexAttribArray(index);
|
|
56
43
|
gl.vertexAttribPointer(index, size, attribType, normalized, stride, offset);
|
|
@@ -58,7 +45,6 @@ var attributeLoader = function (gl, bufferAndReadInfo, index, size, _a) {
|
|
|
58
45
|
gl.vertexAttribDivisor(index, divisor);
|
|
59
46
|
}
|
|
60
47
|
};
|
|
61
|
-
exports.attributeLoader = attributeLoader;
|
|
62
48
|
/**
|
|
63
49
|
*
|
|
64
50
|
* @param {WebGLBuffer} buffer
|
|
@@ -66,16 +52,14 @@ exports.attributeLoader = attributeLoader;
|
|
|
66
52
|
* @param {number} offset
|
|
67
53
|
* @returns {BufferAndReadInfo}
|
|
68
54
|
*/
|
|
69
|
-
|
|
70
|
-
if (stride === void 0) { stride = 0; }
|
|
71
|
-
if (offset === void 0) { offset = 0; }
|
|
55
|
+
const createBufferAndReadInfo = (buffer, stride = 0, offset = 0) => {
|
|
72
56
|
if (buffer == null)
|
|
73
57
|
return null;
|
|
74
|
-
return { buffer
|
|
58
|
+
return { buffer, stride, offset };
|
|
75
59
|
};
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
var func = "vertexAttrib".concat(size, "f");
|
|
60
|
+
const constantFunction = (gl, index, size, escapeValues) => {
|
|
61
|
+
const func = `vertexAttrib${size}f`;
|
|
79
62
|
// @ts-ignore
|
|
80
|
-
gl[func]
|
|
63
|
+
gl[func](index, ...escapeValues);
|
|
81
64
|
};
|
|
65
|
+
export { attributeLoader, createBufferAndReadInfo };
|
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
// import './types';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
var attribute_loader_1 = require("./attribute-loader");
|
|
6
|
-
Object.defineProperty(exports, "attributeLoader", { enumerable: true, get: function () { return attribute_loader_1.attributeLoader; } });
|
|
2
|
+
import { attributeLoader } from './attribute-loader';
|
|
3
|
+
export { attributeLoader };
|
|
@@ -1,16 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.drawInstanced = exports.drawArrays = void 0;
|
|
4
|
-
require("./types");
|
|
1
|
+
import './types';
|
|
5
2
|
/**
|
|
6
3
|
* Draws instanced geometry using WebGL2.
|
|
7
4
|
*/
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
var _c = drawRange.first, first = _c === void 0 ? 0 : _c, _d = drawRange.count, instanceCount = _d === void 0 ? 1 : _d;
|
|
5
|
+
const drawInstanced = (gl, mode, drawOptions, vertexCount) => {
|
|
6
|
+
const { drawRange, elementBufferIndexType = gl.UNSIGNED_INT } = drawOptions;
|
|
7
|
+
const { first = 0, count: instanceCount = 1 } = drawRange;
|
|
12
8
|
if (first > 0 || drawOptions.elementBuffer) {
|
|
13
|
-
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER,
|
|
9
|
+
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, drawOptions.elementBuffer ?? null);
|
|
14
10
|
gl.drawElementsInstanced(mode, vertexCount, elementBufferIndexType, first, instanceCount);
|
|
15
11
|
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, null);
|
|
16
12
|
}
|
|
@@ -18,14 +14,13 @@ var drawInstanced = function (gl, mode, drawOptions, vertexCount) {
|
|
|
18
14
|
gl.drawArraysInstanced(mode, first, vertexCount, instanceCount);
|
|
19
15
|
}
|
|
20
16
|
};
|
|
21
|
-
exports.drawInstanced = drawInstanced;
|
|
22
17
|
/**
|
|
23
18
|
* Draws geometry using WebGL2.
|
|
24
19
|
*/
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
20
|
+
const drawArrays = (gl, defaultMode, drawOptions) => {
|
|
21
|
+
const { drawRange, elementBuffer, elementBufferIndexType = gl.UNSIGNED_INT, drawMode = null } = drawOptions;
|
|
22
|
+
const { first = 0, count } = drawRange;
|
|
23
|
+
const mode = drawMode ?? defaultMode;
|
|
29
24
|
if (elementBuffer) {
|
|
30
25
|
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, elementBuffer);
|
|
31
26
|
gl.drawElements(mode, count, elementBufferIndexType, first);
|
|
@@ -35,4 +30,4 @@ var drawArrays = function (gl, defaultMode, drawOptions) {
|
|
|
35
30
|
gl.drawArrays(mode, first, count);
|
|
36
31
|
}
|
|
37
32
|
};
|
|
38
|
-
|
|
33
|
+
export { drawArrays, drawInstanced };
|
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
exports.UniformBlockManager = void 0;
|
|
4
|
-
require("./types");
|
|
5
|
-
var typeSizes = {
|
|
1
|
+
import "./types";
|
|
2
|
+
const typeSizes = {
|
|
6
3
|
'float': 4,
|
|
7
4
|
'vec2': 8,
|
|
8
5
|
'vec3': 16, // vec3 takes up same space as vec4 due to alignment
|
|
@@ -16,7 +13,7 @@ var typeSizes = {
|
|
|
16
13
|
'ivec4': 16,
|
|
17
14
|
'bool': 4
|
|
18
15
|
};
|
|
19
|
-
|
|
16
|
+
const typeAlignments = {
|
|
20
17
|
'float': 4,
|
|
21
18
|
'vec2': 8,
|
|
22
19
|
'vec3': 16,
|
|
@@ -30,7 +27,7 @@ var typeAlignments = {
|
|
|
30
27
|
'ivec4': 16,
|
|
31
28
|
'bool': 4
|
|
32
29
|
};
|
|
33
|
-
|
|
30
|
+
const typeArrayConstructors = {
|
|
34
31
|
'float': Float32Array,
|
|
35
32
|
'vec2': Float32Array,
|
|
36
33
|
'vec3': Float32Array,
|
|
@@ -44,9 +41,20 @@ var typeArrayConstructors = {
|
|
|
44
41
|
'ivec4': Int32Array,
|
|
45
42
|
'bool': Float32Array
|
|
46
43
|
};
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
44
|
+
class UniformBlockManager {
|
|
45
|
+
/**
|
|
46
|
+
*
|
|
47
|
+
* @param {UniformBlockName} blockName
|
|
48
|
+
* @param {Array<UniformBlockMember} blockMembers
|
|
49
|
+
* @param {string} prefix usage name of block in the shader
|
|
50
|
+
*/
|
|
51
|
+
blockName;
|
|
52
|
+
blockMembers;
|
|
53
|
+
bindingPoint;
|
|
54
|
+
prefix;
|
|
55
|
+
offsetMap;
|
|
56
|
+
size;
|
|
57
|
+
constructor(blockName, blockMembers, bindingPoint, prefix = "") {
|
|
50
58
|
this.blockName = blockName;
|
|
51
59
|
this.blockMembers = blockMembers;
|
|
52
60
|
this.bindingPoint = bindingPoint;
|
|
@@ -54,56 +62,52 @@ var UniformBlockManager = /** @class */ (function () {
|
|
|
54
62
|
this.offsetMap = this.__create_LayoutSTD140_OffsetMap();
|
|
55
63
|
this.size = this.__calculateSize();
|
|
56
64
|
}
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
for (
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
code += "".concat(type, " ").concat(this.prefix).concat(name_1, ";");
|
|
65
|
+
glslCode() {
|
|
66
|
+
let code = `layout(std140) uniform ${this.blockName} {`;
|
|
67
|
+
for (const member of this.blockMembers) {
|
|
68
|
+
const { name, type } = member;
|
|
69
|
+
code += `${type} ${this.prefix}${name};`;
|
|
63
70
|
}
|
|
64
71
|
if (this.prefix) {
|
|
65
|
-
code +=
|
|
72
|
+
code += `} ${this.prefix};`;
|
|
66
73
|
}
|
|
67
74
|
else {
|
|
68
|
-
code +=
|
|
75
|
+
code += `};`;
|
|
69
76
|
}
|
|
70
77
|
return code;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
if (bufferWriteType === void 0) { bufferWriteType = "STATIC_DRAW"; }
|
|
75
|
-
var ubo = gl.createBuffer();
|
|
78
|
+
}
|
|
79
|
+
createUBO(gl, bufferWriteType = "STATIC_DRAW") {
|
|
80
|
+
const ubo = gl.createBuffer();
|
|
76
81
|
gl.bindBuffer(gl.UNIFORM_BUFFER, ubo);
|
|
77
82
|
// @ts-ignore
|
|
78
83
|
gl.bufferData(gl.UNIFORM_BUFFER, this.size, gl[bufferWriteType]);
|
|
79
84
|
gl.bindBufferBase(gl.UNIFORM_BUFFER, 0, ubo);
|
|
80
|
-
for (
|
|
81
|
-
|
|
82
|
-
var name_2 = member.name, type = member.type, _b = member.value, value = _b === void 0 ? null : _b;
|
|
85
|
+
for (const member of this.blockMembers) {
|
|
86
|
+
const { name, type, value = null } = member;
|
|
83
87
|
;
|
|
84
|
-
|
|
85
|
-
|
|
88
|
+
const offset = this.offsetMap.get(name);
|
|
89
|
+
const data = (value === null) ? new typeArrayConstructors[type](typeSizes[type] / 4).fill(NaN) : value;
|
|
86
90
|
gl.bufferSubData(gl.UNIFORM_BUFFER, offset, data);
|
|
87
91
|
}
|
|
88
92
|
gl.bindBuffer(gl.UNIFORM_BUFFER, null);
|
|
89
93
|
return {
|
|
90
|
-
ubo
|
|
91
|
-
update:
|
|
92
|
-
bind:
|
|
93
|
-
unbind:
|
|
94
|
-
free:
|
|
94
|
+
ubo,
|
|
95
|
+
update: (nameValueMap) => this.updateUBO(gl, ubo, nameValueMap),
|
|
96
|
+
bind: () => this.bind(gl, ubo),
|
|
97
|
+
unbind: () => this.unbind(gl),
|
|
98
|
+
free: () => gl.deleteBuffer(ubo),
|
|
95
99
|
};
|
|
96
|
-
}
|
|
97
|
-
|
|
100
|
+
}
|
|
101
|
+
updateUBO(gl, ubo, nameValueMap) {
|
|
98
102
|
gl.bindBuffer(gl.UNIFORM_BUFFER, ubo);
|
|
99
|
-
|
|
100
|
-
|
|
103
|
+
for (const [name, value] of nameValueMap.entries()) {
|
|
104
|
+
const offset = this.offsetMap.get(name);
|
|
101
105
|
if (offset === undefined) {
|
|
102
|
-
throw new Error(
|
|
106
|
+
throw new Error(`Uniform block member ${name} not found in offset map.`);
|
|
103
107
|
}
|
|
104
108
|
// @ts-ignore
|
|
105
|
-
|
|
106
|
-
|
|
109
|
+
const type = this.blockMembers.find(member => member.name === name).type;
|
|
110
|
+
let data;
|
|
107
111
|
if (Array.isArray(value)) {
|
|
108
112
|
data = new typeArrayConstructors[type](value);
|
|
109
113
|
}
|
|
@@ -116,53 +120,46 @@ var UniformBlockManager = /** @class */ (function () {
|
|
|
116
120
|
else if (ArrayBuffer.isView(value) && !(value instanceof DataView))
|
|
117
121
|
data = (typeof value === 'number') ? new typeArrayConstructors[type]([value]) : new typeArrayConstructors[type](value);
|
|
118
122
|
else {
|
|
119
|
-
throw new Error(
|
|
123
|
+
throw new Error(`Unsupported value type for ${name}: ${typeof value}`);
|
|
120
124
|
}
|
|
121
125
|
console.log("Data to be uploaded:", data);
|
|
122
126
|
gl.bufferSubData(gl.UNIFORM_BUFFER, offset, data);
|
|
123
|
-
};
|
|
124
|
-
var this_1 = this;
|
|
125
|
-
for (var _i = 0, _a = nameValueMap.entries(); _i < _a.length; _i++) {
|
|
126
|
-
var _b = _a[_i], name_3 = _b[0], value = _b[1];
|
|
127
|
-
_loop_1(name_3, value);
|
|
128
127
|
}
|
|
129
128
|
gl.bindBuffer(gl.UNIFORM_BUFFER, null);
|
|
130
|
-
}
|
|
129
|
+
}
|
|
131
130
|
// call this after linking the program
|
|
132
|
-
|
|
133
|
-
|
|
131
|
+
assignBindingPoint(gl, program) {
|
|
132
|
+
const blockIndex = gl.getUniformBlockIndex(program, this.blockName);
|
|
134
133
|
gl.uniformBlockBinding(program, blockIndex, this.bindingPoint);
|
|
135
|
-
}
|
|
134
|
+
}
|
|
136
135
|
// call this before drawing
|
|
137
|
-
|
|
136
|
+
bind(gl, ubo) {
|
|
138
137
|
gl.bindBufferBase(gl.UNIFORM_BUFFER, this.bindingPoint, ubo);
|
|
139
|
-
}
|
|
138
|
+
}
|
|
140
139
|
// call this right after drawing
|
|
141
|
-
|
|
140
|
+
unbind(gl) {
|
|
142
141
|
gl.bindBufferBase(gl.UNIFORM_BUFFER, this.bindingPoint, null);
|
|
143
|
-
}
|
|
142
|
+
}
|
|
144
143
|
// implicit methods
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
for (
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
var padding = (alignment - (offset % alignment)) % alignment;
|
|
144
|
+
__create_LayoutSTD140_OffsetMap() {
|
|
145
|
+
let offset = 0;
|
|
146
|
+
const offsetMap = new Map();
|
|
147
|
+
for (const member of this.blockMembers) {
|
|
148
|
+
const { name, type } = member;
|
|
149
|
+
const size = typeSizes[type];
|
|
150
|
+
const alignment = typeAlignments[type];
|
|
151
|
+
const padding = (alignment - (offset % alignment)) % alignment;
|
|
154
152
|
offset += padding;
|
|
155
|
-
offsetMap.set(
|
|
153
|
+
offsetMap.set(name, offset);
|
|
156
154
|
offset += size;
|
|
157
155
|
}
|
|
158
156
|
return offsetMap;
|
|
159
|
-
}
|
|
157
|
+
}
|
|
160
158
|
// __create_LayoutSTD140_OffsetMap() should be called before this
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
159
|
+
__calculateSize() {
|
|
160
|
+
const lastOffset = Array.from(this.offsetMap.values()).pop() || 0;
|
|
161
|
+
const lastItemAlignment = typeAlignments[this.blockMembers[this.blockMembers.length - 1].type];
|
|
164
162
|
return lastOffset + lastItemAlignment;
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
}
|
|
168
|
-
exports.UniformBlockManager = UniformBlockManager;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
export { UniformBlockManager };
|