lingo3d
Version:
Lingo3D is a React/Vue 3d game development framework that ships with a complete visual editor
33 lines • 1.49 kB
JavaScript
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