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.
- package/dist/browser/assets/s3mWorker-BjPOUgjg.js +1 -0
- package/dist/browser/s3m-three.iife.ext-three.js +21 -21
- package/dist/browser/s3m-three.iife.js +21 -21
- package/dist/core/TextureDecode.d.ts +9 -0
- package/dist/core/TextureDecode.d.ts.map +1 -1
- package/dist/core/TextureDecode.js +66 -0
- package/dist/core/TextureDecode.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/render/DatasetManager.d.ts +3 -1
- package/dist/render/DatasetManager.d.ts.map +1 -1
- package/dist/render/DatasetManager.js +2 -1
- package/dist/render/DatasetManager.js.map +1 -1
- package/dist/render/OrthoProjection.d.ts +22 -0
- package/dist/render/OrthoProjection.d.ts.map +1 -1
- package/dist/render/OrthoProjection.js +60 -0
- package/dist/render/OrthoProjection.js.map +1 -1
- package/dist/render/S3MViewer.d.ts +70 -0
- package/dist/render/S3MViewer.d.ts.map +1 -1
- package/dist/render/S3MViewer.js +100 -5
- package/dist/render/S3MViewer.js.map +1 -1
- package/dist/render/TextureFactory.d.ts +3 -2
- package/dist/render/TextureFactory.d.ts.map +1 -1
- package/dist/render/TextureFactory.js +26 -6
- package/dist/render/TextureFactory.js.map +1 -1
- package/dist/tileset/S3MTileset.d.ts +26 -1
- package/dist/tileset/S3MTileset.d.ts.map +1 -1
- package/dist/tileset/S3MTileset.js +29 -2
- package/dist/tileset/S3MTileset.js.map +1 -1
- package/dist/vendor/crunch_decoder.module.js +451 -450
- package/dist/vendor/draco_decoder.module.js +3032 -3031
- package/dist/worker/S3MWorkerClient.d.ts +6 -3
- package/dist/worker/S3MWorkerClient.d.ts.map +1 -1
- package/dist/worker/S3MWorkerClient.js +8 -5
- package/dist/worker/S3MWorkerClient.js.map +1 -1
- package/dist/worker/s3mWorker.js +3639 -54
- package/dist/worker/s3mWorker.js.map +1 -1
- package/docs/API.md +61 -0
- package/package.json +2 -2
- package/src/core/TextureDecode.ts +87 -0
- package/src/index.ts +2 -1
- package/src/render/DatasetManager.ts +5 -1
- package/src/render/OrthoProjection.ts +58 -0
- package/src/render/S3MViewer.ts +134 -7
- package/src/render/TextureFactory.ts +35 -8
- package/src/tileset/S3MTileset.ts +41 -2
- package/src/vendor/crunch_decoder.module.js +451 -450
- package/src/vendor/draco_decoder.module.js +3032 -3031
- package/src/worker/S3MWorkerClient.ts +9 -5
- package/src/worker/s3mWorker.ts +2 -2
- package/dist/browser/assets/s3mWorker-D7AV6O30.js +0 -1
|
@@ -97,13 +97,16 @@ export class S3MWorkerClient {
|
|
|
97
97
|
});
|
|
98
98
|
}
|
|
99
99
|
|
|
100
|
-
/**
|
|
101
|
-
|
|
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
|
}
|
package/src/worker/s3mWorker.ts
CHANGED
|
@@ -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) {
|