@loaders.gl/terrain 4.0.0-alpha.4 → 4.0.0-alpha.6

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.
Files changed (112) hide show
  1. package/dist/bundle.d.ts +2 -0
  2. package/dist/bundle.d.ts.map +1 -0
  3. package/dist/bundle.js +2 -2
  4. package/dist/dist.min.js +1175 -0
  5. package/dist/es5/bundle.js +6 -0
  6. package/dist/es5/bundle.js.map +1 -0
  7. package/dist/es5/index.js +87 -0
  8. package/dist/es5/index.js.map +1 -0
  9. package/dist/es5/lib/decode-quantized-mesh.js +250 -0
  10. package/dist/es5/lib/decode-quantized-mesh.js.map +1 -0
  11. package/dist/es5/lib/delatin/index.js +408 -0
  12. package/dist/es5/lib/delatin/index.js.map +1 -0
  13. package/dist/es5/lib/helpers/skirt.js +105 -0
  14. package/dist/es5/lib/helpers/skirt.js.map +1 -0
  15. package/dist/es5/lib/parse-quantized-mesh.js +95 -0
  16. package/dist/es5/lib/parse-quantized-mesh.js.map +1 -0
  17. package/dist/es5/lib/parse-terrain.js +152 -0
  18. package/dist/es5/lib/parse-terrain.js.map +1 -0
  19. package/dist/es5/lib/utils/version.js +9 -0
  20. package/dist/es5/lib/utils/version.js.map +1 -0
  21. package/dist/es5/quantized-mesh-loader.js +24 -0
  22. package/dist/es5/quantized-mesh-loader.js.map +1 -0
  23. package/dist/es5/terrain-loader.js +32 -0
  24. package/dist/es5/terrain-loader.js.map +1 -0
  25. package/dist/es5/workers/quantized-mesh-worker.js +6 -0
  26. package/dist/es5/workers/quantized-mesh-worker.js.map +1 -0
  27. package/dist/es5/workers/terrain-worker.js +6 -0
  28. package/dist/es5/workers/terrain-worker.js.map +1 -0
  29. package/dist/esm/bundle.js +4 -0
  30. package/dist/esm/bundle.js.map +1 -0
  31. package/dist/esm/index.js +32 -0
  32. package/dist/esm/index.js.map +1 -0
  33. package/{src → dist/esm}/lib/decode-quantized-mesh.js +76 -165
  34. package/dist/esm/lib/decode-quantized-mesh.js.map +1 -0
  35. package/dist/esm/lib/delatin/index.js +355 -0
  36. package/dist/esm/lib/delatin/index.js.map +1 -0
  37. package/dist/esm/lib/helpers/skirt.js +89 -0
  38. package/dist/esm/lib/helpers/skirt.js.map +1 -0
  39. package/dist/esm/lib/parse-quantized-mesh.js +85 -0
  40. package/dist/esm/lib/parse-quantized-mesh.js.map +1 -0
  41. package/{src → dist/esm}/lib/parse-terrain.js +101 -129
  42. package/dist/esm/lib/parse-terrain.js.map +1 -0
  43. package/dist/esm/lib/utils/version.js +2 -0
  44. package/dist/esm/lib/utils/version.js.map +1 -0
  45. package/dist/esm/quantized-mesh-loader.js +17 -0
  46. package/dist/esm/quantized-mesh-loader.js.map +1 -0
  47. package/dist/esm/terrain-loader.js +25 -0
  48. package/dist/esm/terrain-loader.js.map +1 -0
  49. package/dist/esm/workers/quantized-mesh-worker.js +4 -0
  50. package/dist/esm/workers/quantized-mesh-worker.js.map +1 -0
  51. package/dist/esm/workers/terrain-worker.js +4 -0
  52. package/dist/esm/workers/terrain-worker.js.map +1 -0
  53. package/dist/index.d.ts +35 -0
  54. package/dist/index.d.ts.map +1 -0
  55. package/dist/index.js +31 -14
  56. package/dist/lib/decode-quantized-mesh.d.ts +59 -0
  57. package/dist/lib/decode-quantized-mesh.d.ts.map +1 -0
  58. package/dist/lib/decode-quantized-mesh.js +200 -241
  59. package/dist/lib/delatin/index.d.ts +24 -0
  60. package/dist/lib/delatin/index.d.ts.map +1 -0
  61. package/dist/lib/delatin/index.js +397 -443
  62. package/dist/lib/helpers/skirt.d.ts +19 -0
  63. package/dist/lib/helpers/skirt.d.ts.map +1 -0
  64. package/dist/lib/helpers/skirt.js +119 -91
  65. package/dist/lib/parse-quantized-mesh.d.ts +7 -0
  66. package/dist/lib/parse-quantized-mesh.d.ts.map +1 -0
  67. package/dist/lib/parse-quantized-mesh.js +94 -93
  68. package/dist/lib/parse-terrain.d.ts +51 -0
  69. package/dist/lib/parse-terrain.d.ts.map +1 -0
  70. package/dist/lib/parse-terrain.js +146 -172
  71. package/dist/lib/utils/version.d.ts +2 -0
  72. package/dist/lib/utils/version.d.ts.map +1 -0
  73. package/dist/lib/utils/version.js +7 -2
  74. package/dist/quantized-mesh-loader.d.ts +12 -0
  75. package/dist/quantized-mesh-loader.d.ts.map +1 -0
  76. package/dist/quantized-mesh-loader.js +20 -16
  77. package/dist/quantized-mesh-worker.js +148 -119
  78. package/dist/terrain-loader.d.ts +12 -0
  79. package/dist/terrain-loader.d.ts.map +1 -0
  80. package/dist/terrain-loader.js +28 -24
  81. package/dist/terrain-worker.js +148 -119
  82. package/dist/workers/quantized-mesh-worker.d.ts +2 -0
  83. package/dist/workers/quantized-mesh-worker.d.ts.map +1 -0
  84. package/dist/workers/quantized-mesh-worker.js +5 -4
  85. package/dist/workers/terrain-worker.d.ts +2 -0
  86. package/dist/workers/terrain-worker.d.ts.map +1 -0
  87. package/dist/workers/terrain-worker.js +5 -4
  88. package/package.json +11 -10
  89. package/src/index.ts +29 -13
  90. package/src/lib/helpers/skirt.ts +7 -7
  91. package/src/lib/parse-quantized-mesh.ts +47 -43
  92. package/src/lib/parse-terrain.ts +84 -89
  93. package/src/quantized-mesh-loader.ts +9 -4
  94. package/src/terrain-loader.ts +14 -11
  95. package/dist/bundle.js.map +0 -1
  96. package/dist/index.js.map +0 -1
  97. package/dist/lib/decode-quantized-mesh.js.map +0 -1
  98. package/dist/lib/delatin/index.js.map +0 -1
  99. package/dist/lib/helpers/skirt.js.map +0 -1
  100. package/dist/lib/parse-quantized-mesh.js.map +0 -1
  101. package/dist/lib/parse-terrain.js.map +0 -1
  102. package/dist/lib/utils/version.js.map +0 -1
  103. package/dist/quantized-mesh-loader.js.map +0 -1
  104. package/dist/terrain-loader.js.map +0 -1
  105. package/dist/workers/quantized-mesh-worker.js.map +0 -1
  106. package/dist/workers/terrain-worker.js.map +0 -1
  107. package/src/lib/helpers/skirt.js +0 -161
  108. package/src/lib/parse-quantized-mesh.js +0 -98
  109. package/src/workers/quantized-mesh-worker.js +0 -4
  110. package/src/workers/terrain-worker.js +0 -4
  111. /package/src/lib/delatin/{index.js → index.ts} +0 -0
  112. /package/src/lib/utils/{version.js → version.ts} +0 -0
