UNPKG

playcanvas

Version:

PlayCanvas WebGL game engine

50 lines (47 loc) 1.67 kB
import { pixelFormatLinearToGamma, ADDRESS_CLAMP_TO_EDGE, ADDRESS_REPEAT } from '../../../platform/graphics/constants.js'; import { Texture } from '../../../platform/graphics/texture.js'; import { Asset } from '../../asset/asset.js'; import { basisTranscode } from '../../handlers/basis.js'; import { TextureParser } from './texture.js'; class BasisParser extends TextureParser { constructor(registry, device){ super(); this.device = device; this.maxRetries = 0; } load(url, callback, asset) { const device = this.device; const transcode = (data)=>{ const basisModuleFound = basisTranscode(device, url.load, data, callback, { isGGGR: (asset?.file?.variants?.basis?.opt & 8) !== 0 }); if (!basisModuleFound) { callback(`Basis module not found. Asset [${asset.name}](${asset.getFileUrl()}) basis texture variant will not be loaded.`); } }; Asset.fetchArrayBuffer(url.load, (err, result)=>{ if (err) { callback(err); } else { transcode(result); } }, asset, this.maxRetries); } open(url, data, device, textureOptions = {}) { const format = textureOptions.srgb ? pixelFormatLinearToGamma(data.format) : data.format; const texture = new Texture(device, { name: url, addressU: data.cubemap ? ADDRESS_CLAMP_TO_EDGE : ADDRESS_REPEAT, addressV: data.cubemap ? ADDRESS_CLAMP_TO_EDGE : ADDRESS_REPEAT, width: data.width, height: data.height, format: format, cubemap: data.cubemap, levels: data.levels, ...textureOptions }); texture.upload(); return texture; } } export { BasisParser };