@loaders.gl/textures 3.1.7 → 3.2.0-alpha.2

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 (152) hide show
  1. package/dist/basis-worker.js +57 -26
  2. package/dist/compressed-texture-loader.d.ts +1 -1
  3. package/dist/compressed-texture-loader.js +1 -1
  4. package/dist/compressed-texture-worker.js +58 -27
  5. package/dist/compressed-texture-writer.d.ts +15 -2
  6. package/dist/compressed-texture-writer.d.ts.map +1 -1
  7. package/dist/crunch-worker.js +61 -29
  8. package/dist/dist.min.js +147 -130
  9. package/dist/es5/compressed-texture-loader.js +1 -1
  10. package/dist/es5/compressed-texture-loader.js.map +1 -1
  11. package/dist/es5/compressed-texture-writer.js.map +1 -1
  12. package/dist/es5/index.js +23 -3
  13. package/dist/es5/index.js.map +1 -1
  14. package/dist/es5/ktx2-basis-writer-nodejs.js +16 -0
  15. package/dist/es5/ktx2-basis-writer-nodejs.js.map +1 -0
  16. package/dist/es5/{ktx2-basis-universal-texture-writer.js → ktx2-basis-writer.js} +6 -6
  17. package/dist/es5/ktx2-basis-writer.js.map +1 -0
  18. package/dist/es5/lib/encoders/encode-texture.js.map +1 -1
  19. package/dist/es5/lib/parsers/basis-module-loader.js +1 -1
  20. package/dist/es5/lib/parsers/basis-module-loader.js.map +1 -1
  21. package/dist/es5/lib/parsers/parse-basis.js +8 -8
  22. package/dist/es5/lib/parsers/parse-basis.js.map +1 -1
  23. package/dist/es5/lib/parsers/parse-compressed-texture.js.map +1 -1
  24. package/dist/es5/lib/parsers/parse-crunch.js +8 -7
  25. package/dist/es5/lib/parsers/parse-crunch.js.map +1 -1
  26. package/dist/es5/lib/parsers/parse-dds.js.map +1 -1
  27. package/dist/es5/lib/parsers/parse-ktx.js.map +1 -1
  28. package/dist/es5/lib/parsers/parse-npy.js.map +1 -1
  29. package/dist/es5/lib/parsers/parse-pvr.js.map +1 -1
  30. package/dist/es5/lib/utils/extract-mipmap-images.js.map +1 -1
  31. package/dist/es5/lib/utils/texture-formats.js.map +1 -1
  32. package/dist/es5/lib/utils/version.js +1 -1
  33. package/dist/es5/lib/utils/version.js.map +1 -1
  34. package/dist/es5/libs/basis_encoder.js +20 -21
  35. package/dist/es5/libs/basis_encoder.wasm +0 -0
  36. package/dist/es5/libs/basis_transcoder.js +14 -13
  37. package/dist/es5/libs/basis_transcoder.wasm +0 -0
  38. package/dist/es5/workers/ktx2-basis-writer-nodejs-worker.js +70 -0
  39. package/dist/es5/workers/ktx2-basis-writer-nodejs-worker.js.map +1 -0
  40. package/dist/es5/workers/ktx2-basis-writer-worker.js +70 -0
  41. package/dist/es5/workers/ktx2-basis-writer-worker.js.map +1 -0
  42. package/dist/esm/compressed-texture-loader.js +1 -1
  43. package/dist/esm/compressed-texture-loader.js.map +1 -1
  44. package/dist/esm/compressed-texture-writer.js.map +1 -1
  45. package/dist/esm/index.js +16 -1
  46. package/dist/esm/index.js.map +1 -1
  47. package/dist/esm/ktx2-basis-writer-nodejs.js +3 -0
  48. package/dist/esm/ktx2-basis-writer-nodejs.js.map +1 -0
  49. package/dist/esm/{ktx2-basis-universal-texture-writer.js → ktx2-basis-writer.js} +4 -4
  50. package/dist/esm/ktx2-basis-writer.js.map +1 -0
  51. package/dist/esm/lib/encoders/encode-texture.js.map +1 -1
  52. package/dist/esm/lib/parsers/basis-module-loader.js +1 -1
  53. package/dist/esm/lib/parsers/basis-module-loader.js.map +1 -1
  54. package/dist/esm/lib/parsers/parse-basis.js +8 -8
  55. package/dist/esm/lib/parsers/parse-basis.js.map +1 -1
  56. package/dist/esm/lib/parsers/parse-compressed-texture.js.map +1 -1
  57. package/dist/esm/lib/parsers/parse-crunch.js +13 -12
  58. package/dist/esm/lib/parsers/parse-crunch.js.map +1 -1
  59. package/dist/esm/lib/parsers/parse-dds.js.map +1 -1
  60. package/dist/esm/lib/parsers/parse-ktx.js.map +1 -1
  61. package/dist/esm/lib/parsers/parse-npy.js.map +1 -1
  62. package/dist/esm/lib/parsers/parse-pvr.js.map +1 -1
  63. package/dist/esm/lib/utils/extract-mipmap-images.js.map +1 -1
  64. package/dist/esm/lib/utils/texture-formats.js.map +1 -1
  65. package/dist/esm/lib/utils/version.js +1 -1
  66. package/dist/esm/lib/utils/version.js.map +1 -1
  67. package/dist/esm/libs/basis_encoder.js +20 -21
  68. package/dist/esm/libs/basis_encoder.wasm +0 -0
  69. package/dist/esm/libs/basis_transcoder.js +14 -13
  70. package/dist/esm/libs/basis_transcoder.wasm +0 -0
  71. package/dist/esm/types.js +1 -1
  72. package/dist/esm/workers/ktx2-basis-writer-nodejs-worker.js +34 -0
  73. package/dist/esm/workers/ktx2-basis-writer-nodejs-worker.js.map +1 -0
  74. package/dist/esm/workers/ktx2-basis-writer-worker.js +34 -0
  75. package/dist/esm/workers/ktx2-basis-writer-worker.js.map +1 -0
  76. package/dist/index.d.ts +15 -2
  77. package/dist/index.d.ts.map +1 -1
  78. package/dist/index.js +18 -3
  79. package/dist/ktx2-basis-writer-nodejs-worker.js +66438 -0
  80. package/dist/ktx2-basis-writer-nodejs.d.ts +3 -0
  81. package/dist/ktx2-basis-writer-nodejs.d.ts.map +1 -0
  82. package/dist/ktx2-basis-writer-nodejs.js +7 -0
  83. package/dist/ktx2-basis-writer-worker.js +343 -0
  84. package/dist/{ktx2-basis-universal-texture-writer.d.ts → ktx2-basis-writer.d.ts} +2 -2
  85. package/dist/ktx2-basis-writer.d.ts.map +1 -0
  86. package/dist/{ktx2-basis-universal-texture-writer.js → ktx2-basis-writer.js} +4 -4
  87. package/dist/lib/encoders/encode-texture.d.ts +2 -3
  88. package/dist/lib/encoders/encode-texture.d.ts.map +1 -1
  89. package/dist/lib/parsers/basis-module-loader.js +1 -1
  90. package/dist/lib/parsers/parse-basis.d.ts +8 -6
  91. package/dist/lib/parsers/parse-basis.d.ts.map +1 -1
  92. package/dist/lib/parsers/parse-basis.js +25 -25
  93. package/dist/lib/parsers/parse-compressed-texture.d.ts +1 -1
  94. package/dist/lib/parsers/parse-compressed-texture.d.ts.map +1 -1
  95. package/dist/lib/parsers/parse-crunch.d.ts +1 -1
  96. package/dist/lib/parsers/parse-crunch.d.ts.map +1 -1
  97. package/dist/lib/parsers/parse-crunch.js +14 -13
  98. package/dist/lib/parsers/parse-dds.d.ts +1 -1
  99. package/dist/lib/parsers/parse-dds.d.ts.map +1 -1
  100. package/dist/lib/parsers/parse-ktx.d.ts +2 -1
  101. package/dist/lib/parsers/parse-ktx.d.ts.map +1 -1
  102. package/dist/lib/parsers/parse-npy.d.ts.map +1 -1
  103. package/dist/lib/parsers/parse-npy.js +1 -0
  104. package/dist/lib/parsers/parse-pvr.d.ts +1 -1
  105. package/dist/lib/parsers/parse-pvr.d.ts.map +1 -1
  106. package/dist/lib/parsers/parse-pvr.js +2 -2
  107. package/dist/lib/utils/extract-mipmap-images.d.ts +8 -1
  108. package/dist/lib/utils/extract-mipmap-images.d.ts.map +1 -1
  109. package/dist/lib/utils/version.d.ts.map +1 -1
  110. package/dist/lib/utils/version.js +2 -1
  111. package/dist/libs/basis_encoder.js +20 -21
  112. package/dist/libs/basis_encoder.wasm +0 -0
  113. package/dist/libs/basis_transcoder.js +14 -13
  114. package/dist/libs/basis_transcoder.wasm +0 -0
  115. package/dist/npy-worker.js +46 -15
  116. package/dist/types.d.ts +0 -20
  117. package/dist/types.d.ts.map +1 -1
  118. package/dist/types.js +0 -1
  119. package/dist/workers/ktx2-basis-writer-nodejs-worker.d.ts +2 -0
  120. package/dist/workers/ktx2-basis-writer-nodejs-worker.d.ts.map +1 -0
  121. package/dist/workers/ktx2-basis-writer-nodejs-worker.js +26 -0
  122. package/dist/workers/ktx2-basis-writer-worker.d.ts +2 -0
  123. package/dist/workers/ktx2-basis-writer-worker.d.ts.map +1 -0
  124. package/dist/workers/ktx2-basis-writer-worker.js +26 -0
  125. package/package.json +13 -7
  126. package/src/compressed-texture-loader.ts +1 -1
  127. package/src/compressed-texture-writer.ts +20 -2
  128. package/src/index.ts +19 -2
  129. package/src/ktx2-basis-writer-nodejs.ts +4 -0
  130. package/src/{ktx2-basis-universal-texture-writer.ts → ktx2-basis-writer.ts} +3 -3
  131. package/src/lib/encoders/encode-texture.ts +2 -1
  132. package/src/lib/parsers/basis-module-loader.ts +1 -1
  133. package/src/lib/parsers/parse-basis.ts +68 -36
  134. package/src/lib/parsers/parse-compressed-texture.ts +1 -1
  135. package/src/lib/parsers/parse-crunch.ts +15 -14
  136. package/src/lib/parsers/parse-dds.ts +1 -1
  137. package/src/lib/parsers/parse-ktx.ts +2 -1
  138. package/src/lib/parsers/parse-npy.ts +2 -0
  139. package/src/lib/parsers/parse-pvr.ts +2 -1
  140. package/src/lib/utils/extract-mipmap-images.ts +9 -1
  141. package/src/lib/utils/texture-formats.ts +1 -1
  142. package/src/lib/utils/version.ts +2 -1
  143. package/src/libs/basis_encoder.js +20 -21
  144. package/src/libs/basis_encoder.wasm +0 -0
  145. package/src/libs/basis_transcoder.js +14 -13
  146. package/src/libs/basis_transcoder.wasm +0 -0
  147. package/src/types.ts +0 -30
  148. package/src/workers/ktx2-basis-writer-nodejs-worker.ts +25 -0
  149. package/src/workers/ktx2-basis-writer-worker.ts +25 -0
  150. package/dist/es5/ktx2-basis-universal-texture-writer.js.map +0 -1
  151. package/dist/esm/ktx2-basis-universal-texture-writer.js.map +0 -1
  152. package/dist/ktx2-basis-universal-texture-writer.d.ts.map +0 -1
@@ -0,0 +1,3 @@
1
+ import '@loaders.gl/polyfills';
2
+ export { KTX2BasisWriter as KTX2BasisWriterNodeJS } from './ktx2-basis-writer';
3
+ //# sourceMappingURL=ktx2-basis-writer-nodejs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ktx2-basis-writer-nodejs.d.ts","sourceRoot":"","sources":["../src/ktx2-basis-writer-nodejs.ts"],"names":[],"mappings":"AACA,OAAO,uBAAuB,CAAC;AAE/B,OAAO,EAAC,eAAe,IAAI,qBAAqB,EAAC,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.KTX2BasisWriterNodeJS = void 0;
4
+ // Polyfills increases the bundle size significantly. Use it for NodeJS worker only
5
+ require("@loaders.gl/polyfills");
6
+ var ktx2_basis_writer_1 = require("./ktx2-basis-writer");
7
+ Object.defineProperty(exports, "KTX2BasisWriterNodeJS", { enumerable: true, get: function () { return ktx2_basis_writer_1.KTX2BasisWriter; } });
@@ -0,0 +1,343 @@
1
+ (() => {
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
9
+ var __commonJS = (cb, mod) => function __require() {
10
+ return mod || (0, cb[Object.keys(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
11
+ };
12
+ var __reExport = (target, module, desc) => {
13
+ if (module && typeof module === "object" || typeof module === "function") {
14
+ for (let key of __getOwnPropNames(module))
15
+ if (!__hasOwnProp.call(target, key) && key !== "default")
16
+ __defProp(target, key, { get: () => module[key], enumerable: !(desc = __getOwnPropDesc(module, key)) || desc.enumerable });
17
+ }
18
+ return target;
19
+ };
20
+ var __toModule = (module) => {
21
+ return __reExport(__markAsModule(__defProp(module != null ? __create(__getProtoOf(module)) : {}, "default", module && module.__esModule && "default" in module ? { get: () => module.default, enumerable: true } : { value: module, enumerable: true })), module);
22
+ };
23
+
24
+ // (disabled):../worker-utils/src/lib/node/require-utils.node
25
+ var require_require_utils = __commonJS({
26
+ "(disabled):../worker-utils/src/lib/node/require-utils.node"() {
27
+ }
28
+ });
29
+
30
+ // ../worker-utils/src/lib/env-utils/version.ts
31
+ var VERSION = true ? "3.2.0-alpha.2" : DEFAULT_VERSION;
32
+ if (false) {
33
+ console.error("loaders.gl: The __VERSION__ variable is not injected using babel plugin. Latest unstable workers would be fetched from the CDN.");
34
+ }
35
+
36
+ // ../worker-utils/src/lib/env-utils/assert.ts
37
+ function assert(condition, message) {
38
+ if (!condition) {
39
+ throw new Error(message || "loaders.gl assertion failed.");
40
+ }
41
+ }
42
+
43
+ // ../worker-utils/src/lib/env-utils/globals.ts
44
+ var globals = {
45
+ self: typeof self !== "undefined" && self,
46
+ window: typeof window !== "undefined" && window,
47
+ global: typeof global !== "undefined" && global,
48
+ document: typeof document !== "undefined" && document
49
+ };
50
+ var self_ = globals.self || globals.window || globals.global || {};
51
+ var window_ = globals.window || globals.self || globals.global || {};
52
+ var global_ = globals.global || globals.self || globals.window || {};
53
+ var document_ = globals.document || {};
54
+ var isBrowser = typeof process !== "object" || String(process) !== "[object process]" || process.browser;
55
+ var isWorker = typeof importScripts === "function";
56
+ var isMobile = typeof window !== "undefined" && typeof window.orientation !== "undefined";
57
+ var matches = typeof process !== "undefined" && process.version && /v([0-9]*)/.exec(process.version);
58
+ var nodeVersion = matches && parseFloat(matches[1]) || 0;
59
+
60
+ // ../worker-utils/src/lib/worker-utils/get-transfer-list.ts
61
+ function getTransferList(object, recursive = true, transfers) {
62
+ const transfersSet = transfers || new Set();
63
+ if (!object) {
64
+ } else if (isTransferable(object)) {
65
+ transfersSet.add(object);
66
+ } else if (isTransferable(object.buffer)) {
67
+ transfersSet.add(object.buffer);
68
+ } else if (ArrayBuffer.isView(object)) {
69
+ } else if (recursive && typeof object === "object") {
70
+ for (const key in object) {
71
+ getTransferList(object[key], recursive, transfersSet);
72
+ }
73
+ }
74
+ return transfers === void 0 ? Array.from(transfersSet) : [];
75
+ }
76
+ function isTransferable(object) {
77
+ if (!object) {
78
+ return false;
79
+ }
80
+ if (object instanceof ArrayBuffer) {
81
+ return true;
82
+ }
83
+ if (typeof MessagePort !== "undefined" && object instanceof MessagePort) {
84
+ return true;
85
+ }
86
+ if (typeof ImageBitmap !== "undefined" && object instanceof ImageBitmap) {
87
+ return true;
88
+ }
89
+ if (typeof OffscreenCanvas !== "undefined" && object instanceof OffscreenCanvas) {
90
+ return true;
91
+ }
92
+ return false;
93
+ }
94
+
95
+ // ../worker-utils/src/lib/worker-farm/worker-body.ts
96
+ function getParentPort() {
97
+ let parentPort;
98
+ try {
99
+ eval("globalThis.parentPort = require('worker_threads').parentPort");
100
+ parentPort = globalThis.parentPort;
101
+ } catch {
102
+ }
103
+ return parentPort;
104
+ }
105
+ var onMessageWrapperMap = new Map();
106
+ var WorkerBody = class {
107
+ static inWorkerThread() {
108
+ return typeof self !== "undefined" || Boolean(getParentPort());
109
+ }
110
+ static set onmessage(onMessage) {
111
+ function handleMessage(message) {
112
+ const parentPort3 = getParentPort();
113
+ const { type, payload } = parentPort3 ? message : message.data;
114
+ onMessage(type, payload);
115
+ }
116
+ const parentPort2 = getParentPort();
117
+ if (parentPort2) {
118
+ parentPort2.on("message", handleMessage);
119
+ parentPort2.on("exit", () => console.debug("Node worker closing"));
120
+ } else {
121
+ globalThis.onmessage = handleMessage;
122
+ }
123
+ }
124
+ static addEventListener(onMessage) {
125
+ let onMessageWrapper = onMessageWrapperMap.get(onMessage);
126
+ if (!onMessageWrapper) {
127
+ onMessageWrapper = (message) => {
128
+ if (!isKnownMessage(message)) {
129
+ return;
130
+ }
131
+ const parentPort3 = getParentPort();
132
+ const { type, payload } = parentPort3 ? message : message.data;
133
+ onMessage(type, payload);
134
+ };
135
+ }
136
+ const parentPort2 = getParentPort();
137
+ if (parentPort2) {
138
+ console.error("not implemented");
139
+ } else {
140
+ globalThis.addEventListener("message", onMessageWrapper);
141
+ }
142
+ }
143
+ static removeEventListener(onMessage) {
144
+ const onMessageWrapper = onMessageWrapperMap.get(onMessage);
145
+ onMessageWrapperMap.delete(onMessage);
146
+ const parentPort2 = getParentPort();
147
+ if (parentPort2) {
148
+ console.error("not implemented");
149
+ } else {
150
+ globalThis.removeEventListener("message", onMessageWrapper);
151
+ }
152
+ }
153
+ static postMessage(type, payload) {
154
+ const data = { source: "loaders.gl", type, payload };
155
+ const transferList = getTransferList(payload);
156
+ const parentPort2 = getParentPort();
157
+ if (parentPort2) {
158
+ parentPort2.postMessage(data, transferList);
159
+ } else {
160
+ globalThis.postMessage(data, transferList);
161
+ }
162
+ }
163
+ };
164
+ function isKnownMessage(message) {
165
+ const { type, data } = message;
166
+ return type === "message" && data && typeof data.source === "string" && data.source.startsWith("loaders.gl");
167
+ }
168
+
169
+ // ../worker-utils/src/lib/library-utils/library-utils.ts
170
+ var node = __toModule(require_require_utils());
171
+ var LATEST = "beta";
172
+ var VERSION2 = typeof VERSION !== "undefined" ? VERSION : LATEST;
173
+ var loadLibraryPromises = {};
174
+ async function loadLibrary(libraryUrl, moduleName = null, options = {}) {
175
+ if (moduleName) {
176
+ libraryUrl = getLibraryUrl(libraryUrl, moduleName, options);
177
+ }
178
+ loadLibraryPromises[libraryUrl] = loadLibraryPromises[libraryUrl] || loadLibraryFromFile(libraryUrl);
179
+ return await loadLibraryPromises[libraryUrl];
180
+ }
181
+ function getLibraryUrl(library, moduleName, options) {
182
+ if (library.startsWith("http")) {
183
+ return library;
184
+ }
185
+ const modules = options.modules || {};
186
+ if (modules[library]) {
187
+ return modules[library];
188
+ }
189
+ if (!isBrowser) {
190
+ return `modules/${moduleName}/dist/libs/${library}`;
191
+ }
192
+ if (options.CDN) {
193
+ assert(options.CDN.startsWith("http"));
194
+ return `${options.CDN}/${moduleName}@${VERSION2}/dist/libs/${library}`;
195
+ }
196
+ if (isWorker) {
197
+ return `../src/libs/${library}`;
198
+ }
199
+ return `modules/${moduleName}/src/libs/${library}`;
200
+ }
201
+ async function loadLibraryFromFile(libraryUrl) {
202
+ if (libraryUrl.endsWith("wasm")) {
203
+ const response2 = await fetch(libraryUrl);
204
+ return await response2.arrayBuffer();
205
+ }
206
+ if (!isBrowser) {
207
+ try {
208
+ return node && node.requireFromFile && await node.requireFromFile(libraryUrl);
209
+ } catch {
210
+ return null;
211
+ }
212
+ }
213
+ if (isWorker) {
214
+ return importScripts(libraryUrl);
215
+ }
216
+ const response = await fetch(libraryUrl);
217
+ const scriptSource = await response.text();
218
+ return loadLibraryFromString(scriptSource, libraryUrl);
219
+ }
220
+ function loadLibraryFromString(scriptSource, id) {
221
+ if (!isBrowser) {
222
+ return node.requireFromString && node.requireFromString(scriptSource, id);
223
+ }
224
+ if (isWorker) {
225
+ eval.call(global_, scriptSource);
226
+ return null;
227
+ }
228
+ const script = document.createElement("script");
229
+ script.id = id;
230
+ try {
231
+ script.appendChild(document.createTextNode(scriptSource));
232
+ } catch (e) {
233
+ script.text = scriptSource;
234
+ }
235
+ document.body.appendChild(script);
236
+ return null;
237
+ }
238
+
239
+ // src/lib/utils/version.ts
240
+ var VERSION3 = true ? "3.2.0-alpha.2" : "beta";
241
+
242
+ // src/lib/parsers/basis-module-loader.ts
243
+ var VERSION4 = true ? "3.2.0-alpha.2" : "beta";
244
+ var BASIS_CDN_ENCODER_WASM = `https://unpkg.com/@loaders.gl/textures@${VERSION4}/dist/libs/basis_encoder.wasm`;
245
+ var BASIS_CDN_ENCODER_JS = `https://unpkg.com/@loaders.gl/textures@${VERSION4}/dist/libs/basis_encoder.js`;
246
+ var loadBasisEncoderPromise;
247
+ async function loadBasisEncoderModule(options) {
248
+ const modules = options.modules || {};
249
+ if (modules.basisEncoder) {
250
+ return modules.basisEncoder;
251
+ }
252
+ loadBasisEncoderPromise = loadBasisEncoderPromise || loadBasisEncoder(options);
253
+ return await loadBasisEncoderPromise;
254
+ }
255
+ async function loadBasisEncoder(options) {
256
+ let BASIS_ENCODER = null;
257
+ let wasmBinary = null;
258
+ [BASIS_ENCODER, wasmBinary] = await Promise.all([
259
+ await loadLibrary(BASIS_CDN_ENCODER_JS, "textures", options),
260
+ await loadLibrary(BASIS_CDN_ENCODER_WASM, "textures", options)
261
+ ]);
262
+ BASIS_ENCODER = BASIS_ENCODER || globalThis.BASIS;
263
+ return await initializeBasisEncoderModule(BASIS_ENCODER, wasmBinary);
264
+ }
265
+ function initializeBasisEncoderModule(BasisEncoderModule, wasmBinary) {
266
+ const options = {};
267
+ if (wasmBinary) {
268
+ options.wasmBinary = wasmBinary;
269
+ }
270
+ return new Promise((resolve) => {
271
+ BasisEncoderModule(options).then((module) => {
272
+ const { BasisFile, KTX2File, initializeBasis, BasisEncoder } = module;
273
+ initializeBasis();
274
+ resolve({ BasisFile, KTX2File, BasisEncoder });
275
+ });
276
+ });
277
+ }
278
+
279
+ // src/lib/encoders/encode-ktx2-basis-texture.ts
280
+ async function encodeKTX2BasisTexture(image, options = {}) {
281
+ const { useSRGB = false, qualityLevel = 10, encodeUASTC = false, mipmaps = false } = options;
282
+ const { BasisEncoder } = await loadBasisEncoderModule(options);
283
+ const basisEncoder = new BasisEncoder();
284
+ try {
285
+ const basisFileData = new Uint8Array(image.width * image.height * 4);
286
+ basisEncoder.setCreateKTX2File(true);
287
+ basisEncoder.setKTX2UASTCSupercompression(true);
288
+ basisEncoder.setKTX2SRGBTransferFunc(true);
289
+ basisEncoder.setSliceSourceImage(0, image.data, image.width, image.height, false);
290
+ basisEncoder.setPerceptual(useSRGB);
291
+ basisEncoder.setMipSRGB(useSRGB);
292
+ basisEncoder.setQualityLevel(qualityLevel);
293
+ basisEncoder.setUASTC(encodeUASTC);
294
+ basisEncoder.setMipGen(mipmaps);
295
+ const numOutputBytes = basisEncoder.encode(basisFileData);
296
+ const actualKTX2FileData = basisFileData.subarray(0, numOutputBytes).buffer;
297
+ return actualKTX2FileData;
298
+ } catch (error) {
299
+ console.error("Basis Universal Supercompressed GPU Texture encoder Error: ", error);
300
+ throw error;
301
+ } finally {
302
+ basisEncoder.delete();
303
+ }
304
+ }
305
+
306
+ // src/ktx2-basis-writer.ts
307
+ var KTX2BasisWriter = {
308
+ name: "Basis Universal Supercompressed GPU Texture",
309
+ id: "ktx2-basis-writer",
310
+ module: "textures",
311
+ version: VERSION3,
312
+ extensions: ["ktx2"],
313
+ options: {
314
+ useSRGB: false,
315
+ qualityLevel: 10,
316
+ encodeUASTC: false,
317
+ mipmaps: false
318
+ },
319
+ encode: encodeKTX2BasisTexture
320
+ };
321
+
322
+ // src/workers/ktx2-basis-writer-worker.ts
323
+ (() => {
324
+ if (!WorkerBody.inWorkerThread()) {
325
+ return;
326
+ }
327
+ WorkerBody.onmessage = async (type, payload) => {
328
+ switch (type) {
329
+ case "process":
330
+ try {
331
+ const { input, options } = payload;
332
+ const result = await KTX2BasisWriter.encode(input, options);
333
+ WorkerBody.postMessage("done", { result });
334
+ } catch (error) {
335
+ const message = error instanceof Error ? error.message : "";
336
+ WorkerBody.postMessage("error", { error: message });
337
+ }
338
+ break;
339
+ default:
340
+ }
341
+ };
342
+ })();
343
+ })();
@@ -4,7 +4,7 @@ import { encodeKTX2BasisTexture } from './lib/encoders/encode-ktx2-basis-texture
4
4
  * Basis Universal Supercompressed GPU Texture.
5
5
  * Spec - https://github.com/Esri/i3s-spec/blob/master/docs/1.8/textureSetDefinitionFormat.cmn.md
6
6
  */
7
- export declare const KTX2BasisUniversalTextureWriter: {
7
+ export declare const KTX2BasisWriter: {
8
8
  name: string;
9
9
  id: string;
10
10
  module: string;
@@ -19,4 +19,4 @@ export declare const KTX2BasisUniversalTextureWriter: {
19
19
  encode: typeof encodeKTX2BasisTexture;
20
20
  };
21
21
  export declare const _TypecheckKTX2TextureWriter: Writer;
22
- //# sourceMappingURL=ktx2-basis-universal-texture-writer.d.ts.map
22
+ //# sourceMappingURL=ktx2-basis-writer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ktx2-basis-writer.d.ts","sourceRoot":"","sources":["../src/ktx2-basis-writer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,0BAA0B,CAAC;AAErD,OAAO,EAAC,sBAAsB,EAAC,MAAM,0CAA0C,CAAC;AAEhF;;;GAGG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;CAe3B,CAAC;AAGF,eAAO,MAAM,2BAA2B,EAAE,MAAwB,CAAC"}
@@ -1,15 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports._TypecheckKTX2TextureWriter = exports.KTX2BasisUniversalTextureWriter = void 0;
3
+ exports._TypecheckKTX2TextureWriter = exports.KTX2BasisWriter = void 0;
4
4
  const version_1 = require("./lib/utils/version");
5
5
  const encode_ktx2_basis_texture_1 = require("./lib/encoders/encode-ktx2-basis-texture");
6
6
  /**
7
7
  * Basis Universal Supercompressed GPU Texture.
8
8
  * Spec - https://github.com/Esri/i3s-spec/blob/master/docs/1.8/textureSetDefinitionFormat.cmn.md
9
9
  */
10
- exports.KTX2BasisUniversalTextureWriter = {
10
+ exports.KTX2BasisWriter = {
11
11
  name: 'Basis Universal Supercompressed GPU Texture',
12
- id: 'ktx2-basis-supercompressed-texture',
12
+ id: 'ktx2-basis-writer',
13
13
  module: 'textures',
14
14
  version: version_1.VERSION,
15
15
  extensions: ['ktx2'],
@@ -22,4 +22,4 @@ exports.KTX2BasisUniversalTextureWriter = {
22
22
  encode: encode_ktx2_basis_texture_1.encodeKTX2BasisTexture
23
23
  };
24
24
  // TYPE TESTS - TODO find a better way than exporting junk
25
- exports._TypecheckKTX2TextureWriter = exports.KTX2BasisUniversalTextureWriter;
25
+ exports._TypecheckKTX2TextureWriter = exports.KTX2BasisWriter;
@@ -1,4 +1,3 @@
1
- export declare function encodeImageURLToCompressedTextureURL(inputUrl: string, outputUrl: string, options?: {
2
- cwd?: string;
3
- }): Promise<string>;
1
+ import { CompressedTextureWriterOptions } from '../../compressed-texture-writer';
2
+ export declare function encodeImageURLToCompressedTextureURL(inputUrl: string, outputUrl: string, options?: CompressedTextureWriterOptions): Promise<string>;
4
3
  //# sourceMappingURL=encode-texture.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"encode-texture.d.ts","sourceRoot":"","sources":["../../../src/lib/encoders/encode-texture.ts"],"names":[],"mappings":"AAKA,wBAAsB,oCAAoC,CACxD,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAC,GACvB,OAAO,CAAC,MAAM,CAAC,CAkBjB"}
1
+ {"version":3,"file":"encode-texture.d.ts","sourceRoot":"","sources":["../../../src/lib/encoders/encode-texture.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,8BAA8B,EAAC,MAAM,iCAAiC,CAAC;AAK/E,wBAAsB,oCAAoC,CACxD,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,8BAA8B,GACvC,OAAO,CAAC,MAAM,CAAC,CAkBjB"}
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.loadBasisEncoderModule = exports.loadBasisTrascoderModule = void 0;
4
4
  // __VERSION__ is injected by babel-plugin-version-inline
5
5
  // @ts-ignore TS2304: Cannot find name '__VERSION__'.
6
- const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';
6
+ const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'beta';
7
7
  // @ts-nocheck
8
8
  const worker_utils_1 = require("@loaders.gl/worker-utils");
9
9
  const BASIS_CDN_ENCODER_WASM = `https://unpkg.com/@loaders.gl/textures@${VERSION}/dist/libs/basis_encoder.wasm`;
@@ -1,16 +1,18 @@
1
+ import type { TextureLevel } from '@loaders.gl/schema';
2
+ export declare type BasisFormat = 'etc1' | 'etc2' | 'bc1' | 'bc3' | 'bc4' | 'bc5' | 'bc7-m6-opaque-only' | 'bc7-m5' | 'pvrtc1-4-rgb' | 'pvrtc1-4-rgba' | 'astc-4x4' | 'atc-rgb' | 'atc-rgba-interpolated-alpha' | 'rgba32' | 'rgb565' | 'bgr565' | 'rgba4444';
1
3
  /**
2
4
  * parse data with a Binomial Basis_Universal module
3
- * @param {ArrayBuffer} data
4
- * @param {*} options
5
+ * @param data
6
+ * @param options
5
7
  * @returns compressed texture data
6
8
  */
7
- export default function parseBasis(data: any, options: any): Promise<any[] | null>;
9
+ export default function parseBasis(data: ArrayBuffer, options: any): Promise<TextureLevel[][]>;
8
10
  /**
9
11
  * Select transcode format from the list of supported formats
10
12
  * @returns key for OutputFormat map
11
13
  */
12
- export declare function selectSupportedBasisFormat(): "etc1" | "etc2" | "astc-4x4" | "rgb565" | {
13
- alpha: string;
14
- noAlpha: string;
14
+ export declare function selectSupportedBasisFormat(): BasisFormat | {
15
+ alpha: BasisFormat;
16
+ noAlpha: BasisFormat;
15
17
  };
16
18
  //# sourceMappingURL=parse-basis.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"parse-basis.d.ts","sourceRoot":"","sources":["../../../src/lib/parsers/parse-basis.ts"],"names":[],"mappings":"AAiDA;;;;;GAKG;AACH,wBAA8B,UAAU,CAAC,IAAI,KAAA,EAAE,OAAO,KAAA,yBAwBrD;AA8KD;;;GAGG;AACH,wBAAgB,0BAA0B;;;EAoBzC"}
1
+ {"version":3,"file":"parse-basis.d.ts","sourceRoot":"","sources":["../../../src/lib/parsers/parse-basis.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAMrD,oBAAY,WAAW,GACnB,MAAM,GACN,MAAM,GACN,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACL,oBAAoB,GACpB,QAAQ,GACR,cAAc,GACd,eAAe,GACf,UAAU,GACV,SAAS,GACT,6BAA6B,GAC7B,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,UAAU,CAAC;AAoDf;;;;;GAKG;AACH,wBAA8B,UAAU,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,KAAA,GAAG,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAwB9F;AA8KD;;;GAGG;AACH,wBAAgB,0BAA0B,IACtC,WAAW,GACX;IACE,KAAK,EAAE,WAAW,CAAC;IACnB,OAAO,EAAE,WAAW,CAAC;CACtB,CAoBJ"}
@@ -50,8 +50,8 @@ const OutputFormat = {
50
50
  };
51
51
  /**
52
52
  * parse data with a Binomial Basis_Universal module
53
- * @param {ArrayBuffer} data
54
- * @param {*} options
53
+ * @param data
54
+ * @param options
55
55
  * @returns compressed texture data
56
56
  */
57
57
  async function parseBasis(data, options) {
@@ -82,16 +82,16 @@ async function parseBasis(data, options) {
82
82
  exports.default = parseBasis;
83
83
  /**
84
84
  * Parse *.basis file data
85
- * @param {*} BasisFile - initialized transcoder module
86
- * @param {*} data
87
- * @param {*} options
85
+ * @param BasisFile - initialized transcoder module
86
+ * @param data
87
+ * @param options
88
88
  * @returns compressed texture data
89
89
  */
90
90
  function parseBasisFile(BasisFile, data, options) {
91
91
  const basisFile = new BasisFile(new Uint8Array(data));
92
92
  try {
93
93
  if (!basisFile.startTranscoding()) {
94
- return null;
94
+ throw new Error('Failed to start basis transcoding');
95
95
  }
96
96
  const imageCount = basisFile.getNumImages();
97
97
  const images = [];
@@ -112,10 +112,10 @@ function parseBasisFile(BasisFile, data, options) {
112
112
  }
113
113
  /**
114
114
  * Parse the particular level image of a basis file
115
- * @param {*} basisFile
116
- * @param {*} imageIndex
117
- * @param {*} levelIndex
118
- * @param {*} options
115
+ * @param basisFile
116
+ * @param imageIndex
117
+ * @param levelIndex
118
+ * @param options
119
119
  * @returns compressed texture data
120
120
  */
121
121
  function transcodeImage(basisFile, imageIndex, levelIndex, options) {
@@ -128,7 +128,7 @@ function transcodeImage(basisFile, imageIndex, levelIndex, options) {
128
128
  const decodedSize = basisFile.getImageTranscodedSizeInBytes(imageIndex, levelIndex, basisFormat);
129
129
  const decodedData = new Uint8Array(decodedSize);
130
130
  if (!basisFile.transcodeImage(decodedData, imageIndex, levelIndex, basisFormat, 0, 0)) {
131
- return null;
131
+ throw new Error('failed to start Basis transcoding');
132
132
  }
133
133
  return {
134
134
  // standard loaders.gl image category payload
@@ -136,24 +136,24 @@ function transcodeImage(basisFile, imageIndex, levelIndex, options) {
136
136
  height,
137
137
  data: decodedData,
138
138
  compressed,
139
+ format,
139
140
  // Additional fields
140
141
  // Add levelSize field.
141
- hasAlpha,
142
- format
142
+ hasAlpha
143
143
  };
144
144
  }
145
145
  /**
146
146
  * Parse *.ktx2 file data
147
- * @param {*} KTX2File
148
- * @param {*} data
149
- * @param {*} options
147
+ * @param KTX2File
148
+ * @param data
149
+ * @param options
150
150
  * @returns compressed texture data
151
151
  */
152
152
  function parseKTX2File(KTX2File, data, options) {
153
153
  const ktx2File = new KTX2File(new Uint8Array(data));
154
154
  try {
155
155
  if (!ktx2File.startTranscoding()) {
156
- return null;
156
+ throw new Error('failed to start KTX2 transcoding');
157
157
  }
158
158
  const levelsCount = ktx2File.getLevels();
159
159
  const levels = [];
@@ -161,7 +161,7 @@ function parseKTX2File(KTX2File, data, options) {
161
161
  levels.push(transcodeKTX2Image(ktx2File, levelIndex, options));
162
162
  break; // texture app can only show one level for some reason
163
163
  }
164
- return levels;
164
+ return [levels];
165
165
  }
166
166
  finally {
167
167
  ktx2File.close();
@@ -170,9 +170,9 @@ function parseKTX2File(KTX2File, data, options) {
170
170
  }
171
171
  /**
172
172
  * Parse the particular level image of a ktx2 file
173
- * @param {*} ktx2File
174
- * @param {*} levelIndex
175
- * @param {*} options
173
+ * @param ktx2File
174
+ * @param levelIndex
175
+ * @param options
176
176
  * @returns
177
177
  */
178
178
  function transcodeKTX2Image(ktx2File, levelIndex, options) {
@@ -182,7 +182,7 @@ function transcodeKTX2Image(ktx2File, levelIndex, options) {
182
182
  const decodedSize = ktx2File.getImageTranscodedSizeInBytes(levelIndex, 0 /* layerIndex */, 0 /* faceIndex */, basisFormat);
183
183
  const decodedData = new Uint8Array(decodedSize);
184
184
  if (!ktx2File.transcodeImage(decodedData, levelIndex, 0 /* layerIndex */, 0 /* faceIndex */, basisFormat, 0, -1 /* channel0 */, -1 /* channel1 */)) {
185
- return null;
185
+ throw new Error('Failed to transcode KTX2 image');
186
186
  }
187
187
  return {
188
188
  // standard loaders.gl image category payload
@@ -192,14 +192,14 @@ function transcodeKTX2Image(ktx2File, levelIndex, options) {
192
192
  compressed,
193
193
  // Additional fields
194
194
  // Add levelSize field.
195
- alphaFlag,
195
+ hasAlpha: alphaFlag,
196
196
  format
197
197
  };
198
198
  }
199
199
  /**
200
200
  * Get BasisFormat by loader format option
201
- * @param {*} options
202
- * @param {*} hasAlpha
201
+ * @param options
202
+ * @param hasAlpha
203
203
  * @returns BasisFormat data
204
204
  */
205
205
  function getBasisOptions(options, hasAlpha) {
@@ -1,4 +1,4 @@
1
- import type { TextureLevel } from '../../types';
1
+ import type { TextureLevel } from '@loaders.gl/schema';
2
2
  /**
3
3
  * Deduces format and parses compressed texture loaded in ArrayBuffer
4
4
  * @param data - binary data of compressed texture
@@ -1 +1 @@
1
- {"version":3,"file":"parse-compressed-texture.d.ts","sourceRoot":"","sources":["../../../src/lib/parsers/parse-compressed-texture.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,aAAa,CAAC;AAK9C;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,WAAW,GAAG,YAAY,EAAE,CAaxE"}
1
+ {"version":3,"file":"parse-compressed-texture.d.ts","sourceRoot":"","sources":["../../../src/lib/parsers/parse-compressed-texture.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAKrD;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,WAAW,GAAG,YAAY,EAAE,CAaxE"}
@@ -1,4 +1,4 @@
1
- import type { TextureLevel } from '../../types';
1
+ import type { TextureLevel } from '@loaders.gl/schema';
2
2
  /**
3
3
  * Parse texture data as "CRN" format.
4
4
  * Function is "async" as emscriptified decoder module is loaded asyncronously
@@ -1 +1 @@
1
- {"version":3,"file":"parse-crunch.d.ts","sourceRoot":"","sources":["../../../src/lib/parsers/parse-crunch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,aAAa,CAAC;AAqC9C;;;;;GAKG;AACH,wBAAsB,WAAW,CAAC,IAAI,KAAA,EAAE,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAmD7E"}
1
+ {"version":3,"file":"parse-crunch.d.ts","sourceRoot":"","sources":["../../../src/lib/parsers/parse-crunch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAsCrD;;;;;GAKG;AACH,wBAAsB,WAAW,CAAC,IAAI,KAAA,EAAE,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAmD7E"}
@@ -15,19 +15,20 @@ const CRN_FORMAT = {
15
15
  cCRNFmtDXT5: 2
16
16
  // Crunch supports more formats than this.
17
17
  };
18
- // Mapping of Crunch formats to DXT formats.
19
- const DXT_FORMAT_MAP = {};
20
- DXT_FORMAT_MAP[CRN_FORMAT.cCRNFmtDXT1] = {
21
- pixelFormat: gl_extensions_1.GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_S3TC_DXT1_EXT,
22
- sizeFunction: parse_dds_1.getDxt1LevelSize
23
- };
24
- DXT_FORMAT_MAP[CRN_FORMAT.cCRNFmtDXT3] = {
25
- pixelFormat: gl_extensions_1.GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT3_EXT,
26
- sizeFunction: parse_dds_1.getDxtXLevelSize
27
- };
28
- DXT_FORMAT_MAP[CRN_FORMAT.cCRNFmtDXT5] = {
29
- pixelFormat: gl_extensions_1.GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT5_EXT,
30
- sizeFunction: parse_dds_1.getDxtXLevelSize
18
+ /** Mapping of Crunch formats to DXT formats. */
19
+ const DXT_FORMAT_MAP = {
20
+ [CRN_FORMAT.cCRNFmtDXT1]: {
21
+ pixelFormat: gl_extensions_1.GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_S3TC_DXT1_EXT,
22
+ sizeFunction: parse_dds_1.getDxt1LevelSize
23
+ },
24
+ [CRN_FORMAT.cCRNFmtDXT3]: {
25
+ pixelFormat: gl_extensions_1.GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT3_EXT,
26
+ sizeFunction: parse_dds_1.getDxtXLevelSize
27
+ },
28
+ [CRN_FORMAT.cCRNFmtDXT5]: {
29
+ pixelFormat: gl_extensions_1.GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT5_EXT,
30
+ sizeFunction: parse_dds_1.getDxtXLevelSize
31
+ }
31
32
  };
32
33
  let cachedDstSize = 0;
33
34
  let dst;
@@ -1,4 +1,4 @@
1
- import type { TextureLevel } from '../../types';
1
+ import type { TextureLevel } from '@loaders.gl/schema';
2
2
  /**
3
3
  * Check if data is in "DDS" format by its magic number
4
4
  * @param data - binary data of compressed texture