ktx2-encoder
Version:
KTX2(.ktx2) encoder for browser applications
33 lines (32 loc) • 1.2 kB
JavaScript
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();