chore(monorepo): import hmwebviewer history at a717900

git-subtree-dir: apps/viewer-3d
git-subtree-mainline: 5e10bb1be4
git-subtree-split: a71790070d
This commit is contained in:
2026-07-29 09:04:52 +09:00
78 changed files with 15921 additions and 0 deletions
+24
View File
@@ -0,0 +1,24 @@
import * as THREE from 'three';
import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';
import { DRACOLoader } from 'three/examples/jsm/loaders/DRACOLoader.js';
import { KTX2Loader } from 'three/examples/jsm/loaders/KTX2Loader.js';
export interface ViewerLoaders {
gltf: GLTFLoader;
draco: DRACOLoader;
ktx2: KTX2Loader;
}
// SINGLETON — multiple DRACOLoader/KTX2Loader instances crash (three.js #22445).
// Reuse across every load. Decoder WASM lives under public/draco + public/basis
// (version-matched to the installed three.js).
let _cache: ViewerLoaders | null = null;
export function getLoaders(renderer: THREE.WebGLRenderer): ViewerLoaders {
if (_cache) return _cache;
const draco = new DRACOLoader().setDecoderPath('/draco/');
const ktx2 = new KTX2Loader().setTranscoderPath('/basis/').detectSupport(renderer);
const gltf = new GLTFLoader().setDRACOLoader(draco).setKTX2Loader(ktx2);
_cache = { gltf, draco, ktx2 };
return _cache;
}