27 lines
977 B
TypeScript
27 lines
977 B
TypeScript
import * as THREE from 'three';
|
|
import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';
|
|
import {
|
|
DRACOLoader,
|
|
DRACO_GLTF_CONFIG,
|
|
} 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;
|
|
}
|
|
|
|
// 여러 DRACOLoader/KTX2Loader instance를 만들면 충돌할 수 있으므로 하나를 공유합니다.
|
|
// decoder URL은 Three.js import가 생성하는 version 일치 hashed asset을 사용합니다.
|
|
let _cache: ViewerLoaders | null = null;
|
|
|
|
export function getLoaders(renderer: THREE.WebGLRenderer): ViewerLoaders {
|
|
if (_cache) return _cache;
|
|
const draco = new DRACOLoader().setDecoderPath(DRACO_GLTF_CONFIG);
|
|
const ktx2 = new KTX2Loader().detectSupport(renderer);
|
|
const gltf = new GLTFLoader().setDRACOLoader(draco).setKTX2Loader(ktx2);
|
|
_cache = { gltf, draco, ktx2 };
|
|
return _cache;
|
|
}
|