@es3d/es3d 0.0.0-stage → 1.0.1
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/LICENSE +201 -0
- package/README.md +85 -2
- package/docs/REFERENCE.md +581 -0
- package/docs/SPEC.md +417 -0
- package/package.json +50 -4
- package/scripts/es3d-cli.mjs +377 -0
- package/src/cache/geometry-store.js +392 -0
- package/src/cache/mesh-bundle.js +123 -0
- package/src/cache/sha256.js +73 -0
- package/src/format/ast.js +238 -0
- package/src/format/colors.js +93 -0
- package/src/format/compact-parser.js +171 -0
- package/src/format/compact-tokenizer.js +165 -0
- package/src/format/errors.js +247 -0
- package/src/format/json.js +55 -0
- package/src/format/limits.js +14 -0
- package/src/format/parse.js +92 -0
- package/src/format/schema.js +617 -0
- package/src/format/serializer.js +333 -0
- package/src/format/validator.js +330 -0
- package/src/format/value-error.js +12 -0
- package/src/format/value-format.js +314 -0
- package/src/format/values.js +459 -0
- package/src/format/xml-parser.js +136 -0
- package/src/format/xml-tokenizer.js +237 -0
- package/src/geometry/contour.js +86 -0
- package/src/geometry/extrude.js +175 -0
- package/src/geometry/gear.js +85 -0
- package/src/geometry/geometry-cache.js +159 -0
- package/src/geometry/lod-error.js +178 -0
- package/src/geometry/mesh.js +458 -0
- package/src/geometry/primitives.js +299 -0
- package/src/geometry/registry.js +645 -0
- package/src/geometry/revolve.js +136 -0
- package/src/geometry/sweep.js +441 -0
- package/src/index.js +47 -0
- package/src/io/compression.js +67 -0
- package/src/io/convert.js +236 -0
- package/src/io/download.js +13 -0
- package/src/io/external-scene.js +127 -0
- package/src/io/file-loader.js +28 -0
- package/src/io/gltf.js +630 -0
- package/src/io/mesh-import.js +104 -0
- package/src/io/obj.js +352 -0
- package/src/io/step-brep.js +439 -0
- package/src/io/step-exact.js +1149 -0
- package/src/io/step.js +1418 -0
- package/src/io/stl.js +193 -0
- package/src/io/svg-import.js +787 -0
- package/src/material/materials.js +154 -0
- package/src/math/mat4.js +475 -0
- package/src/math/random.js +30 -0
- package/src/math/trig.js +65 -0
- package/src/math/vec3.js +81 -0
- package/src/optimize/optimizer.js +579 -0
- package/src/path/path-flatten.js +322 -0
- package/src/path/path-parser.js +332 -0
- package/src/path/shapes.js +129 -0
- package/src/path/triangulate.js +517 -0
- package/src/pipeline.js +74 -0
- package/src/render/camera.js +168 -0
- package/src/render/frame-builder.js +362 -0
- package/src/render/geometry-pool.js +149 -0
- package/src/render/lighting.js +149 -0
- package/src/render/orbit-controls.js +237 -0
- package/src/render/renderer.js +258 -0
- package/src/render/scroll-timeline.js +104 -0
- package/src/render/shaders/glsl.js +285 -0
- package/src/render/shaders/wgsl.js +252 -0
- package/src/render/stage.js +364 -0
- package/src/render/texture-cache.js +40 -0
- package/src/render/textures.js +223 -0
- package/src/render/webgl2/webgl2-backend.js +586 -0
- package/src/render/webgpu/webgpu-backend.js +482 -0
- package/src/scene/animation.js +171 -0
- package/src/scene/camera-constraints.js +117 -0
- package/src/scene/flatten.js +754 -0
- package/src/scene/picking.js +161 -0
- package/src/scene/scene-graph.js +320 -0
- package/src/transform/transform.js +211 -0
- package/src/wasm/kernels-binary.js +3 -0
- package/src/wasm/kernels.js +385 -0
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
// Generated by `npm run wasm` from wasm/*.c (50722 bytes) and wasm/simd/*.c (9738 bytes). Do not edit.
|
|
2
|
+
export default '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AwAgA0GgAWogDkGgAWopAwA3AwAgA0GoAWogDkGoAWopAwA3AwAgA0GwAWogDkGwAWopAwA3AwAgA0G4AWogDkG4AWopAwA3AwAgDUHAAWohDSAMIAtBBGoiC0cNAAsLIAlFDQAgAiALQTBsIg5qIQMgCiAOaiEOA0AgAyAOKQMANwMAIANBKGogDkEoaikDADcDACADQSBqIA5BIGopAwA3AwAgA0EYaiAOQRhqKQMANwMAIANBEGogDkEQaikDADcDACADQQhqIA5BCGopAwA3AwAgA0EwaiEDIA5BMGohDiAJQX9qIgkNAAsLQQAgCDYC1IqAgABBACACNgLQioCAAAsgAiAHQTBsaiIDIAY2AhAgAyAEOQMIIAMgBTkDACADQv////8PNwIkIANCfzcCHCADQoCAgIBwNwIUQQAgB0EBaiIKNgLYioCAAAwBC0EAIQdBAEEBOgDoioCAAEEAKALUioCAACEIQQAoAtiKgIAAIQpBACgC0IqAgAAhAgsgAiABQTBsaiIDKwMIIQQgAysDACEFIAMoAhAhBgJAAkAgCiAIRw0AIAhBAXRBEGoiD0EwbBCfgICAACICRQ0BAkBBACgC2IqAgAAiCkEBSA0AIApBA3EhCUEAKALQioCAACEIQQAhCwJAIApBBEkNACAKQfz///8HcSEMQQAhDUEAIQsDQCACIA1qIgMgCCANaiIOKQMANwMAIANBKGogDkEoaikDADcDACADQSBqIA5BIGopAwA3AwAgA0EYaiAOQRhqKQMANwMAIANBEGogDkEQaikDADcDACADQQhqIA5BCGopAwA3AwAgA0EwaiAOQTBqKQMANwMAIANBOGogDkE4aikDADcDACADQcAAaiAOQcAAaikDADcDACADQcgAaiAOQcgAaikDADcDACADQdAAaiAOQdAAaikDADcDACADQdgAaiAOQdgAaikDADcDACADQYgBaiAOQYgBaikDADcDACADQYABaiAOQYABaikDADcDACADQfgAaiAOQfgAaikDADcDACADQfAAaiAOQfAAaikDADcDACADQegAaiAOQegAaikDADcDACADQeAAaiAOQeAAaikDADcDACADQZABaiAOQZABaikDADcDACADQZgBaiAOQZgBaikDADcDACADQaABaiAOQaABaikDADcDACADQagBaiAOQagBaikDADcDACADQbABaiAOQbABaikDADcDACADQbgBaiAOQbgBaikDADcDACANQcABaiENIAwgC0EEaiILRw0ACwsgCUUNACACIAtBMGwiDmohAyAIIA5qIQ4DQCADIA4pAwA3AwAgA0EoaiAOQShqKQMANwMAIANBIGogDkEgaikDADcDACADQRhqIA5BGGopAwA3AwAgA0EQaiAOQRBqKQMANwMAIANBCGogDkEIaikDADcDACADQTBqIQMgDkEwaiEOIAlBf2oiCQ0ACwtBACAPNgLUioCAAEEAIAI2AtCKgIAACyACIApBMGxqIgMgBjYCECADIAQ5AwggAyAFOQMAIANC/////w83AiQgA0J/NwIcIANCgICAgHA3AhRBACAKQQFqNgLYioCAAEF/IQ4CQEEALQDoioCAAA0AIAIgAEEwbGoiDSgCHCEOIA0gATYCHCACIAFBMGxqIgkoAhghDSAJIAA2AhggAiAHQTBsaiIJIA42AhwgAiAOQTBsaiAHNgIYIANBHGogBzYCACAJIAo2AhggAiANQTBsaiAKNgIcIANBGGogDTYCACAKIQ4LIA4PC0EAQQE6AOiKgIAAQX8LugIDBX8EfAF/AkAgAEEATg0AIAAPCyAAIAEgAUEASBshAkEAKALQioCAACEDAkADQCADIABBMGxqIgEoAhwhAEEAIQQCQCABKAIoDQAgASgCGCEFIAMgAEEwbGoiBisDCCEHIAErAwghCAJAAkAgASsDACIJIAYrAwAiCmINACAIIAdhDQELIAogCaEgCCADIAVBMGxqIgsrAwihoiAJIAsrAwChIAcgCKGioUQAAAAAAAAAAGINAQsgAyAFQTBsaiAANgIcIAYgBTYCGCABKAIkIQACQCABKAIgIgRBAEgNACADIARBMGxqIAA2AiQLIAFBGGohAQJAIABBAEgNACADIABBMGxqIAQ2AiALQQEhBCABKAIAIgIhACACIAMgAkEwbGooAhxGDQILIAQNACAAIAJHDQALCyACC7gqCQV/AXwBfwF8CX8CfAF/DXwEfwJAA0AgAEEASA0BQQAtAOiKgIAAQQFxDQEgBUGRAyAFQZEDShshBgNAAkAgBSAGRw0AQQBBAToA6IqAgAAPC0EAKALQioCAACEHAkAgA0QAAAAAAAAAAGQgA0QAAAAAAAAAAGNyQQFHIggNACAEDQAg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gICAAJohFkEAKAL8i4CAAEUNASAVIA4gFhCigICAACERDAILIAUgA0EMbCIXaiAVIACitjgCACAFIBdBBGoiGGpBgICA+AM2AgAgBSAXQQhqIh5qIBEgAKK2OAIAIAggGGogGTgCACAIIBdqIBo4AgAgCCAeaiAbOAIAIBQgAzYCACAJIANBA3RqIgNBBGpBgICA/AM2AgAgAyAcOAIAIAFBAmohASAEIAZGDQMMAgsgFSAOIBYQhICAgAAhEQsgBSADQQxsIhdqQoCAgICAgICAPzcCACAFIBdBCGoiGGpBADYCACAIIBdqIhdBBGogDiARo7Y4AgAgFyAVIBGjtjgCACAIIBhqIBYgEaO2OAIAIBQgAzYCACAJIANBA3RqIgNBBGpBgICA/AM2AgAgAyAdtjgCACABQQJqIQEgBCAGRw0AIARB/v///wdxIQYgBEEBcSESQQAhDyAKIQMDQCAHKQIAIR8gA0EIaiANKAIANgIAIAMgHzcCACAHQQRqKQIAIR8gA0EUaiANQQRqKAIANgIAIANBDGogHzcCACADQRhqIQMgDUEIaiENIAdBCGohByAPQQZqIQ8gBkF+aiIGDQALIBJFDQMgBykCACEfIANBCGogDSgCADYCACADIB83AgAgD0EDaiEPDAMLIA9BCGohDyASQQhqIRIgE0EEaiETIBRBBGohFCAGQQFqIQYMAQsLIARBBmwhDyAKIQMgBCESA0AgB0EEaiITKAIAIRQgDUEEaiIXKAIAIQYgBygCACEHIANBFGogDSgCADYCACADQRBqIAY2AgAgA0EMaiAHNgIAIANBCGogBjYCACADQQRqIBQ2AgAgAyAHNgIAIANBGGohAyATIQcgFyENIBJBf2oiEg0ACwsCQAJAIAINACABIR4MAQsgBSABQQxsIgNqIhRBADYCACAFIANBBHIiBmpBgICA+Hs2AgAgBSADQQhqIgdqQQA2AgAgCCAGakGAgID8ezYCACAIIANqIhdBADYCACAIIAdqQQA2AgAgCSABQQN0aiIDQoCAgPiDgICAPzcCACAEQX9zIRggAUEBciECIANBFGohAyALIQYgDCENQQAhE0EAIQcDQCAUIAdqIhJBFGogDSsDACIRtjgCACASQRBqQYCAgPh7NgIAIBJBDGogBisDACIVtjgCACAXIAdqIhJBFGpBADYCACAS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IAFvQRhsaiIfKwMAIRQgACASQQFqIhIgAW8gAWogAW9BGGxqIiArAwAhHiAYQRBqKwMAIRkgGEEIaisDACEaIBNBEGorAwAhFSATQQhqKwMAIRYgH0EQaisDACEhIB9BCGorAwAhIiAgQRBqKwMAIRwgIEEIaisDACEdDAILIAAgGEEYbGoiEysDACEeIBNBEGorAwAhHCATQQhqKwMAIR0LAkACQCASQQJqIhIgAUgNACAKKwMAIhQgFKAgCSsDAKEhISAMKwMAIhQgFKAgCysDAKEhIiAOKwMAIhQgFKAgDSsDAKEhFAwBCyAAIBJBGGxqIhIrAwAhFCASQRBqKwMAISEgEkEIaisDACEiCyAYIRILIBkgFaEhIyAaIBahISQgGyAXoSElAkACQEEAKAL8i4CAAEUNACAlICQgIxCigICAACEmDAELICUgJCAjEISAgIAAISYLIBwgGaEhJyAdIBqhISggHiAboSEpAkACQEEAKAL8i4CAAEUNACApICggJxCigICAACEqDAELICkgKCAnEISAgIAAISoLICEgHKEhKyAiIB2hISwgFCAeoSEtAkACQEEAKAL8i4CAAEUNACAtICwgKxCigICAACEUDAELIC0gLCArEISAgIAAIRQLAkAgA0EBSA0AIAggBmohEyAmn0SN7bWg98awPqVEAAAAAAAAAACgIiIgKp9Eje21oPfGsD6loCIuICKhIS8gByAGQQN0aiEGIC4gFJ9Eje21oPfGsD6loCIUICKhITAgFCAuoSExRAAAAAAAAAAAISYgAyEYA0AgBkEQaiAVICMgIiAvICaiIA+joCIhICKjIiqioCIyICEgLqMiMyAZICcgISAioSI0IC+jIhSioCI1IDKhoqAiNiAUIDUgNCAwoyIyIBwgKyAhIC6hIDGjIiGioCA1oaKgIDahoqA5AwAgBkEIaiAWICQgKqKgIjQgMyAaICggFKKgIjUgNKGioCI0IBQgNSAyIB0gLCAhoqAgNaGioCA0oaKgOQMAIAYgFyAlICqioCI1IDMgGyApIBSioCIqIDWhoqAiMyAUICogMiAeIC0gIaKgICqhoqAgM6GioDkDACAGQRhqIQYgJkQAAAAAAADwP6AhJiAYQX9qIhgNAAsgEyEGCyASIAVIDQALCwJAIAINAAJAAkAgAUEASg0AIAArAxAiFCAUoCAA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';
|
|
3
|
+
export const INSTANCES = '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DP0AADAief3yAf3wASAP/QoDECJ6IAz9AABQInz98gH98AEgDP0AAHD98AEidyAP/QoDGCKEASB1/ewB/fIBIA/9CgMgIoUBIHn97AH98gH98AEgD/0KAygieSB8/ewB/fIB/fABInX98AEifCAbIHwgG/1K/VIhGyAZIAz9AAAAInz98gEgdiAM/QAAICKGAf3yAf3wASB6IAz9AABAInb98gH98AEgDP0AAGD98AEiGSCEASB8/ewB/fIBIIUBIIYB/ewB/fIB/fABIHkgdv3sAf3yAf3wASJ2/fABInkgJSB5ICX9Sv1SISUgdyB1/fEBInkgHCB5IBz9Sf1SIRwgGSB2/fEBInkgJiB5ICb9Sf1SISYgdyB2IHb98gEidv0hACB2/SEBoCB1IHX98gH9IQCgn/0iASF1CyAOIGNBBHRqIBn9XiB1/V79DQABAgMEBQYHEBESExQVFhf9CwAAIGNBAWohYwsgggFBEGohggEggQFBBGoigQEgB0gNAAsLAkAgMg0AICEgUv3yASEZICMgU/3yASF1IB8gUf3yASF2ICIgUv3yASF3ICQgU/3yASF5ICAgUf3yASF6ICEgVv3yASF8ICMgV/3yASGEASAiIFb98gEhhQEgJCBX/fIBIYYBICMgW/3yASGHASAkIFv98gEhiAEgIyBf/fIBICEgXv3yAf3wASAfIF398gH98AEgHSBc/fIB/fABISMgJCBf/fIBICIgXv3yAf3wASAgIF398gH98AEgHiBc/fIB/fABISQgiAEgIiBa/fIB/fABICAgWf3yAf3wASAeIFj98gH98AEhIiCHASAhIFr98gH98AEgHyBZ/fIB/fABIB0gWP3yAf3wASEhIIYBIIUB/fABICAgVf3yAf3wASAeIFT98gH98AEhICCEASB8/fABIB8gVf3yAf3wASAdIFT98gH98AEhHyB6IHkgd/3wAf3wASAeIFD98gH98AEhHiB2IHUgGf3wAf3wASAdIFD98gH98AEhHQsgZEEBaiJkIApHDQALCyABICX9CwCoBCABICb9CwCQBCABIB39CwPwASABIB79CwPgASABIB/9CwPQASABICD9CwPAASABICH9CwOwASABICL9CwOgASABICP9CwOQASABICT9CwOAASABIBz9IQA5A6AEIAAgGjYCDCABIBv9IQA5A7gECyAWCxEAQQBBkIiEgAA2AoCIgIAAC2sBAn8CQEEAKAKAiICAACIBDQBBkIiEgAAhAUEAQZCIhIAANgKAiICAAAsCQCABQQdqQXhxIgIgAGoiAT8AQRB0IgBNDQAgASAAa0H//wNqQRB2QABBf0cNAEEADwtBACABNgKAiICAACACCw0AQQAgADYChIiAgAALhQIDAX8CfAF/AkACQCAAIABiIgJFDQBEAAAAAAAAAAAhA0QAAAAAAAAAACEEDAELRAAAAAAAAAAAIQQgAJkhAyAARAAAAAAAAAAAZCAARAAAAAAAAAAAY3JBAUcNACADIQQLAkAgASABYQ0ARAAAAAAAAPB/RAAAAAAAAPh/IAREAAAAAAAA8H9hGw8LRAAAAAAAAPB/RAAAAAAAAPh/IAGZIgEgBCABIARkGyIERAAAAAAAAPB/YSIFGyEAAkAgBQ0AIAINAEQAAAAAAAAAACEAIAREAAAAAAAAAABhDQAgBCADIASjIgAgAKIiACABIASjIgEgAaIgACAAoaCgn6IhAAsgAAvMAgQCfAF/AXwBf0QAAAAAAAAAACEDRAAAAAAAAAAAIQRBASEFRAAAAAAAAAAAIQYCQCAAIABiDQBEAAAAAAAAAAAhBiAAmSEEQQAhBSAARAAAAAAAAAAAZCAARAAAAAAAAAAAY3JBAUcNACAEIQYLAkACQCABIAFhDQBBASEFDAELIAGZIgMgBmRFDQAgAyEGCwJAIAIgAmENAEQAAAAAAADwf0QAAAAAAAD4fyAGRAAAAAAAAPB/YRsPC0QAAAAAAADwf0QAAAAAAAD4fyACmSICIAYgAiAGZBsiAEQAAAAAAADwf2EiBxshBgJAIAcNACAFDQBEAAAAAAAAAAAhBiAARAAAAAAAAAAAYQ0AIAAgBCAAoyIGIAaiIgYgAyAAoyIBIAGiIAYgBqGgIgGgIgQgAiAAoyICIAKiIAEgBiAEoaCgoJ+iIQYLIAYL';
|
|
@@ -0,0 +1,385 @@
|
|
|
1
|
+
// WebAssembly versions of the reader's hottest loops: number lists, normals,
|
|
2
|
+
// sweeps, extrusions, triangulation, primitives and the instance rows of
|
|
3
|
+
// <repeat> and <scatter>. They are built from wasm/ by `npm run wasm` and
|
|
4
|
+
// compute exactly what the JavaScript versions compute (the same IEEE
|
|
5
|
+
// operations in the same order; sin, cos, atan2 and hypot come from this
|
|
6
|
+
// page's Math). Where WebAssembly is missing or blocked, for example by a
|
|
7
|
+
// content security policy without 'wasm-unsafe-eval', every caller keeps
|
|
8
|
+
// using its JavaScript version.
|
|
9
|
+
|
|
10
|
+
import BINARY, { INSTANCES } from './kernels-binary.js';
|
|
11
|
+
|
|
12
|
+
let text = ''; // the number list being read, for the rare numbers the kernel hands back to Number()
|
|
13
|
+
let material = null; // resolves an instance row's material code (see instancesWasm)
|
|
14
|
+
|
|
15
|
+
const imports = {
|
|
16
|
+
env: {
|
|
17
|
+
sin: Math.sin,
|
|
18
|
+
cos: Math.cos,
|
|
19
|
+
atan2: Math.atan2,
|
|
20
|
+
tan: Math.tan,
|
|
21
|
+
acos: Math.acos,
|
|
22
|
+
hypot2: Math.hypot,
|
|
23
|
+
hypot3: Math.hypot,
|
|
24
|
+
number: (start, end) => Number(text.slice(start, end)),
|
|
25
|
+
material: (code) => material(code),
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
function decode(base64) {
|
|
30
|
+
// native decoders where there is one (newer browsers, Node); a loop otherwise
|
|
31
|
+
if (typeof Uint8Array.fromBase64 === 'function') return Uint8Array.fromBase64(base64);
|
|
32
|
+
if (typeof Buffer === 'function') return Buffer.from(base64, 'base64');
|
|
33
|
+
const s = atob(base64);
|
|
34
|
+
const bytes = new Uint8Array(s.length);
|
|
35
|
+
for (let i = 0; i < s.length; i++) bytes[i] = s.charCodeAt(i);
|
|
36
|
+
return bytes;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
async function instantiate(base64) {
|
|
40
|
+
try {
|
|
41
|
+
if (typeof WebAssembly !== 'object') return null;
|
|
42
|
+
const { instance } = await WebAssembly.instantiate(decode(base64), imports);
|
|
43
|
+
return instance.exports;
|
|
44
|
+
} catch {
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// the instance kernel is a module of its own: it needs WebAssembly SIMD
|
|
50
|
+
const [wasm, simd] = await Promise.all([instantiate(BINARY), instantiate(INSTANCES)]);
|
|
51
|
+
let enabled = wasm !== null;
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Whether the module's hypot (V8's algorithm) gives this engine's Math.hypot
|
|
55
|
+
* results. The special cases (infinities, NaN, zeros) are fixed by the
|
|
56
|
+
* language; the rounding of finite values is the engine's, so values over
|
|
57
|
+
* many magnitudes are compared. Where they differ the kernels keep calling
|
|
58
|
+
* Math.hypot, which is slower (every call leaves WebAssembly and allocates).
|
|
59
|
+
*/
|
|
60
|
+
function hypotMatches() {
|
|
61
|
+
const edge = [0, -0, 3, -4, 5e-324, 1e308, Infinity, NaN];
|
|
62
|
+
for (const x of edge) for (const y of edge) if (!Object.is(wasm.hypot2(x, y), Math.hypot(x, y))) return false;
|
|
63
|
+
let seed = 12345;
|
|
64
|
+
const next = () => {
|
|
65
|
+
seed = (Math.imul(seed, 1103515245) + 12345) >>> 0;
|
|
66
|
+
return (seed / 4294967296 - 0.5) * 10 ** ((seed % 41) - 20);
|
|
67
|
+
};
|
|
68
|
+
for (let i = 0; i < 100; i++) {
|
|
69
|
+
const x = next(), y = next(), z = next();
|
|
70
|
+
if (!Object.is(wasm.hypot3(x, y, z), Math.hypot(x, y, z)) || !Object.is(wasm.hypot2(x, y), Math.hypot(x, y))) return false;
|
|
71
|
+
}
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
if (wasm) wasm.set_native_hypot(hypotMatches() ? 1 : 0);
|
|
75
|
+
|
|
76
|
+
/** Whether the kernels are in use. */
|
|
77
|
+
export function wasmEnabled() {
|
|
78
|
+
return enabled;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/** Whether the instance kernel is in use (it needs WebAssembly SIMD as well). */
|
|
82
|
+
export function instanceKernelEnabled() {
|
|
83
|
+
return enabled && simd !== null;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/** Turn the kernels off (or back on, when they loaded) to compare with the JavaScript versions. */
|
|
87
|
+
export function setWasmEnabled(on) {
|
|
88
|
+
enabled = Boolean(on) && wasm !== null;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
const heap = () => wasm.memory.buffer;
|
|
92
|
+
|
|
93
|
+
/** Copy a typed array into a module's memory; returns its address (0 when memory ran out). */
|
|
94
|
+
function put(a, module = wasm) {
|
|
95
|
+
const p = module.alloc(Math.max(1, a.byteLength));
|
|
96
|
+
if (p) new Uint8Array(module.memory.buffer, p, a.byteLength).set(new Uint8Array(a.buffer, a.byteOffset, a.byteLength));
|
|
97
|
+
return p;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
const encoder = new TextEncoder();
|
|
101
|
+
const AS = { f64: [0, Float64Array], f32: [1, Float32Array], index: [2, Uint32Array] };
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* A number list read into a typed array (`as`: 'f64', 'f32' or 'index'), or
|
|
105
|
+
* null when the JavaScript reader must handle it (the kernels are off, the
|
|
106
|
+
* text is not ASCII, or it has an error, which JavaScript then reports).
|
|
107
|
+
*/
|
|
108
|
+
export function readNumbersWasm(raw, as) {
|
|
109
|
+
if (!enabled) return null;
|
|
110
|
+
const [kind, Type] = AS[as];
|
|
111
|
+
const n = raw.length;
|
|
112
|
+
wasm.reset();
|
|
113
|
+
const sp = wasm.alloc(Math.max(1, n));
|
|
114
|
+
const op = sp && wasm.alloc((Math.floor(n / 2) + 1) * Type.BYTES_PER_ELEMENT);
|
|
115
|
+
if (!op) return null;
|
|
116
|
+
const r = encoder.encodeInto(raw, new Uint8Array(heap(), sp, n));
|
|
117
|
+
if (r.read !== n || r.written !== n) return null;
|
|
118
|
+
text = raw;
|
|
119
|
+
const count = wasm.numbers(sp, n, op, kind);
|
|
120
|
+
text = '';
|
|
121
|
+
if (count < 0) return null;
|
|
122
|
+
return new Type(heap(), op, count).slice();
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* computeNormals for Float32Array positions and uvs and Uint32Array indices,
|
|
127
|
+
* as {positions, normals, uvs, indices}, or null to use the JavaScript version.
|
|
128
|
+
*/
|
|
129
|
+
export function computeNormalsWasm(positions, indices, crease, cosCrease, uvs) {
|
|
130
|
+
if (!enabled || !(positions instanceof Float32Array) || !(indices instanceof Uint32Array) || (uvs && !(uvs instanceof Float32Array))) return null;
|
|
131
|
+
wasm.reset();
|
|
132
|
+
const pp = put(positions), ip = put(indices), tp = uvs ? put(uvs) : 0;
|
|
133
|
+
if (!pp || !ip || (uvs && !tp)) return null;
|
|
134
|
+
const res = wasm.normals(pp, positions.length / 3, ip, indices.length, tp, crease, cosCrease);
|
|
135
|
+
if (!res) return null;
|
|
136
|
+
const [vc, ic, p, nrm, t, i] = new Uint32Array(heap(), res, 6);
|
|
137
|
+
return {
|
|
138
|
+
positions: new Float32Array(heap(), p, vc * 3).slice(),
|
|
139
|
+
normals: new Float32Array(heap(), nrm, vc * 3).slice(),
|
|
140
|
+
uvs: new Float32Array(heap(), t, vc * 2).slice(),
|
|
141
|
+
indices: new Uint32Array(heap(), i, ic).slice(),
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
const f64 = (a) => (a instanceof Float64Array ? a : Float64Array.from(a));
|
|
146
|
+
const u32 = (a) => (a instanceof Uint32Array ? a : Uint32Array.from(a));
|
|
147
|
+
const u8 = (a) => (a instanceof Uint8Array ? a : Uint8Array.from(a));
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Writes contours ({points, smooth, isWall}) as {n, points, smooth, isWall}
|
|
151
|
+
* records; returns the table's address, or 0 when memory ran out.
|
|
152
|
+
*/
|
|
153
|
+
function contourTable(list) {
|
|
154
|
+
const rows = new Int32Array(list.length * 4);
|
|
155
|
+
for (let k = 0; k < list.length; k++) {
|
|
156
|
+
const c = list[k];
|
|
157
|
+
const p = put(f64(c.points));
|
|
158
|
+
const sm = c.smooth ? put(u8(c.smooth)) : 0;
|
|
159
|
+
if (!p || (c.smooth && !sm)) return 0;
|
|
160
|
+
rows[k * 4] = c.points.length / 2;
|
|
161
|
+
rows[k * 4 + 1] = p;
|
|
162
|
+
rows[k * 4 + 2] = sm;
|
|
163
|
+
rows[k * 4 + 3] = c.isWall === false ? 0 : 1;
|
|
164
|
+
}
|
|
165
|
+
return put(rows);
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/** {first contour, contour count} per region, appending each region's contours to `list`. */
|
|
169
|
+
function regionRows(regions, list) {
|
|
170
|
+
const rows = new Int32Array(Math.max(1, regions.length * 2));
|
|
171
|
+
regions.forEach((r, k) => {
|
|
172
|
+
rows[k * 2] = list.length;
|
|
173
|
+
rows[k * 2 + 1] = 1 + r.holes.length;
|
|
174
|
+
list.push(r.outer, ...r.holes);
|
|
175
|
+
});
|
|
176
|
+
return rows;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/** A kernel's mesh, copied out of kernel memory into one buffer (one allocation instead of four). */
|
|
180
|
+
const meshOut = (res, extra) => {
|
|
181
|
+
const [vc, ic, p, nrm, t, i] = new Uint32Array(heap(), res, 6);
|
|
182
|
+
const out = new ArrayBuffer((vc * 8 + ic) * 4);
|
|
183
|
+
const positions = new Float32Array(out, 0, vc * 3);
|
|
184
|
+
const normals = new Float32Array(out, vc * 12, vc * 3);
|
|
185
|
+
const uvs = new Float32Array(out, vc * 24, vc * 2);
|
|
186
|
+
const indices = new Uint32Array(out, vc * 32, ic);
|
|
187
|
+
positions.set(new Float32Array(heap(), p, vc * 3));
|
|
188
|
+
normals.set(new Float32Array(heap(), nrm, vc * 3));
|
|
189
|
+
uvs.set(new Float32Array(heap(), t, vc * 2));
|
|
190
|
+
indices.set(new Uint32Array(heap(), i, ic));
|
|
191
|
+
return { positions, normals, uvs, indices, ...extra };
|
|
192
|
+
};
|
|
193
|
+
|
|
194
|
+
/**
|
|
195
|
+
* sweepMesh after its profile is known: spines [{points, closed}], the
|
|
196
|
+
* profile contours, the circle's points (circle profiles) or the regions to
|
|
197
|
+
* cap (shaped profiles). Returns {positions, normals, uvs, indices, open,
|
|
198
|
+
* degenerate: one flag per spine, errors: triangulation error per cap
|
|
199
|
+
* region}, or null to use the JavaScript version.
|
|
200
|
+
*/
|
|
201
|
+
export function sweepWasm(spines, contours, circle, regions, twist, taper, caps) {
|
|
202
|
+
if (!enabled) return null;
|
|
203
|
+
wasm.reset();
|
|
204
|
+
const list = [...contours];
|
|
205
|
+
const regionTab = circle ? null : regionRows(regions, list);
|
|
206
|
+
const table = contourTable(list);
|
|
207
|
+
const spineRows = new Int32Array(Math.max(1, spines.length * 3));
|
|
208
|
+
for (let k = 0; k < spines.length; k++) {
|
|
209
|
+
spineRows[k * 3] = put(f64(spines[k].points));
|
|
210
|
+
spineRows[k * 3 + 1] = spines[k].points.length / 3;
|
|
211
|
+
spineRows[k * 3 + 2] = spines[k].closed ? 1 : 0;
|
|
212
|
+
if (!spineRows[k * 3]) return null;
|
|
213
|
+
}
|
|
214
|
+
const profile = put(Int32Array.from(contours, (_, k) => k));
|
|
215
|
+
const spineTab = put(spineRows);
|
|
216
|
+
const capData = circle ? put(f64(circle)) : put(regionTab);
|
|
217
|
+
const header = put(
|
|
218
|
+
Int32Array.of(spines.length, spineTab, list.length, table, contours.length, profile, circle ? 1 : 2, circle ? circle.length / 2 : regions.length, capData, caps ? 1 : 0),
|
|
219
|
+
);
|
|
220
|
+
if (!table || !profile || !spineTab || !capData || !header) return null;
|
|
221
|
+
const res = wasm.sweep(header, twist, taper);
|
|
222
|
+
if (!res) return null;
|
|
223
|
+
const [open, deg, errs] = new Uint32Array(heap(), res + 24, 3);
|
|
224
|
+
return meshOut(res, {
|
|
225
|
+
open: open !== 0,
|
|
226
|
+
degenerate: Array.from(new Uint8Array(heap(), deg, spines.length), (d) => d !== 0),
|
|
227
|
+
errors: circle ? [] : Array.from(new Float64Array(heap(), errs, regions.length)),
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
/**
|
|
232
|
+
* triangulate(data, holeIndices) as an array of vertex indices, or null to
|
|
233
|
+
* use the JavaScript version (also when two holes tie for the sort order).
|
|
234
|
+
*/
|
|
235
|
+
export function triangulateWasm(data, holeIndices) {
|
|
236
|
+
if (!enabled) return null;
|
|
237
|
+
wasm.reset();
|
|
238
|
+
const dp = put(f64(data));
|
|
239
|
+
const holes = holeIndices && holeIndices.length ? Int32Array.from(holeIndices) : null;
|
|
240
|
+
const hp = holes ? put(holes) : 0;
|
|
241
|
+
if (!dp || (holes && !hp)) return null;
|
|
242
|
+
let res;
|
|
243
|
+
try {
|
|
244
|
+
res = wasm.triangulate(dp, data.length, hp, holes ? holes.length : 0);
|
|
245
|
+
} catch {
|
|
246
|
+
return null; // stack exhausted on pathological input: JavaScript has a deeper stack
|
|
247
|
+
}
|
|
248
|
+
if (!res) return null;
|
|
249
|
+
const [count, p] = new Uint32Array(heap(), res, 2);
|
|
250
|
+
return count ? Array.from(new Uint32Array(heap(), p, count)) : [];
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
/**
|
|
254
|
+
* extrudeMesh from a shape ({regions, walls}) with the bevel profile rings
|
|
255
|
+
* {inset, z, nr, nz} and bounds from JavaScript. Returns {positions,
|
|
256
|
+
* normals, uvs, indices, errors: triangulation error per region}, or null
|
|
257
|
+
* to use the JavaScript version.
|
|
258
|
+
*/
|
|
259
|
+
export function extrudeWasm(shape, bevel, rings, z0, zTop, minX, minY, S) {
|
|
260
|
+
if (!enabled) return null;
|
|
261
|
+
wasm.reset();
|
|
262
|
+
const list = [];
|
|
263
|
+
const regionTab = put(regionRows(shape.regions, list));
|
|
264
|
+
const walls = put(Int32Array.from(shape.walls, (_, k) => list.length + k));
|
|
265
|
+
list.push(...shape.walls);
|
|
266
|
+
const table = contourTable(list);
|
|
267
|
+
const ringData = new Float64Array(Math.max(1, rings.length * 4));
|
|
268
|
+
rings.forEach((r, k) => ringData.set([r.inset, r.z, r.nr, r.nz], k * 4));
|
|
269
|
+
const ringPtr = put(ringData);
|
|
270
|
+
const header = put(Int32Array.of(list.length, table, shape.regions.length, regionTab, shape.walls.length, walls, rings.length, ringPtr));
|
|
271
|
+
if (!regionTab || !walls || !table || !ringPtr || !header) return null;
|
|
272
|
+
const res = wasm.extrude(header, bevel, z0, zTop, minX, minY, S);
|
|
273
|
+
if (!res) return null;
|
|
274
|
+
const errs = new Uint32Array(heap(), res + 24, 1)[0];
|
|
275
|
+
return meshOut(res, { errors: Array.from(new Float64Array(heap(), errs, shape.regions.length)) });
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
/** measureSphereDeviation(w) for w >= 3, or null to use the JavaScript version. */
|
|
279
|
+
export function sphereDeviationWasm(w) {
|
|
280
|
+
if (!enabled) return null;
|
|
281
|
+
wasm.reset();
|
|
282
|
+
const v = wasm.sphere_deviation(w);
|
|
283
|
+
return v < 0 ? null : v;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
const whole = (...v) => v.every((x) => Number.isInteger(x) && x >= 0 && x < 2 ** 30);
|
|
287
|
+
const prim = (res) => (res ? meshOut(res) : null);
|
|
288
|
+
|
|
289
|
+
/** unitSphere, unitCylinder, unitCapsule, unitTorus and roundedBox ({positions, normals, uvs, indices}), or null. */
|
|
290
|
+
export const primitivesWasm = {
|
|
291
|
+
sphere: (segments) => (enabled && whole(segments) ? (wasm.reset(), prim(wasm.sphere(segments))) : null),
|
|
292
|
+
cylinder: (top, segments, caps) => (enabled && whole(segments) ? (wasm.reset(), prim(wasm.cylinder(top, segments, caps ? 1 : 0))) : null),
|
|
293
|
+
capsule: (L, segments) => (enabled && whole(segments) ? (wasm.reset(), prim(wasm.capsule(L, segments))) : null),
|
|
294
|
+
torus: (t, arcDeg, segments, tubeSegments) => (enabled && whole(segments, tubeSegments) ? (wasm.reset(), prim(wasm.torus(t, arcDeg, segments, tubeSegments))) : null),
|
|
295
|
+
roundedBox: (w, h, d, r, seg) => (enabled && whole(seg) && seg >= 1 ? (wasm.reset(), prim(wasm.rounded_box(w, h, d, r, seg))) : null),
|
|
296
|
+
};
|
|
297
|
+
|
|
298
|
+
/** catmullRom for two or more points (a Float64Array), or null. */
|
|
299
|
+
export function catmullRomWasm(points, closed, subdivisions) {
|
|
300
|
+
if (!enabled || !whole(subdivisions) || points.length < 6 || points.length % 3) return null;
|
|
301
|
+
wasm.reset();
|
|
302
|
+
const p = put(f64(points));
|
|
303
|
+
const res = p && wasm.catmull_rom(p, points.length / 3, closed ? 1 : 0, subdivisions);
|
|
304
|
+
if (!res) return null;
|
|
305
|
+
const [count, out] = new Uint32Array(heap(), res, 2);
|
|
306
|
+
return new Float64Array(heap(), out, count * 3).slice();
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
/** gearOutline ({outline: {points, smooth, closed}, outerRadius, rootRadius}), or null. */
|
|
310
|
+
export function gearOutlineWasm(teeth, pressureAngleDeg, flankSamples, arcSamples) {
|
|
311
|
+
if (!enabled || !whole(teeth, flankSamples, arcSamples) || teeth < 1) return null;
|
|
312
|
+
wasm.reset();
|
|
313
|
+
const res = wasm.gear_outline(teeth, pressureAngleDeg, flankSamples, arcSamples);
|
|
314
|
+
if (!res) return null;
|
|
315
|
+
const [count, pts, smooth, radii] = new Uint32Array(heap(), res, 4);
|
|
316
|
+
const [outerRadius, rootRadius] = new Float64Array(heap(), radii, 2);
|
|
317
|
+
return {
|
|
318
|
+
outline: { points: new Float64Array(heap(), pts, count * 2).slice(), smooth: new Uint8Array(heap(), smooth, count).slice(), closed: true },
|
|
319
|
+
outerRadius,
|
|
320
|
+
rootRadius,
|
|
321
|
+
};
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
// Header layouts of the instance kernel (the enums in wasm/simd/instances.c).
|
|
325
|
+
export const INSTANCE_HEADER = {
|
|
326
|
+
KIND: 0, FIRST: 1, COUNT: 2, STATE: 3, MODE: 4, NX: 5, NZ: 6, RANDOM: 7, CHOICES: 8,
|
|
327
|
+
OPS: 9, NOPS: 10, MATS: 11, ROWS: 12, NROWS: 13, BOUNDS: 14, MATERIALS: 15, LODS: 16, OUTER_LOD: 17, SWITCH: 18, SLOTS: 19,
|
|
328
|
+
OUT: 20, SIZE: 29,
|
|
329
|
+
};
|
|
330
|
+
export const INSTANCE_PARAMS = { WORLD: 0, ACC: 16, STEP: 32, SPACING: 48, JITTER: 50, RADIUS: 51, AREA: 52, ROTATION: 54, SCALE: 60, BOUNDS: 66, SIZE: 72 };
|
|
331
|
+
|
|
332
|
+
/**
|
|
333
|
+
* Instance rows of placements [FIRST, FIRST + COUNT) of a <repeat> or
|
|
334
|
+
* <scatter> whose subtree was recorded as `template` ({ops, mats, table,
|
|
335
|
+
* bounds}, see recordTemplate in src/scene/flatten.js). The headers `h`
|
|
336
|
+
* (Int32Array) and `f` (Float64Array) and the table `materials` (material
|
|
337
|
+
* index per material code, -1 until resolveMaterial(code) has given it)
|
|
338
|
+
* carry the generator state, the accumulated repeat step, the scene bounds
|
|
339
|
+
* and the materials from one call to the next. Returns views of kernel
|
|
340
|
+
* memory, valid until the next kernel call, or null.
|
|
341
|
+
*/
|
|
342
|
+
export function instancesWasm(h, f, template, materials, resolveMaterial) {
|
|
343
|
+
if (!enabled || !simd) return null;
|
|
344
|
+
simd.reset();
|
|
345
|
+
const H = INSTANCE_HEADER;
|
|
346
|
+
h[H.OPS] = put(template.ops, simd);
|
|
347
|
+
h[H.MATS] = put(template.mats, simd);
|
|
348
|
+
h[H.ROWS] = put(template.table, simd);
|
|
349
|
+
h[H.BOUNDS] = put(template.bounds, simd);
|
|
350
|
+
h[H.MATERIALS] = put(materials, simd);
|
|
351
|
+
const hp = put(h, simd), fp = put(f, simd);
|
|
352
|
+
if (!h[H.OPS] || !h[H.MATS] || !h[H.ROWS] || !h[H.BOUNDS] || !h[H.MATERIALS] || !hp || !fp) return null;
|
|
353
|
+
material = resolveMaterial;
|
|
354
|
+
try {
|
|
355
|
+
if (!simd.instances(hp, fp)) return null;
|
|
356
|
+
} finally {
|
|
357
|
+
material = null;
|
|
358
|
+
}
|
|
359
|
+
const buf = simd.memory.buffer;
|
|
360
|
+
h.set(new Int32Array(buf, hp, H.SIZE));
|
|
361
|
+
f.set(new Float64Array(buf, fp, INSTANCE_PARAMS.SIZE));
|
|
362
|
+
materials.set(new Int32Array(buf, h[H.MATERIALS], materials.length));
|
|
363
|
+
const n = h[H.COUNT] * h[H.NROWS];
|
|
364
|
+
const o = H.OUT;
|
|
365
|
+
return {
|
|
366
|
+
matrices: new Float32Array(buf, h[o], n * 16),
|
|
367
|
+
spheres: new Float32Array(buf, h[o + 1], n * 4),
|
|
368
|
+
geom: new Uint32Array(buf, h[o + 2], n),
|
|
369
|
+
mat: new Uint32Array(buf, h[o + 3], n),
|
|
370
|
+
uid: new Uint32Array(buf, h[o + 4], n),
|
|
371
|
+
lodNode: new Int32Array(buf, h[o + 5], n),
|
|
372
|
+
lodChild: new Uint16Array(buf, h[o + 6], n),
|
|
373
|
+
flags: new Uint8Array(buf, h[o + 7], n),
|
|
374
|
+
switches: new Float64Array(buf, h[o + 8], h[H.COUNT] * h[H.LODS] * 4),
|
|
375
|
+
};
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
/** es3dCos(x) and es3dSin(x) as the instance kernel computes them (for the tests), or null. */
|
|
379
|
+
export function cosSinWasm(x) {
|
|
380
|
+
if (!enabled || !simd) return null;
|
|
381
|
+
simd.reset();
|
|
382
|
+
const p = simd.alloc(16);
|
|
383
|
+
simd.cos_sin(x, p);
|
|
384
|
+
return Array.from(new Float64Array(simd.memory.buffer, p, 2));
|
|
385
|
+
}
|