import { NodeIO } from '@gltf-transform/core'; /** * The ONE glTF IO for the scene-import path. * * Every call site here used to construct a bare `new NodeIO()`. A bare NodeIO * has no extensions registered, and glTF marks KHR_texture_basisu as REQUIRED * (a KTX2 payload is unreadable without a transcoder), so reading any * KTX2-bearing GLB threw: * * Missing required extension, "KHR_texture_basisu". * * That made compile-pack structurally unable to ingest KTX2. It is why the * Pacifica mall shipped 600 encoded KTX2 textures that nothing could bind, and * why the published groups still carry per-material seed anchors: not a stage * anyone forgot to run, a capability that did not exist. * * This is a FACTORY rather than nine inline `.registerExtensions(...)` calls on * purpose. Fixing only the site that threw leaves the next bare NodeIO * downstream to reproduce the same bug with a different symptom — and the * symptom is nasty, because a dropped extension looks exactly like the * untextured state we are trying to leave. `gltfIo.spec.ts` asserts that no * bare `new NodeIO(` survives anywhere in this directory. * * Scope is deliberately KHR_texture_basisu ONLY, not ALL_EXTENSIONS (which is * what `character/` and `gesture/` use). Registering an extension changes what * survives a round-trip: an OPTIONAL extension that a bare NodeIO silently * drops today would start being preserved, changing the bytes of assets that * have nothing to do with textures. This CLI is shared by other lanes, so the * regression bar is that existing non-KTX2 assets compile byte-identically — * and the narrow registration is what makes that bar meetable and provable. */ export declare function sceneGltfIo(): NodeIO;