浏览代码

Refactored textures to set parameters before calling texImage2D.

This is supposed to be more efficient as per Apple OpenGL ES recommendations:

http://developer.apple.com/library/ios/#documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/TechniquesForWorkingWithTextureData/TechniquesForWorkingWithTextureData.html

Also we have been generating mipmaps twice for render targets.
alteredq 13 年之前
父节点
当前提交
4570769451
共有 3 个文件被更改,包括 183 次插入168 次删除
  1. 83 82
      build/Three.js
  2. 83 83
      build/custom/ThreeWebGL.js
  3. 17 3
      src/renderers/WebGLRenderer.js

+ 83 - 82
build/Three.js

@@ -253,88 +253,89 @@ THREE.LineBasicMaterial)i.diffuse.value=d.color,i.opacity.value=d.opacity;else i
 i.ambient.value.copyGammaToLinear(d.ambient):i.ambient.value=d.ambient;else if(d instanceof THREE.MeshDepthMaterial)i.mNear.value=a.near,i.mFar.value=a.far,i.opacity.value=d.opacity;else if(d instanceof THREE.MeshNormalMaterial)i.opacity.value=d.opacity;if(e.receiveShadow&&!d._shadowPass&&i.shadowMatrix){for(b=0;b<ga.length;b++)i.shadowMatrix.value[b]=ga[b],i.shadowMap.texture[b]=M.shadowMap[b];i.shadowDarkness.value=M.shadowMapDarkness;i.shadowBias.value=M.shadowMapBias}b=d.uniformsList;i=0;for(c=
 i.ambient.value.copyGammaToLinear(d.ambient):i.ambient.value=d.ambient;else if(d instanceof THREE.MeshDepthMaterial)i.mNear.value=a.near,i.mFar.value=a.far,i.opacity.value=d.opacity;else if(d instanceof THREE.MeshNormalMaterial)i.opacity.value=d.opacity;if(e.receiveShadow&&!d._shadowPass&&i.shadowMatrix){for(b=0;b<ga.length;b++)i.shadowMatrix.value[b]=ga[b],i.shadowMap.texture[b]=M.shadowMap[b];i.shadowDarkness.value=M.shadowMapDarkness;i.shadowBias.value=M.shadowMapBias}b=d.uniformsList;i=0;for(c=
 b.length;i<c;i++)if(n=g.uniforms[b[i][1]])if(m=b[i][0],p=m.type,h=m.value,p==="i")j.uniform1i(n,h);else if(p==="f")j.uniform1f(n,h);else if(p==="v2")j.uniform2f(n,h.x,h.y);else if(p==="v3")j.uniform3f(n,h.x,h.y,h.z);else if(p==="v4")j.uniform4f(n,h.x,h.y,h.z,h.w);else if(p==="c")j.uniform3f(n,h.r,h.g,h.b);else if(p==="fv1")j.uniform1fv(n,h);else if(p==="fv")j.uniform3fv(n,h);else if(p==="v3v"){if(!m._array)m._array=new Float32Array(3*h.length);p=0;for(q=h.length;p<q;p++)o=p*3,m._array[o]=h[p].x,m._array[o+
 b.length;i<c;i++)if(n=g.uniforms[b[i][1]])if(m=b[i][0],p=m.type,h=m.value,p==="i")j.uniform1i(n,h);else if(p==="f")j.uniform1f(n,h);else if(p==="v2")j.uniform2f(n,h.x,h.y);else if(p==="v3")j.uniform3f(n,h.x,h.y,h.z);else if(p==="v4")j.uniform4f(n,h.x,h.y,h.z,h.w);else if(p==="c")j.uniform3f(n,h.r,h.g,h.b);else if(p==="fv1")j.uniform1fv(n,h);else if(p==="fv")j.uniform3fv(n,h);else if(p==="v3v"){if(!m._array)m._array=new Float32Array(3*h.length);p=0;for(q=h.length;p<q;p++)o=p*3,m._array[o]=h[p].x,m._array[o+
 1]=h[p].y,m._array[o+2]=h[p].z;j.uniform3fv(n,m._array)}else if(p==="m4"){if(!m._array)m._array=new Float32Array(16);h.flattenToArray(m._array);j.uniformMatrix4fv(n,!1,m._array)}else if(p==="m4v"){if(!m._array)m._array=new Float32Array(16*h.length);p=0;for(q=h.length;p<q;p++)h[p].flattenToArrayOffset(m._array,p*16);j.uniformMatrix4fv(n,!1,m._array)}else if(p==="t"){if(j.uniform1i(n,h),n=m.texture)if(n.image instanceof Array&&n.image.length===6){if(m=n,m.image.length===6)if(m.needsUpdate){if(!m.image.__webglTextureCube)m.image.__webglTextureCube=
 1]=h[p].y,m._array[o+2]=h[p].z;j.uniform3fv(n,m._array)}else if(p==="m4"){if(!m._array)m._array=new Float32Array(16);h.flattenToArray(m._array);j.uniformMatrix4fv(n,!1,m._array)}else if(p==="m4v"){if(!m._array)m._array=new Float32Array(16*h.length);p=0;for(q=h.length;p<q;p++)h[p].flattenToArrayOffset(m._array,p*16);j.uniformMatrix4fv(n,!1,m._array)}else if(p==="t"){if(j.uniform1i(n,h),n=m.texture)if(n.image instanceof Array&&n.image.length===6){if(m=n,m.image.length===6)if(m.needsUpdate){if(!m.image.__webglTextureCube)m.image.__webglTextureCube=
-j.createTexture();j.activeTexture(j.TEXTURE0+h);j.bindTexture(j.TEXTURE_CUBE_MAP,m.image.__webglTextureCube);for(h=0;h<6;h++)j.texImage2D(j.TEXTURE_CUBE_MAP_POSITIVE_X+h,0,j.RGBA,j.RGBA,j.UNSIGNED_BYTE,m.image[h]);w(j.TEXTURE_CUBE_MAP,m,m.image[0]);m.needsUpdate=!1}else j.activeTexture(j.TEXTURE0+h),j.bindTexture(j.TEXTURE_CUBE_MAP,m.image.__webglTextureCube)}else n instanceof THREE.WebGLRenderTargetCube?(m=n,j.activeTexture(j.TEXTURE0+h),j.bindTexture(j.TEXTURE_CUBE_MAP,m.__webglTexture)):C(n,h)}else if(p===
-"tv"){if(!m._array){m._array=[];p=0;for(q=m.texture.length;p<q;p++)m._array[p]=h+p}j.uniform1iv(n,m._array);p=0;for(q=m.texture.length;p<q;p++)(n=m.texture[p])&&C(n,m._array[p])}(d instanceof THREE.ShaderMaterial||d instanceof THREE.MeshPhongMaterial||d.envMap)&&f.cameraPosition!==null&&j.uniform3f(f.cameraPosition,a.position.x,a.position.y,a.position.z);(d instanceof THREE.MeshPhongMaterial||d instanceof THREE.MeshLambertMaterial||d instanceof THREE.ShaderMaterial||d.skinning)&&f.viewMatrix!==null&&
-j.uniformMatrix4fv(f.viewMatrix,!1,$);d.skinning&&(j.uniformMatrix4fv(f.cameraInverseMatrix,!1,$),j.uniformMatrix4fv(f.boneGlobalMatrices,!1,e.boneMatrices))}j.uniformMatrix4fv(f.modelViewMatrix,!1,e._modelViewMatrixArray);f.normalMatrix&&j.uniformMatrix3fv(f.normalMatrix,!1,e._normalMatrixArray);(d instanceof THREE.ShaderMaterial||d.envMap||d.skinning||e.receiveShadow)&&f.objectMatrix!==null&&j.uniformMatrix4fv(f.objectMatrix,!1,e._objectMatrixArray);return g}function s(a,b,c){a._modelViewMatrix.multiplyToArray(b.matrixWorldInverse,
-a.matrixWorld,a._modelViewMatrixArray);c&&THREE.Matrix4.makeInvert3x3(a._modelViewMatrix).transposeIntoArray(a._normalMatrixArray)}function u(a){if(U!==a.doubleSided)a.doubleSided?j.disable(j.CULL_FACE):j.enable(j.CULL_FACE),U=a.doubleSided;if(ia!==a.flipSided)a.flipSided?j.frontFace(j.CW):j.frontFace(j.CCW),ia=a.flipSided}function r(a){na!==a&&(a?j.enable(j.DEPTH_TEST):j.disable(j.DEPTH_TEST),na=a)}function z(a){ka!==a&&(j.depthMask(a),ka=a)}function E(a,b,c){oa!==a&&(a?j.enable(j.POLYGON_OFFSET_FILL):
-j.disable(j.POLYGON_OFFSET_FILL),oa=a);if(a&&(la!==b||ma!==c))j.polygonOffset(b,c),la=b,ma=c}function G(a){if(a!==pa){switch(a){case THREE.AdditiveBlending:j.blendEquation(j.FUNC_ADD);j.blendFunc(j.SRC_ALPHA,j.ONE);break;case THREE.SubtractiveBlending:j.blendEquation(j.FUNC_ADD);j.blendFunc(j.ZERO,j.ONE_MINUS_SRC_COLOR);break;case THREE.MultiplyBlending:j.blendEquation(j.FUNC_ADD);j.blendFunc(j.ZERO,j.SRC_COLOR);break;default:j.blendEquationSeparate(j.FUNC_ADD,j.FUNC_ADD),j.blendFuncSeparate(j.SRC_ALPHA,
-j.ONE_MINUS_SRC_ALPHA,j.ONE,j.ONE_MINUS_SRC_ALPHA)}pa=a}}function v(a,b){var c;a==="fragment"?c=j.createShader(j.FRAGMENT_SHADER):a==="vertex"&&(c=j.createShader(j.VERTEX_SHADER));j.shaderSource(c,b);j.compileShader(c);if(!j.getShaderParameter(c,j.COMPILE_STATUS))return console.error(j.getShaderInfoLog(c)),console.error(b),null;return c}function w(a,b,c){(c.width&c.width-1)===0&&(c.height&c.height-1)===0?(j.texParameteri(a,j.TEXTURE_WRAP_S,J(b.wrapS)),j.texParameteri(a,j.TEXTURE_WRAP_T,J(b.wrapT)),
-j.texParameteri(a,j.TEXTURE_MAG_FILTER,J(b.magFilter)),j.texParameteri(a,j.TEXTURE_MIN_FILTER,J(b.minFilter)),j.generateMipmap(a)):(j.texParameteri(a,j.TEXTURE_WRAP_S,j.CLAMP_TO_EDGE),j.texParameteri(a,j.TEXTURE_WRAP_T,j.CLAMP_TO_EDGE),j.texParameteri(a,j.TEXTURE_MAG_FILTER,L(b.magFilter)),j.texParameteri(a,j.TEXTURE_MIN_FILTER,L(b.minFilter)))}function C(a,b){if(a.needsUpdate){if(!a.__webglInit)a.__webglInit=!0,a.__webglTexture=j.createTexture(),M.info.memory.textures++;j.activeTexture(j.TEXTURE0+
-b);j.bindTexture(j.TEXTURE_2D,a.__webglTexture);a instanceof THREE.DataTexture?j.texImage2D(j.TEXTURE_2D,0,J(a.format),a.image.width,a.image.height,0,J(a.format),j.UNSIGNED_BYTE,a.image.data):j.texImage2D(j.TEXTURE_2D,0,j.RGBA,j.RGBA,j.UNSIGNED_BYTE,a.image);w(j.TEXTURE_2D,a,a.image);a.needsUpdate=!1;if(a.onUpdated)a.onUpdated()}else j.activeTexture(j.TEXTURE0+b),j.bindTexture(j.TEXTURE_2D,a.__webglTexture)}function F(a,b){j.bindRenderbuffer(j.RENDERBUFFER,a);b.depthBuffer&&!b.stencilBuffer?(j.renderbufferStorage(j.RENDERBUFFER,
-j.DEPTH_COMPONENT16,b.width,b.height),j.framebufferRenderbuffer(j.FRAMEBUFFER,j.DEPTH_ATTACHMENT,j.RENDERBUFFER,a)):b.depthBuffer&&b.stencilBuffer?(j.renderbufferStorage(j.RENDERBUFFER,j.DEPTH_STENCIL,b.width,b.height),j.framebufferRenderbuffer(j.FRAMEBUFFER,j.DEPTH_STENCIL_ATTACHMENT,j.RENDERBUFFER,a)):j.renderbufferStorage(j.RENDERBUFFER,j.RGBA4,b.width,b.height)}function B(a){var b=a instanceof THREE.WebGLRenderTargetCube;if(a&&!a.__webglFramebuffer){if(a.depthBuffer===void 0)a.depthBuffer=!0;
-if(a.stencilBuffer===void 0)a.stencilBuffer=!0;a.__webglTexture=j.createTexture();if(b){a.__webglFramebuffer=[];a.__webglRenderbuffer=[];j.bindTexture(j.TEXTURE_CUBE_MAP,a.__webglTexture);w(j.TEXTURE_CUBE_MAP,a,a);for(var c=0;c<6;c++){a.__webglFramebuffer[c]=j.createFramebuffer();a.__webglRenderbuffer[c]=j.createRenderbuffer();j.texImage2D(j.TEXTURE_CUBE_MAP_POSITIVE_X+c,0,J(a.format),a.width,a.height,0,J(a.format),J(a.type),null);var d=a,e=j.TEXTURE_CUBE_MAP_POSITIVE_X+c;j.bindFramebuffer(j.FRAMEBUFFER,
-a.__webglFramebuffer[c]);j.framebufferTexture2D(j.FRAMEBUFFER,j.COLOR_ATTACHMENT0,e,d.__webglTexture,0);F(a.__webglRenderbuffer[c],a)}}else a.__webglFramebuffer=j.createFramebuffer(),a.__webglRenderbuffer=j.createRenderbuffer(),j.bindTexture(j.TEXTURE_2D,a.__webglTexture),w(j.TEXTURE_2D,a,a),j.texImage2D(j.TEXTURE_2D,0,J(a.format),a.width,a.height,0,J(a.format),J(a.type),null),c=j.TEXTURE_2D,j.bindFramebuffer(j.FRAMEBUFFER,a.__webglFramebuffer),j.framebufferTexture2D(j.FRAMEBUFFER,j.COLOR_ATTACHMENT0,
-c,a.__webglTexture,0),j.bindRenderbuffer(j.RENDERBUFFER,a.__webglRenderbuffer),F(a.__webglRenderbuffer,a);b?j.bindTexture(j.TEXTURE_CUBE_MAP,null):j.bindTexture(j.TEXTURE_2D,null);j.bindRenderbuffer(j.RENDERBUFFER,null);j.bindFramebuffer(j.FRAMEBUFFER,null)}a?(b=b?a.__webglFramebuffer[a.activeCubeFace]:a.__webglFramebuffer,c=a.width,a=a.height,e=d=0):(b=null,c=xa,a=R,d=ra,e=sa);b!==V&&(j.bindFramebuffer(j.FRAMEBUFFER,b),j.viewport(d,e,c,a),V=b)}function L(a){switch(a){case THREE.NearestFilter:case THREE.NearestMipMapNearestFilter:case THREE.NearestMipMapLinearFilter:return j.NEAREST;
-default:return j.LINEAR}}function J(a){switch(a){case THREE.RepeatWrapping:return j.REPEAT;case THREE.ClampToEdgeWrapping:return j.CLAMP_TO_EDGE;case THREE.MirroredRepeatWrapping:return j.MIRRORED_REPEAT;case THREE.NearestFilter:return j.NEAREST;case THREE.NearestMipMapNearestFilter:return j.NEAREST_MIPMAP_NEAREST;case THREE.NearestMipMapLinearFilter:return j.NEAREST_MIPMAP_LINEAR;case THREE.LinearFilter:return j.LINEAR;case THREE.LinearMipMapNearestFilter:return j.LINEAR_MIPMAP_NEAREST;case THREE.LinearMipMapLinearFilter:return j.LINEAR_MIPMAP_LINEAR;
-case THREE.ByteType:return j.BYTE;case THREE.UnsignedByteType:return j.UNSIGNED_BYTE;case THREE.ShortType:return j.SHORT;case THREE.UnsignedShortType:return j.UNSIGNED_SHORT;case THREE.IntType:return j.INT;case THREE.UnsignedShortType:return j.UNSIGNED_INT;case THREE.FloatType:return j.FLOAT;case THREE.AlphaFormat:return j.ALPHA;case THREE.RGBFormat:return j.RGB;case THREE.RGBAFormat:return j.RGBA;case THREE.LuminanceFormat:return j.LUMINANCE;case THREE.LuminanceAlphaFormat:return j.LUMINANCE_ALPHA}return 0}
-var a=a||{},W=a.canvas!==void 0?a.canvas:document.createElement("canvas"),X=a.precision!==void 0?a.precision:"highp",T=a.antialias!==void 0?a.antialias:!1,ea=a.stencil!==void 0?a.stencil:!0,ba=a.preserveDrawingBuffer!==void 0?a.preserveDrawingBuffer:!1,x=a.clearColor!==void 0?new THREE.Color(a.clearColor):new THREE.Color(0),I=a.clearAlpha!==void 0?a.clearAlpha:0,O=a.maxLights!==void 0?a.maxLights:4;this.domElement=W;this.context=null;this.autoUpdateScene=this.autoUpdateObjects=this.sortObjects=this.autoClearStencil=
-this.autoClearDepth=this.autoClearColor=this.autoClear=!0;this.physicallyBasedShading=this.gammaOutput=this.gammaInput=!1;this.shadowMapBias=0.0039;this.shadowMapDarkness=0.5;this.shadowMapHeight=this.shadowMapWidth=512;this.shadowCameraNear=1;this.shadowCameraFar=5E3;this.shadowCameraFov=50;this.shadowMap=[];this.shadowMapEnabled=!1;this.shadowMapSoft=this.shadowMapAutoUpdate=!0;this.maxMorphTargets=8;this.info={memory:{programs:0,geometries:0,textures:0},render:{calls:0,vertices:0,faces:0}};var M=
-this,j,P=[],ha=null,V=null,Q=-1,K=null,fa=0,U=null,ia=null,pa=null,na=null,ka=null,oa=null,la=null,ma=null,ya=null,ra=0,sa=0,xa=0,R=0,A=[new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4],Z=new THREE.Matrix4,H=new Float32Array(16),$=new Float32Array(16),ca=new THREE.Vector4,aa={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[],distances:[]}},S,ga=[],Y,va,N={},ua=!1;j=function(){var a;try{if(!(a=
-W.getContext("experimental-webgl",{antialias:T,stencil:ea,preserveDrawingBuffer:ba})))throw"Error creating WebGL context.";console.log(navigator.userAgent+" | "+a.getParameter(a.VERSION)+" | "+a.getParameter(a.VENDOR)+" | "+a.getParameter(a.RENDERER)+" | "+a.getParameter(a.SHADING_LANGUAGE_VERSION))}catch(b){console.error(b)}return a}();j.clearColor(0,0,0,1);j.clearDepth(1);j.clearStencil(0);j.enable(j.DEPTH_TEST);j.depthFunc(j.LEQUAL);j.frontFace(j.CCW);j.cullFace(j.BACK);j.enable(j.CULL_FACE);j.enable(j.BLEND);
-j.blendEquation(j.FUNC_ADD);j.blendFunc(j.SRC_ALPHA,j.ONE_MINUS_SRC_ALPHA);j.clearColor(x.r,x.g,x.b,I);(function(){N.vertices=new Float32Array(16);N.faces=new Uint16Array(6);var a=0;N.vertices[a++]=-1;N.vertices[a++]=-1;N.vertices[a++]=0;N.vertices[a++]=1;N.vertices[a++]=1;N.vertices[a++]=-1;N.vertices[a++]=1;N.vertices[a++]=1;N.vertices[a++]=1;N.vertices[a++]=1;N.vertices[a++]=1;N.vertices[a++]=0;N.vertices[a++]=-1;N.vertices[a++]=1;N.vertices[a++]=0;a=N.vertices[a++]=0;N.faces[a++]=0;N.faces[a++]=
-1;N.faces[a++]=2;N.faces[a++]=0;N.faces[a++]=2;N.faces[a++]=3;N.vertexBuffer=j.createBuffer();N.elementBuffer=j.createBuffer();j.bindBuffer(j.ARRAY_BUFFER,N.vertexBuffer);j.bufferData(j.ARRAY_BUFFER,N.vertices,j.STATIC_DRAW);j.bindBuffer(j.ELEMENT_ARRAY_BUFFER,N.elementBuffer);j.bufferData(j.ELEMENT_ARRAY_BUFFER,N.faces,j.STATIC_DRAW);N.program=j.createProgram();j.attachShader(N.program,v("fragment",THREE.ShaderLib.sprite.fragmentShader));j.attachShader(N.program,v("vertex",THREE.ShaderLib.sprite.vertexShader));
-j.linkProgram(N.program);N.attributes={};N.uniforms={};N.attributes.position=j.getAttribLocation(N.program,"position");N.attributes.uv=j.getAttribLocation(N.program,"uv");N.uniforms.uvOffset=j.getUniformLocation(N.program,"uvOffset");N.uniforms.uvScale=j.getUniformLocation(N.program,"uvScale");N.uniforms.rotation=j.getUniformLocation(N.program,"rotation");N.uniforms.scale=j.getUniformLocation(N.program,"scale");N.uniforms.alignment=j.getUniformLocation(N.program,"alignment");N.uniforms.color=j.getUniformLocation(N.program,
-"color");N.uniforms.map=j.getUniformLocation(N.program,"map");N.uniforms.opacity=j.getUniformLocation(N.program,"opacity");N.uniforms.useScreenCoordinates=j.getUniformLocation(N.program,"useScreenCoordinates");N.uniforms.affectedByDistance=j.getUniformLocation(N.program,"affectedByDistance");N.uniforms.screenPosition=j.getUniformLocation(N.program,"screenPosition");N.uniforms.modelViewMatrix=j.getUniformLocation(N.program,"modelViewMatrix");N.uniforms.projectionMatrix=j.getUniformLocation(N.program,
-"projectionMatrix")})();(function(){var a=THREE.ShaderLib.depthRGBA,b=THREE.UniformsUtils.clone(a.uniforms);Y=new THREE.ShaderMaterial({fragmentShader:a.fragmentShader,vertexShader:a.vertexShader,uniforms:b});va=new THREE.ShaderMaterial({fragmentShader:a.fragmentShader,vertexShader:a.vertexShader,uniforms:b,morphTargets:!0});Y._shadowPass=!0;va._shadowPass=!0})();this.context=j;var ta=j.getParameter(j.MAX_VERTEX_TEXTURE_IMAGE_UNITS)>0;this.getContext=function(){return j};this.supportsVertexTextures=
-function(){return ta};this.setSize=function(a,b){W.width=a;W.height=b;this.setViewport(0,0,W.width,W.height)};this.setViewport=function(a,b,c,d){ra=a;sa=b;xa=c;R=d;j.viewport(ra,sa,xa,R)};this.setScissor=function(a,b,c,d){j.scissor(a,b,c,d)};this.enableScissorTest=function(a){a?j.enable(j.SCISSOR_TEST):j.disable(j.SCISSOR_TEST)};this.setClearColorHex=function(a,b){x.setHex(a);I=b;j.clearColor(x.r,x.g,x.b,I)};this.setClearColor=function(a,b){x.copy(a);I=b;j.clearColor(x.r,x.g,x.b,I)};this.getClearColor=
-function(){return x};this.getClearAlpha=function(){return I};this.clear=function(a,b,c){var d=0;if(a===void 0||a)d|=j.COLOR_BUFFER_BIT;if(b===void 0||b)d|=j.DEPTH_BUFFER_BIT;if(c===void 0||c)d|=j.STENCIL_BUFFER_BIT;j.clear(d)};this.clearTarget=function(a,b,c,d){B(a);this.clear(b,c,d)};this.deallocateObject=function(a){if(a.__webglInit)if(a.__webglInit=!1,delete a._modelViewMatrix,delete a._normalMatrixArray,delete a._modelViewMatrixArray,delete a._objectMatrixArray,a instanceof THREE.Mesh)for(var b in a.geometry.geometryGroups){var c=
-a.geometry.geometryGroups[b];j.deleteBuffer(c.__webglVertexBuffer);j.deleteBuffer(c.__webglNormalBuffer);j.deleteBuffer(c.__webglTangentBuffer);j.deleteBuffer(c.__webglColorBuffer);j.deleteBuffer(c.__webglUVBuffer);j.deleteBuffer(c.__webglUV2Buffer);j.deleteBuffer(c.__webglSkinVertexABuffer);j.deleteBuffer(c.__webglSkinVertexBBuffer);j.deleteBuffer(c.__webglSkinIndicesBuffer);j.deleteBuffer(c.__webglSkinWeightsBuffer);j.deleteBuffer(c.__webglFaceBuffer);j.deleteBuffer(c.__webglLineBuffer);if(c.numMorphTargets)for(var d=
-0,e=c.numMorphTargets;d<e;d++)j.deleteBuffer(c.__webglMorphTargetsBuffers[d]);if(c.__webglCustomAttributesList)for(d in d=void 0,c.__webglCustomAttributesList)j.deleteBuffer(c.__webglCustomAttributesList[d].buffer);M.info.memory.geometries--}else if(a instanceof THREE.Ribbon)a=a.geometry,j.deleteBuffer(a.__webglVertexBuffer),j.deleteBuffer(a.__webglColorBuffer),M.info.memory.geometries--;else if(a instanceof THREE.Line)a=a.geometry,j.deleteBuffer(a.__webglVertexBuffer),j.deleteBuffer(a.__webglColorBuffer),
-M.info.memory.geometries--;else if(a instanceof THREE.ParticleSystem)a=a.geometry,j.deleteBuffer(a.__webglVertexBuffer),j.deleteBuffer(a.__webglColorBuffer),M.info.memory.geometries--};this.deallocateTexture=function(a){if(a.__webglInit)a.__webglInit=!1,j.deleteTexture(a.__webglTexture),M.info.memory.textures--};this.updateShadowMap=function(a,b){l(a,b)};this.render=function(a,b,c,d){var e,g,m,n,q=a.lights,t=a.fog;Q=-1;this.autoUpdateObjects&&this.initWebGLObjects(a);this.shadowMapEnabled&&this.shadowMapAutoUpdate&&
-l(a,b);M.info.render.calls=0;M.info.render.vertices=0;M.info.render.faces=0;b.parent===void 0&&(console.warn("DEPRECATED: Camera hasn't been added to a Scene. Adding it..."),a.add(b));this.autoUpdateScene&&a.updateMatrixWorld();b.matrixWorldInverse.getInverse(b.matrixWorld);b.matrixWorldInverse.flattenToArray($);b.projectionMatrix.flattenToArray(H);Z.multiply(b.projectionMatrix,b.matrixWorldInverse);f(Z);B(c);(this.autoClear||d)&&this.clear(this.autoClearColor,this.autoClearDepth,this.autoClearStencil);
-n=a.__webglObjects;d=0;for(e=n.length;d<e;d++)if(g=n[d],m=g.object,g.render=!1,m.visible&&(!(m instanceof THREE.Mesh)||!m.frustumCulled||h(m))){m.matrixWorld.flattenToArray(m._objectMatrixArray);s(m,b,!0);var o=g,A=o.object,u=o.buffer,F=void 0,F=F=void 0,F=A.material;if(F instanceof THREE.MeshFaceMaterial){if(F=u.materialIndex,F>=0)F=A.geometry.materials[F],F.transparent?(o.transparent=F,o.opaque=null):(o.opaque=F,o.transparent=null)}else if(F)F.transparent?(o.transparent=F,o.opaque=null):(o.opaque=
-F,o.transparent=null);g.render=!0;if(this.sortObjects)m.renderDepth?g.z=m.renderDepth:(ca.copy(m.position),Z.multiplyVector3(ca),g.z=ca.z)}this.sortObjects&&n.sort(i);n=a.__webglObjectsImmediate;d=0;for(e=n.length;d<e;d++)if(g=n[d],m=g.object,m.visible)m.matrixAutoUpdate&&m.matrixWorld.flattenToArray(m._objectMatrixArray),s(m,b,!0),m=g.object.material,m.transparent?(g.transparent=m,g.opaque=null):(g.opaque=m,g.transparent=null);a.overrideMaterial?(G(a.overrideMaterial.blending),r(a.overrideMaterial.depthTest),
-z(a.overrideMaterial.depthWrite),E(a.overrideMaterial.polygonOffset,a.overrideMaterial.polygonOffsetFactor,a.overrideMaterial.polygonOffsetUnits),k(a.__webglObjects,!1,"",b,q,t,!0,a.overrideMaterial),p(a.__webglObjectsImmediate,"",b,q,t,!1,a.overrideMaterial)):(G(THREE.NormalBlending),k(a.__webglObjects,!0,"opaque",b,q,t,!1),p(a.__webglObjectsImmediate,"opaque",b,q,t,!1),k(a.__webglObjects,!1,"transparent",b,q,t,!0),p(a.__webglObjectsImmediate,"transparent",b,q,t,!0));if(a.__webglSprites.length){m=
-N.attributes;q=N.uniforms;t=R/xa;d=[];e=xa*0.5;n=R*0.5;g=!0;j.useProgram(N.program);ha=N.program;K=na=pa=-1;ua||(j.enableVertexAttribArray(N.attributes.position),j.enableVertexAttribArray(N.attributes.uv),ua=!0);j.disable(j.CULL_FACE);j.enable(j.BLEND);j.depthMask(!0);j.bindBuffer(j.ARRAY_BUFFER,N.vertexBuffer);j.vertexAttribPointer(m.position,2,j.FLOAT,!1,16,0);j.vertexAttribPointer(m.uv,2,j.FLOAT,!1,16,8);j.bindBuffer(j.ELEMENT_ARRAY_BUFFER,N.elementBuffer);j.uniformMatrix4fv(q.projectionMatrix,
-!1,H);j.activeTexture(j.TEXTURE0);j.uniform1i(q.map,0);m=0;for(o=a.__webglSprites.length;m<o;m++)if(A=a.__webglSprites[m],A.visible&&A.opacity!==0)A.useScreenCoordinates?A.z=-A.position.z:(A._modelViewMatrix.multiplyToArray(b.matrixWorldInverse,A.matrixWorld,A._modelViewMatrixArray),A.z=-A._modelViewMatrix.n34);a.__webglSprites.sort(i);m=0;for(o=a.__webglSprites.length;m<o;m++)A=a.__webglSprites[m],A.visible&&A.opacity!==0&&A.map&&A.map.image&&A.map.image.width&&(A.useScreenCoordinates?(j.uniform1i(q.useScreenCoordinates,
-1),j.uniform3f(q.screenPosition,(A.position.x-e)/e,(n-A.position.y)/n,Math.max(0,Math.min(1,A.position.z)))):(j.uniform1i(q.useScreenCoordinates,0),j.uniform1i(q.affectedByDistance,A.affectedByDistance?1:0),j.uniformMatrix4fv(q.modelViewMatrix,!1,A._modelViewMatrixArray)),b=A.map.image.width/(A.scaleByViewport?R:1),d[0]=b*t*A.scale.x,d[1]=b*A.scale.y,j.uniform2f(q.uvScale,A.uvScale.x,A.uvScale.y),j.uniform2f(q.uvOffset,A.uvOffset.x,A.uvOffset.y),j.uniform2f(q.alignment,A.alignment.x,A.alignment.y),
-j.uniform1f(q.opacity,A.opacity),j.uniform3f(q.color,A.color.r,A.color.g,A.color.b),j.uniform1f(q.rotation,A.rotation),j.uniform2fv(q.scale,d),A.mergeWith3D&&!g?(j.enable(j.DEPTH_TEST),g=!0):!A.mergeWith3D&&g&&(j.disable(j.DEPTH_TEST),g=!1),G(A.blending),C(A.map,0),j.drawElements(j.TRIANGLES,6,j.UNSIGNED_SHORT,0));j.enable(j.CULL_FACE);j.enable(j.DEPTH_TEST);j.depthMask(ka)}c&&c.minFilter!==THREE.NearestFilter&&c.minFilter!==THREE.LinearFilter&&(c instanceof THREE.WebGLRenderTargetCube?(j.bindTexture(j.TEXTURE_CUBE_MAP,
-c.__webglTexture),j.generateMipmap(j.TEXTURE_CUBE_MAP),j.bindTexture(j.TEXTURE_CUBE_MAP,null)):(j.bindTexture(j.TEXTURE_2D,c.__webglTexture),j.generateMipmap(j.TEXTURE_2D),j.bindTexture(j.TEXTURE_2D,null)))};this.initWebGLObjects=function(a){if(!a.__webglObjects)a.__webglObjects=[],a.__webglObjectsImmediate=[],a.__webglSprites=[];for(;a.__objectsAdded.length;){var e=a.__objectsAdded[0],g=a,f=void 0,h=void 0,i=void 0;if(!e.__webglInit)if(e.__webglInit=!0,e._modelViewMatrix=new THREE.Matrix4,e._normalMatrixArray=
-new Float32Array(9),e._modelViewMatrixArray=new Float32Array(16),e._objectMatrixArray=new Float32Array(16),e.matrixWorld.flattenToArray(e._objectMatrixArray),e instanceof THREE.Mesh){h=e.geometry;if(h.geometryGroups===void 0){var i=h,k=void 0,l=void 0,p=void 0,R=void 0,o=void 0,A=void 0,Z=void 0,s={},u=i.morphTargets.length;i.geometryGroups={};k=0;for(l=i.faces.length;k<l;k++)p=i.faces[k],R=p.materialIndex,A=R!==void 0?R:-1,s[A]===void 0&&(s[A]={hash:A,counter:0}),Z=s[A].hash+"_"+s[A].counter,i.geometryGroups[Z]===
-void 0&&(i.geometryGroups[Z]={faces3:[],faces4:[],materialIndex:R,vertices:0,numMorphTargets:u}),o=p instanceof THREE.Face3?3:4,i.geometryGroups[Z].vertices+o>65535&&(s[A].counter+=1,Z=s[A].hash+"_"+s[A].counter,i.geometryGroups[Z]===void 0&&(i.geometryGroups[Z]={faces3:[],faces4:[],materialIndex:R,vertices:0,numMorphTargets:u})),p instanceof THREE.Face3?i.geometryGroups[Z].faces3.push(k):i.geometryGroups[Z].faces4.push(k),i.geometryGroups[Z].vertices+=o;i.geometryGroupsList=[];k=void 0;for(k in i.geometryGroups)i.geometryGroups[k].id=
-fa++,i.geometryGroupsList.push(i.geometryGroups[k])}for(f in h.geometryGroups)if(i=h.geometryGroups[f],!i.__webglVertexBuffer){k=i;k.__webglVertexBuffer=j.createBuffer();k.__webglNormalBuffer=j.createBuffer();k.__webglTangentBuffer=j.createBuffer();k.__webglColorBuffer=j.createBuffer();k.__webglUVBuffer=j.createBuffer();k.__webglUV2Buffer=j.createBuffer();k.__webglSkinVertexABuffer=j.createBuffer();k.__webglSkinVertexBBuffer=j.createBuffer();k.__webglSkinIndicesBuffer=j.createBuffer();k.__webglSkinWeightsBuffer=
-j.createBuffer();k.__webglFaceBuffer=j.createBuffer();k.__webglLineBuffer=j.createBuffer();if(k.numMorphTargets){p=l=void 0;k.__webglMorphTargetsBuffers=[];l=0;for(p=k.numMorphTargets;l<p;l++)k.__webglMorphTargetsBuffers.push(j.createBuffer())}M.info.memory.geometries++;R=e;o=R.geometry;l=i.faces3;A=i.faces4;k=l.length*3+A.length*4;p=l.length*1+A.length*2;A=l.length*3+A.length*4;l=b(R,i);Z=l.map||l.lightMap||l instanceof THREE.ShaderMaterial?!0:!1;s=l instanceof THREE.MeshBasicMaterial&&!l.envMap||
-l instanceof THREE.MeshDepthMaterial?!1:l&&l.shading!==void 0&&l.shading===THREE.SmoothShading?THREE.SmoothShading:THREE.FlatShading;u=l.vertexColors?l.vertexColors:!1;i.__vertexArray=new Float32Array(k*3);if(s)i.__normalArray=new Float32Array(k*3);if(o.hasTangents)i.__tangentArray=new Float32Array(k*4);if(u)i.__colorArray=new Float32Array(k*3);if(Z){if(o.faceUvs.length>0||o.faceVertexUvs.length>0)i.__uvArray=new Float32Array(k*2);if(o.faceUvs.length>1||o.faceVertexUvs.length>1)i.__uv2Array=new Float32Array(k*
-2)}if(R.geometry.skinWeights.length&&R.geometry.skinIndices.length)i.__skinVertexAArray=new Float32Array(k*4),i.__skinVertexBArray=new Float32Array(k*4),i.__skinIndexArray=new Float32Array(k*4),i.__skinWeightArray=new Float32Array(k*4);i.__faceArray=new Uint16Array(p*3);i.__lineArray=new Uint16Array(A*2);if(i.numMorphTargets){i.__morphTargetsArrays=[];R=0;for(o=i.numMorphTargets;R<o;R++)i.__morphTargetsArrays.push(new Float32Array(k*3))}i.__needsSmoothNormals=s===THREE.SmoothShading;i.__uvType=Z;
-i.__vertexColorType=u;i.__normalType=s;i.__webglFaceCount=p*3;i.__webglLineCount=A*2;if(l.attributes){if(i.__webglCustomAttributesList===void 0)i.__webglCustomAttributesList=[];p=void 0;for(p in l.attributes){var R=l.attributes[p],o={},B;for(B in R)o[B]=R[B];if(!o.__webglInitialized||o.createUniqueBuffers)o.__webglInitialized=!0,A=1,o.type==="v2"?A=2:o.type==="v3"?A=3:o.type==="v4"?A=4:o.type==="c"&&(A=3),o.size=A,o.array=new Float32Array(k*A),o.buffer=j.createBuffer(),o.buffer.belongsToAttribute=
-p,R.needsUpdate=!0,o.__original=R;i.__webglCustomAttributesList.push(o)}}i.__inittedArrays=!0;h.__dirtyVertices=!0;h.__dirtyMorphTargets=!0;h.__dirtyElements=!0;h.__dirtyUvs=!0;h.__dirtyNormals=!0;h.__dirtyTangents=!0;h.__dirtyColors=!0}}else if(e instanceof THREE.Ribbon){if(h=e.geometry,!h.__webglVertexBuffer)i=h,i.__webglVertexBuffer=j.createBuffer(),i.__webglColorBuffer=j.createBuffer(),M.info.memory.geometries++,i=h,k=i.vertices.length,i.__vertexArray=new Float32Array(k*3),i.__colorArray=new Float32Array(k*
-3),i.__webglVertexCount=k,h.__dirtyVertices=!0,h.__dirtyColors=!0}else if(e instanceof THREE.Line){if(h=e.geometry,!h.__webglVertexBuffer)i=h,i.__webglVertexBuffer=j.createBuffer(),i.__webglColorBuffer=j.createBuffer(),M.info.memory.geometries++,i=h,k=e,l=i.vertices.length,i.__vertexArray=new Float32Array(l*3),i.__colorArray=new Float32Array(l*3),i.__webglLineCount=l,c(i,k),h.__dirtyVertices=!0,h.__dirtyColors=!0}else if(e instanceof THREE.ParticleSystem&&(h=e.geometry,!h.__webglVertexBuffer))i=h,
-i.__webglVertexBuffer=j.createBuffer(),i.__webglColorBuffer=j.createBuffer(),M.info.geometries++,i=h,k=e,l=i.vertices.length,i.__vertexArray=new Float32Array(l*3),i.__colorArray=new Float32Array(l*3),i.__sortArray=[],i.__webglParticleCount=l,c(i,k),h.__dirtyVertices=!0,h.__dirtyColors=!0;if(!e.__webglActive){if(e instanceof THREE.Mesh)for(f in h=e.geometry,h.geometryGroups)i=h.geometryGroups[f],q(g.__webglObjects,i,e);else e instanceof THREE.Ribbon||e instanceof THREE.Line||e instanceof THREE.ParticleSystem?
-(h=e.geometry,q(g.__webglObjects,h,e)):THREE.MarchingCubes!==void 0&&e instanceof THREE.MarchingCubes||e.immediateRenderCallback?g.__webglObjectsImmediate.push({object:e,opaque:null,transparent:null}):e instanceof THREE.Sprite&&g.__webglSprites.push(e);e.__webglActive=!0}a.__objectsAdded.splice(0,1)}for(;a.__objectsRemoved.length;){e=a.__objectsRemoved[0];g=a;if(e instanceof THREE.Mesh||e instanceof THREE.ParticleSystem||e instanceof THREE.Ribbon||e instanceof THREE.Line)n(g.__webglObjects,e);else if(e instanceof
-THREE.Sprite){g=g.__webglSprites;f=e;for(h=g.length-1;h>=0;h--)g[h]===f&&g.splice(h,1)}else(e instanceof THREE.MarchingCubes||e.immediateRenderCallback)&&n(g.__webglObjectsImmediate,e);e.__webglActive=!1;a.__objectsRemoved.splice(0,1)}e=0;for(g=a.__webglObjects.length;e<g;e++)if(B=a.__webglObjects[e].object,f=B.geometry,h=p=l=void 0,B instanceof THREE.Mesh){i=0;for(k=f.geometryGroupsList.length;i<k;i++)if(l=f.geometryGroupsList[i],h=b(B,l),p=h.attributes&&m(h),f.__dirtyVertices||f.__dirtyMorphTargets||
-f.__dirtyElements||f.__dirtyUvs||f.__dirtyNormals||f.__dirtyColors||f.__dirtyTangents||p)if(p=j.DYNAMIC_DRAW,R=!f.dynamic,l.__inittedArrays){var F=A=o=void 0,r=void 0,L=void 0,z=void 0,H=void 0,J=void 0,I=void 0,O=void 0,G=void 0,C=F=z=void 0,x=void 0,w=void 0,v=void 0,E=r=void 0,$=void 0,ca=r=I=G=void 0,N=void 0,T=v=w=x=H=void 0,S=r=v=w=x=T=v=w=x=T=v=w=x=void 0,aa=void 0,W=z=void 0,X=void 0,Q=void 0,ea=void 0,V=void 0,K=C=Q=aa=0,ba=0,U=S=F=0,P=H=E=0,D=0,ga=void 0,P=l.__vertexArray,X=l.__uvArray,
-D=l.__uv2Array,W=l.__normalArray,L=l.__tangentArray,$=l.__colorArray,ca=l.__skinVertexAArray,N=l.__skinVertexBArray,J=l.__skinIndexArray,Y=l.__skinWeightArray,T=l.__morphTargetsArrays,Z=l.__webglCustomAttributesList,y=void 0,y=l.__faceArray,ga=l.__lineArray,ha=l.__needsSmoothNormals,G=l.__vertexColorType,O=l.__uvType,z=l.__normalType,I=B.geometry,ia=I.__dirtyElements,va=I.__dirtyUvs,pa=I.__dirtyNormals,ta=I.__dirtyTangents,na=I.__dirtyColors,ea=I.__dirtyMorphTargets,V=I.vertices,s=l.faces3,u=l.faces4,
-ja=I.faces,ka=I.faceVertexUvs[0],ma=I.faceVertexUvs[1],la=I.skinVerticesA,oa=I.skinVerticesB,ua=I.skinIndices,ra=I.skinWeights,sa=I.morphTargets;if(I.__dirtyVertices){o=0;for(A=s.length;o<A;o++)r=ja[s[o]],x=V[r.a].position,w=V[r.b].position,v=V[r.c].position,P[Q]=x.x,P[Q+1]=x.y,P[Q+2]=x.z,P[Q+3]=w.x,P[Q+4]=w.y,P[Q+5]=w.z,P[Q+6]=v.x,P[Q+7]=v.y,P[Q+8]=v.z,Q+=9;o=0;for(A=u.length;o<A;o++)r=ja[u[o]],x=V[r.a].position,w=V[r.b].position,v=V[r.c].position,r=V[r.d].position,P[Q]=x.x,P[Q+1]=x.y,P[Q+2]=x.z,
-P[Q+3]=w.x,P[Q+4]=w.y,P[Q+5]=w.z,P[Q+6]=v.x,P[Q+7]=v.y,P[Q+8]=v.z,P[Q+9]=r.x,P[Q+10]=r.y,P[Q+11]=r.z,Q+=12;j.bindBuffer(j.ARRAY_BUFFER,l.__webglVertexBuffer);j.bufferData(j.ARRAY_BUFFER,P,p)}if(ea){Q=0;for(ea=sa.length;Q<ea;Q++){o=P=0;for(A=s.length;o<A;o++)r=ja[s[o]],x=sa[Q].vertices[r.a].position,w=sa[Q].vertices[r.b].position,v=sa[Q].vertices[r.c].position,V=T[Q],V[P]=x.x,V[P+1]=x.y,V[P+2]=x.z,V[P+3]=w.x,V[P+4]=w.y,V[P+5]=w.z,V[P+6]=v.x,V[P+7]=v.y,V[P+8]=v.z,P+=9;o=0;for(A=u.length;o<A;o++)r=ja[u[o]],
-x=sa[Q].vertices[r.a].position,w=sa[Q].vertices[r.b].position,v=sa[Q].vertices[r.c].position,r=sa[Q].vertices[r.d].position,V=T[Q],V[P]=x.x,V[P+1]=x.y,V[P+2]=x.z,V[P+3]=w.x,V[P+4]=w.y,V[P+5]=w.z,V[P+6]=v.x,V[P+7]=v.y,V[P+8]=v.z,V[P+9]=r.x,V[P+10]=r.y,V[P+11]=r.z,P+=12;j.bindBuffer(j.ARRAY_BUFFER,l.__webglMorphTargetsBuffers[Q]);j.bufferData(j.ARRAY_BUFFER,T[Q],p)}}if(ra.length){o=0;for(A=s.length;o<A;o++)r=ja[s[o]],x=ra[r.a],w=ra[r.b],v=ra[r.c],Y[H]=x.x,Y[H+1]=x.y,Y[H+2]=x.z,Y[H+3]=x.w,Y[H+4]=w.x,
-Y[H+5]=w.y,Y[H+6]=w.z,Y[H+7]=w.w,Y[H+8]=v.x,Y[H+9]=v.y,Y[H+10]=v.z,Y[H+11]=v.w,x=ua[r.a],w=ua[r.b],v=ua[r.c],J[H]=x.x,J[H+1]=x.y,J[H+2]=x.z,J[H+3]=x.w,J[H+4]=w.x,J[H+5]=w.y,J[H+6]=w.z,J[H+7]=w.w,J[H+8]=v.x,J[H+9]=v.y,J[H+10]=v.z,J[H+11]=v.w,x=la[r.a],w=la[r.b],v=la[r.c],ca[H]=x.x,ca[H+1]=x.y,ca[H+2]=x.z,ca[H+3]=1,ca[H+4]=w.x,ca[H+5]=w.y,ca[H+6]=w.z,ca[H+7]=1,ca[H+8]=v.x,ca[H+9]=v.y,ca[H+10]=v.z,ca[H+11]=1,x=oa[r.a],w=oa[r.b],v=oa[r.c],N[H]=x.x,N[H+1]=x.y,N[H+2]=x.z,N[H+3]=1,N[H+4]=w.x,N[H+5]=w.y,
-N[H+6]=w.z,N[H+7]=1,N[H+8]=v.x,N[H+9]=v.y,N[H+10]=v.z,N[H+11]=1,H+=12;o=0;for(A=u.length;o<A;o++)r=ja[u[o]],x=ra[r.a],w=ra[r.b],v=ra[r.c],T=ra[r.d],Y[H]=x.x,Y[H+1]=x.y,Y[H+2]=x.z,Y[H+3]=x.w,Y[H+4]=w.x,Y[H+5]=w.y,Y[H+6]=w.z,Y[H+7]=w.w,Y[H+8]=v.x,Y[H+9]=v.y,Y[H+10]=v.z,Y[H+11]=v.w,Y[H+12]=T.x,Y[H+13]=T.y,Y[H+14]=T.z,Y[H+15]=T.w,x=ua[r.a],w=ua[r.b],v=ua[r.c],T=ua[r.d],J[H]=x.x,J[H+1]=x.y,J[H+2]=x.z,J[H+3]=x.w,J[H+4]=w.x,J[H+5]=w.y,J[H+6]=w.z,J[H+7]=w.w,J[H+8]=v.x,J[H+9]=v.y,J[H+10]=v.z,J[H+11]=v.w,J[H+
-12]=T.x,J[H+13]=T.y,J[H+14]=T.z,J[H+15]=T.w,x=la[r.a],w=la[r.b],v=la[r.c],T=la[r.d],ca[H]=x.x,ca[H+1]=x.y,ca[H+2]=x.z,ca[H+3]=1,ca[H+4]=w.x,ca[H+5]=w.y,ca[H+6]=w.z,ca[H+7]=1,ca[H+8]=v.x,ca[H+9]=v.y,ca[H+10]=v.z,ca[H+11]=1,ca[H+12]=T.x,ca[H+13]=T.y,ca[H+14]=T.z,ca[H+15]=1,x=oa[r.a],w=oa[r.b],v=oa[r.c],r=oa[r.d],N[H]=x.x,N[H+1]=x.y,N[H+2]=x.z,N[H+3]=1,N[H+4]=w.x,N[H+5]=w.y,N[H+6]=w.z,N[H+7]=1,N[H+8]=v.x,N[H+9]=v.y,N[H+10]=v.z,N[H+11]=1,N[H+12]=r.x,N[H+13]=r.y,N[H+14]=r.z,N[H+15]=1,H+=16;H>0&&(j.bindBuffer(j.ARRAY_BUFFER,
-l.__webglSkinVertexABuffer),j.bufferData(j.ARRAY_BUFFER,ca,p),j.bindBuffer(j.ARRAY_BUFFER,l.__webglSkinVertexBBuffer),j.bufferData(j.ARRAY_BUFFER,N,p),j.bindBuffer(j.ARRAY_BUFFER,l.__webglSkinIndicesBuffer),j.bufferData(j.ARRAY_BUFFER,J,p),j.bindBuffer(j.ARRAY_BUFFER,l.__webglSkinWeightsBuffer),j.bufferData(j.ARRAY_BUFFER,Y,p))}if(na&&G){o=0;for(A=s.length;o<A;o++)r=ja[s[o]],H=r.vertexColors,J=r.color,H.length===3&&G===THREE.VertexColors?(r=H[0],ca=H[1],N=H[2]):N=ca=r=J,$[E]=r.r,$[E+1]=r.g,$[E+2]=
-r.b,$[E+3]=ca.r,$[E+4]=ca.g,$[E+5]=ca.b,$[E+6]=N.r,$[E+7]=N.g,$[E+8]=N.b,E+=9;o=0;for(A=u.length;o<A;o++)r=ja[u[o]],H=r.vertexColors,J=r.color,H.length===4&&G===THREE.VertexColors?(r=H[0],ca=H[1],N=H[2],H=H[3]):H=N=ca=r=J,$[E]=r.r,$[E+1]=r.g,$[E+2]=r.b,$[E+3]=ca.r,$[E+4]=ca.g,$[E+5]=ca.b,$[E+6]=N.r,$[E+7]=N.g,$[E+8]=N.b,$[E+9]=H.r,$[E+10]=H.g,$[E+11]=H.b,E+=12;E>0&&(j.bindBuffer(j.ARRAY_BUFFER,l.__webglColorBuffer),j.bufferData(j.ARRAY_BUFFER,$,p))}if(ta&&I.hasTangents){o=0;for(A=s.length;o<A;o++)r=
-ja[s[o]],I=r.vertexTangents,E=I[0],$=I[1],G=I[2],L[S]=E.x,L[S+1]=E.y,L[S+2]=E.z,L[S+3]=E.w,L[S+4]=$.x,L[S+5]=$.y,L[S+6]=$.z,L[S+7]=$.w,L[S+8]=G.x,L[S+9]=G.y,L[S+10]=G.z,L[S+11]=G.w,S+=12;o=0;for(A=u.length;o<A;o++)r=ja[u[o]],I=r.vertexTangents,E=I[0],$=I[1],G=I[2],I=I[3],L[S]=E.x,L[S+1]=E.y,L[S+2]=E.z,L[S+3]=E.w,L[S+4]=$.x,L[S+5]=$.y,L[S+6]=$.z,L[S+7]=$.w,L[S+8]=G.x,L[S+9]=G.y,L[S+10]=G.z,L[S+11]=G.w,L[S+12]=I.x,L[S+13]=I.y,L[S+14]=I.z,L[S+15]=I.w,S+=16;j.bindBuffer(j.ARRAY_BUFFER,l.__webglTangentBuffer);
-j.bufferData(j.ARRAY_BUFFER,L,p)}if(pa&&z){o=0;for(A=s.length;o<A;o++)if(r=ja[s[o]],L=r.vertexNormals,z=r.normal,L.length===3&&ha)for(S=0;S<3;S++)z=L[S],W[F]=z.x,W[F+1]=z.y,W[F+2]=z.z,F+=3;else for(S=0;S<3;S++)W[F]=z.x,W[F+1]=z.y,W[F+2]=z.z,F+=3;o=0;for(A=u.length;o<A;o++)if(r=ja[u[o]],L=r.vertexNormals,z=r.normal,L.length===4&&ha)for(S=0;S<4;S++)z=L[S],W[F]=z.x,W[F+1]=z.y,W[F+2]=z.z,F+=3;else for(S=0;S<4;S++)W[F]=z.x,W[F+1]=z.y,W[F+2]=z.z,F+=3;j.bindBuffer(j.ARRAY_BUFFER,l.__webglNormalBuffer);j.bufferData(j.ARRAY_BUFFER,
-W,p)}if(va&&ka&&O){o=0;for(A=s.length;o<A;o++)if(F=s[o],F=ka[F],F!==void 0)for(S=0;S<3;S++)W=F[S],X[C]=W.u,X[C+1]=W.v,C+=2;o=0;for(A=u.length;o<A;o++)if(F=u[o],F=ka[F],F!==void 0)for(S=0;S<4;S++)W=F[S],X[C]=W.u,X[C+1]=W.v,C+=2;C>0&&(j.bindBuffer(j.ARRAY_BUFFER,l.__webglUVBuffer),j.bufferData(j.ARRAY_BUFFER,X,p))}if(va&&ma&&O){o=0;for(A=s.length;o<A;o++)if(F=s[o],C=ma[F],C!==void 0)for(S=0;S<3;S++)X=C[S],D[K]=X.u,D[K+1]=X.v,K+=2;o=0;for(A=u.length;o<A;o++)if(F=u[o],C=ma[F],C!==void 0)for(S=0;S<4;S++)X=
-C[S],D[K]=X.u,D[K+1]=X.v,K+=2;K>0&&(j.bindBuffer(j.ARRAY_BUFFER,l.__webglUV2Buffer),j.bufferData(j.ARRAY_BUFFER,D,p))}if(ia){o=0;for(A=s.length;o<A;o++)y[ba]=aa,y[ba+1]=aa+1,y[ba+2]=aa+2,ba+=3,ga[U]=aa,ga[U+1]=aa+1,ga[U+2]=aa,ga[U+3]=aa+2,ga[U+4]=aa+1,ga[U+5]=aa+2,U+=6,aa+=3;o=0;for(A=u.length;o<A;o++)y[ba]=aa,y[ba+1]=aa+1,y[ba+2]=aa+3,y[ba+3]=aa+1,y[ba+4]=aa+2,y[ba+5]=aa+3,ba+=6,ga[U]=aa,ga[U+1]=aa+1,ga[U+2]=aa,ga[U+3]=aa+3,ga[U+4]=aa+1,ga[U+5]=aa+2,ga[U+6]=aa+2,ga[U+7]=aa+3,U+=8,aa+=4;j.bindBuffer(j.ELEMENT_ARRAY_BUFFER,
-l.__webglFaceBuffer);j.bufferData(j.ELEMENT_ARRAY_BUFFER,y,p);j.bindBuffer(j.ELEMENT_ARRAY_BUFFER,l.__webglLineBuffer);j.bufferData(j.ELEMENT_ARRAY_BUFFER,ga,p)}if(Z){S=0;for(aa=Z.length;S<aa;S++)if(y=Z[S],y.__original.needsUpdate){D=0;if(y.size===1)if(y.boundTo===void 0||y.boundTo==="vertices"){o=0;for(A=s.length;o<A;o++)r=ja[s[o]],y.array[D]=y.value[r.a],y.array[D+1]=y.value[r.b],y.array[D+2]=y.value[r.c],D+=3;o=0;for(A=u.length;o<A;o++)r=ja[u[o]],y.array[D]=y.value[r.a],y.array[D+1]=y.value[r.b],
-y.array[D+2]=y.value[r.c],y.array[D+3]=y.value[r.d],D+=4}else{if(y.boundTo==="faces"){o=0;for(A=s.length;o<A;o++)ga=y.value[s[o]],y.array[D]=ga,y.array[D+1]=ga,y.array[D+2]=ga,D+=3;o=0;for(A=u.length;o<A;o++)ga=y.value[u[o]],y.array[D]=ga,y.array[D+1]=ga,y.array[D+2]=ga,y.array[D+3]=ga,D+=4}}else if(y.size===2)if(y.boundTo===void 0||y.boundTo==="vertices"){o=0;for(A=s.length;o<A;o++)r=ja[s[o]],x=y.value[r.a],w=y.value[r.b],v=y.value[r.c],y.array[D]=x.x,y.array[D+1]=x.y,y.array[D+2]=w.x,y.array[D+
-3]=w.y,y.array[D+4]=v.x,y.array[D+5]=v.y,D+=6;o=0;for(A=u.length;o<A;o++)r=ja[u[o]],x=y.value[r.a],w=y.value[r.b],v=y.value[r.c],r=y.value[r.d],y.array[D]=x.x,y.array[D+1]=x.y,y.array[D+2]=w.x,y.array[D+3]=w.y,y.array[D+4]=v.x,y.array[D+5]=v.y,y.array[D+6]=r.x,y.array[D+7]=r.y,D+=8}else{if(y.boundTo==="faces"){o=0;for(A=s.length;o<A;o++)v=w=x=ga=y.value[s[o]],y.array[D]=x.x,y.array[D+1]=x.y,y.array[D+2]=w.x,y.array[D+3]=w.y,y.array[D+4]=v.x,y.array[D+5]=v.y,D+=6;o=0;for(A=u.length;o<A;o++)r=v=w=x=
-ga=y.value[u[o]],y.array[D]=x.x,y.array[D+1]=x.y,y.array[D+2]=w.x,y.array[D+3]=w.y,y.array[D+4]=v.x,y.array[D+5]=v.y,y.array[D+6]=r.x,y.array[D+7]=r.y,D+=8}}else if(y.size===3)if(K=y.type==="c"?["r","g","b"]:["x","y","z"],y.boundTo===void 0||y.boundTo==="vertices"){o=0;for(A=s.length;o<A;o++)r=ja[s[o]],x=y.value[r.a],w=y.value[r.b],v=y.value[r.c],y.array[D]=x[K[0]],y.array[D+1]=x[K[1]],y.array[D+2]=x[K[2]],y.array[D+3]=w[K[0]],y.array[D+4]=w[K[1]],y.array[D+5]=w[K[2]],y.array[D+6]=v[K[0]],y.array[D+
-7]=v[K[1]],y.array[D+8]=v[K[2]],D+=9;o=0;for(A=u.length;o<A;o++)r=ja[u[o]],x=y.value[r.a],w=y.value[r.b],v=y.value[r.c],r=y.value[r.d],y.array[D]=x[K[0]],y.array[D+1]=x[K[1]],y.array[D+2]=x[K[2]],y.array[D+3]=w[K[0]],y.array[D+4]=w[K[1]],y.array[D+5]=w[K[2]],y.array[D+6]=v[K[0]],y.array[D+7]=v[K[1]],y.array[D+8]=v[K[2]],y.array[D+9]=r[K[0]],y.array[D+10]=r[K[1]],y.array[D+11]=r[K[2]],D+=12}else{if(y.boundTo==="faces"){o=0;for(A=s.length;o<A;o++)v=w=x=ga=y.value[s[o]],y.array[D]=x[K[0]],y.array[D+
-1]=x[K[1]],y.array[D+2]=x[K[2]],y.array[D+3]=w[K[0]],y.array[D+4]=w[K[1]],y.array[D+5]=w[K[2]],y.array[D+6]=v[K[0]],y.array[D+7]=v[K[1]],y.array[D+8]=v[K[2]],D+=9;o=0;for(A=u.length;o<A;o++)r=v=w=x=ga=y.value[u[o]],y.array[D]=x[K[0]],y.array[D+1]=x[K[1]],y.array[D+2]=x[K[2]],y.array[D+3]=w[K[0]],y.array[D+4]=w[K[1]],y.array[D+5]=w[K[2]],y.array[D+6]=v[K[0]],y.array[D+7]=v[K[1]],y.array[D+8]=v[K[2]],y.array[D+9]=r[K[0]],y.array[D+10]=r[K[1]],y.array[D+11]=r[K[2]],D+=12}}else if(y.size===4)if(y.boundTo===
-void 0||y.boundTo==="vertices"){o=0;for(A=s.length;o<A;o++)r=ja[s[o]],x=y.value[r.a],w=y.value[r.b],v=y.value[r.c],y.array[D]=x.x,y.array[D+1]=x.y,y.array[D+2]=x.z,y.array[D+3]=x.w,y.array[D+4]=w.x,y.array[D+5]=w.y,y.array[D+6]=w.z,y.array[D+7]=w.w,y.array[D+8]=v.x,y.array[D+9]=v.y,y.array[D+10]=v.z,y.array[D+11]=v.w,D+=12;o=0;for(A=u.length;o<A;o++)r=ja[u[o]],x=y.value[r.a],w=y.value[r.b],v=y.value[r.c],r=y.value[r.d],y.array[D]=x.x,y.array[D+1]=x.y,y.array[D+2]=x.z,y.array[D+3]=x.w,y.array[D+4]=
-w.x,y.array[D+5]=w.y,y.array[D+6]=w.z,y.array[D+7]=w.w,y.array[D+8]=v.x,y.array[D+9]=v.y,y.array[D+10]=v.z,y.array[D+11]=v.w,y.array[D+12]=r.x,y.array[D+13]=r.y,y.array[D+14]=r.z,y.array[D+15]=r.w,D+=16}else if(y.boundTo==="faces"){o=0;for(A=s.length;o<A;o++)v=w=x=ga=y.value[s[o]],y.array[D]=x.x,y.array[D+1]=x.y,y.array[D+2]=x.z,y.array[D+3]=x.w,y.array[D+4]=w.x,y.array[D+5]=w.y,y.array[D+6]=w.z,y.array[D+7]=w.w,y.array[D+8]=v.x,y.array[D+9]=v.y,y.array[D+10]=v.z,y.array[D+11]=v.w,D+=12;o=0;for(A=
-u.length;o<A;o++)r=v=w=x=ga=y.value[u[o]],y.array[D]=x.x,y.array[D+1]=x.y,y.array[D+2]=x.z,y.array[D+3]=x.w,y.array[D+4]=w.x,y.array[D+5]=w.y,y.array[D+6]=w.z,y.array[D+7]=w.w,y.array[D+8]=v.x,y.array[D+9]=v.y,y.array[D+10]=v.z,y.array[D+11]=v.w,y.array[D+12]=r.x,y.array[D+13]=r.y,y.array[D+14]=r.z,y.array[D+15]=r.w,D+=16}j.bindBuffer(j.ARRAY_BUFFER,y.buffer);j.bufferData(j.ARRAY_BUFFER,y.array,p)}}R&&(delete l.__inittedArrays,delete l.__colorArray,delete l.__normalArray,delete l.__tangentArray,delete l.__uvArray,
-delete l.__uv2Array,delete l.__faceArray,delete l.__vertexArray,delete l.__lineArray,delete l.__skinVertexAArray,delete l.__skinVertexBArray,delete l.__skinIndexArray,delete l.__skinWeightArray)}f.__dirtyVertices=!1;f.__dirtyMorphTargets=!1;f.__dirtyElements=!1;f.__dirtyUvs=!1;f.__dirtyNormals=!1;f.__dirtyColors=!1;f.__dirtyTangents=!1;h.attributes&&t(h)}else if(B instanceof THREE.Ribbon){if(f.__dirtyVertices||f.__dirtyColors){h=f;B=j.DYNAMIC_DRAW;o=i=o=R=R=void 0;A=h.vertices;k=h.colors;Z=A.length;
-l=k.length;s=h.__vertexArray;p=h.__colorArray;u=h.__dirtyColors;if(h.__dirtyVertices){for(R=0;R<Z;R++)o=A[R].position,i=R*3,s[i]=o.x,s[i+1]=o.y,s[i+2]=o.z;j.bindBuffer(j.ARRAY_BUFFER,h.__webglVertexBuffer);j.bufferData(j.ARRAY_BUFFER,s,B)}if(u){for(R=0;R<l;R++)o=k[R],i=R*3,p[i]=o.r,p[i+1]=o.g,p[i+2]=o.b;j.bindBuffer(j.ARRAY_BUFFER,h.__webglColorBuffer);j.bufferData(j.ARRAY_BUFFER,p,B)}}f.__dirtyVertices=!1;f.__dirtyColors=!1}else if(B instanceof THREE.Line){h=b(B,l);p=h.attributes&&m(h);if(f.__dirtyVertices||
-f.__dirtyColors||p){B=f;i=j.DYNAMIC_DRAW;Z=k=aa=A=ja=void 0;A=B.vertices;l=B.colors;Z=A.length;p=l.length;s=B.__vertexArray;R=B.__colorArray;u=B.__dirtyColors;o=B.__webglCustomAttributesList;C=U=ba=K=aa=ja=void 0;if(B.__dirtyVertices){for(ja=0;ja<Z;ja++)aa=A[ja].position,k=ja*3,s[k]=aa.x,s[k+1]=aa.y,s[k+2]=aa.z;j.bindBuffer(j.ARRAY_BUFFER,B.__webglVertexBuffer);j.bufferData(j.ARRAY_BUFFER,s,i)}if(u){for(A=0;A<p;A++)Z=l[A],k=A*3,R[k]=Z.r,R[k+1]=Z.g,R[k+2]=Z.b;j.bindBuffer(j.ARRAY_BUFFER,B.__webglColorBuffer);
-j.bufferData(j.ARRAY_BUFFER,R,i)}if(o){ja=0;for(aa=o.length;ja<aa;ja++)if(C=o[ja],C.needsUpdate&&(C.boundTo===void 0||C.boundTo==="vertices")){k=0;ba=C.value.length;if(C.size===1)for(K=0;K<ba;K++)C.array[K]=C.value[K];else if(C.size===2)for(K=0;K<ba;K++)U=C.value[K],C.array[k]=U.x,C.array[k+1]=U.y,k+=2;else if(C.size===3)if(C.type==="c")for(K=0;K<ba;K++)U=C.value[K],C.array[k]=U.r,C.array[k+1]=U.g,C.array[k+2]=U.b,k+=3;else for(K=0;K<ba;K++)U=C.value[K],C.array[k]=U.x,C.array[k+1]=U.y,C.array[k+2]=
-U.z,k+=3;else if(C.size===4)for(K=0;K<ba;K++)U=C.value[K],C.array[k]=U.x,C.array[k+1]=U.y,C.array[k+2]=U.z,C.array[k+3]=U.w,k+=4;j.bindBuffer(j.ARRAY_BUFFER,C.buffer);j.bufferData(j.ARRAY_BUFFER,C.array,i)}}}f.__dirtyVertices=!1;f.__dirtyColors=!1;h.attributes&&t(h)}else if(B instanceof THREE.ParticleSystem)h=b(B,l),p=h.attributes&&m(h),(f.__dirtyVertices||f.__dirtyColors||B.sortParticles||p)&&d(f,j.DYNAMIC_DRAW,B),f.__dirtyVertices=!1,f.__dirtyColors=!1,h.attributes&&t(h)};this.initMaterial=function(a,
-b,c,d){var e,g,f,h;a instanceof THREE.MeshDepthMaterial?h="depth":a instanceof THREE.MeshNormalMaterial?h="normal":a instanceof THREE.MeshBasicMaterial?h="basic":a instanceof THREE.MeshLambertMaterial?h="lambert":a instanceof THREE.MeshPhongMaterial?h="phong":a instanceof THREE.LineBasicMaterial?h="basic":a instanceof THREE.ParticleBasicMaterial&&(h="particle_basic");if(h){var i=THREE.ShaderLib[h];a.uniforms=THREE.UniformsUtils.clone(i.uniforms);a.vertexShader=i.vertexShader;a.fragmentShader=i.fragmentShader}var k,
-l,m;k=m=i=0;for(l=b.length;k<l;k++)f=b[k],f instanceof THREE.SpotLight&&m++,f instanceof THREE.DirectionalLight&&m++,f instanceof THREE.PointLight&&i++;i+m<=O?k=m:(k=Math.ceil(O*m/(i+m)),i=O-k);f={directional:k,point:i};i=m=0;for(k=b.length;i<k;i++)l=b[i],l instanceof THREE.SpotLight&&l.castShadow&&m++;var n=50;if(d!==void 0&&d instanceof THREE.SkinnedMesh)n=d.bones.length;var o;a:{k=a.fragmentShader;l=a.vertexShader;var i=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,morphTargets:a.morphTargets,maxMorphTargets:this.maxMorphTargets,maxDirLights:f.directional,maxPointLights:f.point,maxBones:n,shadowMapEnabled:this.shadowMapEnabled&&d.receiveShadow,shadowMapSoft:this.shadowMapSoft,shadowMapWidth:this.shadowMapWidth,shadowMapHeight:this.shadowMapHeight,maxShadows:m,alphaTest:a.alphaTest,metal:a.metal,perPixel:a.perPixel},p,d=[];h?d.push(h):(d.push(k),d.push(l));for(p in c)d.push(p),
-d.push(c[p]);h=d.join();p=0;for(d=P.length;p<d;p++)if(P[p].code===h){o=P[p].program;break a}p=j.createProgram();d=[ta?"#define VERTEX_TEXTURES":"",M.gammaInput?"#define GAMMA_INPUT":"",M.gammaOutput?"#define GAMMA_OUTPUT":"",M.physicallyBasedShading?"#define PHYSICALLY_BASED_SHADING":"","#define MAX_DIR_LIGHTS "+c.maxDirLights,"#define MAX_POINT_LIGHTS "+c.maxPointLights,"#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.morphTargets?"#define USE_MORPHTARGETS":"",c.perPixel?"#define PHONG_PER_PIXEL":"",c.shadowMapEnabled?"#define USE_SHADOWMAP":"",c.shadowMapSoft?"#define SHADOWMAP_SOFT":"",c.sizeAttenuation?"#define USE_SIZEATTENUATION":"","uniform mat4 objectMatrix;\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform mat4 viewMatrix;\nuniform mat3 normalMatrix;\nuniform vec3 cameraPosition;\nuniform mat4 cameraInverseMatrix;\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;\nattribute vec3 morphTarget4;\nattribute vec3 morphTarget5;\nattribute vec3 morphTarget6;\nattribute vec3 morphTarget7;\n#endif\n#ifdef USE_SKINNING\nattribute vec4 skinVertexA;\nattribute vec4 skinVertexB;\nattribute vec4 skinIndex;\nattribute vec4 skinWeight;\n#endif\n"].join("\n");
+j.createTexture();j.activeTexture(j.TEXTURE0+h);j.bindTexture(j.TEXTURE_CUBE_MAP,m.image.__webglTextureCube);h=w(j.TEXTURE_CUBE_MAP,m,m.image[0]);for(n=0;n<6;n++)j.texImage2D(j.TEXTURE_CUBE_MAP_POSITIVE_X+n,0,j.RGBA,j.RGBA,j.UNSIGNED_BYTE,m.image[n]);h&&j.generateMipmap(j.TEXTURE_CUBE_MAP);m.needsUpdate=!1}else j.activeTexture(j.TEXTURE0+h),j.bindTexture(j.TEXTURE_CUBE_MAP,m.image.__webglTextureCube)}else n instanceof THREE.WebGLRenderTargetCube?(m=n,j.activeTexture(j.TEXTURE0+h),j.bindTexture(j.TEXTURE_CUBE_MAP,
+m.__webglTexture)):C(n,h)}else if(p==="tv"){if(!m._array){m._array=[];p=0;for(q=m.texture.length;p<q;p++)m._array[p]=h+p}j.uniform1iv(n,m._array);p=0;for(q=m.texture.length;p<q;p++)(n=m.texture[p])&&C(n,m._array[p])}(d instanceof THREE.ShaderMaterial||d instanceof THREE.MeshPhongMaterial||d.envMap)&&f.cameraPosition!==null&&j.uniform3f(f.cameraPosition,a.position.x,a.position.y,a.position.z);(d instanceof THREE.MeshPhongMaterial||d instanceof THREE.MeshLambertMaterial||d instanceof THREE.ShaderMaterial||
+d.skinning)&&f.viewMatrix!==null&&j.uniformMatrix4fv(f.viewMatrix,!1,$);d.skinning&&(j.uniformMatrix4fv(f.cameraInverseMatrix,!1,$),j.uniformMatrix4fv(f.boneGlobalMatrices,!1,e.boneMatrices))}j.uniformMatrix4fv(f.modelViewMatrix,!1,e._modelViewMatrixArray);f.normalMatrix&&j.uniformMatrix3fv(f.normalMatrix,!1,e._normalMatrixArray);(d instanceof THREE.ShaderMaterial||d.envMap||d.skinning||e.receiveShadow)&&f.objectMatrix!==null&&j.uniformMatrix4fv(f.objectMatrix,!1,e._objectMatrixArray);return g}function s(a,
+b,c){a._modelViewMatrix.multiplyToArray(b.matrixWorldInverse,a.matrixWorld,a._modelViewMatrixArray);c&&THREE.Matrix4.makeInvert3x3(a._modelViewMatrix).transposeIntoArray(a._normalMatrixArray)}function u(a){if(U!==a.doubleSided)a.doubleSided?j.disable(j.CULL_FACE):j.enable(j.CULL_FACE),U=a.doubleSided;if(ia!==a.flipSided)a.flipSided?j.frontFace(j.CW):j.frontFace(j.CCW),ia=a.flipSided}function r(a){na!==a&&(a?j.enable(j.DEPTH_TEST):j.disable(j.DEPTH_TEST),na=a)}function z(a){ka!==a&&(j.depthMask(a),
+ka=a)}function E(a,b,c){oa!==a&&(a?j.enable(j.POLYGON_OFFSET_FILL):j.disable(j.POLYGON_OFFSET_FILL),oa=a);if(a&&(la!==b||ma!==c))j.polygonOffset(b,c),la=b,ma=c}function G(a){if(a!==pa){switch(a){case THREE.AdditiveBlending:j.blendEquation(j.FUNC_ADD);j.blendFunc(j.SRC_ALPHA,j.ONE);break;case THREE.SubtractiveBlending:j.blendEquation(j.FUNC_ADD);j.blendFunc(j.ZERO,j.ONE_MINUS_SRC_COLOR);break;case THREE.MultiplyBlending:j.blendEquation(j.FUNC_ADD);j.blendFunc(j.ZERO,j.SRC_COLOR);break;default:j.blendEquationSeparate(j.FUNC_ADD,
+j.FUNC_ADD),j.blendFuncSeparate(j.SRC_ALPHA,j.ONE_MINUS_SRC_ALPHA,j.ONE,j.ONE_MINUS_SRC_ALPHA)}pa=a}}function v(a,b){var c;a==="fragment"?c=j.createShader(j.FRAGMENT_SHADER):a==="vertex"&&(c=j.createShader(j.VERTEX_SHADER));j.shaderSource(c,b);j.compileShader(c);if(!j.getShaderParameter(c,j.COMPILE_STATUS))return console.error(j.getShaderInfoLog(c)),console.error(b),null;return c}function w(a,b,c){return(c.width&c.width-1)===0&&(c.height&c.height-1)===0?(j.texParameteri(a,j.TEXTURE_WRAP_S,J(b.wrapS)),
+j.texParameteri(a,j.TEXTURE_WRAP_T,J(b.wrapT)),j.texParameteri(a,j.TEXTURE_MAG_FILTER,J(b.magFilter)),j.texParameteri(a,j.TEXTURE_MIN_FILTER,J(b.minFilter)),!0):(j.texParameteri(a,j.TEXTURE_WRAP_S,j.CLAMP_TO_EDGE),j.texParameteri(a,j.TEXTURE_WRAP_T,j.CLAMP_TO_EDGE),j.texParameteri(a,j.TEXTURE_MAG_FILTER,L(b.magFilter)),j.texParameteri(a,j.TEXTURE_MIN_FILTER,L(b.minFilter)),!1)}function C(a,b){if(a.needsUpdate){if(!a.__webglInit)a.__webglInit=!0,a.__webglTexture=j.createTexture(),M.info.memory.textures++;
+j.activeTexture(j.TEXTURE0+b);j.bindTexture(j.TEXTURE_2D,a.__webglTexture);var c=w(j.TEXTURE_2D,a,a.image);a instanceof THREE.DataTexture?j.texImage2D(j.TEXTURE_2D,0,J(a.format),a.image.width,a.image.height,0,J(a.format),j.UNSIGNED_BYTE,a.image.data):j.texImage2D(j.TEXTURE_2D,0,j.RGBA,j.RGBA,j.UNSIGNED_BYTE,a.image);c&&j.generateMipmap(j.TEXTURE_2D);a.needsUpdate=!1;if(a.onUpdated)a.onUpdated()}else j.activeTexture(j.TEXTURE0+b),j.bindTexture(j.TEXTURE_2D,a.__webglTexture)}function F(a,b){j.bindRenderbuffer(j.RENDERBUFFER,
+a);b.depthBuffer&&!b.stencilBuffer?(j.renderbufferStorage(j.RENDERBUFFER,j.DEPTH_COMPONENT16,b.width,b.height),j.framebufferRenderbuffer(j.FRAMEBUFFER,j.DEPTH_ATTACHMENT,j.RENDERBUFFER,a)):b.depthBuffer&&b.stencilBuffer?(j.renderbufferStorage(j.RENDERBUFFER,j.DEPTH_STENCIL,b.width,b.height),j.framebufferRenderbuffer(j.FRAMEBUFFER,j.DEPTH_STENCIL_ATTACHMENT,j.RENDERBUFFER,a)):j.renderbufferStorage(j.RENDERBUFFER,j.RGBA4,b.width,b.height)}function B(a){var b=a instanceof THREE.WebGLRenderTargetCube;
+if(a&&!a.__webglFramebuffer){if(a.depthBuffer===void 0)a.depthBuffer=!0;if(a.stencilBuffer===void 0)a.stencilBuffer=!0;a.__webglTexture=j.createTexture();if(b){a.__webglFramebuffer=[];a.__webglRenderbuffer=[];j.bindTexture(j.TEXTURE_CUBE_MAP,a.__webglTexture);w(j.TEXTURE_CUBE_MAP,a,a);for(var c=0;c<6;c++){a.__webglFramebuffer[c]=j.createFramebuffer();a.__webglRenderbuffer[c]=j.createRenderbuffer();j.texImage2D(j.TEXTURE_CUBE_MAP_POSITIVE_X+c,0,J(a.format),a.width,a.height,0,J(a.format),J(a.type),
+null);var d=a,e=j.TEXTURE_CUBE_MAP_POSITIVE_X+c;j.bindFramebuffer(j.FRAMEBUFFER,a.__webglFramebuffer[c]);j.framebufferTexture2D(j.FRAMEBUFFER,j.COLOR_ATTACHMENT0,e,d.__webglTexture,0);F(a.__webglRenderbuffer[c],a)}}else a.__webglFramebuffer=j.createFramebuffer(),a.__webglRenderbuffer=j.createRenderbuffer(),j.bindTexture(j.TEXTURE_2D,a.__webglTexture),w(j.TEXTURE_2D,a,a),j.texImage2D(j.TEXTURE_2D,0,J(a.format),a.width,a.height,0,J(a.format),J(a.type),null),c=j.TEXTURE_2D,j.bindFramebuffer(j.FRAMEBUFFER,
+a.__webglFramebuffer),j.framebufferTexture2D(j.FRAMEBUFFER,j.COLOR_ATTACHMENT0,c,a.__webglTexture,0),j.bindRenderbuffer(j.RENDERBUFFER,a.__webglRenderbuffer),F(a.__webglRenderbuffer,a);b?j.bindTexture(j.TEXTURE_CUBE_MAP,null):j.bindTexture(j.TEXTURE_2D,null);j.bindRenderbuffer(j.RENDERBUFFER,null);j.bindFramebuffer(j.FRAMEBUFFER,null)}a?(b=b?a.__webglFramebuffer[a.activeCubeFace]:a.__webglFramebuffer,c=a.width,a=a.height,e=d=0):(b=null,c=xa,a=R,d=ra,e=sa);b!==V&&(j.bindFramebuffer(j.FRAMEBUFFER,b),
+j.viewport(d,e,c,a),V=b)}function L(a){switch(a){case THREE.NearestFilter:case THREE.NearestMipMapNearestFilter:case THREE.NearestMipMapLinearFilter:return j.NEAREST;default:return j.LINEAR}}function J(a){switch(a){case THREE.RepeatWrapping:return j.REPEAT;case THREE.ClampToEdgeWrapping:return j.CLAMP_TO_EDGE;case THREE.MirroredRepeatWrapping:return j.MIRRORED_REPEAT;case THREE.NearestFilter:return j.NEAREST;case THREE.NearestMipMapNearestFilter:return j.NEAREST_MIPMAP_NEAREST;case THREE.NearestMipMapLinearFilter:return j.NEAREST_MIPMAP_LINEAR;
+case THREE.LinearFilter:return j.LINEAR;case THREE.LinearMipMapNearestFilter:return j.LINEAR_MIPMAP_NEAREST;case THREE.LinearMipMapLinearFilter:return j.LINEAR_MIPMAP_LINEAR;case THREE.ByteType:return j.BYTE;case THREE.UnsignedByteType:return j.UNSIGNED_BYTE;case THREE.ShortType:return j.SHORT;case THREE.UnsignedShortType:return j.UNSIGNED_SHORT;case THREE.IntType:return j.INT;case THREE.UnsignedShortType:return j.UNSIGNED_INT;case THREE.FloatType:return j.FLOAT;case THREE.AlphaFormat:return j.ALPHA;
+case THREE.RGBFormat:return j.RGB;case THREE.RGBAFormat:return j.RGBA;case THREE.LuminanceFormat:return j.LUMINANCE;case THREE.LuminanceAlphaFormat:return j.LUMINANCE_ALPHA}return 0}var a=a||{},W=a.canvas!==void 0?a.canvas:document.createElement("canvas"),X=a.precision!==void 0?a.precision:"highp",T=a.antialias!==void 0?a.antialias:!1,ea=a.stencil!==void 0?a.stencil:!0,ba=a.preserveDrawingBuffer!==void 0?a.preserveDrawingBuffer:!1,x=a.clearColor!==void 0?new THREE.Color(a.clearColor):new THREE.Color(0),
+I=a.clearAlpha!==void 0?a.clearAlpha:0,O=a.maxLights!==void 0?a.maxLights:4;this.domElement=W;this.context=null;this.autoUpdateScene=this.autoUpdateObjects=this.sortObjects=this.autoClearStencil=this.autoClearDepth=this.autoClearColor=this.autoClear=!0;this.physicallyBasedShading=this.gammaOutput=this.gammaInput=!1;this.shadowMapBias=0.0039;this.shadowMapDarkness=0.5;this.shadowMapHeight=this.shadowMapWidth=512;this.shadowCameraNear=1;this.shadowCameraFar=5E3;this.shadowCameraFov=50;this.shadowMap=
+[];this.shadowMapEnabled=!1;this.shadowMapSoft=this.shadowMapAutoUpdate=!0;this.maxMorphTargets=8;this.info={memory:{programs:0,geometries:0,textures:0},render:{calls:0,vertices:0,faces:0}};var M=this,j,P=[],ha=null,V=null,Q=-1,K=null,fa=0,U=null,ia=null,pa=null,na=null,ka=null,oa=null,la=null,ma=null,ya=null,ra=0,sa=0,xa=0,R=0,A=[new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4],Z=new THREE.Matrix4,H=new Float32Array(16),$=new Float32Array(16),
+ca=new THREE.Vector4,aa={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[],distances:[]}},S,ga=[],Y,va,N={},ua=!1;j=function(){var a;try{if(!(a=W.getContext("experimental-webgl",{antialias:T,stencil:ea,preserveDrawingBuffer:ba})))throw"Error creating WebGL context.";console.log(navigator.userAgent+" | "+a.getParameter(a.VERSION)+" | "+a.getParameter(a.VENDOR)+" | "+a.getParameter(a.RENDERER)+" | "+a.getParameter(a.SHADING_LANGUAGE_VERSION))}catch(b){console.error(b)}return a}();
+j.clearColor(0,0,0,1);j.clearDepth(1);j.clearStencil(0);j.enable(j.DEPTH_TEST);j.depthFunc(j.LEQUAL);j.frontFace(j.CCW);j.cullFace(j.BACK);j.enable(j.CULL_FACE);j.enable(j.BLEND);j.blendEquation(j.FUNC_ADD);j.blendFunc(j.SRC_ALPHA,j.ONE_MINUS_SRC_ALPHA);j.clearColor(x.r,x.g,x.b,I);(function(){N.vertices=new Float32Array(16);N.faces=new Uint16Array(6);var a=0;N.vertices[a++]=-1;N.vertices[a++]=-1;N.vertices[a++]=0;N.vertices[a++]=1;N.vertices[a++]=1;N.vertices[a++]=-1;N.vertices[a++]=1;N.vertices[a++]=
+1;N.vertices[a++]=1;N.vertices[a++]=1;N.vertices[a++]=1;N.vertices[a++]=0;N.vertices[a++]=-1;N.vertices[a++]=1;N.vertices[a++]=0;a=N.vertices[a++]=0;N.faces[a++]=0;N.faces[a++]=1;N.faces[a++]=2;N.faces[a++]=0;N.faces[a++]=2;N.faces[a++]=3;N.vertexBuffer=j.createBuffer();N.elementBuffer=j.createBuffer();j.bindBuffer(j.ARRAY_BUFFER,N.vertexBuffer);j.bufferData(j.ARRAY_BUFFER,N.vertices,j.STATIC_DRAW);j.bindBuffer(j.ELEMENT_ARRAY_BUFFER,N.elementBuffer);j.bufferData(j.ELEMENT_ARRAY_BUFFER,N.faces,j.STATIC_DRAW);
+N.program=j.createProgram();j.attachShader(N.program,v("fragment",THREE.ShaderLib.sprite.fragmentShader));j.attachShader(N.program,v("vertex",THREE.ShaderLib.sprite.vertexShader));j.linkProgram(N.program);N.attributes={};N.uniforms={};N.attributes.position=j.getAttribLocation(N.program,"position");N.attributes.uv=j.getAttribLocation(N.program,"uv");N.uniforms.uvOffset=j.getUniformLocation(N.program,"uvOffset");N.uniforms.uvScale=j.getUniformLocation(N.program,"uvScale");N.uniforms.rotation=j.getUniformLocation(N.program,
+"rotation");N.uniforms.scale=j.getUniformLocation(N.program,"scale");N.uniforms.alignment=j.getUniformLocation(N.program,"alignment");N.uniforms.color=j.getUniformLocation(N.program,"color");N.uniforms.map=j.getUniformLocation(N.program,"map");N.uniforms.opacity=j.getUniformLocation(N.program,"opacity");N.uniforms.useScreenCoordinates=j.getUniformLocation(N.program,"useScreenCoordinates");N.uniforms.affectedByDistance=j.getUniformLocation(N.program,"affectedByDistance");N.uniforms.screenPosition=
+j.getUniformLocation(N.program,"screenPosition");N.uniforms.modelViewMatrix=j.getUniformLocation(N.program,"modelViewMatrix");N.uniforms.projectionMatrix=j.getUniformLocation(N.program,"projectionMatrix")})();(function(){var a=THREE.ShaderLib.depthRGBA,b=THREE.UniformsUtils.clone(a.uniforms);Y=new THREE.ShaderMaterial({fragmentShader:a.fragmentShader,vertexShader:a.vertexShader,uniforms:b});va=new THREE.ShaderMaterial({fragmentShader:a.fragmentShader,vertexShader:a.vertexShader,uniforms:b,morphTargets:!0});
+Y._shadowPass=!0;va._shadowPass=!0})();this.context=j;var ta=j.getParameter(j.MAX_VERTEX_TEXTURE_IMAGE_UNITS)>0;this.getContext=function(){return j};this.supportsVertexTextures=function(){return ta};this.setSize=function(a,b){W.width=a;W.height=b;this.setViewport(0,0,W.width,W.height)};this.setViewport=function(a,b,c,d){ra=a;sa=b;xa=c;R=d;j.viewport(ra,sa,xa,R)};this.setScissor=function(a,b,c,d){j.scissor(a,b,c,d)};this.enableScissorTest=function(a){a?j.enable(j.SCISSOR_TEST):j.disable(j.SCISSOR_TEST)};
+this.setClearColorHex=function(a,b){x.setHex(a);I=b;j.clearColor(x.r,x.g,x.b,I)};this.setClearColor=function(a,b){x.copy(a);I=b;j.clearColor(x.r,x.g,x.b,I)};this.getClearColor=function(){return x};this.getClearAlpha=function(){return I};this.clear=function(a,b,c){var d=0;if(a===void 0||a)d|=j.COLOR_BUFFER_BIT;if(b===void 0||b)d|=j.DEPTH_BUFFER_BIT;if(c===void 0||c)d|=j.STENCIL_BUFFER_BIT;j.clear(d)};this.clearTarget=function(a,b,c,d){B(a);this.clear(b,c,d)};this.deallocateObject=function(a){if(a.__webglInit)if(a.__webglInit=
+!1,delete a._modelViewMatrix,delete a._normalMatrixArray,delete a._modelViewMatrixArray,delete a._objectMatrixArray,a instanceof THREE.Mesh)for(var b in a.geometry.geometryGroups){var c=a.geometry.geometryGroups[b];j.deleteBuffer(c.__webglVertexBuffer);j.deleteBuffer(c.__webglNormalBuffer);j.deleteBuffer(c.__webglTangentBuffer);j.deleteBuffer(c.__webglColorBuffer);j.deleteBuffer(c.__webglUVBuffer);j.deleteBuffer(c.__webglUV2Buffer);j.deleteBuffer(c.__webglSkinVertexABuffer);j.deleteBuffer(c.__webglSkinVertexBBuffer);
+j.deleteBuffer(c.__webglSkinIndicesBuffer);j.deleteBuffer(c.__webglSkinWeightsBuffer);j.deleteBuffer(c.__webglFaceBuffer);j.deleteBuffer(c.__webglLineBuffer);if(c.numMorphTargets)for(var d=0,e=c.numMorphTargets;d<e;d++)j.deleteBuffer(c.__webglMorphTargetsBuffers[d]);if(c.__webglCustomAttributesList)for(d in d=void 0,c.__webglCustomAttributesList)j.deleteBuffer(c.__webglCustomAttributesList[d].buffer);M.info.memory.geometries--}else if(a instanceof THREE.Ribbon)a=a.geometry,j.deleteBuffer(a.__webglVertexBuffer),
+j.deleteBuffer(a.__webglColorBuffer),M.info.memory.geometries--;else if(a instanceof THREE.Line)a=a.geometry,j.deleteBuffer(a.__webglVertexBuffer),j.deleteBuffer(a.__webglColorBuffer),M.info.memory.geometries--;else if(a instanceof THREE.ParticleSystem)a=a.geometry,j.deleteBuffer(a.__webglVertexBuffer),j.deleteBuffer(a.__webglColorBuffer),M.info.memory.geometries--};this.deallocateTexture=function(a){if(a.__webglInit)a.__webglInit=!1,j.deleteTexture(a.__webglTexture),M.info.memory.textures--};this.updateShadowMap=
+function(a,b){l(a,b)};this.render=function(a,b,c,d){var e,g,m,n,q=a.lights,t=a.fog;Q=-1;this.autoUpdateObjects&&this.initWebGLObjects(a);this.shadowMapEnabled&&this.shadowMapAutoUpdate&&l(a,b);M.info.render.calls=0;M.info.render.vertices=0;M.info.render.faces=0;b.parent===void 0&&(console.warn("DEPRECATED: Camera hasn't been added to a Scene. Adding it..."),a.add(b));this.autoUpdateScene&&a.updateMatrixWorld();b.matrixWorldInverse.getInverse(b.matrixWorld);b.matrixWorldInverse.flattenToArray($);b.projectionMatrix.flattenToArray(H);
+Z.multiply(b.projectionMatrix,b.matrixWorldInverse);f(Z);B(c);(this.autoClear||d)&&this.clear(this.autoClearColor,this.autoClearDepth,this.autoClearStencil);n=a.__webglObjects;d=0;for(e=n.length;d<e;d++)if(g=n[d],m=g.object,g.render=!1,m.visible&&(!(m instanceof THREE.Mesh)||!m.frustumCulled||h(m))){m.matrixWorld.flattenToArray(m._objectMatrixArray);s(m,b,!0);var o=g,A=o.object,u=o.buffer,F=void 0,F=F=void 0,F=A.material;if(F instanceof THREE.MeshFaceMaterial){if(F=u.materialIndex,F>=0)F=A.geometry.materials[F],
+F.transparent?(o.transparent=F,o.opaque=null):(o.opaque=F,o.transparent=null)}else if(F)F.transparent?(o.transparent=F,o.opaque=null):(o.opaque=F,o.transparent=null);g.render=!0;if(this.sortObjects)m.renderDepth?g.z=m.renderDepth:(ca.copy(m.position),Z.multiplyVector3(ca),g.z=ca.z)}this.sortObjects&&n.sort(i);n=a.__webglObjectsImmediate;d=0;for(e=n.length;d<e;d++)if(g=n[d],m=g.object,m.visible)m.matrixAutoUpdate&&m.matrixWorld.flattenToArray(m._objectMatrixArray),s(m,b,!0),m=g.object.material,m.transparent?
+(g.transparent=m,g.opaque=null):(g.opaque=m,g.transparent=null);a.overrideMaterial?(G(a.overrideMaterial.blending),r(a.overrideMaterial.depthTest),z(a.overrideMaterial.depthWrite),E(a.overrideMaterial.polygonOffset,a.overrideMaterial.polygonOffsetFactor,a.overrideMaterial.polygonOffsetUnits),k(a.__webglObjects,!1,"",b,q,t,!0,a.overrideMaterial),p(a.__webglObjectsImmediate,"",b,q,t,!1,a.overrideMaterial)):(G(THREE.NormalBlending),k(a.__webglObjects,!0,"opaque",b,q,t,!1),p(a.__webglObjectsImmediate,
+"opaque",b,q,t,!1),k(a.__webglObjects,!1,"transparent",b,q,t,!0),p(a.__webglObjectsImmediate,"transparent",b,q,t,!0));if(a.__webglSprites.length){m=N.attributes;q=N.uniforms;t=R/xa;d=[];e=xa*0.5;n=R*0.5;g=!0;j.useProgram(N.program);ha=N.program;K=na=pa=-1;ua||(j.enableVertexAttribArray(N.attributes.position),j.enableVertexAttribArray(N.attributes.uv),ua=!0);j.disable(j.CULL_FACE);j.enable(j.BLEND);j.depthMask(!0);j.bindBuffer(j.ARRAY_BUFFER,N.vertexBuffer);j.vertexAttribPointer(m.position,2,j.FLOAT,
+!1,16,0);j.vertexAttribPointer(m.uv,2,j.FLOAT,!1,16,8);j.bindBuffer(j.ELEMENT_ARRAY_BUFFER,N.elementBuffer);j.uniformMatrix4fv(q.projectionMatrix,!1,H);j.activeTexture(j.TEXTURE0);j.uniform1i(q.map,0);m=0;for(o=a.__webglSprites.length;m<o;m++)if(A=a.__webglSprites[m],A.visible&&A.opacity!==0)A.useScreenCoordinates?A.z=-A.position.z:(A._modelViewMatrix.multiplyToArray(b.matrixWorldInverse,A.matrixWorld,A._modelViewMatrixArray),A.z=-A._modelViewMatrix.n34);a.__webglSprites.sort(i);m=0;for(o=a.__webglSprites.length;m<
+o;m++)A=a.__webglSprites[m],A.visible&&A.opacity!==0&&A.map&&A.map.image&&A.map.image.width&&(A.useScreenCoordinates?(j.uniform1i(q.useScreenCoordinates,1),j.uniform3f(q.screenPosition,(A.position.x-e)/e,(n-A.position.y)/n,Math.max(0,Math.min(1,A.position.z)))):(j.uniform1i(q.useScreenCoordinates,0),j.uniform1i(q.affectedByDistance,A.affectedByDistance?1:0),j.uniformMatrix4fv(q.modelViewMatrix,!1,A._modelViewMatrixArray)),b=A.map.image.width/(A.scaleByViewport?R:1),d[0]=b*t*A.scale.x,d[1]=b*A.scale.y,
+j.uniform2f(q.uvScale,A.uvScale.x,A.uvScale.y),j.uniform2f(q.uvOffset,A.uvOffset.x,A.uvOffset.y),j.uniform2f(q.alignment,A.alignment.x,A.alignment.y),j.uniform1f(q.opacity,A.opacity),j.uniform3f(q.color,A.color.r,A.color.g,A.color.b),j.uniform1f(q.rotation,A.rotation),j.uniform2fv(q.scale,d),A.mergeWith3D&&!g?(j.enable(j.DEPTH_TEST),g=!0):!A.mergeWith3D&&g&&(j.disable(j.DEPTH_TEST),g=!1),G(A.blending),C(A.map,0),j.drawElements(j.TRIANGLES,6,j.UNSIGNED_SHORT,0));j.enable(j.CULL_FACE);j.enable(j.DEPTH_TEST);
+j.depthMask(ka)}c&&c.minFilter!==THREE.NearestFilter&&c.minFilter!==THREE.LinearFilter&&(c instanceof THREE.WebGLRenderTargetCube?(j.bindTexture(j.TEXTURE_CUBE_MAP,c.__webglTexture),j.generateMipmap(j.TEXTURE_CUBE_MAP),j.bindTexture(j.TEXTURE_CUBE_MAP,null)):(j.bindTexture(j.TEXTURE_2D,c.__webglTexture),j.generateMipmap(j.TEXTURE_2D),j.bindTexture(j.TEXTURE_2D,null)))};this.initWebGLObjects=function(a){if(!a.__webglObjects)a.__webglObjects=[],a.__webglObjectsImmediate=[],a.__webglSprites=[];for(;a.__objectsAdded.length;){var e=
+a.__objectsAdded[0],g=a,f=void 0,h=void 0,i=void 0;if(!e.__webglInit)if(e.__webglInit=!0,e._modelViewMatrix=new THREE.Matrix4,e._normalMatrixArray=new Float32Array(9),e._modelViewMatrixArray=new Float32Array(16),e._objectMatrixArray=new Float32Array(16),e.matrixWorld.flattenToArray(e._objectMatrixArray),e instanceof THREE.Mesh){h=e.geometry;if(h.geometryGroups===void 0){var i=h,k=void 0,l=void 0,p=void 0,R=void 0,o=void 0,A=void 0,Z=void 0,s={},u=i.morphTargets.length;i.geometryGroups={};k=0;for(l=
+i.faces.length;k<l;k++)p=i.faces[k],R=p.materialIndex,A=R!==void 0?R:-1,s[A]===void 0&&(s[A]={hash:A,counter:0}),Z=s[A].hash+"_"+s[A].counter,i.geometryGroups[Z]===void 0&&(i.geometryGroups[Z]={faces3:[],faces4:[],materialIndex:R,vertices:0,numMorphTargets:u}),o=p instanceof THREE.Face3?3:4,i.geometryGroups[Z].vertices+o>65535&&(s[A].counter+=1,Z=s[A].hash+"_"+s[A].counter,i.geometryGroups[Z]===void 0&&(i.geometryGroups[Z]={faces3:[],faces4:[],materialIndex:R,vertices:0,numMorphTargets:u})),p instanceof
+THREE.Face3?i.geometryGroups[Z].faces3.push(k):i.geometryGroups[Z].faces4.push(k),i.geometryGroups[Z].vertices+=o;i.geometryGroupsList=[];k=void 0;for(k in i.geometryGroups)i.geometryGroups[k].id=fa++,i.geometryGroupsList.push(i.geometryGroups[k])}for(f in h.geometryGroups)if(i=h.geometryGroups[f],!i.__webglVertexBuffer){k=i;k.__webglVertexBuffer=j.createBuffer();k.__webglNormalBuffer=j.createBuffer();k.__webglTangentBuffer=j.createBuffer();k.__webglColorBuffer=j.createBuffer();k.__webglUVBuffer=
+j.createBuffer();k.__webglUV2Buffer=j.createBuffer();k.__webglSkinVertexABuffer=j.createBuffer();k.__webglSkinVertexBBuffer=j.createBuffer();k.__webglSkinIndicesBuffer=j.createBuffer();k.__webglSkinWeightsBuffer=j.createBuffer();k.__webglFaceBuffer=j.createBuffer();k.__webglLineBuffer=j.createBuffer();if(k.numMorphTargets){p=l=void 0;k.__webglMorphTargetsBuffers=[];l=0;for(p=k.numMorphTargets;l<p;l++)k.__webglMorphTargetsBuffers.push(j.createBuffer())}M.info.memory.geometries++;R=e;o=R.geometry;l=
+i.faces3;A=i.faces4;k=l.length*3+A.length*4;p=l.length*1+A.length*2;A=l.length*3+A.length*4;l=b(R,i);Z=l.map||l.lightMap||l instanceof THREE.ShaderMaterial?!0:!1;s=l instanceof THREE.MeshBasicMaterial&&!l.envMap||l instanceof THREE.MeshDepthMaterial?!1:l&&l.shading!==void 0&&l.shading===THREE.SmoothShading?THREE.SmoothShading:THREE.FlatShading;u=l.vertexColors?l.vertexColors:!1;i.__vertexArray=new Float32Array(k*3);if(s)i.__normalArray=new Float32Array(k*3);if(o.hasTangents)i.__tangentArray=new Float32Array(k*
+4);if(u)i.__colorArray=new Float32Array(k*3);if(Z){if(o.faceUvs.length>0||o.faceVertexUvs.length>0)i.__uvArray=new Float32Array(k*2);if(o.faceUvs.length>1||o.faceVertexUvs.length>1)i.__uv2Array=new Float32Array(k*2)}if(R.geometry.skinWeights.length&&R.geometry.skinIndices.length)i.__skinVertexAArray=new Float32Array(k*4),i.__skinVertexBArray=new Float32Array(k*4),i.__skinIndexArray=new Float32Array(k*4),i.__skinWeightArray=new Float32Array(k*4);i.__faceArray=new Uint16Array(p*3);i.__lineArray=new Uint16Array(A*
+2);if(i.numMorphTargets){i.__morphTargetsArrays=[];R=0;for(o=i.numMorphTargets;R<o;R++)i.__morphTargetsArrays.push(new Float32Array(k*3))}i.__needsSmoothNormals=s===THREE.SmoothShading;i.__uvType=Z;i.__vertexColorType=u;i.__normalType=s;i.__webglFaceCount=p*3;i.__webglLineCount=A*2;if(l.attributes){if(i.__webglCustomAttributesList===void 0)i.__webglCustomAttributesList=[];p=void 0;for(p in l.attributes){var R=l.attributes[p],o={},B;for(B in R)o[B]=R[B];if(!o.__webglInitialized||o.createUniqueBuffers)o.__webglInitialized=
+!0,A=1,o.type==="v2"?A=2:o.type==="v3"?A=3:o.type==="v4"?A=4:o.type==="c"&&(A=3),o.size=A,o.array=new Float32Array(k*A),o.buffer=j.createBuffer(),o.buffer.belongsToAttribute=p,R.needsUpdate=!0,o.__original=R;i.__webglCustomAttributesList.push(o)}}i.__inittedArrays=!0;h.__dirtyVertices=!0;h.__dirtyMorphTargets=!0;h.__dirtyElements=!0;h.__dirtyUvs=!0;h.__dirtyNormals=!0;h.__dirtyTangents=!0;h.__dirtyColors=!0}}else if(e instanceof THREE.Ribbon){if(h=e.geometry,!h.__webglVertexBuffer)i=h,i.__webglVertexBuffer=
+j.createBuffer(),i.__webglColorBuffer=j.createBuffer(),M.info.memory.geometries++,i=h,k=i.vertices.length,i.__vertexArray=new Float32Array(k*3),i.__colorArray=new Float32Array(k*3),i.__webglVertexCount=k,h.__dirtyVertices=!0,h.__dirtyColors=!0}else if(e instanceof THREE.Line){if(h=e.geometry,!h.__webglVertexBuffer)i=h,i.__webglVertexBuffer=j.createBuffer(),i.__webglColorBuffer=j.createBuffer(),M.info.memory.geometries++,i=h,k=e,l=i.vertices.length,i.__vertexArray=new Float32Array(l*3),i.__colorArray=
+new Float32Array(l*3),i.__webglLineCount=l,c(i,k),h.__dirtyVertices=!0,h.__dirtyColors=!0}else if(e instanceof THREE.ParticleSystem&&(h=e.geometry,!h.__webglVertexBuffer))i=h,i.__webglVertexBuffer=j.createBuffer(),i.__webglColorBuffer=j.createBuffer(),M.info.geometries++,i=h,k=e,l=i.vertices.length,i.__vertexArray=new Float32Array(l*3),i.__colorArray=new Float32Array(l*3),i.__sortArray=[],i.__webglParticleCount=l,c(i,k),h.__dirtyVertices=!0,h.__dirtyColors=!0;if(!e.__webglActive){if(e instanceof THREE.Mesh)for(f in h=
+e.geometry,h.geometryGroups)i=h.geometryGroups[f],q(g.__webglObjects,i,e);else e instanceof THREE.Ribbon||e instanceof THREE.Line||e instanceof THREE.ParticleSystem?(h=e.geometry,q(g.__webglObjects,h,e)):THREE.MarchingCubes!==void 0&&e instanceof THREE.MarchingCubes||e.immediateRenderCallback?g.__webglObjectsImmediate.push({object:e,opaque:null,transparent:null}):e instanceof THREE.Sprite&&g.__webglSprites.push(e);e.__webglActive=!0}a.__objectsAdded.splice(0,1)}for(;a.__objectsRemoved.length;){e=
+a.__objectsRemoved[0];g=a;if(e instanceof THREE.Mesh||e instanceof THREE.ParticleSystem||e instanceof THREE.Ribbon||e instanceof THREE.Line)n(g.__webglObjects,e);else if(e instanceof THREE.Sprite){g=g.__webglSprites;f=e;for(h=g.length-1;h>=0;h--)g[h]===f&&g.splice(h,1)}else(e instanceof THREE.MarchingCubes||e.immediateRenderCallback)&&n(g.__webglObjectsImmediate,e);e.__webglActive=!1;a.__objectsRemoved.splice(0,1)}e=0;for(g=a.__webglObjects.length;e<g;e++)if(B=a.__webglObjects[e].object,f=B.geometry,
+h=p=l=void 0,B instanceof THREE.Mesh){i=0;for(k=f.geometryGroupsList.length;i<k;i++)if(l=f.geometryGroupsList[i],h=b(B,l),p=h.attributes&&m(h),f.__dirtyVertices||f.__dirtyMorphTargets||f.__dirtyElements||f.__dirtyUvs||f.__dirtyNormals||f.__dirtyColors||f.__dirtyTangents||p)if(p=j.DYNAMIC_DRAW,R=!f.dynamic,l.__inittedArrays){var F=A=o=void 0,r=void 0,L=void 0,z=void 0,H=void 0,J=void 0,I=void 0,O=void 0,G=void 0,C=F=z=void 0,x=void 0,w=void 0,v=void 0,E=r=void 0,$=void 0,ca=r=I=G=void 0,N=void 0,T=
+v=w=x=H=void 0,S=r=v=w=x=T=v=w=x=T=v=w=x=void 0,aa=void 0,W=z=void 0,X=void 0,Q=void 0,ea=void 0,V=void 0,K=C=Q=aa=0,ba=0,U=S=F=0,P=H=E=0,D=0,ga=void 0,P=l.__vertexArray,X=l.__uvArray,D=l.__uv2Array,W=l.__normalArray,L=l.__tangentArray,$=l.__colorArray,ca=l.__skinVertexAArray,N=l.__skinVertexBArray,J=l.__skinIndexArray,Y=l.__skinWeightArray,T=l.__morphTargetsArrays,Z=l.__webglCustomAttributesList,y=void 0,y=l.__faceArray,ga=l.__lineArray,ha=l.__needsSmoothNormals,G=l.__vertexColorType,O=l.__uvType,
+z=l.__normalType,I=B.geometry,ia=I.__dirtyElements,va=I.__dirtyUvs,pa=I.__dirtyNormals,ta=I.__dirtyTangents,na=I.__dirtyColors,ea=I.__dirtyMorphTargets,V=I.vertices,s=l.faces3,u=l.faces4,ja=I.faces,ka=I.faceVertexUvs[0],ma=I.faceVertexUvs[1],la=I.skinVerticesA,oa=I.skinVerticesB,ua=I.skinIndices,ra=I.skinWeights,sa=I.morphTargets;if(I.__dirtyVertices){o=0;for(A=s.length;o<A;o++)r=ja[s[o]],x=V[r.a].position,w=V[r.b].position,v=V[r.c].position,P[Q]=x.x,P[Q+1]=x.y,P[Q+2]=x.z,P[Q+3]=w.x,P[Q+4]=w.y,P[Q+
+5]=w.z,P[Q+6]=v.x,P[Q+7]=v.y,P[Q+8]=v.z,Q+=9;o=0;for(A=u.length;o<A;o++)r=ja[u[o]],x=V[r.a].position,w=V[r.b].position,v=V[r.c].position,r=V[r.d].position,P[Q]=x.x,P[Q+1]=x.y,P[Q+2]=x.z,P[Q+3]=w.x,P[Q+4]=w.y,P[Q+5]=w.z,P[Q+6]=v.x,P[Q+7]=v.y,P[Q+8]=v.z,P[Q+9]=r.x,P[Q+10]=r.y,P[Q+11]=r.z,Q+=12;j.bindBuffer(j.ARRAY_BUFFER,l.__webglVertexBuffer);j.bufferData(j.ARRAY_BUFFER,P,p)}if(ea){Q=0;for(ea=sa.length;Q<ea;Q++){o=P=0;for(A=s.length;o<A;o++)r=ja[s[o]],x=sa[Q].vertices[r.a].position,w=sa[Q].vertices[r.b].position,
+v=sa[Q].vertices[r.c].position,V=T[Q],V[P]=x.x,V[P+1]=x.y,V[P+2]=x.z,V[P+3]=w.x,V[P+4]=w.y,V[P+5]=w.z,V[P+6]=v.x,V[P+7]=v.y,V[P+8]=v.z,P+=9;o=0;for(A=u.length;o<A;o++)r=ja[u[o]],x=sa[Q].vertices[r.a].position,w=sa[Q].vertices[r.b].position,v=sa[Q].vertices[r.c].position,r=sa[Q].vertices[r.d].position,V=T[Q],V[P]=x.x,V[P+1]=x.y,V[P+2]=x.z,V[P+3]=w.x,V[P+4]=w.y,V[P+5]=w.z,V[P+6]=v.x,V[P+7]=v.y,V[P+8]=v.z,V[P+9]=r.x,V[P+10]=r.y,V[P+11]=r.z,P+=12;j.bindBuffer(j.ARRAY_BUFFER,l.__webglMorphTargetsBuffers[Q]);
+j.bufferData(j.ARRAY_BUFFER,T[Q],p)}}if(ra.length){o=0;for(A=s.length;o<A;o++)r=ja[s[o]],x=ra[r.a],w=ra[r.b],v=ra[r.c],Y[H]=x.x,Y[H+1]=x.y,Y[H+2]=x.z,Y[H+3]=x.w,Y[H+4]=w.x,Y[H+5]=w.y,Y[H+6]=w.z,Y[H+7]=w.w,Y[H+8]=v.x,Y[H+9]=v.y,Y[H+10]=v.z,Y[H+11]=v.w,x=ua[r.a],w=ua[r.b],v=ua[r.c],J[H]=x.x,J[H+1]=x.y,J[H+2]=x.z,J[H+3]=x.w,J[H+4]=w.x,J[H+5]=w.y,J[H+6]=w.z,J[H+7]=w.w,J[H+8]=v.x,J[H+9]=v.y,J[H+10]=v.z,J[H+11]=v.w,x=la[r.a],w=la[r.b],v=la[r.c],ca[H]=x.x,ca[H+1]=x.y,ca[H+2]=x.z,ca[H+3]=1,ca[H+4]=w.x,ca[H+
+5]=w.y,ca[H+6]=w.z,ca[H+7]=1,ca[H+8]=v.x,ca[H+9]=v.y,ca[H+10]=v.z,ca[H+11]=1,x=oa[r.a],w=oa[r.b],v=oa[r.c],N[H]=x.x,N[H+1]=x.y,N[H+2]=x.z,N[H+3]=1,N[H+4]=w.x,N[H+5]=w.y,N[H+6]=w.z,N[H+7]=1,N[H+8]=v.x,N[H+9]=v.y,N[H+10]=v.z,N[H+11]=1,H+=12;o=0;for(A=u.length;o<A;o++)r=ja[u[o]],x=ra[r.a],w=ra[r.b],v=ra[r.c],T=ra[r.d],Y[H]=x.x,Y[H+1]=x.y,Y[H+2]=x.z,Y[H+3]=x.w,Y[H+4]=w.x,Y[H+5]=w.y,Y[H+6]=w.z,Y[H+7]=w.w,Y[H+8]=v.x,Y[H+9]=v.y,Y[H+10]=v.z,Y[H+11]=v.w,Y[H+12]=T.x,Y[H+13]=T.y,Y[H+14]=T.z,Y[H+15]=T.w,x=ua[r.a],
+w=ua[r.b],v=ua[r.c],T=ua[r.d],J[H]=x.x,J[H+1]=x.y,J[H+2]=x.z,J[H+3]=x.w,J[H+4]=w.x,J[H+5]=w.y,J[H+6]=w.z,J[H+7]=w.w,J[H+8]=v.x,J[H+9]=v.y,J[H+10]=v.z,J[H+11]=v.w,J[H+12]=T.x,J[H+13]=T.y,J[H+14]=T.z,J[H+15]=T.w,x=la[r.a],w=la[r.b],v=la[r.c],T=la[r.d],ca[H]=x.x,ca[H+1]=x.y,ca[H+2]=x.z,ca[H+3]=1,ca[H+4]=w.x,ca[H+5]=w.y,ca[H+6]=w.z,ca[H+7]=1,ca[H+8]=v.x,ca[H+9]=v.y,ca[H+10]=v.z,ca[H+11]=1,ca[H+12]=T.x,ca[H+13]=T.y,ca[H+14]=T.z,ca[H+15]=1,x=oa[r.a],w=oa[r.b],v=oa[r.c],r=oa[r.d],N[H]=x.x,N[H+1]=x.y,N[H+
+2]=x.z,N[H+3]=1,N[H+4]=w.x,N[H+5]=w.y,N[H+6]=w.z,N[H+7]=1,N[H+8]=v.x,N[H+9]=v.y,N[H+10]=v.z,N[H+11]=1,N[H+12]=r.x,N[H+13]=r.y,N[H+14]=r.z,N[H+15]=1,H+=16;H>0&&(j.bindBuffer(j.ARRAY_BUFFER,l.__webglSkinVertexABuffer),j.bufferData(j.ARRAY_BUFFER,ca,p),j.bindBuffer(j.ARRAY_BUFFER,l.__webglSkinVertexBBuffer),j.bufferData(j.ARRAY_BUFFER,N,p),j.bindBuffer(j.ARRAY_BUFFER,l.__webglSkinIndicesBuffer),j.bufferData(j.ARRAY_BUFFER,J,p),j.bindBuffer(j.ARRAY_BUFFER,l.__webglSkinWeightsBuffer),j.bufferData(j.ARRAY_BUFFER,
+Y,p))}if(na&&G){o=0;for(A=s.length;o<A;o++)r=ja[s[o]],H=r.vertexColors,J=r.color,H.length===3&&G===THREE.VertexColors?(r=H[0],ca=H[1],N=H[2]):N=ca=r=J,$[E]=r.r,$[E+1]=r.g,$[E+2]=r.b,$[E+3]=ca.r,$[E+4]=ca.g,$[E+5]=ca.b,$[E+6]=N.r,$[E+7]=N.g,$[E+8]=N.b,E+=9;o=0;for(A=u.length;o<A;o++)r=ja[u[o]],H=r.vertexColors,J=r.color,H.length===4&&G===THREE.VertexColors?(r=H[0],ca=H[1],N=H[2],H=H[3]):H=N=ca=r=J,$[E]=r.r,$[E+1]=r.g,$[E+2]=r.b,$[E+3]=ca.r,$[E+4]=ca.g,$[E+5]=ca.b,$[E+6]=N.r,$[E+7]=N.g,$[E+8]=N.b,$[E+
+9]=H.r,$[E+10]=H.g,$[E+11]=H.b,E+=12;E>0&&(j.bindBuffer(j.ARRAY_BUFFER,l.__webglColorBuffer),j.bufferData(j.ARRAY_BUFFER,$,p))}if(ta&&I.hasTangents){o=0;for(A=s.length;o<A;o++)r=ja[s[o]],I=r.vertexTangents,E=I[0],$=I[1],G=I[2],L[S]=E.x,L[S+1]=E.y,L[S+2]=E.z,L[S+3]=E.w,L[S+4]=$.x,L[S+5]=$.y,L[S+6]=$.z,L[S+7]=$.w,L[S+8]=G.x,L[S+9]=G.y,L[S+10]=G.z,L[S+11]=G.w,S+=12;o=0;for(A=u.length;o<A;o++)r=ja[u[o]],I=r.vertexTangents,E=I[0],$=I[1],G=I[2],I=I[3],L[S]=E.x,L[S+1]=E.y,L[S+2]=E.z,L[S+3]=E.w,L[S+4]=$.x,
+L[S+5]=$.y,L[S+6]=$.z,L[S+7]=$.w,L[S+8]=G.x,L[S+9]=G.y,L[S+10]=G.z,L[S+11]=G.w,L[S+12]=I.x,L[S+13]=I.y,L[S+14]=I.z,L[S+15]=I.w,S+=16;j.bindBuffer(j.ARRAY_BUFFER,l.__webglTangentBuffer);j.bufferData(j.ARRAY_BUFFER,L,p)}if(pa&&z){o=0;for(A=s.length;o<A;o++)if(r=ja[s[o]],L=r.vertexNormals,z=r.normal,L.length===3&&ha)for(S=0;S<3;S++)z=L[S],W[F]=z.x,W[F+1]=z.y,W[F+2]=z.z,F+=3;else for(S=0;S<3;S++)W[F]=z.x,W[F+1]=z.y,W[F+2]=z.z,F+=3;o=0;for(A=u.length;o<A;o++)if(r=ja[u[o]],L=r.vertexNormals,z=r.normal,
+L.length===4&&ha)for(S=0;S<4;S++)z=L[S],W[F]=z.x,W[F+1]=z.y,W[F+2]=z.z,F+=3;else for(S=0;S<4;S++)W[F]=z.x,W[F+1]=z.y,W[F+2]=z.z,F+=3;j.bindBuffer(j.ARRAY_BUFFER,l.__webglNormalBuffer);j.bufferData(j.ARRAY_BUFFER,W,p)}if(va&&ka&&O){o=0;for(A=s.length;o<A;o++)if(F=s[o],F=ka[F],F!==void 0)for(S=0;S<3;S++)W=F[S],X[C]=W.u,X[C+1]=W.v,C+=2;o=0;for(A=u.length;o<A;o++)if(F=u[o],F=ka[F],F!==void 0)for(S=0;S<4;S++)W=F[S],X[C]=W.u,X[C+1]=W.v,C+=2;C>0&&(j.bindBuffer(j.ARRAY_BUFFER,l.__webglUVBuffer),j.bufferData(j.ARRAY_BUFFER,
+X,p))}if(va&&ma&&O){o=0;for(A=s.length;o<A;o++)if(F=s[o],C=ma[F],C!==void 0)for(S=0;S<3;S++)X=C[S],D[K]=X.u,D[K+1]=X.v,K+=2;o=0;for(A=u.length;o<A;o++)if(F=u[o],C=ma[F],C!==void 0)for(S=0;S<4;S++)X=C[S],D[K]=X.u,D[K+1]=X.v,K+=2;K>0&&(j.bindBuffer(j.ARRAY_BUFFER,l.__webglUV2Buffer),j.bufferData(j.ARRAY_BUFFER,D,p))}if(ia){o=0;for(A=s.length;o<A;o++)y[ba]=aa,y[ba+1]=aa+1,y[ba+2]=aa+2,ba+=3,ga[U]=aa,ga[U+1]=aa+1,ga[U+2]=aa,ga[U+3]=aa+2,ga[U+4]=aa+1,ga[U+5]=aa+2,U+=6,aa+=3;o=0;for(A=u.length;o<A;o++)y[ba]=
+aa,y[ba+1]=aa+1,y[ba+2]=aa+3,y[ba+3]=aa+1,y[ba+4]=aa+2,y[ba+5]=aa+3,ba+=6,ga[U]=aa,ga[U+1]=aa+1,ga[U+2]=aa,ga[U+3]=aa+3,ga[U+4]=aa+1,ga[U+5]=aa+2,ga[U+6]=aa+2,ga[U+7]=aa+3,U+=8,aa+=4;j.bindBuffer(j.ELEMENT_ARRAY_BUFFER,l.__webglFaceBuffer);j.bufferData(j.ELEMENT_ARRAY_BUFFER,y,p);j.bindBuffer(j.ELEMENT_ARRAY_BUFFER,l.__webglLineBuffer);j.bufferData(j.ELEMENT_ARRAY_BUFFER,ga,p)}if(Z){S=0;for(aa=Z.length;S<aa;S++)if(y=Z[S],y.__original.needsUpdate){D=0;if(y.size===1)if(y.boundTo===void 0||y.boundTo===
+"vertices"){o=0;for(A=s.length;o<A;o++)r=ja[s[o]],y.array[D]=y.value[r.a],y.array[D+1]=y.value[r.b],y.array[D+2]=y.value[r.c],D+=3;o=0;for(A=u.length;o<A;o++)r=ja[u[o]],y.array[D]=y.value[r.a],y.array[D+1]=y.value[r.b],y.array[D+2]=y.value[r.c],y.array[D+3]=y.value[r.d],D+=4}else{if(y.boundTo==="faces"){o=0;for(A=s.length;o<A;o++)ga=y.value[s[o]],y.array[D]=ga,y.array[D+1]=ga,y.array[D+2]=ga,D+=3;o=0;for(A=u.length;o<A;o++)ga=y.value[u[o]],y.array[D]=ga,y.array[D+1]=ga,y.array[D+2]=ga,y.array[D+3]=
+ga,D+=4}}else if(y.size===2)if(y.boundTo===void 0||y.boundTo==="vertices"){o=0;for(A=s.length;o<A;o++)r=ja[s[o]],x=y.value[r.a],w=y.value[r.b],v=y.value[r.c],y.array[D]=x.x,y.array[D+1]=x.y,y.array[D+2]=w.x,y.array[D+3]=w.y,y.array[D+4]=v.x,y.array[D+5]=v.y,D+=6;o=0;for(A=u.length;o<A;o++)r=ja[u[o]],x=y.value[r.a],w=y.value[r.b],v=y.value[r.c],r=y.value[r.d],y.array[D]=x.x,y.array[D+1]=x.y,y.array[D+2]=w.x,y.array[D+3]=w.y,y.array[D+4]=v.x,y.array[D+5]=v.y,y.array[D+6]=r.x,y.array[D+7]=r.y,D+=8}else{if(y.boundTo===
+"faces"){o=0;for(A=s.length;o<A;o++)v=w=x=ga=y.value[s[o]],y.array[D]=x.x,y.array[D+1]=x.y,y.array[D+2]=w.x,y.array[D+3]=w.y,y.array[D+4]=v.x,y.array[D+5]=v.y,D+=6;o=0;for(A=u.length;o<A;o++)r=v=w=x=ga=y.value[u[o]],y.array[D]=x.x,y.array[D+1]=x.y,y.array[D+2]=w.x,y.array[D+3]=w.y,y.array[D+4]=v.x,y.array[D+5]=v.y,y.array[D+6]=r.x,y.array[D+7]=r.y,D+=8}}else if(y.size===3)if(K=y.type==="c"?["r","g","b"]:["x","y","z"],y.boundTo===void 0||y.boundTo==="vertices"){o=0;for(A=s.length;o<A;o++)r=ja[s[o]],
+x=y.value[r.a],w=y.value[r.b],v=y.value[r.c],y.array[D]=x[K[0]],y.array[D+1]=x[K[1]],y.array[D+2]=x[K[2]],y.array[D+3]=w[K[0]],y.array[D+4]=w[K[1]],y.array[D+5]=w[K[2]],y.array[D+6]=v[K[0]],y.array[D+7]=v[K[1]],y.array[D+8]=v[K[2]],D+=9;o=0;for(A=u.length;o<A;o++)r=ja[u[o]],x=y.value[r.a],w=y.value[r.b],v=y.value[r.c],r=y.value[r.d],y.array[D]=x[K[0]],y.array[D+1]=x[K[1]],y.array[D+2]=x[K[2]],y.array[D+3]=w[K[0]],y.array[D+4]=w[K[1]],y.array[D+5]=w[K[2]],y.array[D+6]=v[K[0]],y.array[D+7]=v[K[1]],
+y.array[D+8]=v[K[2]],y.array[D+9]=r[K[0]],y.array[D+10]=r[K[1]],y.array[D+11]=r[K[2]],D+=12}else{if(y.boundTo==="faces"){o=0;for(A=s.length;o<A;o++)v=w=x=ga=y.value[s[o]],y.array[D]=x[K[0]],y.array[D+1]=x[K[1]],y.array[D+2]=x[K[2]],y.array[D+3]=w[K[0]],y.array[D+4]=w[K[1]],y.array[D+5]=w[K[2]],y.array[D+6]=v[K[0]],y.array[D+7]=v[K[1]],y.array[D+8]=v[K[2]],D+=9;o=0;for(A=u.length;o<A;o++)r=v=w=x=ga=y.value[u[o]],y.array[D]=x[K[0]],y.array[D+1]=x[K[1]],y.array[D+2]=x[K[2]],y.array[D+3]=w[K[0]],y.array[D+
+4]=w[K[1]],y.array[D+5]=w[K[2]],y.array[D+6]=v[K[0]],y.array[D+7]=v[K[1]],y.array[D+8]=v[K[2]],y.array[D+9]=r[K[0]],y.array[D+10]=r[K[1]],y.array[D+11]=r[K[2]],D+=12}}else if(y.size===4)if(y.boundTo===void 0||y.boundTo==="vertices"){o=0;for(A=s.length;o<A;o++)r=ja[s[o]],x=y.value[r.a],w=y.value[r.b],v=y.value[r.c],y.array[D]=x.x,y.array[D+1]=x.y,y.array[D+2]=x.z,y.array[D+3]=x.w,y.array[D+4]=w.x,y.array[D+5]=w.y,y.array[D+6]=w.z,y.array[D+7]=w.w,y.array[D+8]=v.x,y.array[D+9]=v.y,y.array[D+10]=v.z,
+y.array[D+11]=v.w,D+=12;o=0;for(A=u.length;o<A;o++)r=ja[u[o]],x=y.value[r.a],w=y.value[r.b],v=y.value[r.c],r=y.value[r.d],y.array[D]=x.x,y.array[D+1]=x.y,y.array[D+2]=x.z,y.array[D+3]=x.w,y.array[D+4]=w.x,y.array[D+5]=w.y,y.array[D+6]=w.z,y.array[D+7]=w.w,y.array[D+8]=v.x,y.array[D+9]=v.y,y.array[D+10]=v.z,y.array[D+11]=v.w,y.array[D+12]=r.x,y.array[D+13]=r.y,y.array[D+14]=r.z,y.array[D+15]=r.w,D+=16}else if(y.boundTo==="faces"){o=0;for(A=s.length;o<A;o++)v=w=x=ga=y.value[s[o]],y.array[D]=x.x,y.array[D+
+1]=x.y,y.array[D+2]=x.z,y.array[D+3]=x.w,y.array[D+4]=w.x,y.array[D+5]=w.y,y.array[D+6]=w.z,y.array[D+7]=w.w,y.array[D+8]=v.x,y.array[D+9]=v.y,y.array[D+10]=v.z,y.array[D+11]=v.w,D+=12;o=0;for(A=u.length;o<A;o++)r=v=w=x=ga=y.value[u[o]],y.array[D]=x.x,y.array[D+1]=x.y,y.array[D+2]=x.z,y.array[D+3]=x.w,y.array[D+4]=w.x,y.array[D+5]=w.y,y.array[D+6]=w.z,y.array[D+7]=w.w,y.array[D+8]=v.x,y.array[D+9]=v.y,y.array[D+10]=v.z,y.array[D+11]=v.w,y.array[D+12]=r.x,y.array[D+13]=r.y,y.array[D+14]=r.z,y.array[D+
+15]=r.w,D+=16}j.bindBuffer(j.ARRAY_BUFFER,y.buffer);j.bufferData(j.ARRAY_BUFFER,y.array,p)}}R&&(delete l.__inittedArrays,delete l.__colorArray,delete l.__normalArray,delete l.__tangentArray,delete l.__uvArray,delete l.__uv2Array,delete l.__faceArray,delete l.__vertexArray,delete l.__lineArray,delete l.__skinVertexAArray,delete l.__skinVertexBArray,delete l.__skinIndexArray,delete l.__skinWeightArray)}f.__dirtyVertices=!1;f.__dirtyMorphTargets=!1;f.__dirtyElements=!1;f.__dirtyUvs=!1;f.__dirtyNormals=
+!1;f.__dirtyColors=!1;f.__dirtyTangents=!1;h.attributes&&t(h)}else if(B instanceof THREE.Ribbon){if(f.__dirtyVertices||f.__dirtyColors){h=f;B=j.DYNAMIC_DRAW;o=i=o=R=R=void 0;A=h.vertices;k=h.colors;Z=A.length;l=k.length;s=h.__vertexArray;p=h.__colorArray;u=h.__dirtyColors;if(h.__dirtyVertices){for(R=0;R<Z;R++)o=A[R].position,i=R*3,s[i]=o.x,s[i+1]=o.y,s[i+2]=o.z;j.bindBuffer(j.ARRAY_BUFFER,h.__webglVertexBuffer);j.bufferData(j.ARRAY_BUFFER,s,B)}if(u){for(R=0;R<l;R++)o=k[R],i=R*3,p[i]=o.r,p[i+1]=o.g,
+p[i+2]=o.b;j.bindBuffer(j.ARRAY_BUFFER,h.__webglColorBuffer);j.bufferData(j.ARRAY_BUFFER,p,B)}}f.__dirtyVertices=!1;f.__dirtyColors=!1}else if(B instanceof THREE.Line){h=b(B,l);p=h.attributes&&m(h);if(f.__dirtyVertices||f.__dirtyColors||p){B=f;i=j.DYNAMIC_DRAW;Z=k=aa=A=ja=void 0;A=B.vertices;l=B.colors;Z=A.length;p=l.length;s=B.__vertexArray;R=B.__colorArray;u=B.__dirtyColors;o=B.__webglCustomAttributesList;C=U=ba=K=aa=ja=void 0;if(B.__dirtyVertices){for(ja=0;ja<Z;ja++)aa=A[ja].position,k=ja*3,s[k]=
+aa.x,s[k+1]=aa.y,s[k+2]=aa.z;j.bindBuffer(j.ARRAY_BUFFER,B.__webglVertexBuffer);j.bufferData(j.ARRAY_BUFFER,s,i)}if(u){for(A=0;A<p;A++)Z=l[A],k=A*3,R[k]=Z.r,R[k+1]=Z.g,R[k+2]=Z.b;j.bindBuffer(j.ARRAY_BUFFER,B.__webglColorBuffer);j.bufferData(j.ARRAY_BUFFER,R,i)}if(o){ja=0;for(aa=o.length;ja<aa;ja++)if(C=o[ja],C.needsUpdate&&(C.boundTo===void 0||C.boundTo==="vertices")){k=0;ba=C.value.length;if(C.size===1)for(K=0;K<ba;K++)C.array[K]=C.value[K];else if(C.size===2)for(K=0;K<ba;K++)U=C.value[K],C.array[k]=
+U.x,C.array[k+1]=U.y,k+=2;else if(C.size===3)if(C.type==="c")for(K=0;K<ba;K++)U=C.value[K],C.array[k]=U.r,C.array[k+1]=U.g,C.array[k+2]=U.b,k+=3;else for(K=0;K<ba;K++)U=C.value[K],C.array[k]=U.x,C.array[k+1]=U.y,C.array[k+2]=U.z,k+=3;else if(C.size===4)for(K=0;K<ba;K++)U=C.value[K],C.array[k]=U.x,C.array[k+1]=U.y,C.array[k+2]=U.z,C.array[k+3]=U.w,k+=4;j.bindBuffer(j.ARRAY_BUFFER,C.buffer);j.bufferData(j.ARRAY_BUFFER,C.array,i)}}}f.__dirtyVertices=!1;f.__dirtyColors=!1;h.attributes&&t(h)}else if(B instanceof
+THREE.ParticleSystem)h=b(B,l),p=h.attributes&&m(h),(f.__dirtyVertices||f.__dirtyColors||B.sortParticles||p)&&d(f,j.DYNAMIC_DRAW,B),f.__dirtyVertices=!1,f.__dirtyColors=!1,h.attributes&&t(h)};this.initMaterial=function(a,b,c,d){var e,g,f,h;a instanceof THREE.MeshDepthMaterial?h="depth":a instanceof THREE.MeshNormalMaterial?h="normal":a instanceof THREE.MeshBasicMaterial?h="basic":a instanceof THREE.MeshLambertMaterial?h="lambert":a instanceof THREE.MeshPhongMaterial?h="phong":a instanceof THREE.LineBasicMaterial?
+h="basic":a instanceof THREE.ParticleBasicMaterial&&(h="particle_basic");if(h){var i=THREE.ShaderLib[h];a.uniforms=THREE.UniformsUtils.clone(i.uniforms);a.vertexShader=i.vertexShader;a.fragmentShader=i.fragmentShader}var k,l,m;k=m=i=0;for(l=b.length;k<l;k++)f=b[k],f instanceof THREE.SpotLight&&m++,f instanceof THREE.DirectionalLight&&m++,f instanceof THREE.PointLight&&i++;i+m<=O?k=m:(k=Math.ceil(O*m/(i+m)),i=O-k);f={directional:k,point:i};i=m=0;for(k=b.length;i<k;i++)l=b[i],l instanceof THREE.SpotLight&&
+l.castShadow&&m++;var n=50;if(d!==void 0&&d instanceof THREE.SkinnedMesh)n=d.bones.length;var o;a:{k=a.fragmentShader;l=a.vertexShader;var i=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,morphTargets:a.morphTargets,maxMorphTargets:this.maxMorphTargets,maxDirLights:f.directional,maxPointLights:f.point,maxBones:n,shadowMapEnabled:this.shadowMapEnabled&&d.receiveShadow,
+shadowMapSoft:this.shadowMapSoft,shadowMapWidth:this.shadowMapWidth,shadowMapHeight:this.shadowMapHeight,maxShadows:m,alphaTest:a.alphaTest,metal:a.metal,perPixel:a.perPixel},p,d=[];h?d.push(h):(d.push(k),d.push(l));for(p in c)d.push(p),d.push(c[p]);h=d.join();p=0;for(d=P.length;p<d;p++)if(P[p].code===h){o=P[p].program;break a}p=j.createProgram();d=[ta?"#define VERTEX_TEXTURES":"",M.gammaInput?"#define GAMMA_INPUT":"",M.gammaOutput?"#define GAMMA_OUTPUT":"",M.physicallyBasedShading?"#define PHYSICALLY_BASED_SHADING":
+"","#define MAX_DIR_LIGHTS "+c.maxDirLights,"#define MAX_POINT_LIGHTS "+c.maxPointLights,"#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.morphTargets?"#define USE_MORPHTARGETS":"",c.perPixel?"#define PHONG_PER_PIXEL":"",c.shadowMapEnabled?"#define USE_SHADOWMAP":"",c.shadowMapSoft?"#define SHADOWMAP_SOFT":
+"",c.sizeAttenuation?"#define USE_SIZEATTENUATION":"","uniform mat4 objectMatrix;\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform mat4 viewMatrix;\nuniform mat3 normalMatrix;\nuniform vec3 cameraPosition;\nuniform mat4 cameraInverseMatrix;\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;\nattribute vec3 morphTarget4;\nattribute vec3 morphTarget5;\nattribute vec3 morphTarget6;\nattribute vec3 morphTarget7;\n#endif\n#ifdef USE_SKINNING\nattribute vec4 skinVertexA;\nattribute vec4 skinVertexB;\nattribute vec4 skinIndex;\nattribute vec4 skinWeight;\n#endif\n"].join("\n");
 f=["#ifdef GL_ES","precision "+X+" float;","#endif","#define MAX_DIR_LIGHTS "+c.maxDirLights,"#define MAX_POINT_LIGHTS "+c.maxPointLights,"#define MAX_SHADOWS "+c.maxShadows,c.alphaTest?"#define ALPHATEST "+c.alphaTest:"",M.gammaInput?"#define GAMMA_INPUT":"",M.gammaOutput?"#define GAMMA_OUTPUT":"",M.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":"",c.envMap?"#define USE_ENVMAP":
 f=["#ifdef GL_ES","precision "+X+" float;","#endif","#define MAX_DIR_LIGHTS "+c.maxDirLights,"#define MAX_POINT_LIGHTS "+c.maxPointLights,"#define MAX_SHADOWS "+c.maxShadows,c.alphaTest?"#define ALPHATEST "+c.alphaTest:"",M.gammaInput?"#define GAMMA_INPUT":"",M.gammaOutput?"#define GAMMA_OUTPUT":"",M.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":"",c.envMap?"#define USE_ENVMAP":
 "",c.lightMap?"#define USE_LIGHTMAP":"",c.vertexColors?"#define USE_COLOR":"",c.metal?"#define METAL":"",c.perPixel?"#define PHONG_PER_PIXEL":"",c.shadowMapEnabled?"#define USE_SHADOWMAP":"",c.shadowMapSoft?"#define SHADOWMAP_SOFT":"",c.shadowMapSoft?"#define SHADOWMAP_WIDTH "+c.shadowMapWidth.toFixed(1):"",c.shadowMapSoft?"#define SHADOWMAP_HEIGHT "+c.shadowMapHeight.toFixed(1):"","uniform mat4 viewMatrix;\nuniform vec3 cameraPosition;\n"].join("\n");j.attachShader(p,v("fragment",f+k));j.attachShader(p,
 "",c.lightMap?"#define USE_LIGHTMAP":"",c.vertexColors?"#define USE_COLOR":"",c.metal?"#define METAL":"",c.perPixel?"#define PHONG_PER_PIXEL":"",c.shadowMapEnabled?"#define USE_SHADOWMAP":"",c.shadowMapSoft?"#define SHADOWMAP_SOFT":"",c.shadowMapSoft?"#define SHADOWMAP_WIDTH "+c.shadowMapWidth.toFixed(1):"",c.shadowMapSoft?"#define SHADOWMAP_HEIGHT "+c.shadowMapHeight.toFixed(1):"","uniform mat4 viewMatrix;\nuniform vec3 cameraPosition;\n"].join("\n");j.attachShader(p,v("fragment",f+k));j.attachShader(p,
 v("vertex",d+l));j.linkProgram(p);j.getProgramParameter(p,j.LINK_STATUS)||console.error("Could not initialise shader\nVALIDATE_STATUS: "+j.getProgramParameter(p,j.VALIDATE_STATUS)+", gl error ["+j.getError()+"]");p.uniforms={};p.attributes={};var q,d=["viewMatrix","modelViewMatrix","projectionMatrix","normalMatrix","objectMatrix","cameraPosition","cameraInverseMatrix","boneGlobalMatrices","morphTargetInfluences"];for(q in i)d.push(q);q=d;d=0;for(i=q.length;d<i;d++)k=q[d],p.uniforms[k]=j.getUniformLocation(p,
 v("vertex",d+l));j.linkProgram(p);j.getProgramParameter(p,j.LINK_STATUS)||console.error("Could not initialise shader\nVALIDATE_STATUS: "+j.getProgramParameter(p,j.VALIDATE_STATUS)+", gl error ["+j.getError()+"]");p.uniforms={};p.attributes={};var q,d=["viewMatrix","modelViewMatrix","projectionMatrix","normalMatrix","objectMatrix","cameraPosition","cameraInverseMatrix","boneGlobalMatrices","morphTargetInfluences"];for(q in i)d.push(q);q=d;d=0;for(i=q.length;d<i;d++)k=q[d],p.uniforms[k]=j.getUniformLocation(p,

+ 83 - 83
build/custom/ThreeWebGL.js

@@ -207,89 +207,89 @@ e.combine,h.useRefract.value=e.envMap&&e.envMap.mapping instanceof THREE.CubeRef
 (h.ambient.value=e.ambient,h.specular.value=e.specular);else if(e instanceof THREE.MeshLambertMaterial)D.gammaInput?h.ambient.value.copyGammaToLinear(e.ambient):h.ambient.value=e.ambient;else if(e instanceof THREE.MeshDepthMaterial)h.mNear.value=a.near,h.mFar.value=a.far,h.opacity.value=e.opacity;else if(e instanceof THREE.MeshNormalMaterial)h.opacity.value=e.opacity;if(f.receiveShadow&&!e._shadowPass&&h.shadowMatrix){for(b=0;b<Ja.length;b++)h.shadowMatrix.value[b]=Ja[b],h.shadowMap.texture[b]=D.shadowMap[b];
 (h.ambient.value=e.ambient,h.specular.value=e.specular);else if(e instanceof THREE.MeshLambertMaterial)D.gammaInput?h.ambient.value.copyGammaToLinear(e.ambient):h.ambient.value=e.ambient;else if(e instanceof THREE.MeshDepthMaterial)h.mNear.value=a.near,h.mFar.value=a.far,h.opacity.value=e.opacity;else if(e instanceof THREE.MeshNormalMaterial)h.opacity.value=e.opacity;if(f.receiveShadow&&!e._shadowPass&&h.shadowMatrix){for(b=0;b<Ja.length;b++)h.shadowMatrix.value[b]=Ja[b],h.shadowMap.texture[b]=D.shadowMap[b];
 h.shadowDarkness.value=D.shadowMapDarkness;h.shadowBias.value=D.shadowMapBias}b=e.uniformsList;h=0;for(c=b.length;h<c;h++)if(n=g.uniforms[b[h][1]])if(m=b[h][0],x=m.type,l=m.value,x==="i")d.uniform1i(n,l);else if(x==="f")d.uniform1f(n,l);else if(x==="v2")d.uniform2f(n,l.x,l.y);else if(x==="v3")d.uniform3f(n,l.x,l.y,l.z);else if(x==="v4")d.uniform4f(n,l.x,l.y,l.z,l.w);else if(x==="c")d.uniform3f(n,l.r,l.g,l.b);else if(x==="fv1")d.uniform1fv(n,l);else if(x==="fv")d.uniform3fv(n,l);else if(x==="v3v"){if(!m._array)m._array=
 h.shadowDarkness.value=D.shadowMapDarkness;h.shadowBias.value=D.shadowMapBias}b=e.uniformsList;h=0;for(c=b.length;h<c;h++)if(n=g.uniforms[b[h][1]])if(m=b[h][0],x=m.type,l=m.value,x==="i")d.uniform1i(n,l);else if(x==="f")d.uniform1f(n,l);else if(x==="v2")d.uniform2f(n,l.x,l.y);else if(x==="v3")d.uniform3f(n,l.x,l.y,l.z);else if(x==="v4")d.uniform4f(n,l.x,l.y,l.z,l.w);else if(x==="c")d.uniform3f(n,l.r,l.g,l.b);else if(x==="fv1")d.uniform1fv(n,l);else if(x==="fv")d.uniform3fv(n,l);else if(x==="v3v"){if(!m._array)m._array=
 new Float32Array(3*l.length);x=0;for(r=l.length;x<r;x++)s=x*3,m._array[s]=l[x].x,m._array[s+1]=l[x].y,m._array[s+2]=l[x].z;d.uniform3fv(n,m._array)}else if(x==="m4"){if(!m._array)m._array=new Float32Array(16);l.flattenToArray(m._array);d.uniformMatrix4fv(n,!1,m._array)}else if(x==="m4v"){if(!m._array)m._array=new Float32Array(16*l.length);x=0;for(r=l.length;x<r;x++)l[x].flattenToArrayOffset(m._array,x*16);d.uniformMatrix4fv(n,!1,m._array)}else if(x==="t"){if(d.uniform1i(n,l),n=m.texture)if(n.image instanceof
 new Float32Array(3*l.length);x=0;for(r=l.length;x<r;x++)s=x*3,m._array[s]=l[x].x,m._array[s+1]=l[x].y,m._array[s+2]=l[x].z;d.uniform3fv(n,m._array)}else if(x==="m4"){if(!m._array)m._array=new Float32Array(16);l.flattenToArray(m._array);d.uniformMatrix4fv(n,!1,m._array)}else if(x==="m4v"){if(!m._array)m._array=new Float32Array(16*l.length);x=0;for(r=l.length;x<r;x++)l[x].flattenToArrayOffset(m._array,x*16);d.uniformMatrix4fv(n,!1,m._array)}else if(x==="t"){if(d.uniform1i(n,l),n=m.texture)if(n.image instanceof
-Array&&n.image.length===6){if(m=n,m.image.length===6)if(m.needsUpdate){if(!m.image.__webglTextureCube)m.image.__webglTextureCube=d.createTexture();d.activeTexture(d.TEXTURE0+l);d.bindTexture(d.TEXTURE_CUBE_MAP,m.image.__webglTextureCube);for(l=0;l<6;l++)d.texImage2D(d.TEXTURE_CUBE_MAP_POSITIVE_X+l,0,d.RGBA,d.RGBA,d.UNSIGNED_BYTE,m.image[l]);X(d.TEXTURE_CUBE_MAP,m,m.image[0]);m.needsUpdate=!1}else d.activeTexture(d.TEXTURE0+l),d.bindTexture(d.TEXTURE_CUBE_MAP,m.image.__webglTextureCube)}else n instanceof
-THREE.WebGLRenderTargetCube?(m=n,d.activeTexture(d.TEXTURE0+l),d.bindTexture(d.TEXTURE_CUBE_MAP,m.__webglTexture)):oa(n,l)}else if(x==="tv"){if(!m._array){m._array=[];x=0;for(r=m.texture.length;x<r;x++)m._array[x]=l+x}d.uniform1iv(n,m._array);x=0;for(r=m.texture.length;x<r;x++)(n=m.texture[x])&&oa(n,m._array[x])}(e instanceof THREE.ShaderMaterial||e instanceof THREE.MeshPhongMaterial||e.envMap)&&i.cameraPosition!==null&&d.uniform3f(i.cameraPosition,a.position.x,a.position.y,a.position.z);(e instanceof
-THREE.MeshPhongMaterial||e instanceof THREE.MeshLambertMaterial||e instanceof THREE.ShaderMaterial||e.skinning)&&i.viewMatrix!==null&&d.uniformMatrix4fv(i.viewMatrix,!1,Ka);e.skinning&&(d.uniformMatrix4fv(i.cameraInverseMatrix,!1,Ka),d.uniformMatrix4fv(i.boneGlobalMatrices,!1,f.boneMatrices))}d.uniformMatrix4fv(i.modelViewMatrix,!1,f._modelViewMatrixArray);i.normalMatrix&&d.uniformMatrix3fv(i.normalMatrix,!1,f._normalMatrixArray);(e instanceof THREE.ShaderMaterial||e.envMap||e.skinning||f.receiveShadow)&&
-i.objectMatrix!==null&&d.uniformMatrix4fv(i.objectMatrix,!1,f._objectMatrixArray);return g}function qa(a,b,c){a._modelViewMatrix.multiplyToArray(b.matrixWorldInverse,a.matrixWorld,a._modelViewMatrixArray);c&&THREE.Matrix4.makeInvert3x3(a._modelViewMatrix).transposeIntoArray(a._normalMatrixArray)}function G(a){if(Fa!==a.doubleSided)a.doubleSided?d.disable(d.CULL_FACE):d.enable(d.CULL_FACE),Fa=a.doubleSided;if(Ba!==a.flipSided)a.flipSided?d.frontFace(d.CW):d.frontFace(d.CCW),Ba=a.flipSided}function ia(a){wa!==
-a&&(a?d.enable(d.DEPTH_TEST):d.disable(d.DEPTH_TEST),wa=a)}function ka(a){Oa!==a&&(d.depthMask(a),Oa=a)}function F(a,b,c){Sa!==a&&(a?d.enable(d.POLYGON_OFFSET_FILL):d.disable(d.POLYGON_OFFSET_FILL),Sa=a);if(a&&(Ta!==b||Ua!==c))d.polygonOffset(b,c),Ta=b,Ua=c}function M(a){if(a!==ya){switch(a){case THREE.AdditiveBlending:d.blendEquation(d.FUNC_ADD);d.blendFunc(d.SRC_ALPHA,d.ONE);break;case THREE.SubtractiveBlending:d.blendEquation(d.FUNC_ADD);d.blendFunc(d.ZERO,d.ONE_MINUS_SRC_COLOR);break;case THREE.MultiplyBlending:d.blendEquation(d.FUNC_ADD);
-d.blendFunc(d.ZERO,d.SRC_COLOR);break;default:d.blendEquationSeparate(d.FUNC_ADD,d.FUNC_ADD),d.blendFuncSeparate(d.SRC_ALPHA,d.ONE_MINUS_SRC_ALPHA,d.ONE,d.ONE_MINUS_SRC_ALPHA)}ya=a}}function L(a,b){var c;a==="fragment"?c=d.createShader(d.FRAGMENT_SHADER):a==="vertex"&&(c=d.createShader(d.VERTEX_SHADER));d.shaderSource(c,b);d.compileShader(c);if(!d.getShaderParameter(c,d.COMPILE_STATUS))return console.error(d.getShaderInfoLog(c)),console.error(b),null;return c}function X(a,b,c){(c.width&c.width-1)===
-0&&(c.height&c.height-1)===0?(d.texParameteri(a,d.TEXTURE_WRAP_S,N(b.wrapS)),d.texParameteri(a,d.TEXTURE_WRAP_T,N(b.wrapT)),d.texParameteri(a,d.TEXTURE_MAG_FILTER,N(b.magFilter)),d.texParameteri(a,d.TEXTURE_MIN_FILTER,N(b.minFilter)),d.generateMipmap(a)):(d.texParameteri(a,d.TEXTURE_WRAP_S,d.CLAMP_TO_EDGE),d.texParameteri(a,d.TEXTURE_WRAP_T,d.CLAMP_TO_EDGE),d.texParameteri(a,d.TEXTURE_MAG_FILTER,ta(b.magFilter)),d.texParameteri(a,d.TEXTURE_MIN_FILTER,ta(b.minFilter)))}function oa(a,b){if(a.needsUpdate){if(!a.__webglInit)a.__webglInit=
-!0,a.__webglTexture=d.createTexture(),D.info.memory.textures++;d.activeTexture(d.TEXTURE0+b);d.bindTexture(d.TEXTURE_2D,a.__webglTexture);a instanceof THREE.DataTexture?d.texImage2D(d.TEXTURE_2D,0,N(a.format),a.image.width,a.image.height,0,N(a.format),d.UNSIGNED_BYTE,a.image.data):d.texImage2D(d.TEXTURE_2D,0,d.RGBA,d.RGBA,d.UNSIGNED_BYTE,a.image);X(d.TEXTURE_2D,a,a.image);a.needsUpdate=!1;if(a.onUpdated)a.onUpdated()}else d.activeTexture(d.TEXTURE0+b),d.bindTexture(d.TEXTURE_2D,a.__webglTexture)}
-function P(a,b){d.bindRenderbuffer(d.RENDERBUFFER,a);b.depthBuffer&&!b.stencilBuffer?(d.renderbufferStorage(d.RENDERBUFFER,d.DEPTH_COMPONENT16,b.width,b.height),d.framebufferRenderbuffer(d.FRAMEBUFFER,d.DEPTH_ATTACHMENT,d.RENDERBUFFER,a)):b.depthBuffer&&b.stencilBuffer?(d.renderbufferStorage(d.RENDERBUFFER,d.DEPTH_STENCIL,b.width,b.height),d.framebufferRenderbuffer(d.FRAMEBUFFER,d.DEPTH_STENCIL_ATTACHMENT,d.RENDERBUFFER,a)):d.renderbufferStorage(d.RENDERBUFFER,d.RGBA4,b.width,b.height)}function pa(a){var b=
-a instanceof THREE.WebGLRenderTargetCube;if(a&&!a.__webglFramebuffer){if(a.depthBuffer===void 0)a.depthBuffer=!0;if(a.stencilBuffer===void 0)a.stencilBuffer=!0;a.__webglTexture=d.createTexture();if(b){a.__webglFramebuffer=[];a.__webglRenderbuffer=[];d.bindTexture(d.TEXTURE_CUBE_MAP,a.__webglTexture);X(d.TEXTURE_CUBE_MAP,a,a);for(var c=0;c<6;c++){a.__webglFramebuffer[c]=d.createFramebuffer();a.__webglRenderbuffer[c]=d.createRenderbuffer();d.texImage2D(d.TEXTURE_CUBE_MAP_POSITIVE_X+c,0,N(a.format),
-a.width,a.height,0,N(a.format),N(a.type),null);var e=a,f=d.TEXTURE_CUBE_MAP_POSITIVE_X+c;d.bindFramebuffer(d.FRAMEBUFFER,a.__webglFramebuffer[c]);d.framebufferTexture2D(d.FRAMEBUFFER,d.COLOR_ATTACHMENT0,f,e.__webglTexture,0);P(a.__webglRenderbuffer[c],a)}}else a.__webglFramebuffer=d.createFramebuffer(),a.__webglRenderbuffer=d.createRenderbuffer(),d.bindTexture(d.TEXTURE_2D,a.__webglTexture),X(d.TEXTURE_2D,a,a),d.texImage2D(d.TEXTURE_2D,0,N(a.format),a.width,a.height,0,N(a.format),N(a.type),null),
-c=d.TEXTURE_2D,d.bindFramebuffer(d.FRAMEBUFFER,a.__webglFramebuffer),d.framebufferTexture2D(d.FRAMEBUFFER,d.COLOR_ATTACHMENT0,c,a.__webglTexture,0),d.bindRenderbuffer(d.RENDERBUFFER,a.__webglRenderbuffer),P(a.__webglRenderbuffer,a);b?d.bindTexture(d.TEXTURE_CUBE_MAP,null):d.bindTexture(d.TEXTURE_2D,null);d.bindRenderbuffer(d.RENDERBUFFER,null);d.bindFramebuffer(d.FRAMEBUFFER,null)}a?(b=b?a.__webglFramebuffer[a.activeCubeFace]:a.__webglFramebuffer,c=a.width,a=a.height,f=e=0):(b=null,c=Ha,a=Da,e=Pa,
-f=Qa);b!==ha&&(d.bindFramebuffer(d.FRAMEBUFFER,b),d.viewport(e,f,c,a),ha=b)}function ta(a){switch(a){case THREE.NearestFilter:case THREE.NearestMipMapNearestFilter:case THREE.NearestMipMapLinearFilter:return d.NEAREST;default:return d.LINEAR}}function N(a){switch(a){case THREE.RepeatWrapping:return d.REPEAT;case THREE.ClampToEdgeWrapping:return d.CLAMP_TO_EDGE;case THREE.MirroredRepeatWrapping:return d.MIRRORED_REPEAT;case THREE.NearestFilter:return d.NEAREST;case THREE.NearestMipMapNearestFilter:return d.NEAREST_MIPMAP_NEAREST;
-case THREE.NearestMipMapLinearFilter:return d.NEAREST_MIPMAP_LINEAR;case THREE.LinearFilter:return d.LINEAR;case THREE.LinearMipMapNearestFilter:return d.LINEAR_MIPMAP_NEAREST;case THREE.LinearMipMapLinearFilter:return d.LINEAR_MIPMAP_LINEAR;case THREE.ByteType:return d.BYTE;case THREE.UnsignedByteType:return d.UNSIGNED_BYTE;case THREE.ShortType:return d.SHORT;case THREE.UnsignedShortType:return d.UNSIGNED_SHORT;case THREE.IntType:return d.INT;case THREE.UnsignedShortType:return d.UNSIGNED_INT;case THREE.FloatType:return d.FLOAT;
-case THREE.AlphaFormat:return d.ALPHA;case THREE.RGBFormat:return d.RGB;case THREE.RGBAFormat:return d.RGBA;case THREE.LuminanceFormat:return d.LUMINANCE;case THREE.LuminanceAlphaFormat:return d.LUMINANCE_ALPHA}return 0}var a=a||{},ma=a.canvas!==void 0?a.canvas:document.createElement("canvas"),va=a.precision!==void 0?a.precision:"highp",xa=a.antialias!==void 0?a.antialias:!1,Aa=a.stencil!==void 0?a.stencil:!0,Xa=a.preserveDrawingBuffer!==void 0?a.preserveDrawingBuffer:!1,Q=a.clearColor!==void 0?new THREE.Color(a.clearColor):
-new THREE.Color(0),S=a.clearAlpha!==void 0?a.clearAlpha:0,la=a.maxLights!==void 0?a.maxLights:4;this.domElement=ma;this.context=null;this.autoUpdateScene=this.autoUpdateObjects=this.sortObjects=this.autoClearStencil=this.autoClearDepth=this.autoClearColor=this.autoClear=!0;this.physicallyBasedShading=this.gammaOutput=this.gammaInput=!1;this.shadowMapBias=0.0039;this.shadowMapDarkness=0.5;this.shadowMapHeight=this.shadowMapWidth=512;this.shadowCameraNear=1;this.shadowCameraFar=5E3;this.shadowCameraFov=
-50;this.shadowMap=[];this.shadowMapEnabled=!1;this.shadowMapSoft=this.shadowMapAutoUpdate=!0;this.maxMorphTargets=8;this.info={memory:{programs:0,geometries:0,textures:0},render:{calls:0,vertices:0,faces:0}};var D=this,d,ca=[],ra=null,ha=null,na=-1,sa=null,Ea=0,Fa=null,Ba=null,ya=null,wa=null,Oa=null,Sa=null,Ta=null,Ua=null,Ia=null,Pa=0,Qa=0,Ha=0,Da=0,ua=[new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4],za=new THREE.Matrix4,La=new Float32Array(16),
-Ka=new Float32Array(16),Ca=new THREE.Vector4,Ra={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[],distances:[]}},ja,Ja=[],Ga,Na,w={},Va=!1;d=function(){var a;try{if(!(a=ma.getContext("experimental-webgl",{antialias:xa,stencil:Aa,preserveDrawingBuffer:Xa})))throw"Error creating WebGL context.";console.log(navigator.userAgent+" | "+a.getParameter(a.VERSION)+" | "+a.getParameter(a.VENDOR)+" | "+a.getParameter(a.RENDERER)+" | "+a.getParameter(a.SHADING_LANGUAGE_VERSION))}catch(b){console.error(b)}return a}();
-d.clearColor(0,0,0,1);d.clearDepth(1);d.clearStencil(0);d.enable(d.DEPTH_TEST);d.depthFunc(d.LEQUAL);d.frontFace(d.CCW);d.cullFace(d.BACK);d.enable(d.CULL_FACE);d.enable(d.BLEND);d.blendEquation(d.FUNC_ADD);d.blendFunc(d.SRC_ALPHA,d.ONE_MINUS_SRC_ALPHA);d.clearColor(Q.r,Q.g,Q.b,S);(function(){w.vertices=new Float32Array(16);w.faces=new Uint16Array(6);var a=0;w.vertices[a++]=-1;w.vertices[a++]=-1;w.vertices[a++]=0;w.vertices[a++]=1;w.vertices[a++]=1;w.vertices[a++]=-1;w.vertices[a++]=1;w.vertices[a++]=
-1;w.vertices[a++]=1;w.vertices[a++]=1;w.vertices[a++]=1;w.vertices[a++]=0;w.vertices[a++]=-1;w.vertices[a++]=1;w.vertices[a++]=0;a=w.vertices[a++]=0;w.faces[a++]=0;w.faces[a++]=1;w.faces[a++]=2;w.faces[a++]=0;w.faces[a++]=2;w.faces[a++]=3;w.vertexBuffer=d.createBuffer();w.elementBuffer=d.createBuffer();d.bindBuffer(d.ARRAY_BUFFER,w.vertexBuffer);d.bufferData(d.ARRAY_BUFFER,w.vertices,d.STATIC_DRAW);d.bindBuffer(d.ELEMENT_ARRAY_BUFFER,w.elementBuffer);d.bufferData(d.ELEMENT_ARRAY_BUFFER,w.faces,d.STATIC_DRAW);
-w.program=d.createProgram();d.attachShader(w.program,L("fragment",THREE.ShaderLib.sprite.fragmentShader));d.attachShader(w.program,L("vertex",THREE.ShaderLib.sprite.vertexShader));d.linkProgram(w.program);w.attributes={};w.uniforms={};w.attributes.position=d.getAttribLocation(w.program,"position");w.attributes.uv=d.getAttribLocation(w.program,"uv");w.uniforms.uvOffset=d.getUniformLocation(w.program,"uvOffset");w.uniforms.uvScale=d.getUniformLocation(w.program,"uvScale");w.uniforms.rotation=d.getUniformLocation(w.program,
-"rotation");w.uniforms.scale=d.getUniformLocation(w.program,"scale");w.uniforms.alignment=d.getUniformLocation(w.program,"alignment");w.uniforms.color=d.getUniformLocation(w.program,"color");w.uniforms.map=d.getUniformLocation(w.program,"map");w.uniforms.opacity=d.getUniformLocation(w.program,"opacity");w.uniforms.useScreenCoordinates=d.getUniformLocation(w.program,"useScreenCoordinates");w.uniforms.affectedByDistance=d.getUniformLocation(w.program,"affectedByDistance");w.uniforms.screenPosition=
-d.getUniformLocation(w.program,"screenPosition");w.uniforms.modelViewMatrix=d.getUniformLocation(w.program,"modelViewMatrix");w.uniforms.projectionMatrix=d.getUniformLocation(w.program,"projectionMatrix")})();(function(){var a=THREE.ShaderLib.depthRGBA,b=THREE.UniformsUtils.clone(a.uniforms);Ga=new THREE.ShaderMaterial({fragmentShader:a.fragmentShader,vertexShader:a.vertexShader,uniforms:b});Na=new THREE.ShaderMaterial({fragmentShader:a.fragmentShader,vertexShader:a.vertexShader,uniforms:b,morphTargets:!0});
-Ga._shadowPass=!0;Na._shadowPass=!0})();this.context=d;var Wa=d.getParameter(d.MAX_VERTEX_TEXTURE_IMAGE_UNITS)>0;this.getContext=function(){return d};this.supportsVertexTextures=function(){return Wa};this.setSize=function(a,b){ma.width=a;ma.height=b;this.setViewport(0,0,ma.width,ma.height)};this.setViewport=function(a,b,c,e){Pa=a;Qa=b;Ha=c;Da=e;d.viewport(Pa,Qa,Ha,Da)};this.setScissor=function(a,b,c,e){d.scissor(a,b,c,e)};this.enableScissorTest=function(a){a?d.enable(d.SCISSOR_TEST):d.disable(d.SCISSOR_TEST)};
-this.setClearColorHex=function(a,b){Q.setHex(a);S=b;d.clearColor(Q.r,Q.g,Q.b,S)};this.setClearColor=function(a,b){Q.copy(a);S=b;d.clearColor(Q.r,Q.g,Q.b,S)};this.getClearColor=function(){return Q};this.getClearAlpha=function(){return S};this.clear=function(a,b,c){var e=0;if(a===void 0||a)e|=d.COLOR_BUFFER_BIT;if(b===void 0||b)e|=d.DEPTH_BUFFER_BIT;if(c===void 0||c)e|=d.STENCIL_BUFFER_BIT;d.clear(e)};this.clearTarget=function(a,b,c,d){pa(a);this.clear(b,c,d)};this.deallocateObject=function(a){if(a.__webglInit)if(a.__webglInit=
-!1,delete a._modelViewMatrix,delete a._normalMatrixArray,delete a._modelViewMatrixArray,delete a._objectMatrixArray,a instanceof THREE.Mesh)for(var b in a.geometry.geometryGroups){var c=a.geometry.geometryGroups[b];d.deleteBuffer(c.__webglVertexBuffer);d.deleteBuffer(c.__webglNormalBuffer);d.deleteBuffer(c.__webglTangentBuffer);d.deleteBuffer(c.__webglColorBuffer);d.deleteBuffer(c.__webglUVBuffer);d.deleteBuffer(c.__webglUV2Buffer);d.deleteBuffer(c.__webglSkinVertexABuffer);d.deleteBuffer(c.__webglSkinVertexBBuffer);
-d.deleteBuffer(c.__webglSkinIndicesBuffer);d.deleteBuffer(c.__webglSkinWeightsBuffer);d.deleteBuffer(c.__webglFaceBuffer);d.deleteBuffer(c.__webglLineBuffer);if(c.numMorphTargets)for(var e=0,f=c.numMorphTargets;e<f;e++)d.deleteBuffer(c.__webglMorphTargetsBuffers[e]);if(c.__webglCustomAttributesList)for(e in e=void 0,c.__webglCustomAttributesList)d.deleteBuffer(c.__webglCustomAttributesList[e].buffer);D.info.memory.geometries--}else if(a instanceof THREE.Ribbon)a=a.geometry,d.deleteBuffer(a.__webglVertexBuffer),
-d.deleteBuffer(a.__webglColorBuffer),D.info.memory.geometries--;else if(a instanceof THREE.Line)a=a.geometry,d.deleteBuffer(a.__webglVertexBuffer),d.deleteBuffer(a.__webglColorBuffer),D.info.memory.geometries--;else if(a instanceof THREE.ParticleSystem)a=a.geometry,d.deleteBuffer(a.__webglVertexBuffer),d.deleteBuffer(a.__webglColorBuffer),D.info.memory.geometries--};this.deallocateTexture=function(a){if(a.__webglInit)a.__webglInit=!1,d.deleteTexture(a.__webglTexture),D.info.memory.textures--};this.updateShadowMap=
-function(a,b){p(a,b)};this.render=function(a,b,c,e){var f,g,q,l,C=a.lights,u=a.fog;na=-1;this.autoUpdateObjects&&this.initWebGLObjects(a);this.shadowMapEnabled&&this.shadowMapAutoUpdate&&p(a,b);D.info.render.calls=0;D.info.render.vertices=0;D.info.render.faces=0;b.parent===void 0&&(console.warn("DEPRECATED: Camera hasn't been added to a Scene. Adding it..."),a.add(b));this.autoUpdateScene&&a.updateMatrixWorld();b.matrixWorldInverse.getInverse(b.matrixWorld);b.matrixWorldInverse.flattenToArray(Ka);
-b.projectionMatrix.flattenToArray(La);za.multiply(b.projectionMatrix,b.matrixWorldInverse);i(za);pa(c);(this.autoClear||e)&&this.clear(this.autoClearColor,this.autoClearDepth,this.autoClearStencil);l=a.__webglObjects;e=0;for(f=l.length;e<f;e++)if(g=l[e],q=g.object,g.render=!1,q.visible&&(!(q instanceof THREE.Mesh)||!q.frustumCulled||h(q))){q.matrixWorld.flattenToArray(q._objectMatrixArray);qa(q,b,!0);var k=g,m=k.object,y=k.buffer,x=void 0,x=x=void 0,x=m.material;if(x instanceof THREE.MeshFaceMaterial){if(x=
-y.materialIndex,x>=0)x=m.geometry.materials[x],x.transparent?(k.transparent=x,k.opaque=null):(k.opaque=x,k.transparent=null)}else if(x)x.transparent?(k.transparent=x,k.opaque=null):(k.opaque=x,k.transparent=null);g.render=!0;if(this.sortObjects)q.renderDepth?g.z=q.renderDepth:(Ca.copy(q.position),za.multiplyVector3(Ca),g.z=Ca.z)}this.sortObjects&&l.sort(r);l=a.__webglObjectsImmediate;e=0;for(f=l.length;e<f;e++)if(g=l[e],q=g.object,q.visible)q.matrixAutoUpdate&&q.matrixWorld.flattenToArray(q._objectMatrixArray),
-qa(q,b,!0),q=g.object.material,q.transparent?(g.transparent=q,g.opaque=null):(g.opaque=q,g.transparent=null);a.overrideMaterial?(M(a.overrideMaterial.blending),ia(a.overrideMaterial.depthTest),ka(a.overrideMaterial.depthWrite),F(a.overrideMaterial.polygonOffset,a.overrideMaterial.polygonOffsetFactor,a.overrideMaterial.polygonOffsetUnits),j(a.__webglObjects,!1,"",b,C,u,!0,a.overrideMaterial),n(a.__webglObjectsImmediate,"",b,C,u,!1,a.overrideMaterial)):(M(THREE.NormalBlending),j(a.__webglObjects,!0,
-"opaque",b,C,u,!1),n(a.__webglObjectsImmediate,"opaque",b,C,u,!1),j(a.__webglObjects,!1,"transparent",b,C,u,!0),n(a.__webglObjectsImmediate,"transparent",b,C,u,!0));if(a.__webglSprites.length){q=w.attributes;C=w.uniforms;u=Da/Ha;e=[];f=Ha*0.5;l=Da*0.5;g=!0;d.useProgram(w.program);ra=w.program;sa=wa=ya=-1;Va||(d.enableVertexAttribArray(w.attributes.position),d.enableVertexAttribArray(w.attributes.uv),Va=!0);d.disable(d.CULL_FACE);d.enable(d.BLEND);d.depthMask(!0);d.bindBuffer(d.ARRAY_BUFFER,w.vertexBuffer);
-d.vertexAttribPointer(q.position,2,d.FLOAT,!1,16,0);d.vertexAttribPointer(q.uv,2,d.FLOAT,!1,16,8);d.bindBuffer(d.ELEMENT_ARRAY_BUFFER,w.elementBuffer);d.uniformMatrix4fv(C.projectionMatrix,!1,La);d.activeTexture(d.TEXTURE0);d.uniform1i(C.map,0);q=0;for(k=a.__webglSprites.length;q<k;q++)if(m=a.__webglSprites[q],m.visible&&m.opacity!==0)m.useScreenCoordinates?m.z=-m.position.z:(m._modelViewMatrix.multiplyToArray(b.matrixWorldInverse,m.matrixWorld,m._modelViewMatrixArray),m.z=-m._modelViewMatrix.n34);
-a.__webglSprites.sort(r);q=0;for(k=a.__webglSprites.length;q<k;q++)m=a.__webglSprites[q],m.visible&&m.opacity!==0&&m.map&&m.map.image&&m.map.image.width&&(m.useScreenCoordinates?(d.uniform1i(C.useScreenCoordinates,1),d.uniform3f(C.screenPosition,(m.position.x-f)/f,(l-m.position.y)/l,Math.max(0,Math.min(1,m.position.z)))):(d.uniform1i(C.useScreenCoordinates,0),d.uniform1i(C.affectedByDistance,m.affectedByDistance?1:0),d.uniformMatrix4fv(C.modelViewMatrix,!1,m._modelViewMatrixArray)),b=m.map.image.width/
-(m.scaleByViewport?Da:1),e[0]=b*u*m.scale.x,e[1]=b*m.scale.y,d.uniform2f(C.uvScale,m.uvScale.x,m.uvScale.y),d.uniform2f(C.uvOffset,m.uvOffset.x,m.uvOffset.y),d.uniform2f(C.alignment,m.alignment.x,m.alignment.y),d.uniform1f(C.opacity,m.opacity),d.uniform3f(C.color,m.color.r,m.color.g,m.color.b),d.uniform1f(C.rotation,m.rotation),d.uniform2fv(C.scale,e),m.mergeWith3D&&!g?(d.enable(d.DEPTH_TEST),g=!0):!m.mergeWith3D&&g&&(d.disable(d.DEPTH_TEST),g=!1),M(m.blending),oa(m.map,0),d.drawElements(d.TRIANGLES,
-6,d.UNSIGNED_SHORT,0));d.enable(d.CULL_FACE);d.enable(d.DEPTH_TEST);d.depthMask(Oa)}c&&c.minFilter!==THREE.NearestFilter&&c.minFilter!==THREE.LinearFilter&&(c instanceof THREE.WebGLRenderTargetCube?(d.bindTexture(d.TEXTURE_CUBE_MAP,c.__webglTexture),d.generateMipmap(d.TEXTURE_CUBE_MAP),d.bindTexture(d.TEXTURE_CUBE_MAP,null)):(d.bindTexture(d.TEXTURE_2D,c.__webglTexture),d.generateMipmap(d.TEXTURE_2D),d.bindTexture(d.TEXTURE_2D,null)))};this.initWebGLObjects=function(a){if(!a.__webglObjects)a.__webglObjects=
-[],a.__webglObjectsImmediate=[],a.__webglSprites=[];for(;a.__objectsAdded.length;){var f=a.__objectsAdded[0],g=a,i=void 0,h=void 0,j=void 0;if(!f.__webglInit)if(f.__webglInit=!0,f._modelViewMatrix=new THREE.Matrix4,f._normalMatrixArray=new Float32Array(9),f._modelViewMatrixArray=new Float32Array(16),f._objectMatrixArray=new Float32Array(16),f.matrixWorld.flattenToArray(f._objectMatrixArray),f instanceof THREE.Mesh){h=f.geometry;if(h.geometryGroups===void 0){var j=h,q=void 0,l=void 0,n=void 0,r=void 0,
-k=void 0,m=void 0,p=void 0,x={},w=j.morphTargets.length;j.geometryGroups={};q=0;for(l=j.faces.length;q<l;q++)n=j.faces[q],r=n.materialIndex,m=r!==void 0?r:-1,x[m]===void 0&&(x[m]={hash:m,counter:0}),p=x[m].hash+"_"+x[m].counter,j.geometryGroups[p]===void 0&&(j.geometryGroups[p]={faces3:[],faces4:[],materialIndex:r,vertices:0,numMorphTargets:w}),k=n instanceof THREE.Face3?3:4,j.geometryGroups[p].vertices+k>65535&&(x[m].counter+=1,p=x[m].hash+"_"+x[m].counter,j.geometryGroups[p]===void 0&&(j.geometryGroups[p]=
-{faces3:[],faces4:[],materialIndex:r,vertices:0,numMorphTargets:w})),n instanceof THREE.Face3?j.geometryGroups[p].faces3.push(q):j.geometryGroups[p].faces4.push(q),j.geometryGroups[p].vertices+=k;j.geometryGroupsList=[];q=void 0;for(q in j.geometryGroups)j.geometryGroups[q].id=Ea++,j.geometryGroupsList.push(j.geometryGroups[q])}for(i in h.geometryGroups)if(j=h.geometryGroups[i],!j.__webglVertexBuffer){q=j;q.__webglVertexBuffer=d.createBuffer();q.__webglNormalBuffer=d.createBuffer();q.__webglTangentBuffer=
-d.createBuffer();q.__webglColorBuffer=d.createBuffer();q.__webglUVBuffer=d.createBuffer();q.__webglUV2Buffer=d.createBuffer();q.__webglSkinVertexABuffer=d.createBuffer();q.__webglSkinVertexBBuffer=d.createBuffer();q.__webglSkinIndicesBuffer=d.createBuffer();q.__webglSkinWeightsBuffer=d.createBuffer();q.__webglFaceBuffer=d.createBuffer();q.__webglLineBuffer=d.createBuffer();if(q.numMorphTargets){n=l=void 0;q.__webglMorphTargetsBuffers=[];l=0;for(n=q.numMorphTargets;l<n;l++)q.__webglMorphTargetsBuffers.push(d.createBuffer())}D.info.memory.geometries++;
-r=f;k=r.geometry;l=j.faces3;m=j.faces4;q=l.length*3+m.length*4;n=l.length*1+m.length*2;m=l.length*3+m.length*4;l=c(r,j);p=l.map||l.lightMap||l instanceof THREE.ShaderMaterial?!0:!1;x=l instanceof THREE.MeshBasicMaterial&&!l.envMap||l instanceof THREE.MeshDepthMaterial?!1:l&&l.shading!==void 0&&l.shading===THREE.SmoothShading?THREE.SmoothShading:THREE.FlatShading;w=l.vertexColors?l.vertexColors:!1;j.__vertexArray=new Float32Array(q*3);if(x)j.__normalArray=new Float32Array(q*3);if(k.hasTangents)j.__tangentArray=
-new Float32Array(q*4);if(w)j.__colorArray=new Float32Array(q*3);if(p){if(k.faceUvs.length>0||k.faceVertexUvs.length>0)j.__uvArray=new Float32Array(q*2);if(k.faceUvs.length>1||k.faceVertexUvs.length>1)j.__uv2Array=new Float32Array(q*2)}if(r.geometry.skinWeights.length&&r.geometry.skinIndices.length)j.__skinVertexAArray=new Float32Array(q*4),j.__skinVertexBArray=new Float32Array(q*4),j.__skinIndexArray=new Float32Array(q*4),j.__skinWeightArray=new Float32Array(q*4);j.__faceArray=new Uint16Array(n*3);
-j.__lineArray=new Uint16Array(m*2);if(j.numMorphTargets){j.__morphTargetsArrays=[];r=0;for(k=j.numMorphTargets;r<k;r++)j.__morphTargetsArrays.push(new Float32Array(q*3))}j.__needsSmoothNormals=x===THREE.SmoothShading;j.__uvType=p;j.__vertexColorType=w;j.__normalType=x;j.__webglFaceCount=n*3;j.__webglLineCount=m*2;if(l.attributes){if(j.__webglCustomAttributesList===void 0)j.__webglCustomAttributesList=[];n=void 0;for(n in l.attributes){var r=l.attributes[n],k={},F;for(F in r)k[F]=r[F];if(!k.__webglInitialized||
-k.createUniqueBuffers)k.__webglInitialized=!0,m=1,k.type==="v2"?m=2:k.type==="v3"?m=3:k.type==="v4"?m=4:k.type==="c"&&(m=3),k.size=m,k.array=new Float32Array(q*m),k.buffer=d.createBuffer(),k.buffer.belongsToAttribute=n,r.needsUpdate=!0,k.__original=r;j.__webglCustomAttributesList.push(k)}}j.__inittedArrays=!0;h.__dirtyVertices=!0;h.__dirtyMorphTargets=!0;h.__dirtyElements=!0;h.__dirtyUvs=!0;h.__dirtyNormals=!0;h.__dirtyTangents=!0;h.__dirtyColors=!0}}else if(f instanceof THREE.Ribbon){if(h=f.geometry,
-!h.__webglVertexBuffer)j=h,j.__webglVertexBuffer=d.createBuffer(),j.__webglColorBuffer=d.createBuffer(),D.info.memory.geometries++,j=h,q=j.vertices.length,j.__vertexArray=new Float32Array(q*3),j.__colorArray=new Float32Array(q*3),j.__webglVertexCount=q,h.__dirtyVertices=!0,h.__dirtyColors=!0}else if(f instanceof THREE.Line){if(h=f.geometry,!h.__webglVertexBuffer)j=h,j.__webglVertexBuffer=d.createBuffer(),j.__webglColorBuffer=d.createBuffer(),D.info.memory.geometries++,j=h,q=f,l=j.vertices.length,
-j.__vertexArray=new Float32Array(l*3),j.__colorArray=new Float32Array(l*3),j.__webglLineCount=l,b(j,q),h.__dirtyVertices=!0,h.__dirtyColors=!0}else if(f instanceof THREE.ParticleSystem&&(h=f.geometry,!h.__webglVertexBuffer))j=h,j.__webglVertexBuffer=d.createBuffer(),j.__webglColorBuffer=d.createBuffer(),D.info.geometries++,j=h,q=f,l=j.vertices.length,j.__vertexArray=new Float32Array(l*3),j.__colorArray=new Float32Array(l*3),j.__sortArray=[],j.__webglParticleCount=l,b(j,q),h.__dirtyVertices=!0,h.__dirtyColors=
-!0;if(!f.__webglActive){if(f instanceof THREE.Mesh)for(i in h=f.geometry,h.geometryGroups)j=h.geometryGroups[i],y(g.__webglObjects,j,f);else f instanceof THREE.Ribbon||f instanceof THREE.Line||f instanceof THREE.ParticleSystem?(h=f.geometry,y(g.__webglObjects,h,f)):THREE.MarchingCubes!==void 0&&f instanceof THREE.MarchingCubes||f.immediateRenderCallback?g.__webglObjectsImmediate.push({object:f,opaque:null,transparent:null}):f instanceof THREE.Sprite&&g.__webglSprites.push(f);f.__webglActive=!0}a.__objectsAdded.splice(0,
-1)}for(;a.__objectsRemoved.length;){f=a.__objectsRemoved[0];g=a;if(f instanceof THREE.Mesh||f instanceof THREE.ParticleSystem||f instanceof THREE.Ribbon||f instanceof THREE.Line)I(g.__webglObjects,f);else if(f instanceof THREE.Sprite){g=g.__webglSprites;i=f;for(h=g.length-1;h>=0;h--)g[h]===i&&g.splice(h,1)}else(f instanceof THREE.MarchingCubes||f.immediateRenderCallback)&&I(g.__webglObjectsImmediate,f);f.__webglActive=!1;a.__objectsRemoved.splice(0,1)}f=0;for(g=a.__webglObjects.length;f<g;f++)if(F=
-a.__webglObjects[f].object,i=F.geometry,h=n=l=void 0,F instanceof THREE.Mesh){j=0;for(q=i.geometryGroupsList.length;j<q;j++)if(l=i.geometryGroupsList[j],h=c(F,l),n=h.attributes&&u(h),i.__dirtyVertices||i.__dirtyMorphTargets||i.__dirtyElements||i.__dirtyUvs||i.__dirtyNormals||i.__dirtyColors||i.__dirtyTangents||n)if(n=d.DYNAMIC_DRAW,r=!i.dynamic,l.__inittedArrays){var E=m=k=void 0,s=void 0,G=void 0,L=void 0,v=void 0,Z=void 0,$=void 0,X=void 0,P=void 0,R=E=L=void 0,z=void 0,A=void 0,B=void 0,Y=s=void 0,
-aa=void 0,T=s=$=P=void 0,U=void 0,M=B=A=z=v=void 0,J=s=B=A=z=M=B=A=z=M=B=A=z=void 0,W=void 0,N=L=void 0,S=void 0,V=void 0,ca=void 0,da=void 0,H=R=V=W=0,Q=0,ba=J=E=0,O=v=Y=0,t=0,ea=void 0,O=l.__vertexArray,S=l.__uvArray,t=l.__uv2Array,N=l.__normalArray,G=l.__tangentArray,aa=l.__colorArray,T=l.__skinVertexAArray,U=l.__skinVertexBArray,Z=l.__skinIndexArray,ga=l.__skinWeightArray,M=l.__morphTargetsArrays,p=l.__webglCustomAttributesList,o=void 0,o=l.__faceArray,ea=l.__lineArray,ha=l.__needsSmoothNormals,
-P=l.__vertexColorType,X=l.__uvType,L=l.__normalType,$=F.geometry,ia=$.__dirtyElements,ka=$.__dirtyUvs,pa=$.__dirtyNormals,qa=$.__dirtyTangents,ta=$.__dirtyColors,ca=$.__dirtyMorphTargets,da=$.vertices,x=l.faces3,w=l.faces4,fa=$.faces,oa=$.faceVertexUvs[0],ra=$.faceVertexUvs[1],ja=$.skinVerticesA,la=$.skinVerticesB,ma=$.skinIndices,na=$.skinWeights,sa=$.morphTargets;if($.__dirtyVertices){k=0;for(m=x.length;k<m;k++)s=fa[x[k]],z=da[s.a].position,A=da[s.b].position,B=da[s.c].position,O[V]=z.x,O[V+1]=
-z.y,O[V+2]=z.z,O[V+3]=A.x,O[V+4]=A.y,O[V+5]=A.z,O[V+6]=B.x,O[V+7]=B.y,O[V+8]=B.z,V+=9;k=0;for(m=w.length;k<m;k++)s=fa[w[k]],z=da[s.a].position,A=da[s.b].position,B=da[s.c].position,s=da[s.d].position,O[V]=z.x,O[V+1]=z.y,O[V+2]=z.z,O[V+3]=A.x,O[V+4]=A.y,O[V+5]=A.z,O[V+6]=B.x,O[V+7]=B.y,O[V+8]=B.z,O[V+9]=s.x,O[V+10]=s.y,O[V+11]=s.z,V+=12;d.bindBuffer(d.ARRAY_BUFFER,l.__webglVertexBuffer);d.bufferData(d.ARRAY_BUFFER,O,n)}if(ca){V=0;for(ca=sa.length;V<ca;V++){k=O=0;for(m=x.length;k<m;k++)s=fa[x[k]],z=
-sa[V].vertices[s.a].position,A=sa[V].vertices[s.b].position,B=sa[V].vertices[s.c].position,da=M[V],da[O]=z.x,da[O+1]=z.y,da[O+2]=z.z,da[O+3]=A.x,da[O+4]=A.y,da[O+5]=A.z,da[O+6]=B.x,da[O+7]=B.y,da[O+8]=B.z,O+=9;k=0;for(m=w.length;k<m;k++)s=fa[w[k]],z=sa[V].vertices[s.a].position,A=sa[V].vertices[s.b].position,B=sa[V].vertices[s.c].position,s=sa[V].vertices[s.d].position,da=M[V],da[O]=z.x,da[O+1]=z.y,da[O+2]=z.z,da[O+3]=A.x,da[O+4]=A.y,da[O+5]=A.z,da[O+6]=B.x,da[O+7]=B.y,da[O+8]=B.z,da[O+9]=s.x,da[O+
-10]=s.y,da[O+11]=s.z,O+=12;d.bindBuffer(d.ARRAY_BUFFER,l.__webglMorphTargetsBuffers[V]);d.bufferData(d.ARRAY_BUFFER,M[V],n)}}if(na.length){k=0;for(m=x.length;k<m;k++)s=fa[x[k]],z=na[s.a],A=na[s.b],B=na[s.c],ga[v]=z.x,ga[v+1]=z.y,ga[v+2]=z.z,ga[v+3]=z.w,ga[v+4]=A.x,ga[v+5]=A.y,ga[v+6]=A.z,ga[v+7]=A.w,ga[v+8]=B.x,ga[v+9]=B.y,ga[v+10]=B.z,ga[v+11]=B.w,z=ma[s.a],A=ma[s.b],B=ma[s.c],Z[v]=z.x,Z[v+1]=z.y,Z[v+2]=z.z,Z[v+3]=z.w,Z[v+4]=A.x,Z[v+5]=A.y,Z[v+6]=A.z,Z[v+7]=A.w,Z[v+8]=B.x,Z[v+9]=B.y,Z[v+10]=B.z,
-Z[v+11]=B.w,z=ja[s.a],A=ja[s.b],B=ja[s.c],T[v]=z.x,T[v+1]=z.y,T[v+2]=z.z,T[v+3]=1,T[v+4]=A.x,T[v+5]=A.y,T[v+6]=A.z,T[v+7]=1,T[v+8]=B.x,T[v+9]=B.y,T[v+10]=B.z,T[v+11]=1,z=la[s.a],A=la[s.b],B=la[s.c],U[v]=z.x,U[v+1]=z.y,U[v+2]=z.z,U[v+3]=1,U[v+4]=A.x,U[v+5]=A.y,U[v+6]=A.z,U[v+7]=1,U[v+8]=B.x,U[v+9]=B.y,U[v+10]=B.z,U[v+11]=1,v+=12;k=0;for(m=w.length;k<m;k++)s=fa[w[k]],z=na[s.a],A=na[s.b],B=na[s.c],M=na[s.d],ga[v]=z.x,ga[v+1]=z.y,ga[v+2]=z.z,ga[v+3]=z.w,ga[v+4]=A.x,ga[v+5]=A.y,ga[v+6]=A.z,ga[v+7]=A.w,
-ga[v+8]=B.x,ga[v+9]=B.y,ga[v+10]=B.z,ga[v+11]=B.w,ga[v+12]=M.x,ga[v+13]=M.y,ga[v+14]=M.z,ga[v+15]=M.w,z=ma[s.a],A=ma[s.b],B=ma[s.c],M=ma[s.d],Z[v]=z.x,Z[v+1]=z.y,Z[v+2]=z.z,Z[v+3]=z.w,Z[v+4]=A.x,Z[v+5]=A.y,Z[v+6]=A.z,Z[v+7]=A.w,Z[v+8]=B.x,Z[v+9]=B.y,Z[v+10]=B.z,Z[v+11]=B.w,Z[v+12]=M.x,Z[v+13]=M.y,Z[v+14]=M.z,Z[v+15]=M.w,z=ja[s.a],A=ja[s.b],B=ja[s.c],M=ja[s.d],T[v]=z.x,T[v+1]=z.y,T[v+2]=z.z,T[v+3]=1,T[v+4]=A.x,T[v+5]=A.y,T[v+6]=A.z,T[v+7]=1,T[v+8]=B.x,T[v+9]=B.y,T[v+10]=B.z,T[v+11]=1,T[v+12]=M.x,T[v+
-13]=M.y,T[v+14]=M.z,T[v+15]=1,z=la[s.a],A=la[s.b],B=la[s.c],s=la[s.d],U[v]=z.x,U[v+1]=z.y,U[v+2]=z.z,U[v+3]=1,U[v+4]=A.x,U[v+5]=A.y,U[v+6]=A.z,U[v+7]=1,U[v+8]=B.x,U[v+9]=B.y,U[v+10]=B.z,U[v+11]=1,U[v+12]=s.x,U[v+13]=s.y,U[v+14]=s.z,U[v+15]=1,v+=16;v>0&&(d.bindBuffer(d.ARRAY_BUFFER,l.__webglSkinVertexABuffer),d.bufferData(d.ARRAY_BUFFER,T,n),d.bindBuffer(d.ARRAY_BUFFER,l.__webglSkinVertexBBuffer),d.bufferData(d.ARRAY_BUFFER,U,n),d.bindBuffer(d.ARRAY_BUFFER,l.__webglSkinIndicesBuffer),d.bufferData(d.ARRAY_BUFFER,
-Z,n),d.bindBuffer(d.ARRAY_BUFFER,l.__webglSkinWeightsBuffer),d.bufferData(d.ARRAY_BUFFER,ga,n))}if(ta&&P){k=0;for(m=x.length;k<m;k++)s=fa[x[k]],v=s.vertexColors,Z=s.color,v.length===3&&P===THREE.VertexColors?(s=v[0],T=v[1],U=v[2]):U=T=s=Z,aa[Y]=s.r,aa[Y+1]=s.g,aa[Y+2]=s.b,aa[Y+3]=T.r,aa[Y+4]=T.g,aa[Y+5]=T.b,aa[Y+6]=U.r,aa[Y+7]=U.g,aa[Y+8]=U.b,Y+=9;k=0;for(m=w.length;k<m;k++)s=fa[w[k]],v=s.vertexColors,Z=s.color,v.length===4&&P===THREE.VertexColors?(s=v[0],T=v[1],U=v[2],v=v[3]):v=U=T=s=Z,aa[Y]=s.r,
-aa[Y+1]=s.g,aa[Y+2]=s.b,aa[Y+3]=T.r,aa[Y+4]=T.g,aa[Y+5]=T.b,aa[Y+6]=U.r,aa[Y+7]=U.g,aa[Y+8]=U.b,aa[Y+9]=v.r,aa[Y+10]=v.g,aa[Y+11]=v.b,Y+=12;Y>0&&(d.bindBuffer(d.ARRAY_BUFFER,l.__webglColorBuffer),d.bufferData(d.ARRAY_BUFFER,aa,n))}if(qa&&$.hasTangents){k=0;for(m=x.length;k<m;k++)s=fa[x[k]],$=s.vertexTangents,Y=$[0],aa=$[1],P=$[2],G[J]=Y.x,G[J+1]=Y.y,G[J+2]=Y.z,G[J+3]=Y.w,G[J+4]=aa.x,G[J+5]=aa.y,G[J+6]=aa.z,G[J+7]=aa.w,G[J+8]=P.x,G[J+9]=P.y,G[J+10]=P.z,G[J+11]=P.w,J+=12;k=0;for(m=w.length;k<m;k++)s=
-fa[w[k]],$=s.vertexTangents,Y=$[0],aa=$[1],P=$[2],$=$[3],G[J]=Y.x,G[J+1]=Y.y,G[J+2]=Y.z,G[J+3]=Y.w,G[J+4]=aa.x,G[J+5]=aa.y,G[J+6]=aa.z,G[J+7]=aa.w,G[J+8]=P.x,G[J+9]=P.y,G[J+10]=P.z,G[J+11]=P.w,G[J+12]=$.x,G[J+13]=$.y,G[J+14]=$.z,G[J+15]=$.w,J+=16;d.bindBuffer(d.ARRAY_BUFFER,l.__webglTangentBuffer);d.bufferData(d.ARRAY_BUFFER,G,n)}if(pa&&L){k=0;for(m=x.length;k<m;k++)if(s=fa[x[k]],G=s.vertexNormals,L=s.normal,G.length===3&&ha)for(J=0;J<3;J++)L=G[J],N[E]=L.x,N[E+1]=L.y,N[E+2]=L.z,E+=3;else for(J=0;J<
-3;J++)N[E]=L.x,N[E+1]=L.y,N[E+2]=L.z,E+=3;k=0;for(m=w.length;k<m;k++)if(s=fa[w[k]],G=s.vertexNormals,L=s.normal,G.length===4&&ha)for(J=0;J<4;J++)L=G[J],N[E]=L.x,N[E+1]=L.y,N[E+2]=L.z,E+=3;else for(J=0;J<4;J++)N[E]=L.x,N[E+1]=L.y,N[E+2]=L.z,E+=3;d.bindBuffer(d.ARRAY_BUFFER,l.__webglNormalBuffer);d.bufferData(d.ARRAY_BUFFER,N,n)}if(ka&&oa&&X){k=0;for(m=x.length;k<m;k++)if(E=x[k],E=oa[E],E!==void 0)for(J=0;J<3;J++)N=E[J],S[R]=N.u,S[R+1]=N.v,R+=2;k=0;for(m=w.length;k<m;k++)if(E=w[k],E=oa[E],E!==void 0)for(J=
-0;J<4;J++)N=E[J],S[R]=N.u,S[R+1]=N.v,R+=2;R>0&&(d.bindBuffer(d.ARRAY_BUFFER,l.__webglUVBuffer),d.bufferData(d.ARRAY_BUFFER,S,n))}if(ka&&ra&&X){k=0;for(m=x.length;k<m;k++)if(E=x[k],R=ra[E],R!==void 0)for(J=0;J<3;J++)S=R[J],t[H]=S.u,t[H+1]=S.v,H+=2;k=0;for(m=w.length;k<m;k++)if(E=w[k],R=ra[E],R!==void 0)for(J=0;J<4;J++)S=R[J],t[H]=S.u,t[H+1]=S.v,H+=2;H>0&&(d.bindBuffer(d.ARRAY_BUFFER,l.__webglUV2Buffer),d.bufferData(d.ARRAY_BUFFER,t,n))}if(ia){k=0;for(m=x.length;k<m;k++)o[Q]=W,o[Q+1]=W+1,o[Q+2]=W+2,
-Q+=3,ea[ba]=W,ea[ba+1]=W+1,ea[ba+2]=W,ea[ba+3]=W+2,ea[ba+4]=W+1,ea[ba+5]=W+2,ba+=6,W+=3;k=0;for(m=w.length;k<m;k++)o[Q]=W,o[Q+1]=W+1,o[Q+2]=W+3,o[Q+3]=W+1,o[Q+4]=W+2,o[Q+5]=W+3,Q+=6,ea[ba]=W,ea[ba+1]=W+1,ea[ba+2]=W,ea[ba+3]=W+3,ea[ba+4]=W+1,ea[ba+5]=W+2,ea[ba+6]=W+2,ea[ba+7]=W+3,ba+=8,W+=4;d.bindBuffer(d.ELEMENT_ARRAY_BUFFER,l.__webglFaceBuffer);d.bufferData(d.ELEMENT_ARRAY_BUFFER,o,n);d.bindBuffer(d.ELEMENT_ARRAY_BUFFER,l.__webglLineBuffer);d.bufferData(d.ELEMENT_ARRAY_BUFFER,ea,n)}if(p){J=0;for(W=
-p.length;J<W;J++)if(o=p[J],o.__original.needsUpdate){t=0;if(o.size===1)if(o.boundTo===void 0||o.boundTo==="vertices"){k=0;for(m=x.length;k<m;k++)s=fa[x[k]],o.array[t]=o.value[s.a],o.array[t+1]=o.value[s.b],o.array[t+2]=o.value[s.c],t+=3;k=0;for(m=w.length;k<m;k++)s=fa[w[k]],o.array[t]=o.value[s.a],o.array[t+1]=o.value[s.b],o.array[t+2]=o.value[s.c],o.array[t+3]=o.value[s.d],t+=4}else{if(o.boundTo==="faces"){k=0;for(m=x.length;k<m;k++)ea=o.value[x[k]],o.array[t]=ea,o.array[t+1]=ea,o.array[t+2]=ea,
-t+=3;k=0;for(m=w.length;k<m;k++)ea=o.value[w[k]],o.array[t]=ea,o.array[t+1]=ea,o.array[t+2]=ea,o.array[t+3]=ea,t+=4}}else if(o.size===2)if(o.boundTo===void 0||o.boundTo==="vertices"){k=0;for(m=x.length;k<m;k++)s=fa[x[k]],z=o.value[s.a],A=o.value[s.b],B=o.value[s.c],o.array[t]=z.x,o.array[t+1]=z.y,o.array[t+2]=A.x,o.array[t+3]=A.y,o.array[t+4]=B.x,o.array[t+5]=B.y,t+=6;k=0;for(m=w.length;k<m;k++)s=fa[w[k]],z=o.value[s.a],A=o.value[s.b],B=o.value[s.c],s=o.value[s.d],o.array[t]=z.x,o.array[t+1]=z.y,
-o.array[t+2]=A.x,o.array[t+3]=A.y,o.array[t+4]=B.x,o.array[t+5]=B.y,o.array[t+6]=s.x,o.array[t+7]=s.y,t+=8}else{if(o.boundTo==="faces"){k=0;for(m=x.length;k<m;k++)B=A=z=ea=o.value[x[k]],o.array[t]=z.x,o.array[t+1]=z.y,o.array[t+2]=A.x,o.array[t+3]=A.y,o.array[t+4]=B.x,o.array[t+5]=B.y,t+=6;k=0;for(m=w.length;k<m;k++)s=B=A=z=ea=o.value[w[k]],o.array[t]=z.x,o.array[t+1]=z.y,o.array[t+2]=A.x,o.array[t+3]=A.y,o.array[t+4]=B.x,o.array[t+5]=B.y,o.array[t+6]=s.x,o.array[t+7]=s.y,t+=8}}else if(o.size===3)if(H=
-o.type==="c"?["r","g","b"]:["x","y","z"],o.boundTo===void 0||o.boundTo==="vertices"){k=0;for(m=x.length;k<m;k++)s=fa[x[k]],z=o.value[s.a],A=o.value[s.b],B=o.value[s.c],o.array[t]=z[H[0]],o.array[t+1]=z[H[1]],o.array[t+2]=z[H[2]],o.array[t+3]=A[H[0]],o.array[t+4]=A[H[1]],o.array[t+5]=A[H[2]],o.array[t+6]=B[H[0]],o.array[t+7]=B[H[1]],o.array[t+8]=B[H[2]],t+=9;k=0;for(m=w.length;k<m;k++)s=fa[w[k]],z=o.value[s.a],A=o.value[s.b],B=o.value[s.c],s=o.value[s.d],o.array[t]=z[H[0]],o.array[t+1]=z[H[1]],o.array[t+
-2]=z[H[2]],o.array[t+3]=A[H[0]],o.array[t+4]=A[H[1]],o.array[t+5]=A[H[2]],o.array[t+6]=B[H[0]],o.array[t+7]=B[H[1]],o.array[t+8]=B[H[2]],o.array[t+9]=s[H[0]],o.array[t+10]=s[H[1]],o.array[t+11]=s[H[2]],t+=12}else{if(o.boundTo==="faces"){k=0;for(m=x.length;k<m;k++)B=A=z=ea=o.value[x[k]],o.array[t]=z[H[0]],o.array[t+1]=z[H[1]],o.array[t+2]=z[H[2]],o.array[t+3]=A[H[0]],o.array[t+4]=A[H[1]],o.array[t+5]=A[H[2]],o.array[t+6]=B[H[0]],o.array[t+7]=B[H[1]],o.array[t+8]=B[H[2]],t+=9;k=0;for(m=w.length;k<m;k++)s=
-B=A=z=ea=o.value[w[k]],o.array[t]=z[H[0]],o.array[t+1]=z[H[1]],o.array[t+2]=z[H[2]],o.array[t+3]=A[H[0]],o.array[t+4]=A[H[1]],o.array[t+5]=A[H[2]],o.array[t+6]=B[H[0]],o.array[t+7]=B[H[1]],o.array[t+8]=B[H[2]],o.array[t+9]=s[H[0]],o.array[t+10]=s[H[1]],o.array[t+11]=s[H[2]],t+=12}}else if(o.size===4)if(o.boundTo===void 0||o.boundTo==="vertices"){k=0;for(m=x.length;k<m;k++)s=fa[x[k]],z=o.value[s.a],A=o.value[s.b],B=o.value[s.c],o.array[t]=z.x,o.array[t+1]=z.y,o.array[t+2]=z.z,o.array[t+3]=z.w,o.array[t+
-4]=A.x,o.array[t+5]=A.y,o.array[t+6]=A.z,o.array[t+7]=A.w,o.array[t+8]=B.x,o.array[t+9]=B.y,o.array[t+10]=B.z,o.array[t+11]=B.w,t+=12;k=0;for(m=w.length;k<m;k++)s=fa[w[k]],z=o.value[s.a],A=o.value[s.b],B=o.value[s.c],s=o.value[s.d],o.array[t]=z.x,o.array[t+1]=z.y,o.array[t+2]=z.z,o.array[t+3]=z.w,o.array[t+4]=A.x,o.array[t+5]=A.y,o.array[t+6]=A.z,o.array[t+7]=A.w,o.array[t+8]=B.x,o.array[t+9]=B.y,o.array[t+10]=B.z,o.array[t+11]=B.w,o.array[t+12]=s.x,o.array[t+13]=s.y,o.array[t+14]=s.z,o.array[t+15]=
-s.w,t+=16}else if(o.boundTo==="faces"){k=0;for(m=x.length;k<m;k++)B=A=z=ea=o.value[x[k]],o.array[t]=z.x,o.array[t+1]=z.y,o.array[t+2]=z.z,o.array[t+3]=z.w,o.array[t+4]=A.x,o.array[t+5]=A.y,o.array[t+6]=A.z,o.array[t+7]=A.w,o.array[t+8]=B.x,o.array[t+9]=B.y,o.array[t+10]=B.z,o.array[t+11]=B.w,t+=12;k=0;for(m=w.length;k<m;k++)s=B=A=z=ea=o.value[w[k]],o.array[t]=z.x,o.array[t+1]=z.y,o.array[t+2]=z.z,o.array[t+3]=z.w,o.array[t+4]=A.x,o.array[t+5]=A.y,o.array[t+6]=A.z,o.array[t+7]=A.w,o.array[t+8]=B.x,
-o.array[t+9]=B.y,o.array[t+10]=B.z,o.array[t+11]=B.w,o.array[t+12]=s.x,o.array[t+13]=s.y,o.array[t+14]=s.z,o.array[t+15]=s.w,t+=16}d.bindBuffer(d.ARRAY_BUFFER,o.buffer);d.bufferData(d.ARRAY_BUFFER,o.array,n)}}r&&(delete l.__inittedArrays,delete l.__colorArray,delete l.__normalArray,delete l.__tangentArray,delete l.__uvArray,delete l.__uv2Array,delete l.__faceArray,delete l.__vertexArray,delete l.__lineArray,delete l.__skinVertexAArray,delete l.__skinVertexBArray,delete l.__skinIndexArray,delete l.__skinWeightArray)}i.__dirtyVertices=
-!1;i.__dirtyMorphTargets=!1;i.__dirtyElements=!1;i.__dirtyUvs=!1;i.__dirtyNormals=!1;i.__dirtyColors=!1;i.__dirtyTangents=!1;h.attributes&&K(h)}else if(F instanceof THREE.Ribbon){if(i.__dirtyVertices||i.__dirtyColors){h=i;F=d.DYNAMIC_DRAW;k=j=k=r=r=void 0;m=h.vertices;q=h.colors;p=m.length;l=q.length;x=h.__vertexArray;n=h.__colorArray;w=h.__dirtyColors;if(h.__dirtyVertices){for(r=0;r<p;r++)k=m[r].position,j=r*3,x[j]=k.x,x[j+1]=k.y,x[j+2]=k.z;d.bindBuffer(d.ARRAY_BUFFER,h.__webglVertexBuffer);d.bufferData(d.ARRAY_BUFFER,
-x,F)}if(w){for(r=0;r<l;r++)k=q[r],j=r*3,n[j]=k.r,n[j+1]=k.g,n[j+2]=k.b;d.bindBuffer(d.ARRAY_BUFFER,h.__webglColorBuffer);d.bufferData(d.ARRAY_BUFFER,n,F)}}i.__dirtyVertices=!1;i.__dirtyColors=!1}else if(F instanceof THREE.Line){h=c(F,l);n=h.attributes&&u(h);if(i.__dirtyVertices||i.__dirtyColors||n){F=i;j=d.DYNAMIC_DRAW;p=q=W=m=fa=void 0;m=F.vertices;l=F.colors;p=m.length;n=l.length;x=F.__vertexArray;r=F.__colorArray;w=F.__dirtyColors;k=F.__webglCustomAttributesList;R=ba=Q=H=W=fa=void 0;if(F.__dirtyVertices){for(fa=
-0;fa<p;fa++)W=m[fa].position,q=fa*3,x[q]=W.x,x[q+1]=W.y,x[q+2]=W.z;d.bindBuffer(d.ARRAY_BUFFER,F.__webglVertexBuffer);d.bufferData(d.ARRAY_BUFFER,x,j)}if(w){for(m=0;m<n;m++)p=l[m],q=m*3,r[q]=p.r,r[q+1]=p.g,r[q+2]=p.b;d.bindBuffer(d.ARRAY_BUFFER,F.__webglColorBuffer);d.bufferData(d.ARRAY_BUFFER,r,j)}if(k){fa=0;for(W=k.length;fa<W;fa++)if(R=k[fa],R.needsUpdate&&(R.boundTo===void 0||R.boundTo==="vertices")){q=0;Q=R.value.length;if(R.size===1)for(H=0;H<Q;H++)R.array[H]=R.value[H];else if(R.size===2)for(H=
-0;H<Q;H++)ba=R.value[H],R.array[q]=ba.x,R.array[q+1]=ba.y,q+=2;else if(R.size===3)if(R.type==="c")for(H=0;H<Q;H++)ba=R.value[H],R.array[q]=ba.r,R.array[q+1]=ba.g,R.array[q+2]=ba.b,q+=3;else for(H=0;H<Q;H++)ba=R.value[H],R.array[q]=ba.x,R.array[q+1]=ba.y,R.array[q+2]=ba.z,q+=3;else if(R.size===4)for(H=0;H<Q;H++)ba=R.value[H],R.array[q]=ba.x,R.array[q+1]=ba.y,R.array[q+2]=ba.z,R.array[q+3]=ba.w,q+=4;d.bindBuffer(d.ARRAY_BUFFER,R.buffer);d.bufferData(d.ARRAY_BUFFER,R.array,j)}}}i.__dirtyVertices=!1;
-i.__dirtyColors=!1;h.attributes&&K(h)}else if(F instanceof THREE.ParticleSystem)h=c(F,l),n=h.attributes&&u(h),(i.__dirtyVertices||i.__dirtyColors||F.sortParticles||n)&&e(i,d.DYNAMIC_DRAW,F),i.__dirtyVertices=!1,i.__dirtyColors=!1,h.attributes&&K(h)};this.initMaterial=function(a,b,c,e){var f,g,h,i;a instanceof THREE.MeshDepthMaterial?i="depth":a instanceof THREE.MeshNormalMaterial?i="normal":a instanceof THREE.MeshBasicMaterial?i="basic":a instanceof THREE.MeshLambertMaterial?i="lambert":a instanceof
-THREE.MeshPhongMaterial?i="phong":a instanceof THREE.LineBasicMaterial?i="basic":a instanceof THREE.ParticleBasicMaterial&&(i="particle_basic");if(i){var j=THREE.ShaderLib[i];a.uniforms=THREE.UniformsUtils.clone(j.uniforms);a.vertexShader=j.vertexShader;a.fragmentShader=j.fragmentShader}var n,k,m;n=m=j=0;for(k=b.length;n<k;n++)h=b[n],h instanceof THREE.SpotLight&&m++,h instanceof THREE.DirectionalLight&&m++,h instanceof THREE.PointLight&&j++;j+m<=la?n=m:(n=Math.ceil(la*m/(j+m)),j=la-n);h={directional:n,
-point:j};j=m=0;for(n=b.length;j<n;j++)k=b[j],k instanceof THREE.SpotLight&&k.castShadow&&m++;var r=50;if(e!==void 0&&e instanceof THREE.SkinnedMesh)r=e.bones.length;var p;a:{n=a.fragmentShader;k=a.vertexShader;var j=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,morphTargets:a.morphTargets,maxMorphTargets:this.maxMorphTargets,maxDirLights:h.directional,maxPointLights:h.point,
-maxBones:r,shadowMapEnabled:this.shadowMapEnabled&&e.receiveShadow,shadowMapSoft:this.shadowMapSoft,shadowMapWidth:this.shadowMapWidth,shadowMapHeight:this.shadowMapHeight,maxShadows:m,alphaTest:a.alphaTest,metal:a.metal,perPixel:a.perPixel},u,e=[];i?e.push(i):(e.push(n),e.push(k));for(u in c)e.push(u),e.push(c[u]);i=e.join();u=0;for(e=ca.length;u<e;u++)if(ca[u].code===i){p=ca[u].program;break a}u=d.createProgram();e=[Wa?"#define VERTEX_TEXTURES":"",D.gammaInput?"#define GAMMA_INPUT":"",D.gammaOutput?
-"#define GAMMA_OUTPUT":"",D.physicallyBasedShading?"#define PHYSICALLY_BASED_SHADING":"","#define MAX_DIR_LIGHTS "+c.maxDirLights,"#define MAX_POINT_LIGHTS "+c.maxPointLights,"#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.morphTargets?"#define USE_MORPHTARGETS":"",c.perPixel?"#define PHONG_PER_PIXEL":"",c.shadowMapEnabled?
-"#define USE_SHADOWMAP":"",c.shadowMapSoft?"#define SHADOWMAP_SOFT":"",c.sizeAttenuation?"#define USE_SIZEATTENUATION":"","uniform mat4 objectMatrix;\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform mat4 viewMatrix;\nuniform mat3 normalMatrix;\nuniform vec3 cameraPosition;\nuniform mat4 cameraInverseMatrix;\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;\nattribute vec3 morphTarget4;\nattribute vec3 morphTarget5;\nattribute vec3 morphTarget6;\nattribute vec3 morphTarget7;\n#endif\n#ifdef USE_SKINNING\nattribute vec4 skinVertexA;\nattribute vec4 skinVertexB;\nattribute vec4 skinIndex;\nattribute vec4 skinWeight;\n#endif\n"].join("\n");
+Array&&n.image.length===6){if(m=n,m.image.length===6)if(m.needsUpdate){if(!m.image.__webglTextureCube)m.image.__webglTextureCube=d.createTexture();d.activeTexture(d.TEXTURE0+l);d.bindTexture(d.TEXTURE_CUBE_MAP,m.image.__webglTextureCube);l=X(d.TEXTURE_CUBE_MAP,m,m.image[0]);for(n=0;n<6;n++)d.texImage2D(d.TEXTURE_CUBE_MAP_POSITIVE_X+n,0,d.RGBA,d.RGBA,d.UNSIGNED_BYTE,m.image[n]);l&&d.generateMipmap(d.TEXTURE_CUBE_MAP);m.needsUpdate=!1}else d.activeTexture(d.TEXTURE0+l),d.bindTexture(d.TEXTURE_CUBE_MAP,
+m.image.__webglTextureCube)}else n instanceof THREE.WebGLRenderTargetCube?(m=n,d.activeTexture(d.TEXTURE0+l),d.bindTexture(d.TEXTURE_CUBE_MAP,m.__webglTexture)):oa(n,l)}else if(x==="tv"){if(!m._array){m._array=[];x=0;for(r=m.texture.length;x<r;x++)m._array[x]=l+x}d.uniform1iv(n,m._array);x=0;for(r=m.texture.length;x<r;x++)(n=m.texture[x])&&oa(n,m._array[x])}(e instanceof THREE.ShaderMaterial||e instanceof THREE.MeshPhongMaterial||e.envMap)&&i.cameraPosition!==null&&d.uniform3f(i.cameraPosition,a.position.x,
+a.position.y,a.position.z);(e instanceof THREE.MeshPhongMaterial||e instanceof THREE.MeshLambertMaterial||e instanceof THREE.ShaderMaterial||e.skinning)&&i.viewMatrix!==null&&d.uniformMatrix4fv(i.viewMatrix,!1,Ka);e.skinning&&(d.uniformMatrix4fv(i.cameraInverseMatrix,!1,Ka),d.uniformMatrix4fv(i.boneGlobalMatrices,!1,f.boneMatrices))}d.uniformMatrix4fv(i.modelViewMatrix,!1,f._modelViewMatrixArray);i.normalMatrix&&d.uniformMatrix3fv(i.normalMatrix,!1,f._normalMatrixArray);(e instanceof THREE.ShaderMaterial||
+e.envMap||e.skinning||f.receiveShadow)&&i.objectMatrix!==null&&d.uniformMatrix4fv(i.objectMatrix,!1,f._objectMatrixArray);return g}function qa(a,b,c){a._modelViewMatrix.multiplyToArray(b.matrixWorldInverse,a.matrixWorld,a._modelViewMatrixArray);c&&THREE.Matrix4.makeInvert3x3(a._modelViewMatrix).transposeIntoArray(a._normalMatrixArray)}function G(a){if(Fa!==a.doubleSided)a.doubleSided?d.disable(d.CULL_FACE):d.enable(d.CULL_FACE),Fa=a.doubleSided;if(Ba!==a.flipSided)a.flipSided?d.frontFace(d.CW):d.frontFace(d.CCW),
+Ba=a.flipSided}function ia(a){wa!==a&&(a?d.enable(d.DEPTH_TEST):d.disable(d.DEPTH_TEST),wa=a)}function ka(a){Oa!==a&&(d.depthMask(a),Oa=a)}function F(a,b,c){Sa!==a&&(a?d.enable(d.POLYGON_OFFSET_FILL):d.disable(d.POLYGON_OFFSET_FILL),Sa=a);if(a&&(Ta!==b||Ua!==c))d.polygonOffset(b,c),Ta=b,Ua=c}function M(a){if(a!==ya){switch(a){case THREE.AdditiveBlending:d.blendEquation(d.FUNC_ADD);d.blendFunc(d.SRC_ALPHA,d.ONE);break;case THREE.SubtractiveBlending:d.blendEquation(d.FUNC_ADD);d.blendFunc(d.ZERO,d.ONE_MINUS_SRC_COLOR);
+break;case THREE.MultiplyBlending:d.blendEquation(d.FUNC_ADD);d.blendFunc(d.ZERO,d.SRC_COLOR);break;default:d.blendEquationSeparate(d.FUNC_ADD,d.FUNC_ADD),d.blendFuncSeparate(d.SRC_ALPHA,d.ONE_MINUS_SRC_ALPHA,d.ONE,d.ONE_MINUS_SRC_ALPHA)}ya=a}}function L(a,b){var c;a==="fragment"?c=d.createShader(d.FRAGMENT_SHADER):a==="vertex"&&(c=d.createShader(d.VERTEX_SHADER));d.shaderSource(c,b);d.compileShader(c);if(!d.getShaderParameter(c,d.COMPILE_STATUS))return console.error(d.getShaderInfoLog(c)),console.error(b),
+null;return c}function X(a,b,c){return(c.width&c.width-1)===0&&(c.height&c.height-1)===0?(d.texParameteri(a,d.TEXTURE_WRAP_S,N(b.wrapS)),d.texParameteri(a,d.TEXTURE_WRAP_T,N(b.wrapT)),d.texParameteri(a,d.TEXTURE_MAG_FILTER,N(b.magFilter)),d.texParameteri(a,d.TEXTURE_MIN_FILTER,N(b.minFilter)),!0):(d.texParameteri(a,d.TEXTURE_WRAP_S,d.CLAMP_TO_EDGE),d.texParameteri(a,d.TEXTURE_WRAP_T,d.CLAMP_TO_EDGE),d.texParameteri(a,d.TEXTURE_MAG_FILTER,ta(b.magFilter)),d.texParameteri(a,d.TEXTURE_MIN_FILTER,ta(b.minFilter)),
+!1)}function oa(a,b){if(a.needsUpdate){if(!a.__webglInit)a.__webglInit=!0,a.__webglTexture=d.createTexture(),D.info.memory.textures++;d.activeTexture(d.TEXTURE0+b);d.bindTexture(d.TEXTURE_2D,a.__webglTexture);var c=X(d.TEXTURE_2D,a,a.image);a instanceof THREE.DataTexture?d.texImage2D(d.TEXTURE_2D,0,N(a.format),a.image.width,a.image.height,0,N(a.format),d.UNSIGNED_BYTE,a.image.data):d.texImage2D(d.TEXTURE_2D,0,d.RGBA,d.RGBA,d.UNSIGNED_BYTE,a.image);c&&d.generateMipmap(d.TEXTURE_2D);a.needsUpdate=!1;
+if(a.onUpdated)a.onUpdated()}else d.activeTexture(d.TEXTURE0+b),d.bindTexture(d.TEXTURE_2D,a.__webglTexture)}function P(a,b){d.bindRenderbuffer(d.RENDERBUFFER,a);b.depthBuffer&&!b.stencilBuffer?(d.renderbufferStorage(d.RENDERBUFFER,d.DEPTH_COMPONENT16,b.width,b.height),d.framebufferRenderbuffer(d.FRAMEBUFFER,d.DEPTH_ATTACHMENT,d.RENDERBUFFER,a)):b.depthBuffer&&b.stencilBuffer?(d.renderbufferStorage(d.RENDERBUFFER,d.DEPTH_STENCIL,b.width,b.height),d.framebufferRenderbuffer(d.FRAMEBUFFER,d.DEPTH_STENCIL_ATTACHMENT,
+d.RENDERBUFFER,a)):d.renderbufferStorage(d.RENDERBUFFER,d.RGBA4,b.width,b.height)}function pa(a){var b=a instanceof THREE.WebGLRenderTargetCube;if(a&&!a.__webglFramebuffer){if(a.depthBuffer===void 0)a.depthBuffer=!0;if(a.stencilBuffer===void 0)a.stencilBuffer=!0;a.__webglTexture=d.createTexture();if(b){a.__webglFramebuffer=[];a.__webglRenderbuffer=[];d.bindTexture(d.TEXTURE_CUBE_MAP,a.__webglTexture);X(d.TEXTURE_CUBE_MAP,a,a);for(var c=0;c<6;c++){a.__webglFramebuffer[c]=d.createFramebuffer();a.__webglRenderbuffer[c]=
+d.createRenderbuffer();d.texImage2D(d.TEXTURE_CUBE_MAP_POSITIVE_X+c,0,N(a.format),a.width,a.height,0,N(a.format),N(a.type),null);var e=a,f=d.TEXTURE_CUBE_MAP_POSITIVE_X+c;d.bindFramebuffer(d.FRAMEBUFFER,a.__webglFramebuffer[c]);d.framebufferTexture2D(d.FRAMEBUFFER,d.COLOR_ATTACHMENT0,f,e.__webglTexture,0);P(a.__webglRenderbuffer[c],a)}}else a.__webglFramebuffer=d.createFramebuffer(),a.__webglRenderbuffer=d.createRenderbuffer(),d.bindTexture(d.TEXTURE_2D,a.__webglTexture),X(d.TEXTURE_2D,a,a),d.texImage2D(d.TEXTURE_2D,
+0,N(a.format),a.width,a.height,0,N(a.format),N(a.type),null),c=d.TEXTURE_2D,d.bindFramebuffer(d.FRAMEBUFFER,a.__webglFramebuffer),d.framebufferTexture2D(d.FRAMEBUFFER,d.COLOR_ATTACHMENT0,c,a.__webglTexture,0),d.bindRenderbuffer(d.RENDERBUFFER,a.__webglRenderbuffer),P(a.__webglRenderbuffer,a);b?d.bindTexture(d.TEXTURE_CUBE_MAP,null):d.bindTexture(d.TEXTURE_2D,null);d.bindRenderbuffer(d.RENDERBUFFER,null);d.bindFramebuffer(d.FRAMEBUFFER,null)}a?(b=b?a.__webglFramebuffer[a.activeCubeFace]:a.__webglFramebuffer,
+c=a.width,a=a.height,f=e=0):(b=null,c=Ha,a=Da,e=Pa,f=Qa);b!==ha&&(d.bindFramebuffer(d.FRAMEBUFFER,b),d.viewport(e,f,c,a),ha=b)}function ta(a){switch(a){case THREE.NearestFilter:case THREE.NearestMipMapNearestFilter:case THREE.NearestMipMapLinearFilter:return d.NEAREST;default:return d.LINEAR}}function N(a){switch(a){case THREE.RepeatWrapping:return d.REPEAT;case THREE.ClampToEdgeWrapping:return d.CLAMP_TO_EDGE;case THREE.MirroredRepeatWrapping:return d.MIRRORED_REPEAT;case THREE.NearestFilter:return d.NEAREST;
+case THREE.NearestMipMapNearestFilter:return d.NEAREST_MIPMAP_NEAREST;case THREE.NearestMipMapLinearFilter:return d.NEAREST_MIPMAP_LINEAR;case THREE.LinearFilter:return d.LINEAR;case THREE.LinearMipMapNearestFilter:return d.LINEAR_MIPMAP_NEAREST;case THREE.LinearMipMapLinearFilter:return d.LINEAR_MIPMAP_LINEAR;case THREE.ByteType:return d.BYTE;case THREE.UnsignedByteType:return d.UNSIGNED_BYTE;case THREE.ShortType:return d.SHORT;case THREE.UnsignedShortType:return d.UNSIGNED_SHORT;case THREE.IntType:return d.INT;
+case THREE.UnsignedShortType:return d.UNSIGNED_INT;case THREE.FloatType:return d.FLOAT;case THREE.AlphaFormat:return d.ALPHA;case THREE.RGBFormat:return d.RGB;case THREE.RGBAFormat:return d.RGBA;case THREE.LuminanceFormat:return d.LUMINANCE;case THREE.LuminanceAlphaFormat:return d.LUMINANCE_ALPHA}return 0}var a=a||{},ma=a.canvas!==void 0?a.canvas:document.createElement("canvas"),va=a.precision!==void 0?a.precision:"highp",xa=a.antialias!==void 0?a.antialias:!1,Aa=a.stencil!==void 0?a.stencil:!0,Xa=
+a.preserveDrawingBuffer!==void 0?a.preserveDrawingBuffer:!1,Q=a.clearColor!==void 0?new THREE.Color(a.clearColor):new THREE.Color(0),S=a.clearAlpha!==void 0?a.clearAlpha:0,la=a.maxLights!==void 0?a.maxLights:4;this.domElement=ma;this.context=null;this.autoUpdateScene=this.autoUpdateObjects=this.sortObjects=this.autoClearStencil=this.autoClearDepth=this.autoClearColor=this.autoClear=!0;this.physicallyBasedShading=this.gammaOutput=this.gammaInput=!1;this.shadowMapBias=0.0039;this.shadowMapDarkness=
+0.5;this.shadowMapHeight=this.shadowMapWidth=512;this.shadowCameraNear=1;this.shadowCameraFar=5E3;this.shadowCameraFov=50;this.shadowMap=[];this.shadowMapEnabled=!1;this.shadowMapSoft=this.shadowMapAutoUpdate=!0;this.maxMorphTargets=8;this.info={memory:{programs:0,geometries:0,textures:0},render:{calls:0,vertices:0,faces:0}};var D=this,d,ca=[],ra=null,ha=null,na=-1,sa=null,Ea=0,Fa=null,Ba=null,ya=null,wa=null,Oa=null,Sa=null,Ta=null,Ua=null,Ia=null,Pa=0,Qa=0,Ha=0,Da=0,ua=[new THREE.Vector4,new THREE.Vector4,
+new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4],za=new THREE.Matrix4,La=new Float32Array(16),Ka=new Float32Array(16),Ca=new THREE.Vector4,Ra={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[],distances:[]}},ja,Ja=[],Ga,Na,w={},Va=!1;d=function(){var a;try{if(!(a=ma.getContext("experimental-webgl",{antialias:xa,stencil:Aa,preserveDrawingBuffer:Xa})))throw"Error creating WebGL context.";console.log(navigator.userAgent+" | "+
+a.getParameter(a.VERSION)+" | "+a.getParameter(a.VENDOR)+" | "+a.getParameter(a.RENDERER)+" | "+a.getParameter(a.SHADING_LANGUAGE_VERSION))}catch(b){console.error(b)}return a}();d.clearColor(0,0,0,1);d.clearDepth(1);d.clearStencil(0);d.enable(d.DEPTH_TEST);d.depthFunc(d.LEQUAL);d.frontFace(d.CCW);d.cullFace(d.BACK);d.enable(d.CULL_FACE);d.enable(d.BLEND);d.blendEquation(d.FUNC_ADD);d.blendFunc(d.SRC_ALPHA,d.ONE_MINUS_SRC_ALPHA);d.clearColor(Q.r,Q.g,Q.b,S);(function(){w.vertices=new Float32Array(16);
+w.faces=new Uint16Array(6);var a=0;w.vertices[a++]=-1;w.vertices[a++]=-1;w.vertices[a++]=0;w.vertices[a++]=1;w.vertices[a++]=1;w.vertices[a++]=-1;w.vertices[a++]=1;w.vertices[a++]=1;w.vertices[a++]=1;w.vertices[a++]=1;w.vertices[a++]=1;w.vertices[a++]=0;w.vertices[a++]=-1;w.vertices[a++]=1;w.vertices[a++]=0;a=w.vertices[a++]=0;w.faces[a++]=0;w.faces[a++]=1;w.faces[a++]=2;w.faces[a++]=0;w.faces[a++]=2;w.faces[a++]=3;w.vertexBuffer=d.createBuffer();w.elementBuffer=d.createBuffer();d.bindBuffer(d.ARRAY_BUFFER,
+w.vertexBuffer);d.bufferData(d.ARRAY_BUFFER,w.vertices,d.STATIC_DRAW);d.bindBuffer(d.ELEMENT_ARRAY_BUFFER,w.elementBuffer);d.bufferData(d.ELEMENT_ARRAY_BUFFER,w.faces,d.STATIC_DRAW);w.program=d.createProgram();d.attachShader(w.program,L("fragment",THREE.ShaderLib.sprite.fragmentShader));d.attachShader(w.program,L("vertex",THREE.ShaderLib.sprite.vertexShader));d.linkProgram(w.program);w.attributes={};w.uniforms={};w.attributes.position=d.getAttribLocation(w.program,"position");w.attributes.uv=d.getAttribLocation(w.program,
+"uv");w.uniforms.uvOffset=d.getUniformLocation(w.program,"uvOffset");w.uniforms.uvScale=d.getUniformLocation(w.program,"uvScale");w.uniforms.rotation=d.getUniformLocation(w.program,"rotation");w.uniforms.scale=d.getUniformLocation(w.program,"scale");w.uniforms.alignment=d.getUniformLocation(w.program,"alignment");w.uniforms.color=d.getUniformLocation(w.program,"color");w.uniforms.map=d.getUniformLocation(w.program,"map");w.uniforms.opacity=d.getUniformLocation(w.program,"opacity");w.uniforms.useScreenCoordinates=
+d.getUniformLocation(w.program,"useScreenCoordinates");w.uniforms.affectedByDistance=d.getUniformLocation(w.program,"affectedByDistance");w.uniforms.screenPosition=d.getUniformLocation(w.program,"screenPosition");w.uniforms.modelViewMatrix=d.getUniformLocation(w.program,"modelViewMatrix");w.uniforms.projectionMatrix=d.getUniformLocation(w.program,"projectionMatrix")})();(function(){var a=THREE.ShaderLib.depthRGBA,b=THREE.UniformsUtils.clone(a.uniforms);Ga=new THREE.ShaderMaterial({fragmentShader:a.fragmentShader,
+vertexShader:a.vertexShader,uniforms:b});Na=new THREE.ShaderMaterial({fragmentShader:a.fragmentShader,vertexShader:a.vertexShader,uniforms:b,morphTargets:!0});Ga._shadowPass=!0;Na._shadowPass=!0})();this.context=d;var Wa=d.getParameter(d.MAX_VERTEX_TEXTURE_IMAGE_UNITS)>0;this.getContext=function(){return d};this.supportsVertexTextures=function(){return Wa};this.setSize=function(a,b){ma.width=a;ma.height=b;this.setViewport(0,0,ma.width,ma.height)};this.setViewport=function(a,b,c,e){Pa=a;Qa=b;Ha=c;
+Da=e;d.viewport(Pa,Qa,Ha,Da)};this.setScissor=function(a,b,c,e){d.scissor(a,b,c,e)};this.enableScissorTest=function(a){a?d.enable(d.SCISSOR_TEST):d.disable(d.SCISSOR_TEST)};this.setClearColorHex=function(a,b){Q.setHex(a);S=b;d.clearColor(Q.r,Q.g,Q.b,S)};this.setClearColor=function(a,b){Q.copy(a);S=b;d.clearColor(Q.r,Q.g,Q.b,S)};this.getClearColor=function(){return Q};this.getClearAlpha=function(){return S};this.clear=function(a,b,c){var e=0;if(a===void 0||a)e|=d.COLOR_BUFFER_BIT;if(b===void 0||b)e|=
+d.DEPTH_BUFFER_BIT;if(c===void 0||c)e|=d.STENCIL_BUFFER_BIT;d.clear(e)};this.clearTarget=function(a,b,c,d){pa(a);this.clear(b,c,d)};this.deallocateObject=function(a){if(a.__webglInit)if(a.__webglInit=!1,delete a._modelViewMatrix,delete a._normalMatrixArray,delete a._modelViewMatrixArray,delete a._objectMatrixArray,a instanceof THREE.Mesh)for(var b in a.geometry.geometryGroups){var c=a.geometry.geometryGroups[b];d.deleteBuffer(c.__webglVertexBuffer);d.deleteBuffer(c.__webglNormalBuffer);d.deleteBuffer(c.__webglTangentBuffer);
+d.deleteBuffer(c.__webglColorBuffer);d.deleteBuffer(c.__webglUVBuffer);d.deleteBuffer(c.__webglUV2Buffer);d.deleteBuffer(c.__webglSkinVertexABuffer);d.deleteBuffer(c.__webglSkinVertexBBuffer);d.deleteBuffer(c.__webglSkinIndicesBuffer);d.deleteBuffer(c.__webglSkinWeightsBuffer);d.deleteBuffer(c.__webglFaceBuffer);d.deleteBuffer(c.__webglLineBuffer);if(c.numMorphTargets)for(var e=0,f=c.numMorphTargets;e<f;e++)d.deleteBuffer(c.__webglMorphTargetsBuffers[e]);if(c.__webglCustomAttributesList)for(e in e=
+void 0,c.__webglCustomAttributesList)d.deleteBuffer(c.__webglCustomAttributesList[e].buffer);D.info.memory.geometries--}else if(a instanceof THREE.Ribbon)a=a.geometry,d.deleteBuffer(a.__webglVertexBuffer),d.deleteBuffer(a.__webglColorBuffer),D.info.memory.geometries--;else if(a instanceof THREE.Line)a=a.geometry,d.deleteBuffer(a.__webglVertexBuffer),d.deleteBuffer(a.__webglColorBuffer),D.info.memory.geometries--;else if(a instanceof THREE.ParticleSystem)a=a.geometry,d.deleteBuffer(a.__webglVertexBuffer),
+d.deleteBuffer(a.__webglColorBuffer),D.info.memory.geometries--};this.deallocateTexture=function(a){if(a.__webglInit)a.__webglInit=!1,d.deleteTexture(a.__webglTexture),D.info.memory.textures--};this.updateShadowMap=function(a,b){p(a,b)};this.render=function(a,b,c,e){var f,g,q,l,C=a.lights,u=a.fog;na=-1;this.autoUpdateObjects&&this.initWebGLObjects(a);this.shadowMapEnabled&&this.shadowMapAutoUpdate&&p(a,b);D.info.render.calls=0;D.info.render.vertices=0;D.info.render.faces=0;b.parent===void 0&&(console.warn("DEPRECATED: Camera hasn't been added to a Scene. Adding it..."),
+a.add(b));this.autoUpdateScene&&a.updateMatrixWorld();b.matrixWorldInverse.getInverse(b.matrixWorld);b.matrixWorldInverse.flattenToArray(Ka);b.projectionMatrix.flattenToArray(La);za.multiply(b.projectionMatrix,b.matrixWorldInverse);i(za);pa(c);(this.autoClear||e)&&this.clear(this.autoClearColor,this.autoClearDepth,this.autoClearStencil);l=a.__webglObjects;e=0;for(f=l.length;e<f;e++)if(g=l[e],q=g.object,g.render=!1,q.visible&&(!(q instanceof THREE.Mesh)||!q.frustumCulled||h(q))){q.matrixWorld.flattenToArray(q._objectMatrixArray);
+qa(q,b,!0);var k=g,m=k.object,y=k.buffer,x=void 0,x=x=void 0,x=m.material;if(x instanceof THREE.MeshFaceMaterial){if(x=y.materialIndex,x>=0)x=m.geometry.materials[x],x.transparent?(k.transparent=x,k.opaque=null):(k.opaque=x,k.transparent=null)}else if(x)x.transparent?(k.transparent=x,k.opaque=null):(k.opaque=x,k.transparent=null);g.render=!0;if(this.sortObjects)q.renderDepth?g.z=q.renderDepth:(Ca.copy(q.position),za.multiplyVector3(Ca),g.z=Ca.z)}this.sortObjects&&l.sort(r);l=a.__webglObjectsImmediate;
+e=0;for(f=l.length;e<f;e++)if(g=l[e],q=g.object,q.visible)q.matrixAutoUpdate&&q.matrixWorld.flattenToArray(q._objectMatrixArray),qa(q,b,!0),q=g.object.material,q.transparent?(g.transparent=q,g.opaque=null):(g.opaque=q,g.transparent=null);a.overrideMaterial?(M(a.overrideMaterial.blending),ia(a.overrideMaterial.depthTest),ka(a.overrideMaterial.depthWrite),F(a.overrideMaterial.polygonOffset,a.overrideMaterial.polygonOffsetFactor,a.overrideMaterial.polygonOffsetUnits),j(a.__webglObjects,!1,"",b,C,u,!0,
+a.overrideMaterial),n(a.__webglObjectsImmediate,"",b,C,u,!1,a.overrideMaterial)):(M(THREE.NormalBlending),j(a.__webglObjects,!0,"opaque",b,C,u,!1),n(a.__webglObjectsImmediate,"opaque",b,C,u,!1),j(a.__webglObjects,!1,"transparent",b,C,u,!0),n(a.__webglObjectsImmediate,"transparent",b,C,u,!0));if(a.__webglSprites.length){q=w.attributes;C=w.uniforms;u=Da/Ha;e=[];f=Ha*0.5;l=Da*0.5;g=!0;d.useProgram(w.program);ra=w.program;sa=wa=ya=-1;Va||(d.enableVertexAttribArray(w.attributes.position),d.enableVertexAttribArray(w.attributes.uv),
+Va=!0);d.disable(d.CULL_FACE);d.enable(d.BLEND);d.depthMask(!0);d.bindBuffer(d.ARRAY_BUFFER,w.vertexBuffer);d.vertexAttribPointer(q.position,2,d.FLOAT,!1,16,0);d.vertexAttribPointer(q.uv,2,d.FLOAT,!1,16,8);d.bindBuffer(d.ELEMENT_ARRAY_BUFFER,w.elementBuffer);d.uniformMatrix4fv(C.projectionMatrix,!1,La);d.activeTexture(d.TEXTURE0);d.uniform1i(C.map,0);q=0;for(k=a.__webglSprites.length;q<k;q++)if(m=a.__webglSprites[q],m.visible&&m.opacity!==0)m.useScreenCoordinates?m.z=-m.position.z:(m._modelViewMatrix.multiplyToArray(b.matrixWorldInverse,
+m.matrixWorld,m._modelViewMatrixArray),m.z=-m._modelViewMatrix.n34);a.__webglSprites.sort(r);q=0;for(k=a.__webglSprites.length;q<k;q++)m=a.__webglSprites[q],m.visible&&m.opacity!==0&&m.map&&m.map.image&&m.map.image.width&&(m.useScreenCoordinates?(d.uniform1i(C.useScreenCoordinates,1),d.uniform3f(C.screenPosition,(m.position.x-f)/f,(l-m.position.y)/l,Math.max(0,Math.min(1,m.position.z)))):(d.uniform1i(C.useScreenCoordinates,0),d.uniform1i(C.affectedByDistance,m.affectedByDistance?1:0),d.uniformMatrix4fv(C.modelViewMatrix,
+!1,m._modelViewMatrixArray)),b=m.map.image.width/(m.scaleByViewport?Da:1),e[0]=b*u*m.scale.x,e[1]=b*m.scale.y,d.uniform2f(C.uvScale,m.uvScale.x,m.uvScale.y),d.uniform2f(C.uvOffset,m.uvOffset.x,m.uvOffset.y),d.uniform2f(C.alignment,m.alignment.x,m.alignment.y),d.uniform1f(C.opacity,m.opacity),d.uniform3f(C.color,m.color.r,m.color.g,m.color.b),d.uniform1f(C.rotation,m.rotation),d.uniform2fv(C.scale,e),m.mergeWith3D&&!g?(d.enable(d.DEPTH_TEST),g=!0):!m.mergeWith3D&&g&&(d.disable(d.DEPTH_TEST),g=!1),
+M(m.blending),oa(m.map,0),d.drawElements(d.TRIANGLES,6,d.UNSIGNED_SHORT,0));d.enable(d.CULL_FACE);d.enable(d.DEPTH_TEST);d.depthMask(Oa)}c&&c.minFilter!==THREE.NearestFilter&&c.minFilter!==THREE.LinearFilter&&(c instanceof THREE.WebGLRenderTargetCube?(d.bindTexture(d.TEXTURE_CUBE_MAP,c.__webglTexture),d.generateMipmap(d.TEXTURE_CUBE_MAP),d.bindTexture(d.TEXTURE_CUBE_MAP,null)):(d.bindTexture(d.TEXTURE_2D,c.__webglTexture),d.generateMipmap(d.TEXTURE_2D),d.bindTexture(d.TEXTURE_2D,null)))};this.initWebGLObjects=
+function(a){if(!a.__webglObjects)a.__webglObjects=[],a.__webglObjectsImmediate=[],a.__webglSprites=[];for(;a.__objectsAdded.length;){var f=a.__objectsAdded[0],g=a,i=void 0,h=void 0,j=void 0;if(!f.__webglInit)if(f.__webglInit=!0,f._modelViewMatrix=new THREE.Matrix4,f._normalMatrixArray=new Float32Array(9),f._modelViewMatrixArray=new Float32Array(16),f._objectMatrixArray=new Float32Array(16),f.matrixWorld.flattenToArray(f._objectMatrixArray),f instanceof THREE.Mesh){h=f.geometry;if(h.geometryGroups===
+void 0){var j=h,q=void 0,l=void 0,n=void 0,r=void 0,k=void 0,m=void 0,p=void 0,x={},w=j.morphTargets.length;j.geometryGroups={};q=0;for(l=j.faces.length;q<l;q++)n=j.faces[q],r=n.materialIndex,m=r!==void 0?r:-1,x[m]===void 0&&(x[m]={hash:m,counter:0}),p=x[m].hash+"_"+x[m].counter,j.geometryGroups[p]===void 0&&(j.geometryGroups[p]={faces3:[],faces4:[],materialIndex:r,vertices:0,numMorphTargets:w}),k=n instanceof THREE.Face3?3:4,j.geometryGroups[p].vertices+k>65535&&(x[m].counter+=1,p=x[m].hash+"_"+
+x[m].counter,j.geometryGroups[p]===void 0&&(j.geometryGroups[p]={faces3:[],faces4:[],materialIndex:r,vertices:0,numMorphTargets:w})),n instanceof THREE.Face3?j.geometryGroups[p].faces3.push(q):j.geometryGroups[p].faces4.push(q),j.geometryGroups[p].vertices+=k;j.geometryGroupsList=[];q=void 0;for(q in j.geometryGroups)j.geometryGroups[q].id=Ea++,j.geometryGroupsList.push(j.geometryGroups[q])}for(i in h.geometryGroups)if(j=h.geometryGroups[i],!j.__webglVertexBuffer){q=j;q.__webglVertexBuffer=d.createBuffer();
+q.__webglNormalBuffer=d.createBuffer();q.__webglTangentBuffer=d.createBuffer();q.__webglColorBuffer=d.createBuffer();q.__webglUVBuffer=d.createBuffer();q.__webglUV2Buffer=d.createBuffer();q.__webglSkinVertexABuffer=d.createBuffer();q.__webglSkinVertexBBuffer=d.createBuffer();q.__webglSkinIndicesBuffer=d.createBuffer();q.__webglSkinWeightsBuffer=d.createBuffer();q.__webglFaceBuffer=d.createBuffer();q.__webglLineBuffer=d.createBuffer();if(q.numMorphTargets){n=l=void 0;q.__webglMorphTargetsBuffers=[];
+l=0;for(n=q.numMorphTargets;l<n;l++)q.__webglMorphTargetsBuffers.push(d.createBuffer())}D.info.memory.geometries++;r=f;k=r.geometry;l=j.faces3;m=j.faces4;q=l.length*3+m.length*4;n=l.length*1+m.length*2;m=l.length*3+m.length*4;l=c(r,j);p=l.map||l.lightMap||l instanceof THREE.ShaderMaterial?!0:!1;x=l instanceof THREE.MeshBasicMaterial&&!l.envMap||l instanceof THREE.MeshDepthMaterial?!1:l&&l.shading!==void 0&&l.shading===THREE.SmoothShading?THREE.SmoothShading:THREE.FlatShading;w=l.vertexColors?l.vertexColors:
+!1;j.__vertexArray=new Float32Array(q*3);if(x)j.__normalArray=new Float32Array(q*3);if(k.hasTangents)j.__tangentArray=new Float32Array(q*4);if(w)j.__colorArray=new Float32Array(q*3);if(p){if(k.faceUvs.length>0||k.faceVertexUvs.length>0)j.__uvArray=new Float32Array(q*2);if(k.faceUvs.length>1||k.faceVertexUvs.length>1)j.__uv2Array=new Float32Array(q*2)}if(r.geometry.skinWeights.length&&r.geometry.skinIndices.length)j.__skinVertexAArray=new Float32Array(q*4),j.__skinVertexBArray=new Float32Array(q*4),
+j.__skinIndexArray=new Float32Array(q*4),j.__skinWeightArray=new Float32Array(q*4);j.__faceArray=new Uint16Array(n*3);j.__lineArray=new Uint16Array(m*2);if(j.numMorphTargets){j.__morphTargetsArrays=[];r=0;for(k=j.numMorphTargets;r<k;r++)j.__morphTargetsArrays.push(new Float32Array(q*3))}j.__needsSmoothNormals=x===THREE.SmoothShading;j.__uvType=p;j.__vertexColorType=w;j.__normalType=x;j.__webglFaceCount=n*3;j.__webglLineCount=m*2;if(l.attributes){if(j.__webglCustomAttributesList===void 0)j.__webglCustomAttributesList=
+[];n=void 0;for(n in l.attributes){var r=l.attributes[n],k={},F;for(F in r)k[F]=r[F];if(!k.__webglInitialized||k.createUniqueBuffers)k.__webglInitialized=!0,m=1,k.type==="v2"?m=2:k.type==="v3"?m=3:k.type==="v4"?m=4:k.type==="c"&&(m=3),k.size=m,k.array=new Float32Array(q*m),k.buffer=d.createBuffer(),k.buffer.belongsToAttribute=n,r.needsUpdate=!0,k.__original=r;j.__webglCustomAttributesList.push(k)}}j.__inittedArrays=!0;h.__dirtyVertices=!0;h.__dirtyMorphTargets=!0;h.__dirtyElements=!0;h.__dirtyUvs=
+!0;h.__dirtyNormals=!0;h.__dirtyTangents=!0;h.__dirtyColors=!0}}else if(f instanceof THREE.Ribbon){if(h=f.geometry,!h.__webglVertexBuffer)j=h,j.__webglVertexBuffer=d.createBuffer(),j.__webglColorBuffer=d.createBuffer(),D.info.memory.geometries++,j=h,q=j.vertices.length,j.__vertexArray=new Float32Array(q*3),j.__colorArray=new Float32Array(q*3),j.__webglVertexCount=q,h.__dirtyVertices=!0,h.__dirtyColors=!0}else if(f instanceof THREE.Line){if(h=f.geometry,!h.__webglVertexBuffer)j=h,j.__webglVertexBuffer=
+d.createBuffer(),j.__webglColorBuffer=d.createBuffer(),D.info.memory.geometries++,j=h,q=f,l=j.vertices.length,j.__vertexArray=new Float32Array(l*3),j.__colorArray=new Float32Array(l*3),j.__webglLineCount=l,b(j,q),h.__dirtyVertices=!0,h.__dirtyColors=!0}else if(f instanceof THREE.ParticleSystem&&(h=f.geometry,!h.__webglVertexBuffer))j=h,j.__webglVertexBuffer=d.createBuffer(),j.__webglColorBuffer=d.createBuffer(),D.info.geometries++,j=h,q=f,l=j.vertices.length,j.__vertexArray=new Float32Array(l*3),
+j.__colorArray=new Float32Array(l*3),j.__sortArray=[],j.__webglParticleCount=l,b(j,q),h.__dirtyVertices=!0,h.__dirtyColors=!0;if(!f.__webglActive){if(f instanceof THREE.Mesh)for(i in h=f.geometry,h.geometryGroups)j=h.geometryGroups[i],y(g.__webglObjects,j,f);else f instanceof THREE.Ribbon||f instanceof THREE.Line||f instanceof THREE.ParticleSystem?(h=f.geometry,y(g.__webglObjects,h,f)):THREE.MarchingCubes!==void 0&&f instanceof THREE.MarchingCubes||f.immediateRenderCallback?g.__webglObjectsImmediate.push({object:f,
+opaque:null,transparent:null}):f instanceof THREE.Sprite&&g.__webglSprites.push(f);f.__webglActive=!0}a.__objectsAdded.splice(0,1)}for(;a.__objectsRemoved.length;){f=a.__objectsRemoved[0];g=a;if(f instanceof THREE.Mesh||f instanceof THREE.ParticleSystem||f instanceof THREE.Ribbon||f instanceof THREE.Line)I(g.__webglObjects,f);else if(f instanceof THREE.Sprite){g=g.__webglSprites;i=f;for(h=g.length-1;h>=0;h--)g[h]===i&&g.splice(h,1)}else(f instanceof THREE.MarchingCubes||f.immediateRenderCallback)&&
+I(g.__webglObjectsImmediate,f);f.__webglActive=!1;a.__objectsRemoved.splice(0,1)}f=0;for(g=a.__webglObjects.length;f<g;f++)if(F=a.__webglObjects[f].object,i=F.geometry,h=n=l=void 0,F instanceof THREE.Mesh){j=0;for(q=i.geometryGroupsList.length;j<q;j++)if(l=i.geometryGroupsList[j],h=c(F,l),n=h.attributes&&u(h),i.__dirtyVertices||i.__dirtyMorphTargets||i.__dirtyElements||i.__dirtyUvs||i.__dirtyNormals||i.__dirtyColors||i.__dirtyTangents||n)if(n=d.DYNAMIC_DRAW,r=!i.dynamic,l.__inittedArrays){var E=m=
+k=void 0,s=void 0,G=void 0,L=void 0,v=void 0,Z=void 0,$=void 0,X=void 0,P=void 0,R=E=L=void 0,z=void 0,A=void 0,B=void 0,Y=s=void 0,aa=void 0,T=s=$=P=void 0,U=void 0,M=B=A=z=v=void 0,J=s=B=A=z=M=B=A=z=M=B=A=z=void 0,W=void 0,N=L=void 0,S=void 0,V=void 0,ca=void 0,da=void 0,H=R=V=W=0,Q=0,ba=J=E=0,O=v=Y=0,t=0,ea=void 0,O=l.__vertexArray,S=l.__uvArray,t=l.__uv2Array,N=l.__normalArray,G=l.__tangentArray,aa=l.__colorArray,T=l.__skinVertexAArray,U=l.__skinVertexBArray,Z=l.__skinIndexArray,ga=l.__skinWeightArray,
+M=l.__morphTargetsArrays,p=l.__webglCustomAttributesList,o=void 0,o=l.__faceArray,ea=l.__lineArray,ha=l.__needsSmoothNormals,P=l.__vertexColorType,X=l.__uvType,L=l.__normalType,$=F.geometry,ia=$.__dirtyElements,ka=$.__dirtyUvs,pa=$.__dirtyNormals,qa=$.__dirtyTangents,ta=$.__dirtyColors,ca=$.__dirtyMorphTargets,da=$.vertices,x=l.faces3,w=l.faces4,fa=$.faces,oa=$.faceVertexUvs[0],ra=$.faceVertexUvs[1],ja=$.skinVerticesA,la=$.skinVerticesB,ma=$.skinIndices,na=$.skinWeights,sa=$.morphTargets;if($.__dirtyVertices){k=
+0;for(m=x.length;k<m;k++)s=fa[x[k]],z=da[s.a].position,A=da[s.b].position,B=da[s.c].position,O[V]=z.x,O[V+1]=z.y,O[V+2]=z.z,O[V+3]=A.x,O[V+4]=A.y,O[V+5]=A.z,O[V+6]=B.x,O[V+7]=B.y,O[V+8]=B.z,V+=9;k=0;for(m=w.length;k<m;k++)s=fa[w[k]],z=da[s.a].position,A=da[s.b].position,B=da[s.c].position,s=da[s.d].position,O[V]=z.x,O[V+1]=z.y,O[V+2]=z.z,O[V+3]=A.x,O[V+4]=A.y,O[V+5]=A.z,O[V+6]=B.x,O[V+7]=B.y,O[V+8]=B.z,O[V+9]=s.x,O[V+10]=s.y,O[V+11]=s.z,V+=12;d.bindBuffer(d.ARRAY_BUFFER,l.__webglVertexBuffer);d.bufferData(d.ARRAY_BUFFER,
+O,n)}if(ca){V=0;for(ca=sa.length;V<ca;V++){k=O=0;for(m=x.length;k<m;k++)s=fa[x[k]],z=sa[V].vertices[s.a].position,A=sa[V].vertices[s.b].position,B=sa[V].vertices[s.c].position,da=M[V],da[O]=z.x,da[O+1]=z.y,da[O+2]=z.z,da[O+3]=A.x,da[O+4]=A.y,da[O+5]=A.z,da[O+6]=B.x,da[O+7]=B.y,da[O+8]=B.z,O+=9;k=0;for(m=w.length;k<m;k++)s=fa[w[k]],z=sa[V].vertices[s.a].position,A=sa[V].vertices[s.b].position,B=sa[V].vertices[s.c].position,s=sa[V].vertices[s.d].position,da=M[V],da[O]=z.x,da[O+1]=z.y,da[O+2]=z.z,da[O+
+3]=A.x,da[O+4]=A.y,da[O+5]=A.z,da[O+6]=B.x,da[O+7]=B.y,da[O+8]=B.z,da[O+9]=s.x,da[O+10]=s.y,da[O+11]=s.z,O+=12;d.bindBuffer(d.ARRAY_BUFFER,l.__webglMorphTargetsBuffers[V]);d.bufferData(d.ARRAY_BUFFER,M[V],n)}}if(na.length){k=0;for(m=x.length;k<m;k++)s=fa[x[k]],z=na[s.a],A=na[s.b],B=na[s.c],ga[v]=z.x,ga[v+1]=z.y,ga[v+2]=z.z,ga[v+3]=z.w,ga[v+4]=A.x,ga[v+5]=A.y,ga[v+6]=A.z,ga[v+7]=A.w,ga[v+8]=B.x,ga[v+9]=B.y,ga[v+10]=B.z,ga[v+11]=B.w,z=ma[s.a],A=ma[s.b],B=ma[s.c],Z[v]=z.x,Z[v+1]=z.y,Z[v+2]=z.z,Z[v+3]=
+z.w,Z[v+4]=A.x,Z[v+5]=A.y,Z[v+6]=A.z,Z[v+7]=A.w,Z[v+8]=B.x,Z[v+9]=B.y,Z[v+10]=B.z,Z[v+11]=B.w,z=ja[s.a],A=ja[s.b],B=ja[s.c],T[v]=z.x,T[v+1]=z.y,T[v+2]=z.z,T[v+3]=1,T[v+4]=A.x,T[v+5]=A.y,T[v+6]=A.z,T[v+7]=1,T[v+8]=B.x,T[v+9]=B.y,T[v+10]=B.z,T[v+11]=1,z=la[s.a],A=la[s.b],B=la[s.c],U[v]=z.x,U[v+1]=z.y,U[v+2]=z.z,U[v+3]=1,U[v+4]=A.x,U[v+5]=A.y,U[v+6]=A.z,U[v+7]=1,U[v+8]=B.x,U[v+9]=B.y,U[v+10]=B.z,U[v+11]=1,v+=12;k=0;for(m=w.length;k<m;k++)s=fa[w[k]],z=na[s.a],A=na[s.b],B=na[s.c],M=na[s.d],ga[v]=z.x,ga[v+
+1]=z.y,ga[v+2]=z.z,ga[v+3]=z.w,ga[v+4]=A.x,ga[v+5]=A.y,ga[v+6]=A.z,ga[v+7]=A.w,ga[v+8]=B.x,ga[v+9]=B.y,ga[v+10]=B.z,ga[v+11]=B.w,ga[v+12]=M.x,ga[v+13]=M.y,ga[v+14]=M.z,ga[v+15]=M.w,z=ma[s.a],A=ma[s.b],B=ma[s.c],M=ma[s.d],Z[v]=z.x,Z[v+1]=z.y,Z[v+2]=z.z,Z[v+3]=z.w,Z[v+4]=A.x,Z[v+5]=A.y,Z[v+6]=A.z,Z[v+7]=A.w,Z[v+8]=B.x,Z[v+9]=B.y,Z[v+10]=B.z,Z[v+11]=B.w,Z[v+12]=M.x,Z[v+13]=M.y,Z[v+14]=M.z,Z[v+15]=M.w,z=ja[s.a],A=ja[s.b],B=ja[s.c],M=ja[s.d],T[v]=z.x,T[v+1]=z.y,T[v+2]=z.z,T[v+3]=1,T[v+4]=A.x,T[v+5]=A.y,
+T[v+6]=A.z,T[v+7]=1,T[v+8]=B.x,T[v+9]=B.y,T[v+10]=B.z,T[v+11]=1,T[v+12]=M.x,T[v+13]=M.y,T[v+14]=M.z,T[v+15]=1,z=la[s.a],A=la[s.b],B=la[s.c],s=la[s.d],U[v]=z.x,U[v+1]=z.y,U[v+2]=z.z,U[v+3]=1,U[v+4]=A.x,U[v+5]=A.y,U[v+6]=A.z,U[v+7]=1,U[v+8]=B.x,U[v+9]=B.y,U[v+10]=B.z,U[v+11]=1,U[v+12]=s.x,U[v+13]=s.y,U[v+14]=s.z,U[v+15]=1,v+=16;v>0&&(d.bindBuffer(d.ARRAY_BUFFER,l.__webglSkinVertexABuffer),d.bufferData(d.ARRAY_BUFFER,T,n),d.bindBuffer(d.ARRAY_BUFFER,l.__webglSkinVertexBBuffer),d.bufferData(d.ARRAY_BUFFER,
+U,n),d.bindBuffer(d.ARRAY_BUFFER,l.__webglSkinIndicesBuffer),d.bufferData(d.ARRAY_BUFFER,Z,n),d.bindBuffer(d.ARRAY_BUFFER,l.__webglSkinWeightsBuffer),d.bufferData(d.ARRAY_BUFFER,ga,n))}if(ta&&P){k=0;for(m=x.length;k<m;k++)s=fa[x[k]],v=s.vertexColors,Z=s.color,v.length===3&&P===THREE.VertexColors?(s=v[0],T=v[1],U=v[2]):U=T=s=Z,aa[Y]=s.r,aa[Y+1]=s.g,aa[Y+2]=s.b,aa[Y+3]=T.r,aa[Y+4]=T.g,aa[Y+5]=T.b,aa[Y+6]=U.r,aa[Y+7]=U.g,aa[Y+8]=U.b,Y+=9;k=0;for(m=w.length;k<m;k++)s=fa[w[k]],v=s.vertexColors,Z=s.color,
+v.length===4&&P===THREE.VertexColors?(s=v[0],T=v[1],U=v[2],v=v[3]):v=U=T=s=Z,aa[Y]=s.r,aa[Y+1]=s.g,aa[Y+2]=s.b,aa[Y+3]=T.r,aa[Y+4]=T.g,aa[Y+5]=T.b,aa[Y+6]=U.r,aa[Y+7]=U.g,aa[Y+8]=U.b,aa[Y+9]=v.r,aa[Y+10]=v.g,aa[Y+11]=v.b,Y+=12;Y>0&&(d.bindBuffer(d.ARRAY_BUFFER,l.__webglColorBuffer),d.bufferData(d.ARRAY_BUFFER,aa,n))}if(qa&&$.hasTangents){k=0;for(m=x.length;k<m;k++)s=fa[x[k]],$=s.vertexTangents,Y=$[0],aa=$[1],P=$[2],G[J]=Y.x,G[J+1]=Y.y,G[J+2]=Y.z,G[J+3]=Y.w,G[J+4]=aa.x,G[J+5]=aa.y,G[J+6]=aa.z,G[J+
+7]=aa.w,G[J+8]=P.x,G[J+9]=P.y,G[J+10]=P.z,G[J+11]=P.w,J+=12;k=0;for(m=w.length;k<m;k++)s=fa[w[k]],$=s.vertexTangents,Y=$[0],aa=$[1],P=$[2],$=$[3],G[J]=Y.x,G[J+1]=Y.y,G[J+2]=Y.z,G[J+3]=Y.w,G[J+4]=aa.x,G[J+5]=aa.y,G[J+6]=aa.z,G[J+7]=aa.w,G[J+8]=P.x,G[J+9]=P.y,G[J+10]=P.z,G[J+11]=P.w,G[J+12]=$.x,G[J+13]=$.y,G[J+14]=$.z,G[J+15]=$.w,J+=16;d.bindBuffer(d.ARRAY_BUFFER,l.__webglTangentBuffer);d.bufferData(d.ARRAY_BUFFER,G,n)}if(pa&&L){k=0;for(m=x.length;k<m;k++)if(s=fa[x[k]],G=s.vertexNormals,L=s.normal,
+G.length===3&&ha)for(J=0;J<3;J++)L=G[J],N[E]=L.x,N[E+1]=L.y,N[E+2]=L.z,E+=3;else for(J=0;J<3;J++)N[E]=L.x,N[E+1]=L.y,N[E+2]=L.z,E+=3;k=0;for(m=w.length;k<m;k++)if(s=fa[w[k]],G=s.vertexNormals,L=s.normal,G.length===4&&ha)for(J=0;J<4;J++)L=G[J],N[E]=L.x,N[E+1]=L.y,N[E+2]=L.z,E+=3;else for(J=0;J<4;J++)N[E]=L.x,N[E+1]=L.y,N[E+2]=L.z,E+=3;d.bindBuffer(d.ARRAY_BUFFER,l.__webglNormalBuffer);d.bufferData(d.ARRAY_BUFFER,N,n)}if(ka&&oa&&X){k=0;for(m=x.length;k<m;k++)if(E=x[k],E=oa[E],E!==void 0)for(J=0;J<3;J++)N=
+E[J],S[R]=N.u,S[R+1]=N.v,R+=2;k=0;for(m=w.length;k<m;k++)if(E=w[k],E=oa[E],E!==void 0)for(J=0;J<4;J++)N=E[J],S[R]=N.u,S[R+1]=N.v,R+=2;R>0&&(d.bindBuffer(d.ARRAY_BUFFER,l.__webglUVBuffer),d.bufferData(d.ARRAY_BUFFER,S,n))}if(ka&&ra&&X){k=0;for(m=x.length;k<m;k++)if(E=x[k],R=ra[E],R!==void 0)for(J=0;J<3;J++)S=R[J],t[H]=S.u,t[H+1]=S.v,H+=2;k=0;for(m=w.length;k<m;k++)if(E=w[k],R=ra[E],R!==void 0)for(J=0;J<4;J++)S=R[J],t[H]=S.u,t[H+1]=S.v,H+=2;H>0&&(d.bindBuffer(d.ARRAY_BUFFER,l.__webglUV2Buffer),d.bufferData(d.ARRAY_BUFFER,
+t,n))}if(ia){k=0;for(m=x.length;k<m;k++)o[Q]=W,o[Q+1]=W+1,o[Q+2]=W+2,Q+=3,ea[ba]=W,ea[ba+1]=W+1,ea[ba+2]=W,ea[ba+3]=W+2,ea[ba+4]=W+1,ea[ba+5]=W+2,ba+=6,W+=3;k=0;for(m=w.length;k<m;k++)o[Q]=W,o[Q+1]=W+1,o[Q+2]=W+3,o[Q+3]=W+1,o[Q+4]=W+2,o[Q+5]=W+3,Q+=6,ea[ba]=W,ea[ba+1]=W+1,ea[ba+2]=W,ea[ba+3]=W+3,ea[ba+4]=W+1,ea[ba+5]=W+2,ea[ba+6]=W+2,ea[ba+7]=W+3,ba+=8,W+=4;d.bindBuffer(d.ELEMENT_ARRAY_BUFFER,l.__webglFaceBuffer);d.bufferData(d.ELEMENT_ARRAY_BUFFER,o,n);d.bindBuffer(d.ELEMENT_ARRAY_BUFFER,l.__webglLineBuffer);
+d.bufferData(d.ELEMENT_ARRAY_BUFFER,ea,n)}if(p){J=0;for(W=p.length;J<W;J++)if(o=p[J],o.__original.needsUpdate){t=0;if(o.size===1)if(o.boundTo===void 0||o.boundTo==="vertices"){k=0;for(m=x.length;k<m;k++)s=fa[x[k]],o.array[t]=o.value[s.a],o.array[t+1]=o.value[s.b],o.array[t+2]=o.value[s.c],t+=3;k=0;for(m=w.length;k<m;k++)s=fa[w[k]],o.array[t]=o.value[s.a],o.array[t+1]=o.value[s.b],o.array[t+2]=o.value[s.c],o.array[t+3]=o.value[s.d],t+=4}else{if(o.boundTo==="faces"){k=0;for(m=x.length;k<m;k++)ea=o.value[x[k]],
+o.array[t]=ea,o.array[t+1]=ea,o.array[t+2]=ea,t+=3;k=0;for(m=w.length;k<m;k++)ea=o.value[w[k]],o.array[t]=ea,o.array[t+1]=ea,o.array[t+2]=ea,o.array[t+3]=ea,t+=4}}else if(o.size===2)if(o.boundTo===void 0||o.boundTo==="vertices"){k=0;for(m=x.length;k<m;k++)s=fa[x[k]],z=o.value[s.a],A=o.value[s.b],B=o.value[s.c],o.array[t]=z.x,o.array[t+1]=z.y,o.array[t+2]=A.x,o.array[t+3]=A.y,o.array[t+4]=B.x,o.array[t+5]=B.y,t+=6;k=0;for(m=w.length;k<m;k++)s=fa[w[k]],z=o.value[s.a],A=o.value[s.b],B=o.value[s.c],s=
+o.value[s.d],o.array[t]=z.x,o.array[t+1]=z.y,o.array[t+2]=A.x,o.array[t+3]=A.y,o.array[t+4]=B.x,o.array[t+5]=B.y,o.array[t+6]=s.x,o.array[t+7]=s.y,t+=8}else{if(o.boundTo==="faces"){k=0;for(m=x.length;k<m;k++)B=A=z=ea=o.value[x[k]],o.array[t]=z.x,o.array[t+1]=z.y,o.array[t+2]=A.x,o.array[t+3]=A.y,o.array[t+4]=B.x,o.array[t+5]=B.y,t+=6;k=0;for(m=w.length;k<m;k++)s=B=A=z=ea=o.value[w[k]],o.array[t]=z.x,o.array[t+1]=z.y,o.array[t+2]=A.x,o.array[t+3]=A.y,o.array[t+4]=B.x,o.array[t+5]=B.y,o.array[t+6]=
+s.x,o.array[t+7]=s.y,t+=8}}else if(o.size===3)if(H=o.type==="c"?["r","g","b"]:["x","y","z"],o.boundTo===void 0||o.boundTo==="vertices"){k=0;for(m=x.length;k<m;k++)s=fa[x[k]],z=o.value[s.a],A=o.value[s.b],B=o.value[s.c],o.array[t]=z[H[0]],o.array[t+1]=z[H[1]],o.array[t+2]=z[H[2]],o.array[t+3]=A[H[0]],o.array[t+4]=A[H[1]],o.array[t+5]=A[H[2]],o.array[t+6]=B[H[0]],o.array[t+7]=B[H[1]],o.array[t+8]=B[H[2]],t+=9;k=0;for(m=w.length;k<m;k++)s=fa[w[k]],z=o.value[s.a],A=o.value[s.b],B=o.value[s.c],s=o.value[s.d],
+o.array[t]=z[H[0]],o.array[t+1]=z[H[1]],o.array[t+2]=z[H[2]],o.array[t+3]=A[H[0]],o.array[t+4]=A[H[1]],o.array[t+5]=A[H[2]],o.array[t+6]=B[H[0]],o.array[t+7]=B[H[1]],o.array[t+8]=B[H[2]],o.array[t+9]=s[H[0]],o.array[t+10]=s[H[1]],o.array[t+11]=s[H[2]],t+=12}else{if(o.boundTo==="faces"){k=0;for(m=x.length;k<m;k++)B=A=z=ea=o.value[x[k]],o.array[t]=z[H[0]],o.array[t+1]=z[H[1]],o.array[t+2]=z[H[2]],o.array[t+3]=A[H[0]],o.array[t+4]=A[H[1]],o.array[t+5]=A[H[2]],o.array[t+6]=B[H[0]],o.array[t+7]=B[H[1]],
+o.array[t+8]=B[H[2]],t+=9;k=0;for(m=w.length;k<m;k++)s=B=A=z=ea=o.value[w[k]],o.array[t]=z[H[0]],o.array[t+1]=z[H[1]],o.array[t+2]=z[H[2]],o.array[t+3]=A[H[0]],o.array[t+4]=A[H[1]],o.array[t+5]=A[H[2]],o.array[t+6]=B[H[0]],o.array[t+7]=B[H[1]],o.array[t+8]=B[H[2]],o.array[t+9]=s[H[0]],o.array[t+10]=s[H[1]],o.array[t+11]=s[H[2]],t+=12}}else if(o.size===4)if(o.boundTo===void 0||o.boundTo==="vertices"){k=0;for(m=x.length;k<m;k++)s=fa[x[k]],z=o.value[s.a],A=o.value[s.b],B=o.value[s.c],o.array[t]=z.x,
+o.array[t+1]=z.y,o.array[t+2]=z.z,o.array[t+3]=z.w,o.array[t+4]=A.x,o.array[t+5]=A.y,o.array[t+6]=A.z,o.array[t+7]=A.w,o.array[t+8]=B.x,o.array[t+9]=B.y,o.array[t+10]=B.z,o.array[t+11]=B.w,t+=12;k=0;for(m=w.length;k<m;k++)s=fa[w[k]],z=o.value[s.a],A=o.value[s.b],B=o.value[s.c],s=o.value[s.d],o.array[t]=z.x,o.array[t+1]=z.y,o.array[t+2]=z.z,o.array[t+3]=z.w,o.array[t+4]=A.x,o.array[t+5]=A.y,o.array[t+6]=A.z,o.array[t+7]=A.w,o.array[t+8]=B.x,o.array[t+9]=B.y,o.array[t+10]=B.z,o.array[t+11]=B.w,o.array[t+
+12]=s.x,o.array[t+13]=s.y,o.array[t+14]=s.z,o.array[t+15]=s.w,t+=16}else if(o.boundTo==="faces"){k=0;for(m=x.length;k<m;k++)B=A=z=ea=o.value[x[k]],o.array[t]=z.x,o.array[t+1]=z.y,o.array[t+2]=z.z,o.array[t+3]=z.w,o.array[t+4]=A.x,o.array[t+5]=A.y,o.array[t+6]=A.z,o.array[t+7]=A.w,o.array[t+8]=B.x,o.array[t+9]=B.y,o.array[t+10]=B.z,o.array[t+11]=B.w,t+=12;k=0;for(m=w.length;k<m;k++)s=B=A=z=ea=o.value[w[k]],o.array[t]=z.x,o.array[t+1]=z.y,o.array[t+2]=z.z,o.array[t+3]=z.w,o.array[t+4]=A.x,o.array[t+
+5]=A.y,o.array[t+6]=A.z,o.array[t+7]=A.w,o.array[t+8]=B.x,o.array[t+9]=B.y,o.array[t+10]=B.z,o.array[t+11]=B.w,o.array[t+12]=s.x,o.array[t+13]=s.y,o.array[t+14]=s.z,o.array[t+15]=s.w,t+=16}d.bindBuffer(d.ARRAY_BUFFER,o.buffer);d.bufferData(d.ARRAY_BUFFER,o.array,n)}}r&&(delete l.__inittedArrays,delete l.__colorArray,delete l.__normalArray,delete l.__tangentArray,delete l.__uvArray,delete l.__uv2Array,delete l.__faceArray,delete l.__vertexArray,delete l.__lineArray,delete l.__skinVertexAArray,delete l.__skinVertexBArray,
+delete l.__skinIndexArray,delete l.__skinWeightArray)}i.__dirtyVertices=!1;i.__dirtyMorphTargets=!1;i.__dirtyElements=!1;i.__dirtyUvs=!1;i.__dirtyNormals=!1;i.__dirtyColors=!1;i.__dirtyTangents=!1;h.attributes&&K(h)}else if(F instanceof THREE.Ribbon){if(i.__dirtyVertices||i.__dirtyColors){h=i;F=d.DYNAMIC_DRAW;k=j=k=r=r=void 0;m=h.vertices;q=h.colors;p=m.length;l=q.length;x=h.__vertexArray;n=h.__colorArray;w=h.__dirtyColors;if(h.__dirtyVertices){for(r=0;r<p;r++)k=m[r].position,j=r*3,x[j]=k.x,x[j+1]=
+k.y,x[j+2]=k.z;d.bindBuffer(d.ARRAY_BUFFER,h.__webglVertexBuffer);d.bufferData(d.ARRAY_BUFFER,x,F)}if(w){for(r=0;r<l;r++)k=q[r],j=r*3,n[j]=k.r,n[j+1]=k.g,n[j+2]=k.b;d.bindBuffer(d.ARRAY_BUFFER,h.__webglColorBuffer);d.bufferData(d.ARRAY_BUFFER,n,F)}}i.__dirtyVertices=!1;i.__dirtyColors=!1}else if(F instanceof THREE.Line){h=c(F,l);n=h.attributes&&u(h);if(i.__dirtyVertices||i.__dirtyColors||n){F=i;j=d.DYNAMIC_DRAW;p=q=W=m=fa=void 0;m=F.vertices;l=F.colors;p=m.length;n=l.length;x=F.__vertexArray;r=F.__colorArray;
+w=F.__dirtyColors;k=F.__webglCustomAttributesList;R=ba=Q=H=W=fa=void 0;if(F.__dirtyVertices){for(fa=0;fa<p;fa++)W=m[fa].position,q=fa*3,x[q]=W.x,x[q+1]=W.y,x[q+2]=W.z;d.bindBuffer(d.ARRAY_BUFFER,F.__webglVertexBuffer);d.bufferData(d.ARRAY_BUFFER,x,j)}if(w){for(m=0;m<n;m++)p=l[m],q=m*3,r[q]=p.r,r[q+1]=p.g,r[q+2]=p.b;d.bindBuffer(d.ARRAY_BUFFER,F.__webglColorBuffer);d.bufferData(d.ARRAY_BUFFER,r,j)}if(k){fa=0;for(W=k.length;fa<W;fa++)if(R=k[fa],R.needsUpdate&&(R.boundTo===void 0||R.boundTo==="vertices")){q=
+0;Q=R.value.length;if(R.size===1)for(H=0;H<Q;H++)R.array[H]=R.value[H];else if(R.size===2)for(H=0;H<Q;H++)ba=R.value[H],R.array[q]=ba.x,R.array[q+1]=ba.y,q+=2;else if(R.size===3)if(R.type==="c")for(H=0;H<Q;H++)ba=R.value[H],R.array[q]=ba.r,R.array[q+1]=ba.g,R.array[q+2]=ba.b,q+=3;else for(H=0;H<Q;H++)ba=R.value[H],R.array[q]=ba.x,R.array[q+1]=ba.y,R.array[q+2]=ba.z,q+=3;else if(R.size===4)for(H=0;H<Q;H++)ba=R.value[H],R.array[q]=ba.x,R.array[q+1]=ba.y,R.array[q+2]=ba.z,R.array[q+3]=ba.w,q+=4;d.bindBuffer(d.ARRAY_BUFFER,
+R.buffer);d.bufferData(d.ARRAY_BUFFER,R.array,j)}}}i.__dirtyVertices=!1;i.__dirtyColors=!1;h.attributes&&K(h)}else if(F instanceof THREE.ParticleSystem)h=c(F,l),n=h.attributes&&u(h),(i.__dirtyVertices||i.__dirtyColors||F.sortParticles||n)&&e(i,d.DYNAMIC_DRAW,F),i.__dirtyVertices=!1,i.__dirtyColors=!1,h.attributes&&K(h)};this.initMaterial=function(a,b,c,e){var f,g,h,i;a instanceof THREE.MeshDepthMaterial?i="depth":a instanceof THREE.MeshNormalMaterial?i="normal":a instanceof THREE.MeshBasicMaterial?
+i="basic":a instanceof THREE.MeshLambertMaterial?i="lambert":a instanceof THREE.MeshPhongMaterial?i="phong":a instanceof THREE.LineBasicMaterial?i="basic":a instanceof THREE.ParticleBasicMaterial&&(i="particle_basic");if(i){var j=THREE.ShaderLib[i];a.uniforms=THREE.UniformsUtils.clone(j.uniforms);a.vertexShader=j.vertexShader;a.fragmentShader=j.fragmentShader}var n,k,m;n=m=j=0;for(k=b.length;n<k;n++)h=b[n],h instanceof THREE.SpotLight&&m++,h instanceof THREE.DirectionalLight&&m++,h instanceof THREE.PointLight&&
+j++;j+m<=la?n=m:(n=Math.ceil(la*m/(j+m)),j=la-n);h={directional:n,point:j};j=m=0;for(n=b.length;j<n;j++)k=b[j],k instanceof THREE.SpotLight&&k.castShadow&&m++;var r=50;if(e!==void 0&&e instanceof THREE.SkinnedMesh)r=e.bones.length;var p;a:{n=a.fragmentShader;k=a.vertexShader;var j=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,morphTargets:a.morphTargets,maxMorphTargets:this.maxMorphTargets,
+maxDirLights:h.directional,maxPointLights:h.point,maxBones:r,shadowMapEnabled:this.shadowMapEnabled&&e.receiveShadow,shadowMapSoft:this.shadowMapSoft,shadowMapWidth:this.shadowMapWidth,shadowMapHeight:this.shadowMapHeight,maxShadows:m,alphaTest:a.alphaTest,metal:a.metal,perPixel:a.perPixel},u,e=[];i?e.push(i):(e.push(n),e.push(k));for(u in c)e.push(u),e.push(c[u]);i=e.join();u=0;for(e=ca.length;u<e;u++)if(ca[u].code===i){p=ca[u].program;break a}u=d.createProgram();e=[Wa?"#define VERTEX_TEXTURES":
+"",D.gammaInput?"#define GAMMA_INPUT":"",D.gammaOutput?"#define GAMMA_OUTPUT":"",D.physicallyBasedShading?"#define PHYSICALLY_BASED_SHADING":"","#define MAX_DIR_LIGHTS "+c.maxDirLights,"#define MAX_POINT_LIGHTS "+c.maxPointLights,"#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.morphTargets?"#define USE_MORPHTARGETS":
+"",c.perPixel?"#define PHONG_PER_PIXEL":"",c.shadowMapEnabled?"#define USE_SHADOWMAP":"",c.shadowMapSoft?"#define SHADOWMAP_SOFT":"",c.sizeAttenuation?"#define USE_SIZEATTENUATION":"","uniform mat4 objectMatrix;\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform mat4 viewMatrix;\nuniform mat3 normalMatrix;\nuniform vec3 cameraPosition;\nuniform mat4 cameraInverseMatrix;\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;\nattribute vec3 morphTarget4;\nattribute vec3 morphTarget5;\nattribute vec3 morphTarget6;\nattribute vec3 morphTarget7;\n#endif\n#ifdef USE_SKINNING\nattribute vec4 skinVertexA;\nattribute vec4 skinVertexB;\nattribute vec4 skinIndex;\nattribute vec4 skinWeight;\n#endif\n"].join("\n");
 h=["#ifdef GL_ES","precision "+va+" float;","#endif","#define MAX_DIR_LIGHTS "+c.maxDirLights,"#define MAX_POINT_LIGHTS "+c.maxPointLights,"#define MAX_SHADOWS "+c.maxShadows,c.alphaTest?"#define ALPHATEST "+c.alphaTest:"",D.gammaInput?"#define GAMMA_INPUT":"",D.gammaOutput?"#define GAMMA_OUTPUT":"",D.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":"",c.envMap?"#define USE_ENVMAP":
 h=["#ifdef GL_ES","precision "+va+" float;","#endif","#define MAX_DIR_LIGHTS "+c.maxDirLights,"#define MAX_POINT_LIGHTS "+c.maxPointLights,"#define MAX_SHADOWS "+c.maxShadows,c.alphaTest?"#define ALPHATEST "+c.alphaTest:"",D.gammaInput?"#define GAMMA_INPUT":"",D.gammaOutput?"#define GAMMA_OUTPUT":"",D.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":"",c.envMap?"#define USE_ENVMAP":
 "",c.lightMap?"#define USE_LIGHTMAP":"",c.vertexColors?"#define USE_COLOR":"",c.metal?"#define METAL":"",c.perPixel?"#define PHONG_PER_PIXEL":"",c.shadowMapEnabled?"#define USE_SHADOWMAP":"",c.shadowMapSoft?"#define SHADOWMAP_SOFT":"",c.shadowMapSoft?"#define SHADOWMAP_WIDTH "+c.shadowMapWidth.toFixed(1):"",c.shadowMapSoft?"#define SHADOWMAP_HEIGHT "+c.shadowMapHeight.toFixed(1):"","uniform mat4 viewMatrix;\nuniform vec3 cameraPosition;\n"].join("\n");d.attachShader(u,L("fragment",h+n));d.attachShader(u,
 "",c.lightMap?"#define USE_LIGHTMAP":"",c.vertexColors?"#define USE_COLOR":"",c.metal?"#define METAL":"",c.perPixel?"#define PHONG_PER_PIXEL":"",c.shadowMapEnabled?"#define USE_SHADOWMAP":"",c.shadowMapSoft?"#define SHADOWMAP_SOFT":"",c.shadowMapSoft?"#define SHADOWMAP_WIDTH "+c.shadowMapWidth.toFixed(1):"",c.shadowMapSoft?"#define SHADOWMAP_HEIGHT "+c.shadowMapHeight.toFixed(1):"","uniform mat4 viewMatrix;\nuniform vec3 cameraPosition;\n"].join("\n");d.attachShader(u,L("fragment",h+n));d.attachShader(u,
 L("vertex",e+k));d.linkProgram(u);d.getProgramParameter(u,d.LINK_STATUS)||console.error("Could not initialise shader\nVALIDATE_STATUS: "+d.getProgramParameter(u,d.VALIDATE_STATUS)+", gl error ["+d.getError()+"]");u.uniforms={};u.attributes={};var w,e=["viewMatrix","modelViewMatrix","projectionMatrix","normalMatrix","objectMatrix","cameraPosition","cameraInverseMatrix","boneGlobalMatrices","morphTargetInfluences"];for(w in j)e.push(w);w=e;e=0;for(j=w.length;e<j;e++)n=w[e],u.uniforms[n]=d.getUniformLocation(u,
 L("vertex",e+k));d.linkProgram(u);d.getProgramParameter(u,d.LINK_STATUS)||console.error("Could not initialise shader\nVALIDATE_STATUS: "+d.getProgramParameter(u,d.VALIDATE_STATUS)+", gl error ["+d.getError()+"]");u.uniforms={};u.attributes={};var w,e=["viewMatrix","modelViewMatrix","projectionMatrix","normalMatrix","objectMatrix","cameraPosition","cameraInverseMatrix","boneGlobalMatrices","morphTargetInfluences"];for(w in j)e.push(w);w=e;e=0;for(j=w.length;e<j;e++)n=w[e],u.uniforms[n]=d.getUniformLocation(u,

+ 17 - 3
src/renderers/WebGLRenderer.js

@@ -5463,7 +5463,7 @@ THREE.WebGLRenderer = function ( parameters ) {
 			_gl.texParameteri( textureType, _gl.TEXTURE_MAG_FILTER, paramThreeToGL( texture.magFilter ) );
 			_gl.texParameteri( textureType, _gl.TEXTURE_MAG_FILTER, paramThreeToGL( texture.magFilter ) );
 			_gl.texParameteri( textureType, _gl.TEXTURE_MIN_FILTER, paramThreeToGL( texture.minFilter ) );
 			_gl.texParameteri( textureType, _gl.TEXTURE_MIN_FILTER, paramThreeToGL( texture.minFilter ) );
 
 
-			_gl.generateMipmap( textureType );
+			return true;
 
 
 		} else {
 		} else {
 
 
@@ -5473,6 +5473,8 @@ THREE.WebGLRenderer = function ( parameters ) {
 			_gl.texParameteri( textureType, _gl.TEXTURE_MAG_FILTER, filterFallback( texture.magFilter ) );
 			_gl.texParameteri( textureType, _gl.TEXTURE_MAG_FILTER, filterFallback( texture.magFilter ) );
 			_gl.texParameteri( textureType, _gl.TEXTURE_MIN_FILTER, filterFallback( texture.minFilter ) );
 			_gl.texParameteri( textureType, _gl.TEXTURE_MIN_FILTER, filterFallback( texture.minFilter ) );
 
 
+			return false;
+
 		}
 		}
 
 
 	};
 	};
@@ -5493,6 +5495,8 @@ THREE.WebGLRenderer = function ( parameters ) {
 			_gl.activeTexture( _gl.TEXTURE0 + slot );
 			_gl.activeTexture( _gl.TEXTURE0 + slot );
 			_gl.bindTexture( _gl.TEXTURE_2D, texture.__webglTexture );
 			_gl.bindTexture( _gl.TEXTURE_2D, texture.__webglTexture );
 
 
+			var needsMipMaps = setTextureParameters( _gl.TEXTURE_2D, texture, texture.image );
+
 			if ( texture instanceof THREE.DataTexture ) {
 			if ( texture instanceof THREE.DataTexture ) {
 
 
 				_gl.texImage2D( _gl.TEXTURE_2D, 0, paramThreeToGL( texture.format ), texture.image.width, texture.image.height, 0, paramThreeToGL( texture.format ), _gl.UNSIGNED_BYTE, texture.image.data );
 				_gl.texImage2D( _gl.TEXTURE_2D, 0, paramThreeToGL( texture.format ), texture.image.width, texture.image.height, 0, paramThreeToGL( texture.format ), _gl.UNSIGNED_BYTE, texture.image.data );
@@ -5503,7 +5507,11 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 
 			}
 			}
 
 
-			setTextureParameters( _gl.TEXTURE_2D, texture, texture.image );
+			if ( needsMipMaps ) {
+
+				_gl.generateMipmap( _gl.TEXTURE_2D );
+
+			}
 
 
 			texture.needsUpdate = false;
 			texture.needsUpdate = false;
 
 
@@ -5533,13 +5541,19 @@ THREE.WebGLRenderer = function ( parameters ) {
 				_gl.activeTexture( _gl.TEXTURE0 + slot );
 				_gl.activeTexture( _gl.TEXTURE0 + slot );
 				_gl.bindTexture( _gl.TEXTURE_CUBE_MAP, texture.image.__webglTextureCube );
 				_gl.bindTexture( _gl.TEXTURE_CUBE_MAP, texture.image.__webglTextureCube );
 
 
+				var needsMipMaps = setTextureParameters( _gl.TEXTURE_CUBE_MAP, texture, texture.image[ 0 ] );
+
 				for ( var i = 0; i < 6; i ++ ) {
 				for ( var i = 0; i < 6; i ++ ) {
 
 
 					_gl.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, _gl.RGBA, _gl.RGBA, _gl.UNSIGNED_BYTE, texture.image[ i ] );
 					_gl.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, _gl.RGBA, _gl.RGBA, _gl.UNSIGNED_BYTE, texture.image[ i ] );
 
 
 				}
 				}
 
 
-				setTextureParameters( _gl.TEXTURE_CUBE_MAP, texture, texture.image[ 0 ] );
+				if ( needsMipMaps ) {
+
+					_gl.generateMipmap( _gl.TEXTURE_CUBE_MAP );
+
+				}
 
 
 				texture.needsUpdate = false;
 				texture.needsUpdate = false;