@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.
3 lines (2 loc) • 4.2 kB
JavaScript
import{b as e,i as n,d as t,e as r,g as s,S as i,f as o,B as a}from"./index-B8IgtevW.esm.min.js";async function u(t){e(),t._pbrFallbackTex=void 0;for(const e of t.surfaces)for(const r of e._renderingContexts){if("scene"!==r._kind)continue;const s=r;n(e,s)&&!s._z&&await c(t,s)}}async function c(e,n){if(n._envTextures){const{rebuildSceneEnvironment:t}=await import("./environment-recovery-D1LJSRlL.esm.min.js");await f("rebuilding environment textures",()=>t(e,n))}if(await f("rebuilding material textures",()=>async function(e,n){const t=new Set,r=new WeakSet,s=[],i=e=>{if(!e||"object"!=typeof e)return;const n=e;if(n.texture&&n.view&&n.sampler&&"number"==typeof n.width&&"number"==typeof n.height){const e=n;return void(t.has(e)||(t.add(e),s.push(e)))}if(!r.has(e)){r.add(e);for(const e of Object.values(n))i(e)}};for(const e of n.meshes)i(e.material);if(0===s.length)return;const{rebuildTexture2D:o}=await import("./texture-recovery-BSWaaOFa.esm.min.js");await Promise.all(s.map(n=>o(e,n)))}(e,n)),await f("rebuilding meshes",()=>p(e,n)),n._z)return;if(n.shadowGenerators.length>0||n.lights.some(e=>e.shadowGenerator)){const{rebuildSceneShadowGenerators:t}=await import("./shadow-recovery-rC8DHVOu.esm.min.js");await f("rebuilding shadows",()=>t(e,n))}if(n._z)return;const o=n._renderables.filter(e=>!!e._rebuild).map(e=>e._rebuild);n._renderables.length=n._uniformUpdaters.length=0,n._meshDisposables.clear(),n._meshAuxDisposables.clear(),n._lightGpuState&&(n._lightGpuState=void 0);for(const[e,t]of n._groups){const r=await f("rebuilding material groups",()=>e(n,t));if(n._z)return;t.r=n._runtimeBuilds?.base(e,r.rebuildSingle)??r.rebuildSingle,t.o=r.renderables,n._renderables.push(...r.renderables),r.updater&&n._uniformUpdaters.push(r.updater)}o.length>0&&n._renderables.push(...await f("rebuilding renderables",()=>l(o))),n._renderables.sort((e,n)=>e.order-n.order),n._renderableVersion++,function(e,n){for(const o of n._frameGraph._tasks){if(!("_sceneUBO"in o&&"_sceneBG"in o&&"_opaqueBindings"in o))continue;const a=o;a._sceneUBO=t(e,i),a._lightsUBO=r(e,n)._buffer,a._sceneBG=e._device.createBindGroup({layout:s(e),entries:[{binding:0,resource:{buffer:a._sceneUBO}},{binding:1,resource:{buffer:a._lightsUBO}}]}),a._opaqueBindings.length=0,a._directBindings.length=0,a._transparentBindings.length=0,a._ob.length=0,a._lastVersion=-1,a._sceneUboCacheKey.length=0}}(e,n),n._frameGraph.build()}async function l(e){const n=[];for(const t of e)n.push(await t());return n}async function f(e,n){try{return await n()}catch(n){const t=n instanceof Error?n.message:String(n);throw new Error(`Device-lost Scene recovery failed while ${e}: ${t}`,{cause:n})}}async function p(e,n){let t=null,r=null;for(const s of n.meshes){if(s._cpuPositions&&s._cpuNormals&&s._cpuIndices){const n=s._gpu._recoverShared;s._gpu=n?n(e,s,_):_(e,s)}if(s.skeleton){t??=(await import("./create-skeleton-BKHzMJ5P.esm.min.js")).createSkeleton;const n=s.skeleton,r=t(e,n.joints,n.weights,n.boneCount,n.boneMatrices,n.joints1,n.weights1);Object.assign(n,r)}if(s.morphTargets){r??=(await import("./create-morph-targets-Dmft_sof.esm.min.js")).createMorphTargets;const n=s.morphTargets,t=r(e,n.targets.map(e=>({positions:e.positions,normals:e.normals})),s._cpuPositions?s._cpuPositions.length/3:0,Array.from(n.weights));Object.assign(n,t)}}}function _(e,n){const t=n._cpuPositions,r=n._cpuNormals,s=n._cpuUvs,i=n._cpuGpuIndices??n._cpuIndices,u=e._device;let c;return s&&s.length>0?c=o(e,s,a.VERTEX):(c=u.createBuffer({size:t.length/3*8,usage:a.VERTEX,mappedAtCreation:!0}),c.unmap()),{positionBuffer:o(e,t,a.VERTEX),normalBuffer:o(e,r,a.VERTEX),tangentBuffer:n._cpuTangents?o(e,n._cpuTangents,a.VERTEX):null,uvBuffer:c,uv2Buffer:n._cpuUv2s?o(e,n._cpuUv2s,a.VERTEX):null,colorBuffer:n._cpuColors?o(e,n._cpuColors,a.VERTEX):null,hasUv:!!s&&s.length>0,hasUv2:!!n._cpuUv2s&&n._cpuUv2s.length>0,hasTangent:!!n._cpuTangents&&n._cpuTangents.length>0,hasColor:!!n._cpuColors&&n._cpuColors.length>0,indexBuffer:o(e,i,a.INDEX),indexCount:i.length,indexFormat:n._cpuIndexFormat??n._gpu.indexFormat}}export{p as _rebuildMeshes,u as rebuildRegisteredScenes,l as rebuildRenderables};
//# sourceMappingURL=recovery-rebuild-CtDyYGBR.esm.min.js.map