@kibeo/loaders.gl-textures
Version:
Framework-independent loaders for compressed and super compressed (basis) textures
191 lines (162 loc) • 4.81 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = parseBasis;
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var _basisModuleLoader = require("./basis-module-loader");
var _glConstants = require("../gl-constants");
var OutputFormat = {
etc1: {
basisFormat: 0,
compressed: true
},
etc2: {
basisFormat: 1,
compressed: true
},
bc1: {
basisFormat: 2,
compressed: true,
format: _glConstants.GL.COMPRESSED_RGB_S3TC_DXT1_EXT
},
bc3: {
basisFormat: 3,
compressed: true,
format: _glConstants.GL.COMPRESSED_RGBA_S3TC_DXT5_EXT
},
bc4: {
basisFormat: 4,
compressed: true
},
bc5: {
basisFormat: 5,
compressed: true
},
'bc7-m6-opaque-only': {
basisFormat: 6,
compressed: true
},
'bc7-m5': {
basisFormat: 7,
compressed: true
},
'pvrtc1-4-rgb': {
basisFormat: 8,
compressed: true
},
'pvrtc1-4-rgba': {
basisFormat: 9,
compressed: true
},
'astc-4x4': {
basisFormat: 10,
compressed: true
},
'atc-rgb': {
basisFormat: 11,
compressed: true
},
'atc-rgba-interpolated-alpha': {
basisFormat: 12,
compressed: true
},
rgba32: {
basisFormat: 13,
compressed: false
},
rgb565: {
basisFormat: 14,
compressed: false
},
bgr565: {
basisFormat: 15,
compressed: false
},
rgba4444: {
basisFormat: 16,
compressed: false
}
};
function parseBasis(_x, _x2) {
return _parseBasis.apply(this, arguments);
}
function _parseBasis() {
_parseBasis = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee(data, options) {
var _yield$loadBasisModul, BasisFile, basisFile, imageCount, images, imageIndex, levelsCount, levels, levelIndex;
return _regenerator.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_context.next = 2;
return (0, _basisModuleLoader.loadBasisModule)(options);
case 2:
_yield$loadBasisModul = _context.sent;
BasisFile = _yield$loadBasisModul.BasisFile;
basisFile = new BasisFile(new Uint8Array(data));
_context.prev = 5;
if (basisFile.startTranscoding()) {
_context.next = 8;
break;
}
return _context.abrupt("return", null);
case 8:
imageCount = basisFile.getNumImages();
images = [];
for (imageIndex = 0; imageIndex < imageCount; imageIndex++) {
levelsCount = basisFile.getNumLevels(imageIndex);
levels = [];
for (levelIndex = 0; levelIndex < levelsCount; levelIndex++) {
levels.push(transcodeImage(basisFile, imageIndex, levelIndex, options));
}
images.push(levels);
}
return _context.abrupt("return", images);
case 12:
_context.prev = 12;
basisFile.close();
basisFile.delete();
return _context.finish(12);
case 16:
case "end":
return _context.stop();
}
}
}, _callee, null, [[5,, 12, 16]]);
}));
return _parseBasis.apply(this, arguments);
}
function getBasisOptions(options, hasAlpha) {
var format = options && options.basis && options.basis.format;
if ((0, _typeof2.default)(format) === 'object') {
format = hasAlpha ? format.alpha : format.noAlpha;
}
format = format.toLowerCase();
return OutputFormat[format];
}
function transcodeImage(basisFile, imageIndex, levelIndex, options) {
var width = basisFile.getImageWidth(imageIndex, levelIndex);
var height = basisFile.getImageHeight(imageIndex, levelIndex);
var hasAlpha = basisFile.getHasAlpha();
var _getBasisOptions = getBasisOptions(options, hasAlpha),
compressed = _getBasisOptions.compressed,
format = _getBasisOptions.format,
basisFormat = _getBasisOptions.basisFormat;
var decodedSize = basisFile.getImageTranscodedSizeInBytes(imageIndex, levelIndex, basisFormat);
var decodedData = new Uint8Array(decodedSize);
if (!basisFile.transcodeImage(decodedData, imageIndex, levelIndex, basisFormat, 0, 0)) {
return null;
}
return {
width: width,
height: height,
data: decodedData,
compressed: compressed,
hasAlpha: hasAlpha,
format: format
};
}
//# sourceMappingURL=parse-basis.js.map