58 lines
1.2 KiB
TypeScript
58 lines
1.2 KiB
TypeScript
let useGLTF: any = null;
|
||
|
||
const initializeUseGLTF = async () => {
|
||
if (!useGLTF) {
|
||
try {
|
||
const drei = await import("@react-three/drei");
|
||
useGLTF = drei.useGLTF;
|
||
} catch (error) {
|
||
console.warn(
|
||
"⚠️ GLTFCacheManager: Не удалось импортировать useGLTF",
|
||
error
|
||
);
|
||
}
|
||
}
|
||
return useGLTF;
|
||
};
|
||
|
||
export const clearGLTFCacheForUrl = async (url: string) => {
|
||
try {
|
||
const gltf = await initializeUseGLTF();
|
||
if (gltf && gltf.clear) {
|
||
gltf.clear(url);
|
||
}
|
||
} catch (error) {}
|
||
};
|
||
|
||
export const clearAllGLTFCache = async () => {
|
||
try {
|
||
const gltf = await initializeUseGLTF();
|
||
if (gltf && gltf.clear) {
|
||
gltf.clear();
|
||
}
|
||
} catch (error) {}
|
||
};
|
||
|
||
export const revokeBlobURL = (url: string) => {
|
||
if (url && url.startsWith("blob:")) {
|
||
try {
|
||
URL.revokeObjectURL(url);
|
||
} catch (error) {}
|
||
}
|
||
};
|
||
|
||
export const clearBlobAndGLTFCache = async (url: string) => {
|
||
revokeBlobURL(url);
|
||
|
||
await clearGLTFCacheForUrl(url);
|
||
};
|
||
|
||
export const clearMediaTransitionCache = async (
|
||
previousMediaId: string | number | null,
|
||
newMediaType?: number
|
||
) => {
|
||
if (newMediaType === 6 || previousMediaId) {
|
||
await clearAllGLTFCache();
|
||
}
|
||
};
|