UNPKG

lingo3d

Version:

Lingo3D is a React/Vue 3d game development framework that ships with a complete visual editor

33 lines 1.49 kB
import { GLTFLoader } from "./loaders/GLTFLoader"; import { DRACOLoader } from "three/examples/jsm/loaders/DRACOLoader"; import { forceGet, lazy } from "@lincode/utils"; import cloneSkinnedMesh from "../cloneSkinnedMesh"; import { handleProgress } from "./utils/bytesLoaded"; import { decreaseLoadingAssetsCount, increaseLoadingAssetsCount } from "../../../states/useLoadingAssetsCount"; import processChildren from "./utils/processChildren"; import { assetsPathPtr, wasmUrlPtr } from "../../../pointers/assetsPathPointers"; const cache = new Map(); const loader = new GLTFLoader(); const createDracoLoader = lazy(() => { const dracoLoader = new DRACOLoader(); dracoLoader.setDecoderPath(wasmUrlPtr[0]); loader.setDRACOLoader(dracoLoader); }); export default async (url, clone) => { createDracoLoader(); const [gltf, noBone] = await forceGet(cache, url, () => new Promise((resolve, reject) => { const isAssets = url.startsWith(assetsPathPtr[0]); isAssets && increaseLoadingAssetsCount(); loader.load(url, (gltf) => { const noBonePtr = [true]; for (const scene of gltf.scenes) processChildren(scene, noBonePtr); isAssets && decreaseLoadingAssetsCount(); resolve([gltf, noBonePtr[0]]); }, handleProgress(url), reject); })); if (clone) return cloneSkinnedMesh(gltf.scene, noBone, gltf.animations); return gltf.scene; }; //# sourceMappingURL=loadGLTF.js.map