@loaders.gl/textures 3.0.13 → 3.0.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/dist/basis-worker.js +1 -1
  2. package/dist/basis-worker.js.map +1 -1
  3. package/dist/compressed-texture-worker.js +1 -1
  4. package/dist/compressed-texture-worker.js.map +1 -1
  5. package/dist/crunch-worker.js +1 -1
  6. package/dist/crunch-worker.js.map +1 -1
  7. package/dist/dist.es5.min.js +1 -1
  8. package/dist/dist.es5.min.js.map +1 -1
  9. package/dist/dist.min.js +1 -1
  10. package/dist/dist.min.js.map +1 -1
  11. package/dist/es5/basis-loader.js +13 -5
  12. package/dist/es5/basis-loader.js.map +1 -1
  13. package/dist/es5/bundle.js +2 -2
  14. package/dist/es5/bundle.js.map +1 -1
  15. package/dist/es5/compressed-texture-loader.js +41 -6
  16. package/dist/es5/compressed-texture-loader.js.map +1 -1
  17. package/dist/es5/compressed-texture-writer.js +2 -2
  18. package/dist/es5/compressed-texture-writer.js.map +1 -1
  19. package/dist/es5/crunch-loader.js +2 -2
  20. package/dist/es5/crunch-loader.js.map +1 -1
  21. package/dist/es5/index.js +14 -14
  22. package/dist/es5/lib/encoders/encode-ktx.js +1 -1
  23. package/dist/es5/lib/encoders/encode-ktx.js.map +1 -1
  24. package/dist/es5/lib/encoders/encode-texture.js +41 -13
  25. package/dist/es5/lib/encoders/encode-texture.js.map +1 -1
  26. package/dist/es5/lib/gl-constants.js +1 -1
  27. package/dist/es5/lib/gl-constants.js.map +1 -1
  28. package/dist/es5/lib/parsers/basis-module-loader.js +98 -22
  29. package/dist/es5/lib/parsers/basis-module-loader.js.map +1 -1
  30. package/dist/es5/lib/parsers/crunch-module-loader.js +71 -15
  31. package/dist/es5/lib/parsers/crunch-module-loader.js.map +1 -1
  32. package/dist/es5/lib/parsers/parse-basis.js +84 -46
  33. package/dist/es5/lib/parsers/parse-basis.js.map +1 -1
  34. package/dist/es5/lib/parsers/parse-crunch.js +76 -55
  35. package/dist/es5/lib/parsers/parse-crunch.js.map +1 -1
  36. package/dist/es5/lib/parsers/parse-dds.js +21 -21
  37. package/dist/es5/lib/parsers/parse-dds.js.map +1 -1
  38. package/dist/es5/lib/parsers/parse-ktx.js +16 -14
  39. package/dist/es5/lib/parsers/parse-ktx.js.map +1 -1
  40. package/dist/es5/lib/parsers/parse-npy.js +28 -25
  41. package/dist/es5/lib/parsers/parse-npy.js.map +1 -1
  42. package/dist/es5/lib/parsers/parse-pvr.js +21 -21
  43. package/dist/es5/lib/parsers/parse-pvr.js.map +1 -1
  44. package/dist/es5/lib/texture-api/async-deep-map.js +156 -27
  45. package/dist/es5/lib/texture-api/async-deep-map.js.map +1 -1
  46. package/dist/es5/lib/texture-api/deep-load.js +67 -6
  47. package/dist/es5/lib/texture-api/deep-load.js.map +1 -1
  48. package/dist/es5/lib/texture-api/generate-url.js +11 -7
  49. package/dist/es5/lib/texture-api/generate-url.js.map +1 -1
  50. package/dist/es5/lib/texture-api/load-image-array.js +76 -12
  51. package/dist/es5/lib/texture-api/load-image-array.js.map +1 -1
  52. package/dist/es5/lib/texture-api/load-image-cube.js +96 -27
  53. package/dist/es5/lib/texture-api/load-image-cube.js.map +1 -1
  54. package/dist/es5/lib/texture-api/load-image.js +145 -39
  55. package/dist/es5/lib/texture-api/load-image.js.map +1 -1
  56. package/dist/es5/lib/utils/extract-mipmap-images.js +9 -9
  57. package/dist/es5/lib/utils/extract-mipmap-images.js.map +1 -1
  58. package/dist/es5/lib/utils/ktx-format-helper.js +1 -1
  59. package/dist/es5/lib/utils/ktx-format-helper.js.map +1 -1
  60. package/dist/es5/lib/utils/texture-formats.js +27 -9
  61. package/dist/es5/lib/utils/texture-formats.js.map +1 -1
  62. package/dist/es5/lib/utils/version.js +1 -1
  63. package/dist/es5/lib/utils/version.js.map +1 -1
  64. package/dist/es5/npy-loader.js +42 -7
  65. package/dist/es5/npy-loader.js.map +1 -1
  66. package/dist/es5/workers/crunch-worker.js +11 -2
  67. package/dist/es5/workers/crunch-worker.js.map +1 -1
  68. package/dist/esm/lib/utils/version.js +1 -1
  69. package/dist/npy-worker.js +1 -1
  70. package/dist/npy-worker.js.map +1 -1
  71. package/package.json +5 -5
