@series-inc/stowkit-reader 0.1.41
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.txt +6 -0
- package/README.md +330 -0
- package/dist/PerfLogger.d.ts +38 -0
- package/dist/PerfLogger.d.ts.map +1 -0
- package/dist/index.d.ts +141 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/stowkit-reader.esm.js +539 -0
- package/dist/stowkit-reader.esm.js.map +1 -0
- package/dist/stowkit-reader.js +551 -0
- package/dist/stowkit-reader.js.map +1 -0
- package/dist/stowkit_reader.wasm +0 -0
- package/package.json +28 -0
|
@@ -0,0 +1,539 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Performance logging utility
|
|
3
|
+
* Centralized configuration for all performance logs
|
|
4
|
+
*/
|
|
5
|
+
class PerfLogger {
|
|
6
|
+
/**
|
|
7
|
+
* Enable performance logging across all StowKit modules
|
|
8
|
+
*/
|
|
9
|
+
static enable() {
|
|
10
|
+
this.enabled = true;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Disable performance logging across all StowKit modules
|
|
14
|
+
*/
|
|
15
|
+
static disable() {
|
|
16
|
+
this.enabled = false;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Check if performance logging is enabled
|
|
20
|
+
*/
|
|
21
|
+
static isEnabled() {
|
|
22
|
+
return this.enabled;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Set a custom logging function
|
|
26
|
+
* @param logger - Function to call for each log message (receives formatted string)
|
|
27
|
+
*/
|
|
28
|
+
static setCustomLogger(logger) {
|
|
29
|
+
this.customLogger = logger;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Log a performance message (only if enabled)
|
|
33
|
+
*/
|
|
34
|
+
static log(message) {
|
|
35
|
+
if (this.enabled) {
|
|
36
|
+
if (this.customLogger) {
|
|
37
|
+
this.customLogger(message);
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
console.log(message);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Log a performance error (always logged regardless of setting)
|
|
46
|
+
*/
|
|
47
|
+
static error(message) {
|
|
48
|
+
console.error(message);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Log a performance warning (always logged regardless of setting)
|
|
52
|
+
*/
|
|
53
|
+
static warn(message) {
|
|
54
|
+
console.warn(message);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
PerfLogger.enabled = false;
|
|
58
|
+
PerfLogger.customLogger = null;
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* StowKit Reader - WebAssembly-based reader for .stow asset packs
|
|
62
|
+
*/
|
|
63
|
+
var AssetType;
|
|
64
|
+
(function (AssetType) {
|
|
65
|
+
AssetType[AssetType["UNKNOWN"] = 0] = "UNKNOWN";
|
|
66
|
+
AssetType[AssetType["STATIC_MESH"] = 1] = "STATIC_MESH";
|
|
67
|
+
AssetType[AssetType["TEXTURE_2D"] = 2] = "TEXTURE_2D";
|
|
68
|
+
AssetType[AssetType["AUDIO"] = 3] = "AUDIO";
|
|
69
|
+
AssetType[AssetType["MATERIAL_SCHEMA"] = 4] = "MATERIAL_SCHEMA";
|
|
70
|
+
AssetType[AssetType["SKINNED_MESH"] = 5] = "SKINNED_MESH";
|
|
71
|
+
AssetType[AssetType["ANIMATION_CLIP"] = 6] = "ANIMATION_CLIP";
|
|
72
|
+
})(AssetType || (AssetType = {}));
|
|
73
|
+
class StowKitReader {
|
|
74
|
+
constructor(wasmUrl = '/stowkit/stowkit_reader.wasm') {
|
|
75
|
+
this.wasm = null;
|
|
76
|
+
this.memory = null;
|
|
77
|
+
this.isReady = false;
|
|
78
|
+
this.currentFile = null;
|
|
79
|
+
this.assetNameMap = new Map();
|
|
80
|
+
this.wasmUrl = wasmUrl;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Initialize the WASM module
|
|
84
|
+
*/
|
|
85
|
+
async init() {
|
|
86
|
+
const wasmFile = `${this.wasmUrl}?v=${Date.now()}`;
|
|
87
|
+
const response = await fetch(wasmFile);
|
|
88
|
+
const bytes = await response.arrayBuffer();
|
|
89
|
+
const imports = {
|
|
90
|
+
env: {
|
|
91
|
+
js_console_log: (ptr, len) => {
|
|
92
|
+
const msg = this._readString(ptr, len);
|
|
93
|
+
console.log('[StowKit]', msg);
|
|
94
|
+
},
|
|
95
|
+
js_console_error: (ptr, len) => {
|
|
96
|
+
const msg = this._readString(ptr, len);
|
|
97
|
+
console.error('[StowKit Error]', msg);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
const { instance } = await WebAssembly.instantiate(bytes, imports);
|
|
102
|
+
this.wasm = instance.exports;
|
|
103
|
+
this.memory = this.wasm.memory;
|
|
104
|
+
this.isReady = true;
|
|
105
|
+
// Validate required exports
|
|
106
|
+
const required = ['allocateMemory', 'freeMemory', 'openStowFromMemory', 'getAssetCount', 'parseSkinnedMeshGeometry'];
|
|
107
|
+
const missing = required.filter(fn => typeof this.wasm[fn] !== 'function');
|
|
108
|
+
if (missing.length > 0) {
|
|
109
|
+
throw new Error(`Missing WASM exports: ${missing.join(', ')}`);
|
|
110
|
+
}
|
|
111
|
+
return this;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Open a .stow file from an ArrayBuffer or File
|
|
115
|
+
*/
|
|
116
|
+
async open(fileOrBuffer) {
|
|
117
|
+
if (!this.isReady)
|
|
118
|
+
throw new Error('StowKit not initialized. Call init() first.');
|
|
119
|
+
if (this.currentFile) {
|
|
120
|
+
this.close();
|
|
121
|
+
}
|
|
122
|
+
let buffer;
|
|
123
|
+
if (fileOrBuffer instanceof ArrayBuffer) {
|
|
124
|
+
buffer = fileOrBuffer;
|
|
125
|
+
}
|
|
126
|
+
else if (fileOrBuffer instanceof File) {
|
|
127
|
+
buffer = await fileOrBuffer.arrayBuffer();
|
|
128
|
+
this.currentFile = fileOrBuffer.name;
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
throw new Error('Expected ArrayBuffer or File');
|
|
132
|
+
}
|
|
133
|
+
const bytes = new Uint8Array(buffer);
|
|
134
|
+
const ptr = this._allocate(bytes.length);
|
|
135
|
+
try {
|
|
136
|
+
// Copy data to WASM memory
|
|
137
|
+
new Uint8Array(this.memory.buffer, ptr, bytes.length).set(bytes);
|
|
138
|
+
// Open the reader
|
|
139
|
+
const result = this.wasm.openStowFromMemory(ptr, bytes.length);
|
|
140
|
+
if (result !== 0) {
|
|
141
|
+
throw new Error('Failed to open .stow file - invalid format or corrupted');
|
|
142
|
+
}
|
|
143
|
+
return true;
|
|
144
|
+
}
|
|
145
|
+
finally {
|
|
146
|
+
this._free(ptr, bytes.length);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Get the total number of assets
|
|
151
|
+
*/
|
|
152
|
+
getAssetCount() {
|
|
153
|
+
if (!this.isReady)
|
|
154
|
+
return 0;
|
|
155
|
+
return this.wasm.getAssetCount();
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Get info about all assets
|
|
159
|
+
*/
|
|
160
|
+
listAssets() {
|
|
161
|
+
const count = this.getAssetCount();
|
|
162
|
+
const assets = [];
|
|
163
|
+
for (let i = 0; i < count; i++) {
|
|
164
|
+
const info = this.getAssetInfo(i);
|
|
165
|
+
if (!info)
|
|
166
|
+
continue;
|
|
167
|
+
// Get name from WASM parse functions (they already return stringId)
|
|
168
|
+
let name;
|
|
169
|
+
if (info.metadata_size > 0) {
|
|
170
|
+
let parsed = null;
|
|
171
|
+
switch (info.type) {
|
|
172
|
+
case 1: // Static Mesh
|
|
173
|
+
parsed = this.parseMeshMetadata(i);
|
|
174
|
+
break;
|
|
175
|
+
case 2: // Texture
|
|
176
|
+
parsed = this.parseTextureMetadata(i);
|
|
177
|
+
break;
|
|
178
|
+
case 3: // Audio
|
|
179
|
+
parsed = this.parseAudioMetadata(i);
|
|
180
|
+
break;
|
|
181
|
+
case 4: // Material Schema
|
|
182
|
+
parsed = this.parseMaterialSchemaMetadata(i);
|
|
183
|
+
break;
|
|
184
|
+
case 5: // Skinned Mesh
|
|
185
|
+
parsed = this.parseSkinnedMeshMetadata(i);
|
|
186
|
+
break;
|
|
187
|
+
case 6: // Animation
|
|
188
|
+
parsed = this.parseAnimationMetadata(i);
|
|
189
|
+
break;
|
|
190
|
+
}
|
|
191
|
+
if (parsed?.stringId) {
|
|
192
|
+
const parts = parsed.stringId.split('/');
|
|
193
|
+
name = parts[parts.length - 1];
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
// Use cached name if available
|
|
197
|
+
if (!name && this.assetNameMap.has(i)) {
|
|
198
|
+
name = this.assetNameMap.get(i);
|
|
199
|
+
}
|
|
200
|
+
const asset = {
|
|
201
|
+
...info,
|
|
202
|
+
index: i,
|
|
203
|
+
name,
|
|
204
|
+
id: this._getAssetId(info),
|
|
205
|
+
hasMetadata: info.metadata_size > 0,
|
|
206
|
+
dataSize: info.data_size,
|
|
207
|
+
metadataSize: info.metadata_size
|
|
208
|
+
};
|
|
209
|
+
assets.push(asset);
|
|
210
|
+
}
|
|
211
|
+
return assets;
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Get detailed info about a specific asset
|
|
215
|
+
*/
|
|
216
|
+
getAssetInfo(index) {
|
|
217
|
+
if (!this.isReady || index < 0 || index >= this.getAssetCount()) {
|
|
218
|
+
return null;
|
|
219
|
+
}
|
|
220
|
+
const ptr = this._allocate(40); // Size of AssetDirectoryEntry struct (8+4+8+8+8+4 = 40 bytes)
|
|
221
|
+
try {
|
|
222
|
+
const result = this.wasm.getAssetInfo(index, ptr, 40); // Pass the size as third argument!
|
|
223
|
+
if (result < 0) {
|
|
224
|
+
console.error(`Failed to get info for asset ${index}`);
|
|
225
|
+
return null;
|
|
226
|
+
}
|
|
227
|
+
const view = new DataView(this.memory.buffer, ptr, 40);
|
|
228
|
+
// Note: assetUID at offset 0 (8 bytes) - skipping as we don't need it here
|
|
229
|
+
// assetType at offset 8 (4 bytes)
|
|
230
|
+
// dataOffset at offset 12 (8 bytes)
|
|
231
|
+
// dataSize at offset 20 (8 bytes)
|
|
232
|
+
// metadataOffset at offset 28 (8 bytes)
|
|
233
|
+
// metadataSize at offset 36 (4 bytes)
|
|
234
|
+
return {
|
|
235
|
+
index,
|
|
236
|
+
type: view.getUint32(8, true),
|
|
237
|
+
// Convert BigInt to number - safe for reasonable file sizes
|
|
238
|
+
data_offset: Number(view.getBigUint64(12, true)),
|
|
239
|
+
data_size: Number(view.getBigUint64(20, true)),
|
|
240
|
+
metadata_offset: Number(view.getBigUint64(28, true)),
|
|
241
|
+
metadata_size: view.getUint32(36, true),
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
finally {
|
|
245
|
+
this._free(ptr, 40);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Read the binary data of an asset
|
|
250
|
+
*/
|
|
251
|
+
readAssetData(index) {
|
|
252
|
+
if (!this.isReady)
|
|
253
|
+
return null;
|
|
254
|
+
const info = this.getAssetInfo(index);
|
|
255
|
+
if (!info || !info.data_size)
|
|
256
|
+
return null;
|
|
257
|
+
const ptr = this._allocate(info.data_size);
|
|
258
|
+
try {
|
|
259
|
+
const result = this.wasm.readAssetData(index, ptr, info.data_size);
|
|
260
|
+
if (result < 0) {
|
|
261
|
+
console.error(`Failed to read data for asset ${index}`);
|
|
262
|
+
return null;
|
|
263
|
+
}
|
|
264
|
+
// Return a copy of the data
|
|
265
|
+
const data = new Uint8Array(this.memory.buffer, ptr, result);
|
|
266
|
+
return new Uint8Array(data);
|
|
267
|
+
}
|
|
268
|
+
finally {
|
|
269
|
+
this._free(ptr, info.data_size);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Read metadata of an asset (if available)
|
|
274
|
+
*/
|
|
275
|
+
readAssetMetadata(index) {
|
|
276
|
+
if (!this.isReady)
|
|
277
|
+
return null;
|
|
278
|
+
const info = this.getAssetInfo(index);
|
|
279
|
+
if (!info || !info.metadata_size) {
|
|
280
|
+
return null;
|
|
281
|
+
}
|
|
282
|
+
const ptr = this._allocate(info.metadata_size);
|
|
283
|
+
try {
|
|
284
|
+
const result = this.wasm.readAssetMetadata(index, ptr, info.metadata_size);
|
|
285
|
+
if (result < 0) {
|
|
286
|
+
console.error(`Failed to read metadata for asset ${index}`);
|
|
287
|
+
return null;
|
|
288
|
+
}
|
|
289
|
+
// Return a copy of the metadata
|
|
290
|
+
const data = new Uint8Array(this.memory.buffer, ptr, result);
|
|
291
|
+
return new Uint8Array(data);
|
|
292
|
+
}
|
|
293
|
+
finally {
|
|
294
|
+
this._free(ptr, info.metadata_size);
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Parse texture metadata using WASM (includes tags)
|
|
299
|
+
*/
|
|
300
|
+
parseTextureMetadata(index) {
|
|
301
|
+
if (!this.isReady || !this.wasm.parseTextureMetadata)
|
|
302
|
+
return null;
|
|
303
|
+
const ptr = this._allocate(512);
|
|
304
|
+
try {
|
|
305
|
+
const result = this.wasm.parseTextureMetadata(index, ptr, 512);
|
|
306
|
+
if (result < 0)
|
|
307
|
+
return null;
|
|
308
|
+
const jsonStr = this._readString(ptr, result);
|
|
309
|
+
return JSON.parse(jsonStr);
|
|
310
|
+
}
|
|
311
|
+
finally {
|
|
312
|
+
this._free(ptr, 512);
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* Parse audio metadata using WASM (includes tags)
|
|
317
|
+
*/
|
|
318
|
+
parseAudioMetadata(index) {
|
|
319
|
+
if (!this.isReady || !this.wasm.parseAudioMetadata)
|
|
320
|
+
return null;
|
|
321
|
+
const ptr = this._allocate(512);
|
|
322
|
+
try {
|
|
323
|
+
const result = this.wasm.parseAudioMetadata(index, ptr, 512);
|
|
324
|
+
if (result < 0)
|
|
325
|
+
return null;
|
|
326
|
+
const jsonStr = this._readString(ptr, result);
|
|
327
|
+
return JSON.parse(jsonStr);
|
|
328
|
+
}
|
|
329
|
+
finally {
|
|
330
|
+
this._free(ptr, 512);
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
/**
|
|
334
|
+
* Parse static mesh metadata using WASM (includes tags)
|
|
335
|
+
*/
|
|
336
|
+
parseMeshMetadata(index) {
|
|
337
|
+
if (!this.isReady || !this.wasm.parseMeshMetadata)
|
|
338
|
+
return null;
|
|
339
|
+
const ptr = this._allocate(512);
|
|
340
|
+
try {
|
|
341
|
+
const result = this.wasm.parseMeshMetadata(index, ptr, 512);
|
|
342
|
+
if (result < 0)
|
|
343
|
+
return null;
|
|
344
|
+
const jsonStr = this._readString(ptr, result);
|
|
345
|
+
return JSON.parse(jsonStr);
|
|
346
|
+
}
|
|
347
|
+
finally {
|
|
348
|
+
this._free(ptr, 512);
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
/**
|
|
352
|
+
* Parse animation clip metadata using WASM
|
|
353
|
+
*/
|
|
354
|
+
parseAnimationMetadata(index) {
|
|
355
|
+
if (!this.isReady || !this.wasm.parseAnimationClipMetadata)
|
|
356
|
+
return null;
|
|
357
|
+
const ptr = this._allocate(16384);
|
|
358
|
+
try {
|
|
359
|
+
const result = this.wasm.parseAnimationClipMetadata(index, ptr, 16384);
|
|
360
|
+
if (result < 0)
|
|
361
|
+
return null;
|
|
362
|
+
const jsonStr = this._readString(ptr, result);
|
|
363
|
+
return JSON.parse(jsonStr);
|
|
364
|
+
}
|
|
365
|
+
finally {
|
|
366
|
+
this._free(ptr, 16384);
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
/**
|
|
370
|
+
* Parse skinned mesh metadata using WASM (partial - returns bone info)
|
|
371
|
+
*/
|
|
372
|
+
parseSkinnedMeshMetadata(index) {
|
|
373
|
+
if (!this.isReady || !this.wasm.parseSkinnedMeshMetadata)
|
|
374
|
+
return null;
|
|
375
|
+
const ptr = this._allocate(4096);
|
|
376
|
+
try {
|
|
377
|
+
const result = this.wasm.parseSkinnedMeshMetadata(index, ptr, 4096);
|
|
378
|
+
if (result < 0)
|
|
379
|
+
return null;
|
|
380
|
+
const jsonStr = this._readString(ptr, result);
|
|
381
|
+
return JSON.parse(jsonStr);
|
|
382
|
+
}
|
|
383
|
+
finally {
|
|
384
|
+
this._free(ptr, 4096);
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
/**
|
|
388
|
+
* Parse material schema metadata using WASM
|
|
389
|
+
*/
|
|
390
|
+
parseMaterialSchemaMetadata(index) {
|
|
391
|
+
if (!this.isReady || !this.wasm.parseMaterialSchemaMetadata)
|
|
392
|
+
return null;
|
|
393
|
+
const ptr = this._allocate(8192);
|
|
394
|
+
try {
|
|
395
|
+
const result = this.wasm.parseMaterialSchemaMetadata(index, ptr, 8192);
|
|
396
|
+
if (result < 0)
|
|
397
|
+
return null;
|
|
398
|
+
const jsonStr = this._readString(ptr, result);
|
|
399
|
+
return JSON.parse(jsonStr);
|
|
400
|
+
}
|
|
401
|
+
finally {
|
|
402
|
+
this._free(ptr, 8192);
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
/**
|
|
406
|
+
* Find an asset by its canonical path (string ID)
|
|
407
|
+
* Returns the asset index or -1 if not found
|
|
408
|
+
*/
|
|
409
|
+
findAssetByPath(path) {
|
|
410
|
+
if (!this.isReady || !this.wasm.findAssetByPath) {
|
|
411
|
+
console.error('findAssetByPath not available');
|
|
412
|
+
return -1;
|
|
413
|
+
}
|
|
414
|
+
// Convert string to bytes
|
|
415
|
+
const encoder = new TextEncoder();
|
|
416
|
+
const pathBytes = encoder.encode(path);
|
|
417
|
+
const ptr = this._allocate(pathBytes.length);
|
|
418
|
+
try {
|
|
419
|
+
// Copy path to WASM memory
|
|
420
|
+
new Uint8Array(this.memory.buffer, ptr, pathBytes.length).set(pathBytes);
|
|
421
|
+
// Call WASM function
|
|
422
|
+
return this.wasm.findAssetByPath(ptr, pathBytes.length);
|
|
423
|
+
}
|
|
424
|
+
finally {
|
|
425
|
+
this._free(ptr, pathBytes.length);
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
/**
|
|
429
|
+
* Parse skinned mesh geometry using WASM (10-50x faster than JavaScript!)
|
|
430
|
+
* Returns combined vertex/index buffers ready for Three.js
|
|
431
|
+
*/
|
|
432
|
+
parseSkinnedMeshGeometryFast(metadataBlob, dataBlob) {
|
|
433
|
+
if (!this.isReady || !this.wasm.parseSkinnedMeshGeometry)
|
|
434
|
+
return null;
|
|
435
|
+
// Allocate input buffers
|
|
436
|
+
const metaPtr = this._allocate(metadataBlob.length);
|
|
437
|
+
const dataPtr = this._allocate(dataBlob.length);
|
|
438
|
+
// Estimate output size
|
|
439
|
+
const maxOutputSize = 8 + (100000 * (12 + 12 + 8 + 16 + 16)) + (300000 * 4);
|
|
440
|
+
const outPtr = this._allocate(maxOutputSize);
|
|
441
|
+
try {
|
|
442
|
+
// Copy input data
|
|
443
|
+
new Uint8Array(this.memory.buffer, metaPtr, metadataBlob.length).set(metadataBlob);
|
|
444
|
+
new Uint8Array(this.memory.buffer, dataPtr, dataBlob.length).set(dataBlob);
|
|
445
|
+
// Call WASM function
|
|
446
|
+
const result = this.wasm.parseSkinnedMeshGeometry(metaPtr, metadataBlob.length, dataPtr, dataBlob.length, outPtr, maxOutputSize);
|
|
447
|
+
if (result < 0) {
|
|
448
|
+
console.error('Failed to parse skinned mesh geometry');
|
|
449
|
+
return null;
|
|
450
|
+
}
|
|
451
|
+
// Read header
|
|
452
|
+
const view = new DataView(this.memory.buffer, outPtr, result);
|
|
453
|
+
const vertexCount = view.getUint32(0, true);
|
|
454
|
+
const indexCount = view.getUint32(4, true);
|
|
455
|
+
let offset = 8;
|
|
456
|
+
// Read positions
|
|
457
|
+
const positions = new Float32Array(this.memory.buffer, outPtr + offset, vertexCount * 3);
|
|
458
|
+
offset += vertexCount * 12;
|
|
459
|
+
// Read normals
|
|
460
|
+
const normals = new Float32Array(this.memory.buffer, outPtr + offset, vertexCount * 3);
|
|
461
|
+
offset += vertexCount * 12;
|
|
462
|
+
// Read uvs
|
|
463
|
+
const uvs = new Float32Array(this.memory.buffer, outPtr + offset, vertexCount * 2);
|
|
464
|
+
offset += vertexCount * 8;
|
|
465
|
+
// Read skinIndices
|
|
466
|
+
const skinIndices = new Uint32Array(this.memory.buffer, outPtr + offset, vertexCount * 4);
|
|
467
|
+
offset += vertexCount * 16;
|
|
468
|
+
// Read skinWeights
|
|
469
|
+
const skinWeights = new Float32Array(this.memory.buffer, outPtr + offset, vertexCount * 4);
|
|
470
|
+
offset += vertexCount * 16;
|
|
471
|
+
// Read indices
|
|
472
|
+
const indices = new Uint32Array(this.memory.buffer, outPtr + offset, indexCount);
|
|
473
|
+
// Copy to new arrays (WASM memory will be freed)
|
|
474
|
+
return {
|
|
475
|
+
vertexCount,
|
|
476
|
+
indexCount,
|
|
477
|
+
positions: new Float32Array(positions),
|
|
478
|
+
normals: new Float32Array(normals),
|
|
479
|
+
uvs: new Float32Array(uvs),
|
|
480
|
+
skinIndices: new Uint32Array(skinIndices),
|
|
481
|
+
skinWeights: new Float32Array(skinWeights),
|
|
482
|
+
indices: new Uint32Array(indices)
|
|
483
|
+
};
|
|
484
|
+
}
|
|
485
|
+
finally {
|
|
486
|
+
this._free(metaPtr, metadataBlob.length);
|
|
487
|
+
this._free(dataPtr, dataBlob.length);
|
|
488
|
+
this._free(outPtr, maxOutputSize);
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
/**
|
|
492
|
+
* Close the current file and free resources
|
|
493
|
+
*/
|
|
494
|
+
close() {
|
|
495
|
+
if (this.isReady && this.wasm.closeStow) {
|
|
496
|
+
this.wasm.closeStow();
|
|
497
|
+
}
|
|
498
|
+
this.currentFile = null;
|
|
499
|
+
this.assetNameMap.clear();
|
|
500
|
+
}
|
|
501
|
+
/**
|
|
502
|
+
* Set a custom name for an asset (for UI display)
|
|
503
|
+
*/
|
|
504
|
+
setAssetName(index, name) {
|
|
505
|
+
this.assetNameMap.set(index, name);
|
|
506
|
+
}
|
|
507
|
+
// Private helper methods
|
|
508
|
+
_allocate(size) {
|
|
509
|
+
const ptr = this.wasm.allocateMemory(size);
|
|
510
|
+
if (!ptr)
|
|
511
|
+
throw new Error(`Failed to allocate ${size} bytes`);
|
|
512
|
+
return ptr;
|
|
513
|
+
}
|
|
514
|
+
_free(ptr, size) {
|
|
515
|
+
this.wasm.freeMemory(ptr, size);
|
|
516
|
+
}
|
|
517
|
+
_readString(ptr, len) {
|
|
518
|
+
const bytes = new Uint8Array(this.memory.buffer, ptr, len);
|
|
519
|
+
return new TextDecoder().decode(bytes);
|
|
520
|
+
}
|
|
521
|
+
_getAssetId(info) {
|
|
522
|
+
// Create a unique ID based on offsets
|
|
523
|
+
return BigInt(info.data_offset);
|
|
524
|
+
}
|
|
525
|
+
/**
|
|
526
|
+
* Format bytes for display
|
|
527
|
+
*/
|
|
528
|
+
static formatBytes(bytes) {
|
|
529
|
+
if (bytes === 0)
|
|
530
|
+
return '0 B';
|
|
531
|
+
const k = 1024;
|
|
532
|
+
const sizes = ['B', 'KB', 'MB', 'GB'];
|
|
533
|
+
const i = Math.floor(Math.log(bytes) / Math.log(k));
|
|
534
|
+
return `${parseFloat((bytes / Math.pow(k, i)).toFixed(2))} ${sizes[i]}`;
|
|
535
|
+
}
|
|
536
|
+
}
|
|
537
|
+
|
|
538
|
+
export { AssetType, PerfLogger, StowKitReader, StowKitReader as default };
|
|
539
|
+
//# sourceMappingURL=stowkit-reader.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stowkit-reader.esm.js","sources":["../src/PerfLogger.ts","../src/index.ts"],"sourcesContent":[null,null],"names":[],"mappings":"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"}
|