UNPKG

ktx2-encoder

Version:

KTX2(.ktx2) encoder for browser applications

33 lines (32 loc) 1.2 kB
import { SourceType } from "../enum.js"; import { applyInputOptions } from "../utils.js"; import BASIS from "../basis/basis_encoder.js"; let promise = null; class NodeBasisEncoder { async init() { if (!promise) { promise = BASIS().then((basis) => { basis.initializeBasis(); return basis; }); } return promise; } async encode(imageBitmapSource, options = {}) { const imageData = await options.imageDecoder(imageBitmapSource); const basis = await this.init(); const basisEncoder = new basis.BasisEncoder(); const w = imageData.width; const h = imageData.height; const rgbaPixels = imageData.data; basisEncoder.setSliceSourceImage(0, new Uint8Array(rgbaPixels), w, h, SourceType.RAW); applyInputOptions(options, basisEncoder); const resultData = new Uint8Array(w * h * 4 * 2); const resultSize = basisEncoder.encode(resultData); if (resultSize === 0) { throw "Something wrong"; } return Buffer.from(resultData.subarray(0, resultSize)); } } export const nodeEncoder = new NodeBasisEncoder();