@loaders.gl/draco 4.0.0-alpha.4 → 4.0.0-alpha.5
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/dist/bundle.d.ts +2 -0
- package/dist/bundle.d.ts.map +1 -0
- package/dist/dist.min.js +4 -0
- package/dist/dist.min.js.map +7 -0
- package/dist/draco-loader.d.ts +28 -0
- package/dist/draco-loader.d.ts.map +1 -0
- package/dist/draco-worker.js +2 -1236
- package/dist/draco-worker.js.map +7 -0
- package/dist/draco-writer.d.ts +8 -0
- package/dist/draco-writer.d.ts.map +1 -0
- package/dist/draco3d/draco3d-types.d.ts +295 -0
- package/dist/draco3d/draco3d-types.d.ts.map +1 -0
- package/dist/index.d.ts +29 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/lib/draco-builder.d.ts +107 -0
- package/dist/lib/draco-builder.d.ts.map +1 -0
- package/dist/lib/draco-module-loader.d.ts +3 -0
- package/dist/lib/draco-module-loader.d.ts.map +1 -0
- package/dist/lib/draco-parser.d.ts +137 -0
- package/dist/lib/draco-parser.d.ts.map +1 -0
- package/dist/lib/draco-types.d.ts +59 -0
- package/dist/lib/draco-types.d.ts.map +1 -0
- package/dist/lib/utils/get-draco-schema.d.ts +8 -0
- package/dist/lib/utils/get-draco-schema.d.ts.map +1 -0
- package/dist/lib/utils/version.d.ts +2 -0
- package/dist/lib/utils/version.d.ts.map +1 -0
- package/dist/lib/utils/version.js +1 -1
- package/dist/workers/draco-worker.d.ts +2 -0
- package/dist/workers/draco-worker.d.ts.map +1 -0
- package/package.json +8 -8
package/dist/draco-worker.js
CHANGED
|
@@ -1,1236 +1,2 @@
|
|
|
1
|
-
(() => {
|
|
2
|
-
|
|
3
|
-
var DEFAULT_VERSION = "beta";
|
|
4
|
-
var VERSION = typeof __VERSION__ !== "undefined" ? __VERSION__ : DEFAULT_VERSION;
|
|
5
|
-
if (typeof __VERSION__ === "undefined") {
|
|
6
|
-
console.error("loaders.gl: The __VERSION__ variable is not injected using babel plugin. Latest unstable workers would be fetched from the CDN.");
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
// ../worker-utils/src/lib/env-utils/assert.ts
|
|
10
|
-
function assert(condition, message) {
|
|
11
|
-
if (!condition) {
|
|
12
|
-
throw new Error(message || "loaders.gl assertion failed.");
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
// ../worker-utils/src/lib/env-utils/globals.ts
|
|
17
|
-
var globals = {
|
|
18
|
-
self: typeof self !== "undefined" && self,
|
|
19
|
-
window: typeof window !== "undefined" && window,
|
|
20
|
-
global: typeof global !== "undefined" && global,
|
|
21
|
-
document: typeof document !== "undefined" && document
|
|
22
|
-
};
|
|
23
|
-
var self_ = globals.self || globals.window || globals.global || {};
|
|
24
|
-
var window_ = globals.window || globals.self || globals.global || {};
|
|
25
|
-
var global_ = globals.global || globals.self || globals.window || {};
|
|
26
|
-
var document_ = globals.document || {};
|
|
27
|
-
var isBrowser = typeof process !== "object" || String(process) !== "[object process]" || process.browser;
|
|
28
|
-
var isWorker = typeof importScripts === "function";
|
|
29
|
-
var isMobile = typeof window !== "undefined" && typeof window.orientation !== "undefined";
|
|
30
|
-
var matches = typeof process !== "undefined" && process.version && /v([0-9]*)/.exec(process.version);
|
|
31
|
-
var nodeVersion = matches && parseFloat(matches[1]) || 0;
|
|
32
|
-
|
|
33
|
-
// ../worker-utils/src/lib/worker-utils/get-transfer-list.ts
|
|
34
|
-
function getTransferList(object, recursive = true, transfers) {
|
|
35
|
-
const transfersSet = transfers || new Set();
|
|
36
|
-
if (!object) {
|
|
37
|
-
} else if (isTransferable(object)) {
|
|
38
|
-
transfersSet.add(object);
|
|
39
|
-
} else if (isTransferable(object.buffer)) {
|
|
40
|
-
transfersSet.add(object.buffer);
|
|
41
|
-
} else if (ArrayBuffer.isView(object)) {
|
|
42
|
-
} else if (recursive && typeof object === "object") {
|
|
43
|
-
for (const key in object) {
|
|
44
|
-
getTransferList(object[key], recursive, transfersSet);
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
return transfers === void 0 ? Array.from(transfersSet) : [];
|
|
48
|
-
}
|
|
49
|
-
function isTransferable(object) {
|
|
50
|
-
if (!object) {
|
|
51
|
-
return false;
|
|
52
|
-
}
|
|
53
|
-
if (object instanceof ArrayBuffer) {
|
|
54
|
-
return true;
|
|
55
|
-
}
|
|
56
|
-
if (typeof MessagePort !== "undefined" && object instanceof MessagePort) {
|
|
57
|
-
return true;
|
|
58
|
-
}
|
|
59
|
-
if (typeof ImageBitmap !== "undefined" && object instanceof ImageBitmap) {
|
|
60
|
-
return true;
|
|
61
|
-
}
|
|
62
|
-
if (typeof OffscreenCanvas !== "undefined" && object instanceof OffscreenCanvas) {
|
|
63
|
-
return true;
|
|
64
|
-
}
|
|
65
|
-
return false;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
// ../worker-utils/src/lib/worker-farm/worker-body.ts
|
|
69
|
-
var onMessageWrapperMap = new Map();
|
|
70
|
-
var WorkerBody = class {
|
|
71
|
-
static set onmessage(onMessage) {
|
|
72
|
-
self.onmessage = (message) => {
|
|
73
|
-
if (!isKnownMessage(message)) {
|
|
74
|
-
return;
|
|
75
|
-
}
|
|
76
|
-
const { type, payload } = message.data;
|
|
77
|
-
onMessage(type, payload);
|
|
78
|
-
};
|
|
79
|
-
}
|
|
80
|
-
static addEventListener(onMessage) {
|
|
81
|
-
let onMessageWrapper = onMessageWrapperMap.get(onMessage);
|
|
82
|
-
if (!onMessageWrapper) {
|
|
83
|
-
onMessageWrapper = (message) => {
|
|
84
|
-
if (!isKnownMessage(message)) {
|
|
85
|
-
return;
|
|
86
|
-
}
|
|
87
|
-
const { type, payload } = message.data;
|
|
88
|
-
onMessage(type, payload);
|
|
89
|
-
};
|
|
90
|
-
}
|
|
91
|
-
self.addEventListener("message", onMessageWrapper);
|
|
92
|
-
}
|
|
93
|
-
static removeEventListener(onMessage) {
|
|
94
|
-
const onMessageWrapper = onMessageWrapperMap.get(onMessage);
|
|
95
|
-
onMessageWrapperMap.delete(onMessage);
|
|
96
|
-
self.removeEventListener("message", onMessageWrapper);
|
|
97
|
-
}
|
|
98
|
-
static postMessage(type, payload) {
|
|
99
|
-
if (self) {
|
|
100
|
-
const data = { source: "loaders.gl", type, payload };
|
|
101
|
-
const transferList = getTransferList(payload);
|
|
102
|
-
self.postMessage(data, transferList);
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
};
|
|
106
|
-
function isKnownMessage(message) {
|
|
107
|
-
const { type, data } = message;
|
|
108
|
-
return type === "message" && data && typeof data.source === "string" && data.source.startsWith("loaders.gl");
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
// ../worker-utils/src/lib/library-utils/library-utils.ts
|
|
112
|
-
var LATEST = "beta";
|
|
113
|
-
var VERSION2 = typeof VERSION !== "undefined" ? VERSION : LATEST;
|
|
114
|
-
var loadLibraryPromises = {};
|
|
115
|
-
async function loadLibrary(libraryUrl, moduleName = null, options = {}) {
|
|
116
|
-
if (moduleName) {
|
|
117
|
-
libraryUrl = getLibraryUrl(libraryUrl, moduleName, options);
|
|
118
|
-
}
|
|
119
|
-
loadLibraryPromises[libraryUrl] = loadLibraryPromises[libraryUrl] || loadLibraryFromFile(libraryUrl);
|
|
120
|
-
return await loadLibraryPromises[libraryUrl];
|
|
121
|
-
}
|
|
122
|
-
function getLibraryUrl(library, moduleName, options) {
|
|
123
|
-
if (library.startsWith("http")) {
|
|
124
|
-
return library;
|
|
125
|
-
}
|
|
126
|
-
const modules = options.modules || {};
|
|
127
|
-
if (modules[library]) {
|
|
128
|
-
return modules[library];
|
|
129
|
-
}
|
|
130
|
-
if (!isBrowser) {
|
|
131
|
-
return `modules/${moduleName}/dist/libs/${library}`;
|
|
132
|
-
}
|
|
133
|
-
if (options.CDN) {
|
|
134
|
-
assert(options.CDN.startsWith("http"));
|
|
135
|
-
return `${options.CDN}/${moduleName}@${VERSION2}/dist/libs/${library}`;
|
|
136
|
-
}
|
|
137
|
-
if (isWorker) {
|
|
138
|
-
return `../src/libs/${library}`;
|
|
139
|
-
}
|
|
140
|
-
return `modules/${moduleName}/src/libs/${library}`;
|
|
141
|
-
}
|
|
142
|
-
async function loadLibraryFromFile(libraryUrl) {
|
|
143
|
-
if (libraryUrl.endsWith("wasm")) {
|
|
144
|
-
const response2 = await fetch(libraryUrl);
|
|
145
|
-
return await response2.arrayBuffer();
|
|
146
|
-
}
|
|
147
|
-
if (!isBrowser) {
|
|
148
|
-
return node.requireFromFile && await node.requireFromFile(libraryUrl);
|
|
149
|
-
}
|
|
150
|
-
if (isWorker) {
|
|
151
|
-
return importScripts(libraryUrl);
|
|
152
|
-
}
|
|
153
|
-
const response = await fetch(libraryUrl);
|
|
154
|
-
const scriptSource = await response.text();
|
|
155
|
-
return loadLibraryFromString(scriptSource, libraryUrl);
|
|
156
|
-
}
|
|
157
|
-
function loadLibraryFromString(scriptSource, id) {
|
|
158
|
-
if (!isBrowser) {
|
|
159
|
-
return node.requireFromString && node.requireFromString(scriptSource, id);
|
|
160
|
-
}
|
|
161
|
-
if (isWorker) {
|
|
162
|
-
eval.call(global_, scriptSource);
|
|
163
|
-
return null;
|
|
164
|
-
}
|
|
165
|
-
const script = document.createElement("script");
|
|
166
|
-
script.id = id;
|
|
167
|
-
try {
|
|
168
|
-
script.appendChild(document.createTextNode(scriptSource));
|
|
169
|
-
} catch (e) {
|
|
170
|
-
script.text = scriptSource;
|
|
171
|
-
}
|
|
172
|
-
document.body.appendChild(script);
|
|
173
|
-
return null;
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
// ../loader-utils/src/lib/worker-loader-utils/create-loader-worker.ts
|
|
177
|
-
var requestId = 0;
|
|
178
|
-
function createLoaderWorker(loader) {
|
|
179
|
-
if (typeof self === "undefined") {
|
|
180
|
-
return;
|
|
181
|
-
}
|
|
182
|
-
WorkerBody.onmessage = async (type, payload) => {
|
|
183
|
-
switch (type) {
|
|
184
|
-
case "process":
|
|
185
|
-
try {
|
|
186
|
-
const { input, options = {} } = payload;
|
|
187
|
-
const result = await parseData({
|
|
188
|
-
loader,
|
|
189
|
-
arrayBuffer: input,
|
|
190
|
-
options,
|
|
191
|
-
context: {
|
|
192
|
-
parse: parseOnMainThread
|
|
193
|
-
}
|
|
194
|
-
});
|
|
195
|
-
WorkerBody.postMessage("done", { result });
|
|
196
|
-
} catch (error) {
|
|
197
|
-
const message = error instanceof Error ? error.message : "";
|
|
198
|
-
WorkerBody.postMessage("error", { error: message });
|
|
199
|
-
}
|
|
200
|
-
break;
|
|
201
|
-
default:
|
|
202
|
-
}
|
|
203
|
-
};
|
|
204
|
-
}
|
|
205
|
-
function parseOnMainThread(arrayBuffer, options) {
|
|
206
|
-
return new Promise((resolve, reject) => {
|
|
207
|
-
const id = requestId++;
|
|
208
|
-
const onMessage = (type, payload2) => {
|
|
209
|
-
if (payload2.id !== id) {
|
|
210
|
-
return;
|
|
211
|
-
}
|
|
212
|
-
switch (type) {
|
|
213
|
-
case "done":
|
|
214
|
-
WorkerBody.removeEventListener(onMessage);
|
|
215
|
-
resolve(payload2.result);
|
|
216
|
-
break;
|
|
217
|
-
case "error":
|
|
218
|
-
WorkerBody.removeEventListener(onMessage);
|
|
219
|
-
reject(payload2.error);
|
|
220
|
-
break;
|
|
221
|
-
default:
|
|
222
|
-
}
|
|
223
|
-
};
|
|
224
|
-
WorkerBody.addEventListener(onMessage);
|
|
225
|
-
const payload = { id, input: arrayBuffer, options };
|
|
226
|
-
WorkerBody.postMessage("process", payload);
|
|
227
|
-
});
|
|
228
|
-
}
|
|
229
|
-
async function parseData({ loader, arrayBuffer, options, context }) {
|
|
230
|
-
let data;
|
|
231
|
-
let parser;
|
|
232
|
-
if (loader.parseSync || loader.parse) {
|
|
233
|
-
data = arrayBuffer;
|
|
234
|
-
parser = loader.parseSync || loader.parse;
|
|
235
|
-
} else if (loader.parseTextSync) {
|
|
236
|
-
const textDecoder = new TextDecoder();
|
|
237
|
-
data = textDecoder.decode(arrayBuffer);
|
|
238
|
-
parser = loader.parseTextSync;
|
|
239
|
-
} else {
|
|
240
|
-
throw new Error(`Could not load data with ${loader.name} loader`);
|
|
241
|
-
}
|
|
242
|
-
options = {
|
|
243
|
-
...options,
|
|
244
|
-
modules: loader && loader.options && loader.options.modules || {},
|
|
245
|
-
worker: false
|
|
246
|
-
};
|
|
247
|
-
return await parser(data, { ...options }, context, loader);
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
// src/lib/utils/version.ts
|
|
251
|
-
var VERSION3 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "latest";
|
|
252
|
-
|
|
253
|
-
// src/draco-loader.ts
|
|
254
|
-
var DEFAULT_DRACO_OPTIONS = {
|
|
255
|
-
draco: {
|
|
256
|
-
decoderType: typeof WebAssembly === "object" ? "wasm" : "js",
|
|
257
|
-
libraryPath: "libs/",
|
|
258
|
-
extraAttributes: {},
|
|
259
|
-
attributeNameEntry: void 0
|
|
260
|
-
}
|
|
261
|
-
};
|
|
262
|
-
var DracoLoader = {
|
|
263
|
-
name: "Draco",
|
|
264
|
-
id: "draco",
|
|
265
|
-
module: "draco",
|
|
266
|
-
shapes: ["mesh"],
|
|
267
|
-
version: VERSION3,
|
|
268
|
-
worker: true,
|
|
269
|
-
extensions: ["drc"],
|
|
270
|
-
mimeTypes: ["application/octet-stream"],
|
|
271
|
-
binary: true,
|
|
272
|
-
tests: ["DRACO"],
|
|
273
|
-
options: DEFAULT_DRACO_OPTIONS
|
|
274
|
-
};
|
|
275
|
-
|
|
276
|
-
// ../schema/src/category/mesh/mesh-utils.ts
|
|
277
|
-
function getMeshBoundingBox(attributes) {
|
|
278
|
-
let minX = Infinity;
|
|
279
|
-
let minY = Infinity;
|
|
280
|
-
let minZ = Infinity;
|
|
281
|
-
let maxX = -Infinity;
|
|
282
|
-
let maxY = -Infinity;
|
|
283
|
-
let maxZ = -Infinity;
|
|
284
|
-
const positions = attributes.POSITION ? attributes.POSITION.value : [];
|
|
285
|
-
const len = positions && positions.length;
|
|
286
|
-
for (let i = 0; i < len; i += 3) {
|
|
287
|
-
const x = positions[i];
|
|
288
|
-
const y = positions[i + 1];
|
|
289
|
-
const z = positions[i + 2];
|
|
290
|
-
minX = x < minX ? x : minX;
|
|
291
|
-
minY = y < minY ? y : minY;
|
|
292
|
-
minZ = z < minZ ? z : minZ;
|
|
293
|
-
maxX = x > maxX ? x : maxX;
|
|
294
|
-
maxY = y > maxY ? y : maxY;
|
|
295
|
-
maxZ = z > maxZ ? z : maxZ;
|
|
296
|
-
}
|
|
297
|
-
return [
|
|
298
|
-
[minX, minY, minZ],
|
|
299
|
-
[maxX, maxY, maxZ]
|
|
300
|
-
];
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
// ../schema/src/lib/utils/assert.ts
|
|
304
|
-
function assert2(condition, message) {
|
|
305
|
-
if (!condition) {
|
|
306
|
-
throw new Error(message || "loader assertion failed.");
|
|
307
|
-
}
|
|
308
|
-
}
|
|
309
|
-
|
|
310
|
-
// ../schema/src/lib/schema/impl/schema.ts
|
|
311
|
-
var Schema = class {
|
|
312
|
-
constructor(fields, metadata) {
|
|
313
|
-
assert2(Array.isArray(fields));
|
|
314
|
-
checkNames(fields);
|
|
315
|
-
this.fields = fields;
|
|
316
|
-
this.metadata = metadata || new Map();
|
|
317
|
-
}
|
|
318
|
-
compareTo(other) {
|
|
319
|
-
if (this.metadata !== other.metadata) {
|
|
320
|
-
return false;
|
|
321
|
-
}
|
|
322
|
-
if (this.fields.length !== other.fields.length) {
|
|
323
|
-
return false;
|
|
324
|
-
}
|
|
325
|
-
for (let i = 0; i < this.fields.length; ++i) {
|
|
326
|
-
if (!this.fields[i].compareTo(other.fields[i])) {
|
|
327
|
-
return false;
|
|
328
|
-
}
|
|
329
|
-
}
|
|
330
|
-
return true;
|
|
331
|
-
}
|
|
332
|
-
select(...columnNames) {
|
|
333
|
-
const nameMap = Object.create(null);
|
|
334
|
-
for (const name of columnNames) {
|
|
335
|
-
nameMap[name] = true;
|
|
336
|
-
}
|
|
337
|
-
const selectedFields = this.fields.filter((field) => nameMap[field.name]);
|
|
338
|
-
return new Schema(selectedFields, this.metadata);
|
|
339
|
-
}
|
|
340
|
-
selectAt(...columnIndices) {
|
|
341
|
-
const selectedFields = columnIndices.map((index) => this.fields[index]).filter(Boolean);
|
|
342
|
-
return new Schema(selectedFields, this.metadata);
|
|
343
|
-
}
|
|
344
|
-
assign(schemaOrFields) {
|
|
345
|
-
let fields;
|
|
346
|
-
let metadata = this.metadata;
|
|
347
|
-
if (schemaOrFields instanceof Schema) {
|
|
348
|
-
const otherSchema = schemaOrFields;
|
|
349
|
-
fields = otherSchema.fields;
|
|
350
|
-
metadata = mergeMaps(mergeMaps(new Map(), this.metadata), otherSchema.metadata);
|
|
351
|
-
} else {
|
|
352
|
-
fields = schemaOrFields;
|
|
353
|
-
}
|
|
354
|
-
const fieldMap = Object.create(null);
|
|
355
|
-
for (const field of this.fields) {
|
|
356
|
-
fieldMap[field.name] = field;
|
|
357
|
-
}
|
|
358
|
-
for (const field of fields) {
|
|
359
|
-
fieldMap[field.name] = field;
|
|
360
|
-
}
|
|
361
|
-
const mergedFields = Object.values(fieldMap);
|
|
362
|
-
return new Schema(mergedFields, metadata);
|
|
363
|
-
}
|
|
364
|
-
};
|
|
365
|
-
function checkNames(fields) {
|
|
366
|
-
const usedNames = {};
|
|
367
|
-
for (const field of fields) {
|
|
368
|
-
if (usedNames[field.name]) {
|
|
369
|
-
console.warn("Schema: duplicated field name", field.name, field);
|
|
370
|
-
}
|
|
371
|
-
usedNames[field.name] = true;
|
|
372
|
-
}
|
|
373
|
-
}
|
|
374
|
-
function mergeMaps(m1, m2) {
|
|
375
|
-
return new Map([...m1 || new Map(), ...m2 || new Map()]);
|
|
376
|
-
}
|
|
377
|
-
|
|
378
|
-
// ../schema/src/lib/schema/impl/field.ts
|
|
379
|
-
var Field = class {
|
|
380
|
-
constructor(name, type, nullable = false, metadata = new Map()) {
|
|
381
|
-
this.name = name;
|
|
382
|
-
this.type = type;
|
|
383
|
-
this.nullable = nullable;
|
|
384
|
-
this.metadata = metadata;
|
|
385
|
-
}
|
|
386
|
-
get typeId() {
|
|
387
|
-
return this.type && this.type.typeId;
|
|
388
|
-
}
|
|
389
|
-
clone() {
|
|
390
|
-
return new Field(this.name, this.type, this.nullable, this.metadata);
|
|
391
|
-
}
|
|
392
|
-
compareTo(other) {
|
|
393
|
-
return this.name === other.name && this.type === other.type && this.nullable === other.nullable && this.metadata === other.metadata;
|
|
394
|
-
}
|
|
395
|
-
toString() {
|
|
396
|
-
return `${this.type}${this.nullable ? ", nullable" : ""}${this.metadata ? `, metadata: ${this.metadata}` : ""}`;
|
|
397
|
-
}
|
|
398
|
-
};
|
|
399
|
-
|
|
400
|
-
// ../schema/src/lib/schema/impl/enum.ts
|
|
401
|
-
var Type;
|
|
402
|
-
(function(Type2) {
|
|
403
|
-
Type2[Type2["NONE"] = 0] = "NONE";
|
|
404
|
-
Type2[Type2["Null"] = 1] = "Null";
|
|
405
|
-
Type2[Type2["Int"] = 2] = "Int";
|
|
406
|
-
Type2[Type2["Float"] = 3] = "Float";
|
|
407
|
-
Type2[Type2["Binary"] = 4] = "Binary";
|
|
408
|
-
Type2[Type2["Utf8"] = 5] = "Utf8";
|
|
409
|
-
Type2[Type2["Bool"] = 6] = "Bool";
|
|
410
|
-
Type2[Type2["Decimal"] = 7] = "Decimal";
|
|
411
|
-
Type2[Type2["Date"] = 8] = "Date";
|
|
412
|
-
Type2[Type2["Time"] = 9] = "Time";
|
|
413
|
-
Type2[Type2["Timestamp"] = 10] = "Timestamp";
|
|
414
|
-
Type2[Type2["Interval"] = 11] = "Interval";
|
|
415
|
-
Type2[Type2["List"] = 12] = "List";
|
|
416
|
-
Type2[Type2["Struct"] = 13] = "Struct";
|
|
417
|
-
Type2[Type2["Union"] = 14] = "Union";
|
|
418
|
-
Type2[Type2["FixedSizeBinary"] = 15] = "FixedSizeBinary";
|
|
419
|
-
Type2[Type2["FixedSizeList"] = 16] = "FixedSizeList";
|
|
420
|
-
Type2[Type2["Map"] = 17] = "Map";
|
|
421
|
-
Type2[Type2["Dictionary"] = -1] = "Dictionary";
|
|
422
|
-
Type2[Type2["Int8"] = -2] = "Int8";
|
|
423
|
-
Type2[Type2["Int16"] = -3] = "Int16";
|
|
424
|
-
Type2[Type2["Int32"] = -4] = "Int32";
|
|
425
|
-
Type2[Type2["Int64"] = -5] = "Int64";
|
|
426
|
-
Type2[Type2["Uint8"] = -6] = "Uint8";
|
|
427
|
-
Type2[Type2["Uint16"] = -7] = "Uint16";
|
|
428
|
-
Type2[Type2["Uint32"] = -8] = "Uint32";
|
|
429
|
-
Type2[Type2["Uint64"] = -9] = "Uint64";
|
|
430
|
-
Type2[Type2["Float16"] = -10] = "Float16";
|
|
431
|
-
Type2[Type2["Float32"] = -11] = "Float32";
|
|
432
|
-
Type2[Type2["Float64"] = -12] = "Float64";
|
|
433
|
-
Type2[Type2["DateDay"] = -13] = "DateDay";
|
|
434
|
-
Type2[Type2["DateMillisecond"] = -14] = "DateMillisecond";
|
|
435
|
-
Type2[Type2["TimestampSecond"] = -15] = "TimestampSecond";
|
|
436
|
-
Type2[Type2["TimestampMillisecond"] = -16] = "TimestampMillisecond";
|
|
437
|
-
Type2[Type2["TimestampMicrosecond"] = -17] = "TimestampMicrosecond";
|
|
438
|
-
Type2[Type2["TimestampNanosecond"] = -18] = "TimestampNanosecond";
|
|
439
|
-
Type2[Type2["TimeSecond"] = -19] = "TimeSecond";
|
|
440
|
-
Type2[Type2["TimeMillisecond"] = -20] = "TimeMillisecond";
|
|
441
|
-
Type2[Type2["TimeMicrosecond"] = -21] = "TimeMicrosecond";
|
|
442
|
-
Type2[Type2["TimeNanosecond"] = -22] = "TimeNanosecond";
|
|
443
|
-
Type2[Type2["DenseUnion"] = -23] = "DenseUnion";
|
|
444
|
-
Type2[Type2["SparseUnion"] = -24] = "SparseUnion";
|
|
445
|
-
Type2[Type2["IntervalDayTime"] = -25] = "IntervalDayTime";
|
|
446
|
-
Type2[Type2["IntervalYearMonth"] = -26] = "IntervalYearMonth";
|
|
447
|
-
})(Type || (Type = {}));
|
|
448
|
-
|
|
449
|
-
// ../schema/src/lib/schema/impl/type.ts
|
|
450
|
-
var DataType = class {
|
|
451
|
-
static isNull(x) {
|
|
452
|
-
return x && x.typeId === Type.Null;
|
|
453
|
-
}
|
|
454
|
-
static isInt(x) {
|
|
455
|
-
return x && x.typeId === Type.Int;
|
|
456
|
-
}
|
|
457
|
-
static isFloat(x) {
|
|
458
|
-
return x && x.typeId === Type.Float;
|
|
459
|
-
}
|
|
460
|
-
static isBinary(x) {
|
|
461
|
-
return x && x.typeId === Type.Binary;
|
|
462
|
-
}
|
|
463
|
-
static isUtf8(x) {
|
|
464
|
-
return x && x.typeId === Type.Utf8;
|
|
465
|
-
}
|
|
466
|
-
static isBool(x) {
|
|
467
|
-
return x && x.typeId === Type.Bool;
|
|
468
|
-
}
|
|
469
|
-
static isDecimal(x) {
|
|
470
|
-
return x && x.typeId === Type.Decimal;
|
|
471
|
-
}
|
|
472
|
-
static isDate(x) {
|
|
473
|
-
return x && x.typeId === Type.Date;
|
|
474
|
-
}
|
|
475
|
-
static isTime(x) {
|
|
476
|
-
return x && x.typeId === Type.Time;
|
|
477
|
-
}
|
|
478
|
-
static isTimestamp(x) {
|
|
479
|
-
return x && x.typeId === Type.Timestamp;
|
|
480
|
-
}
|
|
481
|
-
static isInterval(x) {
|
|
482
|
-
return x && x.typeId === Type.Interval;
|
|
483
|
-
}
|
|
484
|
-
static isList(x) {
|
|
485
|
-
return x && x.typeId === Type.List;
|
|
486
|
-
}
|
|
487
|
-
static isStruct(x) {
|
|
488
|
-
return x && x.typeId === Type.Struct;
|
|
489
|
-
}
|
|
490
|
-
static isUnion(x) {
|
|
491
|
-
return x && x.typeId === Type.Union;
|
|
492
|
-
}
|
|
493
|
-
static isFixedSizeBinary(x) {
|
|
494
|
-
return x && x.typeId === Type.FixedSizeBinary;
|
|
495
|
-
}
|
|
496
|
-
static isFixedSizeList(x) {
|
|
497
|
-
return x && x.typeId === Type.FixedSizeList;
|
|
498
|
-
}
|
|
499
|
-
static isMap(x) {
|
|
500
|
-
return x && x.typeId === Type.Map;
|
|
501
|
-
}
|
|
502
|
-
static isDictionary(x) {
|
|
503
|
-
return x && x.typeId === Type.Dictionary;
|
|
504
|
-
}
|
|
505
|
-
get typeId() {
|
|
506
|
-
return Type.NONE;
|
|
507
|
-
}
|
|
508
|
-
compareTo(other) {
|
|
509
|
-
return this === other;
|
|
510
|
-
}
|
|
511
|
-
};
|
|
512
|
-
var Null = class extends DataType {
|
|
513
|
-
get typeId() {
|
|
514
|
-
return Type.Null;
|
|
515
|
-
}
|
|
516
|
-
get [Symbol.toStringTag]() {
|
|
517
|
-
return "Null";
|
|
518
|
-
}
|
|
519
|
-
toString() {
|
|
520
|
-
return "Null";
|
|
521
|
-
}
|
|
522
|
-
};
|
|
523
|
-
var Bool = class extends DataType {
|
|
524
|
-
get typeId() {
|
|
525
|
-
return Type.Bool;
|
|
526
|
-
}
|
|
527
|
-
get [Symbol.toStringTag]() {
|
|
528
|
-
return "Bool";
|
|
529
|
-
}
|
|
530
|
-
toString() {
|
|
531
|
-
return "Bool";
|
|
532
|
-
}
|
|
533
|
-
};
|
|
534
|
-
var Int = class extends DataType {
|
|
535
|
-
constructor(isSigned, bitWidth) {
|
|
536
|
-
super();
|
|
537
|
-
this.isSigned = isSigned;
|
|
538
|
-
this.bitWidth = bitWidth;
|
|
539
|
-
}
|
|
540
|
-
get typeId() {
|
|
541
|
-
return Type.Int;
|
|
542
|
-
}
|
|
543
|
-
get [Symbol.toStringTag]() {
|
|
544
|
-
return "Int";
|
|
545
|
-
}
|
|
546
|
-
toString() {
|
|
547
|
-
return `${this.isSigned ? "I" : "Ui"}nt${this.bitWidth}`;
|
|
548
|
-
}
|
|
549
|
-
};
|
|
550
|
-
var Int8 = class extends Int {
|
|
551
|
-
constructor() {
|
|
552
|
-
super(true, 8);
|
|
553
|
-
}
|
|
554
|
-
};
|
|
555
|
-
var Int16 = class extends Int {
|
|
556
|
-
constructor() {
|
|
557
|
-
super(true, 16);
|
|
558
|
-
}
|
|
559
|
-
};
|
|
560
|
-
var Int32 = class extends Int {
|
|
561
|
-
constructor() {
|
|
562
|
-
super(true, 32);
|
|
563
|
-
}
|
|
564
|
-
};
|
|
565
|
-
var Uint8 = class extends Int {
|
|
566
|
-
constructor() {
|
|
567
|
-
super(false, 8);
|
|
568
|
-
}
|
|
569
|
-
};
|
|
570
|
-
var Uint16 = class extends Int {
|
|
571
|
-
constructor() {
|
|
572
|
-
super(false, 16);
|
|
573
|
-
}
|
|
574
|
-
};
|
|
575
|
-
var Uint32 = class extends Int {
|
|
576
|
-
constructor() {
|
|
577
|
-
super(false, 32);
|
|
578
|
-
}
|
|
579
|
-
};
|
|
580
|
-
var Precision = {
|
|
581
|
-
HALF: 16,
|
|
582
|
-
SINGLE: 32,
|
|
583
|
-
DOUBLE: 64
|
|
584
|
-
};
|
|
585
|
-
var Float = class extends DataType {
|
|
586
|
-
constructor(precision) {
|
|
587
|
-
super();
|
|
588
|
-
this.precision = precision;
|
|
589
|
-
}
|
|
590
|
-
get typeId() {
|
|
591
|
-
return Type.Float;
|
|
592
|
-
}
|
|
593
|
-
get [Symbol.toStringTag]() {
|
|
594
|
-
return "Float";
|
|
595
|
-
}
|
|
596
|
-
toString() {
|
|
597
|
-
return `Float${this.precision}`;
|
|
598
|
-
}
|
|
599
|
-
};
|
|
600
|
-
var Float32 = class extends Float {
|
|
601
|
-
constructor() {
|
|
602
|
-
super(Precision.SINGLE);
|
|
603
|
-
}
|
|
604
|
-
};
|
|
605
|
-
var Float64 = class extends Float {
|
|
606
|
-
constructor() {
|
|
607
|
-
super(Precision.DOUBLE);
|
|
608
|
-
}
|
|
609
|
-
};
|
|
610
|
-
var Binary = class extends DataType {
|
|
611
|
-
constructor() {
|
|
612
|
-
super();
|
|
613
|
-
}
|
|
614
|
-
get typeId() {
|
|
615
|
-
return Type.Binary;
|
|
616
|
-
}
|
|
617
|
-
toString() {
|
|
618
|
-
return "Binary";
|
|
619
|
-
}
|
|
620
|
-
get [Symbol.toStringTag]() {
|
|
621
|
-
return "Binary";
|
|
622
|
-
}
|
|
623
|
-
};
|
|
624
|
-
var Utf8 = class extends DataType {
|
|
625
|
-
get typeId() {
|
|
626
|
-
return Type.Utf8;
|
|
627
|
-
}
|
|
628
|
-
get [Symbol.toStringTag]() {
|
|
629
|
-
return "Utf8";
|
|
630
|
-
}
|
|
631
|
-
toString() {
|
|
632
|
-
return "Utf8";
|
|
633
|
-
}
|
|
634
|
-
};
|
|
635
|
-
var DateUnit = {
|
|
636
|
-
DAY: 0,
|
|
637
|
-
MILLISECOND: 1
|
|
638
|
-
};
|
|
639
|
-
var Date = class extends DataType {
|
|
640
|
-
constructor(unit) {
|
|
641
|
-
super();
|
|
642
|
-
this.unit = unit;
|
|
643
|
-
}
|
|
644
|
-
get typeId() {
|
|
645
|
-
return Type.Date;
|
|
646
|
-
}
|
|
647
|
-
get [Symbol.toStringTag]() {
|
|
648
|
-
return "Date";
|
|
649
|
-
}
|
|
650
|
-
toString() {
|
|
651
|
-
return `Date${(this.unit + 1) * 32}<${DateUnit[this.unit]}>`;
|
|
652
|
-
}
|
|
653
|
-
};
|
|
654
|
-
var TimeUnit = {
|
|
655
|
-
SECOND: 1,
|
|
656
|
-
MILLISECOND: 1e3,
|
|
657
|
-
MICROSECOND: 1e6,
|
|
658
|
-
NANOSECOND: 1e9
|
|
659
|
-
};
|
|
660
|
-
var Time = class extends DataType {
|
|
661
|
-
constructor(unit, bitWidth) {
|
|
662
|
-
super();
|
|
663
|
-
this.unit = unit;
|
|
664
|
-
this.bitWidth = bitWidth;
|
|
665
|
-
}
|
|
666
|
-
get typeId() {
|
|
667
|
-
return Type.Time;
|
|
668
|
-
}
|
|
669
|
-
toString() {
|
|
670
|
-
return `Time${this.bitWidth}<${TimeUnit[this.unit]}>`;
|
|
671
|
-
}
|
|
672
|
-
get [Symbol.toStringTag]() {
|
|
673
|
-
return "Time";
|
|
674
|
-
}
|
|
675
|
-
};
|
|
676
|
-
var Timestamp = class extends DataType {
|
|
677
|
-
constructor(unit, timezone = null) {
|
|
678
|
-
super();
|
|
679
|
-
this.unit = unit;
|
|
680
|
-
this.timezone = timezone;
|
|
681
|
-
}
|
|
682
|
-
get typeId() {
|
|
683
|
-
return Type.Timestamp;
|
|
684
|
-
}
|
|
685
|
-
get [Symbol.toStringTag]() {
|
|
686
|
-
return "Timestamp";
|
|
687
|
-
}
|
|
688
|
-
toString() {
|
|
689
|
-
return `Timestamp<${TimeUnit[this.unit]}${this.timezone ? `, ${this.timezone}` : ""}>`;
|
|
690
|
-
}
|
|
691
|
-
};
|
|
692
|
-
var IntervalUnit = {
|
|
693
|
-
DAY_TIME: 0,
|
|
694
|
-
YEAR_MONTH: 1
|
|
695
|
-
};
|
|
696
|
-
var Interval = class extends DataType {
|
|
697
|
-
constructor(unit) {
|
|
698
|
-
super();
|
|
699
|
-
this.unit = unit;
|
|
700
|
-
}
|
|
701
|
-
get typeId() {
|
|
702
|
-
return Type.Interval;
|
|
703
|
-
}
|
|
704
|
-
get [Symbol.toStringTag]() {
|
|
705
|
-
return "Interval";
|
|
706
|
-
}
|
|
707
|
-
toString() {
|
|
708
|
-
return `Interval<${IntervalUnit[this.unit]}>`;
|
|
709
|
-
}
|
|
710
|
-
};
|
|
711
|
-
var FixedSizeList = class extends DataType {
|
|
712
|
-
constructor(listSize, child) {
|
|
713
|
-
super();
|
|
714
|
-
this.listSize = listSize;
|
|
715
|
-
this.children = [child];
|
|
716
|
-
}
|
|
717
|
-
get typeId() {
|
|
718
|
-
return Type.FixedSizeList;
|
|
719
|
-
}
|
|
720
|
-
get valueType() {
|
|
721
|
-
return this.children[0].type;
|
|
722
|
-
}
|
|
723
|
-
get valueField() {
|
|
724
|
-
return this.children[0];
|
|
725
|
-
}
|
|
726
|
-
get [Symbol.toStringTag]() {
|
|
727
|
-
return "FixedSizeList";
|
|
728
|
-
}
|
|
729
|
-
toString() {
|
|
730
|
-
return `FixedSizeList[${this.listSize}]<${this.valueType}>`;
|
|
731
|
-
}
|
|
732
|
-
};
|
|
733
|
-
var Struct = class extends DataType {
|
|
734
|
-
constructor(children) {
|
|
735
|
-
super();
|
|
736
|
-
this.children = children;
|
|
737
|
-
}
|
|
738
|
-
get typeId() {
|
|
739
|
-
return Type.Struct;
|
|
740
|
-
}
|
|
741
|
-
toString() {
|
|
742
|
-
return `Struct<{${this.children.map((f) => `${f.name}:${f.type}`).join(", ")}}>`;
|
|
743
|
-
}
|
|
744
|
-
get [Symbol.toStringTag]() {
|
|
745
|
-
return "Struct";
|
|
746
|
-
}
|
|
747
|
-
};
|
|
748
|
-
|
|
749
|
-
// ../schema/src/lib/arrow/arrow-like-type-utils.ts
|
|
750
|
-
function getArrowTypeFromTypedArray(array) {
|
|
751
|
-
switch (array.constructor) {
|
|
752
|
-
case Int8Array:
|
|
753
|
-
return new Int8();
|
|
754
|
-
case Uint8Array:
|
|
755
|
-
return new Uint8();
|
|
756
|
-
case Int16Array:
|
|
757
|
-
return new Int16();
|
|
758
|
-
case Uint16Array:
|
|
759
|
-
return new Uint16();
|
|
760
|
-
case Int32Array:
|
|
761
|
-
return new Int32();
|
|
762
|
-
case Uint32Array:
|
|
763
|
-
return new Uint32();
|
|
764
|
-
case Float32Array:
|
|
765
|
-
return new Float32();
|
|
766
|
-
case Float64Array:
|
|
767
|
-
return new Float64();
|
|
768
|
-
default:
|
|
769
|
-
throw new Error("array type not supported");
|
|
770
|
-
}
|
|
771
|
-
}
|
|
772
|
-
|
|
773
|
-
// ../schema/src/category/mesh/deduce-mesh-schema.ts
|
|
774
|
-
function deduceMeshField(attributeName, attribute, optionalMetadata) {
|
|
775
|
-
const type = getArrowTypeFromTypedArray(attribute.value);
|
|
776
|
-
const metadata = optionalMetadata ? optionalMetadata : makeMeshAttributeMetadata(attribute);
|
|
777
|
-
const field = new Field(attributeName, new FixedSizeList(attribute.size, new Field("value", type)), false, metadata);
|
|
778
|
-
return field;
|
|
779
|
-
}
|
|
780
|
-
function makeMeshAttributeMetadata(attribute) {
|
|
781
|
-
const result = new Map();
|
|
782
|
-
if ("byteOffset" in attribute) {
|
|
783
|
-
result.set("byteOffset", attribute.byteOffset.toString(10));
|
|
784
|
-
}
|
|
785
|
-
if ("byteStride" in attribute) {
|
|
786
|
-
result.set("byteStride", attribute.byteStride.toString(10));
|
|
787
|
-
}
|
|
788
|
-
if ("normalized" in attribute) {
|
|
789
|
-
result.set("normalized", attribute.normalized.toString());
|
|
790
|
-
}
|
|
791
|
-
return result;
|
|
792
|
-
}
|
|
793
|
-
|
|
794
|
-
// src/lib/utils/get-draco-schema.ts
|
|
795
|
-
function getDracoSchema(attributes, loaderData, indices) {
|
|
796
|
-
const metadataMap = makeMetadata(loaderData.metadata);
|
|
797
|
-
const fields = [];
|
|
798
|
-
const namedLoaderDataAttributes = transformAttributesLoaderData(loaderData.attributes);
|
|
799
|
-
for (const attributeName in attributes) {
|
|
800
|
-
const attribute = attributes[attributeName];
|
|
801
|
-
const field = getArrowFieldFromAttribute(attributeName, attribute, namedLoaderDataAttributes[attributeName]);
|
|
802
|
-
fields.push(field);
|
|
803
|
-
}
|
|
804
|
-
if (indices) {
|
|
805
|
-
const indicesField = getArrowFieldFromAttribute("indices", indices);
|
|
806
|
-
fields.push(indicesField);
|
|
807
|
-
}
|
|
808
|
-
return new Schema(fields, metadataMap);
|
|
809
|
-
}
|
|
810
|
-
function transformAttributesLoaderData(loaderData) {
|
|
811
|
-
const result = {};
|
|
812
|
-
for (const key in loaderData) {
|
|
813
|
-
const dracoAttribute = loaderData[key];
|
|
814
|
-
result[dracoAttribute.name || "undefined"] = dracoAttribute;
|
|
815
|
-
}
|
|
816
|
-
return result;
|
|
817
|
-
}
|
|
818
|
-
function getArrowFieldFromAttribute(attributeName, attribute, loaderData) {
|
|
819
|
-
const metadataMap = loaderData ? makeMetadata(loaderData.metadata) : void 0;
|
|
820
|
-
const field = deduceMeshField(attributeName, attribute, metadataMap);
|
|
821
|
-
return field;
|
|
822
|
-
}
|
|
823
|
-
function makeMetadata(metadata) {
|
|
824
|
-
const metadataMap = new Map();
|
|
825
|
-
for (const key in metadata) {
|
|
826
|
-
metadataMap.set(`${key}.string`, JSON.stringify(metadata[key]));
|
|
827
|
-
}
|
|
828
|
-
return metadataMap;
|
|
829
|
-
}
|
|
830
|
-
|
|
831
|
-
// src/lib/draco-parser.ts
|
|
832
|
-
var DRACO_TO_GLTF_ATTRIBUTE_NAME_MAP = {
|
|
833
|
-
POSITION: "POSITION",
|
|
834
|
-
NORMAL: "NORMAL",
|
|
835
|
-
COLOR: "COLOR_0",
|
|
836
|
-
TEX_COORD: "TEXCOORD_0"
|
|
837
|
-
};
|
|
838
|
-
var DRACO_DATA_TYPE_TO_TYPED_ARRAY_MAP = {
|
|
839
|
-
1: Int8Array,
|
|
840
|
-
2: Uint8Array,
|
|
841
|
-
3: Int16Array,
|
|
842
|
-
4: Uint16Array,
|
|
843
|
-
5: Int32Array,
|
|
844
|
-
6: Uint32Array,
|
|
845
|
-
9: Float32Array
|
|
846
|
-
};
|
|
847
|
-
var INDEX_ITEM_SIZE = 4;
|
|
848
|
-
var DracoParser = class {
|
|
849
|
-
constructor(draco) {
|
|
850
|
-
this.draco = draco;
|
|
851
|
-
this.decoder = new this.draco.Decoder();
|
|
852
|
-
this.metadataQuerier = new this.draco.MetadataQuerier();
|
|
853
|
-
}
|
|
854
|
-
destroy() {
|
|
855
|
-
this.draco.destroy(this.decoder);
|
|
856
|
-
this.draco.destroy(this.metadataQuerier);
|
|
857
|
-
}
|
|
858
|
-
parseSync(arrayBuffer, options = {}) {
|
|
859
|
-
const buffer = new this.draco.DecoderBuffer();
|
|
860
|
-
buffer.Init(new Int8Array(arrayBuffer), arrayBuffer.byteLength);
|
|
861
|
-
this._disableAttributeTransforms(options);
|
|
862
|
-
const geometry_type = this.decoder.GetEncodedGeometryType(buffer);
|
|
863
|
-
const dracoGeometry = geometry_type === this.draco.TRIANGULAR_MESH ? new this.draco.Mesh() : new this.draco.PointCloud();
|
|
864
|
-
try {
|
|
865
|
-
let dracoStatus;
|
|
866
|
-
switch (geometry_type) {
|
|
867
|
-
case this.draco.TRIANGULAR_MESH:
|
|
868
|
-
dracoStatus = this.decoder.DecodeBufferToMesh(buffer, dracoGeometry);
|
|
869
|
-
break;
|
|
870
|
-
case this.draco.POINT_CLOUD:
|
|
871
|
-
dracoStatus = this.decoder.DecodeBufferToPointCloud(buffer, dracoGeometry);
|
|
872
|
-
break;
|
|
873
|
-
default:
|
|
874
|
-
throw new Error("DRACO: Unknown geometry type.");
|
|
875
|
-
}
|
|
876
|
-
if (!dracoStatus.ok() || !dracoGeometry.ptr) {
|
|
877
|
-
const message = `DRACO decompression failed: ${dracoStatus.error_msg()}`;
|
|
878
|
-
throw new Error(message);
|
|
879
|
-
}
|
|
880
|
-
const loaderData = this._getDracoLoaderData(dracoGeometry, geometry_type, options);
|
|
881
|
-
const geometry = this._getMeshData(dracoGeometry, loaderData, options);
|
|
882
|
-
const boundingBox = getMeshBoundingBox(geometry.attributes);
|
|
883
|
-
const schema = getDracoSchema(geometry.attributes, loaderData, geometry.indices);
|
|
884
|
-
const data = {
|
|
885
|
-
loader: "draco",
|
|
886
|
-
loaderData,
|
|
887
|
-
header: {
|
|
888
|
-
vertexCount: dracoGeometry.num_points(),
|
|
889
|
-
boundingBox
|
|
890
|
-
},
|
|
891
|
-
...geometry,
|
|
892
|
-
schema
|
|
893
|
-
};
|
|
894
|
-
return data;
|
|
895
|
-
} finally {
|
|
896
|
-
this.draco.destroy(buffer);
|
|
897
|
-
if (dracoGeometry) {
|
|
898
|
-
this.draco.destroy(dracoGeometry);
|
|
899
|
-
}
|
|
900
|
-
}
|
|
901
|
-
}
|
|
902
|
-
_getDracoLoaderData(dracoGeometry, geometry_type, options) {
|
|
903
|
-
const metadata = this._getTopLevelMetadata(dracoGeometry);
|
|
904
|
-
const attributes = this._getDracoAttributes(dracoGeometry, options);
|
|
905
|
-
return {
|
|
906
|
-
geometry_type,
|
|
907
|
-
num_attributes: dracoGeometry.num_attributes(),
|
|
908
|
-
num_points: dracoGeometry.num_points(),
|
|
909
|
-
num_faces: dracoGeometry instanceof this.draco.Mesh ? dracoGeometry.num_faces() : 0,
|
|
910
|
-
metadata,
|
|
911
|
-
attributes
|
|
912
|
-
};
|
|
913
|
-
}
|
|
914
|
-
_getDracoAttributes(dracoGeometry, options) {
|
|
915
|
-
const dracoAttributes = {};
|
|
916
|
-
for (let attributeId = 0; attributeId < dracoGeometry.num_attributes(); attributeId++) {
|
|
917
|
-
const dracoAttribute = this.decoder.GetAttribute(dracoGeometry, attributeId);
|
|
918
|
-
const metadata = this._getAttributeMetadata(dracoGeometry, attributeId);
|
|
919
|
-
dracoAttributes[dracoAttribute.unique_id()] = {
|
|
920
|
-
unique_id: dracoAttribute.unique_id(),
|
|
921
|
-
attribute_type: dracoAttribute.attribute_type(),
|
|
922
|
-
data_type: dracoAttribute.data_type(),
|
|
923
|
-
num_components: dracoAttribute.num_components(),
|
|
924
|
-
byte_offset: dracoAttribute.byte_offset(),
|
|
925
|
-
byte_stride: dracoAttribute.byte_stride(),
|
|
926
|
-
normalized: dracoAttribute.normalized(),
|
|
927
|
-
attribute_index: attributeId,
|
|
928
|
-
metadata
|
|
929
|
-
};
|
|
930
|
-
const quantization = this._getQuantizationTransform(dracoAttribute, options);
|
|
931
|
-
if (quantization) {
|
|
932
|
-
dracoAttributes[dracoAttribute.unique_id()].quantization_transform = quantization;
|
|
933
|
-
}
|
|
934
|
-
const octahedron = this._getOctahedronTransform(dracoAttribute, options);
|
|
935
|
-
if (octahedron) {
|
|
936
|
-
dracoAttributes[dracoAttribute.unique_id()].octahedron_transform = octahedron;
|
|
937
|
-
}
|
|
938
|
-
}
|
|
939
|
-
return dracoAttributes;
|
|
940
|
-
}
|
|
941
|
-
_getMeshData(dracoGeometry, loaderData, options) {
|
|
942
|
-
const attributes = this._getMeshAttributes(loaderData, dracoGeometry, options);
|
|
943
|
-
const positionAttribute = attributes.POSITION;
|
|
944
|
-
if (!positionAttribute) {
|
|
945
|
-
throw new Error("DRACO: No position attribute found.");
|
|
946
|
-
}
|
|
947
|
-
if (dracoGeometry instanceof this.draco.Mesh) {
|
|
948
|
-
switch (options.topology) {
|
|
949
|
-
case "triangle-strip":
|
|
950
|
-
return {
|
|
951
|
-
topology: "triangle-strip",
|
|
952
|
-
mode: 4,
|
|
953
|
-
attributes,
|
|
954
|
-
indices: {
|
|
955
|
-
value: this._getTriangleStripIndices(dracoGeometry),
|
|
956
|
-
size: 1
|
|
957
|
-
}
|
|
958
|
-
};
|
|
959
|
-
case "triangle-list":
|
|
960
|
-
default:
|
|
961
|
-
return {
|
|
962
|
-
topology: "triangle-list",
|
|
963
|
-
mode: 5,
|
|
964
|
-
attributes,
|
|
965
|
-
indices: {
|
|
966
|
-
value: this._getTriangleListIndices(dracoGeometry),
|
|
967
|
-
size: 1
|
|
968
|
-
}
|
|
969
|
-
};
|
|
970
|
-
}
|
|
971
|
-
}
|
|
972
|
-
return {
|
|
973
|
-
topology: "point-list",
|
|
974
|
-
mode: 0,
|
|
975
|
-
attributes
|
|
976
|
-
};
|
|
977
|
-
}
|
|
978
|
-
_getMeshAttributes(loaderData, dracoGeometry, options) {
|
|
979
|
-
const attributes = {};
|
|
980
|
-
for (const loaderAttribute of Object.values(loaderData.attributes)) {
|
|
981
|
-
const attributeName = this._deduceAttributeName(loaderAttribute, options);
|
|
982
|
-
loaderAttribute.name = attributeName;
|
|
983
|
-
const { value, size } = this._getAttributeValues(dracoGeometry, loaderAttribute);
|
|
984
|
-
attributes[attributeName] = {
|
|
985
|
-
value,
|
|
986
|
-
size,
|
|
987
|
-
byteOffset: loaderAttribute.byte_offset,
|
|
988
|
-
byteStride: loaderAttribute.byte_stride,
|
|
989
|
-
normalized: loaderAttribute.normalized
|
|
990
|
-
};
|
|
991
|
-
}
|
|
992
|
-
return attributes;
|
|
993
|
-
}
|
|
994
|
-
_getTriangleListIndices(dracoGeometry) {
|
|
995
|
-
const numFaces = dracoGeometry.num_faces();
|
|
996
|
-
const numIndices = numFaces * 3;
|
|
997
|
-
const byteLength = numIndices * INDEX_ITEM_SIZE;
|
|
998
|
-
const ptr = this.draco._malloc(byteLength);
|
|
999
|
-
try {
|
|
1000
|
-
this.decoder.GetTrianglesUInt32Array(dracoGeometry, byteLength, ptr);
|
|
1001
|
-
return new Uint32Array(this.draco.HEAPF32.buffer, ptr, numIndices).slice();
|
|
1002
|
-
} finally {
|
|
1003
|
-
this.draco._free(ptr);
|
|
1004
|
-
}
|
|
1005
|
-
}
|
|
1006
|
-
_getTriangleStripIndices(dracoGeometry) {
|
|
1007
|
-
const dracoArray = new this.draco.DracoInt32Array();
|
|
1008
|
-
try {
|
|
1009
|
-
this.decoder.GetTriangleStripsFromMesh(dracoGeometry, dracoArray);
|
|
1010
|
-
return getUint32Array(dracoArray);
|
|
1011
|
-
} finally {
|
|
1012
|
-
this.draco.destroy(dracoArray);
|
|
1013
|
-
}
|
|
1014
|
-
}
|
|
1015
|
-
_getAttributeValues(dracoGeometry, attribute) {
|
|
1016
|
-
const TypedArrayCtor = DRACO_DATA_TYPE_TO_TYPED_ARRAY_MAP[attribute.data_type];
|
|
1017
|
-
const numComponents = attribute.num_components;
|
|
1018
|
-
const numPoints = dracoGeometry.num_points();
|
|
1019
|
-
const numValues = numPoints * numComponents;
|
|
1020
|
-
const byteLength = numValues * TypedArrayCtor.BYTES_PER_ELEMENT;
|
|
1021
|
-
const dataType = getDracoDataType(this.draco, TypedArrayCtor);
|
|
1022
|
-
let value;
|
|
1023
|
-
const ptr = this.draco._malloc(byteLength);
|
|
1024
|
-
try {
|
|
1025
|
-
const dracoAttribute = this.decoder.GetAttribute(dracoGeometry, attribute.attribute_index);
|
|
1026
|
-
this.decoder.GetAttributeDataArrayForAllPoints(dracoGeometry, dracoAttribute, dataType, byteLength, ptr);
|
|
1027
|
-
value = new TypedArrayCtor(this.draco.HEAPF32.buffer, ptr, numValues).slice();
|
|
1028
|
-
} finally {
|
|
1029
|
-
this.draco._free(ptr);
|
|
1030
|
-
}
|
|
1031
|
-
return { value, size: numComponents };
|
|
1032
|
-
}
|
|
1033
|
-
_deduceAttributeName(attribute, options) {
|
|
1034
|
-
const uniqueId = attribute.unique_id;
|
|
1035
|
-
for (const [attributeName, attributeUniqueId] of Object.entries(options.extraAttributes || {})) {
|
|
1036
|
-
if (attributeUniqueId === uniqueId) {
|
|
1037
|
-
return attributeName;
|
|
1038
|
-
}
|
|
1039
|
-
}
|
|
1040
|
-
const thisAttributeType = attribute.attribute_type;
|
|
1041
|
-
for (const dracoAttributeConstant in DRACO_TO_GLTF_ATTRIBUTE_NAME_MAP) {
|
|
1042
|
-
const attributeType = this.draco[dracoAttributeConstant];
|
|
1043
|
-
if (attributeType === thisAttributeType) {
|
|
1044
|
-
return DRACO_TO_GLTF_ATTRIBUTE_NAME_MAP[dracoAttributeConstant];
|
|
1045
|
-
}
|
|
1046
|
-
}
|
|
1047
|
-
const entryName = options.attributeNameEntry || "name";
|
|
1048
|
-
if (attribute.metadata[entryName]) {
|
|
1049
|
-
return attribute.metadata[entryName].string;
|
|
1050
|
-
}
|
|
1051
|
-
return `CUSTOM_ATTRIBUTE_${uniqueId}`;
|
|
1052
|
-
}
|
|
1053
|
-
_getTopLevelMetadata(dracoGeometry) {
|
|
1054
|
-
const dracoMetadata = this.decoder.GetMetadata(dracoGeometry);
|
|
1055
|
-
return this._getDracoMetadata(dracoMetadata);
|
|
1056
|
-
}
|
|
1057
|
-
_getAttributeMetadata(dracoGeometry, attributeId) {
|
|
1058
|
-
const dracoMetadata = this.decoder.GetAttributeMetadata(dracoGeometry, attributeId);
|
|
1059
|
-
return this._getDracoMetadata(dracoMetadata);
|
|
1060
|
-
}
|
|
1061
|
-
_getDracoMetadata(dracoMetadata) {
|
|
1062
|
-
if (!dracoMetadata || !dracoMetadata.ptr) {
|
|
1063
|
-
return {};
|
|
1064
|
-
}
|
|
1065
|
-
const result = {};
|
|
1066
|
-
const numEntries = this.metadataQuerier.NumEntries(dracoMetadata);
|
|
1067
|
-
for (let entryIndex = 0; entryIndex < numEntries; entryIndex++) {
|
|
1068
|
-
const entryName = this.metadataQuerier.GetEntryName(dracoMetadata, entryIndex);
|
|
1069
|
-
result[entryName] = this._getDracoMetadataField(dracoMetadata, entryName);
|
|
1070
|
-
}
|
|
1071
|
-
return result;
|
|
1072
|
-
}
|
|
1073
|
-
_getDracoMetadataField(dracoMetadata, entryName) {
|
|
1074
|
-
const dracoArray = new this.draco.DracoInt32Array();
|
|
1075
|
-
try {
|
|
1076
|
-
this.metadataQuerier.GetIntEntryArray(dracoMetadata, entryName, dracoArray);
|
|
1077
|
-
const intArray = getInt32Array(dracoArray);
|
|
1078
|
-
return {
|
|
1079
|
-
int: this.metadataQuerier.GetIntEntry(dracoMetadata, entryName),
|
|
1080
|
-
string: this.metadataQuerier.GetStringEntry(dracoMetadata, entryName),
|
|
1081
|
-
double: this.metadataQuerier.GetDoubleEntry(dracoMetadata, entryName),
|
|
1082
|
-
intArray
|
|
1083
|
-
};
|
|
1084
|
-
} finally {
|
|
1085
|
-
this.draco.destroy(dracoArray);
|
|
1086
|
-
}
|
|
1087
|
-
}
|
|
1088
|
-
_disableAttributeTransforms(options) {
|
|
1089
|
-
const { quantizedAttributes = [], octahedronAttributes = [] } = options;
|
|
1090
|
-
const skipAttributes = [...quantizedAttributes, ...octahedronAttributes];
|
|
1091
|
-
for (const dracoAttributeName of skipAttributes) {
|
|
1092
|
-
this.decoder.SkipAttributeTransform(this.draco[dracoAttributeName]);
|
|
1093
|
-
}
|
|
1094
|
-
}
|
|
1095
|
-
_getQuantizationTransform(dracoAttribute, options) {
|
|
1096
|
-
const { quantizedAttributes = [] } = options;
|
|
1097
|
-
const attribute_type = dracoAttribute.attribute_type();
|
|
1098
|
-
const skip = quantizedAttributes.map((type) => this.decoder[type]).includes(attribute_type);
|
|
1099
|
-
if (skip) {
|
|
1100
|
-
const transform = new this.draco.AttributeQuantizationTransform();
|
|
1101
|
-
try {
|
|
1102
|
-
if (transform.InitFromAttribute(dracoAttribute)) {
|
|
1103
|
-
return {
|
|
1104
|
-
quantization_bits: transform.quantization_bits(),
|
|
1105
|
-
range: transform.range(),
|
|
1106
|
-
min_values: new Float32Array([1, 2, 3]).map((i) => transform.min_value(i))
|
|
1107
|
-
};
|
|
1108
|
-
}
|
|
1109
|
-
} finally {
|
|
1110
|
-
this.draco.destroy(transform);
|
|
1111
|
-
}
|
|
1112
|
-
}
|
|
1113
|
-
return null;
|
|
1114
|
-
}
|
|
1115
|
-
_getOctahedronTransform(dracoAttribute, options) {
|
|
1116
|
-
const { octahedronAttributes = [] } = options;
|
|
1117
|
-
const attribute_type = dracoAttribute.attribute_type();
|
|
1118
|
-
const octahedron = octahedronAttributes.map((type) => this.decoder[type]).includes(attribute_type);
|
|
1119
|
-
if (octahedron) {
|
|
1120
|
-
const transform = new this.draco.AttributeQuantizationTransform();
|
|
1121
|
-
try {
|
|
1122
|
-
if (transform.InitFromAttribute(dracoAttribute)) {
|
|
1123
|
-
return {
|
|
1124
|
-
quantization_bits: transform.quantization_bits()
|
|
1125
|
-
};
|
|
1126
|
-
}
|
|
1127
|
-
} finally {
|
|
1128
|
-
this.draco.destroy(transform);
|
|
1129
|
-
}
|
|
1130
|
-
}
|
|
1131
|
-
return null;
|
|
1132
|
-
}
|
|
1133
|
-
};
|
|
1134
|
-
function getDracoDataType(draco, attributeType) {
|
|
1135
|
-
switch (attributeType) {
|
|
1136
|
-
case Float32Array:
|
|
1137
|
-
return draco.DT_FLOAT32;
|
|
1138
|
-
case Int8Array:
|
|
1139
|
-
return draco.DT_INT8;
|
|
1140
|
-
case Int16Array:
|
|
1141
|
-
return draco.DT_INT16;
|
|
1142
|
-
case Int32Array:
|
|
1143
|
-
return draco.DT_INT32;
|
|
1144
|
-
case Uint8Array:
|
|
1145
|
-
return draco.DT_UINT8;
|
|
1146
|
-
case Uint16Array:
|
|
1147
|
-
return draco.DT_UINT16;
|
|
1148
|
-
case Uint32Array:
|
|
1149
|
-
return draco.DT_UINT32;
|
|
1150
|
-
default:
|
|
1151
|
-
return draco.DT_INVALID;
|
|
1152
|
-
}
|
|
1153
|
-
}
|
|
1154
|
-
function getInt32Array(dracoArray) {
|
|
1155
|
-
const numValues = dracoArray.size();
|
|
1156
|
-
const intArray = new Int32Array(numValues);
|
|
1157
|
-
for (let i = 0; i < numValues; i++) {
|
|
1158
|
-
intArray[i] = dracoArray.GetValue(i);
|
|
1159
|
-
}
|
|
1160
|
-
return intArray;
|
|
1161
|
-
}
|
|
1162
|
-
function getUint32Array(dracoArray) {
|
|
1163
|
-
const numValues = dracoArray.size();
|
|
1164
|
-
const intArray = new Int32Array(numValues);
|
|
1165
|
-
for (let i = 0; i < numValues; i++) {
|
|
1166
|
-
intArray[i] = dracoArray.GetValue(i);
|
|
1167
|
-
}
|
|
1168
|
-
return intArray;
|
|
1169
|
-
}
|
|
1170
|
-
|
|
1171
|
-
// src/lib/draco-module-loader.ts
|
|
1172
|
-
var DRACO_VERSION = "1.4.1";
|
|
1173
|
-
var DRACO_JS_DECODER_URL = `https://www.gstatic.com/draco/versioned/decoders/${DRACO_VERSION}/draco_decoder.js`;
|
|
1174
|
-
var DRACO_WASM_WRAPPER_URL = `https://www.gstatic.com/draco/versioned/decoders/${DRACO_VERSION}/draco_wasm_wrapper.js`;
|
|
1175
|
-
var DRACO_WASM_DECODER_URL = `https://www.gstatic.com/draco/versioned/decoders/${DRACO_VERSION}/draco_decoder.wasm`;
|
|
1176
|
-
var DRACO_ENCODER_URL = `https://raw.githubusercontent.com/google/draco/${DRACO_VERSION}/javascript/draco_encoder.js`;
|
|
1177
|
-
var loadDecoderPromise;
|
|
1178
|
-
async function loadDracoDecoderModule(options) {
|
|
1179
|
-
const modules = options.modules || {};
|
|
1180
|
-
if (modules.draco3d) {
|
|
1181
|
-
loadDecoderPromise = loadDecoderPromise || modules.draco3d.createDecoderModule({}).then((draco) => {
|
|
1182
|
-
return { draco };
|
|
1183
|
-
});
|
|
1184
|
-
} else {
|
|
1185
|
-
loadDecoderPromise = loadDecoderPromise || loadDracoDecoder(options);
|
|
1186
|
-
}
|
|
1187
|
-
return await loadDecoderPromise;
|
|
1188
|
-
}
|
|
1189
|
-
async function loadDracoDecoder(options) {
|
|
1190
|
-
let DracoDecoderModule;
|
|
1191
|
-
let wasmBinary;
|
|
1192
|
-
switch (options.draco && options.draco.decoderType) {
|
|
1193
|
-
case "js":
|
|
1194
|
-
DracoDecoderModule = await loadLibrary(DRACO_JS_DECODER_URL, "draco", options);
|
|
1195
|
-
break;
|
|
1196
|
-
case "wasm":
|
|
1197
|
-
default:
|
|
1198
|
-
[DracoDecoderModule, wasmBinary] = await Promise.all([
|
|
1199
|
-
await loadLibrary(DRACO_WASM_WRAPPER_URL, "draco", options),
|
|
1200
|
-
await loadLibrary(DRACO_WASM_DECODER_URL, "draco", options)
|
|
1201
|
-
]);
|
|
1202
|
-
}
|
|
1203
|
-
DracoDecoderModule = DracoDecoderModule || globalThis.DracoDecoderModule;
|
|
1204
|
-
return await initializeDracoDecoder(DracoDecoderModule, wasmBinary);
|
|
1205
|
-
}
|
|
1206
|
-
function initializeDracoDecoder(DracoDecoderModule, wasmBinary) {
|
|
1207
|
-
const options = {};
|
|
1208
|
-
if (wasmBinary) {
|
|
1209
|
-
options.wasmBinary = wasmBinary;
|
|
1210
|
-
}
|
|
1211
|
-
return new Promise((resolve) => {
|
|
1212
|
-
DracoDecoderModule({
|
|
1213
|
-
...options,
|
|
1214
|
-
onModuleLoaded: (draco) => resolve({ draco })
|
|
1215
|
-
});
|
|
1216
|
-
});
|
|
1217
|
-
}
|
|
1218
|
-
|
|
1219
|
-
// src/index.ts
|
|
1220
|
-
var DracoLoader2 = {
|
|
1221
|
-
...DracoLoader,
|
|
1222
|
-
parse
|
|
1223
|
-
};
|
|
1224
|
-
async function parse(arrayBuffer, options) {
|
|
1225
|
-
const { draco } = await loadDracoDecoderModule(options);
|
|
1226
|
-
const dracoParser = new DracoParser(draco);
|
|
1227
|
-
try {
|
|
1228
|
-
return dracoParser.parseSync(arrayBuffer, options?.draco);
|
|
1229
|
-
} finally {
|
|
1230
|
-
dracoParser.destroy();
|
|
1231
|
-
}
|
|
1232
|
-
}
|
|
1233
|
-
|
|
1234
|
-
// src/workers/draco-worker.ts
|
|
1235
|
-
createLoaderWorker(DracoLoader2);
|
|
1236
|
-
})();
|
|
1
|
+
(()=>{var It=Object.create;var C=Object.defineProperty;var Mt=Object.getOwnPropertyDescriptor;var wt=Object.getOwnPropertyNames;var _t=Object.getPrototypeOf,St=Object.prototype.hasOwnProperty;var Tt=e=>C(e,"__esModule",{value:!0});var Ot=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var Lt=(e,t,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of wt(t))!St.call(e,o)&&o!=="default"&&C(e,o,{get:()=>t[o],enumerable:!(r=Mt(t,o))||r.enumerable});return e},Et=e=>Lt(Tt(C(e!=null?It(_t(e)):{},"default",e&&e.__esModule&&"default"in e?{get:()=>e.default,enumerable:!0}:{value:e,enumerable:!0})),e);var st=Ot(()=>{});var W="4.0.0-alpha.5";function et(e,t){if(!e)throw new Error(t||"loaders.gl assertion failed.")}var g={self:typeof self!="undefined"&&self,window:typeof window!="undefined"&&window,global:typeof global!="undefined"&&global,document:typeof document!="undefined"&&document},ge=g.self||g.window||g.global||{},he=g.window||g.self||g.global||{},rt=g.global||g.self||g.window||{},be=g.document||{};var P=typeof process!="object"||String(process)!=="[object process]"||process.browser,B=typeof importScripts=="function",Ae=typeof window!="undefined"&&typeof window.orientation!="undefined",ot=typeof process!="undefined"&&process.version&&/v([0-9]*)/.exec(process.version),De=ot&&parseFloat(ot[1])||0;function U(e,t=!0,r){let o=r||new Set;if(e){if(at(e))o.add(e);else if(at(e.buffer))o.add(e.buffer);else if(!ArrayBuffer.isView(e)){if(t&&typeof e=="object")for(let n in e)U(e[n],t,o)}}return r===void 0?Array.from(o):[]}function at(e){return e?e instanceof ArrayBuffer||typeof MessagePort!="undefined"&&e instanceof MessagePort||typeof ImageBitmap!="undefined"&&e instanceof ImageBitmap||typeof OffscreenCanvas!="undefined"&&e instanceof OffscreenCanvas:!1}var z=new Map,p=class{static set onmessage(t){self.onmessage=r=>{if(!nt(r))return;let{type:o,payload:n}=r.data;t(o,n)}}static addEventListener(t){let r=z.get(t);r||(r=o=>{if(!nt(o))return;let{type:n,payload:s}=o.data;t(n,s)}),self.addEventListener("message",r)}static removeEventListener(t){let r=z.get(t);z.delete(t),self.removeEventListener("message",r)}static postMessage(t,r){if(self){let o={source:"loaders.gl",type:t,payload:r},n=U(r);self.postMessage(o,n)}}};function nt(e){let{type:t,data:r}=e;return t==="message"&&r&&typeof r.source=="string"&&r.source.startsWith("loaders.gl")}var x=Et(st());var Ft="beta",Nt=typeof W!="undefined"?W:Ft,$={};async function I(e,t=null,r={}){return t&&(e=it(e,t,r)),$[e]=$[e]||kt(e),await $[e]}function it(e,t,r){if(e.startsWith("http"))return e;let o=r.modules||{};return o[e]?o[e]:P?r.CDN?(et(r.CDN.startsWith("http")),`${r.CDN}/${t}@${Nt}/dist/libs/${e}`):B?`../src/libs/${e}`:`modules/${t}/src/libs/${e}`:`modules/${t}/dist/libs/${e}`}async function kt(e){if(e.endsWith("wasm"))return await(await fetch(e)).arrayBuffer();if(!P)try{return x&&x.requireFromFile&&await x.requireFromFile(e)}catch{return null}if(B)return importScripts(e);let r=await(await fetch(e)).text();return Pt(r,e)}function Pt(e,t){if(!P)return x.requireFromString&&x.requireFromString(e,t);if(B)return eval.call(rt,e),null;let r=document.createElement("script");r.id=t;try{r.appendChild(document.createTextNode(e))}catch{r.text=e}return document.body.appendChild(r),null}var Bt=0;function V(e){typeof self!="undefined"&&(p.onmessage=async(t,r)=>{switch(t){case"process":try{let{input:o,options:n={}}=r,s=await Rt({loader:e,arrayBuffer:o,options:n,context:{parse:vt}});p.postMessage("done",{result:s})}catch(o){let n=o instanceof Error?o.message:"";p.postMessage("error",{error:n})}break;default:}})}function vt(e,t){return new Promise((r,o)=>{let n=Bt++,s=(l,d)=>{if(d.id===n)switch(l){case"done":p.removeEventListener(s),r(d.result);break;case"error":p.removeEventListener(s),o(d.error);break;default:}};p.addEventListener(s);let i={id:n,input:e,options:t};p.postMessage("process",i)})}async function Rt({loader:e,arrayBuffer:t,options:r,context:o}){let n,s;if(e.parseSync||e.parse)n=t,s=e.parseSync||e.parse;else if(e.parseTextSync)n=new TextDecoder().decode(t),s=e.parseTextSync;else throw new Error(`Could not load data with ${e.name} loader`);return r={...r,modules:e&&e.options&&e.options.modules||{},worker:!1},await s(n,{...r},o,e)}var ct="4.0.0-alpha.5";var Ct={draco:{decoderType:typeof WebAssembly=="object"?"wasm":"js",libraryPath:"libs/",extraAttributes:{},attributeNameEntry:void 0}},lt={name:"Draco",id:"draco",module:"draco",shapes:["mesh"],version:ct,worker:!0,extensions:["drc"],mimeTypes:["application/octet-stream"],binary:!0,tests:["DRACO"],options:Ct};function q(e){let t=1/0,r=1/0,o=1/0,n=-1/0,s=-1/0,i=-1/0,l=e.POSITION?e.POSITION.value:[],d=l&&l.length;for(let y=0;y<d;y+=3){let f=l[y],A=l[y+1],D=l[y+2];t=f<t?f:t,r=A<r?A:r,o=D<o?D:o,n=f>n?f:n,s=A>s?A:s,i=D>i?D:i}return[[t,r,o],[n,s,i]]}function dt(e,t){if(!e)throw new Error(t||"loader assertion failed.")}var m=class{constructor(t,r){dt(Array.isArray(t)),Wt(t),this.fields=t,this.metadata=r||new Map}compareTo(t){if(this.metadata!==t.metadata||this.fields.length!==t.fields.length)return!1;for(let r=0;r<this.fields.length;++r)if(!this.fields[r].compareTo(t.fields[r]))return!1;return!0}select(...t){let r=Object.create(null);for(let n of t)r[n]=!0;let o=this.fields.filter(n=>r[n.name]);return new m(o,this.metadata)}selectAt(...t){let r=t.map(o=>this.fields[o]).filter(Boolean);return new m(r,this.metadata)}assign(t){let r,o=this.metadata;if(t instanceof m){let i=t;r=i.fields,o=ut(ut(new Map,this.metadata),i.metadata)}else r=t;let n=Object.create(null);for(let i of this.fields)n[i.name]=i;for(let i of r)n[i.name]=i;let s=Object.values(n);return new m(s,o)}};function Wt(e){let t={};for(let r of e)t[r.name]&&console.warn("Schema: duplicated field name",r.name,r),t[r.name]=!0}function ut(e,t){return new Map([...e||new Map,...t||new Map])}var h=class{constructor(t,r,o=!1,n=new Map){this.name=t,this.type=r,this.nullable=o,this.metadata=n}get typeId(){return this.type&&this.type.typeId}clone(){return new h(this.name,this.type,this.nullable,this.metadata)}compareTo(t){return this.name===t.name&&this.type===t.type&&this.nullable===t.nullable&&this.metadata===t.metadata}toString(){return`${this.type}${this.nullable?", nullable":""}${this.metadata?`, metadata: ${this.metadata}`:""}`}};var c;(function(a){a[a.NONE=0]="NONE",a[a.Null=1]="Null",a[a.Int=2]="Int",a[a.Float=3]="Float",a[a.Binary=4]="Binary",a[a.Utf8=5]="Utf8",a[a.Bool=6]="Bool",a[a.Decimal=7]="Decimal",a[a.Date=8]="Date",a[a.Time=9]="Time",a[a.Timestamp=10]="Timestamp",a[a.Interval=11]="Interval",a[a.List=12]="List",a[a.Struct=13]="Struct",a[a.Union=14]="Union",a[a.FixedSizeBinary=15]="FixedSizeBinary",a[a.FixedSizeList=16]="FixedSizeList",a[a.Map=17]="Map",a[a.Dictionary=-1]="Dictionary",a[a.Int8=-2]="Int8",a[a.Int16=-3]="Int16",a[a.Int32=-4]="Int32",a[a.Int64=-5]="Int64",a[a.Uint8=-6]="Uint8",a[a.Uint16=-7]="Uint16",a[a.Uint32=-8]="Uint32",a[a.Uint64=-9]="Uint64",a[a.Float16=-10]="Float16",a[a.Float32=-11]="Float32",a[a.Float64=-12]="Float64",a[a.DateDay=-13]="DateDay",a[a.DateMillisecond=-14]="DateMillisecond",a[a.TimestampSecond=-15]="TimestampSecond",a[a.TimestampMillisecond=-16]="TimestampMillisecond",a[a.TimestampMicrosecond=-17]="TimestampMicrosecond",a[a.TimestampNanosecond=-18]="TimestampNanosecond",a[a.TimeSecond=-19]="TimeSecond",a[a.TimeMillisecond=-20]="TimeMillisecond",a[a.TimeMicrosecond=-21]="TimeMicrosecond",a[a.TimeNanosecond=-22]="TimeNanosecond",a[a.DenseUnion=-23]="DenseUnion",a[a.SparseUnion=-24]="SparseUnion",a[a.IntervalDayTime=-25]="IntervalDayTime",a[a.IntervalYearMonth=-26]="IntervalYearMonth"})(c||(c={}));var u=class{static isNull(t){return t&&t.typeId===c.Null}static isInt(t){return t&&t.typeId===c.Int}static isFloat(t){return t&&t.typeId===c.Float}static isBinary(t){return t&&t.typeId===c.Binary}static isUtf8(t){return t&&t.typeId===c.Utf8}static isBool(t){return t&&t.typeId===c.Bool}static isDecimal(t){return t&&t.typeId===c.Decimal}static isDate(t){return t&&t.typeId===c.Date}static isTime(t){return t&&t.typeId===c.Time}static isTimestamp(t){return t&&t.typeId===c.Timestamp}static isInterval(t){return t&&t.typeId===c.Interval}static isList(t){return t&&t.typeId===c.List}static isStruct(t){return t&&t.typeId===c.Struct}static isUnion(t){return t&&t.typeId===c.Union}static isFixedSizeBinary(t){return t&&t.typeId===c.FixedSizeBinary}static isFixedSizeList(t){return t&&t.typeId===c.FixedSizeList}static isMap(t){return t&&t.typeId===c.Map}static isDictionary(t){return t&&t.typeId===c.Dictionary}get typeId(){return c.NONE}compareTo(t){return this===t}},G=class extends u{get typeId(){return c.Null}get[Symbol.toStringTag](){return"Null"}toString(){return"Null"}},Q=class extends u{get typeId(){return c.Bool}get[Symbol.toStringTag](){return"Bool"}toString(){return"Bool"}},b=class extends u{constructor(t,r){super();this.isSigned=t,this.bitWidth=r}get typeId(){return c.Int}get[Symbol.toStringTag](){return"Int"}toString(){return`${this.isSigned?"I":"Ui"}nt${this.bitWidth}`}},M=class extends b{constructor(){super(!0,8)}},w=class extends b{constructor(){super(!0,16)}},_=class extends b{constructor(){super(!0,32)}};var S=class extends b{constructor(){super(!1,8)}},T=class extends b{constructor(){super(!1,16)}},O=class extends b{constructor(){super(!1,32)}};var mt={HALF:16,SINGLE:32,DOUBLE:64},L=class extends u{constructor(t){super();this.precision=t}get typeId(){return c.Float}get[Symbol.toStringTag](){return"Float"}toString(){return`Float${this.precision}`}};var E=class extends L{constructor(){super(mt.SINGLE)}},F=class extends L{constructor(){super(mt.DOUBLE)}},Y=class extends u{constructor(){super()}get typeId(){return c.Binary}toString(){return"Binary"}get[Symbol.toStringTag](){return"Binary"}},j=class extends u{get typeId(){return c.Utf8}get[Symbol.toStringTag](){return"Utf8"}toString(){return"Utf8"}},Ut={DAY:0,MILLISECOND:1},H=class extends u{constructor(t){super();this.unit=t}get typeId(){return c.Date}get[Symbol.toStringTag](){return"Date"}toString(){return`Date${(this.unit+1)*32}<${Ut[this.unit]}>`}};var pt={SECOND:1,MILLISECOND:1e3,MICROSECOND:1e6,NANOSECOND:1e9},J=class extends u{constructor(t,r){super();this.unit=t,this.bitWidth=r}get typeId(){return c.Time}toString(){return`Time${this.bitWidth}<${pt[this.unit]}>`}get[Symbol.toStringTag](){return"Time"}};var X=class extends u{constructor(t,r=null){super();this.unit=t,this.timezone=r}get typeId(){return c.Timestamp}get[Symbol.toStringTag](){return"Timestamp"}toString(){return`Timestamp<${pt[this.unit]}${this.timezone?`, ${this.timezone}`:""}>`}};var zt={DAY_TIME:0,YEAR_MONTH:1},Z=class extends u{constructor(t){super();this.unit=t}get typeId(){return c.Interval}get[Symbol.toStringTag](){return"Interval"}toString(){return`Interval<${zt[this.unit]}>`}};var N=class extends u{constructor(t,r){super();this.listSize=t,this.children=[r]}get typeId(){return c.FixedSizeList}get valueType(){return this.children[0].type}get valueField(){return this.children[0]}get[Symbol.toStringTag](){return"FixedSizeList"}toString(){return`FixedSizeList[${this.listSize}]<${this.valueType}>`}},K=class extends u{constructor(t){super();this.children=t}get typeId(){return c.Struct}toString(){return`Struct<{${this.children.map(t=>`${t.name}:${t.type}`).join(", ")}}>`}get[Symbol.toStringTag](){return"Struct"}};function yt(e){switch(e.constructor){case Int8Array:return new M;case Uint8Array:return new S;case Int16Array:return new w;case Uint16Array:return new T;case Int32Array:return new _;case Uint32Array:return new O;case Float32Array:return new E;case Float64Array:return new F;default:throw new Error("array type not supported")}}function tt(e,t,r){let o=yt(t.value),n=r||ft(t);return new h(e,new N(t.size,new h("value",o)),!1,n)}function ft(e){let t=new Map;return"byteOffset"in e&&t.set("byteOffset",e.byteOffset.toString(10)),"byteStride"in e&&t.set("byteStride",e.byteStride.toString(10)),"normalized"in e&&t.set("normalized",e.normalized.toString()),t}function gt(e,t,r){let o=bt(t.metadata),n=[],s=ee(t.attributes);for(let i in e){let l=e[i],d=ht(i,l,s[i]);n.push(d)}if(r){let i=ht("indices",r);n.push(i)}return new m(n,o)}function ee(e){let t={};for(let r in e){let o=e[r];t[o.name||"undefined"]=o}return t}function ht(e,t,r){let o=r?bt(r.metadata):void 0;return tt(e,t,o)}function bt(e){let t=new Map;for(let r in e)t.set(`${r}.string`,JSON.stringify(e[r]));return t}var At={POSITION:"POSITION",NORMAL:"NORMAL",COLOR:"COLOR_0",TEX_COORD:"TEXCOORD_0"},re={1:Int8Array,2:Uint8Array,3:Int16Array,4:Uint16Array,5:Int32Array,6:Uint32Array,9:Float32Array},oe=4,v=class{constructor(t){this.draco=t,this.decoder=new this.draco.Decoder,this.metadataQuerier=new this.draco.MetadataQuerier}destroy(){this.draco.destroy(this.decoder),this.draco.destroy(this.metadataQuerier)}parseSync(t,r={}){let o=new this.draco.DecoderBuffer;o.Init(new Int8Array(t),t.byteLength),this._disableAttributeTransforms(r);let n=this.decoder.GetEncodedGeometryType(o),s=n===this.draco.TRIANGULAR_MESH?new this.draco.Mesh:new this.draco.PointCloud;try{let i;switch(n){case this.draco.TRIANGULAR_MESH:i=this.decoder.DecodeBufferToMesh(o,s);break;case this.draco.POINT_CLOUD:i=this.decoder.DecodeBufferToPointCloud(o,s);break;default:throw new Error("DRACO: Unknown geometry type.")}if(!i.ok()||!s.ptr){let D=`DRACO decompression failed: ${i.error_msg()}`;throw new Error(D)}let l=this._getDracoLoaderData(s,n,r),d=this._getMeshData(s,l,r),y=q(d.attributes),f=gt(d.attributes,l,d.indices);return{loader:"draco",loaderData:l,header:{vertexCount:s.num_points(),boundingBox:y},...d,schema:f}}finally{this.draco.destroy(o),s&&this.draco.destroy(s)}}_getDracoLoaderData(t,r,o){let n=this._getTopLevelMetadata(t),s=this._getDracoAttributes(t,o);return{geometry_type:r,num_attributes:t.num_attributes(),num_points:t.num_points(),num_faces:t instanceof this.draco.Mesh?t.num_faces():0,metadata:n,attributes:s}}_getDracoAttributes(t,r){let o={};for(let n=0;n<t.num_attributes();n++){let s=this.decoder.GetAttribute(t,n),i=this._getAttributeMetadata(t,n);o[s.unique_id()]={unique_id:s.unique_id(),attribute_type:s.attribute_type(),data_type:s.data_type(),num_components:s.num_components(),byte_offset:s.byte_offset(),byte_stride:s.byte_stride(),normalized:s.normalized(),attribute_index:n,metadata:i};let l=this._getQuantizationTransform(s,r);l&&(o[s.unique_id()].quantization_transform=l);let d=this._getOctahedronTransform(s,r);d&&(o[s.unique_id()].octahedron_transform=d)}return o}_getMeshData(t,r,o){let n=this._getMeshAttributes(r,t,o);if(!n.POSITION)throw new Error("DRACO: No position attribute found.");if(t instanceof this.draco.Mesh)switch(o.topology){case"triangle-strip":return{topology:"triangle-strip",mode:4,attributes:n,indices:{value:this._getTriangleStripIndices(t),size:1}};case"triangle-list":default:return{topology:"triangle-list",mode:5,attributes:n,indices:{value:this._getTriangleListIndices(t),size:1}}}return{topology:"point-list",mode:0,attributes:n}}_getMeshAttributes(t,r,o){let n={};for(let s of Object.values(t.attributes)){let i=this._deduceAttributeName(s,o);s.name=i;let{value:l,size:d}=this._getAttributeValues(r,s);n[i]={value:l,size:d,byteOffset:s.byte_offset,byteStride:s.byte_stride,normalized:s.normalized}}return n}_getTriangleListIndices(t){let o=t.num_faces()*3,n=o*oe,s=this.draco._malloc(n);try{return this.decoder.GetTrianglesUInt32Array(t,n,s),new Uint32Array(this.draco.HEAPF32.buffer,s,o).slice()}finally{this.draco._free(s)}}_getTriangleStripIndices(t){let r=new this.draco.DracoInt32Array;try{return this.decoder.GetTriangleStripsFromMesh(t,r),se(r)}finally{this.draco.destroy(r)}}_getAttributeValues(t,r){let o=re[r.data_type],n=r.num_components,i=t.num_points()*n,l=i*o.BYTES_PER_ELEMENT,d=ae(this.draco,o),y,f=this.draco._malloc(l);try{let A=this.decoder.GetAttribute(t,r.attribute_index);this.decoder.GetAttributeDataArrayForAllPoints(t,A,d,l,f),y=new o(this.draco.HEAPF32.buffer,f,i).slice()}finally{this.draco._free(f)}return{value:y,size:n}}_deduceAttributeName(t,r){let o=t.unique_id;for(let[i,l]of Object.entries(r.extraAttributes||{}))if(l===o)return i;let n=t.attribute_type;for(let i in At)if(this.draco[i]===n)return At[i];let s=r.attributeNameEntry||"name";return t.metadata[s]?t.metadata[s].string:`CUSTOM_ATTRIBUTE_${o}`}_getTopLevelMetadata(t){let r=this.decoder.GetMetadata(t);return this._getDracoMetadata(r)}_getAttributeMetadata(t,r){let o=this.decoder.GetAttributeMetadata(t,r);return this._getDracoMetadata(o)}_getDracoMetadata(t){if(!t||!t.ptr)return{};let r={},o=this.metadataQuerier.NumEntries(t);for(let n=0;n<o;n++){let s=this.metadataQuerier.GetEntryName(t,n);r[s]=this._getDracoMetadataField(t,s)}return r}_getDracoMetadataField(t,r){let o=new this.draco.DracoInt32Array;try{this.metadataQuerier.GetIntEntryArray(t,r,o);let n=ne(o);return{int:this.metadataQuerier.GetIntEntry(t,r),string:this.metadataQuerier.GetStringEntry(t,r),double:this.metadataQuerier.GetDoubleEntry(t,r),intArray:n}}finally{this.draco.destroy(o)}}_disableAttributeTransforms(t){let{quantizedAttributes:r=[],octahedronAttributes:o=[]}=t,n=[...r,...o];for(let s of n)this.decoder.SkipAttributeTransform(this.draco[s])}_getQuantizationTransform(t,r){let{quantizedAttributes:o=[]}=r,n=t.attribute_type();if(o.map(i=>this.decoder[i]).includes(n)){let i=new this.draco.AttributeQuantizationTransform;try{if(i.InitFromAttribute(t))return{quantization_bits:i.quantization_bits(),range:i.range(),min_values:new Float32Array([1,2,3]).map(l=>i.min_value(l))}}finally{this.draco.destroy(i)}}return null}_getOctahedronTransform(t,r){let{octahedronAttributes:o=[]}=r,n=t.attribute_type();if(o.map(i=>this.decoder[i]).includes(n)){let i=new this.draco.AttributeQuantizationTransform;try{if(i.InitFromAttribute(t))return{quantization_bits:i.quantization_bits()}}finally{this.draco.destroy(i)}}return null}};function ae(e,t){switch(t){case Float32Array:return e.DT_FLOAT32;case Int8Array:return e.DT_INT8;case Int16Array:return e.DT_INT16;case Int32Array:return e.DT_INT32;case Uint8Array:return e.DT_UINT8;case Uint16Array:return e.DT_UINT16;case Uint32Array:return e.DT_UINT32;default:return e.DT_INVALID}}function ne(e){let t=e.size(),r=new Int32Array(t);for(let o=0;o<t;o++)r[o]=e.GetValue(o);return r}function se(e){let t=e.size(),r=new Int32Array(t);for(let o=0;o<t;o++)r[o]=e.GetValue(o);return r}var R="1.4.1",ie=`https://www.gstatic.com/draco/versioned/decoders/${R}/draco_decoder.js`,ce=`https://www.gstatic.com/draco/versioned/decoders/${R}/draco_wasm_wrapper.js`,le=`https://www.gstatic.com/draco/versioned/decoders/${R}/draco_decoder.wasm`,Dr=`https://raw.githubusercontent.com/google/draco/${R}/javascript/draco_encoder.js`,k;async function Dt(e){let t=e.modules||{};return t.draco3d?k=k||t.draco3d.createDecoderModule({}).then(r=>({draco:r})):k=k||de(e),await k}async function de(e){let t,r;switch(e.draco&&e.draco.decoderType){case"js":t=await I(ie,"draco",e);break;case"wasm":default:[t,r]=await Promise.all([await I(ce,"draco",e),await I(le,"draco",e)])}return t=t||globalThis.DracoDecoderModule,await ue(t,r)}function ue(e,t){let r={};return t&&(r.wasmBinary=t),new Promise(o=>{e({...r,onModuleLoaded:n=>o({draco:n})})})}var xt={...lt,parse:me};async function me(e,t){let{draco:r}=await Dt(t),o=new v(r);try{return o.parseSync(e,t?.draco)}finally{o.destroy()}}V(xt);})();
|
|
2
|
+
//# sourceMappingURL=draco-worker.js.map
|