UNPKG

ktx2-encoder

Version:

KTX2(.ktx2) encoder for browser applications

39 lines (38 loc) 1.61 kB
import { HDRSourceType, SourceType } from "../enum.js"; import { applyInputOptions } from "../applyInputOptions.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(bufferOrBufferArray, options = {}) { const basis = await this.init(); const encoder = new basis.BasisEncoder(); const bufferArray = Array.isArray(bufferOrBufferArray) ? bufferOrBufferArray : [bufferOrBufferArray]; applyInputOptions(options, encoder); for (let i = 0; i < bufferArray.length; i++) { const buffer = bufferArray[i]; if (options.isHDR) { encoder.setSliceSourceImageHDR(i, buffer, 0, 0, options.imageType === "hdr" ? HDRSourceType.HDR : HDRSourceType.EXR, true); } else { const imageData = await options.imageDecoder(buffer); encoder.setSliceSourceImage(i, new Uint8Array(imageData.data), imageData.width, imageData.height, SourceType.RAW); } } const resultData = new Uint8Array(1024 * 1024 * (options.isHDR ? 24 : 10)); const resultSize = encoder.encode(resultData); if (resultSize === 0) { throw new Error("Encode failed"); } return Buffer.from(resultData.subarray(0, resultSize)); } } export const nodeEncoder = new NodeBasisEncoder();