cione-comp-lib
Version:
`$ yarn add cione-comp-lib` 或者 `$ npm i cione-comp-lib -S`
2 lines (1 loc) • 4.48 kB
JavaScript
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});var e=require("./core/Base.js"),t=require("./Texture.js"),r=require("./core/glenum.js"),u=require("./core/Cache.js"),f=r.default.FRAMEBUFFER,i=r.default.RENDERBUFFER,a=r.default.DEPTH_ATTACHMENT,_=r.default.COLOR_ATTACHMENT0,h=e.default.extend({depthBuffer:!0,viewport:null,_width:0,_height:0,_textures:null,_boundRenderer:null},(function(){this._cache=new u.default,this._textures={}}),{getTextureWidth:function(){return this._width},getTextureHeight:function(){return this._height},bind:function(e){if(!e.__currentFrameBuffer||e.__currentFrameBuffer!==this){e.__currentFrameBuffer=this;var t=e.gl;t.bindFramebuffer(f,this._getFrameBufferGL(e)),this._boundRenderer=e;var r=this._cache;r.put("viewport",e.viewport);var u,_,h=!1;for(var d in this._textures){h=!0;var n=this._textures[d];n&&(u=n.texture.width,_=n.texture.height,this._doAttach(e,n.texture,d,n.target))}this._width=u,this._height=_,!h&&this.depthBuffer,this.viewport?e.setViewport(this.viewport):e.setViewport(0,0,u,_,1);var s=r.get("attached_textures");if(s)for(var d in s)if(!this._textures[d]){var c=s[d];this._doDetach(t,d,c)}if(!r.get("depthtexture_attached")&&this.depthBuffer){r.miss("renderbuffer")&&r.put("renderbuffer",t.createRenderbuffer());var T=r.get("renderbuffer");u===r.get("renderbuffer_width")&&_===r.get("renderbuffer_height")||(t.bindRenderbuffer(i,T),t.renderbufferStorage(i,t.DEPTH_COMPONENT16,u,_),r.put("renderbuffer_width",u),r.put("renderbuffer_height",_),t.bindRenderbuffer(i,null)),r.get("renderbuffer_attached")||(t.framebufferRenderbuffer(f,a,i,T),r.put("renderbuffer_attached",!0))}}},unbind:function(e){e.__currentFrameBuffer=null,e.gl.bindFramebuffer(f,null),this._boundRenderer=null,this._cache.use(e.__uid__);var t=this._cache.get("viewport");t&&e.setViewport(t),this.updateMipmap(e)},updateMipmap:function(e){var u=e.gl;for(var f in this._textures){var i=this._textures[f];if(i){var a=i.texture;if(!a.NPOT&&a.useMipmap&&a.minFilter===t.default.LINEAR_MIPMAP_LINEAR){var _="textureCube"===a.textureType?r.default.TEXTURE_CUBE_MAP:r.default.TEXTURE_2D;u.bindTexture(_,a.getWebGLTexture(e)),u.generateMipmap(_),u.bindTexture(_,null)}}}},checkStatus:function(e){return e.checkFramebufferStatus(f)},_getFrameBufferGL:function(e){var t=this._cache;return t.use(e.__uid__),t.miss("framebuffer")&&t.put("framebuffer",e.gl.createFramebuffer()),t.get("framebuffer")},attach:function(e,t,u){if(!e.width)throw new Error("The texture attached to color buffer is not a valid.");t=t||_,u=u||r.default.TEXTURE_2D;var f,i=this._boundRenderer;if(i&&i.gl){var a=this._cache;a.use(i.__uid__),f=a.get("attached_textures")}var h=this._textures[t];if(!h||h.target!==u||h.texture!==e||!f||null==f[t]){var d=!0;i&&(d=this._doAttach(i,e,t,u),this.viewport||i.setViewport(0,0,e.width,e.height,1)),d&&(this._textures[t]=this._textures[t]||{},this._textures[t].texture=e,this._textures[t].target=u)}},_doAttach:function(e,t,u,_){var h=e.gl,d=t.getWebGLTexture(e),n=this._cache.get("attached_textures");if(n&&n[u]){var s=n[u];if(s.texture===t&&s.target===_)return}var c=!0;if(((u=+u)===a||u===r.default.DEPTH_STENCIL_ATTACHMENT)&&(e.getGLExtension("WEBGL_depth_texture")||(c=!1),t.format!==r.default.DEPTH_COMPONENT&&t.format!==r.default.DEPTH_STENCIL&&(c=!1),c)){var T=this._cache.get("renderbuffer");T&&(h.framebufferRenderbuffer(f,a,i,null),h.deleteRenderbuffer(T),this._cache.put("renderbuffer",!1)),this._cache.put("renderbuffer_attached",!1),this._cache.put("depthtexture_attached",!0)}return h.framebufferTexture2D(f,u,_,d,0),n||(n={},this._cache.put("attached_textures",n)),n[u]=n[u]||{},n[u].texture=t,n[u].target=_,c},_doDetach:function(e,t,u){e.framebufferTexture2D(f,t,u,null,0);var i=this._cache.get("attached_textures");i&&i[t]&&(i[t]=null),t!==a&&t!==r.default.DEPTH_STENCIL_ATTACHMENT||this._cache.put("depthtexture_attached",!1)},detach:function(e,t){(this._textures[e]=null,this._boundRenderer)&&(this._cache.use(this._boundRenderer.__uid__),this._doDetach(this._boundRenderer.gl,e,t))},dispose:function(e){var t=e.gl,r=this._cache;r.use(e.__uid__);var u=r.get("renderbuffer");u&&t.deleteRenderbuffer(u);var f=r.get("framebuffer");f&&t.deleteFramebuffer(f),r.deleteContext(e.__uid__),this._textures={}}});h.DEPTH_ATTACHMENT=a,h.COLOR_ATTACHMENT0=_,h.STENCIL_ATTACHMENT=r.default.STENCIL_ATTACHMENT,h.DEPTH_STENCIL_ATTACHMENT=r.default.DEPTH_STENCIL_ATTACHMENT;var d=h;exports.default=d;