@loaders.gl/textures 4.0.0-beta.2 → 4.0.0-beta.4
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/{esm/basis-loader.js → basis-loader.js} +2 -2
- package/dist/basis-loader.js.map +1 -0
- package/dist/basis-worker-node.js +5365 -3586
- package/dist/basis-worker.js +106 -32
- package/dist/{esm/compressed-texture-loader.js → compressed-texture-loader.js} +3 -3
- package/dist/compressed-texture-loader.js.map +1 -0
- package/dist/compressed-texture-worker.js +159 -35
- package/dist/{esm/compressed-texture-writer.js → compressed-texture-writer.js} +2 -2
- package/dist/compressed-texture-writer.js.map +1 -0
- package/dist/{esm/crunch-loader.js → crunch-loader.js} +1 -1
- package/dist/crunch-loader.js.map +1 -0
- package/dist/crunch-worker.js +61 -27
- package/dist/{dist.min.js → dist.dev.js} +827 -1112
- package/dist/index.cjs +1360 -0
- package/dist/index.js +31 -0
- package/dist/index.js.map +1 -0
- package/dist/ktx2-basis-writer-worker-node.js +5044 -3316
- package/dist/ktx2-basis-writer-worker.js +53 -27
- package/dist/{esm/ktx2-basis-writer.js → ktx2-basis-writer.js} +2 -2
- package/dist/ktx2-basis-writer.js.map +1 -0
- package/dist/lib/encoders/encode-ktx.js.map +1 -0
- package/dist/{esm/lib → lib}/encoders/encode-ktx2-basis-texture.js +1 -1
- package/dist/lib/encoders/encode-ktx2-basis-texture.js.map +1 -0
- package/dist/lib/encoders/encode-texture.js.map +1 -0
- package/dist/lib/gl-extensions.js.map +1 -0
- package/dist/lib/parsers/basis-module-loader.js.map +1 -0
- package/dist/lib/parsers/crunch-module-loader.js.map +1 -0
- package/dist/{esm/lib → lib}/parsers/parse-basis.js +4 -4
- package/dist/lib/parsers/parse-basis.js.map +1 -0
- package/dist/{esm/lib → lib}/parsers/parse-compressed-texture.js +3 -3
- package/dist/lib/parsers/parse-compressed-texture.js.map +1 -0
- package/dist/{esm/lib → lib}/parsers/parse-crunch.js +4 -4
- package/dist/lib/parsers/parse-crunch.js.map +1 -0
- package/dist/{esm/lib → lib}/parsers/parse-dds.js +3 -3
- package/dist/lib/parsers/parse-dds.js.map +1 -0
- package/dist/{esm/lib → lib}/parsers/parse-ktx.js +2 -2
- package/dist/lib/parsers/parse-ktx.js.map +1 -0
- package/dist/lib/parsers/parse-npy.d.ts.map +1 -1
- package/dist/{esm/lib → lib}/parsers/parse-npy.js +1 -1
- package/dist/lib/parsers/parse-npy.js.map +1 -0
- package/dist/{esm/lib → lib}/parsers/parse-pvr.js +2 -2
- package/dist/lib/parsers/parse-pvr.js.map +1 -0
- package/dist/lib/texture-api/async-deep-map.js.map +1 -0
- package/dist/{esm/lib → lib}/texture-api/deep-load.js +1 -1
- package/dist/lib/texture-api/deep-load.js.map +1 -0
- package/dist/{esm/lib → lib}/texture-api/generate-url.js +1 -1
- package/dist/lib/texture-api/generate-url.js.map +1 -0
- package/dist/{esm/lib → lib}/texture-api/load-image-array.js +2 -2
- package/dist/lib/texture-api/load-image-array.js.map +1 -0
- package/dist/{esm/lib → lib}/texture-api/load-image-cube.js +2 -2
- package/dist/lib/texture-api/load-image-cube.js.map +1 -0
- package/dist/{esm/lib → lib}/texture-api/load-image.js +2 -2
- package/dist/lib/texture-api/load-image.js.map +1 -0
- package/dist/lib/texture-api/texture-api-types.js.map +1 -0
- package/dist/lib/utils/extract-mipmap-images.js.map +1 -0
- package/dist/{esm/lib → lib}/utils/ktx-format-helper.js +1 -1
- package/dist/lib/utils/ktx-format-helper.js.map +1 -0
- package/dist/{esm/lib → lib}/utils/texture-formats.js +1 -1
- package/dist/lib/utils/texture-formats.js.map +1 -0
- package/dist/lib/utils/version.js +2 -0
- package/dist/lib/utils/version.js.map +1 -0
- package/dist/libs/basis_encoder.js +5435 -19
- package/dist/libs/basis_encoder.js.map +1 -0
- package/dist/libs/basis_transcoder.js +2523 -20
- package/dist/libs/basis_transcoder.js.map +1 -0
- package/dist/libs/crunch.js +10043 -129
- package/dist/libs/crunch.js.map +1 -0
- package/dist/{esm/npy-loader.js → npy-loader.js} +2 -2
- package/dist/npy-loader.js.map +1 -0
- package/dist/npy-worker.js +17 -4
- package/dist/types.js.map +1 -0
- package/dist/{esm/workers → workers}/basis-worker-node.js +1 -1
- package/dist/workers/basis-worker-node.js.map +1 -0
- package/dist/{esm/workers → workers}/basis-worker.js +1 -1
- package/dist/workers/basis-worker.js.map +1 -0
- package/dist/workers/compressed-texture-worker.js +4 -0
- package/dist/workers/compressed-texture-worker.js.map +1 -0
- package/dist/{esm/workers → workers}/crunch-worker.js +2 -2
- package/dist/workers/crunch-worker.js.map +1 -0
- package/dist/{esm/workers → workers}/ktx2-basis-writer-worker-node.js +1 -1
- package/dist/workers/ktx2-basis-writer-worker-node.js.map +1 -0
- package/dist/{esm/workers → workers}/ktx2-basis-writer-worker.js +1 -1
- package/dist/workers/ktx2-basis-writer-worker.js.map +1 -0
- package/dist/{esm/workers → workers}/npy-worker.js +1 -1
- package/dist/workers/npy-worker.js.map +1 -0
- package/package.json +19 -11
- package/src/lib/parsers/parse-npy.ts +0 -2
- package/dist/bundle.d.ts +0 -2
- package/dist/bundle.d.ts.map +0 -1
- package/dist/es5/basis-loader.js +0 -37
- package/dist/es5/basis-loader.js.map +0 -1
- package/dist/es5/bundle.js +0 -6
- package/dist/es5/bundle.js.map +0 -1
- package/dist/es5/compressed-texture-loader.js +0 -74
- package/dist/es5/compressed-texture-loader.js.map +0 -1
- package/dist/es5/compressed-texture-writer.js +0 -28
- package/dist/es5/compressed-texture-writer.js.map +0 -1
- package/dist/es5/crunch-loader.js +0 -24
- package/dist/es5/crunch-loader.js.map +0 -1
- package/dist/es5/index.js +0 -145
- package/dist/es5/index.js.map +0 -1
- package/dist/es5/ktx2-basis-writer.js +0 -26
- package/dist/es5/ktx2-basis-writer.js.map +0 -1
- package/dist/es5/lib/encoders/encode-ktx.js +0 -12
- package/dist/es5/lib/encoders/encode-ktx.js.map +0 -1
- package/dist/es5/lib/encoders/encode-ktx2-basis-texture.js +0 -75
- package/dist/es5/lib/encoders/encode-ktx2-basis-texture.js.map +0 -1
- package/dist/es5/lib/encoders/encode-texture.js +0 -38
- package/dist/es5/lib/encoders/encode-texture.js.map +0 -1
- package/dist/es5/lib/gl-extensions.js +0 -68
- package/dist/es5/lib/gl-extensions.js.map +0 -1
- package/dist/es5/lib/parsers/basis-module-loader.js +0 -199
- package/dist/es5/lib/parsers/basis-module-loader.js.map +0 -1
- package/dist/es5/lib/parsers/crunch-module-loader.js +0 -72
- package/dist/es5/lib/parsers/crunch-module-loader.js.map +0 -1
- package/dist/es5/lib/parsers/parse-basis.js +0 -270
- package/dist/es5/lib/parsers/parse-basis.js.map +0 -1
- package/dist/es5/lib/parsers/parse-compressed-texture.js +0 -22
- package/dist/es5/lib/parsers/parse-compressed-texture.js.map +0 -1
- package/dist/es5/lib/parsers/parse-crunch.js +0 -100
- package/dist/es5/lib/parsers/parse-crunch.js.map +0 -1
- package/dist/es5/lib/parsers/parse-dds.js +0 -84
- package/dist/es5/lib/parsers/parse-dds.js.map +0 -1
- package/dist/es5/lib/parsers/parse-ktx.js +0 -34
- package/dist/es5/lib/parsers/parse-ktx.js.map +0 -1
- package/dist/es5/lib/parsers/parse-npy.js +0 -70
- package/dist/es5/lib/parsers/parse-npy.js.map +0 -1
- package/dist/es5/lib/parsers/parse-pvr.js +0 -161
- package/dist/es5/lib/parsers/parse-pvr.js.map +0 -1
- package/dist/es5/lib/texture-api/async-deep-map.js +0 -156
- package/dist/es5/lib/texture-api/async-deep-map.js.map +0 -1
- package/dist/es5/lib/texture-api/deep-load.js +0 -63
- package/dist/es5/lib/texture-api/deep-load.js.map +0 -1
- package/dist/es5/lib/texture-api/generate-url.js +0 -20
- package/dist/es5/lib/texture-api/generate-url.js.map +0 -1
- package/dist/es5/lib/texture-api/load-image-array.js +0 -75
- package/dist/es5/lib/texture-api/load-image-array.js.map +0 -1
- package/dist/es5/lib/texture-api/load-image-cube.js +0 -136
- package/dist/es5/lib/texture-api/load-image-cube.js.map +0 -1
- package/dist/es5/lib/texture-api/load-image.js +0 -129
- package/dist/es5/lib/texture-api/load-image.js.map +0 -1
- package/dist/es5/lib/texture-api/texture-api-types.js +0 -2
- package/dist/es5/lib/texture-api/texture-api-types.js.map +0 -1
- package/dist/es5/lib/utils/extract-mipmap-images.js +0 -41
- package/dist/es5/lib/utils/extract-mipmap-images.js.map +0 -1
- package/dist/es5/lib/utils/ktx-format-helper.js +0 -79
- package/dist/es5/lib/utils/ktx-format-helper.js.map +0 -1
- package/dist/es5/lib/utils/texture-formats.js +0 -54
- package/dist/es5/lib/utils/texture-formats.js.map +0 -1
- package/dist/es5/lib/utils/version.js +0 -9
- package/dist/es5/lib/utils/version.js.map +0 -1
- package/dist/es5/npy-loader.js +0 -51
- package/dist/es5/npy-loader.js.map +0 -1
- package/dist/es5/types.js +0 -2
- package/dist/es5/types.js.map +0 -1
- package/dist/es5/workers/basis-worker-node.js +0 -7
- package/dist/es5/workers/basis-worker-node.js.map +0 -1
- package/dist/es5/workers/basis-worker.js +0 -6
- package/dist/es5/workers/basis-worker.js.map +0 -1
- package/dist/es5/workers/compressed-texture-worker.js +0 -6
- package/dist/es5/workers/compressed-texture-worker.js.map +0 -1
- package/dist/es5/workers/crunch-worker.js +0 -19
- package/dist/es5/workers/crunch-worker.js.map +0 -1
- package/dist/es5/workers/ktx2-basis-writer-worker-node.js +0 -54
- package/dist/es5/workers/ktx2-basis-writer-worker-node.js.map +0 -1
- package/dist/es5/workers/ktx2-basis-writer-worker.js +0 -53
- package/dist/es5/workers/ktx2-basis-writer-worker.js.map +0 -1
- package/dist/es5/workers/npy-worker.js +0 -6
- package/dist/es5/workers/npy-worker.js.map +0 -1
- package/dist/esm/basis-loader.js.map +0 -1
- package/dist/esm/bundle.js +0 -4
- package/dist/esm/bundle.js.map +0 -1
- package/dist/esm/compressed-texture-loader.js.map +0 -1
- package/dist/esm/compressed-texture-writer.js.map +0 -1
- package/dist/esm/crunch-loader.js.map +0 -1
- package/dist/esm/index.js +0 -31
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/ktx2-basis-writer.js.map +0 -1
- package/dist/esm/lib/encoders/encode-ktx.js.map +0 -1
- package/dist/esm/lib/encoders/encode-ktx2-basis-texture.js.map +0 -1
- package/dist/esm/lib/encoders/encode-texture.js.map +0 -1
- package/dist/esm/lib/gl-extensions.js.map +0 -1
- package/dist/esm/lib/parsers/basis-module-loader.js.map +0 -1
- package/dist/esm/lib/parsers/crunch-module-loader.js.map +0 -1
- package/dist/esm/lib/parsers/parse-basis.js.map +0 -1
- package/dist/esm/lib/parsers/parse-compressed-texture.js.map +0 -1
- package/dist/esm/lib/parsers/parse-crunch.js.map +0 -1
- package/dist/esm/lib/parsers/parse-dds.js.map +0 -1
- package/dist/esm/lib/parsers/parse-ktx.js.map +0 -1
- package/dist/esm/lib/parsers/parse-npy.js.map +0 -1
- package/dist/esm/lib/parsers/parse-pvr.js.map +0 -1
- package/dist/esm/lib/texture-api/async-deep-map.js.map +0 -1
- package/dist/esm/lib/texture-api/deep-load.js.map +0 -1
- package/dist/esm/lib/texture-api/generate-url.js.map +0 -1
- package/dist/esm/lib/texture-api/load-image-array.js.map +0 -1
- package/dist/esm/lib/texture-api/load-image-cube.js.map +0 -1
- package/dist/esm/lib/texture-api/load-image.js.map +0 -1
- package/dist/esm/lib/texture-api/texture-api-types.js.map +0 -1
- package/dist/esm/lib/utils/extract-mipmap-images.js.map +0 -1
- package/dist/esm/lib/utils/ktx-format-helper.js.map +0 -1
- package/dist/esm/lib/utils/texture-formats.js.map +0 -1
- package/dist/esm/lib/utils/version.js +0 -2
- package/dist/esm/lib/utils/version.js.map +0 -1
- package/dist/esm/libs/README.md +0 -9
- package/dist/esm/libs/basis_encoder.js +0 -21
- package/dist/esm/libs/basis_encoder.wasm +0 -0
- package/dist/esm/libs/basis_transcoder.js +0 -22
- package/dist/esm/libs/basis_transcoder.wasm +0 -0
- package/dist/esm/libs/crunch.js +0 -136
- package/dist/esm/npy-loader.js.map +0 -1
- package/dist/esm/types.js.map +0 -1
- package/dist/esm/workers/basis-worker-node.js.map +0 -1
- package/dist/esm/workers/basis-worker.js.map +0 -1
- package/dist/esm/workers/compressed-texture-worker.js +0 -4
- package/dist/esm/workers/compressed-texture-worker.js.map +0 -1
- package/dist/esm/workers/crunch-worker.js.map +0 -1
- package/dist/esm/workers/ktx2-basis-writer-worker-node.js.map +0 -1
- package/dist/esm/workers/ktx2-basis-writer-worker.js.map +0 -1
- package/dist/esm/workers/npy-worker.js.map +0 -1
- package/src/bundle.ts +0 -4
- /package/dist/{esm/lib → lib}/encoders/encode-ktx.js +0 -0
- /package/dist/{esm/lib → lib}/encoders/encode-texture.js +0 -0
- /package/dist/{esm/lib → lib}/gl-extensions.js +0 -0
- /package/dist/{esm/lib → lib}/parsers/basis-module-loader.js +0 -0
- /package/dist/{esm/lib → lib}/parsers/crunch-module-loader.js +0 -0
- /package/dist/{esm/lib → lib}/texture-api/async-deep-map.js +0 -0
- /package/dist/{esm/lib → lib}/texture-api/texture-api-types.js +0 -0
- /package/dist/{esm/lib → lib}/utils/extract-mipmap-images.js +0 -0
- /package/dist/{es5 → libs}/libs/README.md +0 -0
- /package/dist/{es5 → libs}/libs/basis_encoder.js +0 -0
- /package/dist/{es5 → libs}/libs/basis_encoder.wasm +0 -0
- /package/dist/{es5 → libs}/libs/basis_transcoder.js +0 -0
- /package/dist/{es5 → libs}/libs/basis_transcoder.wasm +0 -0
- /package/dist/{es5 → libs}/libs/crunch.js +0 -0
- /package/dist/{esm/types.js → types.js} +0 -0
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,1360 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/index.ts
|
|
21
|
+
var src_exports = {};
|
|
22
|
+
__export(src_exports, {
|
|
23
|
+
BASIS_EXTERNAL_LIBRARIES: () => BASIS_EXTERNAL_LIBRARIES,
|
|
24
|
+
BasisLoader: () => BasisLoader,
|
|
25
|
+
BasisWorkerLoader: () => BasisWorkerLoader,
|
|
26
|
+
CRUNCH_EXTERNAL_LIBRARIES: () => CRUNCH_EXTERNAL_LIBRARIES,
|
|
27
|
+
CompressedTextureLoader: () => CompressedTextureLoader,
|
|
28
|
+
CompressedTextureWorkerLoader: () => CompressedTextureWorkerLoader,
|
|
29
|
+
CompressedTextureWriter: () => CompressedTextureWriter,
|
|
30
|
+
CrunchLoader: () => CrunchLoader,
|
|
31
|
+
CrunchWorkerLoader: () => CrunchLoader,
|
|
32
|
+
GL_EXTENSIONS_CONSTANTS: () => GL_EXTENSIONS_CONSTANTS,
|
|
33
|
+
KTX2BasisWriter: () => KTX2BasisWriter,
|
|
34
|
+
KTX2BasisWriterWorker: () => KTX2BasisWriterWorker,
|
|
35
|
+
NPYLoader: () => NPYLoader,
|
|
36
|
+
NPYWorkerLoader: () => NPYWorkerLoader,
|
|
37
|
+
getSupportedGPUTextureFormats: () => getSupportedGPUTextureFormats,
|
|
38
|
+
loadImageTexture: () => loadImageTexture,
|
|
39
|
+
loadImageTextureArray: () => loadImageTextureArray,
|
|
40
|
+
loadImageTextureCube: () => loadImageTextureCube,
|
|
41
|
+
selectSupportedBasisFormat: () => selectSupportedBasisFormat
|
|
42
|
+
});
|
|
43
|
+
module.exports = __toCommonJS(src_exports);
|
|
44
|
+
|
|
45
|
+
// src/lib/utils/version.ts
|
|
46
|
+
var VERSION = typeof __VERSION__ !== "undefined" ? __VERSION__ : "beta";
|
|
47
|
+
|
|
48
|
+
// src/lib/parsers/basis-module-loader.ts
|
|
49
|
+
var import_worker_utils = require("@loaders.gl/worker-utils");
|
|
50
|
+
var BASIS_EXTERNAL_LIBRARIES = {
|
|
51
|
+
/** Basis transcoder, javascript wrapper part */
|
|
52
|
+
TRANSCODER: "basis_transcoder.js",
|
|
53
|
+
/** Basis transcoder, compiled web assembly part */
|
|
54
|
+
TRANSCODER_WASM: "basis_transcoder.wasm",
|
|
55
|
+
/** Basis encoder, javascript wrapper part */
|
|
56
|
+
ENCODER: "basis_encoder.js",
|
|
57
|
+
/** Basis encoder, compiled web assembly part */
|
|
58
|
+
ENCODER_WASM: "basis_encoder.wasm"
|
|
59
|
+
};
|
|
60
|
+
var loadBasisTranscoderPromise;
|
|
61
|
+
async function loadBasisTranscoderModule(options) {
|
|
62
|
+
const modules = options.modules || {};
|
|
63
|
+
if (modules.basis) {
|
|
64
|
+
return modules.basis;
|
|
65
|
+
}
|
|
66
|
+
loadBasisTranscoderPromise = loadBasisTranscoderPromise || loadBasisTranscoder(options);
|
|
67
|
+
return await loadBasisTranscoderPromise;
|
|
68
|
+
}
|
|
69
|
+
async function loadBasisTranscoder(options) {
|
|
70
|
+
let BASIS = null;
|
|
71
|
+
let wasmBinary = null;
|
|
72
|
+
[BASIS, wasmBinary] = await Promise.all([
|
|
73
|
+
await (0, import_worker_utils.loadLibrary)(BASIS_EXTERNAL_LIBRARIES.TRANSCODER, "textures", options),
|
|
74
|
+
await (0, import_worker_utils.loadLibrary)(BASIS_EXTERNAL_LIBRARIES.TRANSCODER_WASM, "textures", options)
|
|
75
|
+
]);
|
|
76
|
+
BASIS = BASIS || globalThis.BASIS;
|
|
77
|
+
return await initializeBasisTranscoderModule(BASIS, wasmBinary);
|
|
78
|
+
}
|
|
79
|
+
function initializeBasisTranscoderModule(BasisModule, wasmBinary) {
|
|
80
|
+
const options = {};
|
|
81
|
+
if (wasmBinary) {
|
|
82
|
+
options.wasmBinary = wasmBinary;
|
|
83
|
+
}
|
|
84
|
+
return new Promise((resolve) => {
|
|
85
|
+
BasisModule(options).then((module2) => {
|
|
86
|
+
const { BasisFile, initializeBasis } = module2;
|
|
87
|
+
initializeBasis();
|
|
88
|
+
resolve({ BasisFile });
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
var loadBasisEncoderPromise;
|
|
93
|
+
async function loadBasisEncoderModule(options) {
|
|
94
|
+
const modules = options.modules || {};
|
|
95
|
+
if (modules.basisEncoder) {
|
|
96
|
+
return modules.basisEncoder;
|
|
97
|
+
}
|
|
98
|
+
loadBasisEncoderPromise = loadBasisEncoderPromise || loadBasisEncoder(options);
|
|
99
|
+
return await loadBasisEncoderPromise;
|
|
100
|
+
}
|
|
101
|
+
async function loadBasisEncoder(options) {
|
|
102
|
+
let BASIS_ENCODER = null;
|
|
103
|
+
let wasmBinary = null;
|
|
104
|
+
[BASIS_ENCODER, wasmBinary] = await Promise.all([
|
|
105
|
+
await (0, import_worker_utils.loadLibrary)(BASIS_EXTERNAL_LIBRARIES.ENCODER, "textures", options),
|
|
106
|
+
await (0, import_worker_utils.loadLibrary)(BASIS_EXTERNAL_LIBRARIES.ENCODER_WASM, "textures", options)
|
|
107
|
+
]);
|
|
108
|
+
BASIS_ENCODER = BASIS_ENCODER || globalThis.BASIS;
|
|
109
|
+
return await initializeBasisEncoderModule(BASIS_ENCODER, wasmBinary);
|
|
110
|
+
}
|
|
111
|
+
function initializeBasisEncoderModule(BasisEncoderModule, wasmBinary) {
|
|
112
|
+
const options = {};
|
|
113
|
+
if (wasmBinary) {
|
|
114
|
+
options.wasmBinary = wasmBinary;
|
|
115
|
+
}
|
|
116
|
+
return new Promise((resolve) => {
|
|
117
|
+
BasisEncoderModule(options).then((module2) => {
|
|
118
|
+
const { BasisFile, KTX2File, initializeBasis, BasisEncoder } = module2;
|
|
119
|
+
initializeBasis();
|
|
120
|
+
resolve({ BasisFile, KTX2File, BasisEncoder });
|
|
121
|
+
});
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// src/lib/gl-extensions.ts
|
|
126
|
+
var GL_EXTENSIONS_CONSTANTS = {
|
|
127
|
+
// WEBGL_compressed_texture_s3tc
|
|
128
|
+
COMPRESSED_RGB_S3TC_DXT1_EXT: 33776,
|
|
129
|
+
COMPRESSED_RGBA_S3TC_DXT1_EXT: 33777,
|
|
130
|
+
COMPRESSED_RGBA_S3TC_DXT3_EXT: 33778,
|
|
131
|
+
COMPRESSED_RGBA_S3TC_DXT5_EXT: 33779,
|
|
132
|
+
// WEBGL_compressed_texture_es3
|
|
133
|
+
COMPRESSED_R11_EAC: 37488,
|
|
134
|
+
COMPRESSED_SIGNED_R11_EAC: 37489,
|
|
135
|
+
COMPRESSED_RG11_EAC: 37490,
|
|
136
|
+
COMPRESSED_SIGNED_RG11_EAC: 37491,
|
|
137
|
+
COMPRESSED_RGB8_ETC2: 37492,
|
|
138
|
+
COMPRESSED_RGBA8_ETC2_EAC: 37493,
|
|
139
|
+
COMPRESSED_SRGB8_ETC2: 37494,
|
|
140
|
+
COMPRESSED_SRGB8_ALPHA8_ETC2_EAC: 37495,
|
|
141
|
+
COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2: 37496,
|
|
142
|
+
COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2: 37497,
|
|
143
|
+
// WEBGL_compressed_texture_pvrtc
|
|
144
|
+
COMPRESSED_RGB_PVRTC_4BPPV1_IMG: 35840,
|
|
145
|
+
COMPRESSED_RGBA_PVRTC_4BPPV1_IMG: 35842,
|
|
146
|
+
COMPRESSED_RGB_PVRTC_2BPPV1_IMG: 35841,
|
|
147
|
+
COMPRESSED_RGBA_PVRTC_2BPPV1_IMG: 35843,
|
|
148
|
+
// WEBGL_compressed_texture_etc1
|
|
149
|
+
COMPRESSED_RGB_ETC1_WEBGL: 36196,
|
|
150
|
+
// WEBGL_compressed_texture_atc
|
|
151
|
+
COMPRESSED_RGB_ATC_WEBGL: 35986,
|
|
152
|
+
COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL: 35987,
|
|
153
|
+
COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL: 34798,
|
|
154
|
+
// WEBGL_compressed_texture_astc
|
|
155
|
+
COMPRESSED_RGBA_ASTC_4X4_KHR: 37808,
|
|
156
|
+
COMPRESSED_RGBA_ASTC_5X4_KHR: 37809,
|
|
157
|
+
COMPRESSED_RGBA_ASTC_5X5_KHR: 37810,
|
|
158
|
+
COMPRESSED_RGBA_ASTC_6X5_KHR: 37811,
|
|
159
|
+
COMPRESSED_RGBA_ASTC_6X6_KHR: 37812,
|
|
160
|
+
COMPRESSED_RGBA_ASTC_8X5_KHR: 37813,
|
|
161
|
+
COMPRESSED_RGBA_ASTC_8X6_KHR: 37814,
|
|
162
|
+
COMPRESSED_RGBA_ASTC_8X8_KHR: 37815,
|
|
163
|
+
COMPRESSED_RGBA_ASTC_10X5_KHR: 37816,
|
|
164
|
+
COMPRESSED_RGBA_ASTC_10X6_KHR: 37817,
|
|
165
|
+
COMPRESSED_RGBA_ASTC_10X8_KHR: 37818,
|
|
166
|
+
COMPRESSED_RGBA_ASTC_10X10_KHR: 37819,
|
|
167
|
+
COMPRESSED_RGBA_ASTC_12X10_KHR: 37820,
|
|
168
|
+
COMPRESSED_RGBA_ASTC_12X12_KHR: 37821,
|
|
169
|
+
COMPRESSED_SRGB8_ALPHA8_ASTC_4X4_KHR: 37840,
|
|
170
|
+
COMPRESSED_SRGB8_ALPHA8_ASTC_5X4_KHR: 37841,
|
|
171
|
+
COMPRESSED_SRGB8_ALPHA8_ASTC_5X5_KHR: 37842,
|
|
172
|
+
COMPRESSED_SRGB8_ALPHA8_ASTC_6X5_KHR: 37843,
|
|
173
|
+
COMPRESSED_SRGB8_ALPHA8_ASTC_6X6_KHR: 37844,
|
|
174
|
+
COMPRESSED_SRGB8_ALPHA8_ASTC_8X5_KHR: 37845,
|
|
175
|
+
COMPRESSED_SRGB8_ALPHA8_ASTC_8X6_KHR: 37846,
|
|
176
|
+
COMPRESSED_SRGB8_ALPHA8_ASTC_8X8_KHR: 37847,
|
|
177
|
+
COMPRESSED_SRGB8_ALPHA8_ASTC_10X5_KHR: 37848,
|
|
178
|
+
COMPRESSED_SRGB8_ALPHA8_ASTC_10X6_KHR: 37849,
|
|
179
|
+
COMPRESSED_SRGB8_ALPHA8_ASTC_10X8_KHR: 37850,
|
|
180
|
+
COMPRESSED_SRGB8_ALPHA8_ASTC_10X10_KHR: 37851,
|
|
181
|
+
COMPRESSED_SRGB8_ALPHA8_ASTC_12X10_KHR: 37852,
|
|
182
|
+
COMPRESSED_SRGB8_ALPHA8_ASTC_12X12_KHR: 37853,
|
|
183
|
+
// EXT_texture_compression_rgtc
|
|
184
|
+
COMPRESSED_RED_RGTC1_EXT: 36283,
|
|
185
|
+
COMPRESSED_SIGNED_RED_RGTC1_EXT: 36284,
|
|
186
|
+
COMPRESSED_RED_GREEN_RGTC2_EXT: 36285,
|
|
187
|
+
COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT: 36286,
|
|
188
|
+
// WEBGL_compressed_texture_s3tc_srgb
|
|
189
|
+
COMPRESSED_SRGB_S3TC_DXT1_EXT: 35916,
|
|
190
|
+
COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT: 35917,
|
|
191
|
+
COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT: 35918,
|
|
192
|
+
COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT: 35919
|
|
193
|
+
};
|
|
194
|
+
|
|
195
|
+
// src/lib/utils/texture-formats.ts
|
|
196
|
+
var BROWSER_PREFIXES = ["", "WEBKIT_", "MOZ_"];
|
|
197
|
+
var WEBGL_EXTENSIONS = {
|
|
198
|
+
/* eslint-disable camelcase */
|
|
199
|
+
WEBGL_compressed_texture_s3tc: "dxt",
|
|
200
|
+
WEBGL_compressed_texture_s3tc_srgb: "dxt-srgb",
|
|
201
|
+
WEBGL_compressed_texture_etc1: "etc1",
|
|
202
|
+
WEBGL_compressed_texture_etc: "etc2",
|
|
203
|
+
WEBGL_compressed_texture_pvrtc: "pvrtc",
|
|
204
|
+
WEBGL_compressed_texture_atc: "atc",
|
|
205
|
+
WEBGL_compressed_texture_astc: "astc",
|
|
206
|
+
EXT_texture_compression_rgtc: "rgtc"
|
|
207
|
+
/* eslint-enable camelcase */
|
|
208
|
+
};
|
|
209
|
+
var formats = null;
|
|
210
|
+
function getSupportedGPUTextureFormats(gl) {
|
|
211
|
+
if (!formats) {
|
|
212
|
+
gl = gl || getWebGLContext() || void 0;
|
|
213
|
+
formats = /* @__PURE__ */ new Set();
|
|
214
|
+
for (const prefix of BROWSER_PREFIXES) {
|
|
215
|
+
for (const extension in WEBGL_EXTENSIONS) {
|
|
216
|
+
if (gl && gl.getExtension(`${prefix}${extension}`)) {
|
|
217
|
+
const gpuTextureFormat = WEBGL_EXTENSIONS[extension];
|
|
218
|
+
formats.add(gpuTextureFormat);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
return formats;
|
|
224
|
+
}
|
|
225
|
+
function getWebGLContext() {
|
|
226
|
+
try {
|
|
227
|
+
const canvas = document.createElement("canvas");
|
|
228
|
+
return canvas.getContext("webgl");
|
|
229
|
+
} catch (error) {
|
|
230
|
+
return null;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
// src/lib/parsers/parse-ktx.ts
|
|
235
|
+
var import_ktx_parse = require("ktx-parse");
|
|
236
|
+
|
|
237
|
+
// src/lib/utils/extract-mipmap-images.ts
|
|
238
|
+
function extractMipmapImages(data, options) {
|
|
239
|
+
const images = new Array(options.mipMapLevels);
|
|
240
|
+
let levelWidth = options.width;
|
|
241
|
+
let levelHeight = options.height;
|
|
242
|
+
let offset = 0;
|
|
243
|
+
for (let i = 0; i < options.mipMapLevels; ++i) {
|
|
244
|
+
const levelSize = getLevelSize(options, levelWidth, levelHeight, data, i);
|
|
245
|
+
const levelData = getLevelData(data, i, offset, levelSize);
|
|
246
|
+
images[i] = {
|
|
247
|
+
compressed: true,
|
|
248
|
+
format: options.internalFormat,
|
|
249
|
+
data: levelData,
|
|
250
|
+
width: levelWidth,
|
|
251
|
+
height: levelHeight,
|
|
252
|
+
levelSize
|
|
253
|
+
};
|
|
254
|
+
levelWidth = Math.max(1, levelWidth >> 1);
|
|
255
|
+
levelHeight = Math.max(1, levelHeight >> 1);
|
|
256
|
+
offset += levelSize;
|
|
257
|
+
}
|
|
258
|
+
return images;
|
|
259
|
+
}
|
|
260
|
+
function getLevelData(data, index, offset, levelSize) {
|
|
261
|
+
if (!Array.isArray(data)) {
|
|
262
|
+
return new Uint8Array(data.buffer, data.byteOffset + offset, levelSize);
|
|
263
|
+
}
|
|
264
|
+
return data[index].levelData;
|
|
265
|
+
}
|
|
266
|
+
function getLevelSize(options, levelWidth, levelHeight, data, index) {
|
|
267
|
+
if (!Array.isArray(data)) {
|
|
268
|
+
return options.sizeFunction(levelWidth, levelHeight);
|
|
269
|
+
}
|
|
270
|
+
return options.sizeFunction(data[index]);
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
// src/lib/utils/ktx-format-helper.ts
|
|
274
|
+
var VULKAN_TO_WEBGL_FORMAT_MAP = {
|
|
275
|
+
131: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_S3TC_DXT1_EXT,
|
|
276
|
+
132: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB_S3TC_DXT1_EXT,
|
|
277
|
+
133: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT1_EXT,
|
|
278
|
+
134: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT,
|
|
279
|
+
135: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT3_EXT,
|
|
280
|
+
136: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT,
|
|
281
|
+
137: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT5_EXT,
|
|
282
|
+
138: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT,
|
|
283
|
+
139: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RED_RGTC1_EXT,
|
|
284
|
+
140: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SIGNED_RED_RGTC1_EXT,
|
|
285
|
+
141: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RED_GREEN_RGTC2_EXT,
|
|
286
|
+
142: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT,
|
|
287
|
+
147: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB8_ETC2,
|
|
288
|
+
148: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ETC2,
|
|
289
|
+
149: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2,
|
|
290
|
+
150: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2,
|
|
291
|
+
151: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA8_ETC2_EAC,
|
|
292
|
+
152: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC,
|
|
293
|
+
153: GL_EXTENSIONS_CONSTANTS.COMPRESSED_R11_EAC,
|
|
294
|
+
154: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SIGNED_R11_EAC,
|
|
295
|
+
155: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RG11_EAC,
|
|
296
|
+
156: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SIGNED_RG11_EAC,
|
|
297
|
+
// @ts-ignore
|
|
298
|
+
157: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_4x4_KHR,
|
|
299
|
+
// @ts-ignore
|
|
300
|
+
158: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR,
|
|
301
|
+
// @ts-ignore
|
|
302
|
+
159: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_5x4_KHR,
|
|
303
|
+
// @ts-ignore
|
|
304
|
+
160: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_5X4_KHR,
|
|
305
|
+
// @ts-ignore
|
|
306
|
+
161: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_5x5_KHR,
|
|
307
|
+
// @ts-ignore
|
|
308
|
+
162: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR,
|
|
309
|
+
// @ts-ignore
|
|
310
|
+
163: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_6x5_KHR,
|
|
311
|
+
// @ts-ignore
|
|
312
|
+
164: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR,
|
|
313
|
+
// @ts-ignore
|
|
314
|
+
165: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_6x6_KHR,
|
|
315
|
+
// @ts-ignore
|
|
316
|
+
166: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR,
|
|
317
|
+
// @ts-ignore
|
|
318
|
+
167: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_8x5_KHR,
|
|
319
|
+
// @ts-ignore
|
|
320
|
+
168: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR,
|
|
321
|
+
// @ts-ignore
|
|
322
|
+
169: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_8x6_KHR,
|
|
323
|
+
// @ts-ignore
|
|
324
|
+
170: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR,
|
|
325
|
+
// @ts-ignore
|
|
326
|
+
171: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_8x8_KHR,
|
|
327
|
+
// @ts-ignore
|
|
328
|
+
172: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR,
|
|
329
|
+
// @ts-ignore
|
|
330
|
+
173: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_10x5_KHR,
|
|
331
|
+
// @ts-ignore
|
|
332
|
+
174: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR,
|
|
333
|
+
// @ts-ignore
|
|
334
|
+
175: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_10x6_KHR,
|
|
335
|
+
// @ts-ignore
|
|
336
|
+
176: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR,
|
|
337
|
+
// @ts-ignore
|
|
338
|
+
177: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_10x8_KHR,
|
|
339
|
+
// @ts-ignore
|
|
340
|
+
178: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR,
|
|
341
|
+
// @ts-ignore
|
|
342
|
+
179: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_10x10_KHR,
|
|
343
|
+
// @ts-ignore
|
|
344
|
+
180: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR,
|
|
345
|
+
// @ts-ignore
|
|
346
|
+
181: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_12x10_KHR,
|
|
347
|
+
// @ts-ignore
|
|
348
|
+
182: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR,
|
|
349
|
+
// @ts-ignore
|
|
350
|
+
183: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_12x12_KHR,
|
|
351
|
+
// @ts-ignore
|
|
352
|
+
184: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR,
|
|
353
|
+
1000054e3: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG,
|
|
354
|
+
1000054001: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG,
|
|
355
|
+
// @ts-ignore
|
|
356
|
+
1000066e3: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_4x4_KHR,
|
|
357
|
+
// @ts-ignore
|
|
358
|
+
1000066001: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_5x4_KHR,
|
|
359
|
+
// @ts-ignore
|
|
360
|
+
1000066002: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_5x5_KHR,
|
|
361
|
+
// @ts-ignore
|
|
362
|
+
1000066003: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_6x5_KHR,
|
|
363
|
+
// @ts-ignore
|
|
364
|
+
1000066004: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_6x6_KHR,
|
|
365
|
+
// @ts-ignore
|
|
366
|
+
1000066005: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_8x5_KHR,
|
|
367
|
+
// @ts-ignore
|
|
368
|
+
1000066006: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_8x6_KHR,
|
|
369
|
+
// @ts-ignore
|
|
370
|
+
1000066007: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_8x8_KHR,
|
|
371
|
+
// @ts-ignore
|
|
372
|
+
1000066008: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_10x5_KHR,
|
|
373
|
+
// @ts-ignore
|
|
374
|
+
1000066009: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_10x6_KHR,
|
|
375
|
+
// @ts-ignore
|
|
376
|
+
1000066010: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_10x8_KHR,
|
|
377
|
+
// @ts-ignore
|
|
378
|
+
1000066011: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_10x10_KHR,
|
|
379
|
+
// @ts-ignore
|
|
380
|
+
1000066012: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_12x10_KHR,
|
|
381
|
+
// @ts-ignore
|
|
382
|
+
1000066013: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_12x12_KHR
|
|
383
|
+
};
|
|
384
|
+
function mapVkFormatToWebGL(vkFormat) {
|
|
385
|
+
return VULKAN_TO_WEBGL_FORMAT_MAP[vkFormat];
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
// src/lib/parsers/parse-ktx.ts
|
|
389
|
+
var KTX2_ID = [
|
|
390
|
+
// '´', 'K', 'T', 'X', '2', '0', 'ª', '\r', '\n', '\x1A', '\n'
|
|
391
|
+
171,
|
|
392
|
+
75,
|
|
393
|
+
84,
|
|
394
|
+
88,
|
|
395
|
+
32,
|
|
396
|
+
50,
|
|
397
|
+
48,
|
|
398
|
+
187,
|
|
399
|
+
13,
|
|
400
|
+
10,
|
|
401
|
+
26,
|
|
402
|
+
10
|
|
403
|
+
];
|
|
404
|
+
function isKTX(data) {
|
|
405
|
+
const id = new Uint8Array(data);
|
|
406
|
+
const notKTX = id.byteLength < KTX2_ID.length || id[0] !== KTX2_ID[0] || // '´'
|
|
407
|
+
id[1] !== KTX2_ID[1] || // 'K'
|
|
408
|
+
id[2] !== KTX2_ID[2] || // 'T'
|
|
409
|
+
id[3] !== KTX2_ID[3] || // 'X'
|
|
410
|
+
id[4] !== KTX2_ID[4] || // ' '
|
|
411
|
+
id[5] !== KTX2_ID[5] || // '2'
|
|
412
|
+
id[6] !== KTX2_ID[6] || // '0'
|
|
413
|
+
id[7] !== KTX2_ID[7] || // 'ª'
|
|
414
|
+
id[8] !== KTX2_ID[8] || // '\r'
|
|
415
|
+
id[9] !== KTX2_ID[9] || // '\n'
|
|
416
|
+
id[10] !== KTX2_ID[10] || // '\x1A'
|
|
417
|
+
id[11] !== KTX2_ID[11];
|
|
418
|
+
return !notKTX;
|
|
419
|
+
}
|
|
420
|
+
function parseKTX(arrayBuffer) {
|
|
421
|
+
const uint8Array = new Uint8Array(arrayBuffer);
|
|
422
|
+
const ktx = (0, import_ktx_parse.read)(uint8Array);
|
|
423
|
+
const mipMapLevels = Math.max(1, ktx.levels.length);
|
|
424
|
+
const width = ktx.pixelWidth;
|
|
425
|
+
const height = ktx.pixelHeight;
|
|
426
|
+
const internalFormat = mapVkFormatToWebGL(ktx.vkFormat);
|
|
427
|
+
return extractMipmapImages(ktx.levels, {
|
|
428
|
+
mipMapLevels,
|
|
429
|
+
width,
|
|
430
|
+
height,
|
|
431
|
+
sizeFunction: (level) => level.uncompressedByteLength,
|
|
432
|
+
internalFormat
|
|
433
|
+
});
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
// src/lib/parsers/parse-basis.ts
|
|
437
|
+
var OutputFormat = {
|
|
438
|
+
etc1: {
|
|
439
|
+
basisFormat: 0,
|
|
440
|
+
compressed: true,
|
|
441
|
+
format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_ETC1_WEBGL
|
|
442
|
+
},
|
|
443
|
+
etc2: { basisFormat: 1, compressed: true },
|
|
444
|
+
bc1: {
|
|
445
|
+
basisFormat: 2,
|
|
446
|
+
compressed: true,
|
|
447
|
+
format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_S3TC_DXT1_EXT
|
|
448
|
+
},
|
|
449
|
+
bc3: {
|
|
450
|
+
basisFormat: 3,
|
|
451
|
+
compressed: true,
|
|
452
|
+
format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT5_EXT
|
|
453
|
+
},
|
|
454
|
+
bc4: { basisFormat: 4, compressed: true },
|
|
455
|
+
bc5: { basisFormat: 5, compressed: true },
|
|
456
|
+
"bc7-m6-opaque-only": { basisFormat: 6, compressed: true },
|
|
457
|
+
"bc7-m5": { basisFormat: 7, compressed: true },
|
|
458
|
+
"pvrtc1-4-rgb": {
|
|
459
|
+
basisFormat: 8,
|
|
460
|
+
compressed: true,
|
|
461
|
+
format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_PVRTC_4BPPV1_IMG
|
|
462
|
+
},
|
|
463
|
+
"pvrtc1-4-rgba": {
|
|
464
|
+
basisFormat: 9,
|
|
465
|
+
compressed: true,
|
|
466
|
+
format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG
|
|
467
|
+
},
|
|
468
|
+
"astc-4x4": {
|
|
469
|
+
basisFormat: 10,
|
|
470
|
+
compressed: true,
|
|
471
|
+
format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_4X4_KHR
|
|
472
|
+
},
|
|
473
|
+
"atc-rgb": { basisFormat: 11, compressed: true },
|
|
474
|
+
"atc-rgba-interpolated-alpha": { basisFormat: 12, compressed: true },
|
|
475
|
+
rgba32: { basisFormat: 13, compressed: false },
|
|
476
|
+
rgb565: { basisFormat: 14, compressed: false },
|
|
477
|
+
bgr565: { basisFormat: 15, compressed: false },
|
|
478
|
+
rgba4444: { basisFormat: 16, compressed: false }
|
|
479
|
+
};
|
|
480
|
+
async function parseBasis(data, options) {
|
|
481
|
+
if (options.basis.containerFormat === "auto") {
|
|
482
|
+
if (isKTX(data)) {
|
|
483
|
+
const fileConstructors = await loadBasisEncoderModule(options);
|
|
484
|
+
return parseKTX2File(fileConstructors.KTX2File, data, options);
|
|
485
|
+
}
|
|
486
|
+
const { BasisFile } = await loadBasisTranscoderModule(options);
|
|
487
|
+
return parseBasisFile(BasisFile, data, options);
|
|
488
|
+
}
|
|
489
|
+
switch (options.basis.module) {
|
|
490
|
+
case "encoder":
|
|
491
|
+
const fileConstructors = await loadBasisEncoderModule(options);
|
|
492
|
+
switch (options.basis.containerFormat) {
|
|
493
|
+
case "ktx2":
|
|
494
|
+
return parseKTX2File(fileConstructors.KTX2File, data, options);
|
|
495
|
+
case "basis":
|
|
496
|
+
default:
|
|
497
|
+
return parseBasisFile(fileConstructors.BasisFile, data, options);
|
|
498
|
+
}
|
|
499
|
+
case "transcoder":
|
|
500
|
+
default:
|
|
501
|
+
const { BasisFile } = await loadBasisTranscoderModule(options);
|
|
502
|
+
return parseBasisFile(BasisFile, data, options);
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
function parseBasisFile(BasisFile, data, options) {
|
|
506
|
+
const basisFile = new BasisFile(new Uint8Array(data));
|
|
507
|
+
try {
|
|
508
|
+
if (!basisFile.startTranscoding()) {
|
|
509
|
+
throw new Error("Failed to start basis transcoding");
|
|
510
|
+
}
|
|
511
|
+
const imageCount = basisFile.getNumImages();
|
|
512
|
+
const images = [];
|
|
513
|
+
for (let imageIndex = 0; imageIndex < imageCount; imageIndex++) {
|
|
514
|
+
const levelsCount = basisFile.getNumLevels(imageIndex);
|
|
515
|
+
const levels = [];
|
|
516
|
+
for (let levelIndex = 0; levelIndex < levelsCount; levelIndex++) {
|
|
517
|
+
levels.push(transcodeImage(basisFile, imageIndex, levelIndex, options));
|
|
518
|
+
}
|
|
519
|
+
images.push(levels);
|
|
520
|
+
}
|
|
521
|
+
return images;
|
|
522
|
+
} finally {
|
|
523
|
+
basisFile.close();
|
|
524
|
+
basisFile.delete();
|
|
525
|
+
}
|
|
526
|
+
}
|
|
527
|
+
function transcodeImage(basisFile, imageIndex, levelIndex, options) {
|
|
528
|
+
const width = basisFile.getImageWidth(imageIndex, levelIndex);
|
|
529
|
+
const height = basisFile.getImageHeight(imageIndex, levelIndex);
|
|
530
|
+
const hasAlpha = basisFile.getHasAlpha(
|
|
531
|
+
/* imageIndex, levelIndex */
|
|
532
|
+
);
|
|
533
|
+
const { compressed, format, basisFormat } = getBasisOptions(options, hasAlpha);
|
|
534
|
+
const decodedSize = basisFile.getImageTranscodedSizeInBytes(imageIndex, levelIndex, basisFormat);
|
|
535
|
+
const decodedData = new Uint8Array(decodedSize);
|
|
536
|
+
if (!basisFile.transcodeImage(decodedData, imageIndex, levelIndex, basisFormat, 0, 0)) {
|
|
537
|
+
throw new Error("failed to start Basis transcoding");
|
|
538
|
+
}
|
|
539
|
+
return {
|
|
540
|
+
// standard loaders.gl image category payload
|
|
541
|
+
width,
|
|
542
|
+
height,
|
|
543
|
+
data: decodedData,
|
|
544
|
+
compressed,
|
|
545
|
+
format,
|
|
546
|
+
// Additional fields
|
|
547
|
+
// Add levelSize field.
|
|
548
|
+
hasAlpha
|
|
549
|
+
};
|
|
550
|
+
}
|
|
551
|
+
function parseKTX2File(KTX2File, data, options) {
|
|
552
|
+
const ktx2File = new KTX2File(new Uint8Array(data));
|
|
553
|
+
try {
|
|
554
|
+
if (!ktx2File.startTranscoding()) {
|
|
555
|
+
throw new Error("failed to start KTX2 transcoding");
|
|
556
|
+
}
|
|
557
|
+
const levelsCount = ktx2File.getLevels();
|
|
558
|
+
const levels = [];
|
|
559
|
+
for (let levelIndex = 0; levelIndex < levelsCount; levelIndex++) {
|
|
560
|
+
levels.push(transcodeKTX2Image(ktx2File, levelIndex, options));
|
|
561
|
+
break;
|
|
562
|
+
}
|
|
563
|
+
return [levels];
|
|
564
|
+
} finally {
|
|
565
|
+
ktx2File.close();
|
|
566
|
+
ktx2File.delete();
|
|
567
|
+
}
|
|
568
|
+
}
|
|
569
|
+
function transcodeKTX2Image(ktx2File, levelIndex, options) {
|
|
570
|
+
const { alphaFlag, height, width } = ktx2File.getImageLevelInfo(levelIndex, 0, 0);
|
|
571
|
+
const { compressed, format, basisFormat } = getBasisOptions(options, alphaFlag);
|
|
572
|
+
const decodedSize = ktx2File.getImageTranscodedSizeInBytes(
|
|
573
|
+
levelIndex,
|
|
574
|
+
0,
|
|
575
|
+
0,
|
|
576
|
+
basisFormat
|
|
577
|
+
);
|
|
578
|
+
const decodedData = new Uint8Array(decodedSize);
|
|
579
|
+
if (!ktx2File.transcodeImage(
|
|
580
|
+
decodedData,
|
|
581
|
+
levelIndex,
|
|
582
|
+
0,
|
|
583
|
+
0,
|
|
584
|
+
basisFormat,
|
|
585
|
+
0,
|
|
586
|
+
-1,
|
|
587
|
+
-1
|
|
588
|
+
/* channel1 */
|
|
589
|
+
)) {
|
|
590
|
+
throw new Error("Failed to transcode KTX2 image");
|
|
591
|
+
}
|
|
592
|
+
return {
|
|
593
|
+
// standard loaders.gl image category payload
|
|
594
|
+
width,
|
|
595
|
+
height,
|
|
596
|
+
data: decodedData,
|
|
597
|
+
compressed,
|
|
598
|
+
// Additional fields
|
|
599
|
+
levelSize: decodedSize,
|
|
600
|
+
hasAlpha: alphaFlag,
|
|
601
|
+
format
|
|
602
|
+
};
|
|
603
|
+
}
|
|
604
|
+
function getBasisOptions(options, hasAlpha) {
|
|
605
|
+
let format = options && options.basis && options.basis.format;
|
|
606
|
+
if (format === "auto") {
|
|
607
|
+
format = selectSupportedBasisFormat();
|
|
608
|
+
}
|
|
609
|
+
if (typeof format === "object") {
|
|
610
|
+
format = hasAlpha ? format.alpha : format.noAlpha;
|
|
611
|
+
}
|
|
612
|
+
format = format.toLowerCase();
|
|
613
|
+
return OutputFormat[format];
|
|
614
|
+
}
|
|
615
|
+
function selectSupportedBasisFormat() {
|
|
616
|
+
const supportedFormats = getSupportedGPUTextureFormats();
|
|
617
|
+
if (supportedFormats.has("astc")) {
|
|
618
|
+
return "astc-4x4";
|
|
619
|
+
} else if (supportedFormats.has("dxt")) {
|
|
620
|
+
return {
|
|
621
|
+
alpha: "bc3",
|
|
622
|
+
noAlpha: "bc1"
|
|
623
|
+
};
|
|
624
|
+
} else if (supportedFormats.has("pvrtc")) {
|
|
625
|
+
return {
|
|
626
|
+
alpha: "pvrtc1-4-rgba",
|
|
627
|
+
noAlpha: "pvrtc1-4-rgb"
|
|
628
|
+
};
|
|
629
|
+
} else if (supportedFormats.has("etc1")) {
|
|
630
|
+
return "etc1";
|
|
631
|
+
} else if (supportedFormats.has("etc2")) {
|
|
632
|
+
return "etc2";
|
|
633
|
+
}
|
|
634
|
+
return "rgb565";
|
|
635
|
+
}
|
|
636
|
+
|
|
637
|
+
// src/basis-loader.ts
|
|
638
|
+
var BasisWorkerLoader = {
|
|
639
|
+
name: "Basis",
|
|
640
|
+
id: "basis",
|
|
641
|
+
module: "textures",
|
|
642
|
+
version: VERSION,
|
|
643
|
+
worker: true,
|
|
644
|
+
extensions: ["basis", "ktx2"],
|
|
645
|
+
mimeTypes: ["application/octet-stream", "image/ktx2"],
|
|
646
|
+
tests: ["sB"],
|
|
647
|
+
binary: true,
|
|
648
|
+
options: {
|
|
649
|
+
basis: {
|
|
650
|
+
format: "auto",
|
|
651
|
+
// gl context doesn't exist on a worker thread
|
|
652
|
+
libraryPath: "libs/",
|
|
653
|
+
containerFormat: "auto",
|
|
654
|
+
// 'basis' || 'ktx2' || 'auto'
|
|
655
|
+
module: "transcoder"
|
|
656
|
+
// 'transcoder' || 'encoder'
|
|
657
|
+
}
|
|
658
|
+
}
|
|
659
|
+
};
|
|
660
|
+
var BasisLoader = {
|
|
661
|
+
...BasisWorkerLoader,
|
|
662
|
+
parse: parseBasis
|
|
663
|
+
};
|
|
664
|
+
|
|
665
|
+
// src/lib/parsers/parse-dds.ts
|
|
666
|
+
var import_loader_utils = require("@loaders.gl/loader-utils");
|
|
667
|
+
var DDS_CONSTANTS = {
|
|
668
|
+
MAGIC_NUMBER: 542327876,
|
|
669
|
+
HEADER_LENGTH: 31,
|
|
670
|
+
MAGIC_NUMBER_INDEX: 0,
|
|
671
|
+
HEADER_SIZE_INDEX: 1,
|
|
672
|
+
HEADER_FLAGS_INDEX: 2,
|
|
673
|
+
HEADER_HEIGHT_INDEX: 3,
|
|
674
|
+
HEADER_WIDTH_INDEX: 4,
|
|
675
|
+
MIPMAPCOUNT_INDEX: 7,
|
|
676
|
+
HEADER_PF_FLAGS_INDEX: 20,
|
|
677
|
+
HEADER_PF_FOURCC_INDEX: 21,
|
|
678
|
+
DDSD_MIPMAPCOUNT: 131072,
|
|
679
|
+
DDPF_FOURCC: 4
|
|
680
|
+
};
|
|
681
|
+
var DDS_PIXEL_FORMATS = {
|
|
682
|
+
DXT1: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_S3TC_DXT1_EXT,
|
|
683
|
+
DXT3: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT3_EXT,
|
|
684
|
+
DXT5: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT5_EXT,
|
|
685
|
+
"ATC ": GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_ATC_WEBGL,
|
|
686
|
+
ATCA: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL,
|
|
687
|
+
ATCI: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL
|
|
688
|
+
};
|
|
689
|
+
var getATCLevelSize = getDxt1LevelSize;
|
|
690
|
+
var getATCALevelSize = getDxtXLevelSize;
|
|
691
|
+
var getATCILevelSize = getDxtXLevelSize;
|
|
692
|
+
var DDS_SIZE_FUNCTIONS = {
|
|
693
|
+
DXT1: getDxt1LevelSize,
|
|
694
|
+
DXT3: getDxtXLevelSize,
|
|
695
|
+
DXT5: getDxtXLevelSize,
|
|
696
|
+
"ATC ": getATCLevelSize,
|
|
697
|
+
ATCA: getATCALevelSize,
|
|
698
|
+
ATCI: getATCILevelSize
|
|
699
|
+
};
|
|
700
|
+
function isDDS(data) {
|
|
701
|
+
const header = new Uint32Array(data, 0, DDS_CONSTANTS.HEADER_LENGTH);
|
|
702
|
+
const magic = header[DDS_CONSTANTS.MAGIC_NUMBER_INDEX];
|
|
703
|
+
return magic === DDS_CONSTANTS.MAGIC_NUMBER;
|
|
704
|
+
}
|
|
705
|
+
function parseDDS(data) {
|
|
706
|
+
const header = new Int32Array(data, 0, DDS_CONSTANTS.HEADER_LENGTH);
|
|
707
|
+
const pixelFormatNumber = header[DDS_CONSTANTS.HEADER_PF_FOURCC_INDEX];
|
|
708
|
+
(0, import_loader_utils.assert)(
|
|
709
|
+
Boolean(header[DDS_CONSTANTS.HEADER_PF_FLAGS_INDEX] & DDS_CONSTANTS.DDPF_FOURCC),
|
|
710
|
+
"DDS: Unsupported format, must contain a FourCC code"
|
|
711
|
+
);
|
|
712
|
+
const fourCC = int32ToFourCC(pixelFormatNumber);
|
|
713
|
+
const internalFormat = DDS_PIXEL_FORMATS[fourCC];
|
|
714
|
+
const sizeFunction = DDS_SIZE_FUNCTIONS[fourCC];
|
|
715
|
+
(0, import_loader_utils.assert)(internalFormat && sizeFunction, `DDS: Unknown pixel format ${pixelFormatNumber}`);
|
|
716
|
+
let mipMapLevels = 1;
|
|
717
|
+
if (header[DDS_CONSTANTS.HEADER_FLAGS_INDEX] & DDS_CONSTANTS.DDSD_MIPMAPCOUNT) {
|
|
718
|
+
mipMapLevels = Math.max(1, header[DDS_CONSTANTS.MIPMAPCOUNT_INDEX]);
|
|
719
|
+
}
|
|
720
|
+
const width = header[DDS_CONSTANTS.HEADER_WIDTH_INDEX];
|
|
721
|
+
const height = header[DDS_CONSTANTS.HEADER_HEIGHT_INDEX];
|
|
722
|
+
const dataOffset = header[DDS_CONSTANTS.HEADER_SIZE_INDEX] + 4;
|
|
723
|
+
const image = new Uint8Array(data, dataOffset);
|
|
724
|
+
return extractMipmapImages(image, {
|
|
725
|
+
mipMapLevels,
|
|
726
|
+
width,
|
|
727
|
+
height,
|
|
728
|
+
sizeFunction,
|
|
729
|
+
internalFormat
|
|
730
|
+
});
|
|
731
|
+
}
|
|
732
|
+
function getDxt1LevelSize(width, height) {
|
|
733
|
+
return (width + 3 >> 2) * (height + 3 >> 2) * 8;
|
|
734
|
+
}
|
|
735
|
+
function getDxtXLevelSize(width, height) {
|
|
736
|
+
return (width + 3 >> 2) * (height + 3 >> 2) * 16;
|
|
737
|
+
}
|
|
738
|
+
function int32ToFourCC(value) {
|
|
739
|
+
return String.fromCharCode(
|
|
740
|
+
value & 255,
|
|
741
|
+
value >> 8 & 255,
|
|
742
|
+
value >> 16 & 255,
|
|
743
|
+
value >> 24 & 255
|
|
744
|
+
);
|
|
745
|
+
}
|
|
746
|
+
|
|
747
|
+
// src/lib/parsers/parse-pvr.ts
|
|
748
|
+
var PVR_CONSTANTS = {
|
|
749
|
+
MAGIC_NUMBER: 55727696,
|
|
750
|
+
MAGIC_NUMBER_EXTRA: 1347834371,
|
|
751
|
+
HEADER_LENGTH: 13,
|
|
752
|
+
HEADER_SIZE: 52,
|
|
753
|
+
MAGIC_NUMBER_INDEX: 0,
|
|
754
|
+
PIXEL_FORMAT_INDEX: 2,
|
|
755
|
+
COLOUR_SPACE_INDEX: 4,
|
|
756
|
+
HEIGHT_INDEX: 6,
|
|
757
|
+
WIDTH_INDEX: 7,
|
|
758
|
+
MIPMAPCOUNT_INDEX: 11,
|
|
759
|
+
METADATA_SIZE_INDEX: 12
|
|
760
|
+
};
|
|
761
|
+
var PVR_PIXEL_FORMATS = {
|
|
762
|
+
0: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_PVRTC_2BPPV1_IMG],
|
|
763
|
+
1: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG],
|
|
764
|
+
2: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_PVRTC_4BPPV1_IMG],
|
|
765
|
+
3: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG],
|
|
766
|
+
6: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_ETC1_WEBGL],
|
|
767
|
+
7: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_S3TC_DXT1_EXT],
|
|
768
|
+
9: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT3_EXT],
|
|
769
|
+
11: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT5_EXT],
|
|
770
|
+
22: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB8_ETC2],
|
|
771
|
+
23: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA8_ETC2_EAC],
|
|
772
|
+
24: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2],
|
|
773
|
+
25: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_R11_EAC],
|
|
774
|
+
26: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RG11_EAC],
|
|
775
|
+
27: [
|
|
776
|
+
GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_4X4_KHR,
|
|
777
|
+
GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_4X4_KHR
|
|
778
|
+
],
|
|
779
|
+
28: [
|
|
780
|
+
GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_5X4_KHR,
|
|
781
|
+
GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_5X4_KHR
|
|
782
|
+
],
|
|
783
|
+
29: [
|
|
784
|
+
GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_5X5_KHR,
|
|
785
|
+
GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_5X5_KHR
|
|
786
|
+
],
|
|
787
|
+
30: [
|
|
788
|
+
GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_6X5_KHR,
|
|
789
|
+
GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_6X5_KHR
|
|
790
|
+
],
|
|
791
|
+
31: [
|
|
792
|
+
GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_6X6_KHR,
|
|
793
|
+
GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_6X6_KHR
|
|
794
|
+
],
|
|
795
|
+
32: [
|
|
796
|
+
GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_8X5_KHR,
|
|
797
|
+
GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_8X5_KHR
|
|
798
|
+
],
|
|
799
|
+
33: [
|
|
800
|
+
GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_8X6_KHR,
|
|
801
|
+
GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_8X6_KHR
|
|
802
|
+
],
|
|
803
|
+
34: [
|
|
804
|
+
GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_8X8_KHR,
|
|
805
|
+
GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_8X8_KHR
|
|
806
|
+
],
|
|
807
|
+
35: [
|
|
808
|
+
GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_10X5_KHR,
|
|
809
|
+
GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_10X5_KHR
|
|
810
|
+
],
|
|
811
|
+
36: [
|
|
812
|
+
GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_10X6_KHR,
|
|
813
|
+
GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_10X6_KHR
|
|
814
|
+
],
|
|
815
|
+
37: [
|
|
816
|
+
GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_10X8_KHR,
|
|
817
|
+
GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_10X8_KHR
|
|
818
|
+
],
|
|
819
|
+
38: [
|
|
820
|
+
GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_10X10_KHR,
|
|
821
|
+
GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_10X10_KHR
|
|
822
|
+
],
|
|
823
|
+
39: [
|
|
824
|
+
GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_12X10_KHR,
|
|
825
|
+
GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_12X10_KHR
|
|
826
|
+
],
|
|
827
|
+
40: [
|
|
828
|
+
GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_12X12_KHR,
|
|
829
|
+
GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_12X12_KHR
|
|
830
|
+
]
|
|
831
|
+
};
|
|
832
|
+
var PVR_SIZE_FUNCTIONS = {
|
|
833
|
+
0: pvrtc2bppSize,
|
|
834
|
+
1: pvrtc2bppSize,
|
|
835
|
+
2: pvrtc4bppSize,
|
|
836
|
+
3: pvrtc4bppSize,
|
|
837
|
+
6: dxtEtcSmallSize,
|
|
838
|
+
7: dxtEtcSmallSize,
|
|
839
|
+
9: dxtEtcAstcBigSize,
|
|
840
|
+
11: dxtEtcAstcBigSize,
|
|
841
|
+
22: dxtEtcSmallSize,
|
|
842
|
+
23: dxtEtcAstcBigSize,
|
|
843
|
+
24: dxtEtcSmallSize,
|
|
844
|
+
25: dxtEtcSmallSize,
|
|
845
|
+
26: dxtEtcAstcBigSize,
|
|
846
|
+
27: dxtEtcAstcBigSize,
|
|
847
|
+
28: atc5x4Size,
|
|
848
|
+
29: atc5x5Size,
|
|
849
|
+
30: atc6x5Size,
|
|
850
|
+
31: atc6x6Size,
|
|
851
|
+
32: atc8x5Size,
|
|
852
|
+
33: atc8x6Size,
|
|
853
|
+
34: atc8x8Size,
|
|
854
|
+
35: atc10x5Size,
|
|
855
|
+
36: atc10x6Size,
|
|
856
|
+
37: atc10x8Size,
|
|
857
|
+
38: atc10x10Size,
|
|
858
|
+
39: atc12x10Size,
|
|
859
|
+
40: atc12x12Size
|
|
860
|
+
};
|
|
861
|
+
function isPVR(data) {
|
|
862
|
+
const header = new Uint32Array(data, 0, PVR_CONSTANTS.HEADER_LENGTH);
|
|
863
|
+
const version = header[PVR_CONSTANTS.MAGIC_NUMBER_INDEX];
|
|
864
|
+
return version === PVR_CONSTANTS.MAGIC_NUMBER || version === PVR_CONSTANTS.MAGIC_NUMBER_EXTRA;
|
|
865
|
+
}
|
|
866
|
+
function parsePVR(data) {
|
|
867
|
+
const header = new Uint32Array(data, 0, PVR_CONSTANTS.HEADER_LENGTH);
|
|
868
|
+
const pvrFormat = header[PVR_CONSTANTS.PIXEL_FORMAT_INDEX];
|
|
869
|
+
const colourSpace = header[PVR_CONSTANTS.COLOUR_SPACE_INDEX];
|
|
870
|
+
const pixelFormats = PVR_PIXEL_FORMATS[pvrFormat] || [];
|
|
871
|
+
const internalFormat = pixelFormats.length > 1 && colourSpace ? pixelFormats[1] : pixelFormats[0];
|
|
872
|
+
const sizeFunction = PVR_SIZE_FUNCTIONS[pvrFormat];
|
|
873
|
+
const mipMapLevels = header[PVR_CONSTANTS.MIPMAPCOUNT_INDEX];
|
|
874
|
+
const width = header[PVR_CONSTANTS.WIDTH_INDEX];
|
|
875
|
+
const height = header[PVR_CONSTANTS.HEIGHT_INDEX];
|
|
876
|
+
const dataOffset = PVR_CONSTANTS.HEADER_SIZE + header[PVR_CONSTANTS.METADATA_SIZE_INDEX];
|
|
877
|
+
const image = new Uint8Array(data, dataOffset);
|
|
878
|
+
return extractMipmapImages(image, {
|
|
879
|
+
mipMapLevels,
|
|
880
|
+
width,
|
|
881
|
+
height,
|
|
882
|
+
sizeFunction,
|
|
883
|
+
internalFormat
|
|
884
|
+
});
|
|
885
|
+
}
|
|
886
|
+
function pvrtc2bppSize(width, height) {
|
|
887
|
+
width = Math.max(width, 16);
|
|
888
|
+
height = Math.max(height, 8);
|
|
889
|
+
return width * height / 4;
|
|
890
|
+
}
|
|
891
|
+
function pvrtc4bppSize(width, height) {
|
|
892
|
+
width = Math.max(width, 8);
|
|
893
|
+
height = Math.max(height, 8);
|
|
894
|
+
return width * height / 2;
|
|
895
|
+
}
|
|
896
|
+
function dxtEtcSmallSize(width, height) {
|
|
897
|
+
return Math.floor((width + 3) / 4) * Math.floor((height + 3) / 4) * 8;
|
|
898
|
+
}
|
|
899
|
+
function dxtEtcAstcBigSize(width, height) {
|
|
900
|
+
return Math.floor((width + 3) / 4) * Math.floor((height + 3) / 4) * 16;
|
|
901
|
+
}
|
|
902
|
+
function atc5x4Size(width, height) {
|
|
903
|
+
return Math.floor((width + 4) / 5) * Math.floor((height + 3) / 4) * 16;
|
|
904
|
+
}
|
|
905
|
+
function atc5x5Size(width, height) {
|
|
906
|
+
return Math.floor((width + 4) / 5) * Math.floor((height + 4) / 5) * 16;
|
|
907
|
+
}
|
|
908
|
+
function atc6x5Size(width, height) {
|
|
909
|
+
return Math.floor((width + 5) / 6) * Math.floor((height + 4) / 5) * 16;
|
|
910
|
+
}
|
|
911
|
+
function atc6x6Size(width, height) {
|
|
912
|
+
return Math.floor((width + 5) / 6) * Math.floor((height + 5) / 6) * 16;
|
|
913
|
+
}
|
|
914
|
+
function atc8x5Size(width, height) {
|
|
915
|
+
return Math.floor((width + 7) / 8) * Math.floor((height + 4) / 5) * 16;
|
|
916
|
+
}
|
|
917
|
+
function atc8x6Size(width, height) {
|
|
918
|
+
return Math.floor((width + 7) / 8) * Math.floor((height + 5) / 6) * 16;
|
|
919
|
+
}
|
|
920
|
+
function atc8x8Size(width, height) {
|
|
921
|
+
return Math.floor((width + 7) / 8) * Math.floor((height + 7) / 8) * 16;
|
|
922
|
+
}
|
|
923
|
+
function atc10x5Size(width, height) {
|
|
924
|
+
return Math.floor((width + 9) / 10) * Math.floor((height + 4) / 5) * 16;
|
|
925
|
+
}
|
|
926
|
+
function atc10x6Size(width, height) {
|
|
927
|
+
return Math.floor((width + 9) / 10) * Math.floor((height + 5) / 6) * 16;
|
|
928
|
+
}
|
|
929
|
+
function atc10x8Size(width, height) {
|
|
930
|
+
return Math.floor((width + 9) / 10) * Math.floor((height + 7) / 8) * 16;
|
|
931
|
+
}
|
|
932
|
+
function atc10x10Size(width, height) {
|
|
933
|
+
return Math.floor((width + 9) / 10) * Math.floor((height + 9) / 10) * 16;
|
|
934
|
+
}
|
|
935
|
+
function atc12x10Size(width, height) {
|
|
936
|
+
return Math.floor((width + 11) / 12) * Math.floor((height + 9) / 10) * 16;
|
|
937
|
+
}
|
|
938
|
+
function atc12x12Size(width, height) {
|
|
939
|
+
return Math.floor((width + 11) / 12) * Math.floor((height + 11) / 12) * 16;
|
|
940
|
+
}
|
|
941
|
+
|
|
942
|
+
// src/lib/parsers/parse-compressed-texture.ts
|
|
943
|
+
function parseCompressedTexture(data) {
|
|
944
|
+
if (isKTX(data)) {
|
|
945
|
+
return parseKTX(data);
|
|
946
|
+
}
|
|
947
|
+
if (isDDS(data)) {
|
|
948
|
+
return parseDDS(data);
|
|
949
|
+
}
|
|
950
|
+
if (isPVR(data)) {
|
|
951
|
+
return parsePVR(data);
|
|
952
|
+
}
|
|
953
|
+
throw new Error("Texture container format not recognized");
|
|
954
|
+
}
|
|
955
|
+
|
|
956
|
+
// src/compressed-texture-loader.ts
|
|
957
|
+
var CompressedTextureWorkerLoader = {
|
|
958
|
+
name: "Texture Containers",
|
|
959
|
+
id: "compressed-texture",
|
|
960
|
+
module: "textures",
|
|
961
|
+
version: VERSION,
|
|
962
|
+
worker: true,
|
|
963
|
+
extensions: [
|
|
964
|
+
"ktx",
|
|
965
|
+
"ktx2",
|
|
966
|
+
"dds",
|
|
967
|
+
// WEBGL_compressed_texture_s3tc, WEBGL_compressed_texture_atc
|
|
968
|
+
"pvr"
|
|
969
|
+
// WEBGL_compressed_texture_pvrtc
|
|
970
|
+
],
|
|
971
|
+
mimeTypes: [
|
|
972
|
+
"image/ktx2",
|
|
973
|
+
"image/ktx",
|
|
974
|
+
"image/vnd-ms.dds",
|
|
975
|
+
"image/x-dds",
|
|
976
|
+
"application/octet-stream"
|
|
977
|
+
],
|
|
978
|
+
binary: true,
|
|
979
|
+
options: {
|
|
980
|
+
"compressed-texture": {
|
|
981
|
+
libraryPath: "libs/",
|
|
982
|
+
useBasis: false
|
|
983
|
+
}
|
|
984
|
+
}
|
|
985
|
+
};
|
|
986
|
+
var CompressedTextureLoader = {
|
|
987
|
+
...CompressedTextureWorkerLoader,
|
|
988
|
+
parse: async (arrayBuffer, options) => {
|
|
989
|
+
var _a;
|
|
990
|
+
if ((_a = options == null ? void 0 : options["compressed-texture"]) == null ? void 0 : _a.useBasis) {
|
|
991
|
+
options.basis = {
|
|
992
|
+
format: {
|
|
993
|
+
alpha: "BC3",
|
|
994
|
+
noAlpha: "BC1"
|
|
995
|
+
},
|
|
996
|
+
// @ts-expect-error TODO not allowed to modify inputs
|
|
997
|
+
...options.basis,
|
|
998
|
+
containerFormat: "ktx2",
|
|
999
|
+
module: "encoder"
|
|
1000
|
+
};
|
|
1001
|
+
const result = await parseBasis(arrayBuffer, options);
|
|
1002
|
+
return result[0];
|
|
1003
|
+
}
|
|
1004
|
+
return parseCompressedTexture(arrayBuffer);
|
|
1005
|
+
}
|
|
1006
|
+
};
|
|
1007
|
+
|
|
1008
|
+
// src/crunch-loader.ts
|
|
1009
|
+
var CrunchLoader = {
|
|
1010
|
+
id: "crunch",
|
|
1011
|
+
name: "Crunch",
|
|
1012
|
+
module: "textures",
|
|
1013
|
+
version: VERSION,
|
|
1014
|
+
worker: true,
|
|
1015
|
+
extensions: ["crn"],
|
|
1016
|
+
mimeTypes: ["image/crn", "image/x-crn", "application/octet-stream"],
|
|
1017
|
+
binary: true,
|
|
1018
|
+
options: {
|
|
1019
|
+
crunch: {
|
|
1020
|
+
libraryPath: "libs/"
|
|
1021
|
+
}
|
|
1022
|
+
}
|
|
1023
|
+
};
|
|
1024
|
+
|
|
1025
|
+
// src/lib/parsers/parse-npy.ts
|
|
1026
|
+
var a = new Uint32Array([305419896]);
|
|
1027
|
+
var b = new Uint8Array(a.buffer, a.byteOffset, a.byteLength);
|
|
1028
|
+
var isLittleEndian = !(b[0] === 18);
|
|
1029
|
+
var LITTLE_ENDIAN_OS = isLittleEndian;
|
|
1030
|
+
var DTYPES = {
|
|
1031
|
+
u1: Uint8Array,
|
|
1032
|
+
i1: Int8Array,
|
|
1033
|
+
u2: Uint16Array,
|
|
1034
|
+
i2: Int16Array,
|
|
1035
|
+
u4: Uint32Array,
|
|
1036
|
+
i4: Int32Array,
|
|
1037
|
+
f4: Float32Array,
|
|
1038
|
+
f8: Float64Array
|
|
1039
|
+
};
|
|
1040
|
+
function parseNPY(arrayBuffer, options) {
|
|
1041
|
+
var _a;
|
|
1042
|
+
const view = new DataView(arrayBuffer);
|
|
1043
|
+
const { header, headerEndOffset } = parseHeader(view);
|
|
1044
|
+
const numpyType = header.descr;
|
|
1045
|
+
const ArrayType = DTYPES[numpyType.slice(1, 3)];
|
|
1046
|
+
if (!ArrayType) {
|
|
1047
|
+
throw new Error(`Unimplemented type ${numpyType}`);
|
|
1048
|
+
}
|
|
1049
|
+
const nArrayElements = (_a = header.shape) == null ? void 0 : _a.reduce((a2, b2) => a2 * b2);
|
|
1050
|
+
const arrayByteLength = nArrayElements * ArrayType.BYTES_PER_ELEMENT;
|
|
1051
|
+
if (arrayBuffer.byteLength < headerEndOffset + arrayByteLength) {
|
|
1052
|
+
throw new Error("Buffer overflow");
|
|
1053
|
+
}
|
|
1054
|
+
const data = new ArrayType(arrayBuffer.slice(headerEndOffset, headerEndOffset + arrayByteLength));
|
|
1055
|
+
if (numpyType[0] === ">" && LITTLE_ENDIAN_OS || numpyType[0] === "<" && !LITTLE_ENDIAN_OS) {
|
|
1056
|
+
throw new Error("Incorrect endianness");
|
|
1057
|
+
}
|
|
1058
|
+
return {
|
|
1059
|
+
data,
|
|
1060
|
+
header
|
|
1061
|
+
};
|
|
1062
|
+
}
|
|
1063
|
+
function parseHeader(view) {
|
|
1064
|
+
const majorVersion = view.getUint8(6);
|
|
1065
|
+
let offset = 8;
|
|
1066
|
+
let headerLength;
|
|
1067
|
+
if (majorVersion >= 2) {
|
|
1068
|
+
headerLength = view.getUint32(offset, true);
|
|
1069
|
+
offset += 4;
|
|
1070
|
+
} else {
|
|
1071
|
+
headerLength = view.getUint16(offset, true);
|
|
1072
|
+
offset += 2;
|
|
1073
|
+
}
|
|
1074
|
+
const encoding = majorVersion <= 2 ? "latin1" : "utf-8";
|
|
1075
|
+
const decoder = new TextDecoder(encoding);
|
|
1076
|
+
const headerArray = new Uint8Array(view.buffer, offset, headerLength);
|
|
1077
|
+
const headerText = decoder.decode(headerArray);
|
|
1078
|
+
offset += headerLength;
|
|
1079
|
+
const header = JSON.parse(
|
|
1080
|
+
headerText.replace(/'/g, '"').replace("False", "false").replace("(", "[").replace(/,*\),*/g, "]")
|
|
1081
|
+
);
|
|
1082
|
+
return { header, headerEndOffset: offset };
|
|
1083
|
+
}
|
|
1084
|
+
|
|
1085
|
+
// src/npy-loader.ts
|
|
1086
|
+
var NPY_MAGIC_NUMBER = new Uint8Array([147, 78, 85, 77, 80, 89]);
|
|
1087
|
+
var NPYWorkerLoader = {
|
|
1088
|
+
name: "NPY",
|
|
1089
|
+
id: "npy",
|
|
1090
|
+
module: "textures",
|
|
1091
|
+
version: VERSION,
|
|
1092
|
+
worker: true,
|
|
1093
|
+
extensions: ["npy"],
|
|
1094
|
+
mimeTypes: [],
|
|
1095
|
+
tests: [NPY_MAGIC_NUMBER.buffer],
|
|
1096
|
+
options: {
|
|
1097
|
+
npy: {}
|
|
1098
|
+
}
|
|
1099
|
+
};
|
|
1100
|
+
var NPYLoader = {
|
|
1101
|
+
...NPYWorkerLoader,
|
|
1102
|
+
parseSync: parseNPY,
|
|
1103
|
+
parse: async (arrayBuffer, options) => parseNPY(arrayBuffer, options)
|
|
1104
|
+
};
|
|
1105
|
+
|
|
1106
|
+
// src/lib/parsers/crunch-module-loader.ts
|
|
1107
|
+
var import_worker_utils2 = require("@loaders.gl/worker-utils");
|
|
1108
|
+
var CRUNCH_EXTERNAL_LIBRARIES = {
|
|
1109
|
+
/** Crunch decoder library. It is used as dynamically imported script */
|
|
1110
|
+
DECODER: "crunch.js"
|
|
1111
|
+
};
|
|
1112
|
+
|
|
1113
|
+
// src/lib/encoders/encode-texture.ts
|
|
1114
|
+
var import_worker_utils3 = require("@loaders.gl/worker-utils");
|
|
1115
|
+
async function encodeImageURLToCompressedTextureURL(inputUrl, outputUrl, options) {
|
|
1116
|
+
const args = [
|
|
1117
|
+
// Note: our actual executable is `npx`, so `texture-compressor` is an argument
|
|
1118
|
+
"texture-compressor",
|
|
1119
|
+
"--type",
|
|
1120
|
+
"s3tc",
|
|
1121
|
+
"--compression",
|
|
1122
|
+
"DXT1",
|
|
1123
|
+
"--quality",
|
|
1124
|
+
"normal",
|
|
1125
|
+
"--input",
|
|
1126
|
+
inputUrl,
|
|
1127
|
+
"--output",
|
|
1128
|
+
outputUrl
|
|
1129
|
+
];
|
|
1130
|
+
const childProcess = new import_worker_utils3.ChildProcessProxy();
|
|
1131
|
+
await childProcess.start({
|
|
1132
|
+
command: "npx",
|
|
1133
|
+
arguments: args,
|
|
1134
|
+
spawn: options
|
|
1135
|
+
});
|
|
1136
|
+
return outputUrl;
|
|
1137
|
+
}
|
|
1138
|
+
|
|
1139
|
+
// src/compressed-texture-writer.ts
|
|
1140
|
+
var CompressedTextureWriter = {
|
|
1141
|
+
name: "DDS Texture Container",
|
|
1142
|
+
id: "dds",
|
|
1143
|
+
module: "textures",
|
|
1144
|
+
version: VERSION,
|
|
1145
|
+
extensions: ["dds"],
|
|
1146
|
+
options: {
|
|
1147
|
+
texture: {
|
|
1148
|
+
format: "auto",
|
|
1149
|
+
compression: "auto",
|
|
1150
|
+
quality: "auto",
|
|
1151
|
+
mipmap: false,
|
|
1152
|
+
flipY: false,
|
|
1153
|
+
toolFlags: ""
|
|
1154
|
+
}
|
|
1155
|
+
},
|
|
1156
|
+
encodeURLtoURL: encodeImageURLToCompressedTextureURL
|
|
1157
|
+
};
|
|
1158
|
+
|
|
1159
|
+
// src/lib/encoders/encode-ktx2-basis-texture.ts
|
|
1160
|
+
async function encodeKTX2BasisTexture(image, options = {}) {
|
|
1161
|
+
const {
|
|
1162
|
+
useSRGB = false,
|
|
1163
|
+
qualityLevel = 10,
|
|
1164
|
+
encodeUASTC = false,
|
|
1165
|
+
mipmaps = false
|
|
1166
|
+
} = (options == null ? void 0 : options["ktx2-basis-writer"]) || {};
|
|
1167
|
+
const { BasisEncoder } = await loadBasisEncoderModule(options);
|
|
1168
|
+
const basisEncoder = new BasisEncoder();
|
|
1169
|
+
try {
|
|
1170
|
+
const basisFileData = new Uint8Array(image.width * image.height * 4);
|
|
1171
|
+
basisEncoder.setCreateKTX2File(true);
|
|
1172
|
+
basisEncoder.setKTX2UASTCSupercompression(true);
|
|
1173
|
+
basisEncoder.setKTX2SRGBTransferFunc(true);
|
|
1174
|
+
basisEncoder.setSliceSourceImage(0, image.data, image.width, image.height, false);
|
|
1175
|
+
basisEncoder.setPerceptual(useSRGB);
|
|
1176
|
+
basisEncoder.setMipSRGB(useSRGB);
|
|
1177
|
+
basisEncoder.setQualityLevel(qualityLevel);
|
|
1178
|
+
basisEncoder.setUASTC(encodeUASTC);
|
|
1179
|
+
basisEncoder.setMipGen(mipmaps);
|
|
1180
|
+
const numOutputBytes = basisEncoder.encode(basisFileData);
|
|
1181
|
+
const actualKTX2FileData = basisFileData.subarray(0, numOutputBytes).buffer;
|
|
1182
|
+
return actualKTX2FileData;
|
|
1183
|
+
} catch (error) {
|
|
1184
|
+
console.error("Basis Universal Supercompressed GPU Texture encoder Error: ", error);
|
|
1185
|
+
throw error;
|
|
1186
|
+
} finally {
|
|
1187
|
+
basisEncoder.delete();
|
|
1188
|
+
}
|
|
1189
|
+
}
|
|
1190
|
+
|
|
1191
|
+
// src/ktx2-basis-writer.ts
|
|
1192
|
+
var KTX2BasisWriter = {
|
|
1193
|
+
name: "Basis Universal Supercompressed GPU Texture",
|
|
1194
|
+
id: "ktx2-basis-writer",
|
|
1195
|
+
module: "textures",
|
|
1196
|
+
version: VERSION,
|
|
1197
|
+
extensions: ["ktx2"],
|
|
1198
|
+
options: {
|
|
1199
|
+
["ktx2-basis-writer"]: {
|
|
1200
|
+
useSRGB: false,
|
|
1201
|
+
qualityLevel: 10,
|
|
1202
|
+
encodeUASTC: false,
|
|
1203
|
+
mipmaps: false
|
|
1204
|
+
}
|
|
1205
|
+
},
|
|
1206
|
+
encode: encodeKTX2BasisTexture
|
|
1207
|
+
};
|
|
1208
|
+
|
|
1209
|
+
// src/lib/texture-api/load-image.ts
|
|
1210
|
+
var import_loader_utils3 = require("@loaders.gl/loader-utils");
|
|
1211
|
+
var import_images = require("@loaders.gl/images");
|
|
1212
|
+
|
|
1213
|
+
// src/lib/texture-api/generate-url.ts
|
|
1214
|
+
var import_loader_utils2 = require("@loaders.gl/loader-utils");
|
|
1215
|
+
function generateUrl(getUrl, options, urlOptions) {
|
|
1216
|
+
let url = typeof getUrl === "function" ? getUrl({ ...options, ...urlOptions }) : getUrl;
|
|
1217
|
+
const baseUrl = options.baseUrl;
|
|
1218
|
+
if (baseUrl) {
|
|
1219
|
+
url = baseUrl[baseUrl.length - 1] === "/" ? `${baseUrl}${url}` : `${baseUrl}/${url}`;
|
|
1220
|
+
}
|
|
1221
|
+
return (0, import_loader_utils2.resolvePath)(url);
|
|
1222
|
+
}
|
|
1223
|
+
|
|
1224
|
+
// src/lib/texture-api/async-deep-map.ts
|
|
1225
|
+
var isObject = (value) => value && typeof value === "object";
|
|
1226
|
+
async function asyncDeepMap(tree, func, options = {}) {
|
|
1227
|
+
return await mapSubtree(tree, func, options);
|
|
1228
|
+
}
|
|
1229
|
+
async function mapSubtree(object, func, options) {
|
|
1230
|
+
if (Array.isArray(object)) {
|
|
1231
|
+
return await mapArray(object, func, options);
|
|
1232
|
+
}
|
|
1233
|
+
if (isObject(object)) {
|
|
1234
|
+
return await mapObject(object, func, options);
|
|
1235
|
+
}
|
|
1236
|
+
const url = object;
|
|
1237
|
+
return await func(url, options);
|
|
1238
|
+
}
|
|
1239
|
+
async function mapObject(object, func, options) {
|
|
1240
|
+
const promises = [];
|
|
1241
|
+
const values = {};
|
|
1242
|
+
for (const key in object) {
|
|
1243
|
+
const url = object[key];
|
|
1244
|
+
const promise = mapSubtree(url, func, options).then((value) => {
|
|
1245
|
+
values[key] = value;
|
|
1246
|
+
});
|
|
1247
|
+
promises.push(promise);
|
|
1248
|
+
}
|
|
1249
|
+
await Promise.all(promises);
|
|
1250
|
+
return values;
|
|
1251
|
+
}
|
|
1252
|
+
async function mapArray(urlArray, func, options = {}) {
|
|
1253
|
+
const promises = urlArray.map((url) => mapSubtree(url, func, options));
|
|
1254
|
+
return await Promise.all(promises);
|
|
1255
|
+
}
|
|
1256
|
+
|
|
1257
|
+
// src/lib/texture-api/deep-load.ts
|
|
1258
|
+
async function deepLoad(urlTree, load, options) {
|
|
1259
|
+
return await asyncDeepMap(urlTree, (url) => shallowLoad(url, load, options));
|
|
1260
|
+
}
|
|
1261
|
+
async function shallowLoad(url, load, options) {
|
|
1262
|
+
const response = await fetch(url, options.fetch);
|
|
1263
|
+
const arrayBuffer = await response.arrayBuffer();
|
|
1264
|
+
return await load(arrayBuffer, options);
|
|
1265
|
+
}
|
|
1266
|
+
|
|
1267
|
+
// src/lib/texture-api/load-image.ts
|
|
1268
|
+
async function loadImageTexture(getUrl, options = {}) {
|
|
1269
|
+
const imageUrls = await getImageUrls(getUrl, options);
|
|
1270
|
+
return await deepLoad(imageUrls, import_images.ImageLoader.parse, options);
|
|
1271
|
+
}
|
|
1272
|
+
async function getImageUrls(getUrl, options, urlOptions = {}) {
|
|
1273
|
+
const mipLevels = options && options.image && options.image.mipLevels || 0;
|
|
1274
|
+
return mipLevels !== 0 ? await getMipmappedImageUrls(getUrl, mipLevels, options, urlOptions) : generateUrl(getUrl, options, urlOptions);
|
|
1275
|
+
}
|
|
1276
|
+
async function getMipmappedImageUrls(getUrl, mipLevels, options, urlOptions) {
|
|
1277
|
+
const urls = [];
|
|
1278
|
+
if (mipLevels === "auto") {
|
|
1279
|
+
const url = generateUrl(getUrl, options, { ...urlOptions, lod: 0 });
|
|
1280
|
+
const image = await shallowLoad(url, import_images.ImageLoader.parse, options);
|
|
1281
|
+
const { width, height } = (0, import_images.getImageSize)(image);
|
|
1282
|
+
mipLevels = getMipLevels({ width, height });
|
|
1283
|
+
urls.push(url);
|
|
1284
|
+
}
|
|
1285
|
+
(0, import_loader_utils3.assert)(mipLevels > 0);
|
|
1286
|
+
for (let mipLevel = urls.length; mipLevel < mipLevels; ++mipLevel) {
|
|
1287
|
+
const url = generateUrl(getUrl, options, { ...urlOptions, lod: mipLevel });
|
|
1288
|
+
urls.push(url);
|
|
1289
|
+
}
|
|
1290
|
+
return urls;
|
|
1291
|
+
}
|
|
1292
|
+
function getMipLevels(size) {
|
|
1293
|
+
return 1 + Math.floor(Math.log2(Math.max(size.width, size.height)));
|
|
1294
|
+
}
|
|
1295
|
+
|
|
1296
|
+
// src/lib/texture-api/load-image-array.ts
|
|
1297
|
+
var import_images2 = require("@loaders.gl/images");
|
|
1298
|
+
async function loadImageTextureArray(count, getUrl, options = {}) {
|
|
1299
|
+
const imageUrls = await getImageArrayUrls(count, getUrl, options);
|
|
1300
|
+
return await deepLoad(imageUrls, import_images2.ImageLoader.parse, options);
|
|
1301
|
+
}
|
|
1302
|
+
async function getImageArrayUrls(count, getUrl, options = {}) {
|
|
1303
|
+
const promises = [];
|
|
1304
|
+
for (let index = 0; index < count; index++) {
|
|
1305
|
+
const promise = getImageUrls(getUrl, options, { index });
|
|
1306
|
+
promises.push(promise);
|
|
1307
|
+
}
|
|
1308
|
+
return await Promise.all(promises);
|
|
1309
|
+
}
|
|
1310
|
+
|
|
1311
|
+
// src/lib/texture-api/load-image-cube.ts
|
|
1312
|
+
var import_images3 = require("@loaders.gl/images");
|
|
1313
|
+
var GL_TEXTURE_CUBE_MAP_POSITIVE_X = 34069;
|
|
1314
|
+
var GL_TEXTURE_CUBE_MAP_NEGATIVE_X = 34070;
|
|
1315
|
+
var GL_TEXTURE_CUBE_MAP_POSITIVE_Y = 34071;
|
|
1316
|
+
var GL_TEXTURE_CUBE_MAP_NEGATIVE_Y = 34072;
|
|
1317
|
+
var GL_TEXTURE_CUBE_MAP_POSITIVE_Z = 34073;
|
|
1318
|
+
var GL_TEXTURE_CUBE_MAP_NEGATIVE_Z = 34074;
|
|
1319
|
+
var CUBE_FACES = [
|
|
1320
|
+
{ face: GL_TEXTURE_CUBE_MAP_POSITIVE_X, direction: "right", axis: "x", sign: "positive" },
|
|
1321
|
+
{ face: GL_TEXTURE_CUBE_MAP_NEGATIVE_X, direction: "left", axis: "x", sign: "negative" },
|
|
1322
|
+
{ face: GL_TEXTURE_CUBE_MAP_POSITIVE_Y, direction: "top", axis: "y", sign: "positive" },
|
|
1323
|
+
{ face: GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, direction: "bottom", axis: "y", sign: "negative" },
|
|
1324
|
+
{ face: GL_TEXTURE_CUBE_MAP_POSITIVE_Z, direction: "front", axis: "z", sign: "positive" },
|
|
1325
|
+
{ face: GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, direction: "back", axis: "z", sign: "negative" }
|
|
1326
|
+
];
|
|
1327
|
+
async function getImageCubeUrls(getUrl, options) {
|
|
1328
|
+
const urls = {};
|
|
1329
|
+
const promises = [];
|
|
1330
|
+
let index = 0;
|
|
1331
|
+
for (let i = 0; i < CUBE_FACES.length; ++i) {
|
|
1332
|
+
const face = CUBE_FACES[index];
|
|
1333
|
+
const promise = getImageUrls(getUrl, options, { ...face, index: index++ }).then((url) => {
|
|
1334
|
+
urls[face.face] = url;
|
|
1335
|
+
});
|
|
1336
|
+
promises.push(promise);
|
|
1337
|
+
}
|
|
1338
|
+
await Promise.all(promises);
|
|
1339
|
+
return urls;
|
|
1340
|
+
}
|
|
1341
|
+
async function loadImageTextureCube(getUrl, options = {}) {
|
|
1342
|
+
const urls = await getImageCubeUrls(getUrl, options);
|
|
1343
|
+
return await deepLoad(urls, import_images3.ImageLoader.parse, options);
|
|
1344
|
+
}
|
|
1345
|
+
|
|
1346
|
+
// src/index.ts
|
|
1347
|
+
var KTX2BasisWriterWorker = {
|
|
1348
|
+
name: "Basis Universal Supercompressed GPU Texture",
|
|
1349
|
+
id: "ktx2-basis-writer",
|
|
1350
|
+
module: "textures",
|
|
1351
|
+
version: VERSION,
|
|
1352
|
+
extensions: ["ktx2"],
|
|
1353
|
+
worker: true,
|
|
1354
|
+
options: {
|
|
1355
|
+
useSRGB: false,
|
|
1356
|
+
qualityLevel: 10,
|
|
1357
|
+
encodeUASTC: false,
|
|
1358
|
+
mipmaps: false
|
|
1359
|
+
}
|
|
1360
|
+
};
|