@animech-public/playcanvas
Version:
PlayCanvas WebGL game engine
51 lines (48 loc) • 1.74 kB
JavaScript
import { extends as _extends } from '../../../../_virtual/_rollupPluginBabelHelpers.js';
import { TEXHINT_ASSET, 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 => {
var _asset$file;
const basisModuleFound = basisTranscode(device, url.load, data, callback, {
isGGGR: ((asset == null || (_asset$file = asset.file) == null || (_asset$file = _asset$file.variants) == null || (_asset$file = _asset$file.basis) == null ? void 0 : _asset$file.opt) & 8) !== 0
});
if (!basisModuleFound) {
callback(`Basis module not found. Asset '${asset.name}' 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 texture = new Texture(device, _extends({
name: url,
profilerHint: TEXHINT_ASSET,
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: data.format,
cubemap: data.cubemap,
levels: data.levels
}, textureOptions));
texture.upload();
return texture;
}
}
export { BasisParser };