@@ -1,32 +1,88 @@
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.loadCrunchModule = loadCrunchModule;
7
9
 
10
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
11
+
12
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
13
+
8
14
  var _workerUtils = require("@loaders.gl/worker-utils");
9
15
 
10
- async function loadCrunchModule(options) {
11
- const modules = options.modules || {};
16
+ function loadCrunchModule(_x) {
17
+ return _loadCrunchModule.apply(this, arguments);
18
+ }
19
+
20
+ function _loadCrunchModule() {
21
+ _loadCrunchModule = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee(options) {
22
+ var modules;
23
+ return _regenerator.default.wrap(function _callee$(_context) {
24
+ while (1) {
25
+ switch (_context.prev = _context.next) {
26
+ case 0:
27
+ modules = options.modules || {};
28
+
29
+ if (!modules.crunch) {
30
+ _context.next = 3;
31
+ break;
32
+ }
12
33
 
13
- if (modules.crunch) {
14
- return modules.crunch;
15
- }
34
+ return _context.abrupt("return", modules.crunch);
16
35
 
17
- return loadCrunch(options);
36
+ case 3:
37
+ return _context.abrupt("return", loadCrunch(options));
38
+
39
+ case 4:
40
+ case "end":
41
+ return _context.stop();
42
+ }
43
+ }
44
+ }, _callee);
45
+ }));
46
+ return _loadCrunchModule.apply(this, arguments);
47
+ }
48
+
49
+ var crunchModule;
50
+
51
+ function loadCrunch(_x2) {
52
+ return _loadCrunch.apply(this, arguments);
18
53
  }
19
54
 
20
- let crunchModule;
55
+ function _loadCrunch() {
56
+ _loadCrunch = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee2(options) {
57
+ var loadCrunchDecoder;
58
+ return _regenerator.default.wrap(function _callee2$(_context2) {
59
+ while (1) {
60
+ switch (_context2.prev = _context2.next) {
61
+ case 0:
62
+ if (!crunchModule) {
63
+ _context2.next = 2;
64
+ break;
65
+ }
66
+
67
+ return _context2.abrupt("return", crunchModule);
68
+
69
+ case 2:
70
+ _context2.next = 4;
71
+ return (0, _workerUtils.loadLibrary)('crunch.js', 'textures', options);
21
72
 
22
- async function loadCrunch(options) {
23
- if (crunchModule) {
24
- return crunchModule;
25
- }
73
+ case 4:
74
+ loadCrunchDecoder = _context2.sent;
75
+ loadCrunchDecoder = loadCrunchDecoder || globalThis.loadCrunchDecoder;
76
+ crunchModule = loadCrunchDecoder();
77
+ return _context2.abrupt("return", crunchModule);
26
78
 
27
- let loadCrunchDecoder = await (0, _workerUtils.loadLibrary)('crunch.js', 'textures', options);
28
- loadCrunchDecoder = loadCrunchDecoder || globalThis.loadCrunchDecoder;
29
- crunchModule = loadCrunchDecoder();
30
- return crunchModule;
79
+ case 8:
80
+ case "end":
81
+ return _context2.stop();
82
+ }
83
+ }
84
+ }, _callee2);
85
+ }));
86
+ return _loadCrunch.apply(this, arguments);
31
87
  }
