@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) • 6.85 kB
JavaScript
import{y as e,V as r,C as t,w as n,p as a,aN as o,aO as i,aP as s,aQ as l}from"./index-BPURObVq.esm.min.js";import{a as u}from"./sphericalPolynomial.pure-CsRKkAN3.esm.min.js";import"./thinEngine-DuQ_dtuu.esm.min.js";const c="image/png",p=[134,22,135,150,246,214,150,54];function T(r){const t=new DataView(r.buffer,r.byteOffset,r.byteLength);let n=0;for(let r=0;r<p.length;r++)if(t.getUint8(n++)!==p[r])return e.Error("Not a babylon environment map"),null;let a,o="";for(;a=t.getUint8(n++);)o+=String.fromCharCode(a);let i=JSON.parse(o);return i=d(i),i.binaryDataPosition=n,i.specular&&(i.specular.lodGenerationScale=i.specular.lodGenerationScale||.8),i}function d(e){if(e.version>2)throw new Error(`Unsupported babylon environment map version "${e.version}". Latest supported version is "2".`);return 2===e.version?e:e={...e,version:2,imageType:c}}function f(e,o,i){const s=(i=d(i)).specular;if(!s)return Promise.resolve([]);e._lodGenerationScale=s.lodGenerationScale;const l=[],u=function(e,r){const t=(r=d(r)).specular;let n=Math.log2(r.width);if(n=Math.round(n)+1,t.mipmaps.length!==6*n)throw new Error(`Unsupported specular mipmaps number "${t.mipmaps.length}"`);const a=new Array(n);for(let o=0;o<n;o++){a[o]=new Array(6);for(let n=0;n<6;n++){const i=t.mipmaps[6*o+n];a[o][n]=new Uint8Array(e.buffer,e.byteOffset+r.binaryDataPosition+i.position,i.length)}}return a}(o,i);l.push(_(e,u,i.imageType));const p=i.irradiance?.irradianceTexture;if(p){const s=function(e,r){r=d(r);const t=new Array(6),n=r.irradiance?.irradianceTexture;if(n){if(6!==n.faces.length)throw new Error(`Incorrect irradiance texture faces number "${n.faces.length}"`);for(let a=0;a<6;a++){const o=n.faces[a];t[a]=new Uint8Array(e.buffer,e.byteOffset+r.binaryDataPosition+o.position,o.length)}}return t}(o,i);let u=null;i.irradiance?.irradianceTexture?.dominantDirection&&(u=r.FromArray(i.irradiance.irradianceTexture.dominantDirection)),l.push(async function(e,r,o,i=c,s=null){const l=e.getEngine(),u=new n(l,5),p=new a(l,u);e._irradianceTexture=p,p._dominantDirection=s,u.isCube=!0,u.format=t.TEXTUREFORMAT_RGBA,u.type=t.TEXTURETYPE_UNSIGNED_BYTE,u.generateMipMaps=!0,u._cachedAnisotropicFilteringLevel=null,u.generateMipMaps=!0,u.width=o,u.height=o,l.updateTextureSamplingMode(t.TEXTURE_TRILINEAR_SAMPLINGMODE,u),await y(u,[r],!1,i),l.generateMipMapsForCubemap(u),u.isReady=!0}(e,s,p.size,i.imageType,u))}return Promise.all(l)}async function m(e,r,n,a,o,i,s,l,u,c,p){return await new Promise((T,d)=>{if(n){const n=r.createTexture(null,!0,!0,null,t.TEXTURE_NEAREST_SAMPLINGMODE,null,e=>{d(e)},e);a?.onEffectCreatedObservable.addOnce(t=>{t.executeWhenCompiled(()=>{a.externalTextureSamplerBinding=!0,a.onApply=t=>{t._bindTexture("textureSampler",n),t.setFloat2("scale",1,r._features.needsInvertingBitmap&&e instanceof ImageBitmap?-1:1)},r.scenes.length&&(r.scenes[0].postProcessManager.directRender([a],c,!0,i,s),r.restoreDefaultFramebuffer(),n.dispose(),URL.revokeObjectURL(o),T())})})}else{if(r._uploadImageToTexture(p,e,i,s),l){const t=u[s];t&&r._uploadImageToTexture(t._texture,e,i,0)}T()}})}async function _(e,r,n=c){const a=e.getEngine();e.format=t.TEXTUREFORMAT_RGBA,e.type=t.TEXTURETYPE_UNSIGNED_BYTE,e.generateMipMaps=!0,e._cachedAnisotropicFilteringLevel=null,a.updateTextureSamplingMode(t.TEXTURE_TRILINEAR_SAMPLINGMODE,e),await y(e,r,!0,n),e.isReady=!0}async function y(e,r,u,p=c){if(!o(e.width))throw new Error("Texture size must be a power of two");const T=i(e.width)+1,d=e.getEngine();let f=!1,_=!1,y=null,g=null,E=null;const x=d.getCaps();x.textureLOD?d._features.supportRenderAndCopyToLodForFloatTextures?x.textureHalfFloatRender&&x.textureHalfFloatLinearFiltering?(f=!0,e.type=t.TEXTURETYPE_HALF_FLOAT):x.textureFloatRender&&x.textureFloatLinearFiltering&&(f=!0,e.type=t.TEXTURETYPE_FLOAT):f=!1:(f=!1,_=u);let R=0;if(f)d.isWebGPU?(R=1,await import("./rgbdDecode.fragment-sU55jbwN.esm.min.js")):await import("./rgbdDecode.fragment-C3k94seS.esm.min.js"),y=new s("rgbdDecode","rgbdDecode",null,null,1,null,t.TEXTURE_TRILINEAR_SAMPLINGMODE,d,!1,void 0,e.type,void 0,null,!1,void 0,R),e._isRGBD=!1,e.invertY=!1,g=d.createRenderTargetCubeTexture(e.width,{generateDepthBuffer:!1,generateMipMaps:!0,generateStencilBuffer:!1,samplingMode:t.TEXTURE_TRILINEAR_SAMPLINGMODE,type:e.type,format:t.TEXTUREFORMAT_RGBA});else if(e._isRGBD=!0,e.invertY=!0,_){const r=3;E={};const o=e._lodGenerationScale,i=e._lodGenerationOffset;for(let s=0;s<r;s++){const l=(T-1)*o+i,u=i+(l-i)*(1-s/(r-1)),c=Math.round(Math.min(Math.max(u,0),l)),p=new n(d,2);p.isCube=!0,p.invertY=!0,p.generateMipMaps=!1,d.updateTextureSamplingMode(t.TEXTURE_LINEAR_LINEAR,p);const f=new a(null);switch(f._isCube=!0,f._texture=p,E[c]=f,s){case 0:e._lodTextureLow=f;break;case 1:e._lodTextureMid=f;break;case 2:e._lodTextureHigh=f}}}const h=[];for(let t=0;t<r.length;t++)for(let n=0;n<6;n++){const a=r[t][n],o=l(a),i=new Blob([o],{type:p}),s=URL.createObjectURL(i);let u;if(d._features.forceBitmapOverHTMLImageElement)u=d.createImageBitmap(i,{premultiplyAlpha:"none",colorSpaceConversion:"none"}).then(async r=>await m(r,d,f,y,s,n,t,_,E,g,e));else{const r=new Image;r.src=s,u=new Promise((a,o)=>{r.onload=()=>{m(r,d,f,y,s,n,t,_,E,g,e).then(()=>a()).catch(e=>{o(e)})},r.onerror=e=>{o(e)}})}h.push(u)}if(await Promise.all(h),r.length<T){let n;const a=Math.pow(2,T-1-r.length),o=a*a*4;switch(e.type){case t.TEXTURETYPE_UNSIGNED_BYTE:n=new Uint8Array(o);break;case t.TEXTURETYPE_HALF_FLOAT:n=new Uint16Array(o);break;case t.TEXTURETYPE_FLOAT:n=new Float32Array(o)}for(let t=r.length;t<T;t++)for(let r=0;r<6;r++)d._uploadArrayBufferViewToTexture(g?.texture||e,n,r,t)}if(g){const r=e._irradianceTexture;e._irradianceTexture=null,d._releaseTexture(e),g._swapAndDie(e),e._irradianceTexture=r}y&&y.dispose(),_&&(e._lodTextureHigh&&e._lodTextureHigh._texture&&(e._lodTextureHigh._texture.isReady=!0),e._lodTextureMid&&e._lodTextureMid._texture&&(e._lodTextureMid._texture.isReady=!0),e._lodTextureLow&&e._lodTextureLow._texture&&(e._lodTextureLow._texture.isReady=!0))}function g(e,t){const n=(t=d(t)).irradiance;if(!n)return;const a=new u;r.FromArrayToRef(n.x,0,a.x),r.FromArrayToRef(n.y,0,a.y),r.FromArrayToRef(n.z,0,a.z),r.FromArrayToRef(n.xx,0,a.xx),r.FromArrayToRef(n.yy,0,a.yy),r.FromArrayToRef(n.zz,0,a.zz),r.FromArrayToRef(n.yz,0,a.yz),r.FromArrayToRef(n.zx,0,a.zx),r.FromArrayToRef(n.xy,0,a.xy),e._sphericalPolynomial=a}function E(e,r,t,n,a){const o=_(e.getEngine().createRawCubeTexture(null,e.width,e.format,e.type,e.generateMipMaps,e.invertY,e.samplingMode,e._compression),r).then(()=>e);return e.onRebuildCallback=e=>({proxy:o,isReady:!0,isAsync:!0}),e._source=13,e._bufferViewArrayArray=r,e._lodGenerationScale=n,e._lodGenerationOffset=a,e._sphericalPolynomial=t,_(e,r).then(()=>(e.isReady=!0,e))}export{T as G,g as U,E as _,f as a};
//# sourceMappingURL=environmentTextureTools.pure-DawhOrPy.esm.min.js.map