UNPKG

@kibeo/loaders.gl-textures

Version:

Framework-independent loaders for compressed and super compressed (basis) textures

191 lines (162 loc) 4.81 kB
"use strict"; 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