1import type { MeshData, MeshFormat } from '../types'
2import { mopfFormat } from './mopf'
3import { tricolFormat } from './tricol'
4import { bmshFormat } from './bmsh'
6export const formats: MeshFormat[] = [mopfFormat, tricolFormat, bmshFormat]
8export function formatForFilename(filename: string): MeshFormat | null {
9 const lower = filename.toLowerCase()
10 return formats.find((f) => lower.endsWith(f.extension)) ?? null
11}
13export const acceptedExtensions = formats.map((f) => f.extension)
15/**
16 * Human-readable list of attributes of `mesh` that `target` cannot store
17 * (empty array means the conversion is lossless).
18 */
19export function conversionLosses(mesh: MeshData, target: MeshFormat): string[] {
20 const losses: string[] = []
21 if (mesh.normals && !target.capabilities.normals) losses.push('vertex normals')
22 if (mesh.colors && !target.capabilities.colors) losses.push('vertex colors')
23 if (mesh.name && !target.capabilities.name) losses.push('mesh name')
24 return losses
25}