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) 9 kB
import{a0 as e,C as t,L as r,a1 as T}from"./index-Bw2N6w1y.esm.min.js";e.prototype.restoreSingleAttachment=function(){const e=this._gl;this.bindAttachments([e.BACK])},e.prototype.restoreSingleAttachmentForRenderTarget=function(){const e=this._gl;this.bindAttachments([e.COLOR_ATTACHMENT0])},e.prototype.buildTextureLayout=function(e){const t=this._gl,r=[];for(let T=0;T<e.length;T++)e[T]?r.push(t["COLOR_ATTACHMENT"+T]):r.push(t.NONE);return r},e.prototype.bindAttachments=function(e){this._gl.drawBuffers(e)},e.prototype.unBindMultiColorAttachmentFramebuffer=function(e,t=!1,r){this._currentRenderTarget=null,e.disableAutomaticMSAAResolve||this.resolveMultiFramebuffer(e),t||this.generateMipMapsMultiFramebuffer(e),r&&(e._MSAAFramebuffer&&this._bindUnboundFramebuffer(e._framebuffer),r()),this._bindUnboundFramebuffer(null)},e.prototype.createMultipleRenderTarget=function(e,E,a=!0){let i,n=!1,_=!0,s=!1,f=!1,u=1,l=1;const o=t.TEXTURETYPE_UNSIGNED_BYTE,h=t.TEXTURE_TRILINEAR_SAMPLINGMODE,R=t.TEXTUREFORMAT_RGBA,A=t.TEXTURE_2D;let p=[],d=[],m=[],M=[],b=[],F=[],c=[],U=[],D=[],S=!1;const N=this._createHardwareRenderTargetWrapper(!0,!1,e);void 0!==E&&(n=void 0!==E.generateMipMaps&&E.generateMipMaps,_=void 0===E.generateDepthBuffer||E.generateDepthBuffer,s=void 0!==E.generateStencilBuffer&&E.generateStencilBuffer,f=void 0!==E.generateDepthTexture&&E.generateDepthTexture,u=E.textureCount??1,l=E.samples??l,p=E.types||p,d=E.samplingModes||d,m=E.useSRGBBuffers||m,M=E.formats||M,b=E.targetTypes||b,F=E.faceIndex||F,c=E.layerIndex||c,U=E.layerCounts||U,D=E.labels||D,S=E.dontCreateTextures??!1,this.webGLVersion>1&&(E.depthTextureFormat===t.TEXTUREFORMAT_DEPTH24_STENCIL8||E.depthTextureFormat===t.TEXTUREFORMAT_DEPTH24UNORM_STENCIL8||E.depthTextureFormat===t.TEXTUREFORMAT_DEPTH24||E.depthTextureFormat===t.TEXTUREFORMAT_DEPTH32_FLOAT||E.depthTextureFormat===t.TEXTUREFORMAT_DEPTH32FLOAT_STENCIL8)&&(i=E.depthTextureFormat)),void 0===i&&(i=s?t.TEXTUREFORMAT_DEPTH24_STENCIL8:t.TEXTUREFORMAT_DEPTH32_FLOAT);const g=this._gl,O=this._currentFramebuffer,L=g.createFramebuffer();this._bindUnboundFramebuffer(L);const P=e.width??e,C=e.height??e,B=[],x=[],I=this.webGLVersion>1&&(i===t.TEXTUREFORMAT_DEPTH24_STENCIL8||i===t.TEXTUREFORMAT_DEPTH24UNORM_STENCIL8||i===t.TEXTUREFORMAT_DEPTH32FLOAT_STENCIL8);N.label=E?.label??"MultiRenderTargetWrapper",N._framebuffer=L,N._generateDepthBuffer=f||_,N._generateStencilBuffer=f?I:s,N._depthStencilBuffer=this._setupFramebufferDepthAttachments(N._generateStencilBuffer,N._generateDepthBuffer,P,C,1,i),N._attachments=x;for(let e=0;e<u;e++){let E=d[e]||h,a=p[e]||o,i=m[e]||false;const _=M[e]||R,s=b[e]||A,f=U[e]??1;(a!==t.TEXTURETYPE_FLOAT||this._caps.textureFloatLinearFiltering)&&(a!==t.TEXTURETYPE_HALF_FLOAT||this._caps.textureHalfFloatLinearFiltering)||(E=t.TEXTURE_NEAREST_SAMPLINGMODE);const u=this._getSamplingParameters(E,n);a!==t.TEXTURETYPE_FLOAT||this._caps.textureFloat||(a=t.TEXTURETYPE_UNSIGNED_BYTE,r.Warn("Float textures are not supported. Render target forced to TEXTURETYPE_UNSIGNED_BYTE type")),i=i&&this._caps.supportSRGBBuffers&&(this.webGLVersion>1||this.isWebGPU);const l=this.webGLVersion>1,F=g[l?"COLOR_ATTACHMENT"+e:"COLOR_ATTACHMENT"+e+"_WEBGL"];if(x.push(F),-1===s||S)continue;const c=new T(this,6);B[e]=c,g.activeTexture(g["TEXTURE"+e]),g.bindTexture(s,c._hardwareTexture.underlyingResource),g.texParameteri(s,g.TEXTURE_MAG_FILTER,u.mag),g.texParameteri(s,g.TEXTURE_MIN_FILTER,u.min),g.texParameteri(s,g.TEXTURE_WRAP_S,g.CLAMP_TO_EDGE),g.texParameteri(s,g.TEXTURE_WRAP_T,g.CLAMP_TO_EDGE);const O=this._getRGBABufferInternalSizedFormat(a,_,i),L=this._getInternalFormat(_),I=this._getWebGLTextureType(a);if(!l||s!==t.TEXTURE_2D_ARRAY&&s!==t.TEXTURE_3D)if(s===t.TEXTURE_CUBE_MAP){for(let e=0;e<6;e++)g.texImage2D(g.TEXTURE_CUBE_MAP_POSITIVE_X+e,0,O,P,C,0,L,I,null);c.isCube=!0}else g.texImage2D(g.TEXTURE_2D,0,O,P,C,0,L,I,null);else s===t.TEXTURE_2D_ARRAY?c.is2DArray=!0:c.is3D=!0,c.baseDepth=c.depth=f,g.texImage3D(s,0,O,P,C,f,0,L,I,null);n&&g.generateMipmap(s),this._bindTextureDirectly(s,null),c.baseWidth=P,c.baseHeight=C,c.width=P,c.height=C,c.isReady=!0,c.samples=1,c.generateMipMaps=n,c.samplingMode=E,c.type=a,c._useSRGBBuffer=i,c.format=_,c.label=D[e]??N.label+"-Texture"+e,this._internalTexturesCache.push(c)}if(f&&this._caps.depthTextureExtension&&!S){const e=new T(this,14);let r=t.TEXTURETYPE_UNSIGNED_SHORT,E=g.DEPTH_COMPONENT16,a=g.DEPTH_COMPONENT,_=g.UNSIGNED_SHORT,s=g.DEPTH_ATTACHMENT;this.webGLVersion<2?E=g.DEPTH_COMPONENT:i===t.TEXTUREFORMAT_DEPTH32_FLOAT?(r=t.TEXTURETYPE_FLOAT,_=g.FLOAT,E=g.DEPTH_COMPONENT32F):i===t.TEXTUREFORMAT_DEPTH32FLOAT_STENCIL8?(r=t.TEXTURETYPE_UNSIGNED_BYTE,_=g.FLOAT_32_UNSIGNED_INT_24_8_REV,E=g.DEPTH32F_STENCIL8,a=g.DEPTH_STENCIL,s=g.DEPTH_STENCIL_ATTACHMENT):i===t.TEXTUREFORMAT_DEPTH24?(r=t.TEXTURETYPE_UNSIGNED_BYTE,_=g.UNSIGNED_INT,E=g.DEPTH_COMPONENT24,s=g.DEPTH_ATTACHMENT):i!==t.TEXTUREFORMAT_DEPTH24_STENCIL8&&i!==t.TEXTUREFORMAT_DEPTH24UNORM_STENCIL8||(r=t.TEXTURETYPE_UNSIGNED_INT_24_8,_=g.UNSIGNED_INT_24_8,E=g.DEPTH24_STENCIL8,a=g.DEPTH_STENCIL,s=g.DEPTH_STENCIL_ATTACHMENT),this._bindTextureDirectly(g.TEXTURE_2D,e,!0),g.texParameteri(g.TEXTURE_2D,g.TEXTURE_MAG_FILTER,g.NEAREST),g.texParameteri(g.TEXTURE_2D,g.TEXTURE_MIN_FILTER,g.NEAREST),g.texParameteri(g.TEXTURE_2D,g.TEXTURE_WRAP_S,g.CLAMP_TO_EDGE),g.texParameteri(g.TEXTURE_2D,g.TEXTURE_WRAP_T,g.CLAMP_TO_EDGE),g.texImage2D(g.TEXTURE_2D,0,E,P,C,0,a,_,null),g.framebufferTexture2D(g.FRAMEBUFFER,s,g.TEXTURE_2D,e._hardwareTexture.underlyingResource,0),this._bindTextureDirectly(g.TEXTURE_2D,null),N._depthStencilTexture=e,N._depthStencilTextureWithStencil=I,e.baseWidth=P,e.baseHeight=C,e.width=P,e.height=C,e.isReady=!0,e.samples=1,e.generateMipMaps=n,e.samplingMode=t.TEXTURE_NEAREST_SAMPLINGMODE,e.format=i,e.type=r,e.label=N.label+"-DepthStencil",B[u]=e,this._internalTexturesCache.push(e)}if(N.setTextures(B),a&&g.drawBuffers(x),this._bindUnboundFramebuffer(O),N.setLayerAndFaceIndices(c,F),this.resetTextureCache(),S){if(l>1){const e=g.createFramebuffer();if(!e)throw new Error("Unable to create multi sampled framebuffer");N._samples=l,N._MSAAFramebuffer=e,u>0&&a&&(this._bindUnboundFramebuffer(e),g.drawBuffers(x),this._bindUnboundFramebuffer(O))}}else this.updateMultipleRenderTargetTextureSampleCount(N,l,a);return N},e.prototype.updateMultipleRenderTargetTextureSampleCount=function(e,t,r=!0){if(this.webGLVersion<2||!e)return 1;if(e.samples===t)return t;const T=this._gl;t=Math.min(t,this.getCaps().maxMSAASamples),e._depthStencilBuffer&&(T.deleteRenderbuffer(e._depthStencilBuffer),e._depthStencilBuffer=null),e._MSAAFramebuffer&&(T.deleteFramebuffer(e._MSAAFramebuffer),e._MSAAFramebuffer=null);const E=e._attachments.length;for(let t=0;t<E;t++){const r=e.textures[t]._hardwareTexture;r?.releaseMSAARenderBuffers()}if(t>1&&"function"==typeof T.renderbufferStorageMultisample){const a=T.createFramebuffer();if(!a)throw new Error("Unable to create multi sampled framebuffer");e._MSAAFramebuffer=a,this._bindUnboundFramebuffer(a);const i=[];for(let r=0;r<E;r++){const E=e.textures[r],a=E._hardwareTexture,n=T[this.webGLVersion>1?"COLOR_ATTACHMENT"+r:"COLOR_ATTACHMENT"+r+"_WEBGL"],_=this._createRenderBuffer(E.width,E.height,t,-1,this._getRGBABufferInternalSizedFormat(E.type,E.format,E._useSRGBBuffer),n);if(!_)throw new Error("Unable to create multi sampled framebuffer");a.addMSAARenderBuffer(_),E.samples=t,i.push(n)}r&&T.drawBuffers(i)}else this._bindUnboundFramebuffer(e._framebuffer);const a=e._depthStencilTexture?e._depthStencilTexture.format:void 0;return e._depthStencilBuffer=this._setupFramebufferDepthAttachments(e._generateStencilBuffer,e._generateDepthBuffer,e.width,e.height,t,a),this._bindUnboundFramebuffer(null),e._samples=t,t},e.prototype.generateMipMapsMultiFramebuffer=function(e){const t=e,r=this._gl;if(t.isMulti)for(let e=0;e<t._attachments.length;e++){const T=t.textures[e];!T?.generateMipMaps||T?.isCube||T?.is3D||(this._bindTextureDirectly(r.TEXTURE_2D,T,!0),r.generateMipmap(r.TEXTURE_2D),this._bindTextureDirectly(r.TEXTURE_2D,null))}},e.prototype.resolveMultiFramebuffer=function(e){const t=e,r=this._gl;if(!t._MSAAFramebuffer||!t.isMulti)return;let T=t.resolveMSAAColors?r.COLOR_BUFFER_BIT:0;T|=t._generateDepthBuffer&&t.resolveMSAADepth?r.DEPTH_BUFFER_BIT:0,T|=t._generateStencilBuffer&&t.resolveMSAAStencil?r.STENCIL_BUFFER_BIT:0;const E=t._attachments,a=E.length;r.bindFramebuffer(r.READ_FRAMEBUFFER,t._MSAAFramebuffer),r.bindFramebuffer(r.DRAW_FRAMEBUFFER,t._framebuffer);for(let e=0;e<a;e++){const i=t.textures[e];for(let e=0;e<a;e++)E[e]=r.NONE;E[e]=r[this.webGLVersion>1?"COLOR_ATTACHMENT"+e:"COLOR_ATTACHMENT"+e+"_WEBGL"],r.readBuffer(E[e]),r.drawBuffers(E),r.blitFramebuffer(0,0,i.width,i.height,0,0,i.width,i.height,T,r.NEAREST)}for(let e=0;e<a;e++)E[e]=r[this.webGLVersion>1?"COLOR_ATTACHMENT"+e:"COLOR_ATTACHMENT"+e+"_WEBGL"];r.drawBuffers(E),r.bindFramebuffer(this._gl.FRAMEBUFFER,t._MSAAFramebuffer)}; //# sourceMappingURL=engine.multiRender-gRI12SyD.esm.min.js.map