Browse Source

Added fix for troubles with setting anisotropy for float textures on Linux.

Phew! Thanks @mrdoob for valiant testing.
alteredq 13 years ago
parent
commit
c078ef182d
3 changed files with 133 additions and 133 deletions
  1. 57 57
      build/Three.js
  2. 74 74
      build/custom/ThreeWebGL.js
  3. 2 2
      src/renderers/WebGLRenderer.js

+ 57 - 57
build/Three.js

@@ -241,7 +241,7 @@ THREE.Scene.prototype.__removeObject=function(a){if(a instanceof THREE.Light){va
 THREE.Fog=function(a,b,c){this.color=new THREE.Color(a);this.near=b!==void 0?b:1;this.far=c!==void 0?c:1E3};THREE.FogExp2=function(a,b){this.color=new THREE.Color(a);this.density=b!==void 0?b:2.5E-4};
 THREE.CanvasRenderer=function(a){function b(a){if(w!==a)w=o.globalAlpha=a}function c(a){if(t!==a){if(a===THREE.NormalBlending)o.globalCompositeOperation="source-over";else if(a===THREE.AdditiveBlending)o.globalCompositeOperation="lighter";else if(a===THREE.SubtractiveBlending)o.globalCompositeOperation="darker";t=a}}function d(a){if(v!==a)v=o.strokeStyle=a}function e(a){if(x!==a)x=o.fillStyle=a}console.log("THREE.CanvasRenderer",THREE.REVISION);var a=a||{},f=this,g,h,i,j=new THREE.Projector,l=a.canvas!==
 void 0?a.canvas:document.createElement("canvas"),m,n,p,r,o=l.getContext("2d"),q=new THREE.Color(0),s=0,w=1,t=0,v=null,x=null,C=null,D=null,z=null,u,G,J,M,O=new THREE.RenderableVertex,X=new THREE.RenderableVertex,B,F,Q,E,aa,T,N,W,ba,H,ca,ia,S=new THREE.Color,R=new THREE.Color,P=new THREE.Color,U=new THREE.Color,fa=new THREE.Color,ma=[],Ga=[],na,Oa,Pa,bb,nb,gb,Ob,ob,kb,ec,Ua=new THREE.Rectangle,Da=new THREE.Rectangle,Aa=new THREE.Rectangle,hb=false,qa=new THREE.Color,Fa=new THREE.Color,Ra=new THREE.Color,
-sa=new THREE.Vector3,k,Ya,Gb,Va,cb,pb,a=16;k=document.createElement("canvas");k.width=k.height=2;Ya=k.getContext("2d");Ya.fillStyle="rgba(0,0,0,1)";Ya.fillRect(0,0,2,2);Gb=Ya.getImageData(0,0,2,2);Va=Gb.data;cb=document.createElement("canvas");cb.width=cb.height=a;pb=cb.getContext("2d");pb.translate(-a/2,-a/2);pb.scale(a,a);a--;this.domElement=l;this.sortElements=this.sortObjects=this.autoClear=true;this.info={render:{vertices:0,faces:0}};this.setSize=function(a,b){m=a;n=b;p=Math.floor(m/2);r=Math.floor(n/
+sa=new THREE.Vector3,k,Ya,Gb,Va,pb,cb,a=16;k=document.createElement("canvas");k.width=k.height=2;Ya=k.getContext("2d");Ya.fillStyle="rgba(0,0,0,1)";Ya.fillRect(0,0,2,2);Gb=Ya.getImageData(0,0,2,2);Va=Gb.data;pb=document.createElement("canvas");pb.width=pb.height=a;cb=pb.getContext("2d");cb.translate(-a/2,-a/2);cb.scale(a,a);a--;this.domElement=l;this.sortElements=this.sortObjects=this.autoClear=true;this.info={render:{vertices:0,faces:0}};this.setSize=function(a,b){m=a;n=b;p=Math.floor(m/2);r=Math.floor(n/
 2);l.width=m;l.height=n;Ua.set(-p,-r,p,r);Da.set(-p,-r,p,r);w=1;t=0;z=D=C=x=v=null};this.setClearColor=function(a,b){q.copy(a);s=b!==void 0?b:1;Da.set(-p,-r,p,r)};this.setClearColorHex=function(a,b){q.setHex(a);s=b!==void 0?b:1;Da.set(-p,-r,p,r)};this.clear=function(){o.setTransform(1,0,0,-1,p,r);if(Da.isEmpty()===false){Da.minSelf(Ua);Da.inflate(2);s<1&&o.clearRect(Math.floor(Da.getX()),Math.floor(Da.getY()),Math.floor(Da.getWidth()),Math.floor(Da.getHeight()));if(s>0){c(THREE.NormalBlending);b(1);
 e("rgba("+Math.floor(q.r*255)+","+Math.floor(q.g*255)+","+Math.floor(q.b*255)+","+s+")");o.fillRect(Math.floor(Da.getX()),Math.floor(Da.getY()),Math.floor(Da.getWidth()),Math.floor(Da.getHeight()))}Da.empty()}};this.render=function(a,l){function m(a){var b,c,d,e;qa.setRGB(0,0,0);Fa.setRGB(0,0,0);Ra.setRGB(0,0,0);b=0;for(c=a.length;b<c;b++){d=a[b];e=d.color;if(d instanceof THREE.AmbientLight){qa.r=qa.r+e.r;qa.g=qa.g+e.g;qa.b=qa.b+e.b}else if(d instanceof THREE.DirectionalLight){Fa.r=Fa.r+e.r;Fa.g=
 Fa.g+e.g;Fa.b=Fa.b+e.b}else if(d instanceof THREE.PointLight){Ra.r=Ra.r+e.r;Ra.g=Ra.g+e.g;Ra.b=Ra.b+e.b}}}function n(a,b,c,d){var e,f,g,h,k,i;e=0;for(f=a.length;e<f;e++){g=a[e];h=g.color;if(g instanceof THREE.DirectionalLight){k=g.matrixWorld.getPosition();i=c.dot(k);if(!(i<=0)){i=i*g.intensity;d.r=d.r+h.r*i;d.g=d.g+h.g*i;d.b=d.b+h.b*i}}else if(g instanceof THREE.PointLight){k=g.matrixWorld.getPosition();i=c.dot(sa.sub(k,b).normalize());if(!(i<=0)){i=i*(g.distance==0?1:1-Math.min(b.distanceTo(k)/
@@ -262,7 +262,7 @@ na,Oa);U.r=U.g=U.b=1-gc(g.positionScreen.z,na,Oa);fa.r=fa.g=fa.b=1-gc(e.position
 e;d(a.getContextStyle());o.stroke();Aa.inflate(b*2)}function Hb(a){e(a.getContextStyle());o.fill()}function kd(a,b,c,d,f,g,h,k,i,j,m,l,n){if(!(n.image===void 0||n.image.width===0)){if(n.needsUpdate===true||ma[n.id]===void 0){var p=n.wrapS==THREE.RepeatWrapping,fc=n.wrapT==THREE.RepeatWrapping;ma[n.id]=o.createPattern(n.image,p===true&&fc===true?"repeat":p===true&&fc===false?"repeat-x":p===false&&fc===true?"repeat-y":"no-repeat");n.needsUpdate=false}e(ma[n.id]);var p=n.offset.x/n.repeat.x,fc=n.offset.y/
 n.repeat.y,r=n.image.width*n.repeat.x,q=n.image.height*n.repeat.y,h=(h+p)*r,k=(1-k+fc)*q,c=c-a,d=d-b,f=f-a,g=g-b,i=(i+p)*r-h,j=(1-j+fc)*q-k,m=(m+p)*r-h,l=(1-l+fc)*q-k,p=i*l-m*j;if(p===0){if(Ga[n.id]===void 0){b=document.createElement("canvas");b.width=n.image.width;b.height=n.image.height;b=b.getContext("2d");b.drawImage(n.image,0,0);Ga[n.id]=b.getImageData(0,0,n.image.width,n.image.height).data}b=Ga[n.id];h=(Math.floor(h)+Math.floor(k)*n.image.width)*4;S.setRGB(b[h]/255,b[h+1]/255,b[h+2]/255);Hb(S)}else{p=
 1/p;n=(l*c-j*f)*p;j=(l*d-j*g)*p;c=(i*f-m*c)*p;d=(i*g-m*d)*p;a=a-n*h-c*k;h=b-j*h-d*k;o.save();o.transform(n,j,c,d,a,h);o.fill();o.restore()}}}function mc(a,b,c,d,e,f,g,h,k,i,j,m,l){var n,p;n=l.width-1;p=l.height-1;g=g*n;h=h*p;c=c-a;d=d-b;e=e-a;f=f-b;k=k*n-g;i=i*p-h;j=j*n-g;m=m*p-h;p=1/(k*m-j*i);n=(m*c-i*e)*p;i=(m*d-i*f)*p;c=(k*e-j*c)*p;d=(k*f-j*d)*p;a=a-n*g-c*h;b=b-i*g-d*h;o.save();o.transform(n,i,c,d,a,b);o.clip();o.drawImage(l,0,0);o.restore()}function Ic(a,b,c,d){var e=~~(a.r*255),f=~~(a.g*255),
-a=~~(a.b*255),g=~~(b.r*255),h=~~(b.g*255),b=~~(b.b*255),i=~~(c.r*255),j=~~(c.g*255),c=~~(c.b*255),m=~~(d.r*255),l=~~(d.g*255),d=~~(d.b*255);Va[0]=e<0?0:e>255?255:e;Va[1]=f<0?0:f>255?255:f;Va[2]=a<0?0:a>255?255:a;Va[4]=g<0?0:g>255?255:g;Va[5]=h<0?0:h>255?255:h;Va[6]=b<0?0:b>255?255:b;Va[8]=i<0?0:i>255?255:i;Va[9]=j<0?0:j>255?255:j;Va[10]=c<0?0:c>255?255:c;Va[12]=m<0?0:m>255?255:m;Va[13]=l<0?0:l>255?255:l;Va[14]=d<0?0:d>255?255:d;Ya.putImageData(Gb,0,0);pb.drawImage(k,0,0);return cb}function gc(a,b,
+a=~~(a.b*255),g=~~(b.r*255),h=~~(b.g*255),b=~~(b.b*255),i=~~(c.r*255),j=~~(c.g*255),c=~~(c.b*255),m=~~(d.r*255),l=~~(d.g*255),d=~~(d.b*255);Va[0]=e<0?0:e>255?255:e;Va[1]=f<0?0:f>255?255:f;Va[2]=a<0?0:a>255?255:a;Va[4]=g<0?0:g>255?255:g;Va[5]=h<0?0:h>255?255:h;Va[6]=b<0?0:b>255?255:b;Va[8]=i<0?0:i>255?255:i;Va[9]=j<0?0:j>255?255:j;Va[10]=c<0?0:c>255?255:c;Va[12]=m<0?0:m>255?255:m;Va[13]=l<0?0:l>255?255:l;Va[14]=d<0?0:d>255?255:d;Ya.putImageData(Gb,0,0);cb.drawImage(k,0,0);return pb}function gc(a,b,
 c){a=(a-b)/(c-b);return a*a*(3-2*a)}function nc(a){a=(a+1)*0.5;return a<0?0:a>1?1:a}function Qb(a,b){var c=b.x-a.x,d=b.y-a.y,e=c*c+d*d;if(e!==0){e=1/Math.sqrt(e);c=c*e;d=d*e;b.x=b.x+c;b.y=b.y+d;a.x=a.x-c;a.y=a.y-d}}var Jc,ld,Ma,ib;this.autoClear===true?this.clear():o.setTransform(1,0,0,-1,p,r);f.info.render.vertices=0;f.info.render.faces=0;g=j.projectScene(a,l,this.sortElements);h=g.elements;i=g.lights;hb=i.length>0;hb===true&&m(i);Jc=0;for(ld=h.length;Jc<ld;Jc++){Ma=h[Jc];ib=Ma.material;ib=ib instanceof
 THREE.MeshFaceMaterial?Ma.faceMaterial:ib;if(!(ib===void 0||ib.visible===false)){Aa.empty();if(Ma instanceof THREE.RenderableParticle){u=Ma;u.x=u.x*p;u.y=u.y*r;q(u,Ma,ib,a)}else if(Ma instanceof THREE.RenderableLine){u=Ma.v1;G=Ma.v2;u.positionScreen.x=u.positionScreen.x*p;u.positionScreen.y=u.positionScreen.y*r;G.positionScreen.x=G.positionScreen.x*p;G.positionScreen.y=G.positionScreen.y*r;Aa.addPoint(u.positionScreen.x,u.positionScreen.y);Aa.addPoint(G.positionScreen.x,G.positionScreen.y);Ua.intersects(Aa)===
 true&&s(u,G,Ma,ib,a)}else if(Ma instanceof THREE.RenderableFace3){u=Ma.v1;G=Ma.v2;J=Ma.v3;u.positionScreen.x=u.positionScreen.x*p;u.positionScreen.y=u.positionScreen.y*r;G.positionScreen.x=G.positionScreen.x*p;G.positionScreen.y=G.positionScreen.y*r;J.positionScreen.x=J.positionScreen.x*p;J.positionScreen.y=J.positionScreen.y*r;if(ib.overdraw===true){Qb(u.positionScreen,G.positionScreen);Qb(G.positionScreen,J.positionScreen);Qb(J.positionScreen,u.positionScreen)}Aa.add3Points(u.positionScreen.x,u.positionScreen.y,
@@ -335,60 +335,60 @@ j)}else if(l==="tv"){if(e._array===void 0){e._array=[];l=0;for(n=e.texture.lengt
 d.skinning)&&h.viewMatrix!==null&&k.uniformMatrix4fv(h.viewMatrix,false,a._viewMatrixArray)}if(d.skinning)if(dc&&f.useVertexTexture){if(h.boneTexture!==null){k.uniform1i(h.boneTexture,12);E.setTexture(f.boneTexture,12)}}else h.boneGlobalMatrices!==null&&k.uniformMatrix4fv(h.boneGlobalMatrices,false,f.boneMatrices);k.uniformMatrix4fv(h.modelViewMatrix,false,f._modelViewMatrix.elements);h.normalMatrix&&k.uniformMatrix3fv(h.normalMatrix,false,f._normalMatrix.elements);h.objectMatrix!==null&&k.uniformMatrix4fv(h.objectMatrix,
 false,f.matrixWorld.elements);return g}function s(a,b){a._modelViewMatrix.multiply(b.matrixWorldInverse,a.matrixWorld);a._normalMatrix.getInverse(a._modelViewMatrix);a._normalMatrix.transpose()}function w(a,b,c){if(Oa!==a){a?k.enable(k.POLYGON_OFFSET_FILL):k.disable(k.POLYGON_OFFSET_FILL);Oa=a}if(a&&(Pa!==b||bb!==c)){k.polygonOffset(b,c);Pa=b;bb=c}}function t(a,b){var c;a==="fragment"?c=k.createShader(k.FRAGMENT_SHADER):a==="vertex"&&(c=k.createShader(k.VERTEX_SHADER));k.shaderSource(c,b);k.compileShader(c);
 if(!k.getShaderParameter(c,k.COMPILE_STATUS)){console.error(k.getShaderInfoLog(c));console.error(b);return null}return c}function v(a,b,c){if(c){k.texParameteri(a,k.TEXTURE_WRAP_S,D(b.wrapS));k.texParameteri(a,k.TEXTURE_WRAP_T,D(b.wrapT));k.texParameteri(a,k.TEXTURE_MAG_FILTER,D(b.magFilter));k.texParameteri(a,k.TEXTURE_MIN_FILTER,D(b.minFilter))}else{k.texParameteri(a,k.TEXTURE_WRAP_S,k.CLAMP_TO_EDGE);k.texParameteri(a,k.TEXTURE_WRAP_T,k.CLAMP_TO_EDGE);k.texParameteri(a,k.TEXTURE_MAG_FILTER,C(b.magFilter));
-k.texParameteri(a,k.TEXTURE_MIN_FILTER,C(b.minFilter))}Ya&&k.texParameterf(a,Ya.TEXTURE_MAX_ANISOTROPY_EXT,b.anisotropy)}function x(a,b){k.bindRenderbuffer(k.RENDERBUFFER,a);if(b.depthBuffer&&!b.stencilBuffer){k.renderbufferStorage(k.RENDERBUFFER,k.DEPTH_COMPONENT16,b.width,b.height);k.framebufferRenderbuffer(k.FRAMEBUFFER,k.DEPTH_ATTACHMENT,k.RENDERBUFFER,a)}else if(b.depthBuffer&&b.stencilBuffer){k.renderbufferStorage(k.RENDERBUFFER,k.DEPTH_STENCIL,b.width,b.height);k.framebufferRenderbuffer(k.FRAMEBUFFER,
-k.DEPTH_STENCIL_ATTACHMENT,k.RENDERBUFFER,a)}else k.renderbufferStorage(k.RENDERBUFFER,k.RGBA4,b.width,b.height)}function C(a){return a===THREE.NearestFilter||a===THREE.NearestMipMapNearestFilter||a===THREE.NearestMipMapLinearFilter?k.NEAREST:k.LINEAR}function D(a){return a===THREE.RepeatWrapping?k.REPEAT:a===THREE.ClampToEdgeWrapping?k.CLAMP_TO_EDGE:a===THREE.MirroredRepeatWrapping?k.MIRRORED_REPEAT:a===THREE.NearestFilter?k.NEAREST:a===THREE.NearestMipMapNearestFilter?k.NEAREST_MIPMAP_NEAREST:a===
-THREE.NearestMipMapLinearFilter?k.NEAREST_MIPMAP_LINEAR:a===THREE.LinearFilter?k.LINEAR:a===THREE.LinearMipMapNearestFilter?k.LINEAR_MIPMAP_NEAREST:a===THREE.LinearMipMapLinearFilter?k.LINEAR_MIPMAP_LINEAR:a===THREE.UnsignedByteType?k.UNSIGNED_BYTE:a===THREE.UnsignedShort4444Type?k.UNSIGNED_SHORT_4_4_4_4:a===THREE.UnsignedShort5551Type?k.UNSIGNED_SHORT_5_5_5_1:a===THREE.UnsignedShort565Type?k.UNSIGNED_SHORT_5_6_5:a===THREE.ByteType?k.BYTE:a===THREE.ShortType?k.SHORT:a===THREE.UnsignedShortType?k.UNSIGNED_SHORT:
-a===THREE.IntType?k.INT:a===THREE.UnsignedIntType?k.UNSIGNED_INT:a===THREE.FloatType?k.FLOAT:a===THREE.AlphaFormat?k.ALPHA:a===THREE.RGBFormat?k.RGB:a===THREE.RGBAFormat?k.RGBA:a===THREE.LuminanceFormat?k.LUMINANCE:a===THREE.LuminanceAlphaFormat?k.LUMINANCE_ALPHA:a===THREE.AddEquation?k.FUNC_ADD:a===THREE.SubtractEquation?k.FUNC_SUBTRACT:a===THREE.ReverseSubtractEquation?k.FUNC_REVERSE_SUBTRACT:a===THREE.ZeroFactor?k.ZERO:a===THREE.OneFactor?k.ONE:a===THREE.SrcColorFactor?k.SRC_COLOR:a===THREE.OneMinusSrcColorFactor?
-k.ONE_MINUS_SRC_COLOR:a===THREE.SrcAlphaFactor?k.SRC_ALPHA:a===THREE.OneMinusSrcAlphaFactor?k.ONE_MINUS_SRC_ALPHA:a===THREE.DstAlphaFactor?k.DST_ALPHA:a===THREE.OneMinusDstAlphaFactor?k.ONE_MINUS_DST_ALPHA:a===THREE.DstColorFactor?k.DST_COLOR:a===THREE.OneMinusDstColorFactor?k.ONE_MINUS_DST_COLOR:a===THREE.SrcAlphaSaturateFactor?k.SRC_ALPHA_SATURATE:0}console.log("THREE.WebGLRenderer",THREE.REVISION);var a=a||{},z=a.canvas!==void 0?a.canvas:document.createElement("canvas"),u=a.precision!==void 0?
-a.precision:"highp",G=a.alpha!==void 0?a.alpha:true,J=a.premultipliedAlpha!==void 0?a.premultipliedAlpha:true,M=a.antialias!==void 0?a.antialias:false,O=a.stencil!==void 0?a.stencil:true,X=a.preserveDrawingBuffer!==void 0?a.preserveDrawingBuffer:false,B=a.clearColor!==void 0?new THREE.Color(a.clearColor):new THREE.Color(0),F=a.clearAlpha!==void 0?a.clearAlpha:0,Q=a.maxLights!==void 0?a.maxLights:4;this.domElement=z;this.context=null;this.autoUpdateScene=this.autoUpdateObjects=this.sortObjects=this.autoClearStencil=
-this.autoClearDepth=this.autoClearColor=this.autoClear=true;this.shadowMapEnabled=this.physicallyBasedShading=this.gammaOutput=this.gammaInput=false;this.shadowMapCullFrontFaces=this.shadowMapSoft=this.shadowMapAutoUpdate=true;this.shadowMapCascade=this.shadowMapDebug=false;this.maxMorphTargets=8;this.maxMorphNormals=4;this.autoScaleCubemaps=true;this.renderPluginsPre=[];this.renderPluginsPost=[];this.info={memory:{programs:0,geometries:0,textures:0},render:{calls:0,vertices:0,faces:0,points:0}};
-var E=this,aa=[],T=0,N=null,W=null,ba=-1,H=null,ca=null,ia=0,S=-1,R=-1,P=-1,U=-1,fa=-1,ma=-1,Ga=-1,na=-1,Oa=null,Pa=null,bb=null,nb=null,gb=0,Ob=0,ob=0,kb=0,ec=0,Ua=0,Da=new THREE.Frustum,Aa=new THREE.Matrix4,hb=new THREE.Matrix4,qa=new THREE.Vector4,Fa=new THREE.Vector3,Ra=true,sa={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[],distances:[]},spot:{length:0,colors:[],positions:[],distances:[],directions:[],angles:[],exponents:[]}},k,Ya;try{if(!(k=
-z.getContext("experimental-webgl",{alpha:G,premultipliedAlpha:J,antialias:M,stencil:O,preserveDrawingBuffer:X})))throw"Error creating WebGL context.";}catch(Gb){console.error(Gb)}a=k.getExtension("OES_texture_float");G=k.getExtension("OES_standard_derivatives");Ya=k.getExtension("EXT_texture_filter_anisotropic")||k.getExtension("MOZ_EXT_texture_filter_anisotropic")||k.getExtension("WEBKIT_EXT_texture_filter_anisotropic");a||console.log("THREE.WebGLRenderer: Float textures not supported.");G||console.log("THREE.WebGLRenderer: Standard derivatives not supported.");
-Ya||console.log("THREE.WebGLRenderer: Anisotropic texture filtering not supported.");k.clearColor(0,0,0,1);k.clearDepth(1);k.clearStencil(0);k.enable(k.DEPTH_TEST);k.depthFunc(k.LEQUAL);k.frontFace(k.CCW);k.cullFace(k.BACK);k.enable(k.CULL_FACE);k.enable(k.BLEND);k.blendEquation(k.FUNC_ADD);k.blendFunc(k.SRC_ALPHA,k.ONE_MINUS_SRC_ALPHA);k.clearColor(B.r,B.g,B.b,F);this.context=k;G=k.getParameter(k.MAX_VERTEX_TEXTURE_IMAGE_UNITS);k.getParameter(k.MAX_TEXTURE_SIZE);var Va=k.getParameter(k.MAX_CUBE_MAP_TEXTURE_SIZE),
-cb=Ya?k.getParameter(Ya.MAX_TEXTURE_MAX_ANISOTROPY_EXT):0,pb=G>0,dc=pb&&a;this.getContext=function(){return k};this.supportsVertexTextures=function(){return pb};this.getMaxAnisotropy=function(){return cb};this.setSize=function(a,b){z.width=a;z.height=b;this.setViewport(0,0,z.width,z.height)};this.setViewport=function(a,b,c,d){gb=a!==void 0?a:0;Ob=b!==void 0?b:0;ob=c!==void 0?c:z.width;kb=d!==void 0?d:z.height;k.viewport(gb,Ob,ob,kb)};this.setScissor=function(a,b,c,d){k.scissor(a,b,c,d)};this.enableScissorTest=
-function(a){a?k.enable(k.SCISSOR_TEST):k.disable(k.SCISSOR_TEST)};this.setClearColorHex=function(a,b){B.setHex(a);F=b;k.clearColor(B.r,B.g,B.b,F)};this.setClearColor=function(a,b){B.copy(a);F=b;k.clearColor(B.r,B.g,B.b,F)};this.getClearColor=function(){return B};this.getClearAlpha=function(){return F};this.clear=function(a,b,c){var d=0;if(a===void 0||a)d=d|k.COLOR_BUFFER_BIT;if(b===void 0||b)d=d|k.DEPTH_BUFFER_BIT;if(c===void 0||c)d=d|k.STENCIL_BUFFER_BIT;k.clear(d)};this.clearTarget=function(a,b,
-c,d){this.setRenderTarget(a);this.clear(b,c,d)};this.addPostPlugin=function(a){a.init(this);this.renderPluginsPost.push(a)};this.addPrePlugin=function(a){a.init(this);this.renderPluginsPre.push(a)};this.deallocateObject=function(a){if(a.__webglInit){a.__webglInit=false;delete a._modelViewMatrix;delete a._normalMatrix;delete a._normalMatrixArray;delete a._modelViewMatrixArray;delete a._objectMatrixArray;if(a instanceof THREE.Mesh)for(var b in a.geometry.geometryGroups){var c=a.geometry.geometryGroups[b];
-k.deleteBuffer(c.__webglVertexBuffer);k.deleteBuffer(c.__webglNormalBuffer);k.deleteBuffer(c.__webglTangentBuffer);k.deleteBuffer(c.__webglColorBuffer);k.deleteBuffer(c.__webglUVBuffer);k.deleteBuffer(c.__webglUV2Buffer);k.deleteBuffer(c.__webglSkinVertexABuffer);k.deleteBuffer(c.__webglSkinVertexBBuffer);k.deleteBuffer(c.__webglSkinIndicesBuffer);k.deleteBuffer(c.__webglSkinWeightsBuffer);k.deleteBuffer(c.__webglFaceBuffer);k.deleteBuffer(c.__webglLineBuffer);var d=void 0,e=void 0;if(c.numMorphTargets){d=
-0;for(e=c.numMorphTargets;d<e;d++)k.deleteBuffer(c.__webglMorphTargetsBuffers[d])}if(c.numMorphNormals){d=0;for(e=c.numMorphNormals;d<e;d++)k.deleteBuffer(c.__webglMorphNormalsBuffers[d])}if(c.__webglCustomAttributesList){d=void 0;for(d in c.__webglCustomAttributesList)k.deleteBuffer(c.__webglCustomAttributesList[d].buffer)}E.info.memory.geometries--}else if(a instanceof THREE.Ribbon){a=a.geometry;k.deleteBuffer(a.__webglVertexBuffer);k.deleteBuffer(a.__webglColorBuffer);E.info.memory.geometries--}else if(a instanceof
-THREE.Line){a=a.geometry;k.deleteBuffer(a.__webglVertexBuffer);k.deleteBuffer(a.__webglColorBuffer);E.info.memory.geometries--}else if(a instanceof THREE.ParticleSystem){a=a.geometry;k.deleteBuffer(a.__webglVertexBuffer);k.deleteBuffer(a.__webglColorBuffer);E.info.memory.geometries--}}};this.deallocateTexture=function(a){if(a.__webglInit){a.__webglInit=false;k.deleteTexture(a.__webglTexture);E.info.memory.textures--}};this.deallocateRenderTarget=function(a){if(a&&a.__webglTexture){k.deleteTexture(a.__webglTexture);
-if(a instanceof THREE.WebGLRenderTargetCube)for(var b=0;b<6;b++){k.deleteFramebuffer(a.__webglFramebuffer[b]);k.deleteRenderbuffer(a.__webglRenderbuffer[b])}else{k.deleteFramebuffer(a.__webglFramebuffer);k.deleteRenderbuffer(a.__webglRenderbuffer)}}};this.deallocateMaterial=function(a){var b=a.program;if(b){a.program=void 0;var c,d,e=false,a=0;for(c=aa.length;a<c;a++){d=aa[a];if(d.program===b){d.usedTimes--;d.usedTimes===0&&(e=true);break}}if(e){e=[];a=0;for(c=aa.length;a<c;a++){d=aa[a];d.program!==
-b&&e.push(d)}aa=e;k.deleteProgram(b);E.info.memory.programs--}}};this.updateShadowMap=function(a,b){N=null;ba=H=na=Ga=P=-1;Ra=true;R=S=-1;this.shadowMapPlugin.update(a,b)};this.renderBufferImmediate=function(a,b,c){if(a.hasPositions&&!a.__webglVertexBuffer)a.__webglVertexBuffer=k.createBuffer();if(a.hasNormals&&!a.__webglNormalBuffer)a.__webglNormalBuffer=k.createBuffer();if(a.hasUvs&&!a.__webglUvBuffer)a.__webglUvBuffer=k.createBuffer();if(a.hasColors&&!a.__webglColorBuffer)a.__webglColorBuffer=
-k.createBuffer();if(a.hasPositions){k.bindBuffer(k.ARRAY_BUFFER,a.__webglVertexBuffer);k.bufferData(k.ARRAY_BUFFER,a.positionArray,k.DYNAMIC_DRAW);k.enableVertexAttribArray(b.attributes.position);k.vertexAttribPointer(b.attributes.position,3,k.FLOAT,false,0,0)}if(a.hasNormals){k.bindBuffer(k.ARRAY_BUFFER,a.__webglNormalBuffer);if(c.shading===THREE.FlatShading){var d,e,f,g,h,i,j,m,l,n,o,p=a.count*3;for(o=0;o<p;o=o+9){n=a.normalArray;d=n[o];e=n[o+1];f=n[o+2];g=n[o+3];i=n[o+4];m=n[o+5];h=n[o+6];j=n[o+
-7];l=n[o+8];d=(d+g+h)/3;e=(e+i+j)/3;f=(f+m+l)/3;n[o]=d;n[o+1]=e;n[o+2]=f;n[o+3]=d;n[o+4]=e;n[o+5]=f;n[o+6]=d;n[o+7]=e;n[o+8]=f}}k.bufferData(k.ARRAY_BUFFER,a.normalArray,k.DYNAMIC_DRAW);k.enableVertexAttribArray(b.attributes.normal);k.vertexAttribPointer(b.attributes.normal,3,k.FLOAT,false,0,0)}if(a.hasUvs&&c.map){k.bindBuffer(k.ARRAY_BUFFER,a.__webglUvBuffer);k.bufferData(k.ARRAY_BUFFER,a.uvArray,k.DYNAMIC_DRAW);k.enableVertexAttribArray(b.attributes.uv);k.vertexAttribPointer(b.attributes.uv,2,k.FLOAT,
-false,0,0)}if(a.hasColors&&c.vertexColors!==THREE.NoColors){k.bindBuffer(k.ARRAY_BUFFER,a.__webglColorBuffer);k.bufferData(k.ARRAY_BUFFER,a.colorArray,k.DYNAMIC_DRAW);k.enableVertexAttribArray(b.attributes.color);k.vertexAttribPointer(b.attributes.color,3,k.FLOAT,false,0,0)}k.drawArrays(k.TRIANGLES,0,a.count);a.count=0};this.renderBufferDirect=function(a,b,c,d,e,f){if(d.visible!==false){c=q(a,b,c,d,f);a=c.attributes;b=false;d=e.id*16777215+c.id*2+(d.wireframe?1:0);if(d!==H){H=d;b=true}if(f instanceof
-THREE.Mesh){f=e.offsets;f.length>1&&(b=true);d=0;for(c=f.length;d<c;++d){var g=f[d].index;if(b){var h=e.attributes.position,i=h.itemSize;k.bindBuffer(k.ARRAY_BUFFER,h.buffer);k.vertexAttribPointer(a.position,i,k.FLOAT,false,0,g*i*4);h=e.attributes.normal;if(a.normal>=0&&h){i=h.itemSize;k.bindBuffer(k.ARRAY_BUFFER,h.buffer);k.vertexAttribPointer(a.normal,i,k.FLOAT,false,0,g*i*4)}h=e.attributes.uv;if(a.uv>=0&&h)if(h.buffer){i=h.itemSize;k.bindBuffer(k.ARRAY_BUFFER,h.buffer);k.vertexAttribPointer(a.uv,
-i,k.FLOAT,false,0,g*i*4);k.enableVertexAttribArray(a.uv)}else k.disableVertexAttribArray(a.uv);h=e.attributes.color;if(a.color>=0&&h){i=h.itemSize;k.bindBuffer(k.ARRAY_BUFFER,h.buffer);k.vertexAttribPointer(a.color,i,k.FLOAT,false,0,g*i*4)}h=e.attributes.tangent;if(a.tangent>=0&&h){i=h.itemSize;k.bindBuffer(k.ARRAY_BUFFER,h.buffer);k.vertexAttribPointer(a.tangent,i,k.FLOAT,false,0,g*i*4)}k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,e.attributes.index.buffer)}k.drawElements(k.TRIANGLES,f[d].count,k.UNSIGNED_SHORT,
-f[d].start*2);E.info.render.calls++;E.info.render.vertices=E.info.render.vertices+f[d].count;E.info.render.faces=E.info.render.faces+f[d].count/3}}}};this.renderBuffer=function(a,b,c,d,e,f){if(d.visible!==false){var g,i,c=q(a,b,c,d,f),b=c.attributes,a=false,c=e.id*16777215+c.id*2+(d.wireframe?1:0);if(c!==H){H=c;a=true}if(!d.morphTargets&&b.position>=0){if(a){k.bindBuffer(k.ARRAY_BUFFER,e.__webglVertexBuffer);k.vertexAttribPointer(b.position,3,k.FLOAT,false,0,0)}}else if(f.morphTargetBase){c=d.program.attributes;
-if(f.morphTargetBase!==-1){k.bindBuffer(k.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[f.morphTargetBase]);k.vertexAttribPointer(c.position,3,k.FLOAT,false,0,0)}else if(c.position>=0){k.bindBuffer(k.ARRAY_BUFFER,e.__webglVertexBuffer);k.vertexAttribPointer(c.position,3,k.FLOAT,false,0,0)}if(f.morphTargetForcedOrder.length){var j=0;i=f.morphTargetForcedOrder;for(g=f.morphTargetInfluences;j<d.numSupportedMorphTargets&&j<i.length;){k.bindBuffer(k.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[i[j]]);k.vertexAttribPointer(c["morphTarget"+
-j],3,k.FLOAT,false,0,0);if(d.morphNormals){k.bindBuffer(k.ARRAY_BUFFER,e.__webglMorphNormalsBuffers[i[j]]);k.vertexAttribPointer(c["morphNormal"+j],3,k.FLOAT,false,0,0)}f.__webglMorphTargetInfluences[j]=g[i[j]];j++}}else{i=[];g=f.morphTargetInfluences;var m,l=g.length;for(m=0;m<l;m++){j=g[m];j>0&&i.push([m,j])}if(i.length>d.numSupportedMorphTargets){i.sort(h);i.length=d.numSupportedMorphTargets}else i.length>d.numSupportedMorphNormals?i.sort(h):i.length===0&&i.push([0,0]);for(j=0;j<d.numSupportedMorphTargets;){if(i[j]){m=
-i[j][0];k.bindBuffer(k.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[m]);k.vertexAttribPointer(c["morphTarget"+j],3,k.FLOAT,false,0,0);if(d.morphNormals){k.bindBuffer(k.ARRAY_BUFFER,e.__webglMorphNormalsBuffers[m]);k.vertexAttribPointer(c["morphNormal"+j],3,k.FLOAT,false,0,0)}f.__webglMorphTargetInfluences[j]=g[m]}else{k.vertexAttribPointer(c["morphTarget"+j],3,k.FLOAT,false,0,0);d.morphNormals&&k.vertexAttribPointer(c["morphNormal"+j],3,k.FLOAT,false,0,0);f.__webglMorphTargetInfluences[j]=0}j++}}d.program.uniforms.morphTargetInfluences!==
-null&&k.uniform1fv(d.program.uniforms.morphTargetInfluences,f.__webglMorphTargetInfluences)}if(a){if(e.__webglCustomAttributesList){g=0;for(i=e.__webglCustomAttributesList.length;g<i;g++){c=e.__webglCustomAttributesList[g];if(b[c.buffer.belongsToAttribute]>=0){k.bindBuffer(k.ARRAY_BUFFER,c.buffer);k.vertexAttribPointer(b[c.buffer.belongsToAttribute],c.size,k.FLOAT,false,0,0)}}}if(b.color>=0){k.bindBuffer(k.ARRAY_BUFFER,e.__webglColorBuffer);k.vertexAttribPointer(b.color,3,k.FLOAT,false,0,0)}if(b.normal>=
-0){k.bindBuffer(k.ARRAY_BUFFER,e.__webglNormalBuffer);k.vertexAttribPointer(b.normal,3,k.FLOAT,false,0,0)}if(b.tangent>=0){k.bindBuffer(k.ARRAY_BUFFER,e.__webglTangentBuffer);k.vertexAttribPointer(b.tangent,4,k.FLOAT,false,0,0)}if(b.uv>=0)if(e.__webglUVBuffer){k.bindBuffer(k.ARRAY_BUFFER,e.__webglUVBuffer);k.vertexAttribPointer(b.uv,2,k.FLOAT,false,0,0);k.enableVertexAttribArray(b.uv)}else k.disableVertexAttribArray(b.uv);if(b.uv2>=0)if(e.__webglUV2Buffer){k.bindBuffer(k.ARRAY_BUFFER,e.__webglUV2Buffer);
-k.vertexAttribPointer(b.uv2,2,k.FLOAT,false,0,0);k.enableVertexAttribArray(b.uv2)}else k.disableVertexAttribArray(b.uv2);if(d.skinning&&b.skinVertexA>=0&&b.skinVertexB>=0&&b.skinIndex>=0&&b.skinWeight>=0){k.bindBuffer(k.ARRAY_BUFFER,e.__webglSkinVertexABuffer);k.vertexAttribPointer(b.skinVertexA,4,k.FLOAT,false,0,0);k.bindBuffer(k.ARRAY_BUFFER,e.__webglSkinVertexBBuffer);k.vertexAttribPointer(b.skinVertexB,4,k.FLOAT,false,0,0);k.bindBuffer(k.ARRAY_BUFFER,e.__webglSkinIndicesBuffer);k.vertexAttribPointer(b.skinIndex,
-4,k.FLOAT,false,0,0);k.bindBuffer(k.ARRAY_BUFFER,e.__webglSkinWeightsBuffer);k.vertexAttribPointer(b.skinWeight,4,k.FLOAT,false,0,0)}}if(f instanceof THREE.Mesh){if(d.wireframe){d=d.wireframeLinewidth;if(d!==nb){k.lineWidth(d);nb=d}a&&k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,e.__webglLineBuffer);k.drawElements(k.LINES,e.__webglLineCount,k.UNSIGNED_SHORT,0)}else{a&&k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,e.__webglFaceBuffer);k.drawElements(k.TRIANGLES,e.__webglFaceCount,k.UNSIGNED_SHORT,0)}E.info.render.calls++;
-E.info.render.vertices=E.info.render.vertices+e.__webglFaceCount;E.info.render.faces=E.info.render.faces+e.__webglFaceCount/3}else if(f instanceof THREE.Line){f=f.type===THREE.LineStrip?k.LINE_STRIP:k.LINES;d=d.linewidth;if(d!==nb){k.lineWidth(d);nb=d}k.drawArrays(f,0,e.__webglLineCount);E.info.render.calls++}else if(f instanceof THREE.ParticleSystem){k.drawArrays(k.POINTS,0,e.__webglParticleCount);E.info.render.calls++;E.info.render.points=E.info.render.points+e.__webglParticleCount}else if(f instanceof
-THREE.Ribbon){k.drawArrays(k.TRIANGLE_STRIP,0,e.__webglVertexCount);E.info.render.calls++}}};this.render=function(a,b,c,d){var e,f,h,m,n=a.__lights,o=a.fog;ba=-1;Ra=true;if(b.parent===void 0){console.warn("DEPRECATED: Camera hasn't been added to a Scene. Adding it...");a.add(b)}this.autoUpdateScene&&a.updateMatrixWorld();if(!b._viewMatrixArray)b._viewMatrixArray=new Float32Array(16);if(!b._projectionMatrixArray)b._projectionMatrixArray=new Float32Array(16);b.matrixWorldInverse.getInverse(b.matrixWorld);
-b.matrixWorldInverse.flattenToArray(b._viewMatrixArray);b.projectionMatrix.flattenToArray(b._projectionMatrixArray);Aa.multiply(b.projectionMatrix,b.matrixWorldInverse);Da.setFromMatrix(Aa);this.autoUpdateObjects&&this.initWebGLObjects(a);i(this.renderPluginsPre,a,b);E.info.render.calls=0;E.info.render.vertices=0;E.info.render.faces=0;E.info.render.points=0;this.setRenderTarget(c);(this.autoClear||d)&&this.clear(this.autoClearColor,this.autoClearDepth,this.autoClearStencil);m=a.__webglObjects;d=0;
-for(e=m.length;d<e;d++){f=m[d];h=f.object;f.render=false;if(h.visible&&(!(h instanceof THREE.Mesh||h instanceof THREE.ParticleSystem)||!h.frustumCulled||Da.contains(h))){s(h,b);var p=f,r=p.object,q=p.buffer,t=void 0,t=t=void 0,t=r.material;if(t instanceof THREE.MeshFaceMaterial){t=q.materialIndex;if(t>=0){t=r.geometry.materials[t];if(t.transparent){p.transparent=t;p.opaque=null}else{p.opaque=t;p.transparent=null}}}else if(t)if(t.transparent){p.transparent=t;p.opaque=null}else{p.opaque=t;p.transparent=
-null}f.render=true;if(this.sortObjects)if(h.renderDepth)f.z=h.renderDepth;else{qa.copy(h.matrixWorld.getPosition());Aa.multiplyVector3(qa);f.z=qa.z}}}this.sortObjects&&m.sort(g);m=a.__webglObjectsImmediate;d=0;for(e=m.length;d<e;d++){f=m[d];h=f.object;if(h.visible){s(h,b);h=f.object.material;if(h.transparent){f.transparent=h;f.opaque=null}else{f.opaque=h;f.transparent=null}}}if(a.overrideMaterial){d=a.overrideMaterial;this.setBlending(d.blending,d.blendEquation,d.blendSrc,d.blendDst);this.setDepthTest(d.depthTest);
-this.setDepthWrite(d.depthWrite);w(d.polygonOffset,d.polygonOffsetFactor,d.polygonOffsetUnits);j(a.__webglObjects,false,"",b,n,o,true,d);l(a.__webglObjectsImmediate,"",b,n,o,false,d)}else{this.setBlending(THREE.NormalBlending);j(a.__webglObjects,true,"opaque",b,n,o,false);l(a.__webglObjectsImmediate,"opaque",b,n,o,false);j(a.__webglObjects,false,"transparent",b,n,o,true);l(a.__webglObjectsImmediate,"transparent",b,n,o,true)}i(this.renderPluginsPost,a,b);if(c&&c.generateMipmaps&&c.minFilter!==THREE.NearestFilter&&
-c.minFilter!==THREE.LinearFilter)if(c instanceof THREE.WebGLRenderTargetCube){k.bindTexture(k.TEXTURE_CUBE_MAP,c.__webglTexture);k.generateMipmap(k.TEXTURE_CUBE_MAP);k.bindTexture(k.TEXTURE_CUBE_MAP,null)}else{k.bindTexture(k.TEXTURE_2D,c.__webglTexture);k.generateMipmap(k.TEXTURE_2D);k.bindTexture(k.TEXTURE_2D,null)}this.setDepthTest(true);this.setDepthWrite(true)};this.renderImmediateObject=function(a,b,c,d,e){var f=q(a,b,c,d,e);H=-1;E.setObjectFaces(e);e.immediateRenderCallback?e.immediateRenderCallback(f,
-k,Da):e.render(function(a){E.renderBufferImmediate(a,f,d)})};this.initWebGLObjects=function(a){if(!a.__webglObjects){a.__webglObjects=[];a.__webglObjectsImmediate=[];a.__webglSprites=[];a.__webglFlares=[]}for(;a.__objectsAdded.length;){var g=a.__objectsAdded[0],h=a,i=void 0,j=void 0,l=void 0;if(!g.__webglInit){g.__webglInit=true;g._modelViewMatrix=new THREE.Matrix4;g._normalMatrix=new THREE.Matrix3;if(g instanceof THREE.Mesh){j=g.geometry;if(j instanceof THREE.Geometry){if(j.geometryGroups===void 0){var q=
-j,s=void 0,t=void 0,u=void 0,v=void 0,w=void 0,x=void 0,z=void 0,C={},D=q.morphTargets.length,B=q.morphNormals.length;q.geometryGroups={};s=0;for(t=q.faces.length;s<t;s++){u=q.faces[s];v=u.materialIndex;x=v!==void 0?v:-1;C[x]===void 0&&(C[x]={hash:x,counter:0});z=C[x].hash+"_"+C[x].counter;q.geometryGroups[z]===void 0&&(q.geometryGroups[z]={faces3:[],faces4:[],materialIndex:v,vertices:0,numMorphTargets:D,numMorphNormals:B});w=u instanceof THREE.Face3?3:4;if(q.geometryGroups[z].vertices+w>65535){C[x].counter=
-C[x].counter+1;z=C[x].hash+"_"+C[x].counter;q.geometryGroups[z]===void 0&&(q.geometryGroups[z]={faces3:[],faces4:[],materialIndex:v,vertices:0,numMorphTargets:D,numMorphNormals:B})}u instanceof THREE.Face3?q.geometryGroups[z].faces3.push(s):q.geometryGroups[z].faces4.push(s);q.geometryGroups[z].vertices=q.geometryGroups[z].vertices+w}q.geometryGroupsList=[];var R=void 0;for(R in q.geometryGroups){q.geometryGroups[R].id=ia++;q.geometryGroupsList.push(q.geometryGroups[R])}}for(i in j.geometryGroups){l=
-j.geometryGroups[i];if(!l.__webglVertexBuffer){var H=l;H.__webglVertexBuffer=k.createBuffer();H.__webglNormalBuffer=k.createBuffer();H.__webglTangentBuffer=k.createBuffer();H.__webglColorBuffer=k.createBuffer();H.__webglUVBuffer=k.createBuffer();H.__webglUV2Buffer=k.createBuffer();H.__webglSkinVertexABuffer=k.createBuffer();H.__webglSkinVertexBBuffer=k.createBuffer();H.__webglSkinIndicesBuffer=k.createBuffer();H.__webglSkinWeightsBuffer=k.createBuffer();H.__webglFaceBuffer=k.createBuffer();H.__webglLineBuffer=
-k.createBuffer();var G=void 0,P=void 0;if(H.numMorphTargets){H.__webglMorphTargetsBuffers=[];G=0;for(P=H.numMorphTargets;G<P;G++)H.__webglMorphTargetsBuffers.push(k.createBuffer())}if(H.numMorphNormals){H.__webglMorphNormalsBuffers=[];G=0;for(P=H.numMorphNormals;G<P;G++)H.__webglMorphNormalsBuffers.push(k.createBuffer())}E.info.memory.geometries++;var F=l,J=g,U=J.geometry,M=F.faces3,N=F.faces4,O=M.length*3+N.length*4,W=M.length*1+N.length*2,S=M.length*3+N.length*4,Q=c(J,F),X=e(Q),T=d(Q),ba=Q.vertexColors?
-Q.vertexColors:false;F.__vertexArray=new Float32Array(O*3);if(T)F.__normalArray=new Float32Array(O*3);if(U.hasTangents)F.__tangentArray=new Float32Array(O*4);if(ba)F.__colorArray=new Float32Array(O*3);if(X){if(U.faceUvs.length>0||U.faceVertexUvs.length>0)F.__uvArray=new Float32Array(O*2);if(U.faceUvs.length>1||U.faceVertexUvs.length>1)F.__uv2Array=new Float32Array(O*2)}if(J.geometry.skinWeights.length&&J.geometry.skinIndices.length){F.__skinVertexAArray=new Float32Array(O*4);F.__skinVertexBArray=
-new Float32Array(O*4);F.__skinIndexArray=new Float32Array(O*4);F.__skinWeightArray=new Float32Array(O*4)}F.__faceArray=new Uint16Array(W*3);F.__lineArray=new Uint16Array(S*2);var fa=void 0,ca=void 0;if(F.numMorphTargets){F.__morphTargetsArrays=[];fa=0;for(ca=F.numMorphTargets;fa<ca;fa++)F.__morphTargetsArrays.push(new Float32Array(O*3))}if(F.numMorphNormals){F.__morphNormalsArrays=[];fa=0;for(ca=F.numMorphNormals;fa<ca;fa++)F.__morphNormalsArrays.push(new Float32Array(O*3))}F.__webglFaceCount=W*3;
-F.__webglLineCount=S*2;if(Q.attributes){if(F.__webglCustomAttributesList===void 0)F.__webglCustomAttributesList=[];var aa=void 0;for(aa in Q.attributes){var na=Q.attributes[aa],ma={},bb;for(bb in na)ma[bb]=na[bb];if(!ma.__webglInitialized||ma.createUniqueBuffers){ma.__webglInitialized=true;var Ga=1;ma.type==="v2"?Ga=2:ma.type==="v3"?Ga=3:ma.type==="v4"?Ga=4:ma.type==="c"&&(Ga=3);ma.size=Ga;ma.array=new Float32Array(O*Ga);ma.buffer=k.createBuffer();ma.buffer.belongsToAttribute=aa;na.needsUpdate=true;
-ma.__original=na}F.__webglCustomAttributesList.push(ma)}}F.__inittedArrays=true;j.verticesNeedUpdate=true;j.morphTargetsNeedUpdate=true;j.elementsNeedUpdate=true;j.uvsNeedUpdate=true;j.normalsNeedUpdate=true;j.tangentsNeedUpdate=true;j.colorsNeedUpdate=true}}}else if(j instanceof THREE.BufferGeometry){var Oa=j,Pa=void 0,qa=void 0,sa=void 0;for(Pa in Oa.attributes){sa=Pa==="index"?k.ELEMENT_ARRAY_BUFFER:k.ARRAY_BUFFER;qa=Oa.attributes[Pa];qa.buffer=k.createBuffer();k.bindBuffer(sa,qa.buffer);k.bufferData(sa,
-qa.array,k.STATIC_DRAW)}}}else if(g instanceof THREE.Ribbon){j=g.geometry;if(!j.__webglVertexBuffer){var Aa=j;Aa.__webglVertexBuffer=k.createBuffer();Aa.__webglColorBuffer=k.createBuffer();E.info.memory.geometries++;var Da=j,Fa=Da.vertices.length;Da.__vertexArray=new Float32Array(Fa*3);Da.__colorArray=new Float32Array(Fa*3);Da.__webglVertexCount=Fa;j.verticesNeedUpdate=true;j.colorsNeedUpdate=true}}else if(g instanceof THREE.Line){j=g.geometry;if(!j.__webglVertexBuffer){var nb=j;nb.__webglVertexBuffer=
-k.createBuffer();nb.__webglColorBuffer=k.createBuffer();E.info.memory.geometries++;var gb=j,Va=g,Ra=gb.vertices.length;gb.__vertexArray=new Float32Array(Ra*3);gb.__colorArray=new Float32Array(Ra*3);gb.__webglLineCount=Ra;b(gb,Va);j.verticesNeedUpdate=true;j.colorsNeedUpdate=true}}else if(g instanceof THREE.ParticleSystem){j=g.geometry;if(!j.__webglVertexBuffer){var Ya=j;Ya.__webglVertexBuffer=k.createBuffer();Ya.__webglColorBuffer=k.createBuffer();E.info.geometries++;var Ua=j,Ob=g,ob=Ua.vertices.length;
-Ua.__vertexArray=new Float32Array(ob*3);Ua.__colorArray=new Float32Array(ob*3);Ua.__sortArray=[];Ua.__webglParticleCount=ob;b(Ua,Ob);j.verticesNeedUpdate=true;j.colorsNeedUpdate=true}}}if(!g.__webglActive){if(g instanceof THREE.Mesh){j=g.geometry;if(j instanceof THREE.BufferGeometry)m(h.__webglObjects,j,g);else for(i in j.geometryGroups){l=j.geometryGroups[i];m(h.__webglObjects,l,g)}}else if(g instanceof THREE.Ribbon||g instanceof THREE.Line||g instanceof THREE.ParticleSystem){j=g.geometry;m(h.__webglObjects,
-j,g)}else g instanceof THREE.ImmediateRenderObject||g.immediateRenderCallback?h.__webglObjectsImmediate.push({object:g,opaque:null,transparent:null}):g instanceof THREE.Sprite?h.__webglSprites.push(g):g instanceof THREE.LensFlare&&h.__webglFlares.push(g);g.__webglActive=true}a.__objectsAdded.splice(0,1)}for(;a.__objectsRemoved.length;){var db=a.__objectsRemoved[0],kb=a;db instanceof THREE.Mesh||db instanceof THREE.ParticleSystem||db instanceof THREE.Ribbon||db instanceof THREE.Line?r(kb.__webglObjects,
-db):db instanceof THREE.Sprite?o(kb.__webglSprites,db):db instanceof THREE.LensFlare?o(kb.__webglFlares,db):(db instanceof THREE.ImmediateRenderObject||db.immediateRenderCallback)&&r(kb.__webglObjectsImmediate,db);db.__webglActive=false;a.__objectsRemoved.splice(0,1)}for(var hb=0,pb=a.__webglObjects.length;hb<pb;hb++){var lb=a.__webglObjects[hb].object,da=lb.geometry,cb=void 0,oc=void 0,Wa=void 0;if(lb instanceof THREE.Mesh)if(da instanceof THREE.BufferGeometry){if(da.verticesNeedUpdate||da.elementsNeedUpdate||
-da.uvsNeedUpdate||da.normalsNeedUpdate||da.colorsNeedUpdate||da.tangentsNeedUpdate){var Ib=da,pc=k.DYNAMIC_DRAW,ec=!da.dynamic,qc=Ib.attributes,Gb=qc.index,dc=qc.position,Yc=qc.normal,Zc=qc.uv,$c=qc.color,ad=qc.tangent;if(Ib.elementsNeedUpdate&&Gb!==void 0){k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,Gb.buffer);k.bufferData(k.ELEMENT_ARRAY_BUFFER,Gb.array,pc)}if(Ib.verticesNeedUpdate&&dc!==void 0){k.bindBuffer(k.ARRAY_BUFFER,dc.buffer);k.bufferData(k.ARRAY_BUFFER,dc.array,pc)}if(Ib.normalsNeedUpdate&&Yc!==
-void 0){k.bindBuffer(k.ARRAY_BUFFER,Yc.buffer);k.bufferData(k.ARRAY_BUFFER,Yc.array,pc)}if(Ib.uvsNeedUpdate&&Zc!==void 0){k.bindBuffer(k.ARRAY_BUFFER,Zc.buffer);k.bufferData(k.ARRAY_BUFFER,Zc.array,pc)}if(Ib.colorsNeedUpdate&&$c!==void 0){k.bindBuffer(k.ARRAY_BUFFER,$c.buffer);k.bufferData(k.ARRAY_BUFFER,$c.array,pc)}if(Ib.tangentsNeedUpdate&&ad!==void 0){k.bindBuffer(k.ARRAY_BUFFER,ad.buffer);k.bufferData(k.ARRAY_BUFFER,ad.array,pc)}if(ec){var md=void 0;for(md in Ib.attributes)delete Ib.attributes[md].array}}da.verticesNeedUpdate=
+k.texParameteri(a,k.TEXTURE_MIN_FILTER,C(b.minFilter))}Ya&&b.type!==THREE.FloatType&&k.texParameterf(a,Ya.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(b.anisotropy,pb))}function x(a,b){k.bindRenderbuffer(k.RENDERBUFFER,a);if(b.depthBuffer&&!b.stencilBuffer){k.renderbufferStorage(k.RENDERBUFFER,k.DEPTH_COMPONENT16,b.width,b.height);k.framebufferRenderbuffer(k.FRAMEBUFFER,k.DEPTH_ATTACHMENT,k.RENDERBUFFER,a)}else if(b.depthBuffer&&b.stencilBuffer){k.renderbufferStorage(k.RENDERBUFFER,k.DEPTH_STENCIL,b.width,
+b.height);k.framebufferRenderbuffer(k.FRAMEBUFFER,k.DEPTH_STENCIL_ATTACHMENT,k.RENDERBUFFER,a)}else k.renderbufferStorage(k.RENDERBUFFER,k.RGBA4,b.width,b.height)}function C(a){return a===THREE.NearestFilter||a===THREE.NearestMipMapNearestFilter||a===THREE.NearestMipMapLinearFilter?k.NEAREST:k.LINEAR}function D(a){return a===THREE.RepeatWrapping?k.REPEAT:a===THREE.ClampToEdgeWrapping?k.CLAMP_TO_EDGE:a===THREE.MirroredRepeatWrapping?k.MIRRORED_REPEAT:a===THREE.NearestFilter?k.NEAREST:a===THREE.NearestMipMapNearestFilter?
+k.NEAREST_MIPMAP_NEAREST:a===THREE.NearestMipMapLinearFilter?k.NEAREST_MIPMAP_LINEAR:a===THREE.LinearFilter?k.LINEAR:a===THREE.LinearMipMapNearestFilter?k.LINEAR_MIPMAP_NEAREST:a===THREE.LinearMipMapLinearFilter?k.LINEAR_MIPMAP_LINEAR:a===THREE.UnsignedByteType?k.UNSIGNED_BYTE:a===THREE.UnsignedShort4444Type?k.UNSIGNED_SHORT_4_4_4_4:a===THREE.UnsignedShort5551Type?k.UNSIGNED_SHORT_5_5_5_1:a===THREE.UnsignedShort565Type?k.UNSIGNED_SHORT_5_6_5:a===THREE.ByteType?k.BYTE:a===THREE.ShortType?k.SHORT:a===
+THREE.UnsignedShortType?k.UNSIGNED_SHORT:a===THREE.IntType?k.INT:a===THREE.UnsignedIntType?k.UNSIGNED_INT:a===THREE.FloatType?k.FLOAT:a===THREE.AlphaFormat?k.ALPHA:a===THREE.RGBFormat?k.RGB:a===THREE.RGBAFormat?k.RGBA:a===THREE.LuminanceFormat?k.LUMINANCE:a===THREE.LuminanceAlphaFormat?k.LUMINANCE_ALPHA:a===THREE.AddEquation?k.FUNC_ADD:a===THREE.SubtractEquation?k.FUNC_SUBTRACT:a===THREE.ReverseSubtractEquation?k.FUNC_REVERSE_SUBTRACT:a===THREE.ZeroFactor?k.ZERO:a===THREE.OneFactor?k.ONE:a===THREE.SrcColorFactor?
+k.SRC_COLOR:a===THREE.OneMinusSrcColorFactor?k.ONE_MINUS_SRC_COLOR:a===THREE.SrcAlphaFactor?k.SRC_ALPHA:a===THREE.OneMinusSrcAlphaFactor?k.ONE_MINUS_SRC_ALPHA:a===THREE.DstAlphaFactor?k.DST_ALPHA:a===THREE.OneMinusDstAlphaFactor?k.ONE_MINUS_DST_ALPHA:a===THREE.DstColorFactor?k.DST_COLOR:a===THREE.OneMinusDstColorFactor?k.ONE_MINUS_DST_COLOR:a===THREE.SrcAlphaSaturateFactor?k.SRC_ALPHA_SATURATE:0}console.log("THREE.WebGLRenderer",THREE.REVISION);var a=a||{},z=a.canvas!==void 0?a.canvas:document.createElement("canvas"),
+u=a.precision!==void 0?a.precision:"highp",G=a.alpha!==void 0?a.alpha:true,J=a.premultipliedAlpha!==void 0?a.premultipliedAlpha:true,M=a.antialias!==void 0?a.antialias:false,O=a.stencil!==void 0?a.stencil:true,X=a.preserveDrawingBuffer!==void 0?a.preserveDrawingBuffer:false,B=a.clearColor!==void 0?new THREE.Color(a.clearColor):new THREE.Color(0),F=a.clearAlpha!==void 0?a.clearAlpha:0,Q=a.maxLights!==void 0?a.maxLights:4;this.domElement=z;this.context=null;this.autoUpdateScene=this.autoUpdateObjects=
+this.sortObjects=this.autoClearStencil=this.autoClearDepth=this.autoClearColor=this.autoClear=true;this.shadowMapEnabled=this.physicallyBasedShading=this.gammaOutput=this.gammaInput=false;this.shadowMapCullFrontFaces=this.shadowMapSoft=this.shadowMapAutoUpdate=true;this.shadowMapCascade=this.shadowMapDebug=false;this.maxMorphTargets=8;this.maxMorphNormals=4;this.autoScaleCubemaps=true;this.renderPluginsPre=[];this.renderPluginsPost=[];this.info={memory:{programs:0,geometries:0,textures:0},render:{calls:0,
+vertices:0,faces:0,points:0}};var E=this,aa=[],T=0,N=null,W=null,ba=-1,H=null,ca=null,ia=0,S=-1,R=-1,P=-1,U=-1,fa=-1,ma=-1,Ga=-1,na=-1,Oa=null,Pa=null,bb=null,nb=null,gb=0,Ob=0,ob=0,kb=0,ec=0,Ua=0,Da=new THREE.Frustum,Aa=new THREE.Matrix4,hb=new THREE.Matrix4,qa=new THREE.Vector4,Fa=new THREE.Vector3,Ra=true,sa={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[],distances:[]},spot:{length:0,colors:[],positions:[],distances:[],directions:[],angles:[],
+exponents:[]}},k,Ya;try{if(!(k=z.getContext("experimental-webgl",{alpha:G,premultipliedAlpha:J,antialias:M,stencil:O,preserveDrawingBuffer:X})))throw"Error creating WebGL context.";}catch(Gb){console.error(Gb)}a=k.getExtension("OES_texture_float");G=k.getExtension("OES_standard_derivatives");Ya=k.getExtension("EXT_texture_filter_anisotropic")||k.getExtension("MOZ_EXT_texture_filter_anisotropic")||k.getExtension("WEBKIT_EXT_texture_filter_anisotropic");a||console.log("THREE.WebGLRenderer: Float textures not supported.");
+G||console.log("THREE.WebGLRenderer: Standard derivatives not supported.");Ya||console.log("THREE.WebGLRenderer: Anisotropic texture filtering not supported.");k.clearColor(0,0,0,1);k.clearDepth(1);k.clearStencil(0);k.enable(k.DEPTH_TEST);k.depthFunc(k.LEQUAL);k.frontFace(k.CCW);k.cullFace(k.BACK);k.enable(k.CULL_FACE);k.enable(k.BLEND);k.blendEquation(k.FUNC_ADD);k.blendFunc(k.SRC_ALPHA,k.ONE_MINUS_SRC_ALPHA);k.clearColor(B.r,B.g,B.b,F);this.context=k;G=k.getParameter(k.MAX_VERTEX_TEXTURE_IMAGE_UNITS);
+k.getParameter(k.MAX_TEXTURE_SIZE);var Va=k.getParameter(k.MAX_CUBE_MAP_TEXTURE_SIZE),pb=Ya?k.getParameter(Ya.MAX_TEXTURE_MAX_ANISOTROPY_EXT):0,cb=G>0,dc=cb&&a;this.getContext=function(){return k};this.supportsVertexTextures=function(){return cb};this.getMaxAnisotropy=function(){return pb};this.setSize=function(a,b){z.width=a;z.height=b;this.setViewport(0,0,z.width,z.height)};this.setViewport=function(a,b,c,d){gb=a!==void 0?a:0;Ob=b!==void 0?b:0;ob=c!==void 0?c:z.width;kb=d!==void 0?d:z.height;k.viewport(gb,
+Ob,ob,kb)};this.setScissor=function(a,b,c,d){k.scissor(a,b,c,d)};this.enableScissorTest=function(a){a?k.enable(k.SCISSOR_TEST):k.disable(k.SCISSOR_TEST)};this.setClearColorHex=function(a,b){B.setHex(a);F=b;k.clearColor(B.r,B.g,B.b,F)};this.setClearColor=function(a,b){B.copy(a);F=b;k.clearColor(B.r,B.g,B.b,F)};this.getClearColor=function(){return B};this.getClearAlpha=function(){return F};this.clear=function(a,b,c){var d=0;if(a===void 0||a)d=d|k.COLOR_BUFFER_BIT;if(b===void 0||b)d=d|k.DEPTH_BUFFER_BIT;
+if(c===void 0||c)d=d|k.STENCIL_BUFFER_BIT;k.clear(d)};this.clearTarget=function(a,b,c,d){this.setRenderTarget(a);this.clear(b,c,d)};this.addPostPlugin=function(a){a.init(this);this.renderPluginsPost.push(a)};this.addPrePlugin=function(a){a.init(this);this.renderPluginsPre.push(a)};this.deallocateObject=function(a){if(a.__webglInit){a.__webglInit=false;delete a._modelViewMatrix;delete a._normalMatrix;delete a._normalMatrixArray;delete a._modelViewMatrixArray;delete a._objectMatrixArray;if(a instanceof
+THREE.Mesh)for(var b in a.geometry.geometryGroups){var c=a.geometry.geometryGroups[b];k.deleteBuffer(c.__webglVertexBuffer);k.deleteBuffer(c.__webglNormalBuffer);k.deleteBuffer(c.__webglTangentBuffer);k.deleteBuffer(c.__webglColorBuffer);k.deleteBuffer(c.__webglUVBuffer);k.deleteBuffer(c.__webglUV2Buffer);k.deleteBuffer(c.__webglSkinVertexABuffer);k.deleteBuffer(c.__webglSkinVertexBBuffer);k.deleteBuffer(c.__webglSkinIndicesBuffer);k.deleteBuffer(c.__webglSkinWeightsBuffer);k.deleteBuffer(c.__webglFaceBuffer);
+k.deleteBuffer(c.__webglLineBuffer);var d=void 0,e=void 0;if(c.numMorphTargets){d=0;for(e=c.numMorphTargets;d<e;d++)k.deleteBuffer(c.__webglMorphTargetsBuffers[d])}if(c.numMorphNormals){d=0;for(e=c.numMorphNormals;d<e;d++)k.deleteBuffer(c.__webglMorphNormalsBuffers[d])}if(c.__webglCustomAttributesList){d=void 0;for(d in c.__webglCustomAttributesList)k.deleteBuffer(c.__webglCustomAttributesList[d].buffer)}E.info.memory.geometries--}else if(a instanceof THREE.Ribbon){a=a.geometry;k.deleteBuffer(a.__webglVertexBuffer);
+k.deleteBuffer(a.__webglColorBuffer);E.info.memory.geometries--}else if(a instanceof THREE.Line){a=a.geometry;k.deleteBuffer(a.__webglVertexBuffer);k.deleteBuffer(a.__webglColorBuffer);E.info.memory.geometries--}else if(a instanceof THREE.ParticleSystem){a=a.geometry;k.deleteBuffer(a.__webglVertexBuffer);k.deleteBuffer(a.__webglColorBuffer);E.info.memory.geometries--}}};this.deallocateTexture=function(a){if(a.__webglInit){a.__webglInit=false;k.deleteTexture(a.__webglTexture);E.info.memory.textures--}};
+this.deallocateRenderTarget=function(a){if(a&&a.__webglTexture){k.deleteTexture(a.__webglTexture);if(a instanceof THREE.WebGLRenderTargetCube)for(var b=0;b<6;b++){k.deleteFramebuffer(a.__webglFramebuffer[b]);k.deleteRenderbuffer(a.__webglRenderbuffer[b])}else{k.deleteFramebuffer(a.__webglFramebuffer);k.deleteRenderbuffer(a.__webglRenderbuffer)}}};this.deallocateMaterial=function(a){var b=a.program;if(b){a.program=void 0;var c,d,e=false,a=0;for(c=aa.length;a<c;a++){d=aa[a];if(d.program===b){d.usedTimes--;
+d.usedTimes===0&&(e=true);break}}if(e){e=[];a=0;for(c=aa.length;a<c;a++){d=aa[a];d.program!==b&&e.push(d)}aa=e;k.deleteProgram(b);E.info.memory.programs--}}};this.updateShadowMap=function(a,b){N=null;ba=H=na=Ga=P=-1;Ra=true;R=S=-1;this.shadowMapPlugin.update(a,b)};this.renderBufferImmediate=function(a,b,c){if(a.hasPositions&&!a.__webglVertexBuffer)a.__webglVertexBuffer=k.createBuffer();if(a.hasNormals&&!a.__webglNormalBuffer)a.__webglNormalBuffer=k.createBuffer();if(a.hasUvs&&!a.__webglUvBuffer)a.__webglUvBuffer=
+k.createBuffer();if(a.hasColors&&!a.__webglColorBuffer)a.__webglColorBuffer=k.createBuffer();if(a.hasPositions){k.bindBuffer(k.ARRAY_BUFFER,a.__webglVertexBuffer);k.bufferData(k.ARRAY_BUFFER,a.positionArray,k.DYNAMIC_DRAW);k.enableVertexAttribArray(b.attributes.position);k.vertexAttribPointer(b.attributes.position,3,k.FLOAT,false,0,0)}if(a.hasNormals){k.bindBuffer(k.ARRAY_BUFFER,a.__webglNormalBuffer);if(c.shading===THREE.FlatShading){var d,e,f,g,h,i,j,m,l,n,o,p=a.count*3;for(o=0;o<p;o=o+9){n=a.normalArray;
+d=n[o];e=n[o+1];f=n[o+2];g=n[o+3];i=n[o+4];m=n[o+5];h=n[o+6];j=n[o+7];l=n[o+8];d=(d+g+h)/3;e=(e+i+j)/3;f=(f+m+l)/3;n[o]=d;n[o+1]=e;n[o+2]=f;n[o+3]=d;n[o+4]=e;n[o+5]=f;n[o+6]=d;n[o+7]=e;n[o+8]=f}}k.bufferData(k.ARRAY_BUFFER,a.normalArray,k.DYNAMIC_DRAW);k.enableVertexAttribArray(b.attributes.normal);k.vertexAttribPointer(b.attributes.normal,3,k.FLOAT,false,0,0)}if(a.hasUvs&&c.map){k.bindBuffer(k.ARRAY_BUFFER,a.__webglUvBuffer);k.bufferData(k.ARRAY_BUFFER,a.uvArray,k.DYNAMIC_DRAW);k.enableVertexAttribArray(b.attributes.uv);
+k.vertexAttribPointer(b.attributes.uv,2,k.FLOAT,false,0,0)}if(a.hasColors&&c.vertexColors!==THREE.NoColors){k.bindBuffer(k.ARRAY_BUFFER,a.__webglColorBuffer);k.bufferData(k.ARRAY_BUFFER,a.colorArray,k.DYNAMIC_DRAW);k.enableVertexAttribArray(b.attributes.color);k.vertexAttribPointer(b.attributes.color,3,k.FLOAT,false,0,0)}k.drawArrays(k.TRIANGLES,0,a.count);a.count=0};this.renderBufferDirect=function(a,b,c,d,e,f){if(d.visible!==false){c=q(a,b,c,d,f);a=c.attributes;b=false;d=e.id*16777215+c.id*2+(d.wireframe?
+1:0);if(d!==H){H=d;b=true}if(f instanceof THREE.Mesh){f=e.offsets;f.length>1&&(b=true);d=0;for(c=f.length;d<c;++d){var g=f[d].index;if(b){var h=e.attributes.position,i=h.itemSize;k.bindBuffer(k.ARRAY_BUFFER,h.buffer);k.vertexAttribPointer(a.position,i,k.FLOAT,false,0,g*i*4);h=e.attributes.normal;if(a.normal>=0&&h){i=h.itemSize;k.bindBuffer(k.ARRAY_BUFFER,h.buffer);k.vertexAttribPointer(a.normal,i,k.FLOAT,false,0,g*i*4)}h=e.attributes.uv;if(a.uv>=0&&h)if(h.buffer){i=h.itemSize;k.bindBuffer(k.ARRAY_BUFFER,
+h.buffer);k.vertexAttribPointer(a.uv,i,k.FLOAT,false,0,g*i*4);k.enableVertexAttribArray(a.uv)}else k.disableVertexAttribArray(a.uv);h=e.attributes.color;if(a.color>=0&&h){i=h.itemSize;k.bindBuffer(k.ARRAY_BUFFER,h.buffer);k.vertexAttribPointer(a.color,i,k.FLOAT,false,0,g*i*4)}h=e.attributes.tangent;if(a.tangent>=0&&h){i=h.itemSize;k.bindBuffer(k.ARRAY_BUFFER,h.buffer);k.vertexAttribPointer(a.tangent,i,k.FLOAT,false,0,g*i*4)}k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,e.attributes.index.buffer)}k.drawElements(k.TRIANGLES,
+f[d].count,k.UNSIGNED_SHORT,f[d].start*2);E.info.render.calls++;E.info.render.vertices=E.info.render.vertices+f[d].count;E.info.render.faces=E.info.render.faces+f[d].count/3}}}};this.renderBuffer=function(a,b,c,d,e,f){if(d.visible!==false){var g,i,c=q(a,b,c,d,f),b=c.attributes,a=false,c=e.id*16777215+c.id*2+(d.wireframe?1:0);if(c!==H){H=c;a=true}if(!d.morphTargets&&b.position>=0){if(a){k.bindBuffer(k.ARRAY_BUFFER,e.__webglVertexBuffer);k.vertexAttribPointer(b.position,3,k.FLOAT,false,0,0)}}else if(f.morphTargetBase){c=
+d.program.attributes;if(f.morphTargetBase!==-1){k.bindBuffer(k.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[f.morphTargetBase]);k.vertexAttribPointer(c.position,3,k.FLOAT,false,0,0)}else if(c.position>=0){k.bindBuffer(k.ARRAY_BUFFER,e.__webglVertexBuffer);k.vertexAttribPointer(c.position,3,k.FLOAT,false,0,0)}if(f.morphTargetForcedOrder.length){var j=0;i=f.morphTargetForcedOrder;for(g=f.morphTargetInfluences;j<d.numSupportedMorphTargets&&j<i.length;){k.bindBuffer(k.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[i[j]]);
+k.vertexAttribPointer(c["morphTarget"+j],3,k.FLOAT,false,0,0);if(d.morphNormals){k.bindBuffer(k.ARRAY_BUFFER,e.__webglMorphNormalsBuffers[i[j]]);k.vertexAttribPointer(c["morphNormal"+j],3,k.FLOAT,false,0,0)}f.__webglMorphTargetInfluences[j]=g[i[j]];j++}}else{i=[];g=f.morphTargetInfluences;var m,l=g.length;for(m=0;m<l;m++){j=g[m];j>0&&i.push([m,j])}if(i.length>d.numSupportedMorphTargets){i.sort(h);i.length=d.numSupportedMorphTargets}else i.length>d.numSupportedMorphNormals?i.sort(h):i.length===0&&
+i.push([0,0]);for(j=0;j<d.numSupportedMorphTargets;){if(i[j]){m=i[j][0];k.bindBuffer(k.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[m]);k.vertexAttribPointer(c["morphTarget"+j],3,k.FLOAT,false,0,0);if(d.morphNormals){k.bindBuffer(k.ARRAY_BUFFER,e.__webglMorphNormalsBuffers[m]);k.vertexAttribPointer(c["morphNormal"+j],3,k.FLOAT,false,0,0)}f.__webglMorphTargetInfluences[j]=g[m]}else{k.vertexAttribPointer(c["morphTarget"+j],3,k.FLOAT,false,0,0);d.morphNormals&&k.vertexAttribPointer(c["morphNormal"+j],3,
+k.FLOAT,false,0,0);f.__webglMorphTargetInfluences[j]=0}j++}}d.program.uniforms.morphTargetInfluences!==null&&k.uniform1fv(d.program.uniforms.morphTargetInfluences,f.__webglMorphTargetInfluences)}if(a){if(e.__webglCustomAttributesList){g=0;for(i=e.__webglCustomAttributesList.length;g<i;g++){c=e.__webglCustomAttributesList[g];if(b[c.buffer.belongsToAttribute]>=0){k.bindBuffer(k.ARRAY_BUFFER,c.buffer);k.vertexAttribPointer(b[c.buffer.belongsToAttribute],c.size,k.FLOAT,false,0,0)}}}if(b.color>=0){k.bindBuffer(k.ARRAY_BUFFER,
+e.__webglColorBuffer);k.vertexAttribPointer(b.color,3,k.FLOAT,false,0,0)}if(b.normal>=0){k.bindBuffer(k.ARRAY_BUFFER,e.__webglNormalBuffer);k.vertexAttribPointer(b.normal,3,k.FLOAT,false,0,0)}if(b.tangent>=0){k.bindBuffer(k.ARRAY_BUFFER,e.__webglTangentBuffer);k.vertexAttribPointer(b.tangent,4,k.FLOAT,false,0,0)}if(b.uv>=0)if(e.__webglUVBuffer){k.bindBuffer(k.ARRAY_BUFFER,e.__webglUVBuffer);k.vertexAttribPointer(b.uv,2,k.FLOAT,false,0,0);k.enableVertexAttribArray(b.uv)}else k.disableVertexAttribArray(b.uv);
+if(b.uv2>=0)if(e.__webglUV2Buffer){k.bindBuffer(k.ARRAY_BUFFER,e.__webglUV2Buffer);k.vertexAttribPointer(b.uv2,2,k.FLOAT,false,0,0);k.enableVertexAttribArray(b.uv2)}else k.disableVertexAttribArray(b.uv2);if(d.skinning&&b.skinVertexA>=0&&b.skinVertexB>=0&&b.skinIndex>=0&&b.skinWeight>=0){k.bindBuffer(k.ARRAY_BUFFER,e.__webglSkinVertexABuffer);k.vertexAttribPointer(b.skinVertexA,4,k.FLOAT,false,0,0);k.bindBuffer(k.ARRAY_BUFFER,e.__webglSkinVertexBBuffer);k.vertexAttribPointer(b.skinVertexB,4,k.FLOAT,
+false,0,0);k.bindBuffer(k.ARRAY_BUFFER,e.__webglSkinIndicesBuffer);k.vertexAttribPointer(b.skinIndex,4,k.FLOAT,false,0,0);k.bindBuffer(k.ARRAY_BUFFER,e.__webglSkinWeightsBuffer);k.vertexAttribPointer(b.skinWeight,4,k.FLOAT,false,0,0)}}if(f instanceof THREE.Mesh){if(d.wireframe){d=d.wireframeLinewidth;if(d!==nb){k.lineWidth(d);nb=d}a&&k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,e.__webglLineBuffer);k.drawElements(k.LINES,e.__webglLineCount,k.UNSIGNED_SHORT,0)}else{a&&k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,e.__webglFaceBuffer);
+k.drawElements(k.TRIANGLES,e.__webglFaceCount,k.UNSIGNED_SHORT,0)}E.info.render.calls++;E.info.render.vertices=E.info.render.vertices+e.__webglFaceCount;E.info.render.faces=E.info.render.faces+e.__webglFaceCount/3}else if(f instanceof THREE.Line){f=f.type===THREE.LineStrip?k.LINE_STRIP:k.LINES;d=d.linewidth;if(d!==nb){k.lineWidth(d);nb=d}k.drawArrays(f,0,e.__webglLineCount);E.info.render.calls++}else if(f instanceof THREE.ParticleSystem){k.drawArrays(k.POINTS,0,e.__webglParticleCount);E.info.render.calls++;
+E.info.render.points=E.info.render.points+e.__webglParticleCount}else if(f instanceof THREE.Ribbon){k.drawArrays(k.TRIANGLE_STRIP,0,e.__webglVertexCount);E.info.render.calls++}}};this.render=function(a,b,c,d){var e,f,h,m,n=a.__lights,o=a.fog;ba=-1;Ra=true;if(b.parent===void 0){console.warn("DEPRECATED: Camera hasn't been added to a Scene. Adding it...");a.add(b)}this.autoUpdateScene&&a.updateMatrixWorld();if(!b._viewMatrixArray)b._viewMatrixArray=new Float32Array(16);if(!b._projectionMatrixArray)b._projectionMatrixArray=
+new Float32Array(16);b.matrixWorldInverse.getInverse(b.matrixWorld);b.matrixWorldInverse.flattenToArray(b._viewMatrixArray);b.projectionMatrix.flattenToArray(b._projectionMatrixArray);Aa.multiply(b.projectionMatrix,b.matrixWorldInverse);Da.setFromMatrix(Aa);this.autoUpdateObjects&&this.initWebGLObjects(a);i(this.renderPluginsPre,a,b);E.info.render.calls=0;E.info.render.vertices=0;E.info.render.faces=0;E.info.render.points=0;this.setRenderTarget(c);(this.autoClear||d)&&this.clear(this.autoClearColor,
+this.autoClearDepth,this.autoClearStencil);m=a.__webglObjects;d=0;for(e=m.length;d<e;d++){f=m[d];h=f.object;f.render=false;if(h.visible&&(!(h instanceof THREE.Mesh||h instanceof THREE.ParticleSystem)||!h.frustumCulled||Da.contains(h))){s(h,b);var p=f,r=p.object,q=p.buffer,t=void 0,t=t=void 0,t=r.material;if(t instanceof THREE.MeshFaceMaterial){t=q.materialIndex;if(t>=0){t=r.geometry.materials[t];if(t.transparent){p.transparent=t;p.opaque=null}else{p.opaque=t;p.transparent=null}}}else if(t)if(t.transparent){p.transparent=
+t;p.opaque=null}else{p.opaque=t;p.transparent=null}f.render=true;if(this.sortObjects)if(h.renderDepth)f.z=h.renderDepth;else{qa.copy(h.matrixWorld.getPosition());Aa.multiplyVector3(qa);f.z=qa.z}}}this.sortObjects&&m.sort(g);m=a.__webglObjectsImmediate;d=0;for(e=m.length;d<e;d++){f=m[d];h=f.object;if(h.visible){s(h,b);h=f.object.material;if(h.transparent){f.transparent=h;f.opaque=null}else{f.opaque=h;f.transparent=null}}}if(a.overrideMaterial){d=a.overrideMaterial;this.setBlending(d.blending,d.blendEquation,
+d.blendSrc,d.blendDst);this.setDepthTest(d.depthTest);this.setDepthWrite(d.depthWrite);w(d.polygonOffset,d.polygonOffsetFactor,d.polygonOffsetUnits);j(a.__webglObjects,false,"",b,n,o,true,d);l(a.__webglObjectsImmediate,"",b,n,o,false,d)}else{this.setBlending(THREE.NormalBlending);j(a.__webglObjects,true,"opaque",b,n,o,false);l(a.__webglObjectsImmediate,"opaque",b,n,o,false);j(a.__webglObjects,false,"transparent",b,n,o,true);l(a.__webglObjectsImmediate,"transparent",b,n,o,true)}i(this.renderPluginsPost,
+a,b);if(c&&c.generateMipmaps&&c.minFilter!==THREE.NearestFilter&&c.minFilter!==THREE.LinearFilter)if(c instanceof THREE.WebGLRenderTargetCube){k.bindTexture(k.TEXTURE_CUBE_MAP,c.__webglTexture);k.generateMipmap(k.TEXTURE_CUBE_MAP);k.bindTexture(k.TEXTURE_CUBE_MAP,null)}else{k.bindTexture(k.TEXTURE_2D,c.__webglTexture);k.generateMipmap(k.TEXTURE_2D);k.bindTexture(k.TEXTURE_2D,null)}this.setDepthTest(true);this.setDepthWrite(true)};this.renderImmediateObject=function(a,b,c,d,e){var f=q(a,b,c,d,e);H=
+-1;E.setObjectFaces(e);e.immediateRenderCallback?e.immediateRenderCallback(f,k,Da):e.render(function(a){E.renderBufferImmediate(a,f,d)})};this.initWebGLObjects=function(a){if(!a.__webglObjects){a.__webglObjects=[];a.__webglObjectsImmediate=[];a.__webglSprites=[];a.__webglFlares=[]}for(;a.__objectsAdded.length;){var g=a.__objectsAdded[0],h=a,i=void 0,j=void 0,l=void 0;if(!g.__webglInit){g.__webglInit=true;g._modelViewMatrix=new THREE.Matrix4;g._normalMatrix=new THREE.Matrix3;if(g instanceof THREE.Mesh){j=
+g.geometry;if(j instanceof THREE.Geometry){if(j.geometryGroups===void 0){var q=j,s=void 0,t=void 0,u=void 0,v=void 0,w=void 0,x=void 0,z=void 0,C={},D=q.morphTargets.length,B=q.morphNormals.length;q.geometryGroups={};s=0;for(t=q.faces.length;s<t;s++){u=q.faces[s];v=u.materialIndex;x=v!==void 0?v:-1;C[x]===void 0&&(C[x]={hash:x,counter:0});z=C[x].hash+"_"+C[x].counter;q.geometryGroups[z]===void 0&&(q.geometryGroups[z]={faces3:[],faces4:[],materialIndex:v,vertices:0,numMorphTargets:D,numMorphNormals:B});
+w=u instanceof THREE.Face3?3:4;if(q.geometryGroups[z].vertices+w>65535){C[x].counter=C[x].counter+1;z=C[x].hash+"_"+C[x].counter;q.geometryGroups[z]===void 0&&(q.geometryGroups[z]={faces3:[],faces4:[],materialIndex:v,vertices:0,numMorphTargets:D,numMorphNormals:B})}u instanceof THREE.Face3?q.geometryGroups[z].faces3.push(s):q.geometryGroups[z].faces4.push(s);q.geometryGroups[z].vertices=q.geometryGroups[z].vertices+w}q.geometryGroupsList=[];var R=void 0;for(R in q.geometryGroups){q.geometryGroups[R].id=
+ia++;q.geometryGroupsList.push(q.geometryGroups[R])}}for(i in j.geometryGroups){l=j.geometryGroups[i];if(!l.__webglVertexBuffer){var H=l;H.__webglVertexBuffer=k.createBuffer();H.__webglNormalBuffer=k.createBuffer();H.__webglTangentBuffer=k.createBuffer();H.__webglColorBuffer=k.createBuffer();H.__webglUVBuffer=k.createBuffer();H.__webglUV2Buffer=k.createBuffer();H.__webglSkinVertexABuffer=k.createBuffer();H.__webglSkinVertexBBuffer=k.createBuffer();H.__webglSkinIndicesBuffer=k.createBuffer();H.__webglSkinWeightsBuffer=
+k.createBuffer();H.__webglFaceBuffer=k.createBuffer();H.__webglLineBuffer=k.createBuffer();var G=void 0,P=void 0;if(H.numMorphTargets){H.__webglMorphTargetsBuffers=[];G=0;for(P=H.numMorphTargets;G<P;G++)H.__webglMorphTargetsBuffers.push(k.createBuffer())}if(H.numMorphNormals){H.__webglMorphNormalsBuffers=[];G=0;for(P=H.numMorphNormals;G<P;G++)H.__webglMorphNormalsBuffers.push(k.createBuffer())}E.info.memory.geometries++;var F=l,J=g,U=J.geometry,M=F.faces3,N=F.faces4,O=M.length*3+N.length*4,W=M.length*
+1+N.length*2,S=M.length*3+N.length*4,Q=c(J,F),X=e(Q),T=d(Q),ba=Q.vertexColors?Q.vertexColors:false;F.__vertexArray=new Float32Array(O*3);if(T)F.__normalArray=new Float32Array(O*3);if(U.hasTangents)F.__tangentArray=new Float32Array(O*4);if(ba)F.__colorArray=new Float32Array(O*3);if(X){if(U.faceUvs.length>0||U.faceVertexUvs.length>0)F.__uvArray=new Float32Array(O*2);if(U.faceUvs.length>1||U.faceVertexUvs.length>1)F.__uv2Array=new Float32Array(O*2)}if(J.geometry.skinWeights.length&&J.geometry.skinIndices.length){F.__skinVertexAArray=
+new Float32Array(O*4);F.__skinVertexBArray=new Float32Array(O*4);F.__skinIndexArray=new Float32Array(O*4);F.__skinWeightArray=new Float32Array(O*4)}F.__faceArray=new Uint16Array(W*3);F.__lineArray=new Uint16Array(S*2);var fa=void 0,ca=void 0;if(F.numMorphTargets){F.__morphTargetsArrays=[];fa=0;for(ca=F.numMorphTargets;fa<ca;fa++)F.__morphTargetsArrays.push(new Float32Array(O*3))}if(F.numMorphNormals){F.__morphNormalsArrays=[];fa=0;for(ca=F.numMorphNormals;fa<ca;fa++)F.__morphNormalsArrays.push(new Float32Array(O*
+3))}F.__webglFaceCount=W*3;F.__webglLineCount=S*2;if(Q.attributes){if(F.__webglCustomAttributesList===void 0)F.__webglCustomAttributesList=[];var aa=void 0;for(aa in Q.attributes){var na=Q.attributes[aa],ma={},bb;for(bb in na)ma[bb]=na[bb];if(!ma.__webglInitialized||ma.createUniqueBuffers){ma.__webglInitialized=true;var Ga=1;ma.type==="v2"?Ga=2:ma.type==="v3"?Ga=3:ma.type==="v4"?Ga=4:ma.type==="c"&&(Ga=3);ma.size=Ga;ma.array=new Float32Array(O*Ga);ma.buffer=k.createBuffer();ma.buffer.belongsToAttribute=
+aa;na.needsUpdate=true;ma.__original=na}F.__webglCustomAttributesList.push(ma)}}F.__inittedArrays=true;j.verticesNeedUpdate=true;j.morphTargetsNeedUpdate=true;j.elementsNeedUpdate=true;j.uvsNeedUpdate=true;j.normalsNeedUpdate=true;j.tangentsNeedUpdate=true;j.colorsNeedUpdate=true}}}else if(j instanceof THREE.BufferGeometry){var Oa=j,Pa=void 0,qa=void 0,sa=void 0;for(Pa in Oa.attributes){sa=Pa==="index"?k.ELEMENT_ARRAY_BUFFER:k.ARRAY_BUFFER;qa=Oa.attributes[Pa];qa.buffer=k.createBuffer();k.bindBuffer(sa,
+qa.buffer);k.bufferData(sa,qa.array,k.STATIC_DRAW)}}}else if(g instanceof THREE.Ribbon){j=g.geometry;if(!j.__webglVertexBuffer){var Aa=j;Aa.__webglVertexBuffer=k.createBuffer();Aa.__webglColorBuffer=k.createBuffer();E.info.memory.geometries++;var Da=j,Fa=Da.vertices.length;Da.__vertexArray=new Float32Array(Fa*3);Da.__colorArray=new Float32Array(Fa*3);Da.__webglVertexCount=Fa;j.verticesNeedUpdate=true;j.colorsNeedUpdate=true}}else if(g instanceof THREE.Line){j=g.geometry;if(!j.__webglVertexBuffer){var nb=
+j;nb.__webglVertexBuffer=k.createBuffer();nb.__webglColorBuffer=k.createBuffer();E.info.memory.geometries++;var gb=j,Va=g,Ra=gb.vertices.length;gb.__vertexArray=new Float32Array(Ra*3);gb.__colorArray=new Float32Array(Ra*3);gb.__webglLineCount=Ra;b(gb,Va);j.verticesNeedUpdate=true;j.colorsNeedUpdate=true}}else if(g instanceof THREE.ParticleSystem){j=g.geometry;if(!j.__webglVertexBuffer){var Ya=j;Ya.__webglVertexBuffer=k.createBuffer();Ya.__webglColorBuffer=k.createBuffer();E.info.geometries++;var Ua=
+j,Ob=g,ob=Ua.vertices.length;Ua.__vertexArray=new Float32Array(ob*3);Ua.__colorArray=new Float32Array(ob*3);Ua.__sortArray=[];Ua.__webglParticleCount=ob;b(Ua,Ob);j.verticesNeedUpdate=true;j.colorsNeedUpdate=true}}}if(!g.__webglActive){if(g instanceof THREE.Mesh){j=g.geometry;if(j instanceof THREE.BufferGeometry)m(h.__webglObjects,j,g);else for(i in j.geometryGroups){l=j.geometryGroups[i];m(h.__webglObjects,l,g)}}else if(g instanceof THREE.Ribbon||g instanceof THREE.Line||g instanceof THREE.ParticleSystem){j=
+g.geometry;m(h.__webglObjects,j,g)}else g instanceof THREE.ImmediateRenderObject||g.immediateRenderCallback?h.__webglObjectsImmediate.push({object:g,opaque:null,transparent:null}):g instanceof THREE.Sprite?h.__webglSprites.push(g):g instanceof THREE.LensFlare&&h.__webglFlares.push(g);g.__webglActive=true}a.__objectsAdded.splice(0,1)}for(;a.__objectsRemoved.length;){var db=a.__objectsRemoved[0],kb=a;db instanceof THREE.Mesh||db instanceof THREE.ParticleSystem||db instanceof THREE.Ribbon||db instanceof
+THREE.Line?r(kb.__webglObjects,db):db instanceof THREE.Sprite?o(kb.__webglSprites,db):db instanceof THREE.LensFlare?o(kb.__webglFlares,db):(db instanceof THREE.ImmediateRenderObject||db.immediateRenderCallback)&&r(kb.__webglObjectsImmediate,db);db.__webglActive=false;a.__objectsRemoved.splice(0,1)}for(var hb=0,pb=a.__webglObjects.length;hb<pb;hb++){var lb=a.__webglObjects[hb].object,da=lb.geometry,cb=void 0,oc=void 0,Wa=void 0;if(lb instanceof THREE.Mesh)if(da instanceof THREE.BufferGeometry){if(da.verticesNeedUpdate||
+da.elementsNeedUpdate||da.uvsNeedUpdate||da.normalsNeedUpdate||da.colorsNeedUpdate||da.tangentsNeedUpdate){var Ib=da,pc=k.DYNAMIC_DRAW,ec=!da.dynamic,qc=Ib.attributes,Gb=qc.index,dc=qc.position,Yc=qc.normal,Zc=qc.uv,$c=qc.color,ad=qc.tangent;if(Ib.elementsNeedUpdate&&Gb!==void 0){k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,Gb.buffer);k.bufferData(k.ELEMENT_ARRAY_BUFFER,Gb.array,pc)}if(Ib.verticesNeedUpdate&&dc!==void 0){k.bindBuffer(k.ARRAY_BUFFER,dc.buffer);k.bufferData(k.ARRAY_BUFFER,dc.array,pc)}if(Ib.normalsNeedUpdate&&
+Yc!==void 0){k.bindBuffer(k.ARRAY_BUFFER,Yc.buffer);k.bufferData(k.ARRAY_BUFFER,Yc.array,pc)}if(Ib.uvsNeedUpdate&&Zc!==void 0){k.bindBuffer(k.ARRAY_BUFFER,Zc.buffer);k.bufferData(k.ARRAY_BUFFER,Zc.array,pc)}if(Ib.colorsNeedUpdate&&$c!==void 0){k.bindBuffer(k.ARRAY_BUFFER,$c.buffer);k.bufferData(k.ARRAY_BUFFER,$c.array,pc)}if(Ib.tangentsNeedUpdate&&ad!==void 0){k.bindBuffer(k.ARRAY_BUFFER,ad.buffer);k.bufferData(k.ARRAY_BUFFER,ad.array,pc)}if(ec){var md=void 0;for(md in Ib.attributes)delete Ib.attributes[md].array}}da.verticesNeedUpdate=
 false;da.elementsNeedUpdate=false;da.uvsNeedUpdate=false;da.normalsNeedUpdate=false;da.colorsNeedUpdate=false;da.tangentsNeedUpdate=false}else{for(var bd=0,yd=da.geometryGroupsList.length;bd<yd;bd++){cb=da.geometryGroupsList[bd];Wa=c(lb,cb);oc=Wa.attributes&&n(Wa);if(da.verticesNeedUpdate||da.morphTargetsNeedUpdate||da.elementsNeedUpdate||da.uvsNeedUpdate||da.normalsNeedUpdate||da.colorsNeedUpdate||da.tangentsNeedUpdate||oc){var ga=cb,zd=lb,Za=k.DYNAMIC_DRAW,Ad=!da.dynamic,hc=Wa;if(ga.__inittedArrays){var nd=
 d(hc),cd=hc.vertexColors?hc.vertexColors:false,od=e(hc),Kc=nd===THREE.SmoothShading,I=void 0,V=void 0,jb=void 0,L=void 0,rc=void 0,Rb=void 0,mb=void 0,Lc=void 0,Jb=void 0,sc=void 0,tc=void 0,Y=void 0,Z=void 0,$=void 0,oa=void 0,qb=void 0,rb=void 0,sb=void 0,xc=void 0,tb=void 0,ub=void 0,vb=void 0,yc=void 0,wb=void 0,xb=void 0,yb=void 0,zc=void 0,zb=void 0,Ab=void 0,Bb=void 0,Ac=void 0,Cb=void 0,Db=void 0,Eb=void 0,Bc=void 0,Sb=void 0,Tb=void 0,Ub=void 0,Mc=void 0,Vb=void 0,Wb=void 0,Xb=void 0,Nc=
 void 0,ja=void 0,pd=void 0,Yb=void 0,uc=void 0,vc=void 0,Ja=void 0,qd=void 0,Ha=void 0,Ia=void 0,Zb=void 0,Kb=void 0,za=0,Ea=0,Lb=0,Mb=0,eb=0,Qa=0,pa=0,Sa=0,Ba=0,K=0,ea=0,A=0,$a=void 0,Ka=ga.__vertexArray,Cc=ga.__uvArray,Dc=ga.__uv2Array,fb=ga.__normalArray,ta=ga.__tangentArray,La=ga.__colorArray,ua=ga.__skinVertexAArray,va=ga.__skinVertexBArray,wa=ga.__skinIndexArray,xa=ga.__skinWeightArray,dd=ga.__morphTargetsArrays,ed=ga.__morphNormalsArrays,fd=ga.__webglCustomAttributesList,y=void 0,Fb=ga.__faceArray,
@@ -427,7 +427,7 @@ l="normal":a instanceof THREE.MeshBasicMaterial?l="basic":a instanceof THREE.Mes
 g++;p instanceof THREE.PointLight&&e++;p instanceof THREE.SpotLight&&n++}}if(e+n+g<=Q){o=g;f=e}else{o=Math.ceil(Q*g/(e+g));n=f=Q-o}e=o;g=n;n=m=0;for(o=b.length;n<o;n++){p=b[n];if(p.castShadow){p instanceof THREE.SpotLight&&m++;p instanceof THREE.DirectionalLight&&!p.shadowCascade&&m++}}if(dc&&d&&d.useVertexTexture)j=1024;else{b=k.getParameter(k.MAX_VERTEX_UNIFORM_VECTORS);b=Math.floor((b-20)/4);if(d!==void 0&&d instanceof THREE.SkinnedMesh){b=Math.min(d.bones.length,b);b<d.bones.length&&console.warn("WebGLRenderer: too many bones - "+
 d.bones.length+", this GPU supports just "+b+" (try OpenGL instead of ANGLE)")}j=b}var r;a:{p=a.fragmentShader;o=a.vertexShader;var n=a.uniforms,b=a.attributes,c={map:!!a.map,envMap:!!a.envMap,lightMap:!!a.lightMap,vertexColors:a.vertexColors,fog:c,useFog:a.fog,sizeAttenuation:a.sizeAttenuation,skinning:a.skinning,maxBones:j,useVertexTexture:dc&&d&&d.useVertexTexture,boneTextureWidth:d&&d.boneTextureWidth,boneTextureHeight:d&&d.boneTextureHeight,morphTargets:a.morphTargets,morphNormals:a.morphNormals,
 maxMorphTargets:this.maxMorphTargets,maxMorphNormals:this.maxMorphNormals,maxDirLights:e,maxPointLights:f,maxSpotLights:g,maxShadows:m,shadowMapEnabled:this.shadowMapEnabled&&d.receiveShadow,shadowMapSoft:this.shadowMapSoft,shadowMapDebug:this.shadowMapDebug,shadowMapCascade:this.shadowMapCascade,alphaTest:a.alphaTest,metal:a.metal,perPixel:a.perPixel,wrapAround:a.wrapAround,doubleSided:d&&d.doubleSided},q,d=[];if(l)d.push(l);else{d.push(p);d.push(o)}for(q in c){d.push(q);d.push(c[q])}l=d.join();
-q=0;for(d=aa.length;q<d;q++){e=aa[q];if(e.code===l){e.usedTimes++;r=e.program;break a}}q=k.createProgram();d=["precision "+u+" float;",pb?"#define VERTEX_TEXTURES":"",E.gammaInput?"#define GAMMA_INPUT":"",E.gammaOutput?"#define GAMMA_OUTPUT":"",E.physicallyBasedShading?"#define PHYSICALLY_BASED_SHADING":"","#define MAX_DIR_LIGHTS "+c.maxDirLights,"#define MAX_POINT_LIGHTS "+c.maxPointLights,"#define MAX_SPOT_LIGHTS "+c.maxSpotLights,"#define MAX_SHADOWS "+c.maxShadows,"#define MAX_BONES "+c.maxBones,
+q=0;for(d=aa.length;q<d;q++){e=aa[q];if(e.code===l){e.usedTimes++;r=e.program;break a}}q=k.createProgram();d=["precision "+u+" float;",cb?"#define VERTEX_TEXTURES":"",E.gammaInput?"#define GAMMA_INPUT":"",E.gammaOutput?"#define GAMMA_OUTPUT":"",E.physicallyBasedShading?"#define PHYSICALLY_BASED_SHADING":"","#define MAX_DIR_LIGHTS "+c.maxDirLights,"#define MAX_POINT_LIGHTS "+c.maxPointLights,"#define MAX_SPOT_LIGHTS "+c.maxSpotLights,"#define MAX_SHADOWS "+c.maxShadows,"#define MAX_BONES "+c.maxBones,
 c.map?"#define USE_MAP":"",c.envMap?"#define USE_ENVMAP":"",c.lightMap?"#define USE_LIGHTMAP":"",c.vertexColors?"#define USE_COLOR":"",c.skinning?"#define USE_SKINNING":"",c.useVertexTexture?"#define BONE_TEXTURE":"",c.boneTextureWidth?"#define N_BONE_PIXEL_X "+c.boneTextureWidth.toFixed(1):"",c.boneTextureHeight?"#define N_BONE_PIXEL_Y "+c.boneTextureHeight.toFixed(1):"",c.morphTargets?"#define USE_MORPHTARGETS":"",c.morphNormals?"#define USE_MORPHNORMALS":"",c.perPixel?"#define PHONG_PER_PIXEL":
 "",c.wrapAround?"#define WRAP_AROUND":"",c.doubleSided?"#define DOUBLE_SIDED":"",c.shadowMapEnabled?"#define USE_SHADOWMAP":"",c.shadowMapSoft?"#define SHADOWMAP_SOFT":"",c.shadowMapDebug?"#define SHADOWMAP_DEBUG":"",c.shadowMapCascade?"#define SHADOWMAP_CASCADE":"",c.sizeAttenuation?"#define USE_SIZEATTENUATION":"","uniform mat4 objectMatrix;\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform mat4 viewMatrix;\nuniform mat3 normalMatrix;\nuniform vec3 cameraPosition;\nattribute vec3 position;\nattribute vec3 normal;\nattribute vec2 uv;\nattribute vec2 uv2;\n#ifdef USE_COLOR\nattribute vec3 color;\n#endif\n#ifdef USE_MORPHTARGETS\nattribute vec3 morphTarget0;\nattribute vec3 morphTarget1;\nattribute vec3 morphTarget2;\nattribute vec3 morphTarget3;\n#ifdef USE_MORPHNORMALS\nattribute vec3 morphNormal0;\nattribute vec3 morphNormal1;\nattribute vec3 morphNormal2;\nattribute vec3 morphNormal3;\n#else\nattribute vec3 morphTarget4;\nattribute vec3 morphTarget5;\nattribute vec3 morphTarget6;\nattribute vec3 morphTarget7;\n#endif\n#endif\n#ifdef USE_SKINNING\nattribute vec4 skinVertexA;\nattribute vec4 skinVertexB;\nattribute vec4 skinIndex;\nattribute vec4 skinWeight;\n#endif\n"].join("\n");
 e=["precision "+u+" float;","#define MAX_DIR_LIGHTS "+c.maxDirLights,"#define MAX_POINT_LIGHTS "+c.maxPointLights,"#define MAX_SPOT_LIGHTS "+c.maxSpotLights,"#define MAX_SHADOWS "+c.maxShadows,c.alphaTest?"#define ALPHATEST "+c.alphaTest:"",E.gammaInput?"#define GAMMA_INPUT":"",E.gammaOutput?"#define GAMMA_OUTPUT":"",E.physicallyBasedShading?"#define PHYSICALLY_BASED_SHADING":"",c.useFog&&c.fog?"#define USE_FOG":"",c.useFog&&c.fog instanceof THREE.FogExp2?"#define FOG_EXP2":"",c.map?"#define USE_MAP":

+ 74 - 74
build/custom/ThreeWebGL.js

@@ -291,82 +291,82 @@ d.opacity;if(f.receiveShadow&&!d._shadowPass&&j.shadowMatrix){e=c=0;for(k=b.leng
 if(l==="i")g.uniform1i(m,k);else if(l==="f")g.uniform1f(m,k);else if(l==="v2")g.uniform2f(m,k.x,k.y);else if(l==="v3")g.uniform3f(m,k.x,k.y,k.z);else if(l==="v4")g.uniform4f(m,k.x,k.y,k.z,k.w);else if(l==="c")g.uniform3f(m,k.r,k.g,k.b);else if(l==="iv1")g.uniform1iv(m,k);else if(l==="iv")g.uniform3iv(m,k);else if(l==="fv1")g.uniform1fv(m,k);else if(l==="fv")g.uniform3fv(m,k);else if(l==="v2v"){if(e._array===void 0)e._array=new Float32Array(2*k.length);l=0;for(n=k.length;l<n;l++){p=l*2;e._array[p]=
 k[l].x;e._array[p+1]=k[l].y}g.uniform2fv(m,e._array)}else if(l==="v3v"){if(e._array===void 0)e._array=new Float32Array(3*k.length);l=0;for(n=k.length;l<n;l++){p=l*3;e._array[p]=k[l].x;e._array[p+1]=k[l].y;e._array[p+2]=k[l].z}g.uniform3fv(m,e._array)}else if(l==="v4v"){if(e._array===void 0)e._array=new Float32Array(4*k.length);l=0;for(n=k.length;l<n;l++){p=l*4;e._array[p]=k[l].x;e._array[p+1]=k[l].y;e._array[p+2]=k[l].z;e._array[p+3]=k[l].w}g.uniform4fv(m,e._array)}else if(l==="m4"){if(e._array===
 void 0)e._array=new Float32Array(16);k.flattenToArray(e._array);g.uniformMatrix4fv(m,false,e._array)}else if(l==="m4v"){if(e._array===void 0)e._array=new Float32Array(16*k.length);l=0;for(n=k.length;l<n;l++)k[l].flattenToArrayOffset(e._array,l*16);g.uniformMatrix4fv(m,false,e._array)}else if(l==="t"){g.uniform1i(m,k);if(m=e.texture)if(m.image instanceof Array&&m.image.length===6){e=m;if(e.image.length===6)if(e.needsUpdate){if(!e.image.__webglTextureCube)e.image.__webglTextureCube=g.createTexture();
-g.activeTexture(g.TEXTURE0+k);g.bindTexture(g.TEXTURE_CUBE_MAP,e.image.__webglTextureCube);g.pixelStorei(g.UNPACK_FLIP_Y_WEBGL,e.flipY);k=[];for(m=0;m<6;m++){l=k;n=m;if(F.autoScaleCubemaps){p=e.image[m];w=Oc;if(!(p.width<=w&&p.height<=w)){u=Math.max(p.width,p.height);s=Math.floor(p.width*w/u);w=Math.floor(p.height*w/u);u=document.createElement("canvas");u.width=s;u.height=w;u.getContext("2d").drawImage(p,0,0,p.width,p.height,0,0,s,w);p=u}}else p=e.image[m];l[n]=p}m=k[0];l=(m.width&m.width-1)===0&&
+g.activeTexture(g.TEXTURE0+k);g.bindTexture(g.TEXTURE_CUBE_MAP,e.image.__webglTextureCube);g.pixelStorei(g.UNPACK_FLIP_Y_WEBGL,e.flipY);k=[];for(m=0;m<6;m++){l=k;n=m;if(F.autoScaleCubemaps){p=e.image[m];w=Pc;if(!(p.width<=w&&p.height<=w)){u=Math.max(p.width,p.height);s=Math.floor(p.width*w/u);w=Math.floor(p.height*w/u);u=document.createElement("canvas");u.width=s;u.height=w;u.getContext("2d").drawImage(p,0,0,p.width,p.height,0,0,s,w);p=u}}else p=e.image[m];l[n]=p}m=k[0];l=(m.width&m.width-1)===0&&
 (m.height&m.height-1)===0;n=A(e.format);p=A(e.type);H(g.TEXTURE_CUBE_MAP,e,l);for(m=0;m<6;m++)g.texImage2D(g.TEXTURE_CUBE_MAP_POSITIVE_X+m,0,n,n,p,k[m]);e.generateMipmaps&&l&&g.generateMipmap(g.TEXTURE_CUBE_MAP);e.needsUpdate=false;if(e.onUpdate)e.onUpdate()}else{g.activeTexture(g.TEXTURE0+k);g.bindTexture(g.TEXTURE_CUBE_MAP,e.image.__webglTextureCube)}}else if(m instanceof THREE.WebGLRenderTargetCube){e=m;g.activeTexture(g.TEXTURE0+k);g.bindTexture(g.TEXTURE_CUBE_MAP,e.__webglTexture)}else F.setTexture(m,
 k)}else if(l==="tv"){if(e._array===void 0){e._array=[];l=0;for(n=e.texture.length;l<n;l++)e._array[l]=k+l}g.uniform1iv(m,e._array);l=0;for(n=e.texture.length;l<n;l++)(m=e.texture[l])&&F.setTexture(m,e._array[l])}}if((d instanceof THREE.ShaderMaterial||d instanceof THREE.MeshPhongMaterial||d.envMap)&&i.cameraPosition!==null){b=a.matrixWorld.getPosition();g.uniform3f(i.cameraPosition,b.x,b.y,b.z)}(d instanceof THREE.MeshPhongMaterial||d instanceof THREE.MeshLambertMaterial||d instanceof THREE.ShaderMaterial||
 d.skinning)&&i.viewMatrix!==null&&g.uniformMatrix4fv(i.viewMatrix,false,a._viewMatrixArray)}if(d.skinning)if(hc&&f.useVertexTexture){if(i.boneTexture!==null){g.uniform1i(i.boneTexture,12);F.setTexture(f.boneTexture,12)}}else i.boneGlobalMatrices!==null&&g.uniformMatrix4fv(i.boneGlobalMatrices,false,f.boneMatrices);g.uniformMatrix4fv(i.modelViewMatrix,false,f._modelViewMatrix.elements);i.normalMatrix&&g.uniformMatrix3fv(i.normalMatrix,false,f._normalMatrix.elements);i.objectMatrix!==null&&g.uniformMatrix4fv(i.objectMatrix,
 false,f.matrixWorld.elements);return h}function p(a,b){a._modelViewMatrix.multiply(b.matrixWorldInverse,a.matrixWorld);a._normalMatrix.getInverse(a._modelViewMatrix);a._normalMatrix.transpose()}function x(a,b,c){if(Va!==a){a?g.enable(g.POLYGON_OFFSET_FILL):g.disable(g.POLYGON_OFFSET_FILL);Va=a}if(a&&(wb!==b||Lb!==c)){g.polygonOffset(b,c);wb=b;Lb=c}}function u(a,b){var c;a==="fragment"?c=g.createShader(g.FRAGMENT_SHADER):a==="vertex"&&(c=g.createShader(g.VERTEX_SHADER));g.shaderSource(c,b);g.compileShader(c);
 if(!g.getShaderParameter(c,g.COMPILE_STATUS)){console.error(g.getShaderInfoLog(c));console.error(b);return null}return c}function H(a,b,c){if(c){g.texParameteri(a,g.TEXTURE_WRAP_S,A(b.wrapS));g.texParameteri(a,g.TEXTURE_WRAP_T,A(b.wrapT));g.texParameteri(a,g.TEXTURE_MAG_FILTER,A(b.magFilter));g.texParameteri(a,g.TEXTURE_MIN_FILTER,A(b.minFilter))}else{g.texParameteri(a,g.TEXTURE_WRAP_S,g.CLAMP_TO_EDGE);g.texParameteri(a,g.TEXTURE_WRAP_T,g.CLAMP_TO_EDGE);g.texParameteri(a,g.TEXTURE_MAG_FILTER,E(b.magFilter));
-g.texParameteri(a,g.TEXTURE_MIN_FILTER,E(b.minFilter))}Za&&g.texParameterf(a,Za.TEXTURE_MAX_ANISOTROPY_EXT,b.anisotropy)}function w(a,b){g.bindRenderbuffer(g.RENDERBUFFER,a);if(b.depthBuffer&&!b.stencilBuffer){g.renderbufferStorage(g.RENDERBUFFER,g.DEPTH_COMPONENT16,b.width,b.height);g.framebufferRenderbuffer(g.FRAMEBUFFER,g.DEPTH_ATTACHMENT,g.RENDERBUFFER,a)}else if(b.depthBuffer&&b.stencilBuffer){g.renderbufferStorage(g.RENDERBUFFER,g.DEPTH_STENCIL,b.width,b.height);g.framebufferRenderbuffer(g.FRAMEBUFFER,
-g.DEPTH_STENCIL_ATTACHMENT,g.RENDERBUFFER,a)}else g.renderbufferStorage(g.RENDERBUFFER,g.RGBA4,b.width,b.height)}function E(a){return a===THREE.NearestFilter||a===THREE.NearestMipMapNearestFilter||a===THREE.NearestMipMapLinearFilter?g.NEAREST:g.LINEAR}function A(a){return a===THREE.RepeatWrapping?g.REPEAT:a===THREE.ClampToEdgeWrapping?g.CLAMP_TO_EDGE:a===THREE.MirroredRepeatWrapping?g.MIRRORED_REPEAT:a===THREE.NearestFilter?g.NEAREST:a===THREE.NearestMipMapNearestFilter?g.NEAREST_MIPMAP_NEAREST:a===
-THREE.NearestMipMapLinearFilter?g.NEAREST_MIPMAP_LINEAR:a===THREE.LinearFilter?g.LINEAR:a===THREE.LinearMipMapNearestFilter?g.LINEAR_MIPMAP_NEAREST:a===THREE.LinearMipMapLinearFilter?g.LINEAR_MIPMAP_LINEAR:a===THREE.UnsignedByteType?g.UNSIGNED_BYTE:a===THREE.UnsignedShort4444Type?g.UNSIGNED_SHORT_4_4_4_4:a===THREE.UnsignedShort5551Type?g.UNSIGNED_SHORT_5_5_5_1:a===THREE.UnsignedShort565Type?g.UNSIGNED_SHORT_5_6_5:a===THREE.ByteType?g.BYTE:a===THREE.ShortType?g.SHORT:a===THREE.UnsignedShortType?g.UNSIGNED_SHORT:
-a===THREE.IntType?g.INT:a===THREE.UnsignedIntType?g.UNSIGNED_INT:a===THREE.FloatType?g.FLOAT:a===THREE.AlphaFormat?g.ALPHA:a===THREE.RGBFormat?g.RGB:a===THREE.RGBAFormat?g.RGBA:a===THREE.LuminanceFormat?g.LUMINANCE:a===THREE.LuminanceAlphaFormat?g.LUMINANCE_ALPHA:a===THREE.AddEquation?g.FUNC_ADD:a===THREE.SubtractEquation?g.FUNC_SUBTRACT:a===THREE.ReverseSubtractEquation?g.FUNC_REVERSE_SUBTRACT:a===THREE.ZeroFactor?g.ZERO:a===THREE.OneFactor?g.ONE:a===THREE.SrcColorFactor?g.SRC_COLOR:a===THREE.OneMinusSrcColorFactor?
-g.ONE_MINUS_SRC_COLOR:a===THREE.SrcAlphaFactor?g.SRC_ALPHA:a===THREE.OneMinusSrcAlphaFactor?g.ONE_MINUS_SRC_ALPHA:a===THREE.DstAlphaFactor?g.DST_ALPHA:a===THREE.OneMinusDstAlphaFactor?g.ONE_MINUS_DST_ALPHA:a===THREE.DstColorFactor?g.DST_COLOR:a===THREE.OneMinusDstColorFactor?g.ONE_MINUS_DST_COLOR:a===THREE.SrcAlphaSaturateFactor?g.SRC_ALPHA_SATURATE:0}console.log("THREE.WebGLRenderer",THREE.REVISION);var a=a||{},G=a.canvas!==void 0?a.canvas:document.createElement("canvas"),C=a.precision!==void 0?
-a.precision:"highp",L=a.alpha!==void 0?a.alpha:true,I=a.premultipliedAlpha!==void 0?a.premultipliedAlpha:true,T=a.antialias!==void 0?a.antialias:false,V=a.stencil!==void 0?a.stencil:true,R=a.preserveDrawingBuffer!==void 0?a.preserveDrawingBuffer:false,z=a.clearColor!==void 0?new THREE.Color(a.clearColor):new THREE.Color(0),K=a.clearAlpha!==void 0?a.clearAlpha:0,U=a.maxLights!==void 0?a.maxLights:4;this.domElement=G;this.context=null;this.autoUpdateScene=this.autoUpdateObjects=this.sortObjects=this.autoClearStencil=
-this.autoClearDepth=this.autoClearColor=this.autoClear=true;this.shadowMapEnabled=this.physicallyBasedShading=this.gammaOutput=this.gammaInput=false;this.shadowMapCullFrontFaces=this.shadowMapSoft=this.shadowMapAutoUpdate=true;this.shadowMapCascade=this.shadowMapDebug=false;this.maxMorphTargets=8;this.maxMorphNormals=4;this.autoScaleCubemaps=true;this.renderPluginsPre=[];this.renderPluginsPost=[];this.info={memory:{programs:0,geometries:0,textures:0},render:{calls:0,vertices:0,faces:0,points:0}};
-var F=this,ba=[],ia=0,J=null,ka=null,$=-1,S=null,aa=null,sa=0,ha=-1,M=-1,ta=-1,Aa=-1,la=-1,Ia=-1,Ha=-1,Ba=-1,Va=null,wb=null,Lb=null,Mb=null,xb=0,Nb=0,Ob=0,Pb=0,gc=0,xc=0,ic=new THREE.Frustum,Wb=new THREE.Matrix4,Vb=new THREE.Matrix4,pb=new THREE.Vector4,La=new THREE.Vector3,Wa=true,yc={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[],distances:[]},spot:{length:0,colors:[],positions:[],distances:[],directions:[],angles:[],exponents:[]}},g,Za;try{if(!(g=
-G.getContext("experimental-webgl",{alpha:L,premultipliedAlpha:I,antialias:T,stencil:V,preserveDrawingBuffer:R})))throw"Error creating WebGL context.";}catch(Pc){console.error(Pc)}a=g.getExtension("OES_texture_float");L=g.getExtension("OES_standard_derivatives");Za=g.getExtension("EXT_texture_filter_anisotropic")||g.getExtension("MOZ_EXT_texture_filter_anisotropic")||g.getExtension("WEBKIT_EXT_texture_filter_anisotropic");a||console.log("THREE.WebGLRenderer: Float textures not supported.");L||console.log("THREE.WebGLRenderer: Standard derivatives not supported.");
-Za||console.log("THREE.WebGLRenderer: Anisotropic texture filtering not supported.");g.clearColor(0,0,0,1);g.clearDepth(1);g.clearStencil(0);g.enable(g.DEPTH_TEST);g.depthFunc(g.LEQUAL);g.frontFace(g.CCW);g.cullFace(g.BACK);g.enable(g.CULL_FACE);g.enable(g.BLEND);g.blendEquation(g.FUNC_ADD);g.blendFunc(g.SRC_ALPHA,g.ONE_MINUS_SRC_ALPHA);g.clearColor(z.r,z.g,z.b,K);this.context=g;L=g.getParameter(g.MAX_VERTEX_TEXTURE_IMAGE_UNITS);g.getParameter(g.MAX_TEXTURE_SIZE);var Oc=g.getParameter(g.MAX_CUBE_MAP_TEXTURE_SIZE),
-Qc=Za?g.getParameter(Za.MAX_TEXTURE_MAX_ANISOTROPY_EXT):0,jc=L>0,hc=jc&&a;this.getContext=function(){return g};this.supportsVertexTextures=function(){return jc};this.getMaxAnisotropy=function(){return Qc};this.setSize=function(a,b){G.width=a;G.height=b;this.setViewport(0,0,G.width,G.height)};this.setViewport=function(a,b,c,d){xb=a!==void 0?a:0;Nb=b!==void 0?b:0;Ob=c!==void 0?c:G.width;Pb=d!==void 0?d:G.height;g.viewport(xb,Nb,Ob,Pb)};this.setScissor=function(a,b,c,d){g.scissor(a,b,c,d)};this.enableScissorTest=
-function(a){a?g.enable(g.SCISSOR_TEST):g.disable(g.SCISSOR_TEST)};this.setClearColorHex=function(a,b){z.setHex(a);K=b;g.clearColor(z.r,z.g,z.b,K)};this.setClearColor=function(a,b){z.copy(a);K=b;g.clearColor(z.r,z.g,z.b,K)};this.getClearColor=function(){return z};this.getClearAlpha=function(){return K};this.clear=function(a,b,c){var d=0;if(a===void 0||a)d=d|g.COLOR_BUFFER_BIT;if(b===void 0||b)d=d|g.DEPTH_BUFFER_BIT;if(c===void 0||c)d=d|g.STENCIL_BUFFER_BIT;g.clear(d)};this.clearTarget=function(a,b,
-c,d){this.setRenderTarget(a);this.clear(b,c,d)};this.addPostPlugin=function(a){a.init(this);this.renderPluginsPost.push(a)};this.addPrePlugin=function(a){a.init(this);this.renderPluginsPre.push(a)};this.deallocateObject=function(a){if(a.__webglInit){a.__webglInit=false;delete a._modelViewMatrix;delete a._normalMatrix;delete a._normalMatrixArray;delete a._modelViewMatrixArray;delete a._objectMatrixArray;if(a instanceof THREE.Mesh)for(var b in a.geometry.geometryGroups){var c=a.geometry.geometryGroups[b];
-g.deleteBuffer(c.__webglVertexBuffer);g.deleteBuffer(c.__webglNormalBuffer);g.deleteBuffer(c.__webglTangentBuffer);g.deleteBuffer(c.__webglColorBuffer);g.deleteBuffer(c.__webglUVBuffer);g.deleteBuffer(c.__webglUV2Buffer);g.deleteBuffer(c.__webglSkinVertexABuffer);g.deleteBuffer(c.__webglSkinVertexBBuffer);g.deleteBuffer(c.__webglSkinIndicesBuffer);g.deleteBuffer(c.__webglSkinWeightsBuffer);g.deleteBuffer(c.__webglFaceBuffer);g.deleteBuffer(c.__webglLineBuffer);var d=void 0,e=void 0;if(c.numMorphTargets){d=
-0;for(e=c.numMorphTargets;d<e;d++)g.deleteBuffer(c.__webglMorphTargetsBuffers[d])}if(c.numMorphNormals){d=0;for(e=c.numMorphNormals;d<e;d++)g.deleteBuffer(c.__webglMorphNormalsBuffers[d])}if(c.__webglCustomAttributesList){d=void 0;for(d in c.__webglCustomAttributesList)g.deleteBuffer(c.__webglCustomAttributesList[d].buffer)}F.info.memory.geometries--}else if(a instanceof THREE.Ribbon){a=a.geometry;g.deleteBuffer(a.__webglVertexBuffer);g.deleteBuffer(a.__webglColorBuffer);F.info.memory.geometries--}else if(a instanceof
-THREE.Line){a=a.geometry;g.deleteBuffer(a.__webglVertexBuffer);g.deleteBuffer(a.__webglColorBuffer);F.info.memory.geometries--}else if(a instanceof THREE.ParticleSystem){a=a.geometry;g.deleteBuffer(a.__webglVertexBuffer);g.deleteBuffer(a.__webglColorBuffer);F.info.memory.geometries--}}};this.deallocateTexture=function(a){if(a.__webglInit){a.__webglInit=false;g.deleteTexture(a.__webglTexture);F.info.memory.textures--}};this.deallocateRenderTarget=function(a){if(a&&a.__webglTexture){g.deleteTexture(a.__webglTexture);
-if(a instanceof THREE.WebGLRenderTargetCube)for(var b=0;b<6;b++){g.deleteFramebuffer(a.__webglFramebuffer[b]);g.deleteRenderbuffer(a.__webglRenderbuffer[b])}else{g.deleteFramebuffer(a.__webglFramebuffer);g.deleteRenderbuffer(a.__webglRenderbuffer)}}};this.deallocateMaterial=function(a){var b=a.program;if(b){a.program=void 0;var c,d,e=false,a=0;for(c=ba.length;a<c;a++){d=ba[a];if(d.program===b){d.usedTimes--;d.usedTimes===0&&(e=true);break}}if(e){e=[];a=0;for(c=ba.length;a<c;a++){d=ba[a];d.program!==
-b&&e.push(d)}ba=e;g.deleteProgram(b);F.info.memory.programs--}}};this.updateShadowMap=function(a,b){J=null;$=S=Ba=Ha=ta=-1;Wa=true;M=ha=-1;this.shadowMapPlugin.update(a,b)};this.renderBufferImmediate=function(a,b,c){if(a.hasPositions&&!a.__webglVertexBuffer)a.__webglVertexBuffer=g.createBuffer();if(a.hasNormals&&!a.__webglNormalBuffer)a.__webglNormalBuffer=g.createBuffer();if(a.hasUvs&&!a.__webglUvBuffer)a.__webglUvBuffer=g.createBuffer();if(a.hasColors&&!a.__webglColorBuffer)a.__webglColorBuffer=
-g.createBuffer();if(a.hasPositions){g.bindBuffer(g.ARRAY_BUFFER,a.__webglVertexBuffer);g.bufferData(g.ARRAY_BUFFER,a.positionArray,g.DYNAMIC_DRAW);g.enableVertexAttribArray(b.attributes.position);g.vertexAttribPointer(b.attributes.position,3,g.FLOAT,false,0,0)}if(a.hasNormals){g.bindBuffer(g.ARRAY_BUFFER,a.__webglNormalBuffer);if(c.shading===THREE.FlatShading){var d,e,f,h,i,j,k,l,m,n,o,q=a.count*3;for(o=0;o<q;o=o+9){n=a.normalArray;d=n[o];e=n[o+1];f=n[o+2];h=n[o+3];j=n[o+4];l=n[o+5];i=n[o+6];k=n[o+
-7];m=n[o+8];d=(d+h+i)/3;e=(e+j+k)/3;f=(f+l+m)/3;n[o]=d;n[o+1]=e;n[o+2]=f;n[o+3]=d;n[o+4]=e;n[o+5]=f;n[o+6]=d;n[o+7]=e;n[o+8]=f}}g.bufferData(g.ARRAY_BUFFER,a.normalArray,g.DYNAMIC_DRAW);g.enableVertexAttribArray(b.attributes.normal);g.vertexAttribPointer(b.attributes.normal,3,g.FLOAT,false,0,0)}if(a.hasUvs&&c.map){g.bindBuffer(g.ARRAY_BUFFER,a.__webglUvBuffer);g.bufferData(g.ARRAY_BUFFER,a.uvArray,g.DYNAMIC_DRAW);g.enableVertexAttribArray(b.attributes.uv);g.vertexAttribPointer(b.attributes.uv,2,g.FLOAT,
-false,0,0)}if(a.hasColors&&c.vertexColors!==THREE.NoColors){g.bindBuffer(g.ARRAY_BUFFER,a.__webglColorBuffer);g.bufferData(g.ARRAY_BUFFER,a.colorArray,g.DYNAMIC_DRAW);g.enableVertexAttribArray(b.attributes.color);g.vertexAttribPointer(b.attributes.color,3,g.FLOAT,false,0,0)}g.drawArrays(g.TRIANGLES,0,a.count);a.count=0};this.renderBufferDirect=function(a,b,c,d,e,f){if(d.visible!==false){c=r(a,b,c,d,f);a=c.attributes;b=false;d=e.id*16777215+c.id*2+(d.wireframe?1:0);if(d!==S){S=d;b=true}if(f instanceof
-THREE.Mesh){f=e.offsets;f.length>1&&(b=true);d=0;for(c=f.length;d<c;++d){var h=f[d].index;if(b){var i=e.attributes.position,j=i.itemSize;g.bindBuffer(g.ARRAY_BUFFER,i.buffer);g.vertexAttribPointer(a.position,j,g.FLOAT,false,0,h*j*4);i=e.attributes.normal;if(a.normal>=0&&i){j=i.itemSize;g.bindBuffer(g.ARRAY_BUFFER,i.buffer);g.vertexAttribPointer(a.normal,j,g.FLOAT,false,0,h*j*4)}i=e.attributes.uv;if(a.uv>=0&&i)if(i.buffer){j=i.itemSize;g.bindBuffer(g.ARRAY_BUFFER,i.buffer);g.vertexAttribPointer(a.uv,
-j,g.FLOAT,false,0,h*j*4);g.enableVertexAttribArray(a.uv)}else g.disableVertexAttribArray(a.uv);i=e.attributes.color;if(a.color>=0&&i){j=i.itemSize;g.bindBuffer(g.ARRAY_BUFFER,i.buffer);g.vertexAttribPointer(a.color,j,g.FLOAT,false,0,h*j*4)}i=e.attributes.tangent;if(a.tangent>=0&&i){j=i.itemSize;g.bindBuffer(g.ARRAY_BUFFER,i.buffer);g.vertexAttribPointer(a.tangent,j,g.FLOAT,false,0,h*j*4)}g.bindBuffer(g.ELEMENT_ARRAY_BUFFER,e.attributes.index.buffer)}g.drawElements(g.TRIANGLES,f[d].count,g.UNSIGNED_SHORT,
-f[d].start*2);F.info.render.calls++;F.info.render.vertices=F.info.render.vertices+f[d].count;F.info.render.faces=F.info.render.faces+f[d].count/3}}}};this.renderBuffer=function(a,b,c,d,e,f){if(d.visible!==false){var h,i,c=r(a,b,c,d,f),b=c.attributes,a=false,c=e.id*16777215+c.id*2+(d.wireframe?1:0);if(c!==S){S=c;a=true}if(!d.morphTargets&&b.position>=0){if(a){g.bindBuffer(g.ARRAY_BUFFER,e.__webglVertexBuffer);g.vertexAttribPointer(b.position,3,g.FLOAT,false,0,0)}}else if(f.morphTargetBase){c=d.program.attributes;
-if(f.morphTargetBase!==-1){g.bindBuffer(g.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[f.morphTargetBase]);g.vertexAttribPointer(c.position,3,g.FLOAT,false,0,0)}else if(c.position>=0){g.bindBuffer(g.ARRAY_BUFFER,e.__webglVertexBuffer);g.vertexAttribPointer(c.position,3,g.FLOAT,false,0,0)}if(f.morphTargetForcedOrder.length){var k=0;i=f.morphTargetForcedOrder;for(h=f.morphTargetInfluences;k<d.numSupportedMorphTargets&&k<i.length;){g.bindBuffer(g.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[i[k]]);g.vertexAttribPointer(c["morphTarget"+
-k],3,g.FLOAT,false,0,0);if(d.morphNormals){g.bindBuffer(g.ARRAY_BUFFER,e.__webglMorphNormalsBuffers[i[k]]);g.vertexAttribPointer(c["morphNormal"+k],3,g.FLOAT,false,0,0)}f.__webglMorphTargetInfluences[k]=h[i[k]];k++}}else{i=[];h=f.morphTargetInfluences;var l,m=h.length;for(l=0;l<m;l++){k=h[l];k>0&&i.push([l,k])}if(i.length>d.numSupportedMorphTargets){i.sort(j);i.length=d.numSupportedMorphTargets}else i.length>d.numSupportedMorphNormals?i.sort(j):i.length===0&&i.push([0,0]);for(k=0;k<d.numSupportedMorphTargets;){if(i[k]){l=
-i[k][0];g.bindBuffer(g.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[l]);g.vertexAttribPointer(c["morphTarget"+k],3,g.FLOAT,false,0,0);if(d.morphNormals){g.bindBuffer(g.ARRAY_BUFFER,e.__webglMorphNormalsBuffers[l]);g.vertexAttribPointer(c["morphNormal"+k],3,g.FLOAT,false,0,0)}f.__webglMorphTargetInfluences[k]=h[l]}else{g.vertexAttribPointer(c["morphTarget"+k],3,g.FLOAT,false,0,0);d.morphNormals&&g.vertexAttribPointer(c["morphNormal"+k],3,g.FLOAT,false,0,0);f.__webglMorphTargetInfluences[k]=0}k++}}d.program.uniforms.morphTargetInfluences!==
-null&&g.uniform1fv(d.program.uniforms.morphTargetInfluences,f.__webglMorphTargetInfluences)}if(a){if(e.__webglCustomAttributesList){h=0;for(i=e.__webglCustomAttributesList.length;h<i;h++){c=e.__webglCustomAttributesList[h];if(b[c.buffer.belongsToAttribute]>=0){g.bindBuffer(g.ARRAY_BUFFER,c.buffer);g.vertexAttribPointer(b[c.buffer.belongsToAttribute],c.size,g.FLOAT,false,0,0)}}}if(b.color>=0){g.bindBuffer(g.ARRAY_BUFFER,e.__webglColorBuffer);g.vertexAttribPointer(b.color,3,g.FLOAT,false,0,0)}if(b.normal>=
-0){g.bindBuffer(g.ARRAY_BUFFER,e.__webglNormalBuffer);g.vertexAttribPointer(b.normal,3,g.FLOAT,false,0,0)}if(b.tangent>=0){g.bindBuffer(g.ARRAY_BUFFER,e.__webglTangentBuffer);g.vertexAttribPointer(b.tangent,4,g.FLOAT,false,0,0)}if(b.uv>=0)if(e.__webglUVBuffer){g.bindBuffer(g.ARRAY_BUFFER,e.__webglUVBuffer);g.vertexAttribPointer(b.uv,2,g.FLOAT,false,0,0);g.enableVertexAttribArray(b.uv)}else g.disableVertexAttribArray(b.uv);if(b.uv2>=0)if(e.__webglUV2Buffer){g.bindBuffer(g.ARRAY_BUFFER,e.__webglUV2Buffer);
-g.vertexAttribPointer(b.uv2,2,g.FLOAT,false,0,0);g.enableVertexAttribArray(b.uv2)}else g.disableVertexAttribArray(b.uv2);if(d.skinning&&b.skinVertexA>=0&&b.skinVertexB>=0&&b.skinIndex>=0&&b.skinWeight>=0){g.bindBuffer(g.ARRAY_BUFFER,e.__webglSkinVertexABuffer);g.vertexAttribPointer(b.skinVertexA,4,g.FLOAT,false,0,0);g.bindBuffer(g.ARRAY_BUFFER,e.__webglSkinVertexBBuffer);g.vertexAttribPointer(b.skinVertexB,4,g.FLOAT,false,0,0);g.bindBuffer(g.ARRAY_BUFFER,e.__webglSkinIndicesBuffer);g.vertexAttribPointer(b.skinIndex,
-4,g.FLOAT,false,0,0);g.bindBuffer(g.ARRAY_BUFFER,e.__webglSkinWeightsBuffer);g.vertexAttribPointer(b.skinWeight,4,g.FLOAT,false,0,0)}}if(f instanceof THREE.Mesh){if(d.wireframe){d=d.wireframeLinewidth;if(d!==Mb){g.lineWidth(d);Mb=d}a&&g.bindBuffer(g.ELEMENT_ARRAY_BUFFER,e.__webglLineBuffer);g.drawElements(g.LINES,e.__webglLineCount,g.UNSIGNED_SHORT,0)}else{a&&g.bindBuffer(g.ELEMENT_ARRAY_BUFFER,e.__webglFaceBuffer);g.drawElements(g.TRIANGLES,e.__webglFaceCount,g.UNSIGNED_SHORT,0)}F.info.render.calls++;
-F.info.render.vertices=F.info.render.vertices+e.__webglFaceCount;F.info.render.faces=F.info.render.faces+e.__webglFaceCount/3}else if(f instanceof THREE.Line){f=f.type===THREE.LineStrip?g.LINE_STRIP:g.LINES;d=d.linewidth;if(d!==Mb){g.lineWidth(d);Mb=d}g.drawArrays(f,0,e.__webglLineCount);F.info.render.calls++}else if(f instanceof THREE.ParticleSystem){g.drawArrays(g.POINTS,0,e.__webglParticleCount);F.info.render.calls++;F.info.render.points=F.info.render.points+e.__webglParticleCount}else if(f instanceof
-THREE.Ribbon){g.drawArrays(g.TRIANGLE_STRIP,0,e.__webglVertexCount);F.info.render.calls++}}};this.render=function(a,b,c,d){var e,f,j,m,n=a.__lights,o=a.fog;$=-1;Wa=true;if(b.parent===void 0){console.warn("DEPRECATED: Camera hasn't been added to a Scene. Adding it...");a.add(b)}this.autoUpdateScene&&a.updateMatrixWorld();if(!b._viewMatrixArray)b._viewMatrixArray=new Float32Array(16);if(!b._projectionMatrixArray)b._projectionMatrixArray=new Float32Array(16);b.matrixWorldInverse.getInverse(b.matrixWorld);
-b.matrixWorldInverse.flattenToArray(b._viewMatrixArray);b.projectionMatrix.flattenToArray(b._projectionMatrixArray);Wb.multiply(b.projectionMatrix,b.matrixWorldInverse);ic.setFromMatrix(Wb);this.autoUpdateObjects&&this.initWebGLObjects(a);l(this.renderPluginsPre,a,b);F.info.render.calls=0;F.info.render.vertices=0;F.info.render.faces=0;F.info.render.points=0;this.setRenderTarget(c);(this.autoClear||d)&&this.clear(this.autoClearColor,this.autoClearDepth,this.autoClearStencil);m=a.__webglObjects;d=0;
-for(e=m.length;d<e;d++){f=m[d];j=f.object;f.render=false;if(j.visible&&(!(j instanceof THREE.Mesh||j instanceof THREE.ParticleSystem)||!j.frustumCulled||ic.contains(j))){p(j,b);var q=f,r=q.object,s=q.buffer,u=void 0,u=u=void 0,u=r.material;if(u instanceof THREE.MeshFaceMaterial){u=s.materialIndex;if(u>=0){u=r.geometry.materials[u];if(u.transparent){q.transparent=u;q.opaque=null}else{q.opaque=u;q.transparent=null}}}else if(u)if(u.transparent){q.transparent=u;q.opaque=null}else{q.opaque=u;q.transparent=
-null}f.render=true;if(this.sortObjects)if(j.renderDepth)f.z=j.renderDepth;else{pb.copy(j.matrixWorld.getPosition());Wb.multiplyVector3(pb);f.z=pb.z}}}this.sortObjects&&m.sort(h);m=a.__webglObjectsImmediate;d=0;for(e=m.length;d<e;d++){f=m[d];j=f.object;if(j.visible){p(j,b);j=f.object.material;if(j.transparent){f.transparent=j;f.opaque=null}else{f.opaque=j;f.transparent=null}}}if(a.overrideMaterial){d=a.overrideMaterial;this.setBlending(d.blending,d.blendEquation,d.blendSrc,d.blendDst);this.setDepthTest(d.depthTest);
-this.setDepthWrite(d.depthWrite);x(d.polygonOffset,d.polygonOffsetFactor,d.polygonOffsetUnits);k(a.__webglObjects,false,"",b,n,o,true,d);i(a.__webglObjectsImmediate,"",b,n,o,false,d)}else{this.setBlending(THREE.NormalBlending);k(a.__webglObjects,true,"opaque",b,n,o,false);i(a.__webglObjectsImmediate,"opaque",b,n,o,false);k(a.__webglObjects,false,"transparent",b,n,o,true);i(a.__webglObjectsImmediate,"transparent",b,n,o,true)}l(this.renderPluginsPost,a,b);if(c&&c.generateMipmaps&&c.minFilter!==THREE.NearestFilter&&
-c.minFilter!==THREE.LinearFilter)if(c instanceof THREE.WebGLRenderTargetCube){g.bindTexture(g.TEXTURE_CUBE_MAP,c.__webglTexture);g.generateMipmap(g.TEXTURE_CUBE_MAP);g.bindTexture(g.TEXTURE_CUBE_MAP,null)}else{g.bindTexture(g.TEXTURE_2D,c.__webglTexture);g.generateMipmap(g.TEXTURE_2D);g.bindTexture(g.TEXTURE_2D,null)}this.setDepthTest(true);this.setDepthWrite(true)};this.renderImmediateObject=function(a,b,c,d,e){var f=r(a,b,c,d,e);S=-1;F.setObjectFaces(e);e.immediateRenderCallback?e.immediateRenderCallback(f,
-g,ic):e.render(function(a){F.renderBufferImmediate(a,f,d)})};this.initWebGLObjects=function(a){if(!a.__webglObjects){a.__webglObjects=[];a.__webglObjectsImmediate=[];a.__webglSprites=[];a.__webglFlares=[]}for(;a.__objectsAdded.length;){var h=a.__objectsAdded[0],i=a,j=void 0,k=void 0,l=void 0;if(!h.__webglInit){h.__webglInit=true;h._modelViewMatrix=new THREE.Matrix4;h._normalMatrix=new THREE.Matrix3;if(h instanceof THREE.Mesh){k=h.geometry;if(k instanceof THREE.Geometry){if(k.geometryGroups===void 0){var p=
-k,r=void 0,u=void 0,w=void 0,x=void 0,z=void 0,A=void 0,C=void 0,E={},H=p.morphTargets.length,L=p.morphNormals.length;p.geometryGroups={};r=0;for(u=p.faces.length;r<u;r++){w=p.faces[r];x=w.materialIndex;A=x!==void 0?x:-1;E[A]===void 0&&(E[A]={hash:A,counter:0});C=E[A].hash+"_"+E[A].counter;p.geometryGroups[C]===void 0&&(p.geometryGroups[C]={faces3:[],faces4:[],materialIndex:x,vertices:0,numMorphTargets:H,numMorphNormals:L});z=w instanceof THREE.Face3?3:4;if(p.geometryGroups[C].vertices+z>65535){E[A].counter=
-E[A].counter+1;C=E[A].hash+"_"+E[A].counter;p.geometryGroups[C]===void 0&&(p.geometryGroups[C]={faces3:[],faces4:[],materialIndex:x,vertices:0,numMorphTargets:H,numMorphNormals:L})}w instanceof THREE.Face3?p.geometryGroups[C].faces3.push(r):p.geometryGroups[C].faces4.push(r);p.geometryGroups[C].vertices=p.geometryGroups[C].vertices+z}p.geometryGroupsList=[];var K=void 0;for(K in p.geometryGroups){p.geometryGroups[K].id=sa++;p.geometryGroupsList.push(p.geometryGroups[K])}}for(j in k.geometryGroups){l=
-k.geometryGroups[j];if(!l.__webglVertexBuffer){var G=l;G.__webglVertexBuffer=g.createBuffer();G.__webglNormalBuffer=g.createBuffer();G.__webglTangentBuffer=g.createBuffer();G.__webglColorBuffer=g.createBuffer();G.__webglUVBuffer=g.createBuffer();G.__webglUV2Buffer=g.createBuffer();G.__webglSkinVertexABuffer=g.createBuffer();G.__webglSkinVertexBBuffer=g.createBuffer();G.__webglSkinIndicesBuffer=g.createBuffer();G.__webglSkinWeightsBuffer=g.createBuffer();G.__webglFaceBuffer=g.createBuffer();G.__webglLineBuffer=
-g.createBuffer();var J=void 0,M=void 0;if(G.numMorphTargets){G.__webglMorphTargetsBuffers=[];J=0;for(M=G.numMorphTargets;J<M;J++)G.__webglMorphTargetsBuffers.push(g.createBuffer())}if(G.numMorphNormals){G.__webglMorphNormalsBuffers=[];J=0;for(M=G.numMorphNormals;J<M;J++)G.__webglMorphNormalsBuffers.push(g.createBuffer())}F.info.memory.geometries++;var I=l,R=h,S=R.geometry,T=I.faces3,V=I.faces4,U=T.length*3+V.length*4,aa=T.length*1+V.length*2,ba=T.length*3+V.length*4,$=c(R,I),ha=e($),ka=d($),ta=$.vertexColors?
-$.vertexColors:false;I.__vertexArray=new Float32Array(U*3);if(ka)I.__normalArray=new Float32Array(U*3);if(S.hasTangents)I.__tangentArray=new Float32Array(U*4);if(ta)I.__colorArray=new Float32Array(U*3);if(ha){if(S.faceUvs.length>0||S.faceVertexUvs.length>0)I.__uvArray=new Float32Array(U*2);if(S.faceUvs.length>1||S.faceVertexUvs.length>1)I.__uv2Array=new Float32Array(U*2)}if(R.geometry.skinWeights.length&&R.geometry.skinIndices.length){I.__skinVertexAArray=new Float32Array(U*4);I.__skinVertexBArray=
-new Float32Array(U*4);I.__skinIndexArray=new Float32Array(U*4);I.__skinWeightArray=new Float32Array(U*4)}I.__faceArray=new Uint16Array(aa*3);I.__lineArray=new Uint16Array(ba*2);var ia=void 0,Lb=void 0;if(I.numMorphTargets){I.__morphTargetsArrays=[];ia=0;for(Lb=I.numMorphTargets;ia<Lb;ia++)I.__morphTargetsArrays.push(new Float32Array(U*3))}if(I.numMorphNormals){I.__morphNormalsArrays=[];ia=0;for(Lb=I.numMorphNormals;ia<Lb;ia++)I.__morphNormalsArrays.push(new Float32Array(U*3))}I.__webglFaceCount=aa*
-3;I.__webglLineCount=ba*2;if($.attributes){if(I.__webglCustomAttributesList===void 0)I.__webglCustomAttributesList=[];var Ba=void 0;for(Ba in $.attributes){var Aa=$.attributes[Ba],la={},Ia;for(Ia in Aa)la[Ia]=Aa[Ia];if(!la.__webglInitialized||la.createUniqueBuffers){la.__webglInitialized=true;var Ha=1;la.type==="v2"?Ha=2:la.type==="v3"?Ha=3:la.type==="v4"?Ha=4:la.type==="c"&&(Ha=3);la.size=Ha;la.array=new Float32Array(U*Ha);la.buffer=g.createBuffer();la.buffer.belongsToAttribute=Ba;Aa.needsUpdate=
-true;la.__original=Aa}I.__webglCustomAttributesList.push(la)}}I.__inittedArrays=true;k.verticesNeedUpdate=true;k.morphTargetsNeedUpdate=true;k.elementsNeedUpdate=true;k.uvsNeedUpdate=true;k.normalsNeedUpdate=true;k.tangentsNeedUpdate=true;k.colorsNeedUpdate=true}}}else if(k instanceof THREE.BufferGeometry){var Mb=k,La=void 0,xb=void 0,Va=void 0;for(La in Mb.attributes){Va=La==="index"?g.ELEMENT_ARRAY_BUFFER:g.ARRAY_BUFFER;xb=Mb.attributes[La];xb.buffer=g.createBuffer();g.bindBuffer(Va,xb.buffer);
-g.bufferData(Va,xb.array,g.STATIC_DRAW)}}}else if(h instanceof THREE.Ribbon){k=h.geometry;if(!k.__webglVertexBuffer){var pb=k;pb.__webglVertexBuffer=g.createBuffer();pb.__webglColorBuffer=g.createBuffer();F.info.memory.geometries++;var Wa=k,Za=Wa.vertices.length;Wa.__vertexArray=new Float32Array(Za*3);Wa.__colorArray=new Float32Array(Za*3);Wa.__webglVertexCount=Za;k.verticesNeedUpdate=true;k.colorsNeedUpdate=true}}else if(h instanceof THREE.Line){k=h.geometry;if(!k.__webglVertexBuffer){var wb=k;wb.__webglVertexBuffer=
-g.createBuffer();wb.__webglColorBuffer=g.createBuffer();F.info.memory.geometries++;var kc=k,Wb=h,Nb=kc.vertices.length;kc.__vertexArray=new Float32Array(Nb*3);kc.__colorArray=new Float32Array(Nb*3);kc.__webglLineCount=Nb;b(kc,Wb);k.verticesNeedUpdate=true;k.colorsNeedUpdate=true}}else if(h instanceof THREE.ParticleSystem){k=h.geometry;if(!k.__webglVertexBuffer){var Vb=k;Vb.__webglVertexBuffer=g.createBuffer();Vb.__webglColorBuffer=g.createBuffer();F.info.geometries++;var Xb=k,hc=h,Ob=Xb.vertices.length;
-Xb.__vertexArray=new Float32Array(Ob*3);Xb.__colorArray=new Float32Array(Ob*3);Xb.__sortArray=[];Xb.__webglParticleCount=Ob;b(Xb,hc);k.verticesNeedUpdate=true;k.colorsNeedUpdate=true}}}if(!h.__webglActive){if(h instanceof THREE.Mesh){k=h.geometry;if(k instanceof THREE.BufferGeometry)m(i.__webglObjects,k,h);else for(j in k.geometryGroups){l=k.geometryGroups[j];m(i.__webglObjects,l,h)}}else if(h instanceof THREE.Ribbon||h instanceof THREE.Line||h instanceof THREE.ParticleSystem){k=h.geometry;m(i.__webglObjects,
-k,h)}else h instanceof THREE.ImmediateRenderObject||h.immediateRenderCallback?i.__webglObjectsImmediate.push({object:h,opaque:null,transparent:null}):h instanceof THREE.Sprite?i.__webglSprites.push(h):h instanceof THREE.LensFlare&&i.__webglFlares.push(h);h.__webglActive=true}a.__objectsAdded.splice(0,1)}for(;a.__objectsRemoved.length;){var Ra=a.__objectsRemoved[0],zc=a;Ra instanceof THREE.Mesh||Ra instanceof THREE.ParticleSystem||Ra instanceof THREE.Ribbon||Ra instanceof THREE.Line?s(zc.__webglObjects,
-Ra):Ra instanceof THREE.Sprite?q(zc.__webglSprites,Ra):Ra instanceof THREE.LensFlare?q(zc.__webglFlares,Ra):(Ra instanceof THREE.ImmediateRenderObject||Ra.immediateRenderCallback)&&s(zc.__webglObjectsImmediate,Ra);Ra.__webglActive=false;a.__objectsRemoved.splice(0,1)}for(var Pb=0,ic=a.__webglObjects.length;Pb<ic;Pb++){var Xa=a.__webglObjects[Pb].object,W=Xa.geometry,lc=void 0,Yb=void 0,Ma=void 0;if(Xa instanceof THREE.Mesh)if(W instanceof THREE.BufferGeometry){if(W.verticesNeedUpdate||W.elementsNeedUpdate||
-W.uvsNeedUpdate||W.normalsNeedUpdate||W.colorsNeedUpdate||W.tangentsNeedUpdate){var qb=W,Zb=g.DYNAMIC_DRAW,jc=!W.dynamic,$b=qb.attributes,Rc=$b.index,Sc=$b.position,Tc=$b.normal,Uc=$b.uv,Vc=$b.color,Wc=$b.tangent;if(qb.elementsNeedUpdate&&Rc!==void 0){g.bindBuffer(g.ELEMENT_ARRAY_BUFFER,Rc.buffer);g.bufferData(g.ELEMENT_ARRAY_BUFFER,Rc.array,Zb)}if(qb.verticesNeedUpdate&&Sc!==void 0){g.bindBuffer(g.ARRAY_BUFFER,Sc.buffer);g.bufferData(g.ARRAY_BUFFER,Sc.array,Zb)}if(qb.normalsNeedUpdate&&Tc!==void 0){g.bindBuffer(g.ARRAY_BUFFER,
-Tc.buffer);g.bufferData(g.ARRAY_BUFFER,Tc.array,Zb)}if(qb.uvsNeedUpdate&&Uc!==void 0){g.bindBuffer(g.ARRAY_BUFFER,Uc.buffer);g.bufferData(g.ARRAY_BUFFER,Uc.array,Zb)}if(qb.colorsNeedUpdate&&Vc!==void 0){g.bindBuffer(g.ARRAY_BUFFER,Vc.buffer);g.bufferData(g.ARRAY_BUFFER,Vc.array,Zb)}if(qb.tangentsNeedUpdate&&Wc!==void 0){g.bindBuffer(g.ARRAY_BUFFER,Wc.buffer);g.bufferData(g.ARRAY_BUFFER,Wc.array,Zb)}if(jc){var gc=void 0;for(gc in qb.attributes)delete qb.attributes[gc].array}}W.verticesNeedUpdate=false;
-W.elementsNeedUpdate=false;W.uvsNeedUpdate=false;W.normalsNeedUpdate=false;W.colorsNeedUpdate=false;W.tangentsNeedUpdate=false}else{for(var Xc=0,xc=W.geometryGroupsList.length;Xc<xc;Xc++){lc=W.geometryGroupsList[Xc];Ma=c(Xa,lc);Yb=Ma.attributes&&n(Ma);if(W.verticesNeedUpdate||W.morphTargetsNeedUpdate||W.elementsNeedUpdate||W.uvsNeedUpdate||W.normalsNeedUpdate||W.colorsNeedUpdate||W.tangentsNeedUpdate||Yb){var Y=lc,yc=Xa,Oa=g.DYNAMIC_DRAW,Oc=!W.dynamic,Qb=Ma;if(Y.__inittedArrays){var fd=d(Qb),Yc=Qb.vertexColors?
-Qb.vertexColors:false,gd=e(Qb),Ac=fd===THREE.SmoothShading,y=void 0,N=void 0,Ua=void 0,D=void 0,ac=void 0,yb=void 0,Ya=void 0,Bc=void 0,rb=void 0,bc=void 0,cc=void 0,O=void 0,P=void 0,Q=void 0,fa=void 0,$a=void 0,ab=void 0,bb=void 0,mc=void 0,cb=void 0,db=void 0,eb=void 0,nc=void 0,fb=void 0,gb=void 0,hb=void 0,oc=void 0,ib=void 0,jb=void 0,kb=void 0,pc=void 0,lb=void 0,mb=void 0,nb=void 0,qc=void 0,zb=void 0,Ab=void 0,Bb=void 0,Cc=void 0,Cb=void 0,Db=void 0,Eb=void 0,Dc=void 0,ca=void 0,hd=void 0,
-Fb=void 0,dc=void 0,ec=void 0,Ca=void 0,id=void 0,ya=void 0,za=void 0,Gb=void 0,sb=void 0,ua=0,xa=0,tb=0,ub=0,Sa=0,Ga=0,ga=0,Ja=0,va=0,B=0,X=0,v=0,Pa=void 0,Da=Y.__vertexArray,rc=Y.__uvArray,sc=Y.__uv2Array,Ta=Y.__normalArray,ma=Y.__tangentArray,Ea=Y.__colorArray,na=Y.__skinVertexAArray,oa=Y.__skinVertexBArray,pa=Y.__skinIndexArray,qa=Y.__skinWeightArray,Zc=Y.__morphTargetsArrays,$c=Y.__morphNormalsArrays,ad=Y.__webglCustomAttributesList,t=void 0,ob=Y.__faceArray,Qa=Y.__lineArray,Ka=yc.geometry,Pc=
-Ka.elementsNeedUpdate,jd=Ka.uvsNeedUpdate,Qc=Ka.normalsNeedUpdate,qd=Ka.tangentsNeedUpdate,rd=Ka.colorsNeedUpdate,sd=Ka.morphTargetsNeedUpdate,Rb=Ka.vertices,da=Y.faces3,ea=Y.faces4,wa=Ka.faces,bd=Ka.faceVertexUvs[0],cd=Ka.faceVertexUvs[1],Sb=Ka.skinVerticesA,Tb=Ka.skinVerticesB,Ub=Ka.skinIndices,Hb=Ka.skinWeights,Ib=Ka.morphTargets,Ec=Ka.morphNormals;if(Ka.verticesNeedUpdate){y=0;for(N=da.length;y<N;y++){D=wa[da[y]];O=Rb[D.a];P=Rb[D.b];Q=Rb[D.c];Da[xa]=O.x;Da[xa+1]=O.y;Da[xa+2]=O.z;Da[xa+3]=P.x;
-Da[xa+4]=P.y;Da[xa+5]=P.z;Da[xa+6]=Q.x;Da[xa+7]=Q.y;Da[xa+8]=Q.z;xa=xa+9}y=0;for(N=ea.length;y<N;y++){D=wa[ea[y]];O=Rb[D.a];P=Rb[D.b];Q=Rb[D.c];fa=Rb[D.d];Da[xa]=O.x;Da[xa+1]=O.y;Da[xa+2]=O.z;Da[xa+3]=P.x;Da[xa+4]=P.y;Da[xa+5]=P.z;Da[xa+6]=Q.x;Da[xa+7]=Q.y;Da[xa+8]=Q.z;Da[xa+9]=fa.x;Da[xa+10]=fa.y;Da[xa+11]=fa.z;xa=xa+12}g.bindBuffer(g.ARRAY_BUFFER,Y.__webglVertexBuffer);g.bufferData(g.ARRAY_BUFFER,Da,Oa)}if(sd){Ca=0;for(id=Ib.length;Ca<id;Ca++){y=X=0;for(N=da.length;y<N;y++){Gb=da[y];D=wa[Gb];O=
-Ib[Ca].vertices[D.a];P=Ib[Ca].vertices[D.b];Q=Ib[Ca].vertices[D.c];ya=Zc[Ca];ya[X]=O.x;ya[X+1]=O.y;ya[X+2]=O.z;ya[X+3]=P.x;ya[X+4]=P.y;ya[X+5]=P.z;ya[X+6]=Q.x;ya[X+7]=Q.y;ya[X+8]=Q.z;if(Qb.morphNormals){if(Ac){sb=Ec[Ca].vertexNormals[Gb];cb=sb.a;db=sb.b;eb=sb.c}else eb=db=cb=Ec[Ca].faceNormals[Gb];za=$c[Ca];za[X]=cb.x;za[X+1]=cb.y;za[X+2]=cb.z;za[X+3]=db.x;za[X+4]=db.y;za[X+5]=db.z;za[X+6]=eb.x;za[X+7]=eb.y;za[X+8]=eb.z}X=X+9}y=0;for(N=ea.length;y<N;y++){Gb=ea[y];D=wa[Gb];O=Ib[Ca].vertices[D.a];P=
-Ib[Ca].vertices[D.b];Q=Ib[Ca].vertices[D.c];fa=Ib[Ca].vertices[D.d];ya=Zc[Ca];ya[X]=O.x;ya[X+1]=O.y;ya[X+2]=O.z;ya[X+3]=P.x;ya[X+4]=P.y;ya[X+5]=P.z;ya[X+6]=Q.x;ya[X+7]=Q.y;ya[X+8]=Q.z;ya[X+9]=fa.x;ya[X+10]=fa.y;ya[X+11]=fa.z;if(Qb.morphNormals){if(Ac){sb=Ec[Ca].vertexNormals[Gb];cb=sb.a;db=sb.b;eb=sb.c;nc=sb.d}else nc=eb=db=cb=Ec[Ca].faceNormals[Gb];za=$c[Ca];za[X]=cb.x;za[X+1]=cb.y;za[X+2]=cb.z;za[X+3]=db.x;za[X+4]=db.y;za[X+5]=db.z;za[X+6]=eb.x;za[X+7]=eb.y;za[X+8]=eb.z;za[X+9]=nc.x;za[X+10]=nc.y;
-za[X+11]=nc.z}X=X+12}g.bindBuffer(g.ARRAY_BUFFER,Y.__webglMorphTargetsBuffers[Ca]);g.bufferData(g.ARRAY_BUFFER,Zc[Ca],Oa);if(Qb.morphNormals){g.bindBuffer(g.ARRAY_BUFFER,Y.__webglMorphNormalsBuffers[Ca]);g.bufferData(g.ARRAY_BUFFER,$c[Ca],Oa)}}}if(Hb.length){y=0;for(N=da.length;y<N;y++){D=wa[da[y]];ib=Hb[D.a];jb=Hb[D.b];kb=Hb[D.c];qa[B]=ib.x;qa[B+1]=ib.y;qa[B+2]=ib.z;qa[B+3]=ib.w;qa[B+4]=jb.x;qa[B+5]=jb.y;qa[B+6]=jb.z;qa[B+7]=jb.w;qa[B+8]=kb.x;qa[B+9]=kb.y;qa[B+10]=kb.z;qa[B+11]=kb.w;lb=Ub[D.a];mb=
-Ub[D.b];nb=Ub[D.c];pa[B]=lb.x;pa[B+1]=lb.y;pa[B+2]=lb.z;pa[B+3]=lb.w;pa[B+4]=mb.x;pa[B+5]=mb.y;pa[B+6]=mb.z;pa[B+7]=mb.w;pa[B+8]=nb.x;pa[B+9]=nb.y;pa[B+10]=nb.z;pa[B+11]=nb.w;zb=Sb[D.a];Ab=Sb[D.b];Bb=Sb[D.c];na[B]=zb.x;na[B+1]=zb.y;na[B+2]=zb.z;na[B+3]=1;na[B+4]=Ab.x;na[B+5]=Ab.y;na[B+6]=Ab.z;na[B+7]=1;na[B+8]=Bb.x;na[B+9]=Bb.y;na[B+10]=Bb.z;na[B+11]=1;Cb=Tb[D.a];Db=Tb[D.b];Eb=Tb[D.c];oa[B]=Cb.x;oa[B+1]=Cb.y;oa[B+2]=Cb.z;oa[B+3]=1;oa[B+4]=Db.x;oa[B+5]=Db.y;oa[B+6]=Db.z;oa[B+7]=1;oa[B+8]=Eb.x;oa[B+
+g.texParameteri(a,g.TEXTURE_MIN_FILTER,E(b.minFilter))}Za&&b.type!==THREE.FloatType&&g.texParameterf(a,Za.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(b.anisotropy,zc))}function w(a,b){g.bindRenderbuffer(g.RENDERBUFFER,a);if(b.depthBuffer&&!b.stencilBuffer){g.renderbufferStorage(g.RENDERBUFFER,g.DEPTH_COMPONENT16,b.width,b.height);g.framebufferRenderbuffer(g.FRAMEBUFFER,g.DEPTH_ATTACHMENT,g.RENDERBUFFER,a)}else if(b.depthBuffer&&b.stencilBuffer){g.renderbufferStorage(g.RENDERBUFFER,g.DEPTH_STENCIL,b.width,
+b.height);g.framebufferRenderbuffer(g.FRAMEBUFFER,g.DEPTH_STENCIL_ATTACHMENT,g.RENDERBUFFER,a)}else g.renderbufferStorage(g.RENDERBUFFER,g.RGBA4,b.width,b.height)}function E(a){return a===THREE.NearestFilter||a===THREE.NearestMipMapNearestFilter||a===THREE.NearestMipMapLinearFilter?g.NEAREST:g.LINEAR}function A(a){return a===THREE.RepeatWrapping?g.REPEAT:a===THREE.ClampToEdgeWrapping?g.CLAMP_TO_EDGE:a===THREE.MirroredRepeatWrapping?g.MIRRORED_REPEAT:a===THREE.NearestFilter?g.NEAREST:a===THREE.NearestMipMapNearestFilter?
+g.NEAREST_MIPMAP_NEAREST:a===THREE.NearestMipMapLinearFilter?g.NEAREST_MIPMAP_LINEAR:a===THREE.LinearFilter?g.LINEAR:a===THREE.LinearMipMapNearestFilter?g.LINEAR_MIPMAP_NEAREST:a===THREE.LinearMipMapLinearFilter?g.LINEAR_MIPMAP_LINEAR:a===THREE.UnsignedByteType?g.UNSIGNED_BYTE:a===THREE.UnsignedShort4444Type?g.UNSIGNED_SHORT_4_4_4_4:a===THREE.UnsignedShort5551Type?g.UNSIGNED_SHORT_5_5_5_1:a===THREE.UnsignedShort565Type?g.UNSIGNED_SHORT_5_6_5:a===THREE.ByteType?g.BYTE:a===THREE.ShortType?g.SHORT:a===
+THREE.UnsignedShortType?g.UNSIGNED_SHORT:a===THREE.IntType?g.INT:a===THREE.UnsignedIntType?g.UNSIGNED_INT:a===THREE.FloatType?g.FLOAT:a===THREE.AlphaFormat?g.ALPHA:a===THREE.RGBFormat?g.RGB:a===THREE.RGBAFormat?g.RGBA:a===THREE.LuminanceFormat?g.LUMINANCE:a===THREE.LuminanceAlphaFormat?g.LUMINANCE_ALPHA:a===THREE.AddEquation?g.FUNC_ADD:a===THREE.SubtractEquation?g.FUNC_SUBTRACT:a===THREE.ReverseSubtractEquation?g.FUNC_REVERSE_SUBTRACT:a===THREE.ZeroFactor?g.ZERO:a===THREE.OneFactor?g.ONE:a===THREE.SrcColorFactor?
+g.SRC_COLOR:a===THREE.OneMinusSrcColorFactor?g.ONE_MINUS_SRC_COLOR:a===THREE.SrcAlphaFactor?g.SRC_ALPHA:a===THREE.OneMinusSrcAlphaFactor?g.ONE_MINUS_SRC_ALPHA:a===THREE.DstAlphaFactor?g.DST_ALPHA:a===THREE.OneMinusDstAlphaFactor?g.ONE_MINUS_DST_ALPHA:a===THREE.DstColorFactor?g.DST_COLOR:a===THREE.OneMinusDstColorFactor?g.ONE_MINUS_DST_COLOR:a===THREE.SrcAlphaSaturateFactor?g.SRC_ALPHA_SATURATE:0}console.log("THREE.WebGLRenderer",THREE.REVISION);var a=a||{},G=a.canvas!==void 0?a.canvas:document.createElement("canvas"),
+C=a.precision!==void 0?a.precision:"highp",L=a.alpha!==void 0?a.alpha:true,I=a.premultipliedAlpha!==void 0?a.premultipliedAlpha:true,T=a.antialias!==void 0?a.antialias:false,V=a.stencil!==void 0?a.stencil:true,R=a.preserveDrawingBuffer!==void 0?a.preserveDrawingBuffer:false,z=a.clearColor!==void 0?new THREE.Color(a.clearColor):new THREE.Color(0),K=a.clearAlpha!==void 0?a.clearAlpha:0,U=a.maxLights!==void 0?a.maxLights:4;this.domElement=G;this.context=null;this.autoUpdateScene=this.autoUpdateObjects=
+this.sortObjects=this.autoClearStencil=this.autoClearDepth=this.autoClearColor=this.autoClear=true;this.shadowMapEnabled=this.physicallyBasedShading=this.gammaOutput=this.gammaInput=false;this.shadowMapCullFrontFaces=this.shadowMapSoft=this.shadowMapAutoUpdate=true;this.shadowMapCascade=this.shadowMapDebug=false;this.maxMorphTargets=8;this.maxMorphNormals=4;this.autoScaleCubemaps=true;this.renderPluginsPre=[];this.renderPluginsPost=[];this.info={memory:{programs:0,geometries:0,textures:0},render:{calls:0,
+vertices:0,faces:0,points:0}};var F=this,ba=[],ia=0,J=null,ka=null,$=-1,S=null,aa=null,sa=0,ha=-1,M=-1,ta=-1,Aa=-1,la=-1,Ia=-1,Ha=-1,Ba=-1,Va=null,wb=null,Lb=null,Mb=null,xb=0,Nb=0,Ob=0,Pb=0,gc=0,xc=0,ic=new THREE.Frustum,Wb=new THREE.Matrix4,Vb=new THREE.Matrix4,pb=new THREE.Vector4,La=new THREE.Vector3,Wa=true,yc={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[],distances:[]},spot:{length:0,colors:[],positions:[],distances:[],directions:[],angles:[],
+exponents:[]}},g,Za;try{if(!(g=G.getContext("experimental-webgl",{alpha:L,premultipliedAlpha:I,antialias:T,stencil:V,preserveDrawingBuffer:R})))throw"Error creating WebGL context.";}catch(Qc){console.error(Qc)}a=g.getExtension("OES_texture_float");L=g.getExtension("OES_standard_derivatives");Za=g.getExtension("EXT_texture_filter_anisotropic")||g.getExtension("MOZ_EXT_texture_filter_anisotropic")||g.getExtension("WEBKIT_EXT_texture_filter_anisotropic");a||console.log("THREE.WebGLRenderer: Float textures not supported.");
+L||console.log("THREE.WebGLRenderer: Standard derivatives not supported.");Za||console.log("THREE.WebGLRenderer: Anisotropic texture filtering not supported.");g.clearColor(0,0,0,1);g.clearDepth(1);g.clearStencil(0);g.enable(g.DEPTH_TEST);g.depthFunc(g.LEQUAL);g.frontFace(g.CCW);g.cullFace(g.BACK);g.enable(g.CULL_FACE);g.enable(g.BLEND);g.blendEquation(g.FUNC_ADD);g.blendFunc(g.SRC_ALPHA,g.ONE_MINUS_SRC_ALPHA);g.clearColor(z.r,z.g,z.b,K);this.context=g;L=g.getParameter(g.MAX_VERTEX_TEXTURE_IMAGE_UNITS);
+g.getParameter(g.MAX_TEXTURE_SIZE);var Pc=g.getParameter(g.MAX_CUBE_MAP_TEXTURE_SIZE),zc=Za?g.getParameter(Za.MAX_TEXTURE_MAX_ANISOTROPY_EXT):0,jc=L>0,hc=jc&&a;this.getContext=function(){return g};this.supportsVertexTextures=function(){return jc};this.getMaxAnisotropy=function(){return zc};this.setSize=function(a,b){G.width=a;G.height=b;this.setViewport(0,0,G.width,G.height)};this.setViewport=function(a,b,c,d){xb=a!==void 0?a:0;Nb=b!==void 0?b:0;Ob=c!==void 0?c:G.width;Pb=d!==void 0?d:G.height;g.viewport(xb,
+Nb,Ob,Pb)};this.setScissor=function(a,b,c,d){g.scissor(a,b,c,d)};this.enableScissorTest=function(a){a?g.enable(g.SCISSOR_TEST):g.disable(g.SCISSOR_TEST)};this.setClearColorHex=function(a,b){z.setHex(a);K=b;g.clearColor(z.r,z.g,z.b,K)};this.setClearColor=function(a,b){z.copy(a);K=b;g.clearColor(z.r,z.g,z.b,K)};this.getClearColor=function(){return z};this.getClearAlpha=function(){return K};this.clear=function(a,b,c){var d=0;if(a===void 0||a)d=d|g.COLOR_BUFFER_BIT;if(b===void 0||b)d=d|g.DEPTH_BUFFER_BIT;
+if(c===void 0||c)d=d|g.STENCIL_BUFFER_BIT;g.clear(d)};this.clearTarget=function(a,b,c,d){this.setRenderTarget(a);this.clear(b,c,d)};this.addPostPlugin=function(a){a.init(this);this.renderPluginsPost.push(a)};this.addPrePlugin=function(a){a.init(this);this.renderPluginsPre.push(a)};this.deallocateObject=function(a){if(a.__webglInit){a.__webglInit=false;delete a._modelViewMatrix;delete a._normalMatrix;delete a._normalMatrixArray;delete a._modelViewMatrixArray;delete a._objectMatrixArray;if(a instanceof
+THREE.Mesh)for(var b in a.geometry.geometryGroups){var c=a.geometry.geometryGroups[b];g.deleteBuffer(c.__webglVertexBuffer);g.deleteBuffer(c.__webglNormalBuffer);g.deleteBuffer(c.__webglTangentBuffer);g.deleteBuffer(c.__webglColorBuffer);g.deleteBuffer(c.__webglUVBuffer);g.deleteBuffer(c.__webglUV2Buffer);g.deleteBuffer(c.__webglSkinVertexABuffer);g.deleteBuffer(c.__webglSkinVertexBBuffer);g.deleteBuffer(c.__webglSkinIndicesBuffer);g.deleteBuffer(c.__webglSkinWeightsBuffer);g.deleteBuffer(c.__webglFaceBuffer);
+g.deleteBuffer(c.__webglLineBuffer);var d=void 0,e=void 0;if(c.numMorphTargets){d=0;for(e=c.numMorphTargets;d<e;d++)g.deleteBuffer(c.__webglMorphTargetsBuffers[d])}if(c.numMorphNormals){d=0;for(e=c.numMorphNormals;d<e;d++)g.deleteBuffer(c.__webglMorphNormalsBuffers[d])}if(c.__webglCustomAttributesList){d=void 0;for(d in c.__webglCustomAttributesList)g.deleteBuffer(c.__webglCustomAttributesList[d].buffer)}F.info.memory.geometries--}else if(a instanceof THREE.Ribbon){a=a.geometry;g.deleteBuffer(a.__webglVertexBuffer);
+g.deleteBuffer(a.__webglColorBuffer);F.info.memory.geometries--}else if(a instanceof THREE.Line){a=a.geometry;g.deleteBuffer(a.__webglVertexBuffer);g.deleteBuffer(a.__webglColorBuffer);F.info.memory.geometries--}else if(a instanceof THREE.ParticleSystem){a=a.geometry;g.deleteBuffer(a.__webglVertexBuffer);g.deleteBuffer(a.__webglColorBuffer);F.info.memory.geometries--}}};this.deallocateTexture=function(a){if(a.__webglInit){a.__webglInit=false;g.deleteTexture(a.__webglTexture);F.info.memory.textures--}};
+this.deallocateRenderTarget=function(a){if(a&&a.__webglTexture){g.deleteTexture(a.__webglTexture);if(a instanceof THREE.WebGLRenderTargetCube)for(var b=0;b<6;b++){g.deleteFramebuffer(a.__webglFramebuffer[b]);g.deleteRenderbuffer(a.__webglRenderbuffer[b])}else{g.deleteFramebuffer(a.__webglFramebuffer);g.deleteRenderbuffer(a.__webglRenderbuffer)}}};this.deallocateMaterial=function(a){var b=a.program;if(b){a.program=void 0;var c,d,e=false,a=0;for(c=ba.length;a<c;a++){d=ba[a];if(d.program===b){d.usedTimes--;
+d.usedTimes===0&&(e=true);break}}if(e){e=[];a=0;for(c=ba.length;a<c;a++){d=ba[a];d.program!==b&&e.push(d)}ba=e;g.deleteProgram(b);F.info.memory.programs--}}};this.updateShadowMap=function(a,b){J=null;$=S=Ba=Ha=ta=-1;Wa=true;M=ha=-1;this.shadowMapPlugin.update(a,b)};this.renderBufferImmediate=function(a,b,c){if(a.hasPositions&&!a.__webglVertexBuffer)a.__webglVertexBuffer=g.createBuffer();if(a.hasNormals&&!a.__webglNormalBuffer)a.__webglNormalBuffer=g.createBuffer();if(a.hasUvs&&!a.__webglUvBuffer)a.__webglUvBuffer=
+g.createBuffer();if(a.hasColors&&!a.__webglColorBuffer)a.__webglColorBuffer=g.createBuffer();if(a.hasPositions){g.bindBuffer(g.ARRAY_BUFFER,a.__webglVertexBuffer);g.bufferData(g.ARRAY_BUFFER,a.positionArray,g.DYNAMIC_DRAW);g.enableVertexAttribArray(b.attributes.position);g.vertexAttribPointer(b.attributes.position,3,g.FLOAT,false,0,0)}if(a.hasNormals){g.bindBuffer(g.ARRAY_BUFFER,a.__webglNormalBuffer);if(c.shading===THREE.FlatShading){var d,e,f,h,i,j,k,l,m,n,o,q=a.count*3;for(o=0;o<q;o=o+9){n=a.normalArray;
+d=n[o];e=n[o+1];f=n[o+2];h=n[o+3];j=n[o+4];l=n[o+5];i=n[o+6];k=n[o+7];m=n[o+8];d=(d+h+i)/3;e=(e+j+k)/3;f=(f+l+m)/3;n[o]=d;n[o+1]=e;n[o+2]=f;n[o+3]=d;n[o+4]=e;n[o+5]=f;n[o+6]=d;n[o+7]=e;n[o+8]=f}}g.bufferData(g.ARRAY_BUFFER,a.normalArray,g.DYNAMIC_DRAW);g.enableVertexAttribArray(b.attributes.normal);g.vertexAttribPointer(b.attributes.normal,3,g.FLOAT,false,0,0)}if(a.hasUvs&&c.map){g.bindBuffer(g.ARRAY_BUFFER,a.__webglUvBuffer);g.bufferData(g.ARRAY_BUFFER,a.uvArray,g.DYNAMIC_DRAW);g.enableVertexAttribArray(b.attributes.uv);
+g.vertexAttribPointer(b.attributes.uv,2,g.FLOAT,false,0,0)}if(a.hasColors&&c.vertexColors!==THREE.NoColors){g.bindBuffer(g.ARRAY_BUFFER,a.__webglColorBuffer);g.bufferData(g.ARRAY_BUFFER,a.colorArray,g.DYNAMIC_DRAW);g.enableVertexAttribArray(b.attributes.color);g.vertexAttribPointer(b.attributes.color,3,g.FLOAT,false,0,0)}g.drawArrays(g.TRIANGLES,0,a.count);a.count=0};this.renderBufferDirect=function(a,b,c,d,e,f){if(d.visible!==false){c=r(a,b,c,d,f);a=c.attributes;b=false;d=e.id*16777215+c.id*2+(d.wireframe?
+1:0);if(d!==S){S=d;b=true}if(f instanceof THREE.Mesh){f=e.offsets;f.length>1&&(b=true);d=0;for(c=f.length;d<c;++d){var h=f[d].index;if(b){var i=e.attributes.position,j=i.itemSize;g.bindBuffer(g.ARRAY_BUFFER,i.buffer);g.vertexAttribPointer(a.position,j,g.FLOAT,false,0,h*j*4);i=e.attributes.normal;if(a.normal>=0&&i){j=i.itemSize;g.bindBuffer(g.ARRAY_BUFFER,i.buffer);g.vertexAttribPointer(a.normal,j,g.FLOAT,false,0,h*j*4)}i=e.attributes.uv;if(a.uv>=0&&i)if(i.buffer){j=i.itemSize;g.bindBuffer(g.ARRAY_BUFFER,
+i.buffer);g.vertexAttribPointer(a.uv,j,g.FLOAT,false,0,h*j*4);g.enableVertexAttribArray(a.uv)}else g.disableVertexAttribArray(a.uv);i=e.attributes.color;if(a.color>=0&&i){j=i.itemSize;g.bindBuffer(g.ARRAY_BUFFER,i.buffer);g.vertexAttribPointer(a.color,j,g.FLOAT,false,0,h*j*4)}i=e.attributes.tangent;if(a.tangent>=0&&i){j=i.itemSize;g.bindBuffer(g.ARRAY_BUFFER,i.buffer);g.vertexAttribPointer(a.tangent,j,g.FLOAT,false,0,h*j*4)}g.bindBuffer(g.ELEMENT_ARRAY_BUFFER,e.attributes.index.buffer)}g.drawElements(g.TRIANGLES,
+f[d].count,g.UNSIGNED_SHORT,f[d].start*2);F.info.render.calls++;F.info.render.vertices=F.info.render.vertices+f[d].count;F.info.render.faces=F.info.render.faces+f[d].count/3}}}};this.renderBuffer=function(a,b,c,d,e,f){if(d.visible!==false){var h,i,c=r(a,b,c,d,f),b=c.attributes,a=false,c=e.id*16777215+c.id*2+(d.wireframe?1:0);if(c!==S){S=c;a=true}if(!d.morphTargets&&b.position>=0){if(a){g.bindBuffer(g.ARRAY_BUFFER,e.__webglVertexBuffer);g.vertexAttribPointer(b.position,3,g.FLOAT,false,0,0)}}else if(f.morphTargetBase){c=
+d.program.attributes;if(f.morphTargetBase!==-1){g.bindBuffer(g.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[f.morphTargetBase]);g.vertexAttribPointer(c.position,3,g.FLOAT,false,0,0)}else if(c.position>=0){g.bindBuffer(g.ARRAY_BUFFER,e.__webglVertexBuffer);g.vertexAttribPointer(c.position,3,g.FLOAT,false,0,0)}if(f.morphTargetForcedOrder.length){var k=0;i=f.morphTargetForcedOrder;for(h=f.morphTargetInfluences;k<d.numSupportedMorphTargets&&k<i.length;){g.bindBuffer(g.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[i[k]]);
+g.vertexAttribPointer(c["morphTarget"+k],3,g.FLOAT,false,0,0);if(d.morphNormals){g.bindBuffer(g.ARRAY_BUFFER,e.__webglMorphNormalsBuffers[i[k]]);g.vertexAttribPointer(c["morphNormal"+k],3,g.FLOAT,false,0,0)}f.__webglMorphTargetInfluences[k]=h[i[k]];k++}}else{i=[];h=f.morphTargetInfluences;var l,m=h.length;for(l=0;l<m;l++){k=h[l];k>0&&i.push([l,k])}if(i.length>d.numSupportedMorphTargets){i.sort(j);i.length=d.numSupportedMorphTargets}else i.length>d.numSupportedMorphNormals?i.sort(j):i.length===0&&
+i.push([0,0]);for(k=0;k<d.numSupportedMorphTargets;){if(i[k]){l=i[k][0];g.bindBuffer(g.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[l]);g.vertexAttribPointer(c["morphTarget"+k],3,g.FLOAT,false,0,0);if(d.morphNormals){g.bindBuffer(g.ARRAY_BUFFER,e.__webglMorphNormalsBuffers[l]);g.vertexAttribPointer(c["morphNormal"+k],3,g.FLOAT,false,0,0)}f.__webglMorphTargetInfluences[k]=h[l]}else{g.vertexAttribPointer(c["morphTarget"+k],3,g.FLOAT,false,0,0);d.morphNormals&&g.vertexAttribPointer(c["morphNormal"+k],3,
+g.FLOAT,false,0,0);f.__webglMorphTargetInfluences[k]=0}k++}}d.program.uniforms.morphTargetInfluences!==null&&g.uniform1fv(d.program.uniforms.morphTargetInfluences,f.__webglMorphTargetInfluences)}if(a){if(e.__webglCustomAttributesList){h=0;for(i=e.__webglCustomAttributesList.length;h<i;h++){c=e.__webglCustomAttributesList[h];if(b[c.buffer.belongsToAttribute]>=0){g.bindBuffer(g.ARRAY_BUFFER,c.buffer);g.vertexAttribPointer(b[c.buffer.belongsToAttribute],c.size,g.FLOAT,false,0,0)}}}if(b.color>=0){g.bindBuffer(g.ARRAY_BUFFER,
+e.__webglColorBuffer);g.vertexAttribPointer(b.color,3,g.FLOAT,false,0,0)}if(b.normal>=0){g.bindBuffer(g.ARRAY_BUFFER,e.__webglNormalBuffer);g.vertexAttribPointer(b.normal,3,g.FLOAT,false,0,0)}if(b.tangent>=0){g.bindBuffer(g.ARRAY_BUFFER,e.__webglTangentBuffer);g.vertexAttribPointer(b.tangent,4,g.FLOAT,false,0,0)}if(b.uv>=0)if(e.__webglUVBuffer){g.bindBuffer(g.ARRAY_BUFFER,e.__webglUVBuffer);g.vertexAttribPointer(b.uv,2,g.FLOAT,false,0,0);g.enableVertexAttribArray(b.uv)}else g.disableVertexAttribArray(b.uv);
+if(b.uv2>=0)if(e.__webglUV2Buffer){g.bindBuffer(g.ARRAY_BUFFER,e.__webglUV2Buffer);g.vertexAttribPointer(b.uv2,2,g.FLOAT,false,0,0);g.enableVertexAttribArray(b.uv2)}else g.disableVertexAttribArray(b.uv2);if(d.skinning&&b.skinVertexA>=0&&b.skinVertexB>=0&&b.skinIndex>=0&&b.skinWeight>=0){g.bindBuffer(g.ARRAY_BUFFER,e.__webglSkinVertexABuffer);g.vertexAttribPointer(b.skinVertexA,4,g.FLOAT,false,0,0);g.bindBuffer(g.ARRAY_BUFFER,e.__webglSkinVertexBBuffer);g.vertexAttribPointer(b.skinVertexB,4,g.FLOAT,
+false,0,0);g.bindBuffer(g.ARRAY_BUFFER,e.__webglSkinIndicesBuffer);g.vertexAttribPointer(b.skinIndex,4,g.FLOAT,false,0,0);g.bindBuffer(g.ARRAY_BUFFER,e.__webglSkinWeightsBuffer);g.vertexAttribPointer(b.skinWeight,4,g.FLOAT,false,0,0)}}if(f instanceof THREE.Mesh){if(d.wireframe){d=d.wireframeLinewidth;if(d!==Mb){g.lineWidth(d);Mb=d}a&&g.bindBuffer(g.ELEMENT_ARRAY_BUFFER,e.__webglLineBuffer);g.drawElements(g.LINES,e.__webglLineCount,g.UNSIGNED_SHORT,0)}else{a&&g.bindBuffer(g.ELEMENT_ARRAY_BUFFER,e.__webglFaceBuffer);
+g.drawElements(g.TRIANGLES,e.__webglFaceCount,g.UNSIGNED_SHORT,0)}F.info.render.calls++;F.info.render.vertices=F.info.render.vertices+e.__webglFaceCount;F.info.render.faces=F.info.render.faces+e.__webglFaceCount/3}else if(f instanceof THREE.Line){f=f.type===THREE.LineStrip?g.LINE_STRIP:g.LINES;d=d.linewidth;if(d!==Mb){g.lineWidth(d);Mb=d}g.drawArrays(f,0,e.__webglLineCount);F.info.render.calls++}else if(f instanceof THREE.ParticleSystem){g.drawArrays(g.POINTS,0,e.__webglParticleCount);F.info.render.calls++;
+F.info.render.points=F.info.render.points+e.__webglParticleCount}else if(f instanceof THREE.Ribbon){g.drawArrays(g.TRIANGLE_STRIP,0,e.__webglVertexCount);F.info.render.calls++}}};this.render=function(a,b,c,d){var e,f,j,m,n=a.__lights,o=a.fog;$=-1;Wa=true;if(b.parent===void 0){console.warn("DEPRECATED: Camera hasn't been added to a Scene. Adding it...");a.add(b)}this.autoUpdateScene&&a.updateMatrixWorld();if(!b._viewMatrixArray)b._viewMatrixArray=new Float32Array(16);if(!b._projectionMatrixArray)b._projectionMatrixArray=
+new Float32Array(16);b.matrixWorldInverse.getInverse(b.matrixWorld);b.matrixWorldInverse.flattenToArray(b._viewMatrixArray);b.projectionMatrix.flattenToArray(b._projectionMatrixArray);Wb.multiply(b.projectionMatrix,b.matrixWorldInverse);ic.setFromMatrix(Wb);this.autoUpdateObjects&&this.initWebGLObjects(a);l(this.renderPluginsPre,a,b);F.info.render.calls=0;F.info.render.vertices=0;F.info.render.faces=0;F.info.render.points=0;this.setRenderTarget(c);(this.autoClear||d)&&this.clear(this.autoClearColor,
+this.autoClearDepth,this.autoClearStencil);m=a.__webglObjects;d=0;for(e=m.length;d<e;d++){f=m[d];j=f.object;f.render=false;if(j.visible&&(!(j instanceof THREE.Mesh||j instanceof THREE.ParticleSystem)||!j.frustumCulled||ic.contains(j))){p(j,b);var q=f,r=q.object,s=q.buffer,u=void 0,u=u=void 0,u=r.material;if(u instanceof THREE.MeshFaceMaterial){u=s.materialIndex;if(u>=0){u=r.geometry.materials[u];if(u.transparent){q.transparent=u;q.opaque=null}else{q.opaque=u;q.transparent=null}}}else if(u)if(u.transparent){q.transparent=
+u;q.opaque=null}else{q.opaque=u;q.transparent=null}f.render=true;if(this.sortObjects)if(j.renderDepth)f.z=j.renderDepth;else{pb.copy(j.matrixWorld.getPosition());Wb.multiplyVector3(pb);f.z=pb.z}}}this.sortObjects&&m.sort(h);m=a.__webglObjectsImmediate;d=0;for(e=m.length;d<e;d++){f=m[d];j=f.object;if(j.visible){p(j,b);j=f.object.material;if(j.transparent){f.transparent=j;f.opaque=null}else{f.opaque=j;f.transparent=null}}}if(a.overrideMaterial){d=a.overrideMaterial;this.setBlending(d.blending,d.blendEquation,
+d.blendSrc,d.blendDst);this.setDepthTest(d.depthTest);this.setDepthWrite(d.depthWrite);x(d.polygonOffset,d.polygonOffsetFactor,d.polygonOffsetUnits);k(a.__webglObjects,false,"",b,n,o,true,d);i(a.__webglObjectsImmediate,"",b,n,o,false,d)}else{this.setBlending(THREE.NormalBlending);k(a.__webglObjects,true,"opaque",b,n,o,false);i(a.__webglObjectsImmediate,"opaque",b,n,o,false);k(a.__webglObjects,false,"transparent",b,n,o,true);i(a.__webglObjectsImmediate,"transparent",b,n,o,true)}l(this.renderPluginsPost,
+a,b);if(c&&c.generateMipmaps&&c.minFilter!==THREE.NearestFilter&&c.minFilter!==THREE.LinearFilter)if(c instanceof THREE.WebGLRenderTargetCube){g.bindTexture(g.TEXTURE_CUBE_MAP,c.__webglTexture);g.generateMipmap(g.TEXTURE_CUBE_MAP);g.bindTexture(g.TEXTURE_CUBE_MAP,null)}else{g.bindTexture(g.TEXTURE_2D,c.__webglTexture);g.generateMipmap(g.TEXTURE_2D);g.bindTexture(g.TEXTURE_2D,null)}this.setDepthTest(true);this.setDepthWrite(true)};this.renderImmediateObject=function(a,b,c,d,e){var f=r(a,b,c,d,e);S=
+-1;F.setObjectFaces(e);e.immediateRenderCallback?e.immediateRenderCallback(f,g,ic):e.render(function(a){F.renderBufferImmediate(a,f,d)})};this.initWebGLObjects=function(a){if(!a.__webglObjects){a.__webglObjects=[];a.__webglObjectsImmediate=[];a.__webglSprites=[];a.__webglFlares=[]}for(;a.__objectsAdded.length;){var h=a.__objectsAdded[0],i=a,j=void 0,k=void 0,l=void 0;if(!h.__webglInit){h.__webglInit=true;h._modelViewMatrix=new THREE.Matrix4;h._normalMatrix=new THREE.Matrix3;if(h instanceof THREE.Mesh){k=
+h.geometry;if(k instanceof THREE.Geometry){if(k.geometryGroups===void 0){var p=k,r=void 0,u=void 0,w=void 0,x=void 0,z=void 0,A=void 0,C=void 0,E={},H=p.morphTargets.length,L=p.morphNormals.length;p.geometryGroups={};r=0;for(u=p.faces.length;r<u;r++){w=p.faces[r];x=w.materialIndex;A=x!==void 0?x:-1;E[A]===void 0&&(E[A]={hash:A,counter:0});C=E[A].hash+"_"+E[A].counter;p.geometryGroups[C]===void 0&&(p.geometryGroups[C]={faces3:[],faces4:[],materialIndex:x,vertices:0,numMorphTargets:H,numMorphNormals:L});
+z=w instanceof THREE.Face3?3:4;if(p.geometryGroups[C].vertices+z>65535){E[A].counter=E[A].counter+1;C=E[A].hash+"_"+E[A].counter;p.geometryGroups[C]===void 0&&(p.geometryGroups[C]={faces3:[],faces4:[],materialIndex:x,vertices:0,numMorphTargets:H,numMorphNormals:L})}w instanceof THREE.Face3?p.geometryGroups[C].faces3.push(r):p.geometryGroups[C].faces4.push(r);p.geometryGroups[C].vertices=p.geometryGroups[C].vertices+z}p.geometryGroupsList=[];var K=void 0;for(K in p.geometryGroups){p.geometryGroups[K].id=
+sa++;p.geometryGroupsList.push(p.geometryGroups[K])}}for(j in k.geometryGroups){l=k.geometryGroups[j];if(!l.__webglVertexBuffer){var G=l;G.__webglVertexBuffer=g.createBuffer();G.__webglNormalBuffer=g.createBuffer();G.__webglTangentBuffer=g.createBuffer();G.__webglColorBuffer=g.createBuffer();G.__webglUVBuffer=g.createBuffer();G.__webglUV2Buffer=g.createBuffer();G.__webglSkinVertexABuffer=g.createBuffer();G.__webglSkinVertexBBuffer=g.createBuffer();G.__webglSkinIndicesBuffer=g.createBuffer();G.__webglSkinWeightsBuffer=
+g.createBuffer();G.__webglFaceBuffer=g.createBuffer();G.__webglLineBuffer=g.createBuffer();var J=void 0,M=void 0;if(G.numMorphTargets){G.__webglMorphTargetsBuffers=[];J=0;for(M=G.numMorphTargets;J<M;J++)G.__webglMorphTargetsBuffers.push(g.createBuffer())}if(G.numMorphNormals){G.__webglMorphNormalsBuffers=[];J=0;for(M=G.numMorphNormals;J<M;J++)G.__webglMorphNormalsBuffers.push(g.createBuffer())}F.info.memory.geometries++;var I=l,R=h,S=R.geometry,T=I.faces3,V=I.faces4,U=T.length*3+V.length*4,aa=T.length*
+1+V.length*2,ba=T.length*3+V.length*4,$=c(R,I),ha=e($),ka=d($),ta=$.vertexColors?$.vertexColors:false;I.__vertexArray=new Float32Array(U*3);if(ka)I.__normalArray=new Float32Array(U*3);if(S.hasTangents)I.__tangentArray=new Float32Array(U*4);if(ta)I.__colorArray=new Float32Array(U*3);if(ha){if(S.faceUvs.length>0||S.faceVertexUvs.length>0)I.__uvArray=new Float32Array(U*2);if(S.faceUvs.length>1||S.faceVertexUvs.length>1)I.__uv2Array=new Float32Array(U*2)}if(R.geometry.skinWeights.length&&R.geometry.skinIndices.length){I.__skinVertexAArray=
+new Float32Array(U*4);I.__skinVertexBArray=new Float32Array(U*4);I.__skinIndexArray=new Float32Array(U*4);I.__skinWeightArray=new Float32Array(U*4)}I.__faceArray=new Uint16Array(aa*3);I.__lineArray=new Uint16Array(ba*2);var ia=void 0,Lb=void 0;if(I.numMorphTargets){I.__morphTargetsArrays=[];ia=0;for(Lb=I.numMorphTargets;ia<Lb;ia++)I.__morphTargetsArrays.push(new Float32Array(U*3))}if(I.numMorphNormals){I.__morphNormalsArrays=[];ia=0;for(Lb=I.numMorphNormals;ia<Lb;ia++)I.__morphNormalsArrays.push(new Float32Array(U*
+3))}I.__webglFaceCount=aa*3;I.__webglLineCount=ba*2;if($.attributes){if(I.__webglCustomAttributesList===void 0)I.__webglCustomAttributesList=[];var Ba=void 0;for(Ba in $.attributes){var Aa=$.attributes[Ba],la={},Ia;for(Ia in Aa)la[Ia]=Aa[Ia];if(!la.__webglInitialized||la.createUniqueBuffers){la.__webglInitialized=true;var Ha=1;la.type==="v2"?Ha=2:la.type==="v3"?Ha=3:la.type==="v4"?Ha=4:la.type==="c"&&(Ha=3);la.size=Ha;la.array=new Float32Array(U*Ha);la.buffer=g.createBuffer();la.buffer.belongsToAttribute=
+Ba;Aa.needsUpdate=true;la.__original=Aa}I.__webglCustomAttributesList.push(la)}}I.__inittedArrays=true;k.verticesNeedUpdate=true;k.morphTargetsNeedUpdate=true;k.elementsNeedUpdate=true;k.uvsNeedUpdate=true;k.normalsNeedUpdate=true;k.tangentsNeedUpdate=true;k.colorsNeedUpdate=true}}}else if(k instanceof THREE.BufferGeometry){var Mb=k,La=void 0,xb=void 0,Va=void 0;for(La in Mb.attributes){Va=La==="index"?g.ELEMENT_ARRAY_BUFFER:g.ARRAY_BUFFER;xb=Mb.attributes[La];xb.buffer=g.createBuffer();g.bindBuffer(Va,
+xb.buffer);g.bufferData(Va,xb.array,g.STATIC_DRAW)}}}else if(h instanceof THREE.Ribbon){k=h.geometry;if(!k.__webglVertexBuffer){var pb=k;pb.__webglVertexBuffer=g.createBuffer();pb.__webglColorBuffer=g.createBuffer();F.info.memory.geometries++;var Wa=k,Za=Wa.vertices.length;Wa.__vertexArray=new Float32Array(Za*3);Wa.__colorArray=new Float32Array(Za*3);Wa.__webglVertexCount=Za;k.verticesNeedUpdate=true;k.colorsNeedUpdate=true}}else if(h instanceof THREE.Line){k=h.geometry;if(!k.__webglVertexBuffer){var wb=
+k;wb.__webglVertexBuffer=g.createBuffer();wb.__webglColorBuffer=g.createBuffer();F.info.memory.geometries++;var kc=k,Wb=h,Nb=kc.vertices.length;kc.__vertexArray=new Float32Array(Nb*3);kc.__colorArray=new Float32Array(Nb*3);kc.__webglLineCount=Nb;b(kc,Wb);k.verticesNeedUpdate=true;k.colorsNeedUpdate=true}}else if(h instanceof THREE.ParticleSystem){k=h.geometry;if(!k.__webglVertexBuffer){var Vb=k;Vb.__webglVertexBuffer=g.createBuffer();Vb.__webglColorBuffer=g.createBuffer();F.info.geometries++;var Xb=
+k,hc=h,Ob=Xb.vertices.length;Xb.__vertexArray=new Float32Array(Ob*3);Xb.__colorArray=new Float32Array(Ob*3);Xb.__sortArray=[];Xb.__webglParticleCount=Ob;b(Xb,hc);k.verticesNeedUpdate=true;k.colorsNeedUpdate=true}}}if(!h.__webglActive){if(h instanceof THREE.Mesh){k=h.geometry;if(k instanceof THREE.BufferGeometry)m(i.__webglObjects,k,h);else for(j in k.geometryGroups){l=k.geometryGroups[j];m(i.__webglObjects,l,h)}}else if(h instanceof THREE.Ribbon||h instanceof THREE.Line||h instanceof THREE.ParticleSystem){k=
+h.geometry;m(i.__webglObjects,k,h)}else h instanceof THREE.ImmediateRenderObject||h.immediateRenderCallback?i.__webglObjectsImmediate.push({object:h,opaque:null,transparent:null}):h instanceof THREE.Sprite?i.__webglSprites.push(h):h instanceof THREE.LensFlare&&i.__webglFlares.push(h);h.__webglActive=true}a.__objectsAdded.splice(0,1)}for(;a.__objectsRemoved.length;){var Ra=a.__objectsRemoved[0],Ac=a;Ra instanceof THREE.Mesh||Ra instanceof THREE.ParticleSystem||Ra instanceof THREE.Ribbon||Ra instanceof
+THREE.Line?s(Ac.__webglObjects,Ra):Ra instanceof THREE.Sprite?q(Ac.__webglSprites,Ra):Ra instanceof THREE.LensFlare?q(Ac.__webglFlares,Ra):(Ra instanceof THREE.ImmediateRenderObject||Ra.immediateRenderCallback)&&s(Ac.__webglObjectsImmediate,Ra);Ra.__webglActive=false;a.__objectsRemoved.splice(0,1)}for(var Pb=0,ic=a.__webglObjects.length;Pb<ic;Pb++){var Xa=a.__webglObjects[Pb].object,W=Xa.geometry,lc=void 0,Yb=void 0,Ma=void 0;if(Xa instanceof THREE.Mesh)if(W instanceof THREE.BufferGeometry){if(W.verticesNeedUpdate||
+W.elementsNeedUpdate||W.uvsNeedUpdate||W.normalsNeedUpdate||W.colorsNeedUpdate||W.tangentsNeedUpdate){var qb=W,Zb=g.DYNAMIC_DRAW,jc=!W.dynamic,$b=qb.attributes,Rc=$b.index,Sc=$b.position,Tc=$b.normal,Uc=$b.uv,Vc=$b.color,Wc=$b.tangent;if(qb.elementsNeedUpdate&&Rc!==void 0){g.bindBuffer(g.ELEMENT_ARRAY_BUFFER,Rc.buffer);g.bufferData(g.ELEMENT_ARRAY_BUFFER,Rc.array,Zb)}if(qb.verticesNeedUpdate&&Sc!==void 0){g.bindBuffer(g.ARRAY_BUFFER,Sc.buffer);g.bufferData(g.ARRAY_BUFFER,Sc.array,Zb)}if(qb.normalsNeedUpdate&&
+Tc!==void 0){g.bindBuffer(g.ARRAY_BUFFER,Tc.buffer);g.bufferData(g.ARRAY_BUFFER,Tc.array,Zb)}if(qb.uvsNeedUpdate&&Uc!==void 0){g.bindBuffer(g.ARRAY_BUFFER,Uc.buffer);g.bufferData(g.ARRAY_BUFFER,Uc.array,Zb)}if(qb.colorsNeedUpdate&&Vc!==void 0){g.bindBuffer(g.ARRAY_BUFFER,Vc.buffer);g.bufferData(g.ARRAY_BUFFER,Vc.array,Zb)}if(qb.tangentsNeedUpdate&&Wc!==void 0){g.bindBuffer(g.ARRAY_BUFFER,Wc.buffer);g.bufferData(g.ARRAY_BUFFER,Wc.array,Zb)}if(jc){var gc=void 0;for(gc in qb.attributes)delete qb.attributes[gc].array}}W.verticesNeedUpdate=
+false;W.elementsNeedUpdate=false;W.uvsNeedUpdate=false;W.normalsNeedUpdate=false;W.colorsNeedUpdate=false;W.tangentsNeedUpdate=false}else{for(var Xc=0,xc=W.geometryGroupsList.length;Xc<xc;Xc++){lc=W.geometryGroupsList[Xc];Ma=c(Xa,lc);Yb=Ma.attributes&&n(Ma);if(W.verticesNeedUpdate||W.morphTargetsNeedUpdate||W.elementsNeedUpdate||W.uvsNeedUpdate||W.normalsNeedUpdate||W.colorsNeedUpdate||W.tangentsNeedUpdate||Yb){var Y=lc,yc=Xa,Oa=g.DYNAMIC_DRAW,zc=!W.dynamic,Qb=Ma;if(Y.__inittedArrays){var fd=d(Qb),
+Yc=Qb.vertexColors?Qb.vertexColors:false,gd=e(Qb),Bc=fd===THREE.SmoothShading,y=void 0,N=void 0,Ua=void 0,D=void 0,ac=void 0,yb=void 0,Ya=void 0,Cc=void 0,rb=void 0,bc=void 0,cc=void 0,O=void 0,P=void 0,Q=void 0,fa=void 0,$a=void 0,ab=void 0,bb=void 0,mc=void 0,cb=void 0,db=void 0,eb=void 0,nc=void 0,fb=void 0,gb=void 0,hb=void 0,oc=void 0,ib=void 0,jb=void 0,kb=void 0,pc=void 0,lb=void 0,mb=void 0,nb=void 0,qc=void 0,zb=void 0,Ab=void 0,Bb=void 0,Dc=void 0,Cb=void 0,Db=void 0,Eb=void 0,Ec=void 0,
+ca=void 0,hd=void 0,Fb=void 0,dc=void 0,ec=void 0,Ca=void 0,id=void 0,ya=void 0,za=void 0,Gb=void 0,sb=void 0,ua=0,xa=0,tb=0,ub=0,Sa=0,Ga=0,ga=0,Ja=0,va=0,B=0,X=0,v=0,Pa=void 0,Da=Y.__vertexArray,rc=Y.__uvArray,sc=Y.__uv2Array,Ta=Y.__normalArray,ma=Y.__tangentArray,Ea=Y.__colorArray,na=Y.__skinVertexAArray,oa=Y.__skinVertexBArray,pa=Y.__skinIndexArray,qa=Y.__skinWeightArray,Zc=Y.__morphTargetsArrays,$c=Y.__morphNormalsArrays,ad=Y.__webglCustomAttributesList,t=void 0,ob=Y.__faceArray,Qa=Y.__lineArray,
+Ka=yc.geometry,Pc=Ka.elementsNeedUpdate,jd=Ka.uvsNeedUpdate,Qc=Ka.normalsNeedUpdate,qd=Ka.tangentsNeedUpdate,rd=Ka.colorsNeedUpdate,sd=Ka.morphTargetsNeedUpdate,Rb=Ka.vertices,da=Y.faces3,ea=Y.faces4,wa=Ka.faces,bd=Ka.faceVertexUvs[0],cd=Ka.faceVertexUvs[1],Sb=Ka.skinVerticesA,Tb=Ka.skinVerticesB,Ub=Ka.skinIndices,Hb=Ka.skinWeights,Ib=Ka.morphTargets,Fc=Ka.morphNormals;if(Ka.verticesNeedUpdate){y=0;for(N=da.length;y<N;y++){D=wa[da[y]];O=Rb[D.a];P=Rb[D.b];Q=Rb[D.c];Da[xa]=O.x;Da[xa+1]=O.y;Da[xa+2]=
+O.z;Da[xa+3]=P.x;Da[xa+4]=P.y;Da[xa+5]=P.z;Da[xa+6]=Q.x;Da[xa+7]=Q.y;Da[xa+8]=Q.z;xa=xa+9}y=0;for(N=ea.length;y<N;y++){D=wa[ea[y]];O=Rb[D.a];P=Rb[D.b];Q=Rb[D.c];fa=Rb[D.d];Da[xa]=O.x;Da[xa+1]=O.y;Da[xa+2]=O.z;Da[xa+3]=P.x;Da[xa+4]=P.y;Da[xa+5]=P.z;Da[xa+6]=Q.x;Da[xa+7]=Q.y;Da[xa+8]=Q.z;Da[xa+9]=fa.x;Da[xa+10]=fa.y;Da[xa+11]=fa.z;xa=xa+12}g.bindBuffer(g.ARRAY_BUFFER,Y.__webglVertexBuffer);g.bufferData(g.ARRAY_BUFFER,Da,Oa)}if(sd){Ca=0;for(id=Ib.length;Ca<id;Ca++){y=X=0;for(N=da.length;y<N;y++){Gb=
+da[y];D=wa[Gb];O=Ib[Ca].vertices[D.a];P=Ib[Ca].vertices[D.b];Q=Ib[Ca].vertices[D.c];ya=Zc[Ca];ya[X]=O.x;ya[X+1]=O.y;ya[X+2]=O.z;ya[X+3]=P.x;ya[X+4]=P.y;ya[X+5]=P.z;ya[X+6]=Q.x;ya[X+7]=Q.y;ya[X+8]=Q.z;if(Qb.morphNormals){if(Bc){sb=Fc[Ca].vertexNormals[Gb];cb=sb.a;db=sb.b;eb=sb.c}else eb=db=cb=Fc[Ca].faceNormals[Gb];za=$c[Ca];za[X]=cb.x;za[X+1]=cb.y;za[X+2]=cb.z;za[X+3]=db.x;za[X+4]=db.y;za[X+5]=db.z;za[X+6]=eb.x;za[X+7]=eb.y;za[X+8]=eb.z}X=X+9}y=0;for(N=ea.length;y<N;y++){Gb=ea[y];D=wa[Gb];O=Ib[Ca].vertices[D.a];
+P=Ib[Ca].vertices[D.b];Q=Ib[Ca].vertices[D.c];fa=Ib[Ca].vertices[D.d];ya=Zc[Ca];ya[X]=O.x;ya[X+1]=O.y;ya[X+2]=O.z;ya[X+3]=P.x;ya[X+4]=P.y;ya[X+5]=P.z;ya[X+6]=Q.x;ya[X+7]=Q.y;ya[X+8]=Q.z;ya[X+9]=fa.x;ya[X+10]=fa.y;ya[X+11]=fa.z;if(Qb.morphNormals){if(Bc){sb=Fc[Ca].vertexNormals[Gb];cb=sb.a;db=sb.b;eb=sb.c;nc=sb.d}else nc=eb=db=cb=Fc[Ca].faceNormals[Gb];za=$c[Ca];za[X]=cb.x;za[X+1]=cb.y;za[X+2]=cb.z;za[X+3]=db.x;za[X+4]=db.y;za[X+5]=db.z;za[X+6]=eb.x;za[X+7]=eb.y;za[X+8]=eb.z;za[X+9]=nc.x;za[X+10]=
+nc.y;za[X+11]=nc.z}X=X+12}g.bindBuffer(g.ARRAY_BUFFER,Y.__webglMorphTargetsBuffers[Ca]);g.bufferData(g.ARRAY_BUFFER,Zc[Ca],Oa);if(Qb.morphNormals){g.bindBuffer(g.ARRAY_BUFFER,Y.__webglMorphNormalsBuffers[Ca]);g.bufferData(g.ARRAY_BUFFER,$c[Ca],Oa)}}}if(Hb.length){y=0;for(N=da.length;y<N;y++){D=wa[da[y]];ib=Hb[D.a];jb=Hb[D.b];kb=Hb[D.c];qa[B]=ib.x;qa[B+1]=ib.y;qa[B+2]=ib.z;qa[B+3]=ib.w;qa[B+4]=jb.x;qa[B+5]=jb.y;qa[B+6]=jb.z;qa[B+7]=jb.w;qa[B+8]=kb.x;qa[B+9]=kb.y;qa[B+10]=kb.z;qa[B+11]=kb.w;lb=Ub[D.a];
+mb=Ub[D.b];nb=Ub[D.c];pa[B]=lb.x;pa[B+1]=lb.y;pa[B+2]=lb.z;pa[B+3]=lb.w;pa[B+4]=mb.x;pa[B+5]=mb.y;pa[B+6]=mb.z;pa[B+7]=mb.w;pa[B+8]=nb.x;pa[B+9]=nb.y;pa[B+10]=nb.z;pa[B+11]=nb.w;zb=Sb[D.a];Ab=Sb[D.b];Bb=Sb[D.c];na[B]=zb.x;na[B+1]=zb.y;na[B+2]=zb.z;na[B+3]=1;na[B+4]=Ab.x;na[B+5]=Ab.y;na[B+6]=Ab.z;na[B+7]=1;na[B+8]=Bb.x;na[B+9]=Bb.y;na[B+10]=Bb.z;na[B+11]=1;Cb=Tb[D.a];Db=Tb[D.b];Eb=Tb[D.c];oa[B]=Cb.x;oa[B+1]=Cb.y;oa[B+2]=Cb.z;oa[B+3]=1;oa[B+4]=Db.x;oa[B+5]=Db.y;oa[B+6]=Db.z;oa[B+7]=1;oa[B+8]=Eb.x;oa[B+
 9]=Eb.y;oa[B+10]=Eb.z;oa[B+11]=1;B=B+12}y=0;for(N=ea.length;y<N;y++){D=wa[ea[y]];ib=Hb[D.a];jb=Hb[D.b];kb=Hb[D.c];pc=Hb[D.d];qa[B]=ib.x;qa[B+1]=ib.y;qa[B+2]=ib.z;qa[B+3]=ib.w;qa[B+4]=jb.x;qa[B+5]=jb.y;qa[B+6]=jb.z;qa[B+7]=jb.w;qa[B+8]=kb.x;qa[B+9]=kb.y;qa[B+10]=kb.z;qa[B+11]=kb.w;qa[B+12]=pc.x;qa[B+13]=pc.y;qa[B+14]=pc.z;qa[B+15]=pc.w;lb=Ub[D.a];mb=Ub[D.b];nb=Ub[D.c];qc=Ub[D.d];pa[B]=lb.x;pa[B+1]=lb.y;pa[B+2]=lb.z;pa[B+3]=lb.w;pa[B+4]=mb.x;pa[B+5]=mb.y;pa[B+6]=mb.z;pa[B+7]=mb.w;pa[B+8]=nb.x;pa[B+
-9]=nb.y;pa[B+10]=nb.z;pa[B+11]=nb.w;pa[B+12]=qc.x;pa[B+13]=qc.y;pa[B+14]=qc.z;pa[B+15]=qc.w;zb=Sb[D.a];Ab=Sb[D.b];Bb=Sb[D.c];Cc=Sb[D.d];na[B]=zb.x;na[B+1]=zb.y;na[B+2]=zb.z;na[B+3]=1;na[B+4]=Ab.x;na[B+5]=Ab.y;na[B+6]=Ab.z;na[B+7]=1;na[B+8]=Bb.x;na[B+9]=Bb.y;na[B+10]=Bb.z;na[B+11]=1;na[B+12]=Cc.x;na[B+13]=Cc.y;na[B+14]=Cc.z;na[B+15]=1;Cb=Tb[D.a];Db=Tb[D.b];Eb=Tb[D.c];Dc=Tb[D.d];oa[B]=Cb.x;oa[B+1]=Cb.y;oa[B+2]=Cb.z;oa[B+3]=1;oa[B+4]=Db.x;oa[B+5]=Db.y;oa[B+6]=Db.z;oa[B+7]=1;oa[B+8]=Eb.x;oa[B+9]=Eb.y;
-oa[B+10]=Eb.z;oa[B+11]=1;oa[B+12]=Dc.x;oa[B+13]=Dc.y;oa[B+14]=Dc.z;oa[B+15]=1;B=B+16}if(B>0){g.bindBuffer(g.ARRAY_BUFFER,Y.__webglSkinVertexABuffer);g.bufferData(g.ARRAY_BUFFER,na,Oa);g.bindBuffer(g.ARRAY_BUFFER,Y.__webglSkinVertexBBuffer);g.bufferData(g.ARRAY_BUFFER,oa,Oa);g.bindBuffer(g.ARRAY_BUFFER,Y.__webglSkinIndicesBuffer);g.bufferData(g.ARRAY_BUFFER,pa,Oa);g.bindBuffer(g.ARRAY_BUFFER,Y.__webglSkinWeightsBuffer);g.bufferData(g.ARRAY_BUFFER,qa,Oa)}}if(rd&&Yc){y=0;for(N=da.length;y<N;y++){D=wa[da[y]];
-Ya=D.vertexColors;Bc=D.color;if(Ya.length===3&&Yc===THREE.VertexColors){fb=Ya[0];gb=Ya[1];hb=Ya[2]}else hb=gb=fb=Bc;Ea[va]=fb.r;Ea[va+1]=fb.g;Ea[va+2]=fb.b;Ea[va+3]=gb.r;Ea[va+4]=gb.g;Ea[va+5]=gb.b;Ea[va+6]=hb.r;Ea[va+7]=hb.g;Ea[va+8]=hb.b;va=va+9}y=0;for(N=ea.length;y<N;y++){D=wa[ea[y]];Ya=D.vertexColors;Bc=D.color;if(Ya.length===4&&Yc===THREE.VertexColors){fb=Ya[0];gb=Ya[1];hb=Ya[2];oc=Ya[3]}else oc=hb=gb=fb=Bc;Ea[va]=fb.r;Ea[va+1]=fb.g;Ea[va+2]=fb.b;Ea[va+3]=gb.r;Ea[va+4]=gb.g;Ea[va+5]=gb.b;Ea[va+
+9]=nb.y;pa[B+10]=nb.z;pa[B+11]=nb.w;pa[B+12]=qc.x;pa[B+13]=qc.y;pa[B+14]=qc.z;pa[B+15]=qc.w;zb=Sb[D.a];Ab=Sb[D.b];Bb=Sb[D.c];Dc=Sb[D.d];na[B]=zb.x;na[B+1]=zb.y;na[B+2]=zb.z;na[B+3]=1;na[B+4]=Ab.x;na[B+5]=Ab.y;na[B+6]=Ab.z;na[B+7]=1;na[B+8]=Bb.x;na[B+9]=Bb.y;na[B+10]=Bb.z;na[B+11]=1;na[B+12]=Dc.x;na[B+13]=Dc.y;na[B+14]=Dc.z;na[B+15]=1;Cb=Tb[D.a];Db=Tb[D.b];Eb=Tb[D.c];Ec=Tb[D.d];oa[B]=Cb.x;oa[B+1]=Cb.y;oa[B+2]=Cb.z;oa[B+3]=1;oa[B+4]=Db.x;oa[B+5]=Db.y;oa[B+6]=Db.z;oa[B+7]=1;oa[B+8]=Eb.x;oa[B+9]=Eb.y;
+oa[B+10]=Eb.z;oa[B+11]=1;oa[B+12]=Ec.x;oa[B+13]=Ec.y;oa[B+14]=Ec.z;oa[B+15]=1;B=B+16}if(B>0){g.bindBuffer(g.ARRAY_BUFFER,Y.__webglSkinVertexABuffer);g.bufferData(g.ARRAY_BUFFER,na,Oa);g.bindBuffer(g.ARRAY_BUFFER,Y.__webglSkinVertexBBuffer);g.bufferData(g.ARRAY_BUFFER,oa,Oa);g.bindBuffer(g.ARRAY_BUFFER,Y.__webglSkinIndicesBuffer);g.bufferData(g.ARRAY_BUFFER,pa,Oa);g.bindBuffer(g.ARRAY_BUFFER,Y.__webglSkinWeightsBuffer);g.bufferData(g.ARRAY_BUFFER,qa,Oa)}}if(rd&&Yc){y=0;for(N=da.length;y<N;y++){D=wa[da[y]];
+Ya=D.vertexColors;Cc=D.color;if(Ya.length===3&&Yc===THREE.VertexColors){fb=Ya[0];gb=Ya[1];hb=Ya[2]}else hb=gb=fb=Cc;Ea[va]=fb.r;Ea[va+1]=fb.g;Ea[va+2]=fb.b;Ea[va+3]=gb.r;Ea[va+4]=gb.g;Ea[va+5]=gb.b;Ea[va+6]=hb.r;Ea[va+7]=hb.g;Ea[va+8]=hb.b;va=va+9}y=0;for(N=ea.length;y<N;y++){D=wa[ea[y]];Ya=D.vertexColors;Cc=D.color;if(Ya.length===4&&Yc===THREE.VertexColors){fb=Ya[0];gb=Ya[1];hb=Ya[2];oc=Ya[3]}else oc=hb=gb=fb=Cc;Ea[va]=fb.r;Ea[va+1]=fb.g;Ea[va+2]=fb.b;Ea[va+3]=gb.r;Ea[va+4]=gb.g;Ea[va+5]=gb.b;Ea[va+
 6]=hb.r;Ea[va+7]=hb.g;Ea[va+8]=hb.b;Ea[va+9]=oc.r;Ea[va+10]=oc.g;Ea[va+11]=oc.b;va=va+12}if(va>0){g.bindBuffer(g.ARRAY_BUFFER,Y.__webglColorBuffer);g.bufferData(g.ARRAY_BUFFER,Ea,Oa)}}if(qd&&Ka.hasTangents){y=0;for(N=da.length;y<N;y++){D=wa[da[y]];rb=D.vertexTangents;$a=rb[0];ab=rb[1];bb=rb[2];ma[ga]=$a.x;ma[ga+1]=$a.y;ma[ga+2]=$a.z;ma[ga+3]=$a.w;ma[ga+4]=ab.x;ma[ga+5]=ab.y;ma[ga+6]=ab.z;ma[ga+7]=ab.w;ma[ga+8]=bb.x;ma[ga+9]=bb.y;ma[ga+10]=bb.z;ma[ga+11]=bb.w;ga=ga+12}y=0;for(N=ea.length;y<N;y++){D=
-wa[ea[y]];rb=D.vertexTangents;$a=rb[0];ab=rb[1];bb=rb[2];mc=rb[3];ma[ga]=$a.x;ma[ga+1]=$a.y;ma[ga+2]=$a.z;ma[ga+3]=$a.w;ma[ga+4]=ab.x;ma[ga+5]=ab.y;ma[ga+6]=ab.z;ma[ga+7]=ab.w;ma[ga+8]=bb.x;ma[ga+9]=bb.y;ma[ga+10]=bb.z;ma[ga+11]=bb.w;ma[ga+12]=mc.x;ma[ga+13]=mc.y;ma[ga+14]=mc.z;ma[ga+15]=mc.w;ga=ga+16}g.bindBuffer(g.ARRAY_BUFFER,Y.__webglTangentBuffer);g.bufferData(g.ARRAY_BUFFER,ma,Oa)}if(Qc&&fd){y=0;for(N=da.length;y<N;y++){D=wa[da[y]];ac=D.vertexNormals;yb=D.normal;if(ac.length===3&&Ac)for(ca=
-0;ca<3;ca++){Fb=ac[ca];Ta[Ga]=Fb.x;Ta[Ga+1]=Fb.y;Ta[Ga+2]=Fb.z;Ga=Ga+3}else for(ca=0;ca<3;ca++){Ta[Ga]=yb.x;Ta[Ga+1]=yb.y;Ta[Ga+2]=yb.z;Ga=Ga+3}}y=0;for(N=ea.length;y<N;y++){D=wa[ea[y]];ac=D.vertexNormals;yb=D.normal;if(ac.length===4&&Ac)for(ca=0;ca<4;ca++){Fb=ac[ca];Ta[Ga]=Fb.x;Ta[Ga+1]=Fb.y;Ta[Ga+2]=Fb.z;Ga=Ga+3}else for(ca=0;ca<4;ca++){Ta[Ga]=yb.x;Ta[Ga+1]=yb.y;Ta[Ga+2]=yb.z;Ga=Ga+3}}g.bindBuffer(g.ARRAY_BUFFER,Y.__webglNormalBuffer);g.bufferData(g.ARRAY_BUFFER,Ta,Oa)}if(jd&&bd&&gd){y=0;for(N=
+wa[ea[y]];rb=D.vertexTangents;$a=rb[0];ab=rb[1];bb=rb[2];mc=rb[3];ma[ga]=$a.x;ma[ga+1]=$a.y;ma[ga+2]=$a.z;ma[ga+3]=$a.w;ma[ga+4]=ab.x;ma[ga+5]=ab.y;ma[ga+6]=ab.z;ma[ga+7]=ab.w;ma[ga+8]=bb.x;ma[ga+9]=bb.y;ma[ga+10]=bb.z;ma[ga+11]=bb.w;ma[ga+12]=mc.x;ma[ga+13]=mc.y;ma[ga+14]=mc.z;ma[ga+15]=mc.w;ga=ga+16}g.bindBuffer(g.ARRAY_BUFFER,Y.__webglTangentBuffer);g.bufferData(g.ARRAY_BUFFER,ma,Oa)}if(Qc&&fd){y=0;for(N=da.length;y<N;y++){D=wa[da[y]];ac=D.vertexNormals;yb=D.normal;if(ac.length===3&&Bc)for(ca=
+0;ca<3;ca++){Fb=ac[ca];Ta[Ga]=Fb.x;Ta[Ga+1]=Fb.y;Ta[Ga+2]=Fb.z;Ga=Ga+3}else for(ca=0;ca<3;ca++){Ta[Ga]=yb.x;Ta[Ga+1]=yb.y;Ta[Ga+2]=yb.z;Ga=Ga+3}}y=0;for(N=ea.length;y<N;y++){D=wa[ea[y]];ac=D.vertexNormals;yb=D.normal;if(ac.length===4&&Bc)for(ca=0;ca<4;ca++){Fb=ac[ca];Ta[Ga]=Fb.x;Ta[Ga+1]=Fb.y;Ta[Ga+2]=Fb.z;Ga=Ga+3}else for(ca=0;ca<4;ca++){Ta[Ga]=yb.x;Ta[Ga+1]=yb.y;Ta[Ga+2]=yb.z;Ga=Ga+3}}g.bindBuffer(g.ARRAY_BUFFER,Y.__webglNormalBuffer);g.bufferData(g.ARRAY_BUFFER,Ta,Oa)}if(jd&&bd&&gd){y=0;for(N=
 da.length;y<N;y++){Ua=da[y];D=wa[Ua];bc=bd[Ua];if(bc!==void 0)for(ca=0;ca<3;ca++){dc=bc[ca];rc[tb]=dc.u;rc[tb+1]=dc.v;tb=tb+2}}y=0;for(N=ea.length;y<N;y++){Ua=ea[y];D=wa[Ua];bc=bd[Ua];if(bc!==void 0)for(ca=0;ca<4;ca++){dc=bc[ca];rc[tb]=dc.u;rc[tb+1]=dc.v;tb=tb+2}}if(tb>0){g.bindBuffer(g.ARRAY_BUFFER,Y.__webglUVBuffer);g.bufferData(g.ARRAY_BUFFER,rc,Oa)}}if(jd&&cd&&gd){y=0;for(N=da.length;y<N;y++){Ua=da[y];D=wa[Ua];cc=cd[Ua];if(cc!==void 0)for(ca=0;ca<3;ca++){ec=cc[ca];sc[ub]=ec.u;sc[ub+1]=ec.v;ub=
 ub+2}}y=0;for(N=ea.length;y<N;y++){Ua=ea[y];D=wa[Ua];cc=cd[Ua];if(cc!==void 0)for(ca=0;ca<4;ca++){ec=cc[ca];sc[ub]=ec.u;sc[ub+1]=ec.v;ub=ub+2}}if(ub>0){g.bindBuffer(g.ARRAY_BUFFER,Y.__webglUV2Buffer);g.bufferData(g.ARRAY_BUFFER,sc,Oa)}}if(Pc){y=0;for(N=da.length;y<N;y++){D=wa[da[y]];ob[Sa]=ua;ob[Sa+1]=ua+1;ob[Sa+2]=ua+2;Sa=Sa+3;Qa[Ja]=ua;Qa[Ja+1]=ua+1;Qa[Ja+2]=ua;Qa[Ja+3]=ua+2;Qa[Ja+4]=ua+1;Qa[Ja+5]=ua+2;Ja=Ja+6;ua=ua+3}y=0;for(N=ea.length;y<N;y++){D=wa[ea[y]];ob[Sa]=ua;ob[Sa+1]=ua+1;ob[Sa+2]=ua+
 3;ob[Sa+3]=ua+1;ob[Sa+4]=ua+2;ob[Sa+5]=ua+3;Sa=Sa+6;Qa[Ja]=ua;Qa[Ja+1]=ua+1;Qa[Ja+2]=ua;Qa[Ja+3]=ua+3;Qa[Ja+4]=ua+1;Qa[Ja+5]=ua+2;Qa[Ja+6]=ua+2;Qa[Ja+7]=ua+3;Ja=Ja+8;ua=ua+4}g.bindBuffer(g.ELEMENT_ARRAY_BUFFER,Y.__webglFaceBuffer);g.bufferData(g.ELEMENT_ARRAY_BUFFER,ob,Oa);g.bindBuffer(g.ELEMENT_ARRAY_BUFFER,Y.__webglLineBuffer);g.bufferData(g.ELEMENT_ARRAY_BUFFER,Qa,Oa)}if(ad){ca=0;for(hd=ad.length;ca<hd;ca++){t=ad[ca];if(t.__original.needsUpdate){v=0;if(t.size===1)if(t.boundTo===void 0||t.boundTo===
@@ -378,11 +378,11 @@ t.array[v+5]=P[Z[2]];t.array[v+6]=Q[Z[0]];t.array[v+7]=Q[Z[1]];t.array[v+8]=Q[Z[
 O[Z[0]];t.array[v+1]=O[Z[1]];t.array[v+2]=O[Z[2]];t.array[v+3]=P[Z[0]];t.array[v+4]=P[Z[1]];t.array[v+5]=P[Z[2]];t.array[v+6]=Q[Z[0]];t.array[v+7]=Q[Z[1]];t.array[v+8]=Q[Z[2]];t.array[v+9]=fa[Z[0]];t.array[v+10]=fa[Z[1]];t.array[v+11]=fa[Z[2]];v=v+12}}}else if(t.size===4)if(t.boundTo===void 0||t.boundTo==="vertices"){y=0;for(N=da.length;y<N;y++){D=wa[da[y]];O=t.value[D.a];P=t.value[D.b];Q=t.value[D.c];t.array[v]=O.x;t.array[v+1]=O.y;t.array[v+2]=O.z;t.array[v+3]=O.w;t.array[v+4]=P.x;t.array[v+5]=
 P.y;t.array[v+6]=P.z;t.array[v+7]=P.w;t.array[v+8]=Q.x;t.array[v+9]=Q.y;t.array[v+10]=Q.z;t.array[v+11]=Q.w;v=v+12}y=0;for(N=ea.length;y<N;y++){D=wa[ea[y]];O=t.value[D.a];P=t.value[D.b];Q=t.value[D.c];fa=t.value[D.d];t.array[v]=O.x;t.array[v+1]=O.y;t.array[v+2]=O.z;t.array[v+3]=O.w;t.array[v+4]=P.x;t.array[v+5]=P.y;t.array[v+6]=P.z;t.array[v+7]=P.w;t.array[v+8]=Q.x;t.array[v+9]=Q.y;t.array[v+10]=Q.z;t.array[v+11]=Q.w;t.array[v+12]=fa.x;t.array[v+13]=fa.y;t.array[v+14]=fa.z;t.array[v+15]=fa.w;v=v+
 16}}else if(t.boundTo==="faces"){y=0;for(N=da.length;y<N;y++){Q=P=O=Pa=t.value[da[y]];t.array[v]=O.x;t.array[v+1]=O.y;t.array[v+2]=O.z;t.array[v+3]=O.w;t.array[v+4]=P.x;t.array[v+5]=P.y;t.array[v+6]=P.z;t.array[v+7]=P.w;t.array[v+8]=Q.x;t.array[v+9]=Q.y;t.array[v+10]=Q.z;t.array[v+11]=Q.w;v=v+12}y=0;for(N=ea.length;y<N;y++){fa=Q=P=O=Pa=t.value[ea[y]];t.array[v]=O.x;t.array[v+1]=O.y;t.array[v+2]=O.z;t.array[v+3]=O.w;t.array[v+4]=P.x;t.array[v+5]=P.y;t.array[v+6]=P.z;t.array[v+7]=P.w;t.array[v+8]=Q.x;
-t.array[v+9]=Q.y;t.array[v+10]=Q.z;t.array[v+11]=Q.w;t.array[v+12]=fa.x;t.array[v+13]=fa.y;t.array[v+14]=fa.z;t.array[v+15]=fa.w;v=v+16}}g.bindBuffer(g.ARRAY_BUFFER,t.buffer);g.bufferData(g.ARRAY_BUFFER,t.array,Oa)}}}if(Oc){delete Y.__inittedArrays;delete Y.__colorArray;delete Y.__normalArray;delete Y.__tangentArray;delete Y.__uvArray;delete Y.__uv2Array;delete Y.__faceArray;delete Y.__vertexArray;delete Y.__lineArray;delete Y.__skinVertexAArray;delete Y.__skinVertexBArray;delete Y.__skinIndexArray;
-delete Y.__skinWeightArray}}}}W.verticesNeedUpdate=false;W.morphTargetsNeedUpdate=false;W.elementsNeedUpdate=false;W.uvsNeedUpdate=false;W.normalsNeedUpdate=false;W.colorsNeedUpdate=false;W.tangentsNeedUpdate=false;Ma.attributes&&o(Ma)}else if(Xa instanceof THREE.Ribbon){if(W.verticesNeedUpdate||W.colorsNeedUpdate){var Jb=W,kd=g.DYNAMIC_DRAW,tc=void 0,uc=void 0,Fc=void 0,Kb=void 0,Gc=void 0,ld=Jb.vertices,md=Jb.colors,td=ld.length,ud=md.length,Hc=Jb.__vertexArray,Ic=Jb.__colorArray,vd=Jb.colorsNeedUpdate;
-if(Jb.verticesNeedUpdate){for(tc=0;tc<td;tc++){Fc=ld[tc];Kb=tc*3;Hc[Kb]=Fc.x;Hc[Kb+1]=Fc.y;Hc[Kb+2]=Fc.z}g.bindBuffer(g.ARRAY_BUFFER,Jb.__webglVertexBuffer);g.bufferData(g.ARRAY_BUFFER,Hc,kd)}if(vd){for(uc=0;uc<ud;uc++){Gc=md[uc];Kb=uc*3;Ic[Kb]=Gc.r;Ic[Kb+1]=Gc.g;Ic[Kb+2]=Gc.b}g.bindBuffer(g.ARRAY_BUFFER,Jb.__webglColorBuffer);g.bufferData(g.ARRAY_BUFFER,Ic,kd)}}W.verticesNeedUpdate=false;W.colorsNeedUpdate=false}else if(Xa instanceof THREE.Line){Ma=c(Xa,lc);Yb=Ma.attributes&&n(Ma);if(W.verticesNeedUpdate||
-W.colorsNeedUpdate||Yb){var vb=W,dd=g.DYNAMIC_DRAW,vc=void 0,wc=void 0,Jc=void 0,ra=void 0,Kc=void 0,nd=vb.vertices,od=vb.colors,wd=nd.length,xd=od.length,Lc=vb.__vertexArray,Mc=vb.__colorArray,yd=vb.colorsNeedUpdate,ed=vb.__webglCustomAttributesList,Nc=void 0,pd=void 0,Fa=void 0,fc=void 0,Na=void 0,ja=void 0;if(vb.verticesNeedUpdate){for(vc=0;vc<wd;vc++){Jc=nd[vc];ra=vc*3;Lc[ra]=Jc.x;Lc[ra+1]=Jc.y;Lc[ra+2]=Jc.z}g.bindBuffer(g.ARRAY_BUFFER,vb.__webglVertexBuffer);g.bufferData(g.ARRAY_BUFFER,Lc,dd)}if(yd){for(wc=
-0;wc<xd;wc++){Kc=od[wc];ra=wc*3;Mc[ra]=Kc.r;Mc[ra+1]=Kc.g;Mc[ra+2]=Kc.b}g.bindBuffer(g.ARRAY_BUFFER,vb.__webglColorBuffer);g.bufferData(g.ARRAY_BUFFER,Mc,dd)}if(ed){Nc=0;for(pd=ed.length;Nc<pd;Nc++){ja=ed[Nc];if(ja.needsUpdate&&(ja.boundTo===void 0||ja.boundTo==="vertices")){ra=0;fc=ja.value.length;if(ja.size===1)for(Fa=0;Fa<fc;Fa++)ja.array[Fa]=ja.value[Fa];else if(ja.size===2)for(Fa=0;Fa<fc;Fa++){Na=ja.value[Fa];ja.array[ra]=Na.x;ja.array[ra+1]=Na.y;ra=ra+2}else if(ja.size===3)if(ja.type==="c")for(Fa=
+t.array[v+9]=Q.y;t.array[v+10]=Q.z;t.array[v+11]=Q.w;t.array[v+12]=fa.x;t.array[v+13]=fa.y;t.array[v+14]=fa.z;t.array[v+15]=fa.w;v=v+16}}g.bindBuffer(g.ARRAY_BUFFER,t.buffer);g.bufferData(g.ARRAY_BUFFER,t.array,Oa)}}}if(zc){delete Y.__inittedArrays;delete Y.__colorArray;delete Y.__normalArray;delete Y.__tangentArray;delete Y.__uvArray;delete Y.__uv2Array;delete Y.__faceArray;delete Y.__vertexArray;delete Y.__lineArray;delete Y.__skinVertexAArray;delete Y.__skinVertexBArray;delete Y.__skinIndexArray;
+delete Y.__skinWeightArray}}}}W.verticesNeedUpdate=false;W.morphTargetsNeedUpdate=false;W.elementsNeedUpdate=false;W.uvsNeedUpdate=false;W.normalsNeedUpdate=false;W.colorsNeedUpdate=false;W.tangentsNeedUpdate=false;Ma.attributes&&o(Ma)}else if(Xa instanceof THREE.Ribbon){if(W.verticesNeedUpdate||W.colorsNeedUpdate){var Jb=W,kd=g.DYNAMIC_DRAW,tc=void 0,uc=void 0,Gc=void 0,Kb=void 0,Hc=void 0,ld=Jb.vertices,md=Jb.colors,td=ld.length,ud=md.length,Ic=Jb.__vertexArray,Jc=Jb.__colorArray,vd=Jb.colorsNeedUpdate;
+if(Jb.verticesNeedUpdate){for(tc=0;tc<td;tc++){Gc=ld[tc];Kb=tc*3;Ic[Kb]=Gc.x;Ic[Kb+1]=Gc.y;Ic[Kb+2]=Gc.z}g.bindBuffer(g.ARRAY_BUFFER,Jb.__webglVertexBuffer);g.bufferData(g.ARRAY_BUFFER,Ic,kd)}if(vd){for(uc=0;uc<ud;uc++){Hc=md[uc];Kb=uc*3;Jc[Kb]=Hc.r;Jc[Kb+1]=Hc.g;Jc[Kb+2]=Hc.b}g.bindBuffer(g.ARRAY_BUFFER,Jb.__webglColorBuffer);g.bufferData(g.ARRAY_BUFFER,Jc,kd)}}W.verticesNeedUpdate=false;W.colorsNeedUpdate=false}else if(Xa instanceof THREE.Line){Ma=c(Xa,lc);Yb=Ma.attributes&&n(Ma);if(W.verticesNeedUpdate||
+W.colorsNeedUpdate||Yb){var vb=W,dd=g.DYNAMIC_DRAW,vc=void 0,wc=void 0,Kc=void 0,ra=void 0,Lc=void 0,nd=vb.vertices,od=vb.colors,wd=nd.length,xd=od.length,Mc=vb.__vertexArray,Nc=vb.__colorArray,yd=vb.colorsNeedUpdate,ed=vb.__webglCustomAttributesList,Oc=void 0,pd=void 0,Fa=void 0,fc=void 0,Na=void 0,ja=void 0;if(vb.verticesNeedUpdate){for(vc=0;vc<wd;vc++){Kc=nd[vc];ra=vc*3;Mc[ra]=Kc.x;Mc[ra+1]=Kc.y;Mc[ra+2]=Kc.z}g.bindBuffer(g.ARRAY_BUFFER,vb.__webglVertexBuffer);g.bufferData(g.ARRAY_BUFFER,Mc,dd)}if(yd){for(wc=
+0;wc<xd;wc++){Lc=od[wc];ra=wc*3;Nc[ra]=Lc.r;Nc[ra+1]=Lc.g;Nc[ra+2]=Lc.b}g.bindBuffer(g.ARRAY_BUFFER,vb.__webglColorBuffer);g.bufferData(g.ARRAY_BUFFER,Nc,dd)}if(ed){Oc=0;for(pd=ed.length;Oc<pd;Oc++){ja=ed[Oc];if(ja.needsUpdate&&(ja.boundTo===void 0||ja.boundTo==="vertices")){ra=0;fc=ja.value.length;if(ja.size===1)for(Fa=0;Fa<fc;Fa++)ja.array[Fa]=ja.value[Fa];else if(ja.size===2)for(Fa=0;Fa<fc;Fa++){Na=ja.value[Fa];ja.array[ra]=Na.x;ja.array[ra+1]=Na.y;ra=ra+2}else if(ja.size===3)if(ja.type==="c")for(Fa=
 0;Fa<fc;Fa++){Na=ja.value[Fa];ja.array[ra]=Na.r;ja.array[ra+1]=Na.g;ja.array[ra+2]=Na.b;ra=ra+3}else for(Fa=0;Fa<fc;Fa++){Na=ja.value[Fa];ja.array[ra]=Na.x;ja.array[ra+1]=Na.y;ja.array[ra+2]=Na.z;ra=ra+3}else if(ja.size===4)for(Fa=0;Fa<fc;Fa++){Na=ja.value[Fa];ja.array[ra]=Na.x;ja.array[ra+1]=Na.y;ja.array[ra+2]=Na.z;ja.array[ra+3]=Na.w;ra=ra+4}g.bindBuffer(g.ARRAY_BUFFER,ja.buffer);g.bufferData(g.ARRAY_BUFFER,ja.array,dd)}}}}W.verticesNeedUpdate=false;W.colorsNeedUpdate=false;Ma.attributes&&o(Ma)}else if(Xa instanceof
 THREE.ParticleSystem){Ma=c(Xa,lc);Yb=Ma.attributes&&n(Ma);(W.verticesNeedUpdate||W.colorsNeedUpdate||Xa.sortParticles||Yb)&&f(W,g.DYNAMIC_DRAW,Xa);W.verticesNeedUpdate=false;W.colorsNeedUpdate=false;Ma.attributes&&o(Ma)}}};this.initMaterial=function(a,b,c,d){var e,f,h,i,j,k,l,m;a instanceof THREE.MeshDepthMaterial?m="depth":a instanceof THREE.MeshNormalMaterial?m="normal":a instanceof THREE.MeshBasicMaterial?m="basic":a instanceof THREE.MeshLambertMaterial?m="lambert":a instanceof THREE.MeshPhongMaterial?
 m="phong":a instanceof THREE.LineBasicMaterial?m="basic":a instanceof THREE.ParticleBasicMaterial&&(m="particle_basic");if(m){var n=THREE.ShaderLib[m];a.uniforms=THREE.UniformsUtils.clone(n.uniforms);a.vertexShader=n.vertexShader;a.fragmentShader=n.fragmentShader}var o,q;o=h=e=n=0;for(f=b.length;o<f;o++){q=b[o];if(!q.onlyShadow){q instanceof THREE.DirectionalLight&&h++;q instanceof THREE.PointLight&&e++;q instanceof THREE.SpotLight&&n++}}if(e+n+h<=U){o=h;f=e}else{o=Math.ceil(U*h/(e+h));n=f=U-o}e=

+ 2 - 2
src/renderers/WebGLRenderer.js

@@ -6010,9 +6010,9 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 		}
 
-		if ( _glExtensionTextureFilterAnisotropic ) {
+		if ( _glExtensionTextureFilterAnisotropic && texture.type !== THREE.FloatType ) {
 
-			_gl.texParameterf( textureType, _glExtensionTextureFilterAnisotropic.TEXTURE_MAX_ANISOTROPY_EXT, texture.anisotropy );
+			_gl.texParameterf( textureType, _glExtensionTextureFilterAnisotropic.TEXTURE_MAX_ANISOTROPY_EXT, Math.min( texture.anisotropy, _maxAnisotropy ) );
 
 		}