@loaders.gl/textures 3.3.0-alpha.5 → 3.3.0-alpha.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/basis-nodejs-worker.js +1762 -2429
- package/dist/basis-worker.js +3 -3
- package/dist/compressed-texture-worker.js +3 -3
- package/dist/crunch-worker.js +2 -2
- package/dist/dist.min.js +7 -5
- package/dist/es5/basis-loader.js +4 -12
- package/dist/es5/basis-loader.js.map +1 -1
- package/dist/es5/bundle.js +0 -1
- package/dist/es5/bundle.js.map +1 -1
- package/dist/es5/compressed-texture-loader.js +8 -21
- package/dist/es5/compressed-texture-loader.js.map +1 -1
- package/dist/es5/compressed-texture-writer.js +1 -3
- package/dist/es5/compressed-texture-writer.js.map +1 -1
- package/dist/es5/crunch-loader.js +2 -2
- package/dist/es5/crunch-loader.js.map +1 -1
- package/dist/es5/index.js +22 -35
- package/dist/es5/index.js.map +1 -1
- package/dist/es5/ktx2-basis-writer-nodejs.js +0 -2
- package/dist/es5/ktx2-basis-writer-nodejs.js.map +1 -1
- package/dist/es5/ktx2-basis-writer.js +1 -3
- package/dist/es5/ktx2-basis-writer.js.map +1 -1
- package/dist/es5/lib/encoders/encode-ktx.js +0 -2
- package/dist/es5/lib/encoders/encode-ktx.js.map +1 -1
- package/dist/es5/lib/encoders/encode-ktx2-basis-texture.js +15 -26
- package/dist/es5/lib/encoders/encode-ktx2-basis-texture.js.map +1 -1
- package/dist/es5/lib/encoders/encode-texture.js +2 -9
- package/dist/es5/lib/encoders/encode-texture.js.map +1 -1
- package/dist/es5/lib/gl-extensions.js +8 -0
- package/dist/es5/lib/gl-extensions.js.map +1 -1
- package/dist/es5/lib/parsers/basis-module-loader.js +6 -46
- package/dist/es5/lib/parsers/basis-module-loader.js.map +1 -1
- package/dist/es5/lib/parsers/crunch-module-loader.js +0 -16
- package/dist/es5/lib/parsers/crunch-module-loader.js.map +1 -1
- package/dist/es5/lib/parsers/parse-basis.js +10 -53
- package/dist/es5/lib/parsers/parse-basis.js.map +1 -1
- package/dist/es5/lib/parsers/parse-compressed-texture.js +0 -7
- package/dist/es5/lib/parsers/parse-compressed-texture.js.map +1 -1
- package/dist/es5/lib/parsers/parse-crunch.js +4 -20
- package/dist/es5/lib/parsers/parse-crunch.js.map +1 -1
- package/dist/es5/lib/parsers/parse-dds.js +2 -8
- package/dist/es5/lib/parsers/parse-dds.js.map +1 -1
- package/dist/es5/lib/parsers/parse-ktx.js +15 -7
- package/dist/es5/lib/parsers/parse-ktx.js.map +1 -1
- package/dist/es5/lib/parsers/parse-npy.js +11 -18
- package/dist/es5/lib/parsers/parse-npy.js.map +1 -1
- package/dist/es5/lib/parsers/parse-pvr.js +0 -2
- package/dist/es5/lib/parsers/parse-pvr.js.map +1 -1
- package/dist/es5/lib/texture-api/async-deep-map.js +3 -32
- package/dist/es5/lib/texture-api/async-deep-map.js.map +1 -1
- package/dist/es5/lib/texture-api/deep-load.js +0 -14
- package/dist/es5/lib/texture-api/deep-load.js.map +1 -1
- package/dist/es5/lib/texture-api/generate-url.js +3 -10
- package/dist/es5/lib/texture-api/generate-url.js.map +1 -1
- package/dist/es5/lib/texture-api/load-image-array.js +7 -24
- package/dist/es5/lib/texture-api/load-image-array.js.map +1 -1
- package/dist/es5/lib/texture-api/load-image-cube.js +4 -27
- package/dist/es5/lib/texture-api/load-image-cube.js.map +1 -1
- package/dist/es5/lib/texture-api/load-image.js +8 -41
- package/dist/es5/lib/texture-api/load-image.js.map +1 -1
- package/dist/es5/lib/texture-api/texture-api-types.js.map +1 -1
- package/dist/es5/lib/utils/extract-mipmap-images.js +0 -7
- package/dist/es5/lib/utils/extract-mipmap-images.js.map +1 -1
- package/dist/es5/lib/utils/ktx-format-helper.js +0 -2
- package/dist/es5/lib/utils/ktx-format-helper.js.map +1 -1
- package/dist/es5/lib/utils/texture-formats.js +2 -9
- package/dist/es5/lib/utils/texture-formats.js.map +1 -1
- package/dist/es5/lib/utils/version.js +1 -1
- package/dist/es5/lib/utils/version.js.map +1 -1
- package/dist/es5/npy-loader.js +5 -16
- package/dist/es5/npy-loader.js.map +1 -1
- package/dist/es5/types.js.map +1 -1
- package/dist/es5/workers/basis-nodejs-worker.js +0 -3
- package/dist/es5/workers/basis-nodejs-worker.js.map +1 -1
- package/dist/es5/workers/basis-worker.js +0 -2
- package/dist/es5/workers/basis-worker.js.map +1 -1
- package/dist/es5/workers/compressed-texture-worker.js +0 -2
- package/dist/es5/workers/compressed-texture-worker.js.map +1 -1
- package/dist/es5/workers/crunch-worker.js +2 -11
- package/dist/es5/workers/crunch-worker.js.map +1 -1
- package/dist/es5/workers/ktx2-basis-writer-nodejs-worker.js +0 -15
- package/dist/es5/workers/ktx2-basis-writer-nodejs-worker.js.map +1 -1
- package/dist/es5/workers/ktx2-basis-writer-worker.js +0 -15
- package/dist/es5/workers/ktx2-basis-writer-worker.js.map +1 -1
- package/dist/es5/workers/npy-worker.js +0 -2
- package/dist/es5/workers/npy-worker.js.map +1 -1
- package/dist/esm/basis-loader.js +5 -1
- package/dist/esm/basis-loader.js.map +1 -1
- package/dist/esm/bundle.js +1 -1
- package/dist/esm/bundle.js.map +1 -1
- package/dist/esm/compressed-texture-loader.js +8 -3
- package/dist/esm/compressed-texture-loader.js.map +1 -1
- package/dist/esm/compressed-texture-writer.js +1 -0
- package/dist/esm/compressed-texture-writer.js.map +1 -1
- package/dist/esm/crunch-loader.js +2 -0
- package/dist/esm/crunch-loader.js.map +1 -1
- package/dist/esm/index.js +5 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/ktx2-basis-writer-nodejs.js +1 -0
- package/dist/esm/ktx2-basis-writer-nodejs.js.map +1 -1
- package/dist/esm/ktx2-basis-writer.js +2 -0
- package/dist/esm/ktx2-basis-writer.js.map +1 -1
- package/dist/esm/lib/encoders/encode-ktx.js.map +1 -1
- package/dist/esm/lib/encoders/encode-ktx2-basis-texture.js +3 -2
- package/dist/esm/lib/encoders/encode-ktx2-basis-texture.js.map +1 -1
- package/dist/esm/lib/encoders/encode-texture.js +2 -1
- package/dist/esm/lib/encoders/encode-texture.js.map +1 -1
- package/dist/esm/lib/gl-extensions.js +9 -0
- package/dist/esm/lib/gl-extensions.js.map +1 -1
- package/dist/esm/lib/parsers/basis-module-loader.js +7 -10
- package/dist/esm/lib/parsers/basis-module-loader.js.map +1 -1
- package/dist/esm/lib/parsers/crunch-module-loader.js +3 -3
- package/dist/esm/lib/parsers/crunch-module-loader.js.map +1 -1
- package/dist/esm/lib/parsers/parse-basis.js +6 -23
- package/dist/esm/lib/parsers/parse-basis.js.map +1 -1
- package/dist/esm/lib/parsers/parse-compressed-texture.js +1 -3
- package/dist/esm/lib/parsers/parse-compressed-texture.js.map +1 -1
- package/dist/esm/lib/parsers/parse-crunch.js +5 -10
- package/dist/esm/lib/parsers/parse-crunch.js.map +1 -1
- package/dist/esm/lib/parsers/parse-dds.js +4 -2
- package/dist/esm/lib/parsers/parse-dds.js.map +1 -1
- package/dist/esm/lib/parsers/parse-ktx.js +16 -2
- package/dist/esm/lib/parsers/parse-ktx.js.map +1 -1
- package/dist/esm/lib/parsers/parse-npy.js +11 -13
- package/dist/esm/lib/parsers/parse-npy.js.map +1 -1
- package/dist/esm/lib/parsers/parse-pvr.js +4 -0
- package/dist/esm/lib/parsers/parse-pvr.js.map +1 -1
- package/dist/esm/lib/texture-api/async-deep-map.js +6 -6
- package/dist/esm/lib/texture-api/async-deep-map.js.map +1 -1
- package/dist/esm/lib/texture-api/deep-load.js +1 -0
- package/dist/esm/lib/texture-api/deep-load.js.map +1 -1
- package/dist/esm/lib/texture-api/generate-url.js +4 -3
- package/dist/esm/lib/texture-api/generate-url.js.map +1 -1
- package/dist/esm/lib/texture-api/load-image-array.js +5 -4
- package/dist/esm/lib/texture-api/load-image-array.js.map +1 -1
- package/dist/esm/lib/texture-api/load-image-cube.js +7 -4
- package/dist/esm/lib/texture-api/load-image-cube.js.map +1 -1
- package/dist/esm/lib/texture-api/load-image.js +9 -7
- package/dist/esm/lib/texture-api/load-image.js.map +1 -1
- package/dist/esm/lib/texture-api/texture-api-types.js.map +1 -1
- package/dist/esm/lib/utils/extract-mipmap-images.js +1 -6
- package/dist/esm/lib/utils/extract-mipmap-images.js.map +1 -1
- package/dist/esm/lib/utils/ktx-format-helper.js +1 -0
- package/dist/esm/lib/utils/ktx-format-helper.js.map +1 -1
- package/dist/esm/lib/utils/texture-formats.js +2 -2
- package/dist/esm/lib/utils/texture-formats.js.map +1 -1
- package/dist/esm/lib/utils/version.js +2 -1
- package/dist/esm/lib/utils/version.js.map +1 -1
- package/dist/esm/npy-loader.js +6 -1
- package/dist/esm/npy-loader.js.map +1 -1
- package/dist/esm/types.js.map +1 -1
- package/dist/esm/workers/basis-nodejs-worker.js.map +1 -1
- package/dist/esm/workers/basis-worker.js.map +1 -1
- package/dist/esm/workers/compressed-texture-worker.js.map +1 -1
- package/dist/esm/workers/crunch-worker.js +3 -1
- package/dist/esm/workers/crunch-worker.js.map +1 -1
- package/dist/esm/workers/ktx2-basis-writer-nodejs-worker.js +0 -4
- package/dist/esm/workers/ktx2-basis-writer-nodejs-worker.js.map +1 -1
- package/dist/esm/workers/ktx2-basis-writer-worker.js +0 -4
- package/dist/esm/workers/ktx2-basis-writer-worker.js.map +1 -1
- package/dist/esm/workers/npy-worker.js.map +1 -1
- package/dist/ktx2-basis-writer-nodejs-worker.js +1762 -2429
- package/dist/ktx2-basis-writer-worker.js +3 -3
- package/dist/lib/parsers/parse-npy.d.ts +1 -1
- package/dist/lib/parsers/parse-npy.d.ts.map +1 -1
- package/dist/lib/parsers/parse-npy.js +7 -7
- package/dist/npy-loader.d.ts +2 -2
- package/dist/npy-loader.d.ts.map +1 -1
- package/dist/npy-worker.js +8 -6
- package/package.json +7 -7
- package/src/lib/parsers/parse-npy.ts +20 -9
|
@@ -1,25 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
7
|
exports.default = parseBasis;
|
|
9
8
|
exports.selectSupportedBasisFormat = selectSupportedBasisFormat;
|
|
10
|
-
|
|
11
9
|
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
12
|
-
|
|
13
10
|
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
14
|
-
|
|
15
11
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
16
|
-
|
|
17
12
|
var _basisModuleLoader = require("./basis-module-loader");
|
|
18
|
-
|
|
19
13
|
var _glExtensions = require("../gl-extensions");
|
|
20
|
-
|
|
21
14
|
var _textureFormats = require("../utils/texture-formats");
|
|
22
|
-
|
|
23
15
|
var _parseKtx = require("./parse-ktx");
|
|
24
16
|
|
|
25
17
|
var OutputFormat = {
|
|
@@ -102,11 +94,9 @@ var OutputFormat = {
|
|
|
102
94
|
function parseBasis(_x, _x2) {
|
|
103
95
|
return _parseBasis.apply(this, arguments);
|
|
104
96
|
}
|
|
105
|
-
|
|
106
97
|
function _parseBasis() {
|
|
107
98
|
_parseBasis = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee(data, options) {
|
|
108
99
|
var fileConstructors, _yield$loadBasisTrasc, BasisFile, _fileConstructors, _yield$loadBasisTrasc2, _BasisFile;
|
|
109
|
-
|
|
110
100
|
return _regenerator.default.wrap(function _callee$(_context) {
|
|
111
101
|
while (1) {
|
|
112
102
|
switch (_context.prev = _context.next) {
|
|
@@ -115,58 +105,45 @@ function _parseBasis() {
|
|
|
115
105
|
_context.next = 11;
|
|
116
106
|
break;
|
|
117
107
|
}
|
|
118
|
-
|
|
119
108
|
if (!(0, _parseKtx.isKTX)(data)) {
|
|
120
109
|
_context.next = 6;
|
|
121
110
|
break;
|
|
122
111
|
}
|
|
123
|
-
|
|
124
112
|
_context.next = 4;
|
|
125
113
|
return (0, _basisModuleLoader.loadBasisEncoderModule)(options);
|
|
126
|
-
|
|
127
114
|
case 4:
|
|
128
115
|
fileConstructors = _context.sent;
|
|
129
116
|
return _context.abrupt("return", parseKTX2File(fileConstructors.KTX2File, data, options));
|
|
130
|
-
|
|
131
117
|
case 6:
|
|
132
118
|
_context.next = 8;
|
|
133
119
|
return (0, _basisModuleLoader.loadBasisTrascoderModule)(options);
|
|
134
|
-
|
|
135
120
|
case 8:
|
|
136
121
|
_yield$loadBasisTrasc = _context.sent;
|
|
137
122
|
BasisFile = _yield$loadBasisTrasc.BasisFile;
|
|
138
123
|
return _context.abrupt("return", parseBasisFile(BasisFile, data, options));
|
|
139
|
-
|
|
140
124
|
case 11:
|
|
141
125
|
_context.t0 = options.basis.module;
|
|
142
126
|
_context.next = _context.t0 === 'encoder' ? 14 : _context.t0 === 'transcoder' ? 22 : 22;
|
|
143
127
|
break;
|
|
144
|
-
|
|
145
128
|
case 14:
|
|
146
129
|
_context.next = 16;
|
|
147
130
|
return (0, _basisModuleLoader.loadBasisEncoderModule)(options);
|
|
148
|
-
|
|
149
131
|
case 16:
|
|
150
132
|
_fileConstructors = _context.sent;
|
|
151
133
|
_context.t1 = options.basis.containerFormat;
|
|
152
134
|
_context.next = _context.t1 === 'ktx2' ? 20 : _context.t1 === 'basis' ? 21 : 21;
|
|
153
135
|
break;
|
|
154
|
-
|
|
155
136
|
case 20:
|
|
156
137
|
return _context.abrupt("return", parseKTX2File(_fileConstructors.KTX2File, data, options));
|
|
157
|
-
|
|
158
138
|
case 21:
|
|
159
139
|
return _context.abrupt("return", parseBasisFile(_fileConstructors.BasisFile, data, options));
|
|
160
|
-
|
|
161
140
|
case 22:
|
|
162
141
|
_context.next = 24;
|
|
163
142
|
return (0, _basisModuleLoader.loadBasisTrascoderModule)(options);
|
|
164
|
-
|
|
165
143
|
case 24:
|
|
166
144
|
_yield$loadBasisTrasc2 = _context.sent;
|
|
167
145
|
_BasisFile = _yield$loadBasisTrasc2.BasisFile;
|
|
168
146
|
return _context.abrupt("return", parseBasisFile(_BasisFile, data, options));
|
|
169
|
-
|
|
170
147
|
case 27:
|
|
171
148
|
case "end":
|
|
172
149
|
return _context.stop();
|
|
@@ -176,29 +153,22 @@ function _parseBasis() {
|
|
|
176
153
|
}));
|
|
177
154
|
return _parseBasis.apply(this, arguments);
|
|
178
155
|
}
|
|
179
|
-
|
|
180
156
|
function parseBasisFile(BasisFile, data, options) {
|
|
181
157
|
var basisFile = new BasisFile(new Uint8Array(data));
|
|
182
|
-
|
|
183
158
|
try {
|
|
184
159
|
if (!basisFile.startTranscoding()) {
|
|
185
160
|
throw new Error('Failed to start basis transcoding');
|
|
186
161
|
}
|
|
187
|
-
|
|
188
162
|
var imageCount = basisFile.getNumImages();
|
|
189
163
|
var images = [];
|
|
190
|
-
|
|
191
164
|
for (var imageIndex = 0; imageIndex < imageCount; imageIndex++) {
|
|
192
165
|
var levelsCount = basisFile.getNumLevels(imageIndex);
|
|
193
166
|
var levels = [];
|
|
194
|
-
|
|
195
167
|
for (var levelIndex = 0; levelIndex < levelsCount; levelIndex++) {
|
|
196
168
|
levels.push(transcodeImage(basisFile, imageIndex, levelIndex, options));
|
|
197
169
|
}
|
|
198
|
-
|
|
199
170
|
images.push(levels);
|
|
200
171
|
}
|
|
201
|
-
|
|
202
172
|
return images;
|
|
203
173
|
} finally {
|
|
204
174
|
basisFile.close();
|
|
@@ -209,20 +179,18 @@ function parseBasisFile(BasisFile, data, options) {
|
|
|
209
179
|
function transcodeImage(basisFile, imageIndex, levelIndex, options) {
|
|
210
180
|
var width = basisFile.getImageWidth(imageIndex, levelIndex);
|
|
211
181
|
var height = basisFile.getImageHeight(imageIndex, levelIndex);
|
|
182
|
+
|
|
212
183
|
var hasAlpha = basisFile.getHasAlpha();
|
|
213
184
|
|
|
214
185
|
var _getBasisOptions = getBasisOptions(options, hasAlpha),
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
186
|
+
compressed = _getBasisOptions.compressed,
|
|
187
|
+
format = _getBasisOptions.format,
|
|
188
|
+
basisFormat = _getBasisOptions.basisFormat;
|
|
219
189
|
var decodedSize = basisFile.getImageTranscodedSizeInBytes(imageIndex, levelIndex, basisFormat);
|
|
220
190
|
var decodedData = new Uint8Array(decodedSize);
|
|
221
|
-
|
|
222
191
|
if (!basisFile.transcodeImage(decodedData, imageIndex, levelIndex, basisFormat, 0, 0)) {
|
|
223
192
|
throw new Error('failed to start Basis transcoding');
|
|
224
193
|
}
|
|
225
|
-
|
|
226
194
|
return {
|
|
227
195
|
width: width,
|
|
228
196
|
height: height,
|
|
@@ -235,15 +203,12 @@ function transcodeImage(basisFile, imageIndex, levelIndex, options) {
|
|
|
235
203
|
|
|
236
204
|
function parseKTX2File(KTX2File, data, options) {
|
|
237
205
|
var ktx2File = new KTX2File(new Uint8Array(data));
|
|
238
|
-
|
|
239
206
|
try {
|
|
240
207
|
if (!ktx2File.startTranscoding()) {
|
|
241
208
|
throw new Error('failed to start KTX2 transcoding');
|
|
242
209
|
}
|
|
243
|
-
|
|
244
210
|
var levelsCount = ktx2File.getLevels();
|
|
245
211
|
var levels = [];
|
|
246
|
-
|
|
247
212
|
for (var levelIndex = 0; levelIndex < levelsCount; levelIndex++) {
|
|
248
213
|
levels.push(transcodeKTX2Image(ktx2File, levelIndex, options));
|
|
249
214
|
break;
|
|
@@ -258,22 +223,19 @@ function parseKTX2File(KTX2File, data, options) {
|
|
|
258
223
|
|
|
259
224
|
function transcodeKTX2Image(ktx2File, levelIndex, options) {
|
|
260
225
|
var _ktx2File$getImageLev = ktx2File.getImageLevelInfo(levelIndex, 0, 0),
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
226
|
+
alphaFlag = _ktx2File$getImageLev.alphaFlag,
|
|
227
|
+
height = _ktx2File$getImageLev.height,
|
|
228
|
+
width = _ktx2File$getImageLev.width;
|
|
264
229
|
|
|
265
230
|
var _getBasisOptions2 = getBasisOptions(options, alphaFlag),
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
231
|
+
compressed = _getBasisOptions2.compressed,
|
|
232
|
+
format = _getBasisOptions2.format,
|
|
233
|
+
basisFormat = _getBasisOptions2.basisFormat;
|
|
270
234
|
var decodedSize = ktx2File.getImageTranscodedSizeInBytes(levelIndex, 0, 0, basisFormat);
|
|
271
235
|
var decodedData = new Uint8Array(decodedSize);
|
|
272
|
-
|
|
273
236
|
if (!ktx2File.transcodeImage(decodedData, levelIndex, 0, 0, basisFormat, 0, -1, -1)) {
|
|
274
237
|
throw new Error('Failed to transcode KTX2 image');
|
|
275
238
|
}
|
|
276
|
-
|
|
277
239
|
return {
|
|
278
240
|
width: width,
|
|
279
241
|
height: height,
|
|
@@ -286,22 +248,18 @@ function transcodeKTX2Image(ktx2File, levelIndex, options) {
|
|
|
286
248
|
|
|
287
249
|
function getBasisOptions(options, hasAlpha) {
|
|
288
250
|
var format = options && options.basis && options.basis.format;
|
|
289
|
-
|
|
290
251
|
if (format === 'auto') {
|
|
291
252
|
format = selectSupportedBasisFormat();
|
|
292
253
|
}
|
|
293
|
-
|
|
294
254
|
if ((0, _typeof2.default)(format) === 'object') {
|
|
295
255
|
format = hasAlpha ? format.alpha : format.noAlpha;
|
|
296
256
|
}
|
|
297
|
-
|
|
298
257
|
format = format.toLowerCase();
|
|
299
258
|
return OutputFormat[format];
|
|
300
259
|
}
|
|
301
260
|
|
|
302
261
|
function selectSupportedBasisFormat() {
|
|
303
262
|
var supportedFormats = (0, _textureFormats.getSupportedGPUTextureFormats)();
|
|
304
|
-
|
|
305
263
|
if (supportedFormats.has('astc')) {
|
|
306
264
|
return 'astc-4x4';
|
|
307
265
|
} else if (supportedFormats.has('dxt')) {
|
|
@@ -319,7 +277,6 @@ function selectSupportedBasisFormat() {
|
|
|
319
277
|
} else if (supportedFormats.has('etc2')) {
|
|
320
278
|
return 'etc2';
|
|
321
279
|
}
|
|
322
|
-
|
|
323
280
|
return 'rgb565';
|
|
324
281
|
}
|
|
325
282
|
//# sourceMappingURL=parse-basis.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/lib/parsers/parse-basis.ts"],"names":["OutputFormat","etc1","basisFormat","compressed","format","GL_EXTENSIONS_CONSTANTS","COMPRESSED_RGB_ETC1_WEBGL","etc2","bc1","COMPRESSED_RGB_S3TC_DXT1_EXT","bc3","COMPRESSED_RGBA_S3TC_DXT5_EXT","bc4","bc5","COMPRESSED_RGB_PVRTC_4BPPV1_IMG","COMPRESSED_RGBA_PVRTC_4BPPV1_IMG","COMPRESSED_RGBA_ASTC_4X4_KHR","rgba32","rgb565","bgr565","rgba4444","parseBasis","data","options","basis","containerFormat","fileConstructors","parseKTX2File","KTX2File","BasisFile","parseBasisFile","module","basisFile","Uint8Array","startTranscoding","Error","imageCount","getNumImages","images","imageIndex","levelsCount","getNumLevels","levels","levelIndex","push","transcodeImage","close","delete","width","getImageWidth","height","getImageHeight","hasAlpha","getHasAlpha","getBasisOptions","decodedSize","getImageTranscodedSizeInBytes","decodedData","ktx2File","getLevels","transcodeKTX2Image","getImageLevelInfo","alphaFlag","selectSupportedBasisFormat","alpha","noAlpha","toLowerCase","supportedFormats","has"],"mappings":";;;;;;;;;;;;;;;;AAEA;;AACA;;AACA;;AACA;;AA2BA,IAAMA,YAAgD,GAAG;AACvDC,EAAAA,IAAI,EAAE;AACJC,IAAAA,WAAW,EAAE,CADT;AAEJC,IAAAA,UAAU,EAAE,IAFR;AAGJC,IAAAA,MAAM,EAAEC,sCAAwBC;AAH5B,GADiD;AAMvDC,EAAAA,IAAI,EAAE;AAACL,IAAAA,WAAW,EAAE,CAAd;AAAiBC,IAAAA,UAAU,EAAE;AAA7B,GANiD;AAOvDK,EAAAA,GAAG,EAAE;AACHN,IAAAA,WAAW,EAAE,CADV;AAEHC,IAAAA,UAAU,EAAE,IAFT;AAGHC,IAAAA,MAAM,EAAEC,sCAAwBI;AAH7B,GAPkD;AAYvDC,EAAAA,GAAG,EAAE;AACHR,IAAAA,WAAW,EAAE,CADV;AAEHC,IAAAA,UAAU,EAAE,IAFT;AAGHC,IAAAA,MAAM,EAAEC,sCAAwBM;AAH7B,GAZkD;AAiBvDC,EAAAA,GAAG,EAAE;AAACV,IAAAA,WAAW,EAAE,CAAd;AAAiBC,IAAAA,UAAU,EAAE;AAA7B,GAjBkD;AAkBvDU,EAAAA,GAAG,EAAE;AAACX,IAAAA,WAAW,EAAE,CAAd;AAAiBC,IAAAA,UAAU,EAAE;AAA7B,GAlBkD;AAmBvD,wBAAsB;AAACD,IAAAA,WAAW,EAAE,CAAd;AAAiBC,IAAAA,UAAU,EAAE;AAA7B,GAnBiC;AAoBvD,YAAU;AAACD,IAAAA,WAAW,EAAE,CAAd;AAAiBC,IAAAA,UAAU,EAAE;AAA7B,GApB6C;AAqBvD,kBAAgB;AACdD,IAAAA,WAAW,EAAE,CADC;AAEdC,IAAAA,UAAU,EAAE,IAFE;AAGdC,IAAAA,MAAM,EAAEC,sCAAwBS;AAHlB,GArBuC;AA0BvD,mBAAiB;AACfZ,IAAAA,WAAW,EAAE,CADE;AAEfC,IAAAA,UAAU,EAAE,IAFG;AAGfC,IAAAA,MAAM,EAAEC,sCAAwBU;AAHjB,GA1BsC;AA+BvD,cAAY;AACVb,IAAAA,WAAW,EAAE,EADH;AAEVC,IAAAA,UAAU,EAAE,IAFF;AAGVC,IAAAA,MAAM,EAAEC,sCAAwBW;AAHtB,GA/B2C;AAoCvD,aAAW;AAACd,IAAAA,WAAW,EAAE,EAAd;AAAkBC,IAAAA,UAAU,EAAE;AAA9B,GApC4C;AAqCvD,iCAA+B;AAACD,IAAAA,WAAW,EAAE,EAAd;AAAkBC,IAAAA,UAAU,EAAE;AAA9B,GArCwB;AAsCvDc,EAAAA,MAAM,EAAE;AAACf,IAAAA,WAAW,EAAE,EAAd;AAAkBC,IAAAA,UAAU,EAAE;AAA9B,GAtC+C;AAuCvDe,EAAAA,MAAM,EAAE;AAAChB,IAAAA,WAAW,EAAE,EAAd;AAAkBC,IAAAA,UAAU,EAAE;AAA9B,GAvC+C;AAwCvDgB,EAAAA,MAAM,EAAE;AAACjB,IAAAA,WAAW,EAAE,EAAd;AAAkBC,IAAAA,UAAU,EAAE;AAA9B,GAxC+C;AAyCvDiB,EAAAA,QAAQ,EAAE;AAAClB,IAAAA,WAAW,EAAE,EAAd;AAAkBC,IAAAA,UAAU,EAAE;AAA9B;AAzC6C,CAAzD;;SAkD8BkB,U;;;;;0EAAf,iBAA0BC,IAA1B,EAA6CC,OAA7C;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA,kBACTA,OAAO,CAACC,KAAR,CAAcC,eAAd,KAAkC,MADzB;AAAA;AAAA;AAAA;;AAAA,iBAEP,qBAAMH,IAAN,CAFO;AAAA;AAAA;AAAA;;AAAA;AAAA,mBAGsB,+CAAuBC,OAAvB,CAHtB;;AAAA;AAGHG,YAAAA,gBAHG;AAAA,6CAIFC,aAAa,CAACD,gBAAgB,CAACE,QAAlB,EAA4BN,IAA5B,EAAkCC,OAAlC,CAJX;;AAAA;AAAA;AAAA,mBAMe,iDAAyBA,OAAzB,CANf;;AAAA;AAAA;AAMJM,YAAAA,SANI,yBAMJA,SANI;AAAA,6CAOJC,cAAc,CAACD,SAAD,EAAYP,IAAZ,EAAkBC,OAAlB,CAPV;;AAAA;AAAA,0BASLA,OAAO,CAACC,KAAR,CAAcO,MATT;AAAA,4CAUN,SAVM,wBAmBN,YAnBM;AAAA;;AAAA;AAAA;AAAA,mBAWsB,+CAAuBR,OAAvB,CAXtB;;AAAA;AAWHG,YAAAA,iBAXG;AAAA,0BAYDH,OAAO,CAACC,KAAR,CAAcC,eAZb;AAAA,4CAaF,MAbE,wBAeF,OAfE;AAAA;;AAAA;AAAA,6CAcEE,aAAa,CAACD,iBAAgB,CAACE,QAAlB,EAA4BN,IAA5B,EAAkCC,OAAlC,CAdf;;AAAA;AAAA,6CAiBEO,cAAc,CAACJ,iBAAgB,CAACG,SAAlB,EAA6BP,IAA7B,EAAmCC,OAAnC,CAjBhB;;AAAA;AAAA;AAAA,mBAqBiB,iDAAyBA,OAAzB,CArBjB;;AAAA;AAAA;AAqBFM,YAAAA,UArBE,0BAqBFA,SArBE;AAAA,6CAsBFC,cAAc,CAACD,UAAD,EAAYP,IAAZ,EAAkBC,OAAlB,CAtBZ;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,G;;;;AAiCf,SAASO,cAAT,CAAwBD,SAAxB,EAAmCP,IAAnC,EAAyCC,OAAzC,EAAoE;AAClE,MAAMS,SAAS,GAAG,IAAIH,SAAJ,CAAc,IAAII,UAAJ,CAAeX,IAAf,CAAd,CAAlB;;AAEA,MAAI;AACF,QAAI,CAACU,SAAS,CAACE,gBAAV,EAAL,EAAmC;AACjC,YAAM,IAAIC,KAAJ,CAAU,mCAAV,CAAN;AACD;;AAED,QAAMC,UAAU,GAAGJ,SAAS,CAACK,YAAV,EAAnB;AACA,QAAMC,MAAwB,GAAG,EAAjC;;AAEA,SAAK,IAAIC,UAAU,GAAG,CAAtB,EAAyBA,UAAU,GAAGH,UAAtC,EAAkDG,UAAU,EAA5D,EAAgE;AAC9D,UAAMC,WAAW,GAAGR,SAAS,CAACS,YAAV,CAAuBF,UAAvB,CAApB;AACA,UAAMG,MAAsB,GAAG,EAA/B;;AAEA,WAAK,IAAIC,UAAU,GAAG,CAAtB,EAAyBA,UAAU,GAAGH,WAAtC,EAAmDG,UAAU,EAA7D,EAAiE;AAC/DD,QAAAA,MAAM,CAACE,IAAP,CAAYC,cAAc,CAACb,SAAD,EAAYO,UAAZ,EAAwBI,UAAxB,EAAoCpB,OAApC,CAA1B;AACD;;AAEDe,MAAAA,MAAM,CAACM,IAAP,CAAYF,MAAZ;AACD;;AAED,WAAOJ,MAAP;AACD,GApBD,SAoBU;AACRN,IAAAA,SAAS,CAACc,KAAV;AACAd,IAAAA,SAAS,CAACe,MAAV;AACD;AACF;;AAUD,SAASF,cAAT,CAAwBb,SAAxB,EAAmCO,UAAnC,EAA+CI,UAA/C,EAA2DpB,OAA3D,EAAkF;AAChF,MAAMyB,KAAK,GAAGhB,SAAS,CAACiB,aAAV,CAAwBV,UAAxB,EAAoCI,UAApC,CAAd;AACA,MAAMO,MAAM,GAAGlB,SAAS,CAACmB,cAAV,CAAyBZ,UAAzB,EAAqCI,UAArC,CAAf;AAGA,MAAMS,QAAQ,GAAGpB,SAAS,CAACqB,WAAV,EAAjB;;AAGA,yBAA0CC,eAAe,CAAC/B,OAAD,EAAU6B,QAAV,CAAzD;AAAA,MAAOjD,UAAP,oBAAOA,UAAP;AAAA,MAAmBC,MAAnB,oBAAmBA,MAAnB;AAAA,MAA2BF,WAA3B,oBAA2BA,WAA3B;;AAEA,MAAMqD,WAAW,GAAGvB,SAAS,CAACwB,6BAAV,CAAwCjB,UAAxC,EAAoDI,UAApD,EAAgEzC,WAAhE,CAApB;AACA,MAAMuD,WAAW,GAAG,IAAIxB,UAAJ,CAAesB,WAAf,CAApB;;AAEA,MAAI,CAACvB,SAAS,CAACa,cAAV,CAAyBY,WAAzB,EAAsClB,UAAtC,EAAkDI,UAAlD,EAA8DzC,WAA9D,EAA2E,CAA3E,EAA8E,CAA9E,CAAL,EAAuF;AACrF,UAAM,IAAIiC,KAAJ,CAAU,mCAAV,CAAN;AACD;;AAED,SAAO;AAELa,IAAAA,KAAK,EAALA,KAFK;AAGLE,IAAAA,MAAM,EAANA,MAHK;AAIL5B,IAAAA,IAAI,EAAEmC,WAJD;AAKLtD,IAAAA,UAAU,EAAVA,UALK;AAMLC,IAAAA,MAAM,EAANA,MANK;AAULgD,IAAAA,QAAQ,EAARA;AAVK,GAAP;AAYD;;AASD,SAASzB,aAAT,CAAuBC,QAAvB,EAAiCN,IAAjC,EAAoDC,OAApD,EAA+E;AAC7E,MAAMmC,QAAQ,GAAG,IAAI9B,QAAJ,CAAa,IAAIK,UAAJ,CAAeX,IAAf,CAAb,CAAjB;;AAEA,MAAI;AACF,QAAI,CAACoC,QAAQ,CAACxB,gBAAT,EAAL,EAAkC;AAChC,YAAM,IAAIC,KAAJ,CAAU,kCAAV,CAAN;AACD;;AACD,QAAMK,WAAW,GAAGkB,QAAQ,CAACC,SAAT,EAApB;AACA,QAAMjB,MAAsB,GAAG,EAA/B;;AAEA,SAAK,IAAIC,UAAU,GAAG,CAAtB,EAAyBA,UAAU,GAAGH,WAAtC,EAAmDG,UAAU,EAA7D,EAAiE;AAC/DD,MAAAA,MAAM,CAACE,IAAP,CAAYgB,kBAAkB,CAACF,QAAD,EAAWf,UAAX,EAAuBpB,OAAvB,CAA9B;AACA;AACD;;AAED,WAAO,CAACmB,MAAD,CAAP;AACD,GAbD,SAaU;AACRgB,IAAAA,QAAQ,CAACZ,KAAT;AACAY,IAAAA,QAAQ,CAACX,MAAT;AACD;AACF;;AASD,SAASa,kBAAT,CAA4BF,QAA5B,EAAsCf,UAAtC,EAA0DpB,OAA1D,EAAiF;AAC/E,8BAAmCmC,QAAQ,CAACG,iBAAT,CAA2BlB,UAA3B,EAAuC,CAAvC,EAA0C,CAA1C,CAAnC;AAAA,MAAOmB,SAAP,yBAAOA,SAAP;AAAA,MAAkBZ,MAAlB,yBAAkBA,MAAlB;AAAA,MAA0BF,KAA1B,yBAA0BA,KAA1B;;AAGA,0BAA0CM,eAAe,CAAC/B,OAAD,EAAUuC,SAAV,CAAzD;AAAA,MAAO3D,UAAP,qBAAOA,UAAP;AAAA,MAAmBC,MAAnB,qBAAmBA,MAAnB;AAAA,MAA2BF,WAA3B,qBAA2BA,WAA3B;;AAEA,MAAMqD,WAAW,GAAGG,QAAQ,CAACF,6BAAT,CAClBb,UADkB,EAElB,CAFkB,EAGlB,CAHkB,EAIlBzC,WAJkB,CAApB;AAMA,MAAMuD,WAAW,GAAG,IAAIxB,UAAJ,CAAesB,WAAf,CAApB;;AAEA,MACE,CAACG,QAAQ,CAACb,cAAT,CACCY,WADD,EAECd,UAFD,EAGC,CAHD,EAIC,CAJD,EAKCzC,WALD,EAMC,CAND,EAOC,CAAC,CAPF,EAQC,CAAC,CARF,CADH,EAWE;AACA,UAAM,IAAIiC,KAAJ,CAAU,gCAAV,CAAN;AACD;;AAED,SAAO;AAELa,IAAAA,KAAK,EAALA,KAFK;AAGLE,IAAAA,MAAM,EAANA,MAHK;AAIL5B,IAAAA,IAAI,EAAEmC,WAJD;AAKLtD,IAAAA,UAAU,EAAVA,UALK;AASLiD,IAAAA,QAAQ,EAAEU,SATL;AAUL1D,IAAAA,MAAM,EAANA;AAVK,GAAP;AAYD;;AAQD,SAASkD,eAAT,CAAyB/B,OAAzB,EAAkC6B,QAAlC,EAAyE;AACvE,MAAIhD,MAAM,GAAGmB,OAAO,IAAIA,OAAO,CAACC,KAAnB,IAA4BD,OAAO,CAACC,KAAR,CAAcpB,MAAvD;;AACA,MAAIA,MAAM,KAAK,MAAf,EAAuB;AACrBA,IAAAA,MAAM,GAAG2D,0BAA0B,EAAnC;AACD;;AACD,MAAI,sBAAO3D,MAAP,MAAkB,QAAtB,EAAgC;AAC9BA,IAAAA,MAAM,GAAGgD,QAAQ,GAAGhD,MAAM,CAAC4D,KAAV,GAAkB5D,MAAM,CAAC6D,OAA1C;AACD;;AACD7D,EAAAA,MAAM,GAAGA,MAAM,CAAC8D,WAAP,EAAT;AACA,SAAOlE,YAAY,CAACI,MAAD,CAAnB;AACD;;AAMM,SAAS2D,0BAAT,GAKD;AACJ,MAAMI,gBAAgB,GAAG,oDAAzB;;AACA,MAAIA,gBAAgB,CAACC,GAAjB,CAAqB,MAArB,CAAJ,EAAkC;AAChC,WAAO,UAAP;AACD,GAFD,MAEO,IAAID,gBAAgB,CAACC,GAAjB,CAAqB,KAArB,CAAJ,EAAiC;AACtC,WAAO;AACLJ,MAAAA,KAAK,EAAE,KADF;AAELC,MAAAA,OAAO,EAAE;AAFJ,KAAP;AAID,GALM,MAKA,IAAIE,gBAAgB,CAACC,GAAjB,CAAqB,OAArB,CAAJ,EAAmC;AACxC,WAAO;AACLJ,MAAAA,KAAK,EAAE,eADF;AAELC,MAAAA,OAAO,EAAE;AAFJ,KAAP;AAID,GALM,MAKA,IAAIE,gBAAgB,CAACC,GAAjB,CAAqB,MAArB,CAAJ,EAAkC;AACvC,WAAO,MAAP;AACD,GAFM,MAEA,IAAID,gBAAgB,CAACC,GAAjB,CAAqB,MAArB,CAAJ,EAAkC;AACvC,WAAO,MAAP;AACD;;AACD,SAAO,QAAP;AACD","sourcesContent":["/* eslint-disable indent */\nimport type {TextureLevel} from '@loaders.gl/schema';\nimport {loadBasisEncoderModule, loadBasisTrascoderModule} from './basis-module-loader';\nimport {GL_EXTENSIONS_CONSTANTS} from '../gl-extensions';\nimport {getSupportedGPUTextureFormats} from '../utils/texture-formats';\nimport {isKTX} from './parse-ktx';\n\nexport type BasisFormat =\n | 'etc1'\n | 'etc2'\n | 'bc1'\n | 'bc3'\n | 'bc4'\n | 'bc5'\n | 'bc7-m6-opaque-only'\n | 'bc7-m5'\n | 'pvrtc1-4-rgb'\n | 'pvrtc1-4-rgba'\n | 'astc-4x4'\n | 'atc-rgb'\n | 'atc-rgba-interpolated-alpha'\n | 'rgba32'\n | 'rgb565'\n | 'bgr565'\n | 'rgba4444';\n\ntype BasisOutputOptions = {\n basisFormat: number;\n compressed: boolean;\n format?: number;\n};\n\nconst OutputFormat: Record<string, BasisOutputOptions> = {\n etc1: {\n basisFormat: 0,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_ETC1_WEBGL\n },\n etc2: {basisFormat: 1, compressed: true},\n bc1: {\n basisFormat: 2,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_S3TC_DXT1_EXT\n },\n bc3: {\n basisFormat: 3,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT5_EXT\n },\n bc4: {basisFormat: 4, compressed: true},\n bc5: {basisFormat: 5, compressed: true},\n 'bc7-m6-opaque-only': {basisFormat: 6, compressed: true},\n 'bc7-m5': {basisFormat: 7, compressed: true},\n 'pvrtc1-4-rgb': {\n basisFormat: 8,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_PVRTC_4BPPV1_IMG\n },\n 'pvrtc1-4-rgba': {\n basisFormat: 9,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG\n },\n 'astc-4x4': {\n basisFormat: 10,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_4X4_KHR\n },\n 'atc-rgb': {basisFormat: 11, compressed: true},\n 'atc-rgba-interpolated-alpha': {basisFormat: 12, compressed: true},\n rgba32: {basisFormat: 13, compressed: false},\n rgb565: {basisFormat: 14, compressed: false},\n bgr565: {basisFormat: 15, compressed: false},\n rgba4444: {basisFormat: 16, compressed: false}\n};\n\n/**\n * parse data with a Binomial Basis_Universal module\n * @param data\n * @param options\n * @returns compressed texture data\n */\nexport default async function parseBasis(data: ArrayBuffer, options): Promise<TextureLevel[][]> {\n if (options.basis.containerFormat === 'auto') {\n if (isKTX(data)) {\n const fileConstructors = await loadBasisEncoderModule(options);\n return parseKTX2File(fileConstructors.KTX2File, data, options);\n }\n const {BasisFile} = await loadBasisTrascoderModule(options);\n return parseBasisFile(BasisFile, data, options);\n }\n switch (options.basis.module) {\n case 'encoder':\n const fileConstructors = await loadBasisEncoderModule(options);\n switch (options.basis.containerFormat) {\n case 'ktx2':\n return parseKTX2File(fileConstructors.KTX2File, data, options);\n case 'basis':\n default:\n return parseBasisFile(fileConstructors.BasisFile, data, options);\n }\n case 'transcoder':\n default:\n const {BasisFile} = await loadBasisTrascoderModule(options);\n return parseBasisFile(BasisFile, data, options);\n }\n}\n\n/**\n * Parse *.basis file data\n * @param BasisFile - initialized transcoder module\n * @param data\n * @param options\n * @returns compressed texture data\n */\nfunction parseBasisFile(BasisFile, data, options): TextureLevel[][] {\n const basisFile = new BasisFile(new Uint8Array(data));\n\n try {\n if (!basisFile.startTranscoding()) {\n throw new Error('Failed to start basis transcoding');\n }\n\n const imageCount = basisFile.getNumImages();\n const images: TextureLevel[][] = [];\n\n for (let imageIndex = 0; imageIndex < imageCount; imageIndex++) {\n const levelsCount = basisFile.getNumLevels(imageIndex);\n const levels: TextureLevel[] = [];\n\n for (let levelIndex = 0; levelIndex < levelsCount; levelIndex++) {\n levels.push(transcodeImage(basisFile, imageIndex, levelIndex, options));\n }\n\n images.push(levels);\n }\n\n return images;\n } finally {\n basisFile.close();\n basisFile.delete();\n }\n}\n\n/**\n * Parse the particular level image of a basis file\n * @param basisFile\n * @param imageIndex\n * @param levelIndex\n * @param options\n * @returns compressed texture data\n */\nfunction transcodeImage(basisFile, imageIndex, levelIndex, options): TextureLevel {\n const width = basisFile.getImageWidth(imageIndex, levelIndex);\n const height = basisFile.getImageHeight(imageIndex, levelIndex);\n\n // See https://github.com/BinomialLLC/basis_universal/pull/83\n const hasAlpha = basisFile.getHasAlpha(/* imageIndex, levelIndex */);\n\n // Check options for output format etc\n const {compressed, format, basisFormat} = getBasisOptions(options, hasAlpha);\n\n const decodedSize = basisFile.getImageTranscodedSizeInBytes(imageIndex, levelIndex, basisFormat);\n const decodedData = new Uint8Array(decodedSize);\n\n if (!basisFile.transcodeImage(decodedData, imageIndex, levelIndex, basisFormat, 0, 0)) {\n throw new Error('failed to start Basis transcoding');\n }\n\n return {\n // standard loaders.gl image category payload\n width,\n height,\n data: decodedData,\n compressed,\n format,\n\n // Additional fields\n // Add levelSize field.\n hasAlpha\n };\n}\n\n/**\n * Parse *.ktx2 file data\n * @param KTX2File\n * @param data\n * @param options\n * @returns compressed texture data\n */\nfunction parseKTX2File(KTX2File, data: ArrayBuffer, options): TextureLevel[][] {\n const ktx2File = new KTX2File(new Uint8Array(data));\n\n try {\n if (!ktx2File.startTranscoding()) {\n throw new Error('failed to start KTX2 transcoding');\n }\n const levelsCount = ktx2File.getLevels();\n const levels: TextureLevel[] = [];\n\n for (let levelIndex = 0; levelIndex < levelsCount; levelIndex++) {\n levels.push(transcodeKTX2Image(ktx2File, levelIndex, options));\n break; // texture app can only show one level for some reason\n }\n\n return [levels];\n } finally {\n ktx2File.close();\n ktx2File.delete();\n }\n}\n\n/**\n * Parse the particular level image of a ktx2 file\n * @param ktx2File\n * @param levelIndex\n * @param options\n * @returns\n */\nfunction transcodeKTX2Image(ktx2File, levelIndex: number, options): TextureLevel {\n const {alphaFlag, height, width} = ktx2File.getImageLevelInfo(levelIndex, 0, 0);\n\n // Check options for output format etc\n const {compressed, format, basisFormat} = getBasisOptions(options, alphaFlag);\n\n const decodedSize = ktx2File.getImageTranscodedSizeInBytes(\n levelIndex,\n 0 /* layerIndex */,\n 0 /* faceIndex */,\n basisFormat\n );\n const decodedData = new Uint8Array(decodedSize);\n\n if (\n !ktx2File.transcodeImage(\n decodedData,\n levelIndex,\n 0 /* layerIndex */,\n 0 /* faceIndex */,\n basisFormat,\n 0,\n -1 /* channel0 */,\n -1 /* channel1 */\n )\n ) {\n throw new Error('Failed to transcode KTX2 image');\n }\n\n return {\n // standard loaders.gl image category payload\n width,\n height,\n data: decodedData,\n compressed,\n\n // Additional fields\n // Add levelSize field.\n hasAlpha: alphaFlag,\n format\n };\n}\n\n/**\n * Get BasisFormat by loader format option\n * @param options\n * @param hasAlpha\n * @returns BasisFormat data\n */\nfunction getBasisOptions(options, hasAlpha: boolean): BasisOutputOptions {\n let format = options && options.basis && options.basis.format;\n if (format === 'auto') {\n format = selectSupportedBasisFormat();\n }\n if (typeof format === 'object') {\n format = hasAlpha ? format.alpha : format.noAlpha;\n }\n format = format.toLowerCase();\n return OutputFormat[format];\n}\n\n/**\n * Select transcode format from the list of supported formats\n * @returns key for OutputFormat map\n */\nexport function selectSupportedBasisFormat():\n | BasisFormat\n | {\n alpha: BasisFormat;\n noAlpha: BasisFormat;\n } {\n const supportedFormats = getSupportedGPUTextureFormats();\n if (supportedFormats.has('astc')) {\n return 'astc-4x4';\n } else if (supportedFormats.has('dxt')) {\n return {\n alpha: 'bc3',\n noAlpha: 'bc1'\n };\n } else if (supportedFormats.has('pvrtc')) {\n return {\n alpha: 'pvrtc1-4-rgba',\n noAlpha: 'pvrtc1-4-rgb'\n };\n } else if (supportedFormats.has('etc1')) {\n return 'etc1';\n } else if (supportedFormats.has('etc2')) {\n return 'etc2';\n }\n return 'rgb565';\n}\n"],"file":"parse-basis.js"}
|
|
1
|
+
{"version":3,"file":"parse-basis.js","names":["OutputFormat","etc1","basisFormat","compressed","format","GL_EXTENSIONS_CONSTANTS","COMPRESSED_RGB_ETC1_WEBGL","etc2","bc1","COMPRESSED_RGB_S3TC_DXT1_EXT","bc3","COMPRESSED_RGBA_S3TC_DXT5_EXT","bc4","bc5","COMPRESSED_RGB_PVRTC_4BPPV1_IMG","COMPRESSED_RGBA_PVRTC_4BPPV1_IMG","COMPRESSED_RGBA_ASTC_4X4_KHR","rgba32","rgb565","bgr565","rgba4444","parseBasis","data","options","basis","containerFormat","isKTX","loadBasisEncoderModule","fileConstructors","parseKTX2File","KTX2File","loadBasisTrascoderModule","BasisFile","parseBasisFile","module","basisFile","Uint8Array","startTranscoding","Error","imageCount","getNumImages","images","imageIndex","levelsCount","getNumLevels","levels","levelIndex","push","transcodeImage","close","delete","width","getImageWidth","height","getImageHeight","hasAlpha","getHasAlpha","getBasisOptions","decodedSize","getImageTranscodedSizeInBytes","decodedData","ktx2File","getLevels","transcodeKTX2Image","getImageLevelInfo","alphaFlag","selectSupportedBasisFormat","alpha","noAlpha","toLowerCase","supportedFormats","getSupportedGPUTextureFormats","has"],"sources":["../../../../src/lib/parsers/parse-basis.ts"],"sourcesContent":["/* eslint-disable indent */\nimport type {TextureLevel} from '@loaders.gl/schema';\nimport {loadBasisEncoderModule, loadBasisTrascoderModule} from './basis-module-loader';\nimport {GL_EXTENSIONS_CONSTANTS} from '../gl-extensions';\nimport {getSupportedGPUTextureFormats} from '../utils/texture-formats';\nimport {isKTX} from './parse-ktx';\n\nexport type BasisFormat =\n | 'etc1'\n | 'etc2'\n | 'bc1'\n | 'bc3'\n | 'bc4'\n | 'bc5'\n | 'bc7-m6-opaque-only'\n | 'bc7-m5'\n | 'pvrtc1-4-rgb'\n | 'pvrtc1-4-rgba'\n | 'astc-4x4'\n | 'atc-rgb'\n | 'atc-rgba-interpolated-alpha'\n | 'rgba32'\n | 'rgb565'\n | 'bgr565'\n | 'rgba4444';\n\ntype BasisOutputOptions = {\n basisFormat: number;\n compressed: boolean;\n format?: number;\n};\n\nconst OutputFormat: Record<string, BasisOutputOptions> = {\n etc1: {\n basisFormat: 0,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_ETC1_WEBGL\n },\n etc2: {basisFormat: 1, compressed: true},\n bc1: {\n basisFormat: 2,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_S3TC_DXT1_EXT\n },\n bc3: {\n basisFormat: 3,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT5_EXT\n },\n bc4: {basisFormat: 4, compressed: true},\n bc5: {basisFormat: 5, compressed: true},\n 'bc7-m6-opaque-only': {basisFormat: 6, compressed: true},\n 'bc7-m5': {basisFormat: 7, compressed: true},\n 'pvrtc1-4-rgb': {\n basisFormat: 8,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_PVRTC_4BPPV1_IMG\n },\n 'pvrtc1-4-rgba': {\n basisFormat: 9,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG\n },\n 'astc-4x4': {\n basisFormat: 10,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_4X4_KHR\n },\n 'atc-rgb': {basisFormat: 11, compressed: true},\n 'atc-rgba-interpolated-alpha': {basisFormat: 12, compressed: true},\n rgba32: {basisFormat: 13, compressed: false},\n rgb565: {basisFormat: 14, compressed: false},\n bgr565: {basisFormat: 15, compressed: false},\n rgba4444: {basisFormat: 16, compressed: false}\n};\n\n/**\n * parse data with a Binomial Basis_Universal module\n * @param data\n * @param options\n * @returns compressed texture data\n */\nexport default async function parseBasis(data: ArrayBuffer, options): Promise<TextureLevel[][]> {\n if (options.basis.containerFormat === 'auto') {\n if (isKTX(data)) {\n const fileConstructors = await loadBasisEncoderModule(options);\n return parseKTX2File(fileConstructors.KTX2File, data, options);\n }\n const {BasisFile} = await loadBasisTrascoderModule(options);\n return parseBasisFile(BasisFile, data, options);\n }\n switch (options.basis.module) {\n case 'encoder':\n const fileConstructors = await loadBasisEncoderModule(options);\n switch (options.basis.containerFormat) {\n case 'ktx2':\n return parseKTX2File(fileConstructors.KTX2File, data, options);\n case 'basis':\n default:\n return parseBasisFile(fileConstructors.BasisFile, data, options);\n }\n case 'transcoder':\n default:\n const {BasisFile} = await loadBasisTrascoderModule(options);\n return parseBasisFile(BasisFile, data, options);\n }\n}\n\n/**\n * Parse *.basis file data\n * @param BasisFile - initialized transcoder module\n * @param data\n * @param options\n * @returns compressed texture data\n */\nfunction parseBasisFile(BasisFile, data, options): TextureLevel[][] {\n const basisFile = new BasisFile(new Uint8Array(data));\n\n try {\n if (!basisFile.startTranscoding()) {\n throw new Error('Failed to start basis transcoding');\n }\n\n const imageCount = basisFile.getNumImages();\n const images: TextureLevel[][] = [];\n\n for (let imageIndex = 0; imageIndex < imageCount; imageIndex++) {\n const levelsCount = basisFile.getNumLevels(imageIndex);\n const levels: TextureLevel[] = [];\n\n for (let levelIndex = 0; levelIndex < levelsCount; levelIndex++) {\n levels.push(transcodeImage(basisFile, imageIndex, levelIndex, options));\n }\n\n images.push(levels);\n }\n\n return images;\n } finally {\n basisFile.close();\n basisFile.delete();\n }\n}\n\n/**\n * Parse the particular level image of a basis file\n * @param basisFile\n * @param imageIndex\n * @param levelIndex\n * @param options\n * @returns compressed texture data\n */\nfunction transcodeImage(basisFile, imageIndex, levelIndex, options): TextureLevel {\n const width = basisFile.getImageWidth(imageIndex, levelIndex);\n const height = basisFile.getImageHeight(imageIndex, levelIndex);\n\n // See https://github.com/BinomialLLC/basis_universal/pull/83\n const hasAlpha = basisFile.getHasAlpha(/* imageIndex, levelIndex */);\n\n // Check options for output format etc\n const {compressed, format, basisFormat} = getBasisOptions(options, hasAlpha);\n\n const decodedSize = basisFile.getImageTranscodedSizeInBytes(imageIndex, levelIndex, basisFormat);\n const decodedData = new Uint8Array(decodedSize);\n\n if (!basisFile.transcodeImage(decodedData, imageIndex, levelIndex, basisFormat, 0, 0)) {\n throw new Error('failed to start Basis transcoding');\n }\n\n return {\n // standard loaders.gl image category payload\n width,\n height,\n data: decodedData,\n compressed,\n format,\n\n // Additional fields\n // Add levelSize field.\n hasAlpha\n };\n}\n\n/**\n * Parse *.ktx2 file data\n * @param KTX2File\n * @param data\n * @param options\n * @returns compressed texture data\n */\nfunction parseKTX2File(KTX2File, data: ArrayBuffer, options): TextureLevel[][] {\n const ktx2File = new KTX2File(new Uint8Array(data));\n\n try {\n if (!ktx2File.startTranscoding()) {\n throw new Error('failed to start KTX2 transcoding');\n }\n const levelsCount = ktx2File.getLevels();\n const levels: TextureLevel[] = [];\n\n for (let levelIndex = 0; levelIndex < levelsCount; levelIndex++) {\n levels.push(transcodeKTX2Image(ktx2File, levelIndex, options));\n break; // texture app can only show one level for some reason\n }\n\n return [levels];\n } finally {\n ktx2File.close();\n ktx2File.delete();\n }\n}\n\n/**\n * Parse the particular level image of a ktx2 file\n * @param ktx2File\n * @param levelIndex\n * @param options\n * @returns\n */\nfunction transcodeKTX2Image(ktx2File, levelIndex: number, options): TextureLevel {\n const {alphaFlag, height, width} = ktx2File.getImageLevelInfo(levelIndex, 0, 0);\n\n // Check options for output format etc\n const {compressed, format, basisFormat} = getBasisOptions(options, alphaFlag);\n\n const decodedSize = ktx2File.getImageTranscodedSizeInBytes(\n levelIndex,\n 0 /* layerIndex */,\n 0 /* faceIndex */,\n basisFormat\n );\n const decodedData = new Uint8Array(decodedSize);\n\n if (\n !ktx2File.transcodeImage(\n decodedData,\n levelIndex,\n 0 /* layerIndex */,\n 0 /* faceIndex */,\n basisFormat,\n 0,\n -1 /* channel0 */,\n -1 /* channel1 */\n )\n ) {\n throw new Error('Failed to transcode KTX2 image');\n }\n\n return {\n // standard loaders.gl image category payload\n width,\n height,\n data: decodedData,\n compressed,\n\n // Additional fields\n // Add levelSize field.\n hasAlpha: alphaFlag,\n format\n };\n}\n\n/**\n * Get BasisFormat by loader format option\n * @param options\n * @param hasAlpha\n * @returns BasisFormat data\n */\nfunction getBasisOptions(options, hasAlpha: boolean): BasisOutputOptions {\n let format = options && options.basis && options.basis.format;\n if (format === 'auto') {\n format = selectSupportedBasisFormat();\n }\n if (typeof format === 'object') {\n format = hasAlpha ? format.alpha : format.noAlpha;\n }\n format = format.toLowerCase();\n return OutputFormat[format];\n}\n\n/**\n * Select transcode format from the list of supported formats\n * @returns key for OutputFormat map\n */\nexport function selectSupportedBasisFormat():\n | BasisFormat\n | {\n alpha: BasisFormat;\n noAlpha: BasisFormat;\n } {\n const supportedFormats = getSupportedGPUTextureFormats();\n if (supportedFormats.has('astc')) {\n return 'astc-4x4';\n } else if (supportedFormats.has('dxt')) {\n return {\n alpha: 'bc3',\n noAlpha: 'bc1'\n };\n } else if (supportedFormats.has('pvrtc')) {\n return {\n alpha: 'pvrtc1-4-rgba',\n noAlpha: 'pvrtc1-4-rgb'\n };\n } else if (supportedFormats.has('etc1')) {\n return 'etc1';\n } else if (supportedFormats.has('etc2')) {\n return 'etc2';\n }\n return 'rgb565';\n}\n"],"mappings":"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"}
|
|
@@ -4,26 +4,19 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.parseCompressedTexture = parseCompressedTexture;
|
|
7
|
-
|
|
8
7
|
var _parseKtx = require("./parse-ktx");
|
|
9
|
-
|
|
10
8
|
var _parseDds = require("./parse-dds");
|
|
11
|
-
|
|
12
9
|
var _parsePvr = require("./parse-pvr");
|
|
13
|
-
|
|
14
10
|
function parseCompressedTexture(data) {
|
|
15
11
|
if ((0, _parseKtx.isKTX)(data)) {
|
|
16
12
|
return (0, _parseKtx.parseKTX)(data);
|
|
17
13
|
}
|
|
18
|
-
|
|
19
14
|
if ((0, _parseDds.isDDS)(data)) {
|
|
20
15
|
return (0, _parseDds.parseDDS)(data);
|
|
21
16
|
}
|
|
22
|
-
|
|
23
17
|
if ((0, _parsePvr.isPVR)(data)) {
|
|
24
18
|
return (0, _parsePvr.parsePVR)(data);
|
|
25
19
|
}
|
|
26
|
-
|
|
27
20
|
throw new Error('Texture container format not recognized');
|
|
28
21
|
}
|
|
29
22
|
//# sourceMappingURL=parse-compressed-texture.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"parse-compressed-texture.js","names":["parseCompressedTexture","data","isKTX","parseKTX","isDDS","parseDDS","isPVR","parsePVR","Error"],"sources":["../../../../src/lib/parsers/parse-compressed-texture.ts"],"sourcesContent":["import type {TextureLevel} from '@loaders.gl/schema';\nimport {isKTX, parseKTX} from './parse-ktx';\nimport {isDDS, parseDDS} from './parse-dds';\nimport {isPVR, parsePVR} from './parse-pvr';\n\n/**\n * Deduces format and parses compressed texture loaded in ArrayBuffer\n * @param data - binary data of compressed texture\n * @returns Array of the texture levels\n */\nexport function parseCompressedTexture(data: ArrayBuffer): TextureLevel[] {\n if (isKTX(data)) {\n // TODO: remove @ts-ignore when `parseKTX` output is normalized to loaders.gl texture format\n // @ts-ignore\n return parseKTX(data);\n }\n if (isDDS(data)) {\n return parseDDS(data);\n }\n if (isPVR(data)) {\n return parsePVR(data);\n }\n throw new Error('Texture container format not recognized');\n}\n"],"mappings":";;;;;;AACA;AACA;AACA;AAOO,SAASA,sBAAsB,CAACC,IAAiB,EAAkB;EACxE,IAAI,IAAAC,eAAK,EAACD,IAAI,CAAC,EAAE;IAGf,OAAO,IAAAE,kBAAQ,EAACF,IAAI,CAAC;EACvB;EACA,IAAI,IAAAG,eAAK,EAACH,IAAI,CAAC,EAAE;IACf,OAAO,IAAAI,kBAAQ,EAACJ,IAAI,CAAC;EACvB;EACA,IAAI,IAAAK,eAAK,EAACL,IAAI,CAAC,EAAE;IACf,OAAO,IAAAM,kBAAQ,EAACN,IAAI,CAAC;EACvB;EACA,MAAM,IAAIO,KAAK,CAAC,yCAAyC,CAAC;AAC5D"}
|
|
@@ -1,36 +1,27 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
7
|
exports.parseCrunch = parseCrunch;
|
|
9
|
-
|
|
10
8
|
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
11
|
-
|
|
12
9
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
13
|
-
|
|
14
10
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
15
|
-
|
|
16
11
|
var _crunchModuleLoader = require("./crunch-module-loader");
|
|
17
|
-
|
|
18
12
|
var _glExtensions = require("../gl-extensions");
|
|
19
|
-
|
|
20
13
|
var _loaderUtils = require("@loaders.gl/loader-utils");
|
|
21
|
-
|
|
22
14
|
var _parseDds = require("./parse-dds");
|
|
23
|
-
|
|
24
15
|
var _extractMipmapImages = require("../utils/extract-mipmap-images");
|
|
25
|
-
|
|
26
16
|
var _DXT_FORMAT_MAP;
|
|
27
|
-
|
|
28
17
|
var CRN_FORMAT = {
|
|
29
18
|
cCRNFmtInvalid: -1,
|
|
30
19
|
cCRNFmtDXT1: 0,
|
|
31
20
|
cCRNFmtDXT3: 1,
|
|
32
21
|
cCRNFmtDXT5: 2
|
|
22
|
+
|
|
33
23
|
};
|
|
24
|
+
|
|
34
25
|
var DXT_FORMAT_MAP = (_DXT_FORMAT_MAP = {}, (0, _defineProperty2.default)(_DXT_FORMAT_MAP, CRN_FORMAT.cCRNFmtDXT1, {
|
|
35
26
|
pixelFormat: _glExtensions.GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_S3TC_DXT1_EXT,
|
|
36
27
|
sizeFunction: _parseDds.getDxt1LevelSize
|
|
@@ -47,7 +38,6 @@ var dst;
|
|
|
47
38
|
function parseCrunch(_x, _x2) {
|
|
48
39
|
return _parseCrunch.apply(this, arguments);
|
|
49
40
|
}
|
|
50
|
-
|
|
51
41
|
function _parseCrunch() {
|
|
52
42
|
_parseCrunch = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee(data, options) {
|
|
53
43
|
var crunchModule, srcSize, bytes, src, format, mipMapLevels, width, height, sizeFunction, dstSize, i, image;
|
|
@@ -57,21 +47,21 @@ function _parseCrunch() {
|
|
|
57
47
|
case 0:
|
|
58
48
|
_context.next = 2;
|
|
59
49
|
return (0, _crunchModuleLoader.loadCrunchModule)(options);
|
|
60
|
-
|
|
61
50
|
case 2:
|
|
62
51
|
crunchModule = _context.sent;
|
|
63
52
|
srcSize = data.byteLength;
|
|
64
53
|
bytes = new Uint8Array(data);
|
|
65
54
|
src = crunchModule._malloc(srcSize);
|
|
66
55
|
arrayBufferCopy(bytes, crunchModule.HEAPU8, src, srcSize);
|
|
56
|
+
|
|
67
57
|
format = crunchModule._crn_get_dxt_format(src, srcSize);
|
|
68
58
|
(0, _loaderUtils.assert)(Boolean(DXT_FORMAT_MAP[format]), 'Unsupported format');
|
|
59
|
+
|
|
69
60
|
mipMapLevels = crunchModule._crn_get_levels(src, srcSize);
|
|
70
61
|
width = crunchModule._crn_get_width(src, srcSize);
|
|
71
62
|
height = crunchModule._crn_get_height(src, srcSize);
|
|
72
63
|
sizeFunction = DXT_FORMAT_MAP[format].sizeFunction;
|
|
73
64
|
dstSize = 0;
|
|
74
|
-
|
|
75
65
|
for (i = 0; i < mipMapLevels; ++i) {
|
|
76
66
|
dstSize += sizeFunction(width >> i, height >> i);
|
|
77
67
|
}
|
|
@@ -80,7 +70,6 @@ function _parseCrunch() {
|
|
|
80
70
|
if (dst) {
|
|
81
71
|
crunchModule._free(dst);
|
|
82
72
|
}
|
|
83
|
-
|
|
84
73
|
dst = crunchModule._malloc(dstSize);
|
|
85
74
|
cachedDstSize = dstSize;
|
|
86
75
|
}
|
|
@@ -88,7 +77,6 @@ function _parseCrunch() {
|
|
|
88
77
|
crunchModule._crn_decompress(src, srcSize, dst, dstSize, 0, mipMapLevels);
|
|
89
78
|
|
|
90
79
|
crunchModule._free(src);
|
|
91
|
-
|
|
92
80
|
image = new Uint8Array(crunchModule.HEAPU8.buffer, dst, dstSize).slice();
|
|
93
81
|
return _context.abrupt("return", (0, _extractMipmapImages.extractMipmapImages)(image, {
|
|
94
82
|
mipMapLevels: mipMapLevels,
|
|
@@ -97,7 +85,6 @@ function _parseCrunch() {
|
|
|
97
85
|
sizeFunction: sizeFunction,
|
|
98
86
|
internalFormat: DXT_FORMAT_MAP[format].pixelFormat
|
|
99
87
|
}));
|
|
100
|
-
|
|
101
88
|
case 20:
|
|
102
89
|
case "end":
|
|
103
90
|
return _context.stop();
|
|
@@ -107,18 +94,15 @@ function _parseCrunch() {
|
|
|
107
94
|
}));
|
|
108
95
|
return _parseCrunch.apply(this, arguments);
|
|
109
96
|
}
|
|
110
|
-
|
|
111
97
|
function arrayBufferCopy(srcData, dstData, dstByteOffset, numBytes) {
|
|
112
98
|
var i;
|
|
113
99
|
var dst32Offset = dstByteOffset / 4;
|
|
114
100
|
var tail = numBytes % 4;
|
|
115
101
|
var src32 = new Uint32Array(srcData.buffer, 0, (numBytes - tail) / 4);
|
|
116
102
|
var dst32 = new Uint32Array(dstData.buffer);
|
|
117
|
-
|
|
118
103
|
for (i = 0; i < src32.length; i++) {
|
|
119
104
|
dst32[dst32Offset + i] = src32[i];
|
|
120
105
|
}
|
|
121
|
-
|
|
122
106
|
for (i = numBytes - tail; i < numBytes; i++) {
|
|
123
107
|
dstData[dstByteOffset + i] = srcData[i];
|
|
124
108
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"parse-crunch.js","names":["CRN_FORMAT","cCRNFmtInvalid","cCRNFmtDXT1","cCRNFmtDXT3","cCRNFmtDXT5","DXT_FORMAT_MAP","pixelFormat","GL_EXTENSIONS_CONSTANTS","COMPRESSED_RGB_S3TC_DXT1_EXT","sizeFunction","getDxt1LevelSize","COMPRESSED_RGBA_S3TC_DXT3_EXT","getDxtXLevelSize","COMPRESSED_RGBA_S3TC_DXT5_EXT","cachedDstSize","dst","parseCrunch","data","options","loadCrunchModule","crunchModule","srcSize","byteLength","bytes","Uint8Array","src","_malloc","arrayBufferCopy","HEAPU8","format","_crn_get_dxt_format","assert","Boolean","mipMapLevels","_crn_get_levels","width","_crn_get_width","height","_crn_get_height","dstSize","i","_free","_crn_decompress","image","buffer","slice","extractMipmapImages","internalFormat","srcData","dstData","dstByteOffset","numBytes","dst32Offset","tail","src32","Uint32Array","dst32","length"],"sources":["../../../../src/lib/parsers/parse-crunch.ts"],"sourcesContent":["import type {TextureLevel} from '@loaders.gl/schema';\nimport {loadCrunchModule} from './crunch-module-loader';\nimport {GL_EXTENSIONS_CONSTANTS} from '../gl-extensions';\nimport {assert} from '@loaders.gl/loader-utils';\nimport {getDxt1LevelSize, getDxtXLevelSize} from './parse-dds';\nimport {extractMipmapImages} from '../utils/extract-mipmap-images';\n\n// Taken from crnlib.h\nconst CRN_FORMAT = {\n cCRNFmtInvalid: -1,\n\n cCRNFmtDXT1: 0,\n // cCRNFmtDXT3 is not currently supported when writing to CRN - only DDS.\n cCRNFmtDXT3: 1,\n cCRNFmtDXT5: 2\n\n // Crunch supports more formats than this.\n};\n\n/** Mapping of Crunch formats to DXT formats. */\nconst DXT_FORMAT_MAP = {\n [CRN_FORMAT.cCRNFmtDXT1]: {\n pixelFormat: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_S3TC_DXT1_EXT,\n sizeFunction: getDxt1LevelSize\n },\n [CRN_FORMAT.cCRNFmtDXT3]: {\n pixelFormat: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT3_EXT,\n sizeFunction: getDxtXLevelSize\n },\n [CRN_FORMAT.cCRNFmtDXT5]: {\n pixelFormat: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT5_EXT,\n sizeFunction: getDxtXLevelSize\n }\n};\n\nlet cachedDstSize = 0;\nlet dst: number;\n\n/**\n * Parse texture data as \"CRN\" format.\n * Function is \"async\" as emscriptified decoder module is loaded asyncronously\n * @param data - binary data of compressed texture\n * @returns Promise of Array of the texture levels\n */\nexport async function parseCrunch(data, options: any): Promise<TextureLevel[]> {\n const crunchModule = await loadCrunchModule(options);\n\n // Copy the contents of the arrayBuffer into emscriptens heap.\n const srcSize = data.byteLength;\n const bytes = new Uint8Array(data);\n const src = crunchModule._malloc(srcSize);\n arrayBufferCopy(bytes, crunchModule.HEAPU8, src, srcSize);\n\n // Determine what type of compressed data the file contains.\n const format = crunchModule._crn_get_dxt_format(src, srcSize);\n assert(Boolean(DXT_FORMAT_MAP[format]), 'Unsupported format');\n\n // Gather basic metrics about the DXT data.\n const mipMapLevels = crunchModule._crn_get_levels(src, srcSize);\n const width = crunchModule._crn_get_width(src, srcSize);\n const height = crunchModule._crn_get_height(src, srcSize);\n // const bytesPerBlock = crunchModule._crn_get_bytes_per_block(src, srcSize);\n\n // Determine the size of the decoded DXT data.\n const sizeFunction = DXT_FORMAT_MAP[format].sizeFunction;\n let dstSize = 0;\n for (let i = 0; i < mipMapLevels; ++i) {\n dstSize += sizeFunction(width >> i, height >> i);\n }\n\n // Allocate enough space on the emscripten heap to hold the decoded DXT data\n // or reuse the existing allocation if a previous call to this function has\n // already acquired a large enough buffer.\n if (cachedDstSize < dstSize) {\n if (dst) {\n crunchModule._free(dst);\n }\n dst = crunchModule._malloc(dstSize);\n cachedDstSize = dstSize;\n }\n\n // Decompress the DXT data from the Crunch file into the allocated space.\n crunchModule._crn_decompress(src, srcSize, dst, dstSize, 0, mipMapLevels);\n\n // Release the crunch file data from the emscripten heap.\n crunchModule._free(src);\n\n const image = new Uint8Array(crunchModule.HEAPU8.buffer, dst, dstSize).slice();\n return extractMipmapImages(image, {\n mipMapLevels,\n width,\n height,\n sizeFunction,\n internalFormat: DXT_FORMAT_MAP[format].pixelFormat\n });\n}\n\n/**\n * Copy an array of bytes into or out of the emscripten heap\n * @param {Uint8Array} srcData - Source data array\n * @param {Uint8Array} dstData - Destination data array\n * @param {number} dstByteOffset - Destination data offset\n * @param {number} numBytes - number of bytes to copy\n * @returns {void}\n */\nfunction arrayBufferCopy(srcData, dstData, dstByteOffset, numBytes) {\n let i;\n const dst32Offset = dstByteOffset / 4;\n const tail = numBytes % 4;\n const src32 = new Uint32Array(srcData.buffer, 0, (numBytes - tail) / 4);\n const dst32 = new Uint32Array(dstData.buffer);\n for (i = 0; i < src32.length; i++) {\n dst32[dst32Offset + i] = src32[i];\n }\n for (i = numBytes - tail; i < numBytes; i++) {\n dstData[dstByteOffset + i] = srcData[i];\n }\n}\n"],"mappings":";;;;;;;;;;AACA;AACA;AACA;AACA;AACA;AAAmE;AAGnE,IAAMA,UAAU,GAAG;EACjBC,cAAc,EAAE,CAAC,CAAC;EAElBC,WAAW,EAAE,CAAC;EAEdC,WAAW,EAAE,CAAC;EACdC,WAAW,EAAE;;AAGf,CAAC;;AAGD,IAAMC,cAAc,yEACjBL,UAAU,CAACE,WAAW,EAAG;EACxBI,WAAW,EAAEC,qCAAuB,CAACC,4BAA4B;EACjEC,YAAY,EAAEC;AAChB,CAAC,kDACAV,UAAU,CAACG,WAAW,EAAG;EACxBG,WAAW,EAAEC,qCAAuB,CAACI,6BAA6B;EAClEF,YAAY,EAAEG;AAChB,CAAC,kDACAZ,UAAU,CAACI,WAAW,EAAG;EACxBE,WAAW,EAAEC,qCAAuB,CAACM,6BAA6B;EAClEJ,YAAY,EAAEG;AAChB,CAAC,mBACF;AAED,IAAIE,aAAa,GAAG,CAAC;AACrB,IAAIC,GAAW;;AAAC,SAQMC,WAAW;EAAA;AAAA;AAAA;EAAA,yEAA1B,iBAA2BC,IAAI,EAAEC,OAAY;IAAA;IAAA;MAAA;QAAA;UAAA;YAAA;YAAA,OACvB,IAAAC,oCAAgB,EAACD,OAAO,CAAC;UAAA;YAA9CE,YAAY;YAGZC,OAAO,GAAGJ,IAAI,CAACK,UAAU;YACzBC,KAAK,GAAG,IAAIC,UAAU,CAACP,IAAI,CAAC;YAC5BQ,GAAG,GAAGL,YAAY,CAACM,OAAO,CAACL,OAAO,CAAC;YACzCM,eAAe,CAACJ,KAAK,EAAEH,YAAY,CAACQ,MAAM,EAAEH,GAAG,EAAEJ,OAAO,CAAC;;YAGnDQ,MAAM,GAAGT,YAAY,CAACU,mBAAmB,CAACL,GAAG,EAAEJ,OAAO,CAAC;YAC7D,IAAAU,mBAAM,EAACC,OAAO,CAAC3B,cAAc,CAACwB,MAAM,CAAC,CAAC,EAAE,oBAAoB,CAAC;;YAGvDI,YAAY,GAAGb,YAAY,CAACc,eAAe,CAACT,GAAG,EAAEJ,OAAO,CAAC;YACzDc,KAAK,GAAGf,YAAY,CAACgB,cAAc,CAACX,GAAG,EAAEJ,OAAO,CAAC;YACjDgB,MAAM,GAAGjB,YAAY,CAACkB,eAAe,CAACb,GAAG,EAAEJ,OAAO,CAAC;YAInDZ,YAAY,GAAGJ,cAAc,CAACwB,MAAM,CAAC,CAACpB,YAAY;YACpD8B,OAAO,GAAG,CAAC;YACf,KAASC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGP,YAAY,EAAE,EAAEO,CAAC,EAAE;cACrCD,OAAO,IAAI9B,YAAY,CAAC0B,KAAK,IAAIK,CAAC,EAAEH,MAAM,IAAIG,CAAC,CAAC;YAClD;;YAKA,IAAI1B,aAAa,GAAGyB,OAAO,EAAE;cAC3B,IAAIxB,GAAG,EAAE;gBACPK,YAAY,CAACqB,KAAK,CAAC1B,GAAG,CAAC;cACzB;cACAA,GAAG,GAAGK,YAAY,CAACM,OAAO,CAACa,OAAO,CAAC;cACnCzB,aAAa,GAAGyB,OAAO;YACzB;;YAGAnB,YAAY,CAACsB,eAAe,CAACjB,GAAG,EAAEJ,OAAO,EAAEN,GAAG,EAAEwB,OAAO,EAAE,CAAC,EAAEN,YAAY,CAAC;;YAGzEb,YAAY,CAACqB,KAAK,CAAChB,GAAG,CAAC;YAEjBkB,KAAK,GAAG,IAAInB,UAAU,CAACJ,YAAY,CAACQ,MAAM,CAACgB,MAAM,EAAE7B,GAAG,EAAEwB,OAAO,CAAC,CAACM,KAAK,EAAE;YAAA,iCACvE,IAAAC,wCAAmB,EAACH,KAAK,EAAE;cAChCV,YAAY,EAAZA,YAAY;cACZE,KAAK,EAALA,KAAK;cACLE,MAAM,EAANA,MAAM;cACN5B,YAAY,EAAZA,YAAY;cACZsC,cAAc,EAAE1C,cAAc,CAACwB,MAAM,CAAC,CAACvB;YACzC,CAAC,CAAC;UAAA;UAAA;YAAA;QAAA;MAAA;IAAA;EAAA,CACH;EAAA;AAAA;AAUD,SAASqB,eAAe,CAACqB,OAAO,EAAEC,OAAO,EAAEC,aAAa,EAAEC,QAAQ,EAAE;EAClE,IAAIX,CAAC;EACL,IAAMY,WAAW,GAAGF,aAAa,GAAG,CAAC;EACrC,IAAMG,IAAI,GAAGF,QAAQ,GAAG,CAAC;EACzB,IAAMG,KAAK,GAAG,IAAIC,WAAW,CAACP,OAAO,CAACJ,MAAM,EAAE,CAAC,EAAE,CAACO,QAAQ,GAAGE,IAAI,IAAI,CAAC,CAAC;EACvE,IAAMG,KAAK,GAAG,IAAID,WAAW,CAACN,OAAO,CAACL,MAAM,CAAC;EAC7C,KAAKJ,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGc,KAAK,CAACG,MAAM,EAAEjB,CAAC,EAAE,EAAE;IACjCgB,KAAK,CAACJ,WAAW,GAAGZ,CAAC,CAAC,GAAGc,KAAK,CAACd,CAAC,CAAC;EACnC;EACA,KAAKA,CAAC,GAAGW,QAAQ,GAAGE,IAAI,EAAEb,CAAC,GAAGW,QAAQ,EAAEX,CAAC,EAAE,EAAE;IAC3CS,OAAO,CAACC,aAAa,GAAGV,CAAC,CAAC,GAAGQ,OAAO,CAACR,CAAC,CAAC;EACzC;AACF"}
|
|
@@ -3,17 +3,13 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.isDDS = isDDS;
|
|
7
|
-
exports.parseDDS = parseDDS;
|
|
8
6
|
exports.getDxt1LevelSize = getDxt1LevelSize;
|
|
9
7
|
exports.getDxtXLevelSize = getDxtXLevelSize;
|
|
10
|
-
|
|
8
|
+
exports.isDDS = isDDS;
|
|
9
|
+
exports.parseDDS = parseDDS;
|
|
11
10
|
var _loaderUtils = require("@loaders.gl/loader-utils");
|
|
12
|
-
|
|
13
11
|
var _glExtensions = require("../gl-extensions");
|
|
14
|
-
|
|
15
12
|
var _extractMipmapImages = require("../utils/extract-mipmap-images");
|
|
16
|
-
|
|
17
13
|
var DDS_CONSTANTS = {
|
|
18
14
|
MAGIC_NUMBER: 0x20534444,
|
|
19
15
|
HEADER_LENGTH: 31,
|
|
@@ -63,11 +59,9 @@ function parseDDS(data) {
|
|
|
63
59
|
var sizeFunction = DDS_SIZE_FUNCTIONS[fourCC];
|
|
64
60
|
(0, _loaderUtils.assert)(internalFormat && sizeFunction, "DDS: Unknown pixel format ".concat(pixelFormatNumber));
|
|
65
61
|
var mipMapLevels = 1;
|
|
66
|
-
|
|
67
62
|
if (header[DDS_CONSTANTS.HEADER_FLAGS_INDEX] & DDS_CONSTANTS.DDSD_MIPMAPCOUNT) {
|
|
68
63
|
mipMapLevels = Math.max(1, header[DDS_CONSTANTS.MIPMAPCOUNT_INDEX]);
|
|
69
64
|
}
|
|
70
|
-
|
|
71
65
|
var width = header[DDS_CONSTANTS.HEADER_WIDTH_INDEX];
|
|
72
66
|
var height = header[DDS_CONSTANTS.HEADER_HEIGHT_INDEX];
|
|
73
67
|
var dataOffset = header[DDS_CONSTANTS.HEADER_SIZE_INDEX] + 4;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"parse-dds.js","names":["DDS_CONSTANTS","MAGIC_NUMBER","HEADER_LENGTH","MAGIC_NUMBER_INDEX","HEADER_SIZE_INDEX","HEADER_FLAGS_INDEX","HEADER_HEIGHT_INDEX","HEADER_WIDTH_INDEX","MIPMAPCOUNT_INDEX","HEADER_PF_FLAGS_INDEX","HEADER_PF_FOURCC_INDEX","DDSD_MIPMAPCOUNT","DDPF_FOURCC","DDS_PIXEL_FORMATS","DXT1","GL_EXTENSIONS_CONSTANTS","COMPRESSED_RGB_S3TC_DXT1_EXT","DXT3","COMPRESSED_RGBA_S3TC_DXT3_EXT","DXT5","COMPRESSED_RGBA_S3TC_DXT5_EXT","COMPRESSED_RGB_ATC_WEBGL","ATCA","COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL","ATCI","COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL","getATCLevelSize","getDxt1LevelSize","getATCALevelSize","getDxtXLevelSize","getATCILevelSize","DDS_SIZE_FUNCTIONS","isDDS","data","header","Uint32Array","magic","parseDDS","Int32Array","pixelFormatNumber","assert","Boolean","fourCC","int32ToFourCC","internalFormat","sizeFunction","mipMapLevels","Math","max","width","height","dataOffset","image","Uint8Array","extractMipmapImages","value","String","fromCharCode"],"sources":["../../../../src/lib/parsers/parse-dds.ts"],"sourcesContent":["import type {TextureLevel} from '@loaders.gl/schema';\nimport {assert} from '@loaders.gl/loader-utils';\nimport {GL_EXTENSIONS_CONSTANTS} from '../gl-extensions';\nimport {extractMipmapImages} from '../utils/extract-mipmap-images';\n\nconst DDS_CONSTANTS = {\n MAGIC_NUMBER: 0x20534444,\n HEADER_LENGTH: 31,\n MAGIC_NUMBER_INDEX: 0,\n HEADER_SIZE_INDEX: 1,\n HEADER_FLAGS_INDEX: 2,\n HEADER_HEIGHT_INDEX: 3,\n HEADER_WIDTH_INDEX: 4,\n MIPMAPCOUNT_INDEX: 7,\n HEADER_PF_FLAGS_INDEX: 20,\n HEADER_PF_FOURCC_INDEX: 21,\n DDSD_MIPMAPCOUNT: 0x20000,\n DDPF_FOURCC: 0x4\n};\n\nconst DDS_PIXEL_FORMATS: Record<string, number> = {\n DXT1: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_S3TC_DXT1_EXT,\n DXT3: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT3_EXT,\n DXT5: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT5_EXT,\n 'ATC ': GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_ATC_WEBGL,\n ATCA: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL,\n ATCI: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL\n};\n\nconst getATCLevelSize = getDxt1LevelSize;\nconst getATCALevelSize = getDxtXLevelSize;\nconst getATCILevelSize = getDxtXLevelSize;\n\nconst DDS_SIZE_FUNCTIONS: Record<string, (width: number, height: number) => number> = {\n DXT1: getDxt1LevelSize,\n DXT3: getDxtXLevelSize,\n DXT5: getDxtXLevelSize,\n 'ATC ': getATCLevelSize,\n ATCA: getATCALevelSize,\n ATCI: getATCILevelSize\n};\n\n/**\n * Check if data is in \"DDS\" format by its magic number\n * @param data - binary data of compressed texture\n * @returns true - data in \"DDS\" format, else - false\n */\nexport function isDDS(data: ArrayBuffer): boolean {\n const header = new Uint32Array(data, 0, DDS_CONSTANTS.HEADER_LENGTH);\n const magic = header[DDS_CONSTANTS.MAGIC_NUMBER_INDEX];\n return magic === DDS_CONSTANTS.MAGIC_NUMBER;\n}\n\n/**\n * Parse texture data as \"DDS\" format\n * @param data - binary data of compressed texture\n * @returns Array of the texture levels\n */\nexport function parseDDS(data: ArrayBuffer): TextureLevel[] {\n const header = new Int32Array(data, 0, DDS_CONSTANTS.HEADER_LENGTH);\n const pixelFormatNumber = header[DDS_CONSTANTS.HEADER_PF_FOURCC_INDEX];\n assert(\n Boolean(header[DDS_CONSTANTS.HEADER_PF_FLAGS_INDEX] & DDS_CONSTANTS.DDPF_FOURCC),\n 'DDS: Unsupported format, must contain a FourCC code'\n );\n const fourCC = int32ToFourCC(pixelFormatNumber);\n const internalFormat = DDS_PIXEL_FORMATS[fourCC];\n const sizeFunction = DDS_SIZE_FUNCTIONS[fourCC];\n assert(internalFormat && sizeFunction, `DDS: Unknown pixel format ${pixelFormatNumber}`);\n\n let mipMapLevels = 1;\n if (header[DDS_CONSTANTS.HEADER_FLAGS_INDEX] & DDS_CONSTANTS.DDSD_MIPMAPCOUNT) {\n mipMapLevels = Math.max(1, header[DDS_CONSTANTS.MIPMAPCOUNT_INDEX]);\n }\n const width = header[DDS_CONSTANTS.HEADER_WIDTH_INDEX];\n const height = header[DDS_CONSTANTS.HEADER_HEIGHT_INDEX];\n const dataOffset = header[DDS_CONSTANTS.HEADER_SIZE_INDEX] + 4;\n const image = new Uint8Array(data, dataOffset);\n\n return extractMipmapImages(image, {\n mipMapLevels,\n width,\n height,\n sizeFunction,\n internalFormat\n });\n}\n\n/**\n * DXT1 applicable function to calculate level size\n * @param width - level width\n * @param height - level height\n * @returns level size in bytes\n */\nexport function getDxt1LevelSize(width: number, height: number): number {\n return ((width + 3) >> 2) * ((height + 3) >> 2) * 8;\n}\n\n/**\n * DXT3 & DXT5 applicable function to calculate level size\n * @param width - level width\n * @param height - level height\n * @returns level size in bytes\n */\nexport function getDxtXLevelSize(width: number, height: number): number {\n return ((width + 3) >> 2) * ((height + 3) >> 2) * 16;\n}\n\n/**\n * Convert every byte of Int32 value to char\n * @param value - Int32 number\n * @returns string of 4 characters\n */\nfunction int32ToFourCC(value: number): string {\n return String.fromCharCode(\n value & 0xff,\n (value >> 8) & 0xff,\n (value >> 16) & 0xff,\n (value >> 24) & 0xff\n );\n}\n"],"mappings":"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"}
|
|
@@ -5,21 +5,29 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.isKTX = isKTX;
|
|
7
7
|
exports.parseKTX = parseKTX;
|
|
8
|
-
|
|
9
8
|
var _ktxParse = require("ktx-parse");
|
|
10
|
-
|
|
11
9
|
var _extractMipmapImages = require("../utils/extract-mipmap-images");
|
|
12
|
-
|
|
13
10
|
var _ktxFormatHelper = require("../utils/ktx-format-helper");
|
|
14
|
-
|
|
15
|
-
|
|
11
|
+
var KTX2_ID = [
|
|
12
|
+
0xab, 0x4b, 0x54, 0x58, 0x20, 0x32, 0x30, 0xbb, 0x0d, 0x0a, 0x1a, 0x0a];
|
|
16
13
|
|
|
17
14
|
function isKTX(data) {
|
|
18
15
|
var id = new Uint8Array(data);
|
|
19
|
-
var notKTX = id.byteLength < KTX2_ID.length || id[0] !== KTX2_ID[0] ||
|
|
16
|
+
var notKTX = id.byteLength < KTX2_ID.length || id[0] !== KTX2_ID[0] ||
|
|
17
|
+
id[1] !== KTX2_ID[1] ||
|
|
18
|
+
id[2] !== KTX2_ID[2] ||
|
|
19
|
+
id[3] !== KTX2_ID[3] ||
|
|
20
|
+
id[4] !== KTX2_ID[4] ||
|
|
21
|
+
id[5] !== KTX2_ID[5] ||
|
|
22
|
+
id[6] !== KTX2_ID[6] ||
|
|
23
|
+
id[7] !== KTX2_ID[7] ||
|
|
24
|
+
id[8] !== KTX2_ID[8] ||
|
|
25
|
+
id[9] !== KTX2_ID[9] ||
|
|
26
|
+
id[10] !== KTX2_ID[10] ||
|
|
27
|
+
id[11] !== KTX2_ID[11];
|
|
28
|
+
|
|
20
29
|
return !notKTX;
|
|
21
30
|
}
|
|
22
|
-
|
|
23
31
|
function parseKTX(arrayBuffer) {
|
|
24
32
|
var uint8Array = new Uint8Array(arrayBuffer);
|
|
25
33
|
var ktx = (0, _ktxParse.read)(uint8Array);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"parse-ktx.js","names":["KTX2_ID","isKTX","data","id","Uint8Array","notKTX","byteLength","length","parseKTX","arrayBuffer","uint8Array","ktx","read","mipMapLevels","Math","max","levels","width","pixelWidth","height","pixelHeight","internalFormat","mapVkFormatToWebGL","vkFormat","extractMipmapImages","sizeFunction","level","uncompressedByteLength"],"sources":["../../../../src/lib/parsers/parse-ktx.ts"],"sourcesContent":["import type {TextureLevel} from '@loaders.gl/schema';\nimport {read} from 'ktx-parse';\nimport {extractMipmapImages} from '../utils/extract-mipmap-images';\nimport {mapVkFormatToWebGL} from '../utils/ktx-format-helper';\n\nconst KTX2_ID = [\n // '´', 'K', 'T', 'X', '2', '0', 'ª', '\\r', '\\n', '\\x1A', '\\n'\n 0xab, 0x4b, 0x54, 0x58, 0x20, 0x32, 0x30, 0xbb, 0x0d, 0x0a, 0x1a, 0x0a\n];\n\n// eslint-disable-next-line complexity\nexport function isKTX(data: ArrayBuffer) {\n // const id = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n const id = new Uint8Array(data);\n const notKTX =\n id.byteLength < KTX2_ID.length ||\n id[0] !== KTX2_ID[0] || // '´'\n id[1] !== KTX2_ID[1] || // 'K'\n id[2] !== KTX2_ID[2] || // 'T'\n id[3] !== KTX2_ID[3] || // 'X'\n id[4] !== KTX2_ID[4] || // ' '\n id[5] !== KTX2_ID[5] || // '2'\n id[6] !== KTX2_ID[6] || // '0'\n id[7] !== KTX2_ID[7] || // 'ª'\n id[8] !== KTX2_ID[8] || // '\\r'\n id[9] !== KTX2_ID[9] || // '\\n'\n id[10] !== KTX2_ID[10] || // '\\x1A'\n id[11] !== KTX2_ID[11]; // '\\n'\n\n return !notKTX;\n}\n\nexport function parseKTX(arrayBuffer: ArrayBuffer): TextureLevel[] {\n const uint8Array = new Uint8Array(arrayBuffer);\n const ktx = read(uint8Array);\n const mipMapLevels = Math.max(1, ktx.levels.length);\n const width = ktx.pixelWidth;\n const height = ktx.pixelHeight;\n const internalFormat = mapVkFormatToWebGL(ktx.vkFormat);\n\n return extractMipmapImages(ktx.levels, {\n mipMapLevels,\n width,\n height,\n sizeFunction: (level: any): number => level.uncompressedByteLength,\n internalFormat\n });\n}\n"],"mappings":";;;;;;;AACA;AACA;AACA;AAEA,IAAMA,OAAO,GAAG;AAEd,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CACvE;;AAGM,SAASC,KAAK,CAACC,IAAiB,EAAE;EAEvC,IAAMC,EAAE,GAAG,IAAIC,UAAU,CAACF,IAAI,CAAC;EAC/B,IAAMG,MAAM,GACVF,EAAE,CAACG,UAAU,GAAGN,OAAO,CAACO,MAAM,IAC9BJ,EAAE,CAAC,CAAC,CAAC,KAAKH,OAAO,CAAC,CAAC,CAAC;EACpBG,EAAE,CAAC,CAAC,CAAC,KAAKH,OAAO,CAAC,CAAC,CAAC;EACpBG,EAAE,CAAC,CAAC,CAAC,KAAKH,OAAO,CAAC,CAAC,CAAC;EACpBG,EAAE,CAAC,CAAC,CAAC,KAAKH,OAAO,CAAC,CAAC,CAAC;EACpBG,EAAE,CAAC,CAAC,CAAC,KAAKH,OAAO,CAAC,CAAC,CAAC;EACpBG,EAAE,CAAC,CAAC,CAAC,KAAKH,OAAO,CAAC,CAAC,CAAC;EACpBG,EAAE,CAAC,CAAC,CAAC,KAAKH,OAAO,CAAC,CAAC,CAAC;EACpBG,EAAE,CAAC,CAAC,CAAC,KAAKH,OAAO,CAAC,CAAC,CAAC;EACpBG,EAAE,CAAC,CAAC,CAAC,KAAKH,OAAO,CAAC,CAAC,CAAC;EACpBG,EAAE,CAAC,CAAC,CAAC,KAAKH,OAAO,CAAC,CAAC,CAAC;EACpBG,EAAE,CAAC,EAAE,CAAC,KAAKH,OAAO,CAAC,EAAE,CAAC;EACtBG,EAAE,CAAC,EAAE,CAAC,KAAKH,OAAO,CAAC,EAAE,CAAC;;EAExB,OAAO,CAACK,MAAM;AAChB;AAEO,SAASG,QAAQ,CAACC,WAAwB,EAAkB;EACjE,IAAMC,UAAU,GAAG,IAAIN,UAAU,CAACK,WAAW,CAAC;EAC9C,IAAME,GAAG,GAAG,IAAAC,cAAI,EAACF,UAAU,CAAC;EAC5B,IAAMG,YAAY,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEJ,GAAG,CAACK,MAAM,CAACT,MAAM,CAAC;EACnD,IAAMU,KAAK,GAAGN,GAAG,CAACO,UAAU;EAC5B,IAAMC,MAAM,GAAGR,GAAG,CAACS,WAAW;EAC9B,IAAMC,cAAc,GAAG,IAAAC,mCAAkB,EAACX,GAAG,CAACY,QAAQ,CAAC;EAEvD,OAAO,IAAAC,wCAAmB,EAACb,GAAG,CAACK,MAAM,EAAE;IACrCH,YAAY,EAAZA,YAAY;IACZI,KAAK,EAALA,KAAK;IACLE,MAAM,EAANA,MAAM;IACNM,YAAY,EAAE,sBAACC,KAAU;MAAA,OAAaA,KAAK,CAACC,sBAAsB;IAAA;IAClEN,cAAc,EAAdA;EACF,CAAC,CAAC;AACJ"}
|