UNPKG

@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) 11 kB
import{aZ as e,ao as i,a as t,m as s,bb as n,bc as r,O as a,y as d,aH as o,C as h,aP as c,V as _,ba as u}from"./index-BPURObVq.esm.min.js";import{P as l}from"./proceduralTexture.pure-Cev_FPRk.esm.min.js";import{C as b}from"./cubeTexture.pure-CFZf4s_Z.esm.min.js";class m{constructor(i){this.name=e.NAME_IBLCDFGENERATOR,this._newIblObserver=null,this.scene=i}register(){this._updateIblSource(),this._newIblObserver=this.scene.onEnvironmentTextureChangedObservable.add(this._updateIblSource.bind(this)),this.scene.addIsReadyCheck(this)}rebuild(){}dispose(){this.scene.onEnvironmentTextureChangedObservable.remove(this._newIblObserver),this.scene.removeIsReadyCheck(this)}isReady(){const e=this.scene._iblCdfGenerator;return!e||!this.scene.environmentTexture||!!e.isReady()}_updateIblSource(){this.scene.iblCdfGenerator&&this.scene.environmentTexture&&(this.scene.iblCdfGenerator.iblSource=this.scene.environmentTexture)}}let f=!1;function T(t){f||(f=!0,Object.defineProperty(i.prototype,"iblCdfGenerator",{get:function(){return this._iblCdfGenerator},set:function(e){e&&(this._iblCdfGenerator=e)},enumerable:!0,configurable:!0}),i.prototype.enableIblCdfGenerator=function(){return this._iblCdfGenerator?this._iblCdfGenerator:(this._iblCdfGenerator=new t(this),this._iblCdfGenerator.isSupported?(this.environmentTexture&&(this._iblCdfGenerator.iblSource=this.environmentTexture),this._iblCdfGenerator):(this._iblCdfGenerator=null,null))},i.prototype.disableIblCdfGenerator=function(){this._iblCdfGenerator&&(this._iblCdfGenerator.dispose(),this._iblCdfGenerator=null)},t._SceneComponentInitialization=i=>{let t=i._getComponent(e.NAME_IBLCDFGENERATOR);t||(t=new m(i),i._addComponent(t))})}class P{get isSupported(){const e=t.LastCreatedEngine;return!!e&&e.getCaps().texelFetch}get iblSource(){return this._iblSource}set iblSource(e){if(this._iblSource===e)return;if(this._clearIblSourceReadinessObservers(),this._disposeTextures(),this._iblSource=e,!e)return;const i=()=>{this._iblSource===e&&this._isIblSourceReady(e)&&(this._clearIblSourceReadinessObservers(),this._recreateAssetsFromNewIbl())};if(this._isIblSourceReady(e))this._recreateAssetsFromNewIbl();else{if(e instanceof s){const t=e.onLoadObservable.addOnce(i);t&&(this._iblSourceLoadUnsubscribe=()=>e.onLoadObservable.remove(t))}else if(e instanceof b){const t=e.onLoadObservable.addOnce(i);t&&(this._iblSourceLoadUnsubscribe=()=>e.onLoadObservable.remove(t))}this._iblSourceReadyRetryObserver=n(()=>this._iblSource!==e||this._isIblSourceReady(e),i,void 0,16,3e4,!1)}}_isIblSourceReady(e){if(!e.isReadyOrNotBlocking())return!1;if(!e.isCube)return!0;const i=e.getInternalTexture();return!!i&&i.isReady}_clearIblSourceReadinessObservers(){this._iblSourceReadyRetryObserver?.(),this._iblSourceReadyRetryObserver=null,this._iblSourceLoadUnsubscribe?.(),this._iblSourceLoadUnsubscribe=null}_recreateAssetsFromNewIbl(){this._debugPass&&this._debugPass.dispose(),this._createTextures(),this._debugPass&&this._createDebugPass()}getIcdfTexture(){return this._icdfPT?this._icdfPT:this._dummyTexture}setDebugDisplayParams(e,i,t,s){this._debugSizeParams.set(e,i,t,s)}get debugPassName(){return this._debugPassName}getDebugPassPP(){return this._debugPass||this._createDebugPass(),this._debugPass}constructor(e){if(this._iblSourceLoadUnsubscribe=null,this._iblSourceReadyRetryObserver=null,this._cachedDominantDirection=null,this.debugEnabled=!1,this._debugSizeParams=new r(0,0,1,1),this._debugPassName="CDF Debug",this.onGeneratedObservable=new a,this.onTextureChangedObservable=new a,e?P._IsScene(e)?this._scene=e:this._engine=e:this._scene=t.LastCreatedScene,this._scene&&(this._engine=this._scene.getEngine()),!this.isSupported)return void d.Warn("CDF renderer is not supported by the current engine.");const i=new Uint16Array([0,0,0,255]);this._dummyTexture=new o(i,1,1,h.TEXTUREFORMAT_RGBA,e,!1,!1,void 0,h.TEXTURETYPE_HALF_FLOAT),this._scene&&(T(P),P._SceneComponentInitialization(this._scene))}_createTextures(){const e=this._iblSource?{width:this._iblSource.getSize().width,height:this._iblSource.getSize().height}:{width:1,height:1};this._iblSource||(this._iblSource=o.CreateRTexture(new Uint8Array([255]),1,1,this._engine,!1,!1,h.TEXTURE_NEAREST_SAMPLINGMODE,h.TEXTURETYPE_UNSIGNED_BYTE),this._iblSource.name="Placeholder IBL Source"),this._iblSource.isCube&&(e.width*=4,e.height*=2,e.width=1<<Math.floor(Math.log2(e.width)),e.height=1<<Math.floor(Math.log2(e.height)));const i=this._engine.isWebGPU,t={generateDepthBuffer:!1,generateMipMaps:!1,format:h.TEXTUREFORMAT_R,type:h.TEXTURETYPE_FLOAT,samplingMode:h.TEXTURE_NEAREST_SAMPLINGMODE,shaderLanguage:i?1:0,gammaSpace:!1,extraInitializationsAsync:async()=>{i?await Promise.all([import("./iblCdfx.fragment-B8cPmOuG.esm.min.js"),import("./iblCdfy.fragment-CLT8W4rk.esm.min.js"),import("./iblScaledLuminance.fragment-8E2FhU7d.esm.min.js")]):await Promise.all([import("./iblCdfx.fragment-DgNFrjyk.esm.min.js"),import("./iblCdfy.fragment-D0O-6eBY.esm.min.js"),import("./iblScaledLuminance.fragment-HJKglsFc.esm.min.js")])}},s={generateDepthBuffer:!1,generateMipMaps:!1,format:h.TEXTUREFORMAT_RGBA,type:h.TEXTURETYPE_HALF_FLOAT,samplingMode:h.TEXTURE_NEAREST_SAMPLINGMODE,shaderLanguage:i?1:0,gammaSpace:!1,extraInitializationsAsync:async()=>{i?await Promise.all([import("./iblIcdf.fragment-CSob_myk.esm.min.js"),import("./iblDominantDirection.fragment-D2NYZG2Y.esm.min.js")]):await Promise.all([import("./iblIcdf.fragment-DGGBHG-C.esm.min.js"),import("./iblDominantDirection.fragment-h1krLhL0.esm.min.js")])}};this._cdfyPT=new l("cdfyTexture",{width:e.width,height:e.height+1},"iblCdfy",this._scene,t,!1,!1),this._cdfyPT.autoClear=!1,this._cdfyPT.setTexture("iblSource",this._iblSource),this._cdfyPT.setInt("iblHeight",e.height),this._cdfyPT.wrapV=h.TEXTURE_CLAMP_ADDRESSMODE,this._cdfyPT.refreshRate=0,this._iblSource.isCube&&(this._cdfyPT.defines="#define IBL_USE_CUBE_MAP\n"),this._cdfxPT=new l("cdfxTexture",{width:e.width+1,height:1},"iblCdfx",this._scene,t,!1,!1),this._cdfxPT.autoClear=!1,this._cdfxPT.setTexture("cdfy",this._cdfyPT),this._cdfxPT.refreshRate=0,this._cdfxPT.wrapU=h.TEXTURE_CLAMP_ADDRESSMODE,this._scaledLuminancePT=new l("iblScaledLuminance",{width:e.width,height:e.height},"iblScaledLuminance",this._scene,{...t,samplingMode:h.TEXTURE_TRILINEAR_SAMPLINGMODE,generateMipMaps:!0},!0,!1),this._scaledLuminancePT.autoClear=!1,this._scaledLuminancePT.setTexture("iblSource",this._iblSource),this._scaledLuminancePT.setInt("iblHeight",e.height),this._scaledLuminancePT.setInt("iblWidth",e.width),this._scaledLuminancePT.refreshRate=0,this._iblSource.isCube&&(this._scaledLuminancePT.defines="#define IBL_USE_CUBE_MAP\n"),this._icdfPT=new l("icdfTexture",{width:e.width,height:e.height},"iblIcdf",this._scene,s,!1,!1),this._icdfPT.autoClear=!1,this._icdfPT.setTexture("cdfy",this._cdfyPT),this._icdfPT.setTexture("cdfx",this._cdfxPT),this._icdfPT.setTexture("iblSource",this._iblSource),this._icdfPT.setTexture("scaledLuminanceSampler",this._scaledLuminancePT),this._icdfPT.refreshRate=0,this._icdfPT.wrapV=h.TEXTURE_CLAMP_ADDRESSMODE,this._icdfPT.wrapU=h.TEXTURE_CLAMP_ADDRESSMODE,this._iblSource.isCube&&(this._icdfPT.defines="#define IBL_USE_CUBE_MAP\n"),this._icdfPT.onGeneratedObservable.addOnce(()=>{this.onGeneratedObservable.notifyObservers()}),this._dominantDirectionPT=new l("iblDominantDirection",{width:1,height:1},"iblDominantDirection",this._scene,s,!1,!1),this._dominantDirectionPT.autoClear=!1,this._dominantDirectionPT.setTexture("icdfSampler",this._icdfPT),this._dominantDirectionPT.refreshRate=0,this._dominantDirectionPT.defines="#define NUM_SAMPLES 32u\n",this.onTextureChangedObservable.notifyObservers()}_disposeTextures(){this._cdfyPT?.dispose(),this._cdfxPT?.dispose(),this._icdfPT?.dispose(),this._scaledLuminancePT?.dispose(),this._dominantDirectionPT?.dispose(),this._icdfPT=null,this.onTextureChangedObservable.notifyObservers()}_createDebugPass(){this._debugPass&&this._debugPass.dispose();const e=this._engine.isWebGPU,i={width:this._engine.getRenderWidth(),height:this._engine.getRenderHeight(),samplingMode:s.BILINEAR_SAMPLINGMODE,engine:this._engine,textureType:h.TEXTURETYPE_UNSIGNED_BYTE,uniforms:["sizeParams"],samplers:["cdfy","icdf","cdfx","iblSource"],defines:this._iblSource?.isCube?"#define IBL_USE_CUBE_MAP\n":"",shaderLanguage:e?1:0,extraInitializations:(e,i)=>{e?i.push(import("./iblCdfDebug.fragment-j4JxQFVr.esm.min.js")):i.push(import("./iblCdfDebug.fragment-CHPgwh0n.esm.min.js"))}};this._debugPass=new c(this._debugPassName,"iblCdfDebug",i);const t=this._debugPass.getEffect();t&&(t.defines=this._iblSource?.isCube?"#define IBL_USE_CUBE_MAP\n":""),this._iblSource?.isCube&&this._debugPass.updateEffect("#define IBL_USE_CUBE_MAP\n"),this._debugPass.onApplyObservable.add(e=>{e.setTexture("cdfy",this._cdfyPT),e.setTexture("icdf",this._icdfPT),e.setTexture("cdfx",this._cdfxPT),e.setTexture("iblSource",this._iblSource),e.setFloat4("sizeParams",this._debugSizeParams.x,this._debugSizeParams.y,this._debugSizeParams.z,this._debugSizeParams.w)})}isReady(){return this._iblSource&&"Placeholder IBL Source"!==this._iblSource.name&&this._iblSource.isReady()&&this._cdfyPT&&this._cdfyPT.isReady()&&this._icdfPT&&this._icdfPT.isReady()&&this._cdfxPT&&this._cdfxPT.isReady()&&this._scaledLuminancePT&&this._scaledLuminancePT.isReady()}renderWhenReady(){this._cachedDominantDirection=null;return new Promise((e,i)=>{n(()=>!!this._icdfPT,()=>e(void 0),()=>i(new Error("Waiting for _icdfPT creation failed")))}).then(()=>{const e=this._icdfPT,i=[],t=[this._cdfyPT,this._cdfxPT,this._scaledLuminancePT,e];for(const e of t)i.push(new Promise(i=>{e.isReady()?i():e.getEffect().executeWhenCompiled(()=>{i()})}));return Promise.all(i).then(()=>{for(const e of t)e.render()})})}findDominantDirection(){return this._cachedDominantDirection?Promise.resolve(this._cachedDominantDirection):new Promise(e=>{this._dominantDirectionPT.onGeneratedObservable.addOnce(()=>{const i=new Float32Array(4);this._dominantDirectionPT.readPixels(0,0,i,!0).then(()=>{const t=new _(i[0],i[1],i[2]);this._cachedDominantDirection=t,e(t)})}),this.isReady()?this._dominantDirectionPT.isReady()?this._dominantDirectionPT.render():this._dominantDirectionPT.getEffect().executeWhenCompiled(()=>{this._dominantDirectionPT.render()}):this.onGeneratedObservable.addOnce(()=>{this._dominantDirectionPT.isReady()?this._dominantDirectionPT.render():this._dominantDirectionPT.getEffect().executeWhenCompiled(()=>{this._dominantDirectionPT.render()})})})}dispose(){this._clearIblSourceReadinessObservers(),this._disposeTextures(),this._dummyTexture.dispose(),this._debugPass&&this._debugPass.dispose(),this.onGeneratedObservable.clear()}static _IsScene(e){return"Scene"===e.getClassName()}}P._SceneComponentInitialization=e=>{throw u("IblCdfGeneratorSceneComponentSceneComponent")};var g=Object.freeze({__proto__:null,IblCdfGenerator:P});export{P as I,T as R,m as a,g as i}; //# sourceMappingURL=iblCdfGenerator-Caa9m9di.esm.min.js.map