@@ -1,180 +1,154 @@
1
- import { getMeshBoundingBox } from '@loaders.gl/schema';
2
- import Martini from '@mapbox/martini';
3
- import Delatin from './delatin';
4
- import { addSkirt } from './helpers/skirt';
5
-
6
- function getTerrain(imageData, width, height, elevationDecoder, tesselator) {
7
- const {
8
- rScaler,
9
- bScaler,
10
- gScaler,
11
- offset
12
- } = elevationDecoder;
13
- const terrain = new Float32Array((width + 1) * (height + 1));
14
-
15
- for (let i = 0, y = 0; y < height; y++) {
16
- for (let x = 0; x < width; x++, i++) {
17
- const k = i * 4;
18
- const r = imageData[k + 0];
19
- const g = imageData[k + 1];
20
- const b = imageData[k + 2];
21
- terrain[i + y] = r * rScaler + g * gScaler + b * bScaler + offset;
22
- }
23
- }
24
-
25
- if (tesselator === 'martini') {
26
- for (let i = (width + 1) * width, x = 0; x < width; x++, i++) {
27
- terrain[i] = terrain[i - width - 1];
28
- }
29
-
30
- for (let i = height, y = 0; y < height + 1; y++, i += height + 1) {
31
- terrain[i] = terrain[i - 1];
1
+ "use strict";
2
+ // loaders.gl, MIT license
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.makeTerrainMeshFromImage = void 0;
8
+ const schema_1 = require("@loaders.gl/schema");
9
+ const martini_1 = __importDefault(require("@mapbox/martini"));
10
+ const delatin_1 = __importDefault(require("./delatin"));
11
+ const skirt_1 = require("./helpers/skirt");
12
+ /**
13
+ * Returns generated mesh object from image data
14
+ *
15
+ * @param terrainImage terrain image data
16
+ * @param terrainOptions terrain options
17
+ * @returns mesh object
18
+ */
19
+ function makeTerrainMeshFromImage(terrainImage, terrainOptions) {
20
+ const { meshMaxError, bounds, elevationDecoder } = terrainOptions;
21
+ const { data, width, height } = terrainImage;
22
+ let terrain;
23
+ let mesh;
24
+ switch (terrainOptions.tesselator) {
25
+ case 'martini':
26
+ terrain = getTerrain(data, width, height, elevationDecoder, terrainOptions.tesselator);
27
+ mesh = getMartiniTileMesh(meshMaxError, width, terrain);
28
+ break;
29
+ case 'delatin':
30
+ terrain = getTerrain(data, width, height, elevationDecoder, terrainOptions.tesselator);
31
+ mesh = getDelatinTileMesh(meshMaxError, width, height, terrain);
32
+ break;
33
+ // auto
34
+ default:
35
+ if (width === height && !(height & (width - 1))) {
36
+ terrain = getTerrain(data, width, height, elevationDecoder, 'martini');
37
+ mesh = getMartiniTileMesh(meshMaxError, width, terrain);
38
+ }
39
+ else {
40
+ terrain = getTerrain(data, width, height, elevationDecoder, 'delatin');
41
+ mesh = getDelatinTileMesh(meshMaxError, width, height, terrain);
42
+ }
43
+ break;
32
44
  }
33
- }
34
-
35
- return terrain;
36
- }
37
-
38
- function getMeshAttributes(vertices, terrain, width, height, bounds) {
39
- const gridSize = width + 1;
40
- const numOfVerticies = vertices.length / 2;
41
- const positions = new Float32Array(numOfVerticies * 3);
42
- const texCoords = new Float32Array(numOfVerticies * 2);
43
- const [minX, minY, maxX, maxY] = bounds || [0, 0, width, height];
44
- const xScale = (maxX - minX) / width;
45
- const yScale = (maxY - minY) / height;
46
-
47
- for (let i = 0; i < numOfVerticies; i++) {
48
- const x = vertices[i * 2];
49
- const y = vertices[i * 2 + 1];
50
- const pixelIdx = y * gridSize + x;
51
- positions[3 * i + 0] = x * xScale + minX;
52
- positions[3 * i + 1] = -y * yScale + maxY;
53
- positions[3 * i + 2] = terrain[pixelIdx];
54
- texCoords[2 * i + 0] = x / width;
55
- texCoords[2 * i + 1] = y / height;
56
- }
57
-
58
- return {
59
- POSITION: {
60
- value: positions,
61
- size: 3
62
- },
63
- TEXCOORD_0: {
64
- value: texCoords,
65
- size: 2
45
+ const { vertices } = mesh;
46
+ let { triangles } = mesh;
47
+ let attributes = getMeshAttributes(vertices, terrain, width, height, bounds);
48
+ // Compute bounding box before adding skirt so that z values are not skewed
49
+ const boundingBox = (0, schema_1.getMeshBoundingBox)(attributes);
50
+ if (terrainOptions.skirtHeight) {
51
+ const { attributes: newAttributes, triangles: newTriangles } = (0, skirt_1.addSkirt)(attributes, triangles, terrainOptions.skirtHeight);
52
+ attributes = newAttributes;
53
+ triangles = newTriangles;
66
54
  }
67
- };
68
- }
69
-
70
- function getMesh(terrainImage, terrainOptions) {
71
- if (terrainImage === null) {
72
- return null;
73
- }
74
-
75
- const {
76
- meshMaxError,
77
- bounds,
78
- elevationDecoder
79
- } = terrainOptions;
80
- const {
81
- data,
82
- width,
83
- height
84
- } = terrainImage;
85
- let terrain;
86
- let mesh;
87
-
88
- switch (terrainOptions.tesselator) {
89
- case 'martini':
90
- terrain = getTerrain(data, width, height, elevationDecoder, terrainOptions.tesselator);
91
- mesh = getMartiniTileMesh(meshMaxError, width, terrain);
92
- break;
93
-
94
- case 'delatin':
95
- terrain = getTerrain(data, width, height, elevationDecoder, terrainOptions.tesselator);
96
- mesh = getDelatinTileMesh(meshMaxError, width, height, terrain);
97
- break;
98
-
99
- default:
100
- if (width === height && !(height & width - 1)) {
101
- terrain = getTerrain(data, width, height, elevationDecoder, 'martini');
102
- mesh = getMartiniTileMesh(meshMaxError, width, terrain);
103
- } else {
104
- terrain = getTerrain(data, width, height, elevationDecoder, 'delatin');
105
- mesh = getDelatinTileMesh(meshMaxError, width, height, terrain);
106
- }
107
-
108
- break;
109
- }
110
-
111
- const {
112
- vertices
113
- } = mesh;
114
- let {
115
- triangles
116
- } = mesh;
117
- let attributes = getMeshAttributes(vertices, terrain, width, height, bounds);
118
- const boundingBox = getMeshBoundingBox(attributes);
119
-
120
- if (terrainOptions.skirtHeight) {
121
- const {
122
- attributes: newAttributes,
123
- triangles: newTriangles
124
- } = addSkirt(attributes, triangles, terrainOptions.skirtHeight);
125
- attributes = newAttributes;
126
- triangles = newTriangles;
127
- }
128
-
129
- return {
130
- loaderData: {
131
- header: {}
132
- },
133
- header: {
134
- vertexCount: triangles.length,
135
- boundingBox
136
- },
137
- mode: 4,
138
- indices: {
139
- value: Uint32Array.from(triangles),
140
- size: 1
141
- },
142
- attributes
143
- };
55
+ return {
56
+ // Data return by this loader implementation
57
+ loaderData: {
58
+ header: {}
59
+ },
60
+ header: {
61
+ vertexCount: triangles.length,
62
+ boundingBox
63
+ },
64
+ mode: 4,
65
+ indices: { value: Uint32Array.from(triangles), size: 1 },
66
+ attributes
67
+ };
144
68
  }
145
-
69
+ exports.makeTerrainMeshFromImage = makeTerrainMeshFromImage;
70
+ /**
71
+ * Get Martini generated vertices and triangles
72
+ *
73
+ * @param {number} meshMaxError threshold for simplifying mesh
74
+ * @param {number} width width of the input data
75
+ * @param {number[] | Float32Array} terrain elevation data
76
+ * @returns {{vertices: Uint16Array, triangles: Uint32Array}} vertices and triangles data
77
+ */
146
78
  function getMartiniTileMesh(meshMaxError, width, terrain) {
147
- const gridSize = width + 1;
148
- const martini = new Martini(gridSize);
149
- const tile = martini.createTile(terrain);
150
- const {
151
- vertices,
152
- triangles
153
- } = tile.getMesh(meshMaxError);
154
- return {
155
- vertices,
156
- triangles
157
- };
79
+ const gridSize = width + 1;
80
+ const martini = new martini_1.default(gridSize);
81
+ const tile = martini.createTile(terrain);
82
+ const { vertices, triangles } = tile.getMesh(meshMaxError);
83
+ return { vertices, triangles };
158
84
  }
159
-
85
+ /**
86
+ * Get Delatin generated vertices and triangles
87
+ *
88
+ * @param {number} meshMaxError threshold for simplifying mesh
89
+ * @param {number} width width of the input data array
90
+ * @param {number} height height of the input data array
91
+ * @param {number[] | Float32Array} terrain elevation data
92
+ * @returns {{vertices: number[], triangles: number[]}} vertices and triangles data
93
+ */
160
94
  function getDelatinTileMesh(meshMaxError, width, height, terrain) {
161
- const tin = new Delatin(terrain, width + 1, height + 1);
162
- tin.run(meshMaxError);
163
- const {
164
- coords,
165
- triangles
166
- } = tin;
167
- const vertices = coords;
168
- return {
169
- vertices,
170
- triangles
171
- };
95
+ const tin = new delatin_1.default(terrain, width + 1, height + 1);
96
+ tin.run(meshMaxError);
97
+ // @ts-expect-error
98
+ const { coords, triangles } = tin;
99
+ const vertices = coords;
100
+ return { vertices, triangles };
172
101
  }
173
-
174
- export default async function loadTerrain(arrayBuffer, options, context) {
175
- options.image = options.image || {};
176
- options.image.type = 'data';
177
- const image = await context.parse(arrayBuffer, options, options.baseUri);
178
- return getMesh(image, options.terrain);
102
+ function getTerrain(imageData, width, height, elevationDecoder, tesselator) {
103
+ const { rScaler, bScaler, gScaler, offset } = elevationDecoder;
104
+ // From Martini demo
105
+ // https://observablehq.com/@mourner/martin-real-time-rtin-terrain-mesh
106
+ const terrain = new Float32Array((width + 1) * (height + 1));
107
+ // decode terrain values
108
+ for (let i = 0, y = 0; y < height; y++) {
109
+ for (let x = 0; x < width; x++, i++) {
110
+ const k = i * 4;
111
+ const r = imageData[k + 0];
112
+ const g = imageData[k + 1];
113
+ const b = imageData[k + 2];
114
+ terrain[i + y] = r * rScaler + g * gScaler + b * bScaler + offset;
115
+ }
116
+ }
117
+ if (tesselator === 'martini') {
118
+ // backfill bottom border
119
+ for (let i = (width + 1) * width, x = 0; x < width; x++, i++) {
120
+ terrain[i] = terrain[i - width - 1];
121
+ }
122
+ // backfill right border
123
+ for (let i = height, y = 0; y < height + 1; y++, i += height + 1) {
124
+ terrain[i] = terrain[i - 1];
125
+ }
126
+ }
127
+ return terrain;
128
+ }
129
+ function getMeshAttributes(vertices, terrain, width, height, bounds) {
130
+ const gridSize = width + 1;
131
+ const numOfVerticies = vertices.length / 2;
132
+ // vec3. x, y in pixels, z in meters
133
+ const positions = new Float32Array(numOfVerticies * 3);
134
+ // vec2. 1 to 1 relationship with position. represents the uv on the texture image. 0,0 to 1,1.
135
+ const texCoords = new Float32Array(numOfVerticies * 2);
136
+ const [minX, minY, maxX, maxY] = bounds || [0, 0, width, height];
137
+ const xScale = (maxX - minX) / width;
138
+ const yScale = (maxY - minY) / height;
139
+ for (let i = 0; i < numOfVerticies; i++) {
140
+ const x = vertices[i * 2];
141
+ const y = vertices[i * 2 + 1];
142
+ const pixelIdx = y * gridSize + x;
143
+ positions[3 * i + 0] = x * xScale + minX;
144
+ positions[3 * i + 1] = -y * yScale + maxY;
145
+ positions[3 * i + 2] = terrain[pixelIdx];
146
+ texCoords[2 * i + 0] = x / width;
147
+ texCoords[2 * i + 1] = y / height;
148
+ }
149
+ return {
150
+ POSITION: { value: positions, size: 3 },
151
+ TEXCOORD_0: { value: texCoords, size: 2 }
152
+ // NORMAL: {}, - optional, but creates the high poly look with lighting
153
+ };
179
154
  }
180
- //# sourceMappingURL=parse-terrain.js.map
@@ -0,0 +1,2 @@
1
+ export declare const VERSION: any;
2
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/version.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,OAAO,KAA8D,CAAC"}
@@ -1,2 +1,7 @@
1
- export const VERSION = typeof "4.0.0-alpha.4" !== 'undefined' ? "4.0.0-alpha.4" : 'latest';
2
- //# sourceMappingURL=version.js.map
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VERSION = void 0;
4
+ // Version constant cannot be imported, it needs to correspond to the build version of **this** module.
5
+ // __VERSION__ is injected by babel-plugin-version-inline
6
+ // @ts-ignore TS2304: Cannot find name '__VERSION__'.
7
+ exports.VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';
@@ -0,0 +1,12 @@
1
+ import type { Loader, LoaderOptions } from '@loaders.gl/loader-utils';
2
+ export type QuantizedMeshLoaderOptions = LoaderOptions & {
3
+ 'quantized-mesh'?: {
4
+ bounds?: [number, number, number, number];
5
+ skirtHeight?: number | null;
6
+ };
7
+ };
8
+ /**
9
+ * Worker loader for quantized meshes
10
+ */
11
+ export declare const QuantizedMeshLoader: Loader<any, never, QuantizedMeshLoaderOptions>;
12
+ //# sourceMappingURL=quantized-mesh-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quantized-mesh-loader.d.ts","sourceRoot":"","sources":["../src/quantized-mesh-loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,MAAM,EAAE,aAAa,EAAC,MAAM,0BAA0B,CAAC;AAGpE,MAAM,MAAM,0BAA0B,GAAG,aAAa,GAAG;IACvD,gBAAgB,CAAC,EAAE;QACjB,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAC1C,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAC7B,CAAC;CACH,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,0BAA0B,CAc9E,CAAC"}
@@ -1,18 +1,22 @@
1
- import { VERSION } from './lib/utils/version';
2
- export const QuantizedMeshLoader = {
3
- name: 'Quantized Mesh',
4
- id: 'quantized-mesh',
5
- module: 'terrain',
6
- version: VERSION,
7
- worker: true,
8
- extensions: ['terrain'],
9
- mimeTypes: ['application/vnd.quantized-mesh'],
10
- options: {
11
- 'quantized-mesh': {
12
- bounds: [0, 0, 1, 1],
13
- skirtHeight: null
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.QuantizedMeshLoader = void 0;
4
+ const version_1 = require("./lib/utils/version");
5
+ /**
6
+ * Worker loader for quantized meshes
7
+ */
8
+ exports.QuantizedMeshLoader = {
9
+ name: 'Quantized Mesh',
10
+ id: 'quantized-mesh',
11
+ module: 'terrain',
12
+ version: version_1.VERSION,
13
+ worker: true,
14
+ extensions: ['terrain'],
15
+ mimeTypes: ['application/vnd.quantized-mesh'],
16
+ options: {
17
+ 'quantized-mesh': {
18
+ bounds: [0, 0, 1, 1],
19
+ skirtHeight: null
20
+ }
14
21
  }
15
- }
16
22
  };
17
- export const _typecheckQuantizedMeshLoader = QuantizedMeshLoader;
18
- //# sourceMappingURL=quantized-mesh-loader.js.map