@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) • 2.26 kB
JavaScript
import{T as e,V as t,aD as s,M as o,y as r,bo as n,bp as a}from"./index-BPURObVq.esm.min.js";import{b as i,A as c}from"./glTFLoader.pure-Bdyl6AcK.esm.min.js";import"./thinInstanceMesh-DOdJ7Zhn.esm.min.js";import"./morphTargetManager-CdEb1BHc.esm.min.js";import"./bone.pure-BcPT5kCP.esm.min.js";import"./skeleton-DinTjF3y.esm.min.js";import"./assetContainer-CAncviZo.esm.min.js";import"./objectModelMapping-ClgDmo5Q.esm.min.js";import"./spotLight.pure-5s2DDDIt.esm.min.js";const m="EXT_mesh_gpu_instancing";class l{constructor(e){this.name=m,this._loader=e,this.enabled=this._loader.isExtensionUsed(m)}dispose(){this._loader=null}loadNodeAsync(n,a,m){return i.LoadExtensionAsync(n,a,this.name,async(n,i)=>{this._loader._disableInstancedMesh++;const l=this._loader.loadNodeAsync(`/nodes/${a.index}`,a,m);if(this._loader._disableInstancedMesh--,!a._primitiveBabylonMeshes)return await l;const h=new Array;let u=0;const d=e=>{if(null==i.attributes[e])return void h.push(Promise.resolve(null));const t=c.Get(`${n}/attributes/${e}`,this._loader.gltf.accessors,i.attributes[e]);if(h.push(this._loader._loadFloatAccessorAsync(`/accessors/${t.bufferView}`,t)),0===u)u=t.count;else if(u!==t.count)throw new Error(`${n}/attributes: Instance buffer accessors do not have the same count.`)};return d("TRANSLATION"),d("ROTATION"),d("SCALE"),d("_COLOR_0"),await l.then(async n=>{const[i,c,m,l]=await Promise.all(h),d=new Float32Array(16*u);e.Vector3[0].copyFromFloats(0,0,0),e.Quaternion[0].copyFromFloats(0,0,0,1),e.Vector3[1].copyFromFloats(1,1,1);for(let r=0;r<u;++r)i&&t.FromArrayToRef(i,3*r,e.Vector3[0]),c&&s.FromArrayToRef(c,4*r,e.Quaternion[0]),m&&t.FromArrayToRef(m,3*r,e.Vector3[1]),o.ComposeToRef(e.Vector3[1],e.Quaternion[0],e.Vector3[0],e.Matrix[0]),e.Matrix[0].copyToArray(d,16*r);for(const e of a._primitiveBabylonMeshes)e.thinInstanceSetBuffer("matrix",d,16,!0),l&&(l.length===3*u?e.thinInstanceSetBuffer("color",l,3,!0):l.length===4*u?e.thinInstanceSetBuffer("color",l,4,!0):r.Warn("Unexpected size of _COLOR_0 attribute for mesh "+e.name));return n})})}}let h=!1;function u(){h||(h=!0,n(m),a(m,!0,e=>new l(e)))}u();export{l as EXT_mesh_gpu_instancing,u as RegisterEXT_mesh_gpu_instancing};
//# sourceMappingURL=EXT_mesh_gpu_instancing-CqYiM0N7.esm.min.js.map