s3m-three 0.3.12 → 0.3.14

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 (53) hide show
  1. package/dist/browser/assets/s3mWorker-BjPOUgjg.js +1 -0
  2. package/dist/browser/s3m-three.iife.ext-three.js +21 -21
  3. package/dist/browser/s3m-three.iife.js +21 -21
  4. package/dist/core/TextureDecode.d.ts +9 -0
  5. package/dist/core/TextureDecode.d.ts.map +1 -1
  6. package/dist/core/TextureDecode.js +66 -0
  7. package/dist/core/TextureDecode.js.map +1 -1
  8. package/dist/index.d.ts +2 -2
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +2 -2
  11. package/dist/index.js.map +1 -1
  12. package/dist/render/DatasetManager.d.ts +3 -1
  13. package/dist/render/DatasetManager.d.ts.map +1 -1
  14. package/dist/render/DatasetManager.js +2 -1
  15. package/dist/render/DatasetManager.js.map +1 -1
  16. package/dist/render/OrthoProjection.d.ts +22 -0
  17. package/dist/render/OrthoProjection.d.ts.map +1 -1
  18. package/dist/render/OrthoProjection.js +60 -0
  19. package/dist/render/OrthoProjection.js.map +1 -1
  20. package/dist/render/S3MViewer.d.ts +70 -0
  21. package/dist/render/S3MViewer.d.ts.map +1 -1
  22. package/dist/render/S3MViewer.js +100 -5
  23. package/dist/render/S3MViewer.js.map +1 -1
  24. package/dist/render/TextureFactory.d.ts +3 -2
  25. package/dist/render/TextureFactory.d.ts.map +1 -1
  26. package/dist/render/TextureFactory.js +26 -6
  27. package/dist/render/TextureFactory.js.map +1 -1
  28. package/dist/tileset/S3MTileset.d.ts +26 -1
  29. package/dist/tileset/S3MTileset.d.ts.map +1 -1
  30. package/dist/tileset/S3MTileset.js +29 -2
  31. package/dist/tileset/S3MTileset.js.map +1 -1
  32. package/dist/vendor/crunch_decoder.module.js +451 -450
  33. package/dist/vendor/draco_decoder.module.js +3032 -3031
  34. package/dist/worker/S3MWorkerClient.d.ts +6 -3
  35. package/dist/worker/S3MWorkerClient.d.ts.map +1 -1
  36. package/dist/worker/S3MWorkerClient.js +8 -5
  37. package/dist/worker/S3MWorkerClient.js.map +1 -1
  38. package/dist/worker/s3mWorker.js +3639 -54
  39. package/dist/worker/s3mWorker.js.map +1 -1
  40. package/docs/API.md +61 -0
  41. package/package.json +2 -2
  42. package/src/core/TextureDecode.ts +87 -0
  43. package/src/index.ts +2 -1
  44. package/src/render/DatasetManager.ts +5 -1
  45. package/src/render/OrthoProjection.ts +58 -0
  46. package/src/render/S3MViewer.ts +134 -7
  47. package/src/render/TextureFactory.ts +35 -8
  48. package/src/tileset/S3MTileset.ts +41 -2
  49. package/src/vendor/crunch_decoder.module.js +451 -450
  50. package/src/vendor/draco_decoder.module.js +3032 -3031
  51. package/src/worker/S3MWorkerClient.ts +9 -5
  52. package/src/worker/s3mWorker.ts +2 -2
  53. package/dist/browser/assets/s3mWorker-D7AV6O30.js +0 -1
@@ -97,13 +97,16 @@ export class S3MWorkerClient {
97
97
  });
98
98
  }
99
99
 
100
- /** 解码一张纹理(DXT / CRN / WEBP / RGB 系)。tex.data 走 structured clone,主线程保留原数据 */
101
- decodeTexture(tex: S3MTexture, compressed = false): Promise<DecodedTextureData> {
100
+ /**
101
+ * 解码一张纹理(DXT / CRN / WEBP / RGB 系)。tex.data 走 structured clone,主线程保留原数据。
102
+ * `maxSize` 交给 Worker 侧收口——缩放本身也是 CPU 活,放在 Worker 里主线程零成本。
103
+ */
104
+ decodeTexture(tex: S3MTexture, compressed = false, maxSize?: number): Promise<DecodedTextureData> {
102
105
  if (this.dead) return Promise.reject(new WorkerDeadError('s3m 解析 Worker 已终止'));
103
106
  const id = ++this._seq;
104
107
  return new Promise<DecodedTextureData>((resolve, reject) => {
105
108
  this._pending.set(id, { resolve: resolve as (v: unknown) => void, reject });
106
- this._worker.postMessage({ type: 'tex', id, tex, compressed });
109
+ this._worker.postMessage({ type: 'tex', id, tex, compressed, maxSize });
107
110
  });
108
111
  }
109
112
 
@@ -147,12 +150,13 @@ export function getSharedS3MWorker(): S3MWorkerClient | null {
147
150
  */
148
151
  export async function decodeTextureWithWorker(
149
152
  tex: S3MTexture,
150
- compressed: boolean
153
+ compressed: boolean,
154
+ maxSize?: number
151
155
  ): Promise<DecodedTextureData | null> {
152
156
  const client = getSharedS3MWorker();
153
157
  if (!client) return null;
154
158
  try {
155
- return await client.decodeTexture(tex, compressed);
159
+ return await client.decodeTexture(tex, compressed, maxSize);
156
160
  } catch {
157
161
  return null;
158
162
  }
@@ -29,7 +29,7 @@ type ParseRequest = {
29
29
  assemble?: boolean;
30
30
  batching?: boolean;
31
31
  };
32
- type TexRequest = { type: 'tex'; id: number; tex: S3MTexture; compressed?: boolean };
32
+ type TexRequest = { type: 'tex'; id: number; tex: S3MTexture; compressed?: boolean; maxSize?: number };
33
33
  type Request = ParseRequest | TexRequest;
34
34
 
35
35
  type ParseResponse =
@@ -65,7 +65,7 @@ ctx.onmessage = async (e: MessageEvent<Request>) => {
65
65
  ctx.postMessage({ id, ok: true, tile } satisfies ParseResponse, collectTransferables(tile));
66
66
  }
67
67
  } else {
68
- const data = await decodeTextureData(msg.tex, { compressed: msg.compressed });
68
+ const data = await decodeTextureData(msg.tex, { compressed: msg.compressed, maxSize: msg.maxSize });
69
69
  ctx.postMessage({ id, ok: true, data } satisfies TexResponse, texTransferList(data));
70
70
  }
71
71
  } catch (err) {