32
88
  //# sourceMappingURL=crunch-module-loader.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/parsers/crunch-module-loader.ts"],"names":["loadCrunchModule","options","modules","crunch","loadCrunch","crunchModule","loadCrunchDecoder","globalThis"],"mappings":";;;;;;;AAAA;;AAOO,eAAeA,gBAAf,CAAgCC,OAAhC,EAAuD;AAC5D,QAAMC,OAAO,GAAGD,OAAO,CAACC,OAAR,IAAmB,EAAnC;;AACA,MAAIA,OAAO,CAACC,MAAZ,EAAoB;AAClB,WAAOD,OAAO,CAACC,MAAf;AACD;;AAED,SAAOC,UAAU,CAACH,OAAD,CAAjB;AACD;;AAED,IAAII,YAAJ;;AAOA,eAAeD,UAAf,CAA0BH,OAA1B,EAAmC;AACjC,MAAII,YAAJ,EAAkB;AAChB,WAAOA,YAAP;AACD;;AAED,MAAIC,iBAAiB,GAAG,MAAM,8BAAY,WAAZ,EAAyB,UAAzB,EAAqCL,OAArC,CAA9B;AAIAK,EAAAA,iBAAiB,GAAGA,iBAAiB,IAAIC,UAAU,CAACD,iBAApD;AACAD,EAAAA,YAAY,GAAGC,iBAAiB,EAAhC;AACA,SAAOD,YAAP;AACD","sourcesContent":["import {loadLibrary} from '@loaders.gl/worker-utils';\n\n/**\n * Load crunch decoder module\n * @param options - loader options\n * @returns Promise of module object\n */\nexport async function loadCrunchModule(options): Promise<any> {\n const modules = options.modules || {};\n if (modules.crunch) {\n return modules.crunch;\n }\n\n return loadCrunch(options);\n}\n\nlet crunchModule;\n\n/**\n * Load crunch decoder module\n * @param {any} options - Loader options\n * @returns {Promise<any>} Promise of Module object\n */\nasync function loadCrunch(options) {\n if (crunchModule) {\n return crunchModule;\n }\n\n let loadCrunchDecoder = await loadLibrary('crunch.js', 'textures', options);\n\n // Depends on how import happened...\n // @ts-ignore TS2339: Property does not exist on type\n loadCrunchDecoder = loadCrunchDecoder || globalThis.loadCrunchDecoder;\n crunchModule = loadCrunchDecoder();\n return crunchModule;\n}\n"],"file":"crunch-module-loader.js"}
