cione-comp-lib
Version:
`$ yarn add cione-comp-lib` 或者 `$ npm i cione-comp-lib -S`
2 lines (1 loc) • 3.24 kB
JavaScript
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});var t=require("./Texture.js"),e=require("./core/glenum.js"),i=require("./core/vendor.js"),r=require("./math/util.js").default.isPowerOfTwo;function a(t){return Math.pow(2,Math.round(Math.log(t)/Math.LN2))}var h=t.default.extend((function(){return{image:null,pixels:null,mipmaps:[],convertToPOT:!1}}),{textureType:"texture2D",update:function(i){var r=i.gl;r.bindTexture(r.TEXTURE_2D,this._cache.get("webgl_texture")),this.updateCommon(i);var a=this.format,h=this.type,s=!(!this.convertToPOT||this.mipmaps.length||!this.image||this.wrapS!==t.default.REPEAT&&this.wrapT!==t.default.REPEAT||!this.NPOT);r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_S,s?this.wrapS:this.getAvailableWrapS()),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_T,s?this.wrapT:this.getAvailableWrapT()),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MAG_FILTER,s?this.magFilter:this.getAvailableMagFilter()),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MIN_FILTER,s?this.minFilter:this.getAvailableMinFilter());var n=i.getGLExtension("EXT_texture_filter_anisotropic");(n&&this.anisotropic>1&&r.texParameterf(r.TEXTURE_2D,n.TEXTURE_MAX_ANISOTROPY_EXT,this.anisotropic),36193===h)&&(i.getGLExtension("OES_texture_half_float")||(h=e.default.FLOAT));if(this.mipmaps.length)for(var T=this.width,u=this.height,o=0;o<this.mipmaps.length;o++){var g=this.mipmaps[o];this._updateTextureData(r,g,o,T,u,a,h,!1),T/=2,u/=2}else this._updateTextureData(r,this,0,this.width,this.height,a,h,s),!this.useMipmap||this.NPOT&&!s||r.generateMipmap(r.TEXTURE_2D);r.bindTexture(r.TEXTURE_2D,null)},_updateTextureData:function(e,i,r,h,s,n,T,u){if(i.image){var o=i.image;u&&(this._potCanvas=function(t,e){var i=a(t.width),r=a(t.height);return(e=e||document.createElement("canvas")).width=i,e.height=r,e.getContext("2d").drawImage(t.image,0,0,i,r),e}(this,this._potCanvas),o=this._potCanvas),e.texImage2D(e.TEXTURE_2D,r,n,n,T,o)}else n<=t.default.COMPRESSED_RGBA_S3TC_DXT5_EXT&&n>=t.default.COMPRESSED_RGB_S3TC_DXT1_EXT?e.compressedTexImage2D(e.TEXTURE_2D,r,n,h,s,0,i.pixels):e.texImage2D(e.TEXTURE_2D,r,n,h,s,0,n,T,i.pixels)},generateMipmap:function(t){var e=t.gl;this.useMipmap&&!this.NPOT&&(e.bindTexture(e.TEXTURE_2D,this._cache.get("webgl_texture")),e.generateMipmap(e.TEXTURE_2D))},isPowerOfTwo:function(){return r(this.width)&&r(this.height)},isRenderable:function(){return this.image?this.image.width>0&&this.image.height>0:!(!this.width||!this.height)},bind:function(t){t.gl.bindTexture(t.gl.TEXTURE_2D,this.getWebGLTexture(t))},unbind:function(t){t.gl.bindTexture(t.gl.TEXTURE_2D,null)},load:function(t,e){var r=i.default.createImage();e&&(r.crossOrigin=e);var a=this;return r.onload=function(){a.dirty(),a.trigger("success",a)},r.onerror=function(){a.trigger("error",a)},r.src=t,this.image=r,this}});Object.defineProperty(h.prototype,"width",{get:function(){return this.image?this.image.width:this._width},set:function(t){this.image||(this._width!==t&&this.dirty(),this._width=t)}}),Object.defineProperty(h.prototype,"height",{get:function(){return this.image?this.image.height:this._height},set:function(t){this.image||(this._height!==t&&this.dirty(),this._height=t)}});var s=h;exports.default=s;