UNPKG

@polygonjs/polygonjs

Version:

node-based WebGL 3D engine https://polygonjs.com

72 lines (71 loc) 2.54 kB
"use strict"; import { LIBRARY_INSTALL_HINT } from "./../common"; import { ASSETS_ROOT } from "./../AssetsUtils"; import { BaseCoreImageLoader } from "./_BaseImageLoader"; import { KTX2Loader } from "three/examples/jsm/loaders/KTX2Loader"; import { Poly } from "../../../engine/Poly"; import { CoreBaseLoader } from "../_Base"; import { sanitizeUrl } from "../../UrlHelper"; import { WebGLRenderer } from "three"; const _KTX2TextureLoader = class extends BaseCoreImageLoader { constructor(_url, _node) { super(_url, _node); } async _getLoader(options) { return await _KTX2TextureLoader.getLoader({ node: this._node }); } static async getLoader(options) { return this._loader = this._loader || await this._createLoaderOrQueue(options); } static async _createLoaderOrQueue(options) { if (this._loadStarted) { return new Promise((resolve) => { this._resolves.push(resolve); }); } else { this._loadStarted = true; return this.__createLoader(options); } } static async __createLoader(options) { const loader = new KTX2Loader(this.loadingManager); const root = Poly.libs.root(); const KTX2Path = Poly.libs.KTX2Path(); if (root || KTX2Path) { const decoderPath = sanitizeUrl(`${root || ""}${KTX2Path || ""}/`); if (options.node) { const files = ["basis_transcoder.js", "basis_transcoder.wasm"]; await CoreBaseLoader._loadMultipleUrlsGlobal({ files: files.map((file) => { return { fullUrl: `${decoderPath}${file}` }; }), node: options.node, error: `failed to load basis libraries. Make sure to install them to load .basis files (${LIBRARY_INSTALL_HINT})` }); } loader.setTranscoderPath(decoderPath); } else { loader.setTranscoderPath(void 0); } const renderer = await options.node.scene().renderersRegister.waitForRenderer(); if (renderer) { if (renderer instanceof WebGLRenderer) { loader.detectSupport(renderer); } else { Poly.warn("renderer found is not a WebGLRenderer"); } } else { Poly.warn("texture loader found no renderer for KTX2Loader"); } for (const resolve of this._resolves) { resolve(loader); } return loader; } }; export let KTX2TextureLoader = _KTX2TextureLoader; KTX2TextureLoader.PARAM_ENV_DEFAULT = `${ASSETS_ROOT}/textures/sample_uastc_zstd.ktx2`; KTX2TextureLoader._loadStarted = false; KTX2TextureLoader._resolves = [];