1
+ {"version":3,"sources":["../../../../src/lib/parsers/crunch-module-loader.ts"],"names":["loadCrunchModule","options","modules","crunch","loadCrunch","crunchModule","loadCrunchDecoder","globalThis"],"mappings":";;;;;;;;;;;;;AAAA;;SAOsBA,gB;;;;;gFAAf,iBAAgCC,OAAhC;AAAA;AAAA;AAAA;AAAA;AAAA;AACCC,YAAAA,OADD,GACWD,OAAO,CAACC,OAAR,IAAmB,EAD9B;;AAAA,iBAEDA,OAAO,CAACC,MAFP;AAAA;AAAA;AAAA;;AAAA,6CAGID,OAAO,CAACC,MAHZ;;AAAA;AAAA,6CAMEC,UAAU,CAACH,OAAD,CANZ;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,G;;;;AASP,IAAII,YAAJ;;SAOeD,U;;;;;0EAAf,kBAA0BH,OAA1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBACMI,YADN;AAAA;AAAA;AAAA;;AAAA,8CAEWA,YAFX;;AAAA;AAAA;AAAA,mBAKgC,8BAAY,WAAZ,EAAyB,UAAzB,EAAqCJ,OAArC,CALhC;;AAAA;AAKMK,YAAAA,iBALN;AASEA,YAAAA,iBAAiB,GAAGA,iBAAiB,IAAIC,UAAU,CAACD,iBAApD;AACAD,YAAAA,YAAY,GAAGC,iBAAiB,EAAhC;AAVF,8CAWSD,YAXT;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,G","sourcesContent":["import {loadLibrary} from '@loaders.gl/worker-utils';\n\n/**\n * Load crunch decoder module\n * @param options - loader options\n * @returns Promise of module object\n */\nexport async function loadCrunchModule(options): Promise<any> {\n const modules = options.modules || {};\n if (modules.crunch) {\n return modules.crunch;\n }\n\n return loadCrunch(options);\n}\n\nlet crunchModule;\n\n/**\n * Load crunch decoder module\n * @param {any} options - Loader options\n * @returns {Promise<any>} Promise of Module object\n */\nasync function loadCrunch(options) {\n if (crunchModule) {\n return crunchModule;\n }\n\n let loadCrunchDecoder = await loadLibrary('crunch.js', 'textures', options);\n\n // Depends on how import happened...\n // @ts-ignore TS2339: Property does not exist on type\n loadCrunchDecoder = loadCrunchDecoder || globalThis.loadCrunchDecoder;\n crunchModule = loadCrunchDecoder();\n return crunchModule;\n}\n"],"file":"crunch-module-loader.js"}
@@ -1,15 +1,23 @@
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
 
10
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
11
+
12
+ var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
13
+
14
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
15
+
8
16
  var _basisModuleLoader = require("./basis-module-loader");
9
17
 
10
18
  var _glConstants = require("../gl-constants");
11
19
 
12
- const OutputFormat = {
20
+ var OutputFormat = {
13
21
  etc1: {
14
22
  basisFormat: 0,
15
23
  compressed: true
@@ -82,42 +90,71 @@ const OutputFormat = {
82
90
  }
83
91
  };
84
92
 
85
- async function parseBasis(data, options) {
86
- const {
87
- BasisFile
88
- } = await (0, _basisModuleLoader.loadBasisModule)(options);
89
- const basisFile = new BasisFile(new Uint8Array(data));
90
-
91
- try {
92
- if (!basisFile.startTranscoding()) {
93
- return null;
94
- }
95
-
96
- const imageCount = basisFile.getNumImages();
97
- const images = [];
98
-
99
- for (let imageIndex = 0; imageIndex < imageCount; imageIndex++) {
100
- const levelsCount = basisFile.getNumLevels(imageIndex);
101
- const levels = [];
93
+ function parseBasis(_x, _x2) {
94
+ return _parseBasis.apply(this, arguments);
95
+ }
102
96
 
103
- for (let levelIndex = 0; levelIndex < levelsCount; levelIndex++) {
104
- levels.push(transcodeImage(basisFile, imageIndex, levelIndex, options));
97
+ function _parseBasis() {
98
+ _parseBasis = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee(data, options) {
99
+ var _yield$loadBasisModul, BasisFile, basisFile, imageCount, images, imageIndex, levelsCount, levels, levelIndex;
100
+
101
+ return _regenerator.default.wrap(function _callee$(_context) {
102
+ while (1) {
103
+ switch (_context.prev = _context.next) {
104
+ case 0:
105
+ _context.next = 2;
106
+ return (0, _basisModuleLoader.loadBasisModule)(options);
107
+
108
+ case 2:
109
+ _yield$loadBasisModul = _context.sent;
110
+ BasisFile = _yield$loadBasisModul.BasisFile;
111
+ basisFile = new BasisFile(new Uint8Array(data));
112
+ _context.prev = 5;
113
+
114
+ if (basisFile.startTranscoding()) {
115
+ _context.next = 8;
116
+ break;
117
+ }
118
+
119
+ return _context.abrupt("return", null);
120
+
121
+ case 8:
122
+ imageCount = basisFile.getNumImages();
123
+ images = [];
124
+
125
+ for (imageIndex = 0; imageIndex < imageCount; imageIndex++) {
126
+ levelsCount = basisFile.getNumLevels(imageIndex);
127
+ levels = [];
128
+
129
+ for (levelIndex = 0; levelIndex < levelsCount; levelIndex++) {
130
+ levels.push(transcodeImage(basisFile, imageIndex, levelIndex, options));
131
+ }
132
+
133
+ images.push(levels);
134
+ }
135
+
136
+ return _context.abrupt("return", images);
137
+
138
+ case 12:
139
+ _context.prev = 12;
140
+ basisFile.close();
141
+ basisFile.delete();
142
+ return _context.finish(12);
143
+
144
+ case 16:
145
+ case "end":
146
+ return _context.stop();
147
+ }
105
148
  }
106
-
107
- images.push(levels);
108
- }
109
-
110
- return images;
111
- } finally {
112
- basisFile.close();
113
- basisFile.delete();
114
- }
149
+ }, _callee, null, [[5,, 12, 16]]);
150
+ }));
151
+ return _parseBasis.apply(this, arguments);
115
152
  }
116
153
 
117
154
  function getBasisOptions(options, hasAlpha) {
118
- let format = options && options.basis && options.basis.format;
155
+ var format = options && options.basis && options.basis.format;
119
156
 
120
- if (typeof format === 'object') {
157
+ if ((0, _typeof2.default)(format) === 'object') {
121
158
  format = hasAlpha ? format.alpha : format.noAlpha;
122
159
  }
123
160
 
@@ -126,28 +163,29 @@ function getBasisOptions(options, hasAlpha) {
126
163
  }
127
164
 
128
165
  function transcodeImage(basisFile, imageIndex, levelIndex, options) {
129
- const width = basisFile.getImageWidth(imageIndex, levelIndex);
130
- const height = basisFile.getImageHeight(imageIndex, levelIndex);
131
- const hasAlpha = basisFile.getHasAlpha();
132
- const {
133
- compressed,
134
- format,
135
- basisFormat
136
- } = getBasisOptions(options, hasAlpha);
137
- const decodedSize = basisFile.getImageTranscodedSizeInBytes(imageIndex, levelIndex, basisFormat);
138
- const decodedData = new Uint8Array(decodedSize);
166
+ var width = basisFile.getImageWidth(imageIndex, levelIndex);
167
+ var height = basisFile.getImageHeight(imageIndex, levelIndex);
168
+ var hasAlpha = basisFile.getHasAlpha();
169
+
170
+ var _getBasisOptions = getBasisOptions(options, hasAlpha),
171
+ compressed = _getBasisOptions.compressed,
172
+ format = _getBasisOptions.format,
173
+ basisFormat = _getBasisOptions.basisFormat;
174
+
175
+ var decodedSize = basisFile.getImageTranscodedSizeInBytes(imageIndex, levelIndex, basisFormat);
176
+ var decodedData = new Uint8Array(decodedSize);
139
177
 
140
178
  if (!basisFile.transcodeImage(decodedData, imageIndex, levelIndex, basisFormat, 0, 0)) {
141
179
  return null;
142
180
  }
143
181
 
144
182
  return {
145
- width,
146
- height,
183
+ width: width,
184
+ height: height,
147
185
  data: decodedData,
148
- compressed,
149
- hasAlpha,
150
- format
186
+ compressed: compressed,
187
+ hasAlpha: hasAlpha,
188
+ format: format
151
189
  };
152
190
  }
153
191
  //# sourceMappingURL=parse-basis.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/parsers/parse-basis.js"],"names":["OutputFormat","etc1","basisFormat","compressed","etc2","bc1","format","GL","COMPRESSED_RGB_S3TC_DXT1_EXT","bc3","COMPRESSED_RGBA_S3TC_DXT5_EXT","bc4","bc5","rgba32","rgb565","bgr565","rgba4444","parseBasis","data","options","BasisFile","basisFile","Uint8Array","startTranscoding","imageCount","getNumImages","images","imageIndex","levelsCount","getNumLevels","levels","levelIndex","push","transcodeImage","close","delete","getBasisOptions","hasAlpha","basis","alpha","noAlpha","toLowerCase","width","getImageWidth","height","getImageHeight","getHasAlpha","decodedSize","getImageTranscodedSizeInBytes","decodedData"],"mappings":"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","sourcesContent":["import {loadBasisModule} from './basis-module-loader';\nimport {GL} from '../gl-constants';\n\nconst OutputFormat = {\n etc1: {basisFormat: 0, compressed: true},\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},\n 'pvrtc1-4-rgba': {basisFormat: 9, compressed: true},\n 'astc-4x4': {basisFormat: 10, compressed: true},\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\nexport default async function parseBasis(data, options) {\n const {BasisFile} = await loadBasisModule(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\nfunction getBasisOptions(options, hasAlpha) {\n let format = options && options.basis && options.basis.format;\n if (typeof format === 'object') {\n format = hasAlpha ? format.alpha : format.noAlpha;\n }\n\n format = format.toLowerCase();\n return OutputFormat[format];\n}\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"],"file":"parse-basis.js"}
1
+ {"version":3,"sources":["../../../../src/lib/parsers/parse-basis.js"],"names":["OutputFormat","etc1","basisFormat","compressed","etc2","bc1","format","GL","COMPRESSED_RGB_S3TC_DXT1_EXT","bc3","COMPRESSED_RGBA_S3TC_DXT5_EXT","bc4","bc5","rgba32","rgb565","bgr565","rgba4444","parseBasis","data","options","BasisFile","basisFile","Uint8Array","startTranscoding","imageCount","getNumImages","images","imageIndex","levelsCount","getNumLevels","levels","levelIndex","push","transcodeImage","close","delete","getBasisOptions","hasAlpha","basis","alpha","noAlpha","toLowerCase","width","getImageWidth","height","getImageHeight","getHasAlpha","decodedSize","getImageTranscodedSizeInBytes","decodedData"],"mappings":"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","sourcesContent":["import {loadBasisModule} from './basis-module-loader';\nimport {GL} from '../gl-constants';\n\nconst OutputFormat = {\n etc1: {basisFormat: 0, compressed: true},\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},\n 'pvrtc1-4-rgba': {basisFormat: 9, compressed: true},\n 'astc-4x4': {basisFormat: 10, compressed: true},\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\nexport default async function parseBasis(data, options) {\n const {BasisFile} = await loadBasisModule(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\nfunction getBasisOptions(options, hasAlpha) {\n let format = options && options.basis && options.basis.format;\n if (typeof format === 'object') {\n format = hasAlpha ? format.alpha : format.noAlpha;\n }\n\n format = format.toLowerCase();\n return OutputFormat[format];\n}\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"],"file":"parse-basis.js"}
@@ -1,10 +1,16 @@
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
16
  var _glConstants = require("../gl-constants");
@@ -15,13 +21,13 @@ 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
32
  pixelFormat: _glConstants.GL.COMPRESSED_RGB_S3TC_DXT1_EXT,
27
33
  sizeFunction: _parseDds.getDxt1LevelSize
@@ -34,64 +40,79 @@ DXT_FORMAT_MAP[CRN_FORMAT.cCRNFmtDXT5] = {
34
40
  pixelFormat: _glConstants.GL.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","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"}
@@ -14,10 +14,10 @@ var _glConstants = require("../gl-constants");
14
14
 
15
15
  var _extractMipmapImages = require("../utils/extract-mipmap-images");
16
16
 
17
- const getATCLevelSize = getDxt1LevelSize;
18
- const getATCALevelSize = getDxtXLevelSize;
19
- const getATCILevelSize = getDxtXLevelSize;
20
- const DDS_CONSTANTS = {
17
+ var getATCLevelSize = getDxt1LevelSize;
18
+ var getATCALevelSize = getDxtXLevelSize;
19
+ var getATCILevelSize = getDxtXLevelSize;
20
+ var DDS_CONSTANTS = {
21
21
  MAGIC_NUMBER: 0x20534444,
22
22
  HEADER_LENGTH: 31,
23
23
  MAGIC_NUMBER_INDEX: 0,
@@ -49,35 +49,35 @@ const DDS_CONSTANTS = {
49
49
  };
50
50
 
51
51
  function isDDS(data) {
52
- const header = new Uint32Array(data, 0, DDS_CONSTANTS.HEADER_LENGTH);
53
- const magic = header[DDS_CONSTANTS.MAGIC_NUMBER_INDEX];
52
+ var header = new Uint32Array(data, 0, DDS_CONSTANTS.HEADER_LENGTH);
53
+ var magic = header[DDS_CONSTANTS.MAGIC_NUMBER_INDEX];
54
54
  return magic === DDS_CONSTANTS.MAGIC_NUMBER;
55
55
  }
56
56
 
57
57
  function parseDDS(data) {
58
- const header = new Int32Array(data, 0, DDS_CONSTANTS.HEADER_LENGTH);
59
- const pixelFormatNumber = header[DDS_CONSTANTS.HEADER_PF_FOURCC_INDEX];
58
+ var header = new Int32Array(data, 0, DDS_CONSTANTS.HEADER_LENGTH);
59
+ var pixelFormatNumber = header[DDS_CONSTANTS.HEADER_PF_FOURCC_INDEX];
60
60
  (0, _loaderUtils.assert)(Boolean(header[DDS_CONSTANTS.HEADER_PF_FLAGS_INDEX] & DDS_CONSTANTS.DDPF_FOURCC), 'DDS: Unsupported format, must contain a FourCC code');
61
- const fourCC = int32ToFourCC(pixelFormatNumber);
62
- const internalFormat = DDS_CONSTANTS.PIXEL_FORMATS[fourCC];
63
- const sizeFunction = DDS_CONSTANTS.SIZE_FUNCTIONS[fourCC];
61
+ var fourCC = int32ToFourCC(pixelFormatNumber);
62
+ var internalFormat = DDS_CONSTANTS.PIXEL_FORMATS[fourCC];
63
+ var sizeFunction = DDS_CONSTANTS.SIZE_FUNCTIONS[fourCC];
64
64
  (0, _loaderUtils.assert)(internalFormat && sizeFunction, "DDS: Unknown pixel format ".concat(pixelFormatNumber));
65
- let mipMapLevels = 1;
65
+ var mipMapLevels = 1;
66
66
 
67
67
  if (header[DDS_CONSTANTS.HEADER_FLAGS_INDEX] & DDS_CONSTANTS.DDSD_MIPMAPCOUNT) {
68
68
  mipMapLevels = Math.max(1, header[DDS_CONSTANTS.MIPMAPCOUNT_INDEX]);
69
69
  }
70
70
 
71
- const width = header[DDS_CONSTANTS.HEADER_WIDTH_INDEX];
72
- const height = header[DDS_CONSTANTS.HEADER_HEIGHT_INDEX];
73
- const dataOffset = header[DDS_CONSTANTS.HEADER_SIZE_INDEX] + 4;
74
- const image = new Uint8Array(data, dataOffset);
71
+ var width = header[DDS_CONSTANTS.HEADER_WIDTH_INDEX];
72
+ var height = header[DDS_CONSTANTS.HEADER_HEIGHT_INDEX];
73
+ var dataOffset = header[DDS_CONSTANTS.HEADER_SIZE_INDEX] + 4;
74
+ var image = new Uint8Array(data, dataOffset);
75
75
  return (0, _extractMipmapImages.extractMipmapImages)(image, {
76
- mipMapLevels,
77
- width,
78
- height,
79
- sizeFunction,
80
- internalFormat
76
+ mipMapLevels: mipMapLevels,
77
+ width: width,
78
+ height: height,
79
+ sizeFunction: sizeFunction,
80
+ internalFormat: internalFormat
81
81
  });
82
82
  }
83
83
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/parsers/parse-dds.ts"],"names":["getATCLevelSize","getDxt1LevelSize","getATCALevelSize","getDxtXLevelSize","getATCILevelSize","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","PIXEL_FORMATS","DXT1","GL","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","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 '../../types';\nimport {assert} from '@loaders.gl/loader-utils';\nimport {GL} from '../gl-constants';\nimport {extractMipmapImages} from '../utils/extract-mipmap-images';\n\nconst getATCLevelSize = getDxt1LevelSize;\nconst getATCALevelSize = getDxtXLevelSize;\nconst getATCILevelSize = getDxtXLevelSize;\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 PIXEL_FORMATS: {\n DXT1: GL.COMPRESSED_RGB_S3TC_DXT1_EXT,\n DXT3: GL.COMPRESSED_RGBA_S3TC_DXT3_EXT,\n DXT5: GL.COMPRESSED_RGBA_S3TC_DXT5_EXT,\n 'ATC ': GL.COMPRESSED_RGB_ATC_WEBGL,\n ATCA: GL.COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL,\n ATCI: GL.COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL\n },\n SIZE_FUNCTIONS: {\n DXT1: getDxt1LevelSize,\n DXT3: getDxtXLevelSize,\n DXT5: getDxtXLevelSize,\n 'ATC ': getATCLevelSize,\n ATCA: getATCALevelSize,\n ATCI: getATCILevelSize\n }\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_CONSTANTS.PIXEL_FORMATS[fourCC];\n const sizeFunction = DDS_CONSTANTS.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 {number} value - Int32 number\n * @returns {string} string of 4 characters\n */\nfunction int32ToFourCC(value) {\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,"sources":["../../../../src/lib/parsers/parse-dds.ts"],"names":["getATCLevelSize","getDxt1LevelSize","getATCALevelSize","getDxtXLevelSize","getATCILevelSize","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","PIXEL_FORMATS","DXT1","GL","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","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 '../../types';\nimport {assert} from '@loaders.gl/loader-utils';\nimport {GL} from '../gl-constants';\nimport {extractMipmapImages} from '../utils/extract-mipmap-images';\n\nconst getATCLevelSize = getDxt1LevelSize;\nconst getATCALevelSize = getDxtXLevelSize;\nconst getATCILevelSize = getDxtXLevelSize;\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 PIXEL_FORMATS: {\n DXT1: GL.COMPRESSED_RGB_S3TC_DXT1_EXT,\n DXT3: GL.COMPRESSED_RGBA_S3TC_DXT3_EXT,\n DXT5: GL.COMPRESSED_RGBA_S3TC_DXT5_EXT,\n 'ATC ': GL.COMPRESSED_RGB_ATC_WEBGL,\n ATCA: GL.COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL,\n ATCI: GL.COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL\n },\n SIZE_FUNCTIONS: {\n DXT1: getDxt1LevelSize,\n DXT3: getDxtXLevelSize,\n DXT5: getDxtXLevelSize,\n 'ATC ': getATCLevelSize,\n ATCA: getATCALevelSize,\n ATCI: getATCILevelSize\n }\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_CONSTANTS.PIXEL_FORMATS[fourCC];\n const sizeFunction = DDS_CONSTANTS.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 {number} value - Int32 number\n * @returns {string} string of 4 characters\n */\nfunction int32ToFourCC(value) {\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"}