@babylonjs/viewer
Version:
The Babylon Viewer aims to simplify a specific but common Babylon.js use case: loading, viewing, and interacting with a 3D model.
50 lines (46 loc) • 1.7 kB
JavaScript
import { aj as collectPbrBoundTextures, ak as acquireTexture, al as releaseTexture } from './index-DMbDahsc.esm.js';
function _registerAssetContainerSceneCleanup(container, scene, cleanup) {
const cleanups = container._sceneCleanups ??= /* @__PURE__ */ new WeakMap();
const previous = cleanups.get(scene);
const combined = previous ? () => {
previous();
cleanup();
} : cleanup;
if (previous) {
scene._disposables[scene._disposables.indexOf(previous)] = combined;
} else {
scene._disposables.push(combined);
}
cleanups.set(scene, combined);
}
function createVariantTextureSetup(data) {
const textures = [data.originals, ...Object.values(data.variants)].flat().flatMap(({ material }) => collectPbrBoundTextures(material));
return (scene, container) => {
textures.forEach(acquireTexture);
_registerAssetContainerSceneCleanup(container, scene, () => textures.forEach(releaseTexture));
};
}
const feature = {
id: "KHR_materials_variants",
async applyAsset(meshes, _root, ctx) {
const variantNames = ctx._json.extensions?.KHR_materials_variants?.variants?.map((v) => v.name);
if (!variantNames?.length) {
return {};
}
const { loadVariantMaterials } = await import('./gltf-variants-CG9DXKZb.esm.js');
const materialVariants = await loadVariantMaterials(
ctx._json,
ctx._binChunk,
ctx._baseUrl,
variantNames,
meshes,
ctx._engine,
ctx._matExts,
ctx._runMatExts,
ctx._wrapTex
);
return { materialVariants, _sceneSetup: createVariantTextureSetup(materialVariants) };
}
};
export { feature as default };
//# sourceMappingURL=gltf-feature-variants-Dtx2N51L.esm.js.map