@loaders.gl/textures 3.1.0-beta.2 → 3.1.0

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 (119) hide show
  1. package/dist/basis-worker.js +33 -9
  2. package/dist/bundle.js +185 -119
  3. package/dist/compressed-texture-loader.d.ts +1 -15
  4. package/dist/compressed-texture-loader.d.ts.map +1 -1
  5. package/dist/compressed-texture-worker.js +174 -108
  6. package/dist/crunch-worker.js +11 -11
  7. package/dist/es5/basis-loader.js +13 -5
  8. package/dist/es5/basis-loader.js.map +1 -1
  9. package/dist/es5/bundle.js +1 -1
  10. package/dist/es5/bundle.js.map +1 -1
  11. package/dist/es5/compressed-texture-loader.js +59 -20
  12. package/dist/es5/compressed-texture-loader.js.map +1 -1
  13. package/dist/es5/compressed-texture-writer.js +2 -2
  14. package/dist/es5/compressed-texture-writer.js.map +1 -1
  15. package/dist/es5/crunch-loader.js +2 -2
  16. package/dist/es5/crunch-loader.js.map +1 -1
  17. package/dist/es5/index.js +19 -19
  18. package/dist/es5/index.js.map +1 -1
  19. package/dist/es5/ktx2-basis-universal-texture-writer.js +2 -2
  20. package/dist/es5/ktx2-basis-universal-texture-writer.js.map +1 -1
  21. package/dist/es5/lib/encoders/encode-ktx.js +1 -1
  22. package/dist/es5/lib/encoders/encode-ktx.js.map +1 -1
  23. package/dist/es5/lib/encoders/encode-ktx2-basis-texture.js +76 -32
  24. package/dist/es5/lib/encoders/encode-ktx2-basis-texture.js.map +1 -1
  25. package/dist/es5/lib/encoders/encode-texture.js +41 -13
  26. package/dist/es5/lib/encoders/encode-texture.js.map +1 -1
  27. package/dist/es5/lib/{gl-constants.js → gl-extensions.js} +4 -4
  28. package/dist/es5/lib/gl-extensions.js.map +1 -0
  29. package/dist/es5/lib/parsers/basis-module-loader.js +195 -51
  30. package/dist/es5/lib/parsers/basis-module-loader.js.map +1 -1
  31. package/dist/es5/lib/parsers/crunch-module-loader.js +71 -15
  32. package/dist/es5/lib/parsers/crunch-module-loader.js.map +1 -1
  33. package/dist/es5/lib/parsers/parse-basis.js +137 -85
  34. package/dist/es5/lib/parsers/parse-basis.js.map +1 -1
  35. package/dist/es5/lib/parsers/parse-crunch.js +80 -59
  36. package/dist/es5/lib/parsers/parse-crunch.js.map +1 -1
  37. package/dist/es5/lib/parsers/parse-dds.js +30 -30
  38. package/dist/es5/lib/parsers/parse-dds.js.map +1 -1
  39. package/dist/es5/lib/parsers/parse-ktx.js +16 -14
  40. package/dist/es5/lib/parsers/parse-ktx.js.map +1 -1
  41. package/dist/es5/lib/parsers/parse-npy.js +28 -25
  42. package/dist/es5/lib/parsers/parse-npy.js.map +1 -1
  43. package/dist/es5/lib/parsers/parse-pvr.js +49 -49
  44. package/dist/es5/lib/parsers/parse-pvr.js.map +1 -1
  45. package/dist/es5/lib/texture-api/async-deep-map.js +156 -27
  46. package/dist/es5/lib/texture-api/async-deep-map.js.map +1 -1
  47. package/dist/es5/lib/texture-api/deep-load.js +67 -6
  48. package/dist/es5/lib/texture-api/deep-load.js.map +1 -1
  49. package/dist/es5/lib/texture-api/generate-url.js +10 -4
  50. package/dist/es5/lib/texture-api/generate-url.js.map +1 -1
  51. package/dist/es5/lib/texture-api/load-image-array.js +76 -12
  52. package/dist/es5/lib/texture-api/load-image-array.js.map +1 -1
  53. package/dist/es5/lib/texture-api/load-image-cube.js +96 -27
  54. package/dist/es5/lib/texture-api/load-image-cube.js.map +1 -1
  55. package/dist/es5/lib/texture-api/load-image.js +142 -35
  56. package/dist/es5/lib/texture-api/load-image.js.map +1 -1
  57. package/dist/es5/lib/utils/extract-mipmap-images.js +9 -9
  58. package/dist/es5/lib/utils/extract-mipmap-images.js.map +1 -1
  59. package/dist/es5/lib/utils/ktx-format-helper.js +68 -68
  60. package/dist/es5/lib/utils/ktx-format-helper.js.map +1 -1
  61. package/dist/es5/lib/utils/texture-formats.js +27 -9
  62. package/dist/es5/lib/utils/texture-formats.js.map +1 -1
  63. package/dist/es5/lib/utils/version.js +1 -1
  64. package/dist/es5/lib/utils/version.js.map +1 -1
  65. package/dist/es5/npy-loader.js +42 -7
  66. package/dist/es5/npy-loader.js.map +1 -1
  67. package/dist/es5/workers/crunch-worker.js +11 -2
  68. package/dist/es5/workers/crunch-worker.js.map +1 -1
  69. package/dist/esm/index.js +1 -1
  70. package/dist/esm/index.js.map +1 -1
  71. package/dist/esm/lib/encoders/encode-ktx2-basis-texture.js +1 -1
  72. package/dist/esm/lib/encoders/encode-ktx2-basis-texture.js.map +1 -1
  73. package/dist/esm/lib/{gl-constants.js → gl-extensions.js} +2 -2
  74. package/dist/esm/lib/gl-extensions.js.map +1 -0
  75. package/dist/esm/lib/parsers/basis-module-loader.js +1 -1
  76. package/dist/esm/lib/parsers/basis-module-loader.js.map +1 -1
  77. package/dist/esm/lib/parsers/parse-basis.js +7 -7
  78. package/dist/esm/lib/parsers/parse-basis.js.map +1 -1
  79. package/dist/esm/lib/parsers/parse-crunch.js +4 -4
  80. package/dist/esm/lib/parsers/parse-crunch.js.map +1 -1
  81. package/dist/esm/lib/parsers/parse-dds.js +7 -7
  82. package/dist/esm/lib/parsers/parse-dds.js.map +1 -1
  83. package/dist/esm/lib/parsers/parse-pvr.js +28 -28
  84. package/dist/esm/lib/parsers/parse-pvr.js.map +1 -1
  85. package/dist/esm/lib/utils/ktx-format-helper.js +67 -67
  86. package/dist/esm/lib/utils/ktx-format-helper.js.map +1 -1
  87. package/dist/esm/lib/utils/version.js +1 -1
  88. package/dist/esm/lib/utils/version.js.map +1 -1
  89. package/dist/index.d.ts +1 -1
  90. package/dist/index.d.ts.map +1 -1
  91. package/dist/index.js +3 -3
  92. package/dist/lib/encoders/encode-ktx2-basis-texture.d.ts +1 -1
  93. package/dist/lib/encoders/encode-ktx2-basis-texture.d.ts.map +1 -1
  94. package/dist/lib/encoders/encode-ktx2-basis-texture.js +1 -1
  95. package/dist/lib/{gl-constants.d.ts → gl-extensions.d.ts} +2 -2
  96. package/dist/lib/gl-extensions.d.ts.map +1 -0
  97. package/dist/lib/{gl-constants.js → gl-extensions.js} +2 -2
  98. package/dist/lib/parsers/parse-basis.d.ts +2 -16
  99. package/dist/lib/parsers/parse-basis.d.ts.map +1 -1
  100. package/dist/lib/parsers/parse-basis.js +31 -7
  101. package/dist/lib/parsers/parse-crunch.js +4 -4
  102. package/dist/lib/parsers/parse-dds.js +7 -7
  103. package/dist/lib/parsers/parse-pvr.d.ts.map +1 -1
  104. package/dist/lib/parsers/parse-pvr.js +70 -28
  105. package/dist/lib/utils/ktx-format-helper.js +67 -67
  106. package/package.json +5 -5
  107. package/src/index.ts +1 -1
  108. package/src/lib/encoders/encode-ktx2-basis-texture.ts +2 -2
  109. package/src/lib/{gl-constants.ts → gl-extensions.ts} +1 -1
  110. package/src/lib/parsers/{parse-basis.js → parse-basis.ts} +34 -10
  111. package/src/lib/parsers/parse-crunch.ts +4 -4
  112. package/src/lib/parsers/parse-dds.ts +7 -7
  113. package/src/lib/parsers/parse-pvr.ts +70 -28
  114. package/src/lib/utils/ktx-format-helper.ts +67 -67
  115. package/dist/es5/lib/gl-constants.js.map +0 -1
  116. package/dist/esm/lib/gl-constants.js.map +0 -1
  117. package/dist/lib/gl-constants.d.ts.map +0 -1
  118. package/src/lib/parsers/parse-ktx.js +0 -42
  119. package/src/lib/parsers/parse-npy.js +0 -82
@@ -1,24 +1,32 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
3
5
  Object.defineProperty(exports, "__esModule", {
4
6
  value: true
5
7
  });
6
8
  exports.default = parseBasis;
7
9
  exports.selectSupportedBasisFormat = selectSupportedBasisFormat;
8
10
 
11
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
12
+
13
+ var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
14
+
15
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
16
+
9
17
  var _basisModuleLoader = require("./basis-module-loader");
10
18
 
11
- var _glConstants = require("../gl-constants");
19
+ var _glExtensions = require("../gl-extensions");
12
20
 
13
21
  var _textureFormats = require("../utils/texture-formats");
14
22
 
15
23
  var _parseKtx = require("./parse-ktx");
16
24
 
17
- const OutputFormat = {
25
+ var OutputFormat = {
18
26
  etc1: {
19
27
  basisFormat: 0,
20
28
  compressed: true,
21
- format: _glConstants.GL.COMPRESSED_RGB_ETC1_WEBGL
29
+ format: _glExtensions.GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_ETC1_WEBGL
22
30
  },
23
31
  etc2: {
24
32
  basisFormat: 1,
@@ -27,12 +35,12 @@ const OutputFormat = {
27
35
  bc1: {
28
36
  basisFormat: 2,
29
37
  compressed: true,
30
- format: _glConstants.GL.COMPRESSED_RGB_S3TC_DXT1_EXT
38
+ format: _glExtensions.GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_S3TC_DXT1_EXT
31
39
  },
32
40
  bc3: {
33
41
  basisFormat: 3,
34
42
  compressed: true,
35
- format: _glConstants.GL.COMPRESSED_RGBA_S3TC_DXT5_EXT
43
+ format: _glExtensions.GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT5_EXT
36
44
  },
37
45
  bc4: {
38
46
  basisFormat: 4,
@@ -53,17 +61,17 @@ const OutputFormat = {
53
61
  'pvrtc1-4-rgb': {
54
62
  basisFormat: 8,
55
63
  compressed: true,
56
- format: _glConstants.GL.COMPRESSED_RGB_PVRTC_4BPPV1_IMG
64
+ format: _glExtensions.GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_PVRTC_4BPPV1_IMG
57
65
  },
58
66
  'pvrtc1-4-rgba': {
59
67
  basisFormat: 9,
60
68
  compressed: true,
61
- format: _glConstants.GL.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG
69
+ format: _glExtensions.GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG
62
70
  },
63
71
  'astc-4x4': {
64
72
  basisFormat: 10,
65
73
  compressed: true,
66
- format: _glConstants.GL.COMPRESSED_RGBA_ASTC_4X4_KHR
74
+ format: _glExtensions.GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_4X4_KHR
67
75
  },
68
76
  'atc-rgb': {
69
77
  basisFormat: 11,
@@ -91,57 +99,100 @@ const OutputFormat = {
91
99
  }
92
100
  };
93
101
 
94
- async function parseBasis(data, options) {
95
- if (options.basis.containerFormat === 'auto') {
96
- if ((0, _parseKtx.isKTX)(data)) {
97
- const fileConstructors = await (0, _basisModuleLoader.loadBasisEncoderModule)(options);
98
- return parseKTX2File(fileConstructors.KTX2File, data, options);
99
- }
100
-
101
- const {
102
- BasisFile
103
- } = await (0, _basisModuleLoader.loadBasisTrascoderModule)(options);
104
- return parseBasisFile(BasisFile, data, options);
105
- }
106
-
107
- switch (options.basis.module) {
108
- case 'encoder':
109
- const fileConstructors = await (0, _basisModuleLoader.loadBasisEncoderModule)(options);
110
-
111
- switch (options.basis.containerFormat) {
112
- case 'ktx2':
113
- return parseKTX2File(fileConstructors.KTX2File, data, options);
102
+ function parseBasis(_x, _x2) {
103
+ return _parseBasis.apply(this, arguments);
104
+ }
114
105
 
115
- case 'basis':
116
- default:
117
- return parseBasisFile(fileConstructors.BasisFile, data, options);
106
+ function _parseBasis() {
107
+ _parseBasis = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee(data, options) {
108
+ var fileConstructors, _yield$loadBasisTrasc, BasisFile, _fileConstructors, _yield$loadBasisTrasc2, _BasisFile;
109
+
110
+ return _regenerator.default.wrap(function _callee$(_context) {
111
+ while (1) {
112
+ switch (_context.prev = _context.next) {
113
+ case 0:
114
+ if (!(options.basis.containerFormat === 'auto')) {
115
+ _context.next = 11;
116
+ break;
117
+ }
118
+
119
+ if (!(0, _parseKtx.isKTX)(data)) {
120
+ _context.next = 6;
121
+ break;
122
+ }
123
+
124
+ _context.next = 4;
125
+ return (0, _basisModuleLoader.loadBasisEncoderModule)(options);
126
+
127
+ case 4:
128
+ fileConstructors = _context.sent;
129
+ return _context.abrupt("return", parseKTX2File(fileConstructors.KTX2File, data, options));
130
+
131
+ case 6:
132
+ _context.next = 8;
133
+ return (0, _basisModuleLoader.loadBasisTrascoderModule)(options);
134
+
135
+ case 8:
136
+ _yield$loadBasisTrasc = _context.sent;
137
+ BasisFile = _yield$loadBasisTrasc.BasisFile;
138
+ return _context.abrupt("return", parseBasisFile(BasisFile, data, options));
139
+
140
+ case 11:
141
+ _context.t0 = options.basis.module;
142
+ _context.next = _context.t0 === 'encoder' ? 14 : _context.t0 === 'transcoder' ? 22 : 22;
143
+ break;
144
+
145
+ case 14:
146
+ _context.next = 16;
147
+ return (0, _basisModuleLoader.loadBasisEncoderModule)(options);
148
+
149
+ case 16:
150
+ _fileConstructors = _context.sent;
151
+ _context.t1 = options.basis.containerFormat;
152
+ _context.next = _context.t1 === 'ktx2' ? 20 : _context.t1 === 'basis' ? 21 : 21;
153
+ break;
154
+
155
+ case 20:
156
+ return _context.abrupt("return", parseKTX2File(_fileConstructors.KTX2File, data, options));
157
+
158
+ case 21:
159
+ return _context.abrupt("return", parseBasisFile(_fileConstructors.BasisFile, data, options));
160
+
161
+ case 22:
162
+ _context.next = 24;
163
+ return (0, _basisModuleLoader.loadBasisTrascoderModule)(options);
164
+
165
+ case 24:
166
+ _yield$loadBasisTrasc2 = _context.sent;
167
+ _BasisFile = _yield$loadBasisTrasc2.BasisFile;
168
+ return _context.abrupt("return", parseBasisFile(_BasisFile, data, options));
169
+
170
+ case 27:
171
+ case "end":
172
+ return _context.stop();
173
+ }
118
174
  }
119
-
120
- case 'transcoder':
121
- default:
122
- const {
123
- BasisFile
124
- } = await (0, _basisModuleLoader.loadBasisTrascoderModule)(options);
125
- return parseBasisFile(BasisFile, data, options);
126
- }
175
+ }, _callee);
176
+ }));
177
+ return _parseBasis.apply(this, arguments);
127
178
  }
128
179
 
129
180
  function parseBasisFile(BasisFile, data, options) {
130
- const basisFile = new BasisFile(new Uint8Array(data));
181
+ var basisFile = new BasisFile(new Uint8Array(data));
131
182
 
132
183
  try {
133
184
  if (!basisFile.startTranscoding()) {
134
185
  return null;
135
186
  }
136
187
 
137
- const imageCount = basisFile.getNumImages();
138
- const images = [];
188
+ var imageCount = basisFile.getNumImages();
189
+ var images = [];
139
190
 
140
- for (let imageIndex = 0; imageIndex < imageCount; imageIndex++) {
141
- const levelsCount = basisFile.getNumLevels(imageIndex);
142
- const levels = [];
191
+ for (var imageIndex = 0; imageIndex < imageCount; imageIndex++) {
192
+ var levelsCount = basisFile.getNumLevels(imageIndex);
193
+ var levels = [];
143
194
 
144
- for (let levelIndex = 0; levelIndex < levelsCount; levelIndex++) {
195
+ for (var levelIndex = 0; levelIndex < levelsCount; levelIndex++) {
145
196
  levels.push(transcodeImage(basisFile, imageIndex, levelIndex, options));
146
197
  }
147
198
 
@@ -156,43 +207,44 @@ function parseBasisFile(BasisFile, data, options) {
156
207
  }
157
208
 
158
209
  function transcodeImage(basisFile, imageIndex, levelIndex, options) {
159
- const width = basisFile.getImageWidth(imageIndex, levelIndex);
160
- const height = basisFile.getImageHeight(imageIndex, levelIndex);
161
- const hasAlpha = basisFile.getHasAlpha();
162
- const {
163
- compressed,
164
- format,
165
- basisFormat
166
- } = getBasisOptions(options, hasAlpha);
167
- const decodedSize = basisFile.getImageTranscodedSizeInBytes(imageIndex, levelIndex, basisFormat);
168
- const decodedData = new Uint8Array(decodedSize);
210
+ var width = basisFile.getImageWidth(imageIndex, levelIndex);
211
+ var height = basisFile.getImageHeight(imageIndex, levelIndex);
212
+ var hasAlpha = basisFile.getHasAlpha();
213
+
214
+ var _getBasisOptions = getBasisOptions(options, hasAlpha),
215
+ compressed = _getBasisOptions.compressed,
216
+ format = _getBasisOptions.format,
217
+ basisFormat = _getBasisOptions.basisFormat;
218
+
219
+ var decodedSize = basisFile.getImageTranscodedSizeInBytes(imageIndex, levelIndex, basisFormat);
220
+ var decodedData = new Uint8Array(decodedSize);
169
221
 
170
222
  if (!basisFile.transcodeImage(decodedData, imageIndex, levelIndex, basisFormat, 0, 0)) {
171
223
  return null;
172
224
  }
173
225
 
174
226
  return {
175
- width,
176
- height,
227
+ width: width,
228
+ height: height,
177
229
  data: decodedData,
178
- compressed,
179
- hasAlpha,
180
- format
230
+ compressed: compressed,
231
+ hasAlpha: hasAlpha,
232
+ format: format
181
233
  };
182
234
  }
183
235
 
184
236
  function parseKTX2File(KTX2File, data, options) {
185
- const ktx2File = new KTX2File(new Uint8Array(data));
237
+ var ktx2File = new KTX2File(new Uint8Array(data));
186
238
 
187
239
  try {
188
240
  if (!ktx2File.startTranscoding()) {
189
241
  return null;
190
242
  }
191
243
 
192
- const levelsCount = ktx2File.getLevels();
193
- const levels = [];
244
+ var levelsCount = ktx2File.getLevels();
245
+ var levels = [];
194
246
 
195
- for (let levelIndex = 0; levelIndex < levelsCount; levelIndex++) {
247
+ for (var levelIndex = 0; levelIndex < levelsCount; levelIndex++) {
196
248
  levels.push(transcodeKTX2Image(ktx2File, levelIndex, options));
197
249
  break;
198
250
  }
@@ -205,41 +257,41 @@ function parseKTX2File(KTX2File, data, options) {
205
257
  }
206
258
 
207
259
  function transcodeKTX2Image(ktx2File, levelIndex, options) {
208
- const {
209
- alphaFlag,
210
- height,
211
- width
212
- } = ktx2File.getImageLevelInfo(levelIndex, 0, 0);
213
- const {
214
- compressed,
215
- format,
216
- basisFormat
217
- } = getBasisOptions(options, alphaFlag);
218
- const decodedSize = ktx2File.getImageTranscodedSizeInBytes(levelIndex, 0, 0, basisFormat);
219
- const decodedData = new Uint8Array(decodedSize);
260
+ var _ktx2File$getImageLev = ktx2File.getImageLevelInfo(levelIndex, 0, 0),
261
+ alphaFlag = _ktx2File$getImageLev.alphaFlag,
262
+ height = _ktx2File$getImageLev.height,
263
+ width = _ktx2File$getImageLev.width;
264
+
265
+ var _getBasisOptions2 = getBasisOptions(options, alphaFlag),
266
+ compressed = _getBasisOptions2.compressed,
267
+ format = _getBasisOptions2.format,
268
+ basisFormat = _getBasisOptions2.basisFormat;
269
+
270
+ var decodedSize = ktx2File.getImageTranscodedSizeInBytes(levelIndex, 0, 0, basisFormat);
271
+ var decodedData = new Uint8Array(decodedSize);
220
272
 
221
273
  if (!ktx2File.transcodeImage(decodedData, levelIndex, 0, 0, basisFormat, 0, -1, -1)) {
222
274
  return null;
223
275
  }
224
276
 
225
277
  return {
226
- width,
227
- height,
278
+ width: width,
279
+ height: height,
228
280
  data: decodedData,
229
- compressed,
230
- alphaFlag,
231
- format
281
+ compressed: compressed,
282
+ alphaFlag: alphaFlag,
283
+ format: format
232
284
  };
233
285
  }
234
286
 
235
287
  function getBasisOptions(options, hasAlpha) {
236
- let format = options && options.basis && options.basis.format;
288
+ var format = options && options.basis && options.basis.format;
237
289
 
238
290
  if (format === 'auto') {
239
291
  format = selectSupportedBasisFormat();
240
292
  }
241
293
 
242
- if (typeof format === 'object') {
294
+ if ((0, _typeof2.default)(format) === 'object') {
243
295
  format = hasAlpha ? format.alpha : format.noAlpha;
244
296
  }
245
297
 
@@ -248,7 +300,7 @@ function getBasisOptions(options, hasAlpha) {
248
300
  }
249
301
 
250
302
  function selectSupportedBasisFormat() {
251
- const supportedFormats = (0, _textureFormats.getSupportedGPUTextureFormats)();
303
+ var supportedFormats = (0, _textureFormats.getSupportedGPUTextureFormats)();
252
304
 
253
305
  if (supportedFormats.has('astc')) {
254
306
  return 'astc-4x4';
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/parsers/parse-basis.js"],"names":["OutputFormat","etc1","basisFormat","compressed","format","GL","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","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","alphaFlag","getImageLevelInfo","selectSupportedBasisFormat","alpha","noAlpha","toLowerCase","supportedFormats","has"],"mappings":"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","sourcesContent":["import {loadBasisEncoderModule, loadBasisTrascoderModule} from './basis-module-loader';\nimport {GL} from '../gl-constants';\nimport {getSupportedGPUTextureFormats} from '../utils/texture-formats';\nimport {isKTX} from './parse-ktx';\n\nconst OutputFormat = {\n etc1: {basisFormat: 0, compressed: true, format: GL.COMPRESSED_RGB_ETC1_WEBGL},\n etc2: {basisFormat: 1, compressed: true},\n bc1: {basisFormat: 2, compressed: true, format: GL.COMPRESSED_RGB_S3TC_DXT1_EXT},\n bc3: {basisFormat: 3, compressed: true, format: GL.COMPRESSED_RGBA_S3TC_DXT5_EXT},\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': {basisFormat: 8, compressed: true, format: GL.COMPRESSED_RGB_PVRTC_4BPPV1_IMG},\n 'pvrtc1-4-rgba': {basisFormat: 9, compressed: true, format: GL.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG},\n 'astc-4x4': {basisFormat: 10, compressed: true, format: GL.COMPRESSED_RGBA_ASTC_4X4_KHR},\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 {ArrayBuffer} data\n * @param {*} options\n * @returns compressed texture data\n */\nexport default async function parseBasis(data, options) {\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) {\n const basisFile = new BasisFile(new Uint8Array(data));\n\n try {\n if (!basisFile.startTranscoding()) {\n return null;\n }\n\n const imageCount = basisFile.getNumImages();\n const images = [];\n\n for (let imageIndex = 0; imageIndex < imageCount; imageIndex++) {\n const levelsCount = basisFile.getNumLevels(imageIndex);\n const levels = [];\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) {\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 return null;\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,\n format\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, options) {\n const ktx2File = new KTX2File(new Uint8Array(data));\n\n try {\n if (!ktx2File.startTranscoding()) {\n return null;\n }\n const levelsCount = ktx2File.getLevels();\n const levels = [];\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, options) {\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 return null;\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 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) {\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 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,"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","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":["import {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\nconst OutputFormat = {\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 {ArrayBuffer} data\n * @param {*} options\n * @returns compressed texture data\n */\nexport default async function parseBasis(data, options) {\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) {\n const basisFile = new BasisFile(new Uint8Array(data));\n\n try {\n if (!basisFile.startTranscoding()) {\n return null;\n }\n\n const imageCount = basisFile.getNumImages();\n const images: any[] = [];\n\n for (let imageIndex = 0; imageIndex < imageCount; imageIndex++) {\n const levelsCount = basisFile.getNumLevels(imageIndex);\n const levels: any[] = [];\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) {\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 return null;\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,\n format\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, options) {\n const ktx2File = new KTX2File(new Uint8Array(data));\n\n try {\n if (!ktx2File.startTranscoding()) {\n return null;\n }\n const levelsCount = ktx2File.getLevels();\n const levels: any[] = [];\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, options) {\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 return null;\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 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) {\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 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,13 +1,19 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
3
5
  Object.defineProperty(exports, "__esModule", {
4
6
  value: true
5
7
  });
6
8
  exports.parseCrunch = parseCrunch;
7
9
 
10
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
11
+
12
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
13
+
8
14
  var _crunchModuleLoader = require("./crunch-module-loader");
9
15
 
10
- var _glConstants = require("../gl-constants");
16
+ var _glExtensions = require("../gl-extensions");
11
17
 
12
18
  var _loaderUtils = require("@loaders.gl/loader-utils");
13
19
 
@@ -15,83 +21,98 @@ var _parseDds = require("./parse-dds");
15
21
 
16
22
  var _extractMipmapImages = require("../utils/extract-mipmap-images");
17
23
 
18
- const CRN_FORMAT = {
24
+ var CRN_FORMAT = {
19
25
  cCRNFmtInvalid: -1,
20
26
  cCRNFmtDXT1: 0,
21
27
  cCRNFmtDXT3: 1,
22
28
  cCRNFmtDXT5: 2
23
29
  };
24
- const DXT_FORMAT_MAP = {};
30
+ var DXT_FORMAT_MAP = {};
25
31
  DXT_FORMAT_MAP[CRN_FORMAT.cCRNFmtDXT1] = {
26
- pixelFormat: _glConstants.GL.COMPRESSED_RGB_S3TC_DXT1_EXT,
32
+ pixelFormat: _glExtensions.GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_S3TC_DXT1_EXT,
27
33
  sizeFunction: _parseDds.getDxt1LevelSize
28
34
  };
29
35
  DXT_FORMAT_MAP[CRN_FORMAT.cCRNFmtDXT3] = {
30
- pixelFormat: _glConstants.GL.COMPRESSED_RGBA_S3TC_DXT3_EXT,
36
+ pixelFormat: _glExtensions.GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT3_EXT,
31
37
  sizeFunction: _parseDds.getDxtXLevelSize
32
38
  };
33
39
  DXT_FORMAT_MAP[CRN_FORMAT.cCRNFmtDXT5] = {
34
- pixelFormat: _glConstants.GL.COMPRESSED_RGBA_S3TC_DXT5_EXT,
40
+ pixelFormat: _glExtensions.GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT5_EXT,
35
41
  sizeFunction: _parseDds.getDxtXLevelSize
36
42
  };
37
- let cachedDstSize = 0;
38
- let dst;
39
-
40
- async function parseCrunch(data, options) {
41
- const crunchModule = await (0, _crunchModuleLoader.loadCrunchModule)(options);
42
- const srcSize = data.byteLength;
43
- const bytes = new Uint8Array(data);
44
-
45
- const src = crunchModule._malloc(srcSize);
46
-
47
- arrayBufferCopy(bytes, crunchModule.HEAPU8, src, srcSize);
48
-
49
- const format = crunchModule._crn_get_dxt_format(src, srcSize);
50
-
51
- (0, _loaderUtils.assert)(Boolean(DXT_FORMAT_MAP[format]), 'Unsupported format');
52
-
53
- const mipMapLevels = crunchModule._crn_get_levels(src, srcSize);
54
-
55
- const width = crunchModule._crn_get_width(src, srcSize);
43
+ var cachedDstSize = 0;
44
+ var dst;
56
45
 
57
- const height = crunchModule._crn_get_height(src, srcSize);
58
-
59
- const sizeFunction = DXT_FORMAT_MAP[format].sizeFunction;
60
- let dstSize = 0;
61
-
62
- for (let i = 0; i < mipMapLevels; ++i) {
63
- dstSize += sizeFunction(width >> i, height >> i);
64
- }
65
-
66
- if (cachedDstSize < dstSize) {
67
- if (dst) {
68
- crunchModule._free(dst);
69
- }
70
-
71
- dst = crunchModule._malloc(dstSize);
72
- cachedDstSize = dstSize;
73
- }
74
-
75
- crunchModule._crn_decompress(src, srcSize, dst, dstSize, 0, mipMapLevels);
76
-
77
- crunchModule._free(src);
46
+ function parseCrunch(_x, _x2) {
47
+ return _parseCrunch.apply(this, arguments);
48
+ }
78
49
 
79
- const image = new Uint8Array(crunchModule.HEAPU8.buffer, dst, dstSize).slice();
80
- return (0, _extractMipmapImages.extractMipmapImages)(image, {
81
- mipMapLevels,
82
- width,
83
- height,
84
- sizeFunction,
85
- internalFormat: DXT_FORMAT_MAP[format].pixelFormat
86
- });
50
+ function _parseCrunch() {
51
+ _parseCrunch = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee(data, options) {
52
+ var crunchModule, srcSize, bytes, src, format, mipMapLevels, width, height, sizeFunction, dstSize, i, image;
53
+ return _regenerator.default.wrap(function _callee$(_context) {
54
+ while (1) {
55
+ switch (_context.prev = _context.next) {
56
+ case 0:
57
+ _context.next = 2;
58
+ return (0, _crunchModuleLoader.loadCrunchModule)(options);
59
+
60
+ case 2:
61
+ crunchModule = _context.sent;
62
+ srcSize = data.byteLength;
63
+ bytes = new Uint8Array(data);
64
+ src = crunchModule._malloc(srcSize);
65
+ arrayBufferCopy(bytes, crunchModule.HEAPU8, src, srcSize);
66
+ format = crunchModule._crn_get_dxt_format(src, srcSize);
67
+ (0, _loaderUtils.assert)(Boolean(DXT_FORMAT_MAP[format]), 'Unsupported format');
68
+ mipMapLevels = crunchModule._crn_get_levels(src, srcSize);
69
+ width = crunchModule._crn_get_width(src, srcSize);
70
+ height = crunchModule._crn_get_height(src, srcSize);
71
+ sizeFunction = DXT_FORMAT_MAP[format].sizeFunction;
72
+ dstSize = 0;
73
+
74
+ for (i = 0; i < mipMapLevels; ++i) {
75
+ dstSize += sizeFunction(width >> i, height >> i);
76
+ }
77
+
78
+ if (cachedDstSize < dstSize) {
79
+ if (dst) {
80
+ crunchModule._free(dst);
81
+ }
82
+
83
+ dst = crunchModule._malloc(dstSize);
84
+ cachedDstSize = dstSize;
85
+ }
86
+
87
+ crunchModule._crn_decompress(src, srcSize, dst, dstSize, 0, mipMapLevels);
88
+
89
+ crunchModule._free(src);
90
+
91
+ image = new Uint8Array(crunchModule.HEAPU8.buffer, dst, dstSize).slice();
92
+ return _context.abrupt("return", (0, _extractMipmapImages.extractMipmapImages)(image, {
93
+ mipMapLevels: mipMapLevels,
94
+ width: width,
95
+ height: height,
96
+ sizeFunction: sizeFunction,
97
+ internalFormat: DXT_FORMAT_MAP[format].pixelFormat
98
+ }));
99
+
100
+ case 20:
101
+ case "end":
102
+ return _context.stop();
103
+ }
104
+ }
105
+ }, _callee);
106
+ }));
107
+ return _parseCrunch.apply(this, arguments);
87
108
  }
88
109
 
89
110
  function arrayBufferCopy(srcData, dstData, dstByteOffset, numBytes) {
90
- let i;
91
- const dst32Offset = dstByteOffset / 4;
92
- const tail = numBytes % 4;
93
- const src32 = new Uint32Array(srcData.buffer, 0, (numBytes - tail) / 4);
94
- const dst32 = new Uint32Array(dstData.buffer);
111
+ var i;
112
+ var dst32Offset = dstByteOffset / 4;
113
+ var tail = numBytes % 4;
114
+ var src32 = new Uint32Array(srcData.buffer, 0, (numBytes - tail) / 4);
115
+ var dst32 = new Uint32Array(dstData.buffer);
95
116
 
96
117
  for (i = 0; i < src32.length; i++) {
97
118
  dst32[dst32Offset + i] = src32[i];
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/parsers/parse-crunch.ts"],"names":["CRN_FORMAT","cCRNFmtInvalid","cCRNFmtDXT1","cCRNFmtDXT3","cCRNFmtDXT5","DXT_FORMAT_MAP","pixelFormat","GL","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 '../../types';\nimport {loadCrunchModule} from './crunch-module-loader';\nimport {GL} from '../gl-constants';\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 = {};\nDXT_FORMAT_MAP[CRN_FORMAT.cCRNFmtDXT1] = {\n pixelFormat: GL.COMPRESSED_RGB_S3TC_DXT1_EXT,\n sizeFunction: getDxt1LevelSize\n};\nDXT_FORMAT_MAP[CRN_FORMAT.cCRNFmtDXT3] = {\n pixelFormat: GL.COMPRESSED_RGBA_S3TC_DXT3_EXT,\n sizeFunction: getDxtXLevelSize\n};\nDXT_FORMAT_MAP[CRN_FORMAT.cCRNFmtDXT5] = {\n pixelFormat: GL.COMPRESSED_RGBA_S3TC_DXT5_EXT,\n sizeFunction: getDxtXLevelSize\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,"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 '../../types';\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 = {};\nDXT_FORMAT_MAP[CRN_FORMAT.cCRNFmtDXT1] = {\n pixelFormat: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_S3TC_DXT1_EXT,\n sizeFunction: getDxt1LevelSize\n};\nDXT_FORMAT_MAP[CRN_FORMAT.cCRNFmtDXT3] = {\n pixelFormat: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT3_EXT,\n sizeFunction: getDxtXLevelSize\n};\nDXT_FORMAT_MAP[CRN_FORMAT.cCRNFmtDXT5] = {\n pixelFormat: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT5_EXT,\n sizeFunction: getDxtXLevelSize\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"}