@loaders.gl/textures 3.3.0-alpha.5 → 3.3.0-alpha.7

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 (170) hide show
  1. package/dist/basis-nodejs-worker.js +1762 -2429
  2. package/dist/basis-worker.js +3 -3
  3. package/dist/compressed-texture-worker.js +3 -3
  4. package/dist/crunch-worker.js +2 -2
  5. package/dist/dist.min.js +7 -5
  6. package/dist/es5/basis-loader.js +4 -12
  7. package/dist/es5/basis-loader.js.map +1 -1
  8. package/dist/es5/bundle.js +0 -1
  9. package/dist/es5/bundle.js.map +1 -1
  10. package/dist/es5/compressed-texture-loader.js +8 -21
  11. package/dist/es5/compressed-texture-loader.js.map +1 -1
  12. package/dist/es5/compressed-texture-writer.js +1 -3
  13. package/dist/es5/compressed-texture-writer.js.map +1 -1
  14. package/dist/es5/crunch-loader.js +2 -2
  15. package/dist/es5/crunch-loader.js.map +1 -1
  16. package/dist/es5/index.js +22 -35
  17. package/dist/es5/index.js.map +1 -1
  18. package/dist/es5/ktx2-basis-writer-nodejs.js +0 -2
  19. package/dist/es5/ktx2-basis-writer-nodejs.js.map +1 -1
  20. package/dist/es5/ktx2-basis-writer.js +1 -3
  21. package/dist/es5/ktx2-basis-writer.js.map +1 -1
  22. package/dist/es5/lib/encoders/encode-ktx.js +0 -2
  23. package/dist/es5/lib/encoders/encode-ktx.js.map +1 -1
  24. package/dist/es5/lib/encoders/encode-ktx2-basis-texture.js +15 -26
  25. package/dist/es5/lib/encoders/encode-ktx2-basis-texture.js.map +1 -1
  26. package/dist/es5/lib/encoders/encode-texture.js +2 -9
  27. package/dist/es5/lib/encoders/encode-texture.js.map +1 -1
  28. package/dist/es5/lib/gl-extensions.js +8 -0
  29. package/dist/es5/lib/gl-extensions.js.map +1 -1
  30. package/dist/es5/lib/parsers/basis-module-loader.js +6 -46
  31. package/dist/es5/lib/parsers/basis-module-loader.js.map +1 -1
  32. package/dist/es5/lib/parsers/crunch-module-loader.js +0 -16
  33. package/dist/es5/lib/parsers/crunch-module-loader.js.map +1 -1
  34. package/dist/es5/lib/parsers/parse-basis.js +10 -53
  35. package/dist/es5/lib/parsers/parse-basis.js.map +1 -1
  36. package/dist/es5/lib/parsers/parse-compressed-texture.js +0 -7
  37. package/dist/es5/lib/parsers/parse-compressed-texture.js.map +1 -1
  38. package/dist/es5/lib/parsers/parse-crunch.js +4 -20
  39. package/dist/es5/lib/parsers/parse-crunch.js.map +1 -1
  40. package/dist/es5/lib/parsers/parse-dds.js +2 -8
  41. package/dist/es5/lib/parsers/parse-dds.js.map +1 -1
  42. package/dist/es5/lib/parsers/parse-ktx.js +15 -7
  43. package/dist/es5/lib/parsers/parse-ktx.js.map +1 -1
  44. package/dist/es5/lib/parsers/parse-npy.js +11 -18
  45. package/dist/es5/lib/parsers/parse-npy.js.map +1 -1
  46. package/dist/es5/lib/parsers/parse-pvr.js +0 -2
  47. package/dist/es5/lib/parsers/parse-pvr.js.map +1 -1
  48. package/dist/es5/lib/texture-api/async-deep-map.js +3 -32
  49. package/dist/es5/lib/texture-api/async-deep-map.js.map +1 -1
  50. package/dist/es5/lib/texture-api/deep-load.js +0 -14
  51. package/dist/es5/lib/texture-api/deep-load.js.map +1 -1
  52. package/dist/es5/lib/texture-api/generate-url.js +3 -10
  53. package/dist/es5/lib/texture-api/generate-url.js.map +1 -1
  54. package/dist/es5/lib/texture-api/load-image-array.js +7 -24
  55. package/dist/es5/lib/texture-api/load-image-array.js.map +1 -1
  56. package/dist/es5/lib/texture-api/load-image-cube.js +4 -27
  57. package/dist/es5/lib/texture-api/load-image-cube.js.map +1 -1
  58. package/dist/es5/lib/texture-api/load-image.js +8 -41
  59. package/dist/es5/lib/texture-api/load-image.js.map +1 -1
  60. package/dist/es5/lib/texture-api/texture-api-types.js.map +1 -1
  61. package/dist/es5/lib/utils/extract-mipmap-images.js +0 -7
  62. package/dist/es5/lib/utils/extract-mipmap-images.js.map +1 -1
  63. package/dist/es5/lib/utils/ktx-format-helper.js +0 -2
  64. package/dist/es5/lib/utils/ktx-format-helper.js.map +1 -1
  65. package/dist/es5/lib/utils/texture-formats.js +2 -9
  66. package/dist/es5/lib/utils/texture-formats.js.map +1 -1
  67. package/dist/es5/lib/utils/version.js +1 -1
  68. package/dist/es5/lib/utils/version.js.map +1 -1
  69. package/dist/es5/npy-loader.js +5 -16
  70. package/dist/es5/npy-loader.js.map +1 -1
  71. package/dist/es5/types.js.map +1 -1
  72. package/dist/es5/workers/basis-nodejs-worker.js +0 -3
  73. package/dist/es5/workers/basis-nodejs-worker.js.map +1 -1
  74. package/dist/es5/workers/basis-worker.js +0 -2
  75. package/dist/es5/workers/basis-worker.js.map +1 -1
  76. package/dist/es5/workers/compressed-texture-worker.js +0 -2
  77. package/dist/es5/workers/compressed-texture-worker.js.map +1 -1
  78. package/dist/es5/workers/crunch-worker.js +2 -11
  79. package/dist/es5/workers/crunch-worker.js.map +1 -1
  80. package/dist/es5/workers/ktx2-basis-writer-nodejs-worker.js +0 -15
  81. package/dist/es5/workers/ktx2-basis-writer-nodejs-worker.js.map +1 -1
  82. package/dist/es5/workers/ktx2-basis-writer-worker.js +0 -15
  83. package/dist/es5/workers/ktx2-basis-writer-worker.js.map +1 -1
  84. package/dist/es5/workers/npy-worker.js +0 -2
  85. package/dist/es5/workers/npy-worker.js.map +1 -1
  86. package/dist/esm/basis-loader.js +5 -1
  87. package/dist/esm/basis-loader.js.map +1 -1
  88. package/dist/esm/bundle.js +1 -1
  89. package/dist/esm/bundle.js.map +1 -1
  90. package/dist/esm/compressed-texture-loader.js +8 -3
  91. package/dist/esm/compressed-texture-loader.js.map +1 -1
  92. package/dist/esm/compressed-texture-writer.js +1 -0
  93. package/dist/esm/compressed-texture-writer.js.map +1 -1
  94. package/dist/esm/crunch-loader.js +2 -0
  95. package/dist/esm/crunch-loader.js.map +1 -1
  96. package/dist/esm/index.js +5 -0
  97. package/dist/esm/index.js.map +1 -1
  98. package/dist/esm/ktx2-basis-writer-nodejs.js +1 -0
  99. package/dist/esm/ktx2-basis-writer-nodejs.js.map +1 -1
  100. package/dist/esm/ktx2-basis-writer.js +2 -0
  101. package/dist/esm/ktx2-basis-writer.js.map +1 -1
  102. package/dist/esm/lib/encoders/encode-ktx.js.map +1 -1
  103. package/dist/esm/lib/encoders/encode-ktx2-basis-texture.js +3 -2
  104. package/dist/esm/lib/encoders/encode-ktx2-basis-texture.js.map +1 -1
  105. package/dist/esm/lib/encoders/encode-texture.js +2 -1
  106. package/dist/esm/lib/encoders/encode-texture.js.map +1 -1
  107. package/dist/esm/lib/gl-extensions.js +9 -0
  108. package/dist/esm/lib/gl-extensions.js.map +1 -1
  109. package/dist/esm/lib/parsers/basis-module-loader.js +7 -10
  110. package/dist/esm/lib/parsers/basis-module-loader.js.map +1 -1
  111. package/dist/esm/lib/parsers/crunch-module-loader.js +3 -3
  112. package/dist/esm/lib/parsers/crunch-module-loader.js.map +1 -1
  113. package/dist/esm/lib/parsers/parse-basis.js +6 -23
  114. package/dist/esm/lib/parsers/parse-basis.js.map +1 -1
  115. package/dist/esm/lib/parsers/parse-compressed-texture.js +1 -3
  116. package/dist/esm/lib/parsers/parse-compressed-texture.js.map +1 -1
  117. package/dist/esm/lib/parsers/parse-crunch.js +5 -10
  118. package/dist/esm/lib/parsers/parse-crunch.js.map +1 -1
  119. package/dist/esm/lib/parsers/parse-dds.js +4 -2
  120. package/dist/esm/lib/parsers/parse-dds.js.map +1 -1
  121. package/dist/esm/lib/parsers/parse-ktx.js +16 -2
  122. package/dist/esm/lib/parsers/parse-ktx.js.map +1 -1
  123. package/dist/esm/lib/parsers/parse-npy.js +11 -13
  124. package/dist/esm/lib/parsers/parse-npy.js.map +1 -1
  125. package/dist/esm/lib/parsers/parse-pvr.js +4 -0
  126. package/dist/esm/lib/parsers/parse-pvr.js.map +1 -1
  127. package/dist/esm/lib/texture-api/async-deep-map.js +6 -6
  128. package/dist/esm/lib/texture-api/async-deep-map.js.map +1 -1
  129. package/dist/esm/lib/texture-api/deep-load.js +1 -0
  130. package/dist/esm/lib/texture-api/deep-load.js.map +1 -1
  131. package/dist/esm/lib/texture-api/generate-url.js +4 -3
  132. package/dist/esm/lib/texture-api/generate-url.js.map +1 -1
  133. package/dist/esm/lib/texture-api/load-image-array.js +5 -4
  134. package/dist/esm/lib/texture-api/load-image-array.js.map +1 -1
  135. package/dist/esm/lib/texture-api/load-image-cube.js +7 -4
  136. package/dist/esm/lib/texture-api/load-image-cube.js.map +1 -1
  137. package/dist/esm/lib/texture-api/load-image.js +9 -7
  138. package/dist/esm/lib/texture-api/load-image.js.map +1 -1
  139. package/dist/esm/lib/texture-api/texture-api-types.js.map +1 -1
  140. package/dist/esm/lib/utils/extract-mipmap-images.js +1 -6
  141. package/dist/esm/lib/utils/extract-mipmap-images.js.map +1 -1
  142. package/dist/esm/lib/utils/ktx-format-helper.js +1 -0
  143. package/dist/esm/lib/utils/ktx-format-helper.js.map +1 -1
  144. package/dist/esm/lib/utils/texture-formats.js +2 -2
  145. package/dist/esm/lib/utils/texture-formats.js.map +1 -1
  146. package/dist/esm/lib/utils/version.js +2 -1
  147. package/dist/esm/lib/utils/version.js.map +1 -1
  148. package/dist/esm/npy-loader.js +6 -1
  149. package/dist/esm/npy-loader.js.map +1 -1
  150. package/dist/esm/types.js.map +1 -1
  151. package/dist/esm/workers/basis-nodejs-worker.js.map +1 -1
  152. package/dist/esm/workers/basis-worker.js.map +1 -1
  153. package/dist/esm/workers/compressed-texture-worker.js.map +1 -1
  154. package/dist/esm/workers/crunch-worker.js +3 -1
  155. package/dist/esm/workers/crunch-worker.js.map +1 -1
  156. package/dist/esm/workers/ktx2-basis-writer-nodejs-worker.js +0 -4
  157. package/dist/esm/workers/ktx2-basis-writer-nodejs-worker.js.map +1 -1
  158. package/dist/esm/workers/ktx2-basis-writer-worker.js +0 -4
  159. package/dist/esm/workers/ktx2-basis-writer-worker.js.map +1 -1
  160. package/dist/esm/workers/npy-worker.js.map +1 -1
  161. package/dist/ktx2-basis-writer-nodejs-worker.js +1762 -2429
  162. package/dist/ktx2-basis-writer-worker.js +3 -3
  163. package/dist/lib/parsers/parse-npy.d.ts +1 -1
  164. package/dist/lib/parsers/parse-npy.d.ts.map +1 -1
  165. package/dist/lib/parsers/parse-npy.js +7 -7
  166. package/dist/npy-loader.d.ts +2 -2
  167. package/dist/npy-loader.d.ts.map +1 -1
  168. package/dist/npy-worker.js +8 -6
  169. package/package.json +7 -7
  170. package/src/lib/parsers/parse-npy.ts +20 -9
@@ -1,25 +1,17 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.default = parseBasis;
9
8
  exports.selectSupportedBasisFormat = selectSupportedBasisFormat;
10
-
11
9
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
12
-
13
10
  var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
14
-
15
11
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
16
-
17
12
  var _basisModuleLoader = require("./basis-module-loader");
18
-
19
13
  var _glExtensions = require("../gl-extensions");
20
-
21
14
  var _textureFormats = require("../utils/texture-formats");
22
-
23
15
  var _parseKtx = require("./parse-ktx");
24
16
 
25
17
  var OutputFormat = {
@@ -102,11 +94,9 @@ var OutputFormat = {
102
94
  function parseBasis(_x, _x2) {
103
95
  return _parseBasis.apply(this, arguments);
104
96
  }
105
-
106
97
  function _parseBasis() {
107
98
  _parseBasis = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee(data, options) {
108
99
  var fileConstructors, _yield$loadBasisTrasc, BasisFile, _fileConstructors, _yield$loadBasisTrasc2, _BasisFile;
109
-
110
100
  return _regenerator.default.wrap(function _callee$(_context) {
111
101
  while (1) {
112
102
  switch (_context.prev = _context.next) {
@@ -115,58 +105,45 @@ function _parseBasis() {
115
105
  _context.next = 11;
116
106
  break;
117
107
  }
118
-
119
108
  if (!(0, _parseKtx.isKTX)(data)) {
120
109
  _context.next = 6;
121
110
  break;
122
111
  }
123
-
124
112
  _context.next = 4;
125
113
  return (0, _basisModuleLoader.loadBasisEncoderModule)(options);
126
-
127
114
  case 4:
128
115
  fileConstructors = _context.sent;
129
116
  return _context.abrupt("return", parseKTX2File(fileConstructors.KTX2File, data, options));
130
-
131
117
  case 6:
132
118
  _context.next = 8;
133
119
  return (0, _basisModuleLoader.loadBasisTrascoderModule)(options);
134
-
135
120
  case 8:
136
121
  _yield$loadBasisTrasc = _context.sent;
137
122
  BasisFile = _yield$loadBasisTrasc.BasisFile;
138
123
  return _context.abrupt("return", parseBasisFile(BasisFile, data, options));
139
-
140
124
  case 11:
141
125
  _context.t0 = options.basis.module;
142
126
  _context.next = _context.t0 === 'encoder' ? 14 : _context.t0 === 'transcoder' ? 22 : 22;
143
127
  break;
144
-
145
128
  case 14:
146
129
  _context.next = 16;
147
130
  return (0, _basisModuleLoader.loadBasisEncoderModule)(options);
148
-
149
131
  case 16:
150
132
  _fileConstructors = _context.sent;
151
133
  _context.t1 = options.basis.containerFormat;
152
134
  _context.next = _context.t1 === 'ktx2' ? 20 : _context.t1 === 'basis' ? 21 : 21;
153
135
  break;
154
-
155
136
  case 20:
156
137
  return _context.abrupt("return", parseKTX2File(_fileConstructors.KTX2File, data, options));
157
-
158
138
  case 21:
159
139
  return _context.abrupt("return", parseBasisFile(_fileConstructors.BasisFile, data, options));
160
-
161
140
  case 22:
162
141
  _context.next = 24;
163
142
  return (0, _basisModuleLoader.loadBasisTrascoderModule)(options);
164
-
165
143
  case 24:
166
144
  _yield$loadBasisTrasc2 = _context.sent;
167
145
  _BasisFile = _yield$loadBasisTrasc2.BasisFile;
168
146
  return _context.abrupt("return", parseBasisFile(_BasisFile, data, options));
169
-
170
147
  case 27:
171
148
  case "end":
172
149
  return _context.stop();
@@ -176,29 +153,22 @@ function _parseBasis() {
176
153
  }));
177
154
  return _parseBasis.apply(this, arguments);
178
155
  }
179
-
180
156
  function parseBasisFile(BasisFile, data, options) {
181
157
  var basisFile = new BasisFile(new Uint8Array(data));
182
-
183
158
  try {
184
159
  if (!basisFile.startTranscoding()) {
185
160
  throw new Error('Failed to start basis transcoding');
186
161
  }
187
-
188
162
  var imageCount = basisFile.getNumImages();
189
163
  var images = [];
190
-
191
164
  for (var imageIndex = 0; imageIndex < imageCount; imageIndex++) {
192
165
  var levelsCount = basisFile.getNumLevels(imageIndex);
193
166
  var levels = [];
194
-
195
167
  for (var levelIndex = 0; levelIndex < levelsCount; levelIndex++) {
196
168
  levels.push(transcodeImage(basisFile, imageIndex, levelIndex, options));
197
169
  }
198
-
199
170
  images.push(levels);
200
171
  }
201
-
202
172
  return images;
203
173
  } finally {
204
174
  basisFile.close();
@@ -209,20 +179,18 @@ function parseBasisFile(BasisFile, data, options) {
209
179
  function transcodeImage(basisFile, imageIndex, levelIndex, options) {
210
180
  var width = basisFile.getImageWidth(imageIndex, levelIndex);
211
181
  var height = basisFile.getImageHeight(imageIndex, levelIndex);
182
+
212
183
  var hasAlpha = basisFile.getHasAlpha();
213
184
 
214
185
  var _getBasisOptions = getBasisOptions(options, hasAlpha),
215
- compressed = _getBasisOptions.compressed,
216
- format = _getBasisOptions.format,
217
- basisFormat = _getBasisOptions.basisFormat;
218
-
186
+ compressed = _getBasisOptions.compressed,
187
+ format = _getBasisOptions.format,
188
+ basisFormat = _getBasisOptions.basisFormat;
219
189
  var decodedSize = basisFile.getImageTranscodedSizeInBytes(imageIndex, levelIndex, basisFormat);
220
190
  var decodedData = new Uint8Array(decodedSize);
221
-
222
191
  if (!basisFile.transcodeImage(decodedData, imageIndex, levelIndex, basisFormat, 0, 0)) {
223
192
  throw new Error('failed to start Basis transcoding');
224
193
  }
225
-
226
194
  return {
227
195
  width: width,
228
196
  height: height,
@@ -235,15 +203,12 @@ function transcodeImage(basisFile, imageIndex, levelIndex, options) {
235
203
 
236
204
  function parseKTX2File(KTX2File, data, options) {
237
205
  var ktx2File = new KTX2File(new Uint8Array(data));
238
-
239
206
  try {
240
207
  if (!ktx2File.startTranscoding()) {
241
208
  throw new Error('failed to start KTX2 transcoding');
242
209
  }
243
-
244
210
  var levelsCount = ktx2File.getLevels();
245
211
  var levels = [];
246
-
247
212
  for (var levelIndex = 0; levelIndex < levelsCount; levelIndex++) {
248
213
  levels.push(transcodeKTX2Image(ktx2File, levelIndex, options));
249
214
  break;
@@ -258,22 +223,19 @@ function parseKTX2File(KTX2File, data, options) {
258
223
 
259
224
  function transcodeKTX2Image(ktx2File, levelIndex, options) {
260
225
  var _ktx2File$getImageLev = ktx2File.getImageLevelInfo(levelIndex, 0, 0),
261
- alphaFlag = _ktx2File$getImageLev.alphaFlag,
262
- height = _ktx2File$getImageLev.height,
263
- width = _ktx2File$getImageLev.width;
226
+ alphaFlag = _ktx2File$getImageLev.alphaFlag,
227
+ height = _ktx2File$getImageLev.height,
228
+ width = _ktx2File$getImageLev.width;
264
229
 
265
230
  var _getBasisOptions2 = getBasisOptions(options, alphaFlag),
266
- compressed = _getBasisOptions2.compressed,
267
- format = _getBasisOptions2.format,
268
- basisFormat = _getBasisOptions2.basisFormat;
269
-
231
+ compressed = _getBasisOptions2.compressed,
232
+ format = _getBasisOptions2.format,
233
+ basisFormat = _getBasisOptions2.basisFormat;
270
234
  var decodedSize = ktx2File.getImageTranscodedSizeInBytes(levelIndex, 0, 0, basisFormat);
271
235
  var decodedData = new Uint8Array(decodedSize);
272
-
273
236
  if (!ktx2File.transcodeImage(decodedData, levelIndex, 0, 0, basisFormat, 0, -1, -1)) {
274
237
  throw new Error('Failed to transcode KTX2 image');
275
238
  }
276
-
277
239
  return {
278
240
  width: width,
279
241
  height: height,
@@ -286,22 +248,18 @@ function transcodeKTX2Image(ktx2File, levelIndex, options) {
286
248
 
287
249
  function getBasisOptions(options, hasAlpha) {
288
250
  var format = options && options.basis && options.basis.format;
289
-
290
251
  if (format === 'auto') {
291
252
  format = selectSupportedBasisFormat();
292
253
  }
293
-
294
254
  if ((0, _typeof2.default)(format) === 'object') {
295
255
  format = hasAlpha ? format.alpha : format.noAlpha;
296
256
  }
297
-
298
257
  format = format.toLowerCase();
299
258
  return OutputFormat[format];
300
259
  }
301
260
 
302
261
  function selectSupportedBasisFormat() {
303
262
  var supportedFormats = (0, _textureFormats.getSupportedGPUTextureFormats)();
304
-
305
263
  if (supportedFormats.has('astc')) {
306
264
  return 'astc-4x4';
307
265
  } else if (supportedFormats.has('dxt')) {
@@ -319,7 +277,6 @@ function selectSupportedBasisFormat() {
319
277
  } else if (supportedFormats.has('etc2')) {
320
278
  return 'etc2';
321
279
  }
322
-
323
280
  return 'rgb565';
324
281
  }
325
282
  //# sourceMappingURL=parse-basis.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/parsers/parse-basis.ts"],"names":["OutputFormat","etc1","basisFormat","compressed","format","GL_EXTENSIONS_CONSTANTS","COMPRESSED_RGB_ETC1_WEBGL","etc2","bc1","COMPRESSED_RGB_S3TC_DXT1_EXT","bc3","COMPRESSED_RGBA_S3TC_DXT5_EXT","bc4","bc5","COMPRESSED_RGB_PVRTC_4BPPV1_IMG","COMPRESSED_RGBA_PVRTC_4BPPV1_IMG","COMPRESSED_RGBA_ASTC_4X4_KHR","rgba32","rgb565","bgr565","rgba4444","parseBasis","data","options","basis","containerFormat","fileConstructors","parseKTX2File","KTX2File","BasisFile","parseBasisFile","module","basisFile","Uint8Array","startTranscoding","Error","imageCount","getNumImages","images","imageIndex","levelsCount","getNumLevels","levels","levelIndex","push","transcodeImage","close","delete","width","getImageWidth","height","getImageHeight","hasAlpha","getHasAlpha","getBasisOptions","decodedSize","getImageTranscodedSizeInBytes","decodedData","ktx2File","getLevels","transcodeKTX2Image","getImageLevelInfo","alphaFlag","selectSupportedBasisFormat","alpha","noAlpha","toLowerCase","supportedFormats","has"],"mappings":"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","sourcesContent":["/* eslint-disable indent */\nimport type {TextureLevel} from '@loaders.gl/schema';\nimport {loadBasisEncoderModule, loadBasisTrascoderModule} from './basis-module-loader';\nimport {GL_EXTENSIONS_CONSTANTS} from '../gl-extensions';\nimport {getSupportedGPUTextureFormats} from '../utils/texture-formats';\nimport {isKTX} from './parse-ktx';\n\nexport type BasisFormat =\n | 'etc1'\n | 'etc2'\n | 'bc1'\n | 'bc3'\n | 'bc4'\n | 'bc5'\n | 'bc7-m6-opaque-only'\n | 'bc7-m5'\n | 'pvrtc1-4-rgb'\n | 'pvrtc1-4-rgba'\n | 'astc-4x4'\n | 'atc-rgb'\n | 'atc-rgba-interpolated-alpha'\n | 'rgba32'\n | 'rgb565'\n | 'bgr565'\n | 'rgba4444';\n\ntype BasisOutputOptions = {\n basisFormat: number;\n compressed: boolean;\n format?: number;\n};\n\nconst OutputFormat: Record<string, BasisOutputOptions> = {\n etc1: {\n basisFormat: 0,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_ETC1_WEBGL\n },\n etc2: {basisFormat: 1, compressed: true},\n bc1: {\n basisFormat: 2,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_S3TC_DXT1_EXT\n },\n bc3: {\n basisFormat: 3,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT5_EXT\n },\n bc4: {basisFormat: 4, compressed: true},\n bc5: {basisFormat: 5, compressed: true},\n 'bc7-m6-opaque-only': {basisFormat: 6, compressed: true},\n 'bc7-m5': {basisFormat: 7, compressed: true},\n 'pvrtc1-4-rgb': {\n basisFormat: 8,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_PVRTC_4BPPV1_IMG\n },\n 'pvrtc1-4-rgba': {\n basisFormat: 9,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG\n },\n 'astc-4x4': {\n basisFormat: 10,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_4X4_KHR\n },\n 'atc-rgb': {basisFormat: 11, compressed: true},\n 'atc-rgba-interpolated-alpha': {basisFormat: 12, compressed: true},\n rgba32: {basisFormat: 13, compressed: false},\n rgb565: {basisFormat: 14, compressed: false},\n bgr565: {basisFormat: 15, compressed: false},\n rgba4444: {basisFormat: 16, compressed: false}\n};\n\n/**\n * parse data with a Binomial Basis_Universal module\n * @param data\n * @param options\n * @returns compressed texture data\n */\nexport default async function parseBasis(data: ArrayBuffer, options): Promise<TextureLevel[][]> {\n if (options.basis.containerFormat === 'auto') {\n if (isKTX(data)) {\n const fileConstructors = await loadBasisEncoderModule(options);\n return parseKTX2File(fileConstructors.KTX2File, data, options);\n }\n const {BasisFile} = await loadBasisTrascoderModule(options);\n return parseBasisFile(BasisFile, data, options);\n }\n switch (options.basis.module) {\n case 'encoder':\n const fileConstructors = await loadBasisEncoderModule(options);\n switch (options.basis.containerFormat) {\n case 'ktx2':\n return parseKTX2File(fileConstructors.KTX2File, data, options);\n case 'basis':\n default:\n return parseBasisFile(fileConstructors.BasisFile, data, options);\n }\n case 'transcoder':\n default:\n const {BasisFile} = await loadBasisTrascoderModule(options);\n return parseBasisFile(BasisFile, data, options);\n }\n}\n\n/**\n * Parse *.basis file data\n * @param BasisFile - initialized transcoder module\n * @param data\n * @param options\n * @returns compressed texture data\n */\nfunction parseBasisFile(BasisFile, data, options): TextureLevel[][] {\n const basisFile = new BasisFile(new Uint8Array(data));\n\n try {\n if (!basisFile.startTranscoding()) {\n throw new Error('Failed to start basis transcoding');\n }\n\n const imageCount = basisFile.getNumImages();\n const images: TextureLevel[][] = [];\n\n for (let imageIndex = 0; imageIndex < imageCount; imageIndex++) {\n const levelsCount = basisFile.getNumLevels(imageIndex);\n const levels: TextureLevel[] = [];\n\n for (let levelIndex = 0; levelIndex < levelsCount; levelIndex++) {\n levels.push(transcodeImage(basisFile, imageIndex, levelIndex, options));\n }\n\n images.push(levels);\n }\n\n return images;\n } finally {\n basisFile.close();\n basisFile.delete();\n }\n}\n\n/**\n * Parse the particular level image of a basis file\n * @param basisFile\n * @param imageIndex\n * @param levelIndex\n * @param options\n * @returns compressed texture data\n */\nfunction transcodeImage(basisFile, imageIndex, levelIndex, options): TextureLevel {\n const width = basisFile.getImageWidth(imageIndex, levelIndex);\n const height = basisFile.getImageHeight(imageIndex, levelIndex);\n\n // See https://github.com/BinomialLLC/basis_universal/pull/83\n const hasAlpha = basisFile.getHasAlpha(/* imageIndex, levelIndex */);\n\n // Check options for output format etc\n const {compressed, format, basisFormat} = getBasisOptions(options, hasAlpha);\n\n const decodedSize = basisFile.getImageTranscodedSizeInBytes(imageIndex, levelIndex, basisFormat);\n const decodedData = new Uint8Array(decodedSize);\n\n if (!basisFile.transcodeImage(decodedData, imageIndex, levelIndex, basisFormat, 0, 0)) {\n throw new Error('failed to start Basis transcoding');\n }\n\n return {\n // standard loaders.gl image category payload\n width,\n height,\n data: decodedData,\n compressed,\n format,\n\n // Additional fields\n // Add levelSize field.\n hasAlpha\n };\n}\n\n/**\n * Parse *.ktx2 file data\n * @param KTX2File\n * @param data\n * @param options\n * @returns compressed texture data\n */\nfunction parseKTX2File(KTX2File, data: ArrayBuffer, options): TextureLevel[][] {\n const ktx2File = new KTX2File(new Uint8Array(data));\n\n try {\n if (!ktx2File.startTranscoding()) {\n throw new Error('failed to start KTX2 transcoding');\n }\n const levelsCount = ktx2File.getLevels();\n const levels: TextureLevel[] = [];\n\n for (let levelIndex = 0; levelIndex < levelsCount; levelIndex++) {\n levels.push(transcodeKTX2Image(ktx2File, levelIndex, options));\n break; // texture app can only show one level for some reason\n }\n\n return [levels];\n } finally {\n ktx2File.close();\n ktx2File.delete();\n }\n}\n\n/**\n * Parse the particular level image of a ktx2 file\n * @param ktx2File\n * @param levelIndex\n * @param options\n * @returns\n */\nfunction transcodeKTX2Image(ktx2File, levelIndex: number, options): TextureLevel {\n const {alphaFlag, height, width} = ktx2File.getImageLevelInfo(levelIndex, 0, 0);\n\n // Check options for output format etc\n const {compressed, format, basisFormat} = getBasisOptions(options, alphaFlag);\n\n const decodedSize = ktx2File.getImageTranscodedSizeInBytes(\n levelIndex,\n 0 /* layerIndex */,\n 0 /* faceIndex */,\n basisFormat\n );\n const decodedData = new Uint8Array(decodedSize);\n\n if (\n !ktx2File.transcodeImage(\n decodedData,\n levelIndex,\n 0 /* layerIndex */,\n 0 /* faceIndex */,\n basisFormat,\n 0,\n -1 /* channel0 */,\n -1 /* channel1 */\n )\n ) {\n throw new Error('Failed to transcode KTX2 image');\n }\n\n return {\n // standard loaders.gl image category payload\n width,\n height,\n data: decodedData,\n compressed,\n\n // Additional fields\n // Add levelSize field.\n hasAlpha: alphaFlag,\n format\n };\n}\n\n/**\n * Get BasisFormat by loader format option\n * @param options\n * @param hasAlpha\n * @returns BasisFormat data\n */\nfunction getBasisOptions(options, hasAlpha: boolean): BasisOutputOptions {\n let format = options && options.basis && options.basis.format;\n if (format === 'auto') {\n format = selectSupportedBasisFormat();\n }\n if (typeof format === 'object') {\n format = hasAlpha ? format.alpha : format.noAlpha;\n }\n format = format.toLowerCase();\n return OutputFormat[format];\n}\n\n/**\n * Select transcode format from the list of supported formats\n * @returns key for OutputFormat map\n */\nexport function selectSupportedBasisFormat():\n | BasisFormat\n | {\n alpha: BasisFormat;\n noAlpha: BasisFormat;\n } {\n const supportedFormats = getSupportedGPUTextureFormats();\n if (supportedFormats.has('astc')) {\n return 'astc-4x4';\n } else if (supportedFormats.has('dxt')) {\n return {\n alpha: 'bc3',\n noAlpha: 'bc1'\n };\n } else if (supportedFormats.has('pvrtc')) {\n return {\n alpha: 'pvrtc1-4-rgba',\n noAlpha: 'pvrtc1-4-rgb'\n };\n } else if (supportedFormats.has('etc1')) {\n return 'etc1';\n } else if (supportedFormats.has('etc2')) {\n return 'etc2';\n }\n return 'rgb565';\n}\n"],"file":"parse-basis.js"}
1
+ {"version":3,"file":"parse-basis.js","names":["OutputFormat","etc1","basisFormat","compressed","format","GL_EXTENSIONS_CONSTANTS","COMPRESSED_RGB_ETC1_WEBGL","etc2","bc1","COMPRESSED_RGB_S3TC_DXT1_EXT","bc3","COMPRESSED_RGBA_S3TC_DXT5_EXT","bc4","bc5","COMPRESSED_RGB_PVRTC_4BPPV1_IMG","COMPRESSED_RGBA_PVRTC_4BPPV1_IMG","COMPRESSED_RGBA_ASTC_4X4_KHR","rgba32","rgb565","bgr565","rgba4444","parseBasis","data","options","basis","containerFormat","isKTX","loadBasisEncoderModule","fileConstructors","parseKTX2File","KTX2File","loadBasisTrascoderModule","BasisFile","parseBasisFile","module","basisFile","Uint8Array","startTranscoding","Error","imageCount","getNumImages","images","imageIndex","levelsCount","getNumLevels","levels","levelIndex","push","transcodeImage","close","delete","width","getImageWidth","height","getImageHeight","hasAlpha","getHasAlpha","getBasisOptions","decodedSize","getImageTranscodedSizeInBytes","decodedData","ktx2File","getLevels","transcodeKTX2Image","getImageLevelInfo","alphaFlag","selectSupportedBasisFormat","alpha","noAlpha","toLowerCase","supportedFormats","getSupportedGPUTextureFormats","has"],"sources":["../../../../src/lib/parsers/parse-basis.ts"],"sourcesContent":["/* eslint-disable indent */\nimport type {TextureLevel} from '@loaders.gl/schema';\nimport {loadBasisEncoderModule, loadBasisTrascoderModule} from './basis-module-loader';\nimport {GL_EXTENSIONS_CONSTANTS} from '../gl-extensions';\nimport {getSupportedGPUTextureFormats} from '../utils/texture-formats';\nimport {isKTX} from './parse-ktx';\n\nexport type BasisFormat =\n | 'etc1'\n | 'etc2'\n | 'bc1'\n | 'bc3'\n | 'bc4'\n | 'bc5'\n | 'bc7-m6-opaque-only'\n | 'bc7-m5'\n | 'pvrtc1-4-rgb'\n | 'pvrtc1-4-rgba'\n | 'astc-4x4'\n | 'atc-rgb'\n | 'atc-rgba-interpolated-alpha'\n | 'rgba32'\n | 'rgb565'\n | 'bgr565'\n | 'rgba4444';\n\ntype BasisOutputOptions = {\n basisFormat: number;\n compressed: boolean;\n format?: number;\n};\n\nconst OutputFormat: Record<string, BasisOutputOptions> = {\n etc1: {\n basisFormat: 0,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_ETC1_WEBGL\n },\n etc2: {basisFormat: 1, compressed: true},\n bc1: {\n basisFormat: 2,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_S3TC_DXT1_EXT\n },\n bc3: {\n basisFormat: 3,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT5_EXT\n },\n bc4: {basisFormat: 4, compressed: true},\n bc5: {basisFormat: 5, compressed: true},\n 'bc7-m6-opaque-only': {basisFormat: 6, compressed: true},\n 'bc7-m5': {basisFormat: 7, compressed: true},\n 'pvrtc1-4-rgb': {\n basisFormat: 8,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_PVRTC_4BPPV1_IMG\n },\n 'pvrtc1-4-rgba': {\n basisFormat: 9,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG\n },\n 'astc-4x4': {\n basisFormat: 10,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_4X4_KHR\n },\n 'atc-rgb': {basisFormat: 11, compressed: true},\n 'atc-rgba-interpolated-alpha': {basisFormat: 12, compressed: true},\n rgba32: {basisFormat: 13, compressed: false},\n rgb565: {basisFormat: 14, compressed: false},\n bgr565: {basisFormat: 15, compressed: false},\n rgba4444: {basisFormat: 16, compressed: false}\n};\n\n/**\n * parse data with a Binomial Basis_Universal module\n * @param data\n * @param options\n * @returns compressed texture data\n */\nexport default async function parseBasis(data: ArrayBuffer, options): Promise<TextureLevel[][]> {\n if (options.basis.containerFormat === 'auto') {\n if (isKTX(data)) {\n const fileConstructors = await loadBasisEncoderModule(options);\n return parseKTX2File(fileConstructors.KTX2File, data, options);\n }\n const {BasisFile} = await loadBasisTrascoderModule(options);\n return parseBasisFile(BasisFile, data, options);\n }\n switch (options.basis.module) {\n case 'encoder':\n const fileConstructors = await loadBasisEncoderModule(options);\n switch (options.basis.containerFormat) {\n case 'ktx2':\n return parseKTX2File(fileConstructors.KTX2File, data, options);\n case 'basis':\n default:\n return parseBasisFile(fileConstructors.BasisFile, data, options);\n }\n case 'transcoder':\n default:\n const {BasisFile} = await loadBasisTrascoderModule(options);\n return parseBasisFile(BasisFile, data, options);\n }\n}\n\n/**\n * Parse *.basis file data\n * @param BasisFile - initialized transcoder module\n * @param data\n * @param options\n * @returns compressed texture data\n */\nfunction parseBasisFile(BasisFile, data, options): TextureLevel[][] {\n const basisFile = new BasisFile(new Uint8Array(data));\n\n try {\n if (!basisFile.startTranscoding()) {\n throw new Error('Failed to start basis transcoding');\n }\n\n const imageCount = basisFile.getNumImages();\n const images: TextureLevel[][] = [];\n\n for (let imageIndex = 0; imageIndex < imageCount; imageIndex++) {\n const levelsCount = basisFile.getNumLevels(imageIndex);\n const levels: TextureLevel[] = [];\n\n for (let levelIndex = 0; levelIndex < levelsCount; levelIndex++) {\n levels.push(transcodeImage(basisFile, imageIndex, levelIndex, options));\n }\n\n images.push(levels);\n }\n\n return images;\n } finally {\n basisFile.close();\n basisFile.delete();\n }\n}\n\n/**\n * Parse the particular level image of a basis file\n * @param basisFile\n * @param imageIndex\n * @param levelIndex\n * @param options\n * @returns compressed texture data\n */\nfunction transcodeImage(basisFile, imageIndex, levelIndex, options): TextureLevel {\n const width = basisFile.getImageWidth(imageIndex, levelIndex);\n const height = basisFile.getImageHeight(imageIndex, levelIndex);\n\n // See https://github.com/BinomialLLC/basis_universal/pull/83\n const hasAlpha = basisFile.getHasAlpha(/* imageIndex, levelIndex */);\n\n // Check options for output format etc\n const {compressed, format, basisFormat} = getBasisOptions(options, hasAlpha);\n\n const decodedSize = basisFile.getImageTranscodedSizeInBytes(imageIndex, levelIndex, basisFormat);\n const decodedData = new Uint8Array(decodedSize);\n\n if (!basisFile.transcodeImage(decodedData, imageIndex, levelIndex, basisFormat, 0, 0)) {\n throw new Error('failed to start Basis transcoding');\n }\n\n return {\n // standard loaders.gl image category payload\n width,\n height,\n data: decodedData,\n compressed,\n format,\n\n // Additional fields\n // Add levelSize field.\n hasAlpha\n };\n}\n\n/**\n * Parse *.ktx2 file data\n * @param KTX2File\n * @param data\n * @param options\n * @returns compressed texture data\n */\nfunction parseKTX2File(KTX2File, data: ArrayBuffer, options): TextureLevel[][] {\n const ktx2File = new KTX2File(new Uint8Array(data));\n\n try {\n if (!ktx2File.startTranscoding()) {\n throw new Error('failed to start KTX2 transcoding');\n }\n const levelsCount = ktx2File.getLevels();\n const levels: TextureLevel[] = [];\n\n for (let levelIndex = 0; levelIndex < levelsCount; levelIndex++) {\n levels.push(transcodeKTX2Image(ktx2File, levelIndex, options));\n break; // texture app can only show one level for some reason\n }\n\n return [levels];\n } finally {\n ktx2File.close();\n ktx2File.delete();\n }\n}\n\n/**\n * Parse the particular level image of a ktx2 file\n * @param ktx2File\n * @param levelIndex\n * @param options\n * @returns\n */\nfunction transcodeKTX2Image(ktx2File, levelIndex: number, options): TextureLevel {\n const {alphaFlag, height, width} = ktx2File.getImageLevelInfo(levelIndex, 0, 0);\n\n // Check options for output format etc\n const {compressed, format, basisFormat} = getBasisOptions(options, alphaFlag);\n\n const decodedSize = ktx2File.getImageTranscodedSizeInBytes(\n levelIndex,\n 0 /* layerIndex */,\n 0 /* faceIndex */,\n basisFormat\n );\n const decodedData = new Uint8Array(decodedSize);\n\n if (\n !ktx2File.transcodeImage(\n decodedData,\n levelIndex,\n 0 /* layerIndex */,\n 0 /* faceIndex */,\n basisFormat,\n 0,\n -1 /* channel0 */,\n -1 /* channel1 */\n )\n ) {\n throw new Error('Failed to transcode KTX2 image');\n }\n\n return {\n // standard loaders.gl image category payload\n width,\n height,\n data: decodedData,\n compressed,\n\n // Additional fields\n // Add levelSize field.\n hasAlpha: alphaFlag,\n format\n };\n}\n\n/**\n * Get BasisFormat by loader format option\n * @param options\n * @param hasAlpha\n * @returns BasisFormat data\n */\nfunction getBasisOptions(options, hasAlpha: boolean): BasisOutputOptions {\n let format = options && options.basis && options.basis.format;\n if (format === 'auto') {\n format = selectSupportedBasisFormat();\n }\n if (typeof format === 'object') {\n format = hasAlpha ? format.alpha : format.noAlpha;\n }\n format = format.toLowerCase();\n return OutputFormat[format];\n}\n\n/**\n * Select transcode format from the list of supported formats\n * @returns key for OutputFormat map\n */\nexport function selectSupportedBasisFormat():\n | BasisFormat\n | {\n alpha: BasisFormat;\n noAlpha: BasisFormat;\n } {\n const supportedFormats = getSupportedGPUTextureFormats();\n if (supportedFormats.has('astc')) {\n return 'astc-4x4';\n } else if (supportedFormats.has('dxt')) {\n return {\n alpha: 'bc3',\n noAlpha: 'bc1'\n };\n } else if (supportedFormats.has('pvrtc')) {\n return {\n alpha: 'pvrtc1-4-rgba',\n noAlpha: 'pvrtc1-4-rgb'\n };\n } else if (supportedFormats.has('etc1')) {\n return 'etc1';\n } else if (supportedFormats.has('etc2')) {\n return 'etc2';\n }\n return 'rgb565';\n}\n"],"mappings":"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"}
@@ -4,26 +4,19 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.parseCompressedTexture = parseCompressedTexture;
7
-
8
7
  var _parseKtx = require("./parse-ktx");
9
-
10
8
  var _parseDds = require("./parse-dds");
11
-
12
9
  var _parsePvr = require("./parse-pvr");
13
-
14
10
  function parseCompressedTexture(data) {
15
11
  if ((0, _parseKtx.isKTX)(data)) {
16
12
  return (0, _parseKtx.parseKTX)(data);
17
13
  }
18
-
19
14
  if ((0, _parseDds.isDDS)(data)) {
20
15
  return (0, _parseDds.parseDDS)(data);
21
16
  }
22
-
23
17
  if ((0, _parsePvr.isPVR)(data)) {
24
18
  return (0, _parsePvr.parsePVR)(data);
25
19
  }
26
-
27
20
  throw new Error('Texture container format not recognized');
28
21
  }
29
22
  //# sourceMappingURL=parse-compressed-texture.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/parsers/parse-compressed-texture.ts"],"names":["parseCompressedTexture","data","Error"],"mappings":";;;;;;;AACA;;AACA;;AACA;;AAOO,SAASA,sBAAT,CAAgCC,IAAhC,EAAmE;AACxE,MAAI,qBAAMA,IAAN,CAAJ,EAAiB;AAGf,WAAO,wBAASA,IAAT,CAAP;AACD;;AACD,MAAI,qBAAMA,IAAN,CAAJ,EAAiB;AACf,WAAO,wBAASA,IAAT,CAAP;AACD;;AACD,MAAI,qBAAMA,IAAN,CAAJ,EAAiB;AACf,WAAO,wBAASA,IAAT,CAAP;AACD;;AACD,QAAM,IAAIC,KAAJ,CAAU,yCAAV,CAAN;AACD","sourcesContent":["import type {TextureLevel} from '@loaders.gl/schema';\nimport {isKTX, parseKTX} from './parse-ktx';\nimport {isDDS, parseDDS} from './parse-dds';\nimport {isPVR, parsePVR} from './parse-pvr';\n\n/**\n * Deduces format and parses compressed texture loaded in ArrayBuffer\n * @param data - binary data of compressed texture\n * @returns Array of the texture levels\n */\nexport function parseCompressedTexture(data: ArrayBuffer): TextureLevel[] {\n if (isKTX(data)) {\n // TODO: remove @ts-ignore when `parseKTX` output is normalized to loaders.gl texture format\n // @ts-ignore\n return parseKTX(data);\n }\n if (isDDS(data)) {\n return parseDDS(data);\n }\n if (isPVR(data)) {\n return parsePVR(data);\n }\n throw new Error('Texture container format not recognized');\n}\n"],"file":"parse-compressed-texture.js"}
1
+ {"version":3,"file":"parse-compressed-texture.js","names":["parseCompressedTexture","data","isKTX","parseKTX","isDDS","parseDDS","isPVR","parsePVR","Error"],"sources":["../../../../src/lib/parsers/parse-compressed-texture.ts"],"sourcesContent":["import type {TextureLevel} from '@loaders.gl/schema';\nimport {isKTX, parseKTX} from './parse-ktx';\nimport {isDDS, parseDDS} from './parse-dds';\nimport {isPVR, parsePVR} from './parse-pvr';\n\n/**\n * Deduces format and parses compressed texture loaded in ArrayBuffer\n * @param data - binary data of compressed texture\n * @returns Array of the texture levels\n */\nexport function parseCompressedTexture(data: ArrayBuffer): TextureLevel[] {\n if (isKTX(data)) {\n // TODO: remove @ts-ignore when `parseKTX` output is normalized to loaders.gl texture format\n // @ts-ignore\n return parseKTX(data);\n }\n if (isDDS(data)) {\n return parseDDS(data);\n }\n if (isPVR(data)) {\n return parsePVR(data);\n }\n throw new Error('Texture container format not recognized');\n}\n"],"mappings":";;;;;;AACA;AACA;AACA;AAOO,SAASA,sBAAsB,CAACC,IAAiB,EAAkB;EACxE,IAAI,IAAAC,eAAK,EAACD,IAAI,CAAC,EAAE;IAGf,OAAO,IAAAE,kBAAQ,EAACF,IAAI,CAAC;EACvB;EACA,IAAI,IAAAG,eAAK,EAACH,IAAI,CAAC,EAAE;IACf,OAAO,IAAAI,kBAAQ,EAACJ,IAAI,CAAC;EACvB;EACA,IAAI,IAAAK,eAAK,EAACL,IAAI,CAAC,EAAE;IACf,OAAO,IAAAM,kBAAQ,EAACN,IAAI,CAAC;EACvB;EACA,MAAM,IAAIO,KAAK,CAAC,yCAAyC,CAAC;AAC5D"}
@@ -1,36 +1,27 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.parseCrunch = parseCrunch;
9
-
10
8
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
11
-
12
9
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
13
-
14
10
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
15
-
16
11
  var _crunchModuleLoader = require("./crunch-module-loader");
17
-
18
12
  var _glExtensions = require("../gl-extensions");
19
-
20
13
  var _loaderUtils = require("@loaders.gl/loader-utils");
21
-
22
14
  var _parseDds = require("./parse-dds");
23
-
24
15
  var _extractMipmapImages = require("../utils/extract-mipmap-images");
25
-
26
16
  var _DXT_FORMAT_MAP;
27
-
28
17
  var CRN_FORMAT = {
29
18
  cCRNFmtInvalid: -1,
30
19
  cCRNFmtDXT1: 0,
31
20
  cCRNFmtDXT3: 1,
32
21
  cCRNFmtDXT5: 2
22
+
33
23
  };
24
+
34
25
  var DXT_FORMAT_MAP = (_DXT_FORMAT_MAP = {}, (0, _defineProperty2.default)(_DXT_FORMAT_MAP, CRN_FORMAT.cCRNFmtDXT1, {
35
26
  pixelFormat: _glExtensions.GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_S3TC_DXT1_EXT,
36
27
  sizeFunction: _parseDds.getDxt1LevelSize
@@ -47,7 +38,6 @@ var dst;
47
38
  function parseCrunch(_x, _x2) {
48
39
  return _parseCrunch.apply(this, arguments);
49
40
  }
50
-
51
41
  function _parseCrunch() {
52
42
  _parseCrunch = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee(data, options) {
53
43
  var crunchModule, srcSize, bytes, src, format, mipMapLevels, width, height, sizeFunction, dstSize, i, image;
@@ -57,21 +47,21 @@ function _parseCrunch() {
57
47
  case 0:
58
48
  _context.next = 2;
59
49
  return (0, _crunchModuleLoader.loadCrunchModule)(options);
60
-
61
50
  case 2:
62
51
  crunchModule = _context.sent;
63
52
  srcSize = data.byteLength;
64
53
  bytes = new Uint8Array(data);
65
54
  src = crunchModule._malloc(srcSize);
66
55
  arrayBufferCopy(bytes, crunchModule.HEAPU8, src, srcSize);
56
+
67
57
  format = crunchModule._crn_get_dxt_format(src, srcSize);
68
58
  (0, _loaderUtils.assert)(Boolean(DXT_FORMAT_MAP[format]), 'Unsupported format');
59
+
69
60
  mipMapLevels = crunchModule._crn_get_levels(src, srcSize);
70
61
  width = crunchModule._crn_get_width(src, srcSize);
71
62
  height = crunchModule._crn_get_height(src, srcSize);
72
63
  sizeFunction = DXT_FORMAT_MAP[format].sizeFunction;
73
64
  dstSize = 0;
74
-
75
65
  for (i = 0; i < mipMapLevels; ++i) {
76
66
  dstSize += sizeFunction(width >> i, height >> i);
77
67
  }
@@ -80,7 +70,6 @@ function _parseCrunch() {
80
70
  if (dst) {
81
71
  crunchModule._free(dst);
82
72
  }
83
-
84
73
  dst = crunchModule._malloc(dstSize);
85
74
  cachedDstSize = dstSize;
86
75
  }
@@ -88,7 +77,6 @@ function _parseCrunch() {
88
77
  crunchModule._crn_decompress(src, srcSize, dst, dstSize, 0, mipMapLevels);
89
78
 
90
79
  crunchModule._free(src);
91
-
92
80
  image = new Uint8Array(crunchModule.HEAPU8.buffer, dst, dstSize).slice();
93
81
  return _context.abrupt("return", (0, _extractMipmapImages.extractMipmapImages)(image, {
94
82
  mipMapLevels: mipMapLevels,
@@ -97,7 +85,6 @@ function _parseCrunch() {
97
85
  sizeFunction: sizeFunction,
98
86
  internalFormat: DXT_FORMAT_MAP[format].pixelFormat
99
87
  }));
100
-
101
88
  case 20:
102
89
  case "end":
103
90
  return _context.stop();
@@ -107,18 +94,15 @@ function _parseCrunch() {
107
94
  }));
108
95
  return _parseCrunch.apply(this, arguments);
109
96
  }
110
-
111
97
  function arrayBufferCopy(srcData, dstData, dstByteOffset, numBytes) {
112
98
  var i;
113
99
  var dst32Offset = dstByteOffset / 4;
114
100
  var tail = numBytes % 4;
115
101
  var src32 = new Uint32Array(srcData.buffer, 0, (numBytes - tail) / 4);
116
102
  var dst32 = new Uint32Array(dstData.buffer);
117
-
118
103
  for (i = 0; i < src32.length; i++) {
119
104
  dst32[dst32Offset + i] = src32[i];
120
105
  }
121
-
122
106
  for (i = numBytes - tail; i < numBytes; i++) {
123
107
  dstData[dstByteOffset + i] = srcData[i];
124
108
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/parsers/parse-crunch.ts"],"names":["CRN_FORMAT","cCRNFmtInvalid","cCRNFmtDXT1","cCRNFmtDXT3","cCRNFmtDXT5","DXT_FORMAT_MAP","pixelFormat","GL_EXTENSIONS_CONSTANTS","COMPRESSED_RGB_S3TC_DXT1_EXT","sizeFunction","getDxt1LevelSize","COMPRESSED_RGBA_S3TC_DXT3_EXT","getDxtXLevelSize","COMPRESSED_RGBA_S3TC_DXT5_EXT","cachedDstSize","dst","parseCrunch","data","options","crunchModule","srcSize","byteLength","bytes","Uint8Array","src","_malloc","arrayBufferCopy","HEAPU8","format","_crn_get_dxt_format","Boolean","mipMapLevels","_crn_get_levels","width","_crn_get_width","height","_crn_get_height","dstSize","i","_free","_crn_decompress","image","buffer","slice","internalFormat","srcData","dstData","dstByteOffset","numBytes","dst32Offset","tail","src32","Uint32Array","dst32","length"],"mappings":"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","sourcesContent":["import type {TextureLevel} from '@loaders.gl/schema';\nimport {loadCrunchModule} from './crunch-module-loader';\nimport {GL_EXTENSIONS_CONSTANTS} from '../gl-extensions';\nimport {assert} from '@loaders.gl/loader-utils';\nimport {getDxt1LevelSize, getDxtXLevelSize} from './parse-dds';\nimport {extractMipmapImages} from '../utils/extract-mipmap-images';\n\n// Taken from crnlib.h\nconst CRN_FORMAT = {\n cCRNFmtInvalid: -1,\n\n cCRNFmtDXT1: 0,\n // cCRNFmtDXT3 is not currently supported when writing to CRN - only DDS.\n cCRNFmtDXT3: 1,\n cCRNFmtDXT5: 2\n\n // Crunch supports more formats than this.\n};\n\n/** Mapping of Crunch formats to DXT formats. */\nconst DXT_FORMAT_MAP = {\n [CRN_FORMAT.cCRNFmtDXT1]: {\n pixelFormat: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_S3TC_DXT1_EXT,\n sizeFunction: getDxt1LevelSize\n },\n [CRN_FORMAT.cCRNFmtDXT3]: {\n pixelFormat: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT3_EXT,\n sizeFunction: getDxtXLevelSize\n },\n [CRN_FORMAT.cCRNFmtDXT5]: {\n pixelFormat: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT5_EXT,\n sizeFunction: getDxtXLevelSize\n }\n};\n\nlet cachedDstSize = 0;\nlet dst: number;\n\n/**\n * Parse texture data as \"CRN\" format.\n * Function is \"async\" as emscriptified decoder module is loaded asyncronously\n * @param data - binary data of compressed texture\n * @returns Promise of Array of the texture levels\n */\nexport async function parseCrunch(data, options: any): Promise<TextureLevel[]> {\n const crunchModule = await loadCrunchModule(options);\n\n // Copy the contents of the arrayBuffer into emscriptens heap.\n const srcSize = data.byteLength;\n const bytes = new Uint8Array(data);\n const src = crunchModule._malloc(srcSize);\n arrayBufferCopy(bytes, crunchModule.HEAPU8, src, srcSize);\n\n // Determine what type of compressed data the file contains.\n const format = crunchModule._crn_get_dxt_format(src, srcSize);\n assert(Boolean(DXT_FORMAT_MAP[format]), 'Unsupported format');\n\n // Gather basic metrics about the DXT data.\n const mipMapLevels = crunchModule._crn_get_levels(src, srcSize);\n const width = crunchModule._crn_get_width(src, srcSize);\n const height = crunchModule._crn_get_height(src, srcSize);\n // const bytesPerBlock = crunchModule._crn_get_bytes_per_block(src, srcSize);\n\n // Determine the size of the decoded DXT data.\n const sizeFunction = DXT_FORMAT_MAP[format].sizeFunction;\n let dstSize = 0;\n for (let i = 0; i < mipMapLevels; ++i) {\n dstSize += sizeFunction(width >> i, height >> i);\n }\n\n // Allocate enough space on the emscripten heap to hold the decoded DXT data\n // or reuse the existing allocation if a previous call to this function has\n // already acquired a large enough buffer.\n if (cachedDstSize < dstSize) {\n if (dst) {\n crunchModule._free(dst);\n }\n dst = crunchModule._malloc(dstSize);\n cachedDstSize = dstSize;\n }\n\n // Decompress the DXT data from the Crunch file into the allocated space.\n crunchModule._crn_decompress(src, srcSize, dst, dstSize, 0, mipMapLevels);\n\n // Release the crunch file data from the emscripten heap.\n crunchModule._free(src);\n\n const image = new Uint8Array(crunchModule.HEAPU8.buffer, dst, dstSize).slice();\n return extractMipmapImages(image, {\n mipMapLevels,\n width,\n height,\n sizeFunction,\n internalFormat: DXT_FORMAT_MAP[format].pixelFormat\n });\n}\n\n/**\n * Copy an array of bytes into or out of the emscripten heap\n * @param {Uint8Array} srcData - Source data array\n * @param {Uint8Array} dstData - Destination data array\n * @param {number} dstByteOffset - Destination data offset\n * @param {number} numBytes - number of bytes to copy\n * @returns {void}\n */\nfunction arrayBufferCopy(srcData, dstData, dstByteOffset, numBytes) {\n let i;\n const dst32Offset = dstByteOffset / 4;\n const tail = numBytes % 4;\n const src32 = new Uint32Array(srcData.buffer, 0, (numBytes - tail) / 4);\n const dst32 = new Uint32Array(dstData.buffer);\n for (i = 0; i < src32.length; i++) {\n dst32[dst32Offset + i] = src32[i];\n }\n for (i = numBytes - tail; i < numBytes; i++) {\n dstData[dstByteOffset + i] = srcData[i];\n }\n}\n"],"file":"parse-crunch.js"}
1
+ {"version":3,"file":"parse-crunch.js","names":["CRN_FORMAT","cCRNFmtInvalid","cCRNFmtDXT1","cCRNFmtDXT3","cCRNFmtDXT5","DXT_FORMAT_MAP","pixelFormat","GL_EXTENSIONS_CONSTANTS","COMPRESSED_RGB_S3TC_DXT1_EXT","sizeFunction","getDxt1LevelSize","COMPRESSED_RGBA_S3TC_DXT3_EXT","getDxtXLevelSize","COMPRESSED_RGBA_S3TC_DXT5_EXT","cachedDstSize","dst","parseCrunch","data","options","loadCrunchModule","crunchModule","srcSize","byteLength","bytes","Uint8Array","src","_malloc","arrayBufferCopy","HEAPU8","format","_crn_get_dxt_format","assert","Boolean","mipMapLevels","_crn_get_levels","width","_crn_get_width","height","_crn_get_height","dstSize","i","_free","_crn_decompress","image","buffer","slice","extractMipmapImages","internalFormat","srcData","dstData","dstByteOffset","numBytes","dst32Offset","tail","src32","Uint32Array","dst32","length"],"sources":["../../../../src/lib/parsers/parse-crunch.ts"],"sourcesContent":["import type {TextureLevel} from '@loaders.gl/schema';\nimport {loadCrunchModule} from './crunch-module-loader';\nimport {GL_EXTENSIONS_CONSTANTS} from '../gl-extensions';\nimport {assert} from '@loaders.gl/loader-utils';\nimport {getDxt1LevelSize, getDxtXLevelSize} from './parse-dds';\nimport {extractMipmapImages} from '../utils/extract-mipmap-images';\n\n// Taken from crnlib.h\nconst CRN_FORMAT = {\n cCRNFmtInvalid: -1,\n\n cCRNFmtDXT1: 0,\n // cCRNFmtDXT3 is not currently supported when writing to CRN - only DDS.\n cCRNFmtDXT3: 1,\n cCRNFmtDXT5: 2\n\n // Crunch supports more formats than this.\n};\n\n/** Mapping of Crunch formats to DXT formats. */\nconst DXT_FORMAT_MAP = {\n [CRN_FORMAT.cCRNFmtDXT1]: {\n pixelFormat: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_S3TC_DXT1_EXT,\n sizeFunction: getDxt1LevelSize\n },\n [CRN_FORMAT.cCRNFmtDXT3]: {\n pixelFormat: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT3_EXT,\n sizeFunction: getDxtXLevelSize\n },\n [CRN_FORMAT.cCRNFmtDXT5]: {\n pixelFormat: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT5_EXT,\n sizeFunction: getDxtXLevelSize\n }\n};\n\nlet cachedDstSize = 0;\nlet dst: number;\n\n/**\n * Parse texture data as \"CRN\" format.\n * Function is \"async\" as emscriptified decoder module is loaded asyncronously\n * @param data - binary data of compressed texture\n * @returns Promise of Array of the texture levels\n */\nexport async function parseCrunch(data, options: any): Promise<TextureLevel[]> {\n const crunchModule = await loadCrunchModule(options);\n\n // Copy the contents of the arrayBuffer into emscriptens heap.\n const srcSize = data.byteLength;\n const bytes = new Uint8Array(data);\n const src = crunchModule._malloc(srcSize);\n arrayBufferCopy(bytes, crunchModule.HEAPU8, src, srcSize);\n\n // Determine what type of compressed data the file contains.\n const format = crunchModule._crn_get_dxt_format(src, srcSize);\n assert(Boolean(DXT_FORMAT_MAP[format]), 'Unsupported format');\n\n // Gather basic metrics about the DXT data.\n const mipMapLevels = crunchModule._crn_get_levels(src, srcSize);\n const width = crunchModule._crn_get_width(src, srcSize);\n const height = crunchModule._crn_get_height(src, srcSize);\n // const bytesPerBlock = crunchModule._crn_get_bytes_per_block(src, srcSize);\n\n // Determine the size of the decoded DXT data.\n const sizeFunction = DXT_FORMAT_MAP[format].sizeFunction;\n let dstSize = 0;\n for (let i = 0; i < mipMapLevels; ++i) {\n dstSize += sizeFunction(width >> i, height >> i);\n }\n\n // Allocate enough space on the emscripten heap to hold the decoded DXT data\n // or reuse the existing allocation if a previous call to this function has\n // already acquired a large enough buffer.\n if (cachedDstSize < dstSize) {\n if (dst) {\n crunchModule._free(dst);\n }\n dst = crunchModule._malloc(dstSize);\n cachedDstSize = dstSize;\n }\n\n // Decompress the DXT data from the Crunch file into the allocated space.\n crunchModule._crn_decompress(src, srcSize, dst, dstSize, 0, mipMapLevels);\n\n // Release the crunch file data from the emscripten heap.\n crunchModule._free(src);\n\n const image = new Uint8Array(crunchModule.HEAPU8.buffer, dst, dstSize).slice();\n return extractMipmapImages(image, {\n mipMapLevels,\n width,\n height,\n sizeFunction,\n internalFormat: DXT_FORMAT_MAP[format].pixelFormat\n });\n}\n\n/**\n * Copy an array of bytes into or out of the emscripten heap\n * @param {Uint8Array} srcData - Source data array\n * @param {Uint8Array} dstData - Destination data array\n * @param {number} dstByteOffset - Destination data offset\n * @param {number} numBytes - number of bytes to copy\n * @returns {void}\n */\nfunction arrayBufferCopy(srcData, dstData, dstByteOffset, numBytes) {\n let i;\n const dst32Offset = dstByteOffset / 4;\n const tail = numBytes % 4;\n const src32 = new Uint32Array(srcData.buffer, 0, (numBytes - tail) / 4);\n const dst32 = new Uint32Array(dstData.buffer);\n for (i = 0; i < src32.length; i++) {\n dst32[dst32Offset + i] = src32[i];\n }\n for (i = numBytes - tail; i < numBytes; i++) {\n dstData[dstByteOffset + i] = srcData[i];\n }\n}\n"],"mappings":"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"}
@@ -3,17 +3,13 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.isDDS = isDDS;
7
- exports.parseDDS = parseDDS;
8
6
  exports.getDxt1LevelSize = getDxt1LevelSize;
9
7
  exports.getDxtXLevelSize = getDxtXLevelSize;
10
-
8
+ exports.isDDS = isDDS;
9
+ exports.parseDDS = parseDDS;
11
10
  var _loaderUtils = require("@loaders.gl/loader-utils");
12
-
13
11
  var _glExtensions = require("../gl-extensions");
14
-
15
12
  var _extractMipmapImages = require("../utils/extract-mipmap-images");
16
-
17
13
  var DDS_CONSTANTS = {
18
14
  MAGIC_NUMBER: 0x20534444,
19
15
  HEADER_LENGTH: 31,
@@ -63,11 +59,9 @@ function parseDDS(data) {
63
59
  var sizeFunction = DDS_SIZE_FUNCTIONS[fourCC];
64
60
  (0, _loaderUtils.assert)(internalFormat && sizeFunction, "DDS: Unknown pixel format ".concat(pixelFormatNumber));
65
61
  var mipMapLevels = 1;
66
-
67
62
  if (header[DDS_CONSTANTS.HEADER_FLAGS_INDEX] & DDS_CONSTANTS.DDSD_MIPMAPCOUNT) {
68
63
  mipMapLevels = Math.max(1, header[DDS_CONSTANTS.MIPMAPCOUNT_INDEX]);
69
64
  }
70
-
71
65
  var width = header[DDS_CONSTANTS.HEADER_WIDTH_INDEX];
72
66
  var height = header[DDS_CONSTANTS.HEADER_HEIGHT_INDEX];
73
67
  var dataOffset = header[DDS_CONSTANTS.HEADER_SIZE_INDEX] + 4;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/parsers/parse-dds.ts"],"names":["DDS_CONSTANTS","MAGIC_NUMBER","HEADER_LENGTH","MAGIC_NUMBER_INDEX","HEADER_SIZE_INDEX","HEADER_FLAGS_INDEX","HEADER_HEIGHT_INDEX","HEADER_WIDTH_INDEX","MIPMAPCOUNT_INDEX","HEADER_PF_FLAGS_INDEX","HEADER_PF_FOURCC_INDEX","DDSD_MIPMAPCOUNT","DDPF_FOURCC","DDS_PIXEL_FORMATS","DXT1","GL_EXTENSIONS_CONSTANTS","COMPRESSED_RGB_S3TC_DXT1_EXT","DXT3","COMPRESSED_RGBA_S3TC_DXT3_EXT","DXT5","COMPRESSED_RGBA_S3TC_DXT5_EXT","COMPRESSED_RGB_ATC_WEBGL","ATCA","COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL","ATCI","COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL","getATCLevelSize","getDxt1LevelSize","getATCALevelSize","getDxtXLevelSize","getATCILevelSize","DDS_SIZE_FUNCTIONS","isDDS","data","header","Uint32Array","magic","parseDDS","Int32Array","pixelFormatNumber","Boolean","fourCC","int32ToFourCC","internalFormat","sizeFunction","mipMapLevels","Math","max","width","height","dataOffset","image","Uint8Array","value","String","fromCharCode"],"mappings":"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","sourcesContent":["import type {TextureLevel} from '@loaders.gl/schema';\nimport {assert} from '@loaders.gl/loader-utils';\nimport {GL_EXTENSIONS_CONSTANTS} from '../gl-extensions';\nimport {extractMipmapImages} from '../utils/extract-mipmap-images';\n\nconst DDS_CONSTANTS = {\n MAGIC_NUMBER: 0x20534444,\n HEADER_LENGTH: 31,\n MAGIC_NUMBER_INDEX: 0,\n HEADER_SIZE_INDEX: 1,\n HEADER_FLAGS_INDEX: 2,\n HEADER_HEIGHT_INDEX: 3,\n HEADER_WIDTH_INDEX: 4,\n MIPMAPCOUNT_INDEX: 7,\n HEADER_PF_FLAGS_INDEX: 20,\n HEADER_PF_FOURCC_INDEX: 21,\n DDSD_MIPMAPCOUNT: 0x20000,\n DDPF_FOURCC: 0x4\n};\n\nconst DDS_PIXEL_FORMATS: Record<string, number> = {\n DXT1: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_S3TC_DXT1_EXT,\n DXT3: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT3_EXT,\n DXT5: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT5_EXT,\n 'ATC ': GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_ATC_WEBGL,\n ATCA: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL,\n ATCI: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL\n};\n\nconst getATCLevelSize = getDxt1LevelSize;\nconst getATCALevelSize = getDxtXLevelSize;\nconst getATCILevelSize = getDxtXLevelSize;\n\nconst DDS_SIZE_FUNCTIONS: Record<string, (width: number, height: number) => number> = {\n DXT1: getDxt1LevelSize,\n DXT3: getDxtXLevelSize,\n DXT5: getDxtXLevelSize,\n 'ATC ': getATCLevelSize,\n ATCA: getATCALevelSize,\n ATCI: getATCILevelSize\n};\n\n/**\n * Check if data is in \"DDS\" format by its magic number\n * @param data - binary data of compressed texture\n * @returns true - data in \"DDS\" format, else - false\n */\nexport function isDDS(data: ArrayBuffer): boolean {\n const header = new Uint32Array(data, 0, DDS_CONSTANTS.HEADER_LENGTH);\n const magic = header[DDS_CONSTANTS.MAGIC_NUMBER_INDEX];\n return magic === DDS_CONSTANTS.MAGIC_NUMBER;\n}\n\n/**\n * Parse texture data as \"DDS\" format\n * @param data - binary data of compressed texture\n * @returns Array of the texture levels\n */\nexport function parseDDS(data: ArrayBuffer): TextureLevel[] {\n const header = new Int32Array(data, 0, DDS_CONSTANTS.HEADER_LENGTH);\n const pixelFormatNumber = header[DDS_CONSTANTS.HEADER_PF_FOURCC_INDEX];\n assert(\n Boolean(header[DDS_CONSTANTS.HEADER_PF_FLAGS_INDEX] & DDS_CONSTANTS.DDPF_FOURCC),\n 'DDS: Unsupported format, must contain a FourCC code'\n );\n const fourCC = int32ToFourCC(pixelFormatNumber);\n const internalFormat = DDS_PIXEL_FORMATS[fourCC];\n const sizeFunction = DDS_SIZE_FUNCTIONS[fourCC];\n assert(internalFormat && sizeFunction, `DDS: Unknown pixel format ${pixelFormatNumber}`);\n\n let mipMapLevels = 1;\n if (header[DDS_CONSTANTS.HEADER_FLAGS_INDEX] & DDS_CONSTANTS.DDSD_MIPMAPCOUNT) {\n mipMapLevels = Math.max(1, header[DDS_CONSTANTS.MIPMAPCOUNT_INDEX]);\n }\n const width = header[DDS_CONSTANTS.HEADER_WIDTH_INDEX];\n const height = header[DDS_CONSTANTS.HEADER_HEIGHT_INDEX];\n const dataOffset = header[DDS_CONSTANTS.HEADER_SIZE_INDEX] + 4;\n const image = new Uint8Array(data, dataOffset);\n\n return extractMipmapImages(image, {\n mipMapLevels,\n width,\n height,\n sizeFunction,\n internalFormat\n });\n}\n\n/**\n * DXT1 applicable function to calculate level size\n * @param width - level width\n * @param height - level height\n * @returns level size in bytes\n */\nexport function getDxt1LevelSize(width: number, height: number): number {\n return ((width + 3) >> 2) * ((height + 3) >> 2) * 8;\n}\n\n/**\n * DXT3 & DXT5 applicable function to calculate level size\n * @param width - level width\n * @param height - level height\n * @returns level size in bytes\n */\nexport function getDxtXLevelSize(width: number, height: number): number {\n return ((width + 3) >> 2) * ((height + 3) >> 2) * 16;\n}\n\n/**\n * Convert every byte of Int32 value to char\n * @param value - Int32 number\n * @returns string of 4 characters\n */\nfunction int32ToFourCC(value: number): string {\n return String.fromCharCode(\n value & 0xff,\n (value >> 8) & 0xff,\n (value >> 16) & 0xff,\n (value >> 24) & 0xff\n );\n}\n"],"file":"parse-dds.js"}
1
+ {"version":3,"file":"parse-dds.js","names":["DDS_CONSTANTS","MAGIC_NUMBER","HEADER_LENGTH","MAGIC_NUMBER_INDEX","HEADER_SIZE_INDEX","HEADER_FLAGS_INDEX","HEADER_HEIGHT_INDEX","HEADER_WIDTH_INDEX","MIPMAPCOUNT_INDEX","HEADER_PF_FLAGS_INDEX","HEADER_PF_FOURCC_INDEX","DDSD_MIPMAPCOUNT","DDPF_FOURCC","DDS_PIXEL_FORMATS","DXT1","GL_EXTENSIONS_CONSTANTS","COMPRESSED_RGB_S3TC_DXT1_EXT","DXT3","COMPRESSED_RGBA_S3TC_DXT3_EXT","DXT5","COMPRESSED_RGBA_S3TC_DXT5_EXT","COMPRESSED_RGB_ATC_WEBGL","ATCA","COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL","ATCI","COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL","getATCLevelSize","getDxt1LevelSize","getATCALevelSize","getDxtXLevelSize","getATCILevelSize","DDS_SIZE_FUNCTIONS","isDDS","data","header","Uint32Array","magic","parseDDS","Int32Array","pixelFormatNumber","assert","Boolean","fourCC","int32ToFourCC","internalFormat","sizeFunction","mipMapLevels","Math","max","width","height","dataOffset","image","Uint8Array","extractMipmapImages","value","String","fromCharCode"],"sources":["../../../../src/lib/parsers/parse-dds.ts"],"sourcesContent":["import type {TextureLevel} from '@loaders.gl/schema';\nimport {assert} from '@loaders.gl/loader-utils';\nimport {GL_EXTENSIONS_CONSTANTS} from '../gl-extensions';\nimport {extractMipmapImages} from '../utils/extract-mipmap-images';\n\nconst DDS_CONSTANTS = {\n MAGIC_NUMBER: 0x20534444,\n HEADER_LENGTH: 31,\n MAGIC_NUMBER_INDEX: 0,\n HEADER_SIZE_INDEX: 1,\n HEADER_FLAGS_INDEX: 2,\n HEADER_HEIGHT_INDEX: 3,\n HEADER_WIDTH_INDEX: 4,\n MIPMAPCOUNT_INDEX: 7,\n HEADER_PF_FLAGS_INDEX: 20,\n HEADER_PF_FOURCC_INDEX: 21,\n DDSD_MIPMAPCOUNT: 0x20000,\n DDPF_FOURCC: 0x4\n};\n\nconst DDS_PIXEL_FORMATS: Record<string, number> = {\n DXT1: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_S3TC_DXT1_EXT,\n DXT3: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT3_EXT,\n DXT5: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT5_EXT,\n 'ATC ': GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_ATC_WEBGL,\n ATCA: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL,\n ATCI: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL\n};\n\nconst getATCLevelSize = getDxt1LevelSize;\nconst getATCALevelSize = getDxtXLevelSize;\nconst getATCILevelSize = getDxtXLevelSize;\n\nconst DDS_SIZE_FUNCTIONS: Record<string, (width: number, height: number) => number> = {\n DXT1: getDxt1LevelSize,\n DXT3: getDxtXLevelSize,\n DXT5: getDxtXLevelSize,\n 'ATC ': getATCLevelSize,\n ATCA: getATCALevelSize,\n ATCI: getATCILevelSize\n};\n\n/**\n * Check if data is in \"DDS\" format by its magic number\n * @param data - binary data of compressed texture\n * @returns true - data in \"DDS\" format, else - false\n */\nexport function isDDS(data: ArrayBuffer): boolean {\n const header = new Uint32Array(data, 0, DDS_CONSTANTS.HEADER_LENGTH);\n const magic = header[DDS_CONSTANTS.MAGIC_NUMBER_INDEX];\n return magic === DDS_CONSTANTS.MAGIC_NUMBER;\n}\n\n/**\n * Parse texture data as \"DDS\" format\n * @param data - binary data of compressed texture\n * @returns Array of the texture levels\n */\nexport function parseDDS(data: ArrayBuffer): TextureLevel[] {\n const header = new Int32Array(data, 0, DDS_CONSTANTS.HEADER_LENGTH);\n const pixelFormatNumber = header[DDS_CONSTANTS.HEADER_PF_FOURCC_INDEX];\n assert(\n Boolean(header[DDS_CONSTANTS.HEADER_PF_FLAGS_INDEX] & DDS_CONSTANTS.DDPF_FOURCC),\n 'DDS: Unsupported format, must contain a FourCC code'\n );\n const fourCC = int32ToFourCC(pixelFormatNumber);\n const internalFormat = DDS_PIXEL_FORMATS[fourCC];\n const sizeFunction = DDS_SIZE_FUNCTIONS[fourCC];\n assert(internalFormat && sizeFunction, `DDS: Unknown pixel format ${pixelFormatNumber}`);\n\n let mipMapLevels = 1;\n if (header[DDS_CONSTANTS.HEADER_FLAGS_INDEX] & DDS_CONSTANTS.DDSD_MIPMAPCOUNT) {\n mipMapLevels = Math.max(1, header[DDS_CONSTANTS.MIPMAPCOUNT_INDEX]);\n }\n const width = header[DDS_CONSTANTS.HEADER_WIDTH_INDEX];\n const height = header[DDS_CONSTANTS.HEADER_HEIGHT_INDEX];\n const dataOffset = header[DDS_CONSTANTS.HEADER_SIZE_INDEX] + 4;\n const image = new Uint8Array(data, dataOffset);\n\n return extractMipmapImages(image, {\n mipMapLevels,\n width,\n height,\n sizeFunction,\n internalFormat\n });\n}\n\n/**\n * DXT1 applicable function to calculate level size\n * @param width - level width\n * @param height - level height\n * @returns level size in bytes\n */\nexport function getDxt1LevelSize(width: number, height: number): number {\n return ((width + 3) >> 2) * ((height + 3) >> 2) * 8;\n}\n\n/**\n * DXT3 & DXT5 applicable function to calculate level size\n * @param width - level width\n * @param height - level height\n * @returns level size in bytes\n */\nexport function getDxtXLevelSize(width: number, height: number): number {\n return ((width + 3) >> 2) * ((height + 3) >> 2) * 16;\n}\n\n/**\n * Convert every byte of Int32 value to char\n * @param value - Int32 number\n * @returns string of 4 characters\n */\nfunction int32ToFourCC(value: number): string {\n return String.fromCharCode(\n value & 0xff,\n (value >> 8) & 0xff,\n (value >> 16) & 0xff,\n (value >> 24) & 0xff\n );\n}\n"],"mappings":"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"}
@@ -5,21 +5,29 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.isKTX = isKTX;
7
7
  exports.parseKTX = parseKTX;
8
-
9
8
  var _ktxParse = require("ktx-parse");
10
-
11
9
  var _extractMipmapImages = require("../utils/extract-mipmap-images");
12
-
13
10
  var _ktxFormatHelper = require("../utils/ktx-format-helper");
14
-
15
- var KTX2_ID = [0xab, 0x4b, 0x54, 0x58, 0x20, 0x32, 0x30, 0xbb, 0x0d, 0x0a, 0x1a, 0x0a];
11
+ var KTX2_ID = [
12
+ 0xab, 0x4b, 0x54, 0x58, 0x20, 0x32, 0x30, 0xbb, 0x0d, 0x0a, 0x1a, 0x0a];
16
13
 
17
14
  function isKTX(data) {
18
15
  var id = new Uint8Array(data);
19
- var notKTX = id.byteLength < KTX2_ID.length || id[0] !== KTX2_ID[0] || id[1] !== KTX2_ID[1] || id[2] !== KTX2_ID[2] || id[3] !== KTX2_ID[3] || id[4] !== KTX2_ID[4] || id[5] !== KTX2_ID[5] || id[6] !== KTX2_ID[6] || id[7] !== KTX2_ID[7] || id[8] !== KTX2_ID[8] || id[9] !== KTX2_ID[9] || id[10] !== KTX2_ID[10] || id[11] !== KTX2_ID[11];
16
+ var notKTX = id.byteLength < KTX2_ID.length || id[0] !== KTX2_ID[0] ||
17
+ id[1] !== KTX2_ID[1] ||
18
+ id[2] !== KTX2_ID[2] ||
19
+ id[3] !== KTX2_ID[3] ||
20
+ id[4] !== KTX2_ID[4] ||
21
+ id[5] !== KTX2_ID[5] ||
22
+ id[6] !== KTX2_ID[6] ||
23
+ id[7] !== KTX2_ID[7] ||
24
+ id[8] !== KTX2_ID[8] ||
25
+ id[9] !== KTX2_ID[9] ||
26
+ id[10] !== KTX2_ID[10] ||
27
+ id[11] !== KTX2_ID[11];
28
+
20
29
  return !notKTX;
21
30
  }
22
-
23
31
  function parseKTX(arrayBuffer) {
24
32
  var uint8Array = new Uint8Array(arrayBuffer);
25
33
  var ktx = (0, _ktxParse.read)(uint8Array);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/parsers/parse-ktx.ts"],"names":["KTX2_ID","isKTX","data","id","Uint8Array","notKTX","byteLength","length","parseKTX","arrayBuffer","uint8Array","ktx","mipMapLevels","Math","max","levels","width","pixelWidth","height","pixelHeight","internalFormat","vkFormat","sizeFunction","level","uncompressedByteLength"],"mappings":";;;;;;;;AACA;;AACA;;AACA;;AAEA,IAAMA,OAAO,GAAG,CAEd,IAFc,EAER,IAFQ,EAEF,IAFE,EAEI,IAFJ,EAEU,IAFV,EAEgB,IAFhB,EAEsB,IAFtB,EAE4B,IAF5B,EAEkC,IAFlC,EAEwC,IAFxC,EAE8C,IAF9C,EAEoD,IAFpD,CAAhB;;AAMO,SAASC,KAAT,CAAeC,IAAf,EAAkC;AAEvC,MAAMC,EAAE,GAAG,IAAIC,UAAJ,CAAeF,IAAf,CAAX;AACA,MAAMG,MAAM,GACVF,EAAE,CAACG,UAAH,GAAgBN,OAAO,CAACO,MAAxB,IACAJ,EAAE,CAAC,CAAD,CAAF,KAAUH,OAAO,CAAC,CAAD,CADjB,IAEAG,EAAE,CAAC,CAAD,CAAF,KAAUH,OAAO,CAAC,CAAD,CAFjB,IAGAG,EAAE,CAAC,CAAD,CAAF,KAAUH,OAAO,CAAC,CAAD,CAHjB,IAIAG,EAAE,CAAC,CAAD,CAAF,KAAUH,OAAO,CAAC,CAAD,CAJjB,IAKAG,EAAE,CAAC,CAAD,CAAF,KAAUH,OAAO,CAAC,CAAD,CALjB,IAMAG,EAAE,CAAC,CAAD,CAAF,KAAUH,OAAO,CAAC,CAAD,CANjB,IAOAG,EAAE,CAAC,CAAD,CAAF,KAAUH,OAAO,CAAC,CAAD,CAPjB,IAQAG,EAAE,CAAC,CAAD,CAAF,KAAUH,OAAO,CAAC,CAAD,CARjB,IASAG,EAAE,CAAC,CAAD,CAAF,KAAUH,OAAO,CAAC,CAAD,CATjB,IAUAG,EAAE,CAAC,CAAD,CAAF,KAAUH,OAAO,CAAC,CAAD,CAVjB,IAWAG,EAAE,CAAC,EAAD,CAAF,KAAWH,OAAO,CAAC,EAAD,CAXlB,IAYAG,EAAE,CAAC,EAAD,CAAF,KAAWH,OAAO,CAAC,EAAD,CAbpB;AAeA,SAAO,CAACK,MAAR;AACD;;AAEM,SAASG,QAAT,CAAkBC,WAAlB,EAA4D;AACjE,MAAMC,UAAU,GAAG,IAAIN,UAAJ,CAAeK,WAAf,CAAnB;AACA,MAAME,GAAG,GAAG,oBAAKD,UAAL,CAAZ;AACA,MAAME,YAAY,GAAGC,IAAI,CAACC,GAAL,CAAS,CAAT,EAAYH,GAAG,CAACI,MAAJ,CAAWR,MAAvB,CAArB;AACA,MAAMS,KAAK,GAAGL,GAAG,CAACM,UAAlB;AACA,MAAMC,MAAM,GAAGP,GAAG,CAACQ,WAAnB;AACA,MAAMC,cAAc,GAAG,yCAAmBT,GAAG,CAACU,QAAvB,CAAvB;AAEA,SAAO,8CAAoBV,GAAG,CAACI,MAAxB,EAAgC;AACrCH,IAAAA,YAAY,EAAZA,YADqC;AAErCI,IAAAA,KAAK,EAALA,KAFqC;AAGrCE,IAAAA,MAAM,EAANA,MAHqC;AAIrCI,IAAAA,YAAY,EAAE,sBAACC,KAAD;AAAA,aAAwBA,KAAK,CAACC,sBAA9B;AAAA,KAJuB;AAKrCJ,IAAAA,cAAc,EAAdA;AALqC,GAAhC,CAAP;AAOD","sourcesContent":["import type {TextureLevel} from '@loaders.gl/schema';\nimport {read} from 'ktx-parse';\nimport {extractMipmapImages} from '../utils/extract-mipmap-images';\nimport {mapVkFormatToWebGL} from '../utils/ktx-format-helper';\n\nconst KTX2_ID = [\n // '´', 'K', 'T', 'X', '2', '0', 'ª', '\\r', '\\n', '\\x1A', '\\n'\n 0xab, 0x4b, 0x54, 0x58, 0x20, 0x32, 0x30, 0xbb, 0x0d, 0x0a, 0x1a, 0x0a\n];\n\n// eslint-disable-next-line complexity\nexport function isKTX(data: ArrayBuffer) {\n // const id = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n const id = new Uint8Array(data);\n const notKTX =\n id.byteLength < KTX2_ID.length ||\n id[0] !== KTX2_ID[0] || // '´'\n id[1] !== KTX2_ID[1] || // 'K'\n id[2] !== KTX2_ID[2] || // 'T'\n id[3] !== KTX2_ID[3] || // 'X'\n id[4] !== KTX2_ID[4] || // ' '\n id[5] !== KTX2_ID[5] || // '2'\n id[6] !== KTX2_ID[6] || // '0'\n id[7] !== KTX2_ID[7] || // 'ª'\n id[8] !== KTX2_ID[8] || // '\\r'\n id[9] !== KTX2_ID[9] || // '\\n'\n id[10] !== KTX2_ID[10] || // '\\x1A'\n id[11] !== KTX2_ID[11]; // '\\n'\n\n return !notKTX;\n}\n\nexport function parseKTX(arrayBuffer: ArrayBuffer): TextureLevel[] {\n const uint8Array = new Uint8Array(arrayBuffer);\n const ktx = read(uint8Array);\n const mipMapLevels = Math.max(1, ktx.levels.length);\n const width = ktx.pixelWidth;\n const height = ktx.pixelHeight;\n const internalFormat = mapVkFormatToWebGL(ktx.vkFormat);\n\n return extractMipmapImages(ktx.levels, {\n mipMapLevels,\n width,\n height,\n sizeFunction: (level: any): number => level.uncompressedByteLength,\n internalFormat\n });\n}\n"],"file":"parse-ktx.js"}
1
+ {"version":3,"file":"parse-ktx.js","names":["KTX2_ID","isKTX","data","id","Uint8Array","notKTX","byteLength","length","parseKTX","arrayBuffer","uint8Array","ktx","read","mipMapLevels","Math","max","levels","width","pixelWidth","height","pixelHeight","internalFormat","mapVkFormatToWebGL","vkFormat","extractMipmapImages","sizeFunction","level","uncompressedByteLength"],"sources":["../../../../src/lib/parsers/parse-ktx.ts"],"sourcesContent":["import type {TextureLevel} from '@loaders.gl/schema';\nimport {read} from 'ktx-parse';\nimport {extractMipmapImages} from '../utils/extract-mipmap-images';\nimport {mapVkFormatToWebGL} from '../utils/ktx-format-helper';\n\nconst KTX2_ID = [\n // '´', 'K', 'T', 'X', '2', '0', 'ª', '\\r', '\\n', '\\x1A', '\\n'\n 0xab, 0x4b, 0x54, 0x58, 0x20, 0x32, 0x30, 0xbb, 0x0d, 0x0a, 0x1a, 0x0a\n];\n\n// eslint-disable-next-line complexity\nexport function isKTX(data: ArrayBuffer) {\n // const id = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n const id = new Uint8Array(data);\n const notKTX =\n id.byteLength < KTX2_ID.length ||\n id[0] !== KTX2_ID[0] || // '´'\n id[1] !== KTX2_ID[1] || // 'K'\n id[2] !== KTX2_ID[2] || // 'T'\n id[3] !== KTX2_ID[3] || // 'X'\n id[4] !== KTX2_ID[4] || // ' '\n id[5] !== KTX2_ID[5] || // '2'\n id[6] !== KTX2_ID[6] || // '0'\n id[7] !== KTX2_ID[7] || // 'ª'\n id[8] !== KTX2_ID[8] || // '\\r'\n id[9] !== KTX2_ID[9] || // '\\n'\n id[10] !== KTX2_ID[10] || // '\\x1A'\n id[11] !== KTX2_ID[11]; // '\\n'\n\n return !notKTX;\n}\n\nexport function parseKTX(arrayBuffer: ArrayBuffer): TextureLevel[] {\n const uint8Array = new Uint8Array(arrayBuffer);\n const ktx = read(uint8Array);\n const mipMapLevels = Math.max(1, ktx.levels.length);\n const width = ktx.pixelWidth;\n const height = ktx.pixelHeight;\n const internalFormat = mapVkFormatToWebGL(ktx.vkFormat);\n\n return extractMipmapImages(ktx.levels, {\n mipMapLevels,\n width,\n height,\n sizeFunction: (level: any): number => level.uncompressedByteLength,\n internalFormat\n });\n}\n"],"mappings":";;;;;;;AACA;AACA;AACA;AAEA,IAAMA,OAAO,GAAG;AAEd,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CACvE;;AAGM,SAASC,KAAK,CAACC,IAAiB,EAAE;EAEvC,IAAMC,EAAE,GAAG,IAAIC,UAAU,CAACF,IAAI,CAAC;EAC/B,IAAMG,MAAM,GACVF,EAAE,CAACG,UAAU,GAAGN,OAAO,CAACO,MAAM,IAC9BJ,EAAE,CAAC,CAAC,CAAC,KAAKH,OAAO,CAAC,CAAC,CAAC;EACpBG,EAAE,CAAC,CAAC,CAAC,KAAKH,OAAO,CAAC,CAAC,CAAC;EACpBG,EAAE,CAAC,CAAC,CAAC,KAAKH,OAAO,CAAC,CAAC,CAAC;EACpBG,EAAE,CAAC,CAAC,CAAC,KAAKH,OAAO,CAAC,CAAC,CAAC;EACpBG,EAAE,CAAC,CAAC,CAAC,KAAKH,OAAO,CAAC,CAAC,CAAC;EACpBG,EAAE,CAAC,CAAC,CAAC,KAAKH,OAAO,CAAC,CAAC,CAAC;EACpBG,EAAE,CAAC,CAAC,CAAC,KAAKH,OAAO,CAAC,CAAC,CAAC;EACpBG,EAAE,CAAC,CAAC,CAAC,KAAKH,OAAO,CAAC,CAAC,CAAC;EACpBG,EAAE,CAAC,CAAC,CAAC,KAAKH,OAAO,CAAC,CAAC,CAAC;EACpBG,EAAE,CAAC,CAAC,CAAC,KAAKH,OAAO,CAAC,CAAC,CAAC;EACpBG,EAAE,CAAC,EAAE,CAAC,KAAKH,OAAO,CAAC,EAAE,CAAC;EACtBG,EAAE,CAAC,EAAE,CAAC,KAAKH,OAAO,CAAC,EAAE,CAAC;;EAExB,OAAO,CAACK,MAAM;AAChB;AAEO,SAASG,QAAQ,CAACC,WAAwB,EAAkB;EACjE,IAAMC,UAAU,GAAG,IAAIN,UAAU,CAACK,WAAW,CAAC;EAC9C,IAAME,GAAG,GAAG,IAAAC,cAAI,EAACF,UAAU,CAAC;EAC5B,IAAMG,YAAY,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEJ,GAAG,CAACK,MAAM,CAACT,MAAM,CAAC;EACnD,IAAMU,KAAK,GAAGN,GAAG,CAACO,UAAU;EAC5B,IAAMC,MAAM,GAAGR,GAAG,CAACS,WAAW;EAC9B,IAAMC,cAAc,GAAG,IAAAC,mCAAkB,EAACX,GAAG,CAACY,QAAQ,CAAC;EAEvD,OAAO,IAAAC,wCAAmB,EAACb,GAAG,CAACK,MAAM,EAAE;IACrCH,YAAY,EAAZA,YAAY;IACZI,KAAK,EAALA,KAAK;IACLE,MAAM,EAANA,MAAM;IACNM,YAAY,EAAE,sBAACC,KAAU;MAAA,OAAaA,KAAK,CAACC,sBAAsB;IAAA;IAClEN,cAAc,EAAdA;EACF,CAAC,CAAC;AACJ"}