2
0
Mr.doob 10 жил өмнө
parent
commit
7596c19017
2 өөрчлөгдсөн 144 нэмэгдсэн , 148 устгасан
  1. 16 20
      build/three.js
  2. 128 128
      build/three.min.js

+ 16 - 20
build/three.js

@@ -20272,26 +20272,11 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 			} else if ( object instanceof THREE.Line ) {
 
-				if ( geometry.__webglVertexBuffer === undefined ) {
-
-					buffers.initLineBuffers( geometry, object );
-
-					geometry.verticesNeedUpdate = true;
-					geometry.colorsNeedUpdate = true;
-					geometry.lineDistancesNeedUpdate = true;
-
-				}
+				buffers.initLineBuffers( geometry, object );
 
 			} else if ( object instanceof THREE.PointCloud ) {
 
-				if ( geometry.__webglVertexBuffer === undefined ) {
-
-					buffers.initParticleBuffers( geometry, object );
-
-					geometry.verticesNeedUpdate = true;
-					geometry.colorsNeedUpdate = true;
-
-				}
+				buffers.initPointCloudBuffers( geometry, object );
 
 			}
 
@@ -20613,7 +20598,7 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 			if ( geometry.verticesNeedUpdate || geometry.colorsNeedUpdate || customAttributesDirty ) {
 
-				buffers.setParticleBuffers( geometry, _gl.DYNAMIC_DRAW, object );
+				buffers.setPointCloudBuffers( geometry, _gl.DYNAMIC_DRAW, object );
 
 			}
 
@@ -23002,7 +22987,9 @@ THREE.WebGLBuffers = function ( gl, info, extensions, getBufferMaterial ) {
 
 	};
 
-	this.initParticleBuffers = function ( geometry, object ) {
+	this.initPointCloudBuffers = function ( geometry, object ) {
+
+		if ( geometry.__webglVertexBuffer !== undefined ) return;
 
 		geometry.__webglVertexBuffer = gl.createBuffer();
 		geometry.__webglColorBuffer = gl.createBuffer();
@@ -23020,10 +23007,15 @@ THREE.WebGLBuffers = function ( gl, info, extensions, getBufferMaterial ) {
 
 		initCustomAttributes( object );
 
+		geometry.verticesNeedUpdate = true;
+		geometry.colorsNeedUpdate = true;
+
 	};
 
 	this.initLineBuffers = function ( geometry, object ) {
 
+		if ( geometry.__webglVertexBuffer !== undefined ) return;
+
 		geometry.__webglVertexBuffer = gl.createBuffer();
 		geometry.__webglColorBuffer = gl.createBuffer();
 		geometry.__webglLineDistanceBuffer = gl.createBuffer();
@@ -23042,6 +23034,10 @@ THREE.WebGLBuffers = function ( gl, info, extensions, getBufferMaterial ) {
 
 		initCustomAttributes( object );
 
+		geometry.verticesNeedUpdate = true;
+		geometry.colorsNeedUpdate = true;
+		geometry.lineDistancesNeedUpdate = true;
+
 	};
 
 	this.initMeshBuffers = function ( geometryGroup, object ) {
@@ -23218,7 +23214,7 @@ THREE.WebGLBuffers = function ( gl, info, extensions, getBufferMaterial ) {
 
 	// Buffer setting
 
-	this.setParticleBuffers = function ( geometry, hint, object ) {
+	this.setPointCloudBuffers = function ( geometry, hint, object ) {
 
 		var v, c, vertex, offset, color,
 

+ 128 - 128
build/three.min.js

@@ -456,139 +456,139 @@ THREE.ShaderChunk.logdepthbuf_vertex,"}"].join("\n"),fragmentShader:["uniform sa
 THREE.ShaderChunk.logdepthbuf_fragment,"\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tgl_FragData[ 0 ] = pack_depth( gl_FragDepthEXT );\n\t#else\n\t\tgl_FragData[ 0 ] = pack_depth( gl_FragCoord.z );\n\t#endif\n}"].join("\n")}};
 THREE.WebGLRenderer=function(a){function b(a,b){return a.material instanceof THREE.MeshFaceMaterial?a.material.materials[b.materialIndex]:a.material}function c(a,b,c,d){c=c.attributes;var e=b.attributes;b=b.attributesKeys;for(var f=0,g=b.length;f<g;f++){var h=b[f],k=e[h];if(0<=k){var l=c[h];void 0!==l?(h=l.itemSize,q.bindBuffer(q.ARRAY_BUFFER,l.buffer),U.enableAttribute(k),q.vertexAttribPointer(k,h,q.FLOAT,!1,0,d*h*4)):void 0!==a.defaultAttributeValues&&(2===a.defaultAttributeValues[h].length?q.vertexAttrib2fv(k,
 a.defaultAttributeValues[h]):3===a.defaultAttributeValues[h].length&&q.vertexAttrib3fv(k,a.defaultAttributeValues[h]))}}U.disableUnusedAttributes()}function d(a,b){return a.object.renderOrder!==b.object.renderOrder?a.object.renderOrder-b.object.renderOrder:a.material.id!==b.material.id?a.material.id-b.material.id:a.z!==b.z?a.z-b.z:a.id-b.id}function e(a,b){return a.object.renderOrder!==b.object.renderOrder?a.object.renderOrder-b.object.renderOrder:a.z!==b.z?b.z-a.z:a.id-b.id}function f(a,b){return b[0]-
-a[0]}function g(a){if(!1!==a.visible){if(!(a instanceof THREE.Scene||a instanceof THREE.Group)){void 0===a.__webglInit&&(a.__webglInit=!0,a._modelViewMatrix=new THREE.Matrix4,a._normalMatrix=new THREE.Matrix3,a.addEventListener("removed",fb));var b=a.geometry;void 0!==b&&void 0===b.__webglInit&&(b.__webglInit=!0,b.addEventListener("dispose",gb),b instanceof THREE.BufferGeometry?O.info.memory.geometries++:a instanceof THREE.Mesh?n(a,b):a instanceof THREE.Line?void 0===b.__webglVertexBuffer&&(ya.initLineBuffers(b,
-a),b.verticesNeedUpdate=!0,b.colorsNeedUpdate=!0,b.lineDistancesNeedUpdate=!0):a instanceof THREE.PointCloud&&void 0===b.__webglVertexBuffer&&(ya.initParticleBuffers(b,a),b.verticesNeedUpdate=!0,b.colorsNeedUpdate=!0));if(void 0===a.__webglActive)if(a.__webglActive=!0,a instanceof THREE.Mesh)if(b instanceof THREE.BufferGeometry)p(Y,b,a);else{if(b instanceof THREE.Geometry)for(var b=za[b.id],c=0,d=b.length;c<d;c++)p(Y,b[c],a)}else a instanceof THREE.Line||a instanceof THREE.PointCloud?p(Y,b,a):(a instanceof
-THREE.ImmediateRenderObject||a.immediateRenderCallback)&&ta.push({id:null,object:a,opaque:null,transparent:null,z:0});if(a instanceof THREE.Light)W.push(a);else if(a instanceof THREE.Sprite)V.push(a);else if(a instanceof THREE.LensFlare)ka.push(a);else if((b=Y[a.id])&&(!1===a.frustumCulled||!0===Ia.intersectsObject(a)))for(c=0,d=b.length;c<d;c++){var e=b[c],f=e,h=f.object,k=f.buffer,l=h.geometry,h=h.material;h instanceof THREE.MeshFaceMaterial?(h=h.materials[l instanceof THREE.BufferGeometry?0:k.materialIndex],
-f.material=h,h.transparent?qa.push(f):pa.push(f)):h&&(f.material=h,h.transparent?qa.push(f):pa.push(f));e.render=!0;!0===O.sortObjects&&(oa.setFromMatrixPosition(a.matrixWorld),oa.applyProjection(Ja),e.z=oa.z)}}c=0;for(d=a.children.length;c<d;c++)g(a.children[c])}}function h(a,b,c,d,e){for(var f,g=0,h=a.length;g<h;g++){f=a[g];var k=f.object,l=f.buffer;y(k,b);if(e)f=e;else{f=f.material;if(!f)continue;s(f)}O.setMaterialFaces(f);l instanceof THREE.BufferGeometry?O.renderBufferDirect(b,c,d,f,l,k):O.renderBuffer(b,
-c,d,f,l,k)}}function k(a,b,c,d,e,f){for(var g,h=0,k=a.length;h<k;h++){g=a[h];var l=g.object;if(l.visible){if(f)g=f;else{g=g[b];if(!g)continue;s(g)}O.renderImmediateObject(c,d,e,g,l)}}}function m(a){var b=a.object.material;b.transparent?(a.transparent=b,a.opaque=null):(a.opaque=b,a.transparent=null)}function n(a,b){var c=a.material,d=!1;if(void 0===za[b.id]||!0===b.groupsNeedUpdate){delete Y[a.id];for(var d=za,e=b.id,c=c instanceof THREE.MeshFaceMaterial,f=ba.get("OES_element_index_uint")?4294967296:
-65535,g,h={},k=b.morphTargets.length,l=b.morphNormals.length,m,n={},q=[],r=0,s=b.faces.length;r<s;r++){g=b.faces[r];var t=c?g.materialIndex:0;t in h||(h[t]={hash:t,counter:0});g=h[t].hash+"_"+h[t].counter;g in n||(m={id:hb++,faces3:[],materialIndex:t,vertices:0,numMorphTargets:k,numMorphNormals:l},n[g]=m,q.push(m));n[g].vertices+3>f&&(h[t].counter+=1,g=h[t].hash+"_"+h[t].counter,g in n||(m={id:hb++,faces3:[],materialIndex:t,vertices:0,numMorphTargets:k,numMorphNormals:l},n[g]=m,q.push(m)));n[g].faces3.push(r);
-n[g].vertices+=3}d[e]=q;b.groupsNeedUpdate=!1}e=za[b.id];c=0;for(f=e.length;c<f;c++)h=e[c],void 0===h.__webglVertexBuffer?(ya.initMeshBuffers(h,a),b.verticesNeedUpdate=!0,b.morphTargetsNeedUpdate=!0,b.elementsNeedUpdate=!0,b.uvsNeedUpdate=!0,b.normalsNeedUpdate=!0,b.tangentsNeedUpdate=!0,d=b.colorsNeedUpdate=!0):d=!1,(d||void 0===a.__webglActive)&&p(Y,h,a);a.__webglActive=!0}function p(a,b,c){var d=c.id;a[d]=a[d]||[];a[d].push({id:d,buffer:b,object:c,material:null,z:0})}function l(a){var c=a.geometry;
-if(c instanceof THREE.BufferGeometry){a=c.attributes;for(var c=c.attributesKeys,d=0,e=c.length;d<e;d++){var f=c[d],g=a[f],f="index"===f?q.ELEMENT_ARRAY_BUFFER:q.ARRAY_BUFFER;void 0===g.buffer?(g.buffer=q.createBuffer(),q.bindBuffer(f,g.buffer),q.bufferData(f,g.array,g instanceof THREE.DynamicBufferAttribute?q.DYNAMIC_DRAW:q.STATIC_DRAW),g.needsUpdate=!1):!0===g.needsUpdate&&(q.bindBuffer(f,g.buffer),void 0===g.updateRange||-1===g.updateRange.count?q.bufferSubData(f,0,g.array):0===g.updateRange.count?
-THREE.error("THREE.WebGLRenderer.updateObject: using updateRange for THREE.DynamicBufferAttribute and marked as needsUpdate but count is 0, ensure you are using set methods or updating manually."):(q.bufferSubData(f,g.updateRange.offset*g.array.BYTES_PER_ELEMENT,g.array.subarray(g.updateRange.offset,g.updateRange.offset+g.updateRange.count)),g.updateRange.count=0),g.needsUpdate=!1)}}else if(a instanceof THREE.Mesh){!0===c.groupsNeedUpdate&&n(a,c);e=za[c.id];d=0;for(g=e.length;d<g;d++){var f=e[d],
-h=b(a,f),k=h.attributes&&r(h);(c.verticesNeedUpdate||c.morphTargetsNeedUpdate||c.elementsNeedUpdate||c.uvsNeedUpdate||c.normalsNeedUpdate||c.colorsNeedUpdate||c.tangentsNeedUpdate||k)&&ya.setMeshBuffers(f,a,q.DYNAMIC_DRAW,!c.dynamic,h)}c.verticesNeedUpdate=!1;c.morphTargetsNeedUpdate=!1;c.elementsNeedUpdate=!1;c.uvsNeedUpdate=!1;c.normalsNeedUpdate=!1;c.colorsNeedUpdate=!1;c.tangentsNeedUpdate=!1;h.attributes&&t(h)}else a instanceof THREE.Line?(h=b(a,c),k=h.attributes&&r(h),(c.verticesNeedUpdate||
-c.colorsNeedUpdate||c.lineDistancesNeedUpdate||k)&&ya.setLineBuffers(c,q.DYNAMIC_DRAW),c.verticesNeedUpdate=!1,c.colorsNeedUpdate=!1,c.lineDistancesNeedUpdate=!1,h.attributes&&t(h)):a instanceof THREE.PointCloud&&(h=b(a,c),k=h.attributes&&r(h),(c.verticesNeedUpdate||c.colorsNeedUpdate||k)&&ya.setParticleBuffers(c,q.DYNAMIC_DRAW,a),c.verticesNeedUpdate=!1,c.colorsNeedUpdate=!1,h.attributes&&t(h))}function r(a){for(var b in a.attributes)if(a.attributes[b].needsUpdate)return!0;return!1}function t(a){for(var b in a.attributes)a.attributes[b].needsUpdate=
-!1}function s(a){!0===a.transparent?U.setBlending(a.blending,a.blendEquation,a.blendSrc,a.blendDst,a.blendEquationAlpha,a.blendSrcAlpha,a.blendDstAlpha):U.setBlending(THREE.NoBlending);U.setDepthTest(a.depthTest);U.setDepthWrite(a.depthWrite);U.setColorWrite(a.colorWrite);U.setPolygonOffset(a.polygonOffset,a.polygonOffsetFactor,a.polygonOffsetUnits)}function u(a,b,c,d,e){var f,g,h,k;ib=0;if(d.needsUpdate){d.program&&Lb(d);d.addEventListener("dispose",Mb);var l=Vb[d.type];if(l){var m=THREE.ShaderLib[l];
-d.__webglShader={uniforms:THREE.UniformsUtils.clone(m.uniforms),vertexShader:m.vertexShader,fragmentShader:m.fragmentShader}}else d.__webglShader={uniforms:d.uniforms,vertexShader:d.vertexShader,fragmentShader:d.fragmentShader};for(var n=0,p=0,r=0,s=0,t=0,u=b.length;t<u;t++){var y=b[t];y.onlyShadow||!1===y.visible||(y instanceof THREE.DirectionalLight&&n++,y instanceof THREE.PointLight&&p++,y instanceof THREE.SpotLight&&r++,y instanceof THREE.HemisphereLight&&s++)}f=n;g=p;h=r;k=s;for(var z,D=0,B=
-0,G=b.length;B<G;B++){var E=b[B];E.castShadow&&(E instanceof THREE.SpotLight&&D++,E instanceof THREE.DirectionalLight&&!E.shadowCascade&&D++)}z=D;var H;if(qb&&e&&e.skeleton&&e.skeleton.useVertexTexture)H=1024;else{var M=q.getParameter(q.MAX_VERTEX_UNIFORM_VECTORS),K=Math.floor((M-20)/4);void 0!==e&&e instanceof THREE.SkinnedMesh&&(K=Math.min(e.skeleton.bones.length,K),K<e.skeleton.bones.length&&THREE.warn("WebGLRenderer: too many bones - "+e.skeleton.bones.length+", this GPU supports just "+K+" (try OpenGL instead of ANGLE)"));
-H=K}var J={precision:L,supportsVertexTextures:rb,map:!!d.map,envMap:!!d.envMap,envMapMode:d.envMap&&d.envMap.mapping,lightMap:!!d.lightMap,aoMap:!!d.aoMap,bumpMap:!!d.bumpMap,normalMap:!!d.normalMap,specularMap:!!d.specularMap,alphaMap:!!d.alphaMap,combine:d.combine,vertexColors:d.vertexColors,fog:c,useFog:d.fog,fogExp:c instanceof THREE.FogExp2,flatShading:d.shading===THREE.FlatShading,sizeAttenuation:d.sizeAttenuation,logarithmicDepthBuffer:na,skinning:d.skinning,maxBones:H,useVertexTexture:qb&&
-e&&e.skeleton&&e.skeleton.useVertexTexture,morphTargets:d.morphTargets,morphNormals:d.morphNormals,maxMorphTargets:O.maxMorphTargets,maxMorphNormals:O.maxMorphNormals,maxDirLights:f,maxPointLights:g,maxSpotLights:h,maxHemiLights:k,maxShadows:z,shadowMapEnabled:O.shadowMapEnabled&&e.receiveShadow&&0<z,shadowMapType:O.shadowMapType,shadowMapDebug:O.shadowMapDebug,shadowMapCascade:O.shadowMapCascade,alphaTest:d.alphaTest,metal:d.metal,wrapAround:d.wrapAround,doubleSided:d.side===THREE.DoubleSide,flipSided:d.side===
-THREE.BackSide},P=[];l?P.push(l):(P.push(d.fragmentShader),P.push(d.vertexShader));if(void 0!==d.defines)for(var N in d.defines)P.push(N),P.push(d.defines[N]);for(N in J)P.push(N),P.push(J[N]);for(var R=P.join(),S,V=0,ta=ua.length;V<ta;V++){var U=ua[V];if(U.code===R){S=U;S.usedTimes++;break}}void 0===S&&(S=new THREE.WebGLProgram(O,R,d,J),ua.push(S),O.info.memory.programs=ua.length);d.program=S;var Y=S.attributes;if(d.morphTargets){d.numSupportedMorphTargets=0;for(var qa,pa="morphTarget",W=0;W<O.maxMorphTargets;W++)qa=
-pa+W,0<=Y[qa]&&d.numSupportedMorphTargets++}if(d.morphNormals)for(d.numSupportedMorphNormals=0,pa="morphNormal",W=0;W<O.maxMorphNormals;W++)qa=pa+W,0<=Y[qa]&&d.numSupportedMorphNormals++;d.uniformsList=[];for(var ka in d.__webglShader.uniforms){var $=d.program.uniforms[ka];$&&d.uniformsList.push([d.__webglShader.uniforms[ka],$])}d.needsUpdate=!1}d.morphTargets&&!e.__webglMorphTargetInfluences&&(e.__webglMorphTargetInfluences=new Float32Array(O.maxMorphTargets));var ba=!1,sa=!1,ea=!1,ma=d.program,
-fa=ma.uniforms,Q=d.__webglShader.uniforms;ma.id!==Ka&&(q.useProgram(ma.program),Ka=ma.id,ea=sa=ba=!0);d.id!==Aa&&(-1===Aa&&(ea=!0),Aa=d.id,sa=!0);if(ba||a!==Xa)q.uniformMatrix4fv(fa.projectionMatrix,!1,a.projectionMatrix.elements),na&&q.uniform1f(fa.logDepthBufFC,2/(Math.log(a.far+1)/Math.LN2)),a!==Xa&&(Xa=a),(d instanceof THREE.ShaderMaterial||d instanceof THREE.MeshPhongMaterial||d.envMap)&&null!==fa.cameraPosition&&(oa.setFromMatrixPosition(a.matrixWorld),q.uniform3f(fa.cameraPosition,oa.x,oa.y,
-oa.z)),(d instanceof THREE.MeshPhongMaterial||d instanceof THREE.MeshLambertMaterial||d instanceof THREE.MeshBasicMaterial||d instanceof THREE.ShaderMaterial||d.skinning)&&null!==fa.viewMatrix&&q.uniformMatrix4fv(fa.viewMatrix,!1,a.matrixWorldInverse.elements);if(d.skinning)if(e.bindMatrix&&null!==fa.bindMatrix&&q.uniformMatrix4fv(fa.bindMatrix,!1,e.bindMatrix.elements),e.bindMatrixInverse&&null!==fa.bindMatrixInverse&&q.uniformMatrix4fv(fa.bindMatrixInverse,!1,e.bindMatrixInverse.elements),qb&&e.skeleton&&
-e.skeleton.useVertexTexture){if(null!==fa.boneTexture){var ya=x();q.uniform1i(fa.boneTexture,ya);O.setTexture(e.skeleton.boneTexture,ya)}null!==fa.boneTextureWidth&&q.uniform1i(fa.boneTextureWidth,e.skeleton.boneTextureWidth);null!==fa.boneTextureHeight&&q.uniform1i(fa.boneTextureHeight,e.skeleton.boneTextureHeight)}else e.skeleton&&e.skeleton.boneMatrices&&null!==fa.boneGlobalMatrices&&q.uniformMatrix4fv(fa.boneGlobalMatrices,!1,e.skeleton.boneMatrices);if(sa){c&&d.fog&&(Q.fogColor.value=c.color,
-c instanceof THREE.Fog?(Q.fogNear.value=c.near,Q.fogFar.value=c.far):c instanceof THREE.FogExp2&&(Q.fogDensity.value=c.density));if(d instanceof THREE.MeshPhongMaterial||d instanceof THREE.MeshLambertMaterial||d.lights){if(jb){var ea=!0,da,va,ca,za=0,Ga=0,Ha=0,La,Qa,Ra,Ta,Ia,ga=Nb,Ja=ga.directional.colors,Sa=ga.directional.positions,sb=ga.point.colors,tb=ga.point.positions,fb=ga.point.distances,gb=ga.point.decays,ub=ga.spot.colors,vb=ga.spot.positions,hb=ga.spot.distances,wb=ga.spot.directions,mb=
-ga.spot.anglesCos,nb=ga.spot.exponents,ob=ga.spot.decays,xb=ga.hemi.skyColors,yb=ga.hemi.groundColors,zb=ga.hemi.positions,Ya=0,Ma=0,Ba=0,Ua=0,Ab=0,Bb=0,Cb=0,kb=0,Za=0,$a=0,Da=0,Va=0;da=0;for(va=b.length;da<va;da++)ca=b[da],ca.onlyShadow||(La=ca.color,Ta=ca.intensity,Ia=ca.distance,ca instanceof THREE.AmbientLight?ca.visible&&(za+=La.r,Ga+=La.g,Ha+=La.b):ca instanceof THREE.DirectionalLight?(Ab+=1,ca.visible&&(ia.setFromMatrixPosition(ca.matrixWorld),oa.setFromMatrixPosition(ca.target.matrixWorld),
-ia.sub(oa),ia.normalize(),Za=3*Ya,Sa[Za]=ia.x,Sa[Za+1]=ia.y,Sa[Za+2]=ia.z,w(Ja,Za,La,Ta),Ya+=1)):ca instanceof THREE.PointLight?(Bb+=1,ca.visible&&($a=3*Ma,w(sb,$a,La,Ta),oa.setFromMatrixPosition(ca.matrixWorld),tb[$a]=oa.x,tb[$a+1]=oa.y,tb[$a+2]=oa.z,fb[Ma]=Ia,gb[Ma]=0===ca.distance?0:ca.decay,Ma+=1)):ca instanceof THREE.SpotLight?(Cb+=1,ca.visible&&(Da=3*Ba,w(ub,Da,La,Ta),ia.setFromMatrixPosition(ca.matrixWorld),vb[Da]=ia.x,vb[Da+1]=ia.y,vb[Da+2]=ia.z,hb[Ba]=Ia,oa.setFromMatrixPosition(ca.target.matrixWorld),
-ia.sub(oa),ia.normalize(),wb[Da]=ia.x,wb[Da+1]=ia.y,wb[Da+2]=ia.z,mb[Ba]=Math.cos(ca.angle),nb[Ba]=ca.exponent,ob[Ba]=0===ca.distance?0:ca.decay,Ba+=1)):ca instanceof THREE.HemisphereLight&&(kb+=1,ca.visible&&(ia.setFromMatrixPosition(ca.matrixWorld),ia.normalize(),Va=3*Ua,zb[Va]=ia.x,zb[Va+1]=ia.y,zb[Va+2]=ia.z,Qa=ca.color,Ra=ca.groundColor,w(xb,Va,Qa,Ta),w(yb,Va,Ra,Ta),Ua+=1)));da=3*Ya;for(va=Math.max(Ja.length,3*Ab);da<va;da++)Ja[da]=0;da=3*Ma;for(va=Math.max(sb.length,3*Bb);da<va;da++)sb[da]=
-0;da=3*Ba;for(va=Math.max(ub.length,3*Cb);da<va;da++)ub[da]=0;da=3*Ua;for(va=Math.max(xb.length,3*kb);da<va;da++)xb[da]=0;da=3*Ua;for(va=Math.max(yb.length,3*kb);da<va;da++)yb[da]=0;ga.directional.length=Ya;ga.point.length=Ma;ga.spot.length=Ba;ga.hemi.length=Ua;ga.ambient[0]=za;ga.ambient[1]=Ga;ga.ambient[2]=Ha;jb=!1}if(ea){var la=Nb;Q.ambientLightColor.value=la.ambient;Q.directionalLightColor.value=la.directional.colors;Q.directionalLightDirection.value=la.directional.positions;Q.pointLightColor.value=
-la.point.colors;Q.pointLightPosition.value=la.point.positions;Q.pointLightDistance.value=la.point.distances;Q.pointLightDecay.value=la.point.decays;Q.spotLightColor.value=la.spot.colors;Q.spotLightPosition.value=la.spot.positions;Q.spotLightDistance.value=la.spot.distances;Q.spotLightDirection.value=la.spot.directions;Q.spotLightAngleCos.value=la.spot.anglesCos;Q.spotLightExponent.value=la.spot.exponents;Q.spotLightDecay.value=la.spot.decays;Q.hemisphereLightSkyColor.value=la.hemi.skyColors;Q.hemisphereLightGroundColor.value=
-la.hemi.groundColors;Q.hemisphereLightDirection.value=la.hemi.positions;v(Q,!0)}else v(Q,!1)}if(d instanceof THREE.MeshBasicMaterial||d instanceof THREE.MeshLambertMaterial||d instanceof THREE.MeshPhongMaterial){Q.opacity.value=d.opacity;Q.diffuse.value=d.color;Q.map.value=d.map;Q.lightMap.value=d.lightMap;Q.lightMapIntensity.value=d.lightMapIntensity;Q.aoMap.value=d.aoMap;Q.aoMapIntensity.value=d.aoMapIntensity;Q.specularMap.value=d.specularMap;Q.alphaMap.value=d.alphaMap;d.bumpMap&&(Q.bumpMap.value=
-d.bumpMap,Q.bumpScale.value=d.bumpScale);d.normalMap&&(Q.normalMap.value=d.normalMap,Q.normalScale.value.copy(d.normalScale));var Ea;d.map?Ea=d.map:d.specularMap?Ea=d.specularMap:d.normalMap?Ea=d.normalMap:d.bumpMap?Ea=d.bumpMap:d.alphaMap&&(Ea=d.alphaMap);if(void 0!==Ea){var bb=Ea.offset,cb=Ea.repeat;Q.offsetRepeat.value.set(bb.x,bb.y,cb.x,cb.y)}Q.envMap.value=d.envMap;Q.flipEnvMap.value=d.envMap instanceof THREE.WebGLRenderTargetCube?1:-1;Q.reflectivity.value=d.reflectivity;Q.refractionRatio.value=
-d.refractionRatio}if(d instanceof THREE.LineBasicMaterial)Q.diffuse.value=d.color,Q.opacity.value=d.opacity;else if(d instanceof THREE.LineDashedMaterial)Q.diffuse.value=d.color,Q.opacity.value=d.opacity,Q.dashSize.value=d.dashSize,Q.totalSize.value=d.dashSize+d.gapSize,Q.scale.value=d.scale;else if(d instanceof THREE.PointCloudMaterial){if(Q.psColor.value=d.color,Q.opacity.value=d.opacity,Q.size.value=d.size,Q.scale.value=F.height/2,Q.map.value=d.map,null!==d.map){var db=d.map.offset,eb=d.map.repeat;
-Q.offsetRepeat.value.set(db.x,db.y,eb.x,eb.y)}}else d instanceof THREE.MeshPhongMaterial?(Q.shininess.value=d.shininess,Q.emissive.value=d.emissive,Q.specular.value=d.specular,d.wrapAround&&Q.wrapRGB.value.copy(d.wrapRGB)):d instanceof THREE.MeshLambertMaterial?(Q.emissive.value=d.emissive,d.wrapAround&&Q.wrapRGB.value.copy(d.wrapRGB)):d instanceof THREE.MeshDepthMaterial?(Q.mNear.value=a.near,Q.mFar.value=a.far,Q.opacity.value=d.opacity):d instanceof THREE.MeshNormalMaterial&&(Q.opacity.value=d.opacity);
-if(e.receiveShadow&&!d._shadowPass&&Q.shadowMatrix)for(var Wa=0,Db=0,pb=b.length;Db<pb;Db++){var Ca=b[Db];Ca.castShadow&&(Ca instanceof THREE.SpotLight||Ca instanceof THREE.DirectionalLight&&!Ca.shadowCascade)&&(Q.shadowMap.value[Wa]=Ca.shadowMap,Q.shadowMapSize.value[Wa]=Ca.shadowMapSize,Q.shadowMatrix.value[Wa]=Ca.shadowMatrix,Q.shadowDarkness.value[Wa]=Ca.shadowDarkness,Q.shadowBias.value[Wa]=Ca.shadowBias,Wa++)}for(var Eb=d.uniformsList,wa,Na,xa,lb=0,Ib=Eb.length;lb<Ib;lb++){var Z=Eb[lb][0];if(!1!==
-Z.needsUpdate){var Ob=Z.type,T=Z.value,aa=Eb[lb][1];switch(Ob){case "1i":q.uniform1i(aa,T);break;case "1f":q.uniform1f(aa,T);break;case "2f":q.uniform2f(aa,T[0],T[1]);break;case "3f":q.uniform3f(aa,T[0],T[1],T[2]);break;case "4f":q.uniform4f(aa,T[0],T[1],T[2],T[3]);break;case "1iv":q.uniform1iv(aa,T);break;case "3iv":q.uniform3iv(aa,T);break;case "1fv":q.uniform1fv(aa,T);break;case "2fv":q.uniform2fv(aa,T);break;case "3fv":q.uniform3fv(aa,T);break;case "4fv":q.uniform4fv(aa,T);break;case "Matrix3fv":q.uniformMatrix3fv(aa,
-!1,T);break;case "Matrix4fv":q.uniformMatrix4fv(aa,!1,T);break;case "i":q.uniform1i(aa,T);break;case "f":q.uniform1f(aa,T);break;case "v2":q.uniform2f(aa,T.x,T.y);break;case "v3":q.uniform3f(aa,T.x,T.y,T.z);break;case "v4":q.uniform4f(aa,T.x,T.y,T.z,T.w);break;case "c":q.uniform3f(aa,T.r,T.g,T.b);break;case "iv1":q.uniform1iv(aa,T);break;case "iv":q.uniform3iv(aa,T);break;case "fv1":q.uniform1fv(aa,T);break;case "fv":q.uniform3fv(aa,T);break;case "v2v":void 0===Z._array&&(Z._array=new Float32Array(2*
-T.length));for(var X=0,ra=T.length;X<ra;X++)xa=2*X,Z._array[xa]=T[X].x,Z._array[xa+1]=T[X].y;q.uniform2fv(aa,Z._array);break;case "v3v":void 0===Z._array&&(Z._array=new Float32Array(3*T.length));X=0;for(ra=T.length;X<ra;X++)xa=3*X,Z._array[xa]=T[X].x,Z._array[xa+1]=T[X].y,Z._array[xa+2]=T[X].z;q.uniform3fv(aa,Z._array);break;case "v4v":void 0===Z._array&&(Z._array=new Float32Array(4*T.length));X=0;for(ra=T.length;X<ra;X++)xa=4*X,Z._array[xa]=T[X].x,Z._array[xa+1]=T[X].y,Z._array[xa+2]=T[X].z,Z._array[xa+
-3]=T[X].w;q.uniform4fv(aa,Z._array);break;case "m3":q.uniformMatrix3fv(aa,!1,T.elements);break;case "m3v":void 0===Z._array&&(Z._array=new Float32Array(9*T.length));X=0;for(ra=T.length;X<ra;X++)T[X].flattenToArrayOffset(Z._array,9*X);q.uniformMatrix3fv(aa,!1,Z._array);break;case "m4":q.uniformMatrix4fv(aa,!1,T.elements);break;case "m4v":void 0===Z._array&&(Z._array=new Float32Array(16*T.length));X=0;for(ra=T.length;X<ra;X++)T[X].flattenToArrayOffset(Z._array,16*X);q.uniformMatrix4fv(aa,!1,Z._array);
-break;case "t":wa=T;Na=x();q.uniform1i(aa,Na);if(!wa)continue;if(wa instanceof THREE.CubeTexture||wa.image instanceof Array&&6===wa.image.length){var ha=wa,Pb=Na;if(6===ha.image.length)if(ha.needsUpdate){ha.image.__webglTextureCube||(ha.addEventListener("dispose",Fb),ha.image.__webglTextureCube=q.createTexture(),O.info.memory.textures++);q.activeTexture(q.TEXTURE0+Pb);q.bindTexture(q.TEXTURE_CUBE_MAP,ha.image.__webglTextureCube);q.pixelStorei(q.UNPACK_FLIP_Y_WEBGL,ha.flipY);for(var Qb=ha instanceof
-THREE.CompressedTexture,Gb=ha.image[0]instanceof THREE.DataTexture,Oa=[],ja=0;6>ja;ja++)Oa[ja]=!O.autoScaleCubemaps||Qb||Gb?Gb?ha.image[ja].image:ha.image[ja]:A(ha.image[ja],Wb);var Rb=Oa[0],Sb=THREE.Math.isPowerOfTwo(Rb.width)&&THREE.Math.isPowerOfTwo(Rb.height),Fa=C(ha.format),Hb=C(ha.type);I(q.TEXTURE_CUBE_MAP,ha,Sb);for(ja=0;6>ja;ja++)if(Qb)for(var Pa,Tb=Oa[ja].mipmaps,ab=0,Jb=Tb.length;ab<Jb;ab++)Pa=Tb[ab],ha.format!==THREE.RGBAFormat&&ha.format!==THREE.RGBFormat?-1<Ub().indexOf(Fa)?q.compressedTexImage2D(q.TEXTURE_CUBE_MAP_POSITIVE_X+
-ja,ab,Fa,Pa.width,Pa.height,0,Pa.data):THREE.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setCubeTexture()"):q.texImage2D(q.TEXTURE_CUBE_MAP_POSITIVE_X+ja,ab,Fa,Pa.width,Pa.height,0,Fa,Hb,Pa.data);else Gb?q.texImage2D(q.TEXTURE_CUBE_MAP_POSITIVE_X+ja,0,Fa,Oa[ja].width,Oa[ja].height,0,Fa,Hb,Oa[ja].data):q.texImage2D(q.TEXTURE_CUBE_MAP_POSITIVE_X+ja,0,Fa,Fa,Hb,Oa[ja]);ha.generateMipmaps&&Sb&&q.generateMipmap(q.TEXTURE_CUBE_MAP);ha.needsUpdate=!1;if(ha.onUpdate)ha.onUpdate(ha)}else q.activeTexture(q.TEXTURE0+
-Pb),q.bindTexture(q.TEXTURE_CUBE_MAP,ha.image.__webglTextureCube)}else if(wa instanceof THREE.WebGLRenderTargetCube){var Kb=wa;q.activeTexture(q.TEXTURE0+Na);q.bindTexture(q.TEXTURE_CUBE_MAP,Kb.__webglTexture)}else O.setTexture(wa,Na);break;case "tv":void 0===Z._array&&(Z._array=[]);X=0;for(ra=Z.value.length;X<ra;X++)Z._array[X]=x();q.uniform1iv(aa,Z._array);X=0;for(ra=Z.value.length;X<ra;X++)wa=Z.value[X],Na=Z._array[X],wa&&O.setTexture(wa,Na);break;default:THREE.warn("THREE.WebGLRenderer: Unknown uniform type: "+
-Ob)}}}}q.uniformMatrix4fv(fa.modelViewMatrix,!1,e._modelViewMatrix.elements);fa.normalMatrix&&q.uniformMatrix3fv(fa.normalMatrix,!1,e._normalMatrix.elements);null!==fa.modelMatrix&&q.uniformMatrix4fv(fa.modelMatrix,!1,e.matrixWorld.elements);return ma}function v(a,b){a.ambientLightColor.needsUpdate=b;a.directionalLightColor.needsUpdate=b;a.directionalLightDirection.needsUpdate=b;a.pointLightColor.needsUpdate=b;a.pointLightPosition.needsUpdate=b;a.pointLightDistance.needsUpdate=b;a.pointLightDecay.needsUpdate=
-b;a.spotLightColor.needsUpdate=b;a.spotLightPosition.needsUpdate=b;a.spotLightDistance.needsUpdate=b;a.spotLightDirection.needsUpdate=b;a.spotLightAngleCos.needsUpdate=b;a.spotLightExponent.needsUpdate=b;a.spotLightDecay.needsUpdate=b;a.hemisphereLightSkyColor.needsUpdate=b;a.hemisphereLightGroundColor.needsUpdate=b;a.hemisphereLightDirection.needsUpdate=b}function x(){var a=ib;a>=mb&&THREE.warn("WebGLRenderer: trying to use "+a+" texture units while this GPU supports only "+mb);ib+=1;return a}function y(a,
-b){a._modelViewMatrix.multiplyMatrices(b.matrixWorldInverse,a.matrixWorld);a._normalMatrix.getNormalMatrix(a._modelViewMatrix)}function w(a,b,c,d){a[b]=c.r*d;a[b+1]=c.g*d;a[b+2]=c.b*d}function I(a,b,c){c?(q.texParameteri(a,q.TEXTURE_WRAP_S,C(b.wrapS)),q.texParameteri(a,q.TEXTURE_WRAP_T,C(b.wrapT)),q.texParameteri(a,q.TEXTURE_MAG_FILTER,C(b.magFilter)),q.texParameteri(a,q.TEXTURE_MIN_FILTER,C(b.minFilter))):(q.texParameteri(a,q.TEXTURE_WRAP_S,q.CLAMP_TO_EDGE),q.texParameteri(a,q.TEXTURE_WRAP_T,q.CLAMP_TO_EDGE),
-b.wrapS===THREE.ClampToEdgeWrapping&&b.wrapT===THREE.ClampToEdgeWrapping||THREE.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping. ( "+b.sourceFile+" )"),q.texParameteri(a,q.TEXTURE_MAG_FILTER,B(b.magFilter)),q.texParameteri(a,q.TEXTURE_MIN_FILTER,B(b.minFilter)),b.minFilter!==THREE.NearestFilter&&b.minFilter!==THREE.LinearFilter&&THREE.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter. ( "+
-b.sourceFile+" )"));(c=ba.get("EXT_texture_filter_anisotropic"))&&b.type!==THREE.FloatType&&b.type!==THREE.HalfFloatType&&(1<b.anisotropy||b.__currentAnisotropy)&&(q.texParameterf(a,c.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(b.anisotropy,O.getMaxAnisotropy())),b.__currentAnisotropy=b.anisotropy)}function A(a,b){if(a.width>b||a.height>b){var c=b/Math.max(a.width,a.height),d=document.createElement("canvas");d.width=Math.floor(a.width*c);d.height=Math.floor(a.height*c);d.getContext("2d").drawImage(a,0,0,
-a.width,a.height,0,0,d.width,d.height);THREE.warn("THREE.WebGLRenderer: image is too big ("+a.width+"x"+a.height+"). Resized to "+d.width+"x"+d.height,a);return d}return a}function D(a,b){q.bindRenderbuffer(q.RENDERBUFFER,a);b.depthBuffer&&!b.stencilBuffer?(q.renderbufferStorage(q.RENDERBUFFER,q.DEPTH_COMPONENT16,b.width,b.height),q.framebufferRenderbuffer(q.FRAMEBUFFER,q.DEPTH_ATTACHMENT,q.RENDERBUFFER,a)):b.depthBuffer&&b.stencilBuffer?(q.renderbufferStorage(q.RENDERBUFFER,q.DEPTH_STENCIL,b.width,
-b.height),q.framebufferRenderbuffer(q.FRAMEBUFFER,q.DEPTH_STENCIL_ATTACHMENT,q.RENDERBUFFER,a)):q.renderbufferStorage(q.RENDERBUFFER,q.RGBA4,b.width,b.height)}function G(a){a instanceof THREE.WebGLRenderTargetCube?(q.bindTexture(q.TEXTURE_CUBE_MAP,a.__webglTexture),q.generateMipmap(q.TEXTURE_CUBE_MAP),q.bindTexture(q.TEXTURE_CUBE_MAP,null)):(q.bindTexture(q.TEXTURE_2D,a.__webglTexture),q.generateMipmap(q.TEXTURE_2D),q.bindTexture(q.TEXTURE_2D,null))}function B(a){return a===THREE.NearestFilter||a===
-THREE.NearestMipMapNearestFilter||a===THREE.NearestMipMapLinearFilter?q.NEAREST:q.LINEAR}function C(a){var b;if(a===THREE.RepeatWrapping)return q.REPEAT;if(a===THREE.ClampToEdgeWrapping)return q.CLAMP_TO_EDGE;if(a===THREE.MirroredRepeatWrapping)return q.MIRRORED_REPEAT;if(a===THREE.NearestFilter)return q.NEAREST;if(a===THREE.NearestMipMapNearestFilter)return q.NEAREST_MIPMAP_NEAREST;if(a===THREE.NearestMipMapLinearFilter)return q.NEAREST_MIPMAP_LINEAR;if(a===THREE.LinearFilter)return q.LINEAR;if(a===
-THREE.LinearMipMapNearestFilter)return q.LINEAR_MIPMAP_NEAREST;if(a===THREE.LinearMipMapLinearFilter)return q.LINEAR_MIPMAP_LINEAR;if(a===THREE.UnsignedByteType)return q.UNSIGNED_BYTE;if(a===THREE.UnsignedShort4444Type)return q.UNSIGNED_SHORT_4_4_4_4;if(a===THREE.UnsignedShort5551Type)return q.UNSIGNED_SHORT_5_5_5_1;if(a===THREE.UnsignedShort565Type)return q.UNSIGNED_SHORT_5_6_5;if(a===THREE.ByteType)return q.BYTE;if(a===THREE.ShortType)return q.SHORT;if(a===THREE.UnsignedShortType)return q.UNSIGNED_SHORT;
-if(a===THREE.IntType)return q.INT;if(a===THREE.UnsignedIntType)return q.UNSIGNED_INT;if(a===THREE.FloatType)return q.FLOAT;b=ba.get("OES_texture_half_float");if(null!==b&&a===THREE.HalfFloatType)return b.HALF_FLOAT_OES;if(a===THREE.AlphaFormat)return q.ALPHA;if(a===THREE.RGBFormat)return q.RGB;if(a===THREE.RGBAFormat)return q.RGBA;if(a===THREE.LuminanceFormat)return q.LUMINANCE;if(a===THREE.LuminanceAlphaFormat)return q.LUMINANCE_ALPHA;if(a===THREE.AddEquation)return q.FUNC_ADD;if(a===THREE.SubtractEquation)return q.FUNC_SUBTRACT;
-if(a===THREE.ReverseSubtractEquation)return q.FUNC_REVERSE_SUBTRACT;if(a===THREE.ZeroFactor)return q.ZERO;if(a===THREE.OneFactor)return q.ONE;if(a===THREE.SrcColorFactor)return q.SRC_COLOR;if(a===THREE.OneMinusSrcColorFactor)return q.ONE_MINUS_SRC_COLOR;if(a===THREE.SrcAlphaFactor)return q.SRC_ALPHA;if(a===THREE.OneMinusSrcAlphaFactor)return q.ONE_MINUS_SRC_ALPHA;if(a===THREE.DstAlphaFactor)return q.DST_ALPHA;if(a===THREE.OneMinusDstAlphaFactor)return q.ONE_MINUS_DST_ALPHA;if(a===THREE.DstColorFactor)return q.DST_COLOR;
-if(a===THREE.OneMinusDstColorFactor)return q.ONE_MINUS_DST_COLOR;if(a===THREE.SrcAlphaSaturateFactor)return q.SRC_ALPHA_SATURATE;b=ba.get("WEBGL_compressed_texture_s3tc");if(null!==b){if(a===THREE.RGB_S3TC_DXT1_Format)return b.COMPRESSED_RGB_S3TC_DXT1_EXT;if(a===THREE.RGBA_S3TC_DXT1_Format)return b.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(a===THREE.RGBA_S3TC_DXT3_Format)return b.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(a===THREE.RGBA_S3TC_DXT5_Format)return b.COMPRESSED_RGBA_S3TC_DXT5_EXT}b=ba.get("WEBGL_compressed_texture_pvrtc");
-if(null!==b){if(a===THREE.RGB_PVRTC_4BPPV1_Format)return b.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(a===THREE.RGB_PVRTC_2BPPV1_Format)return b.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(a===THREE.RGBA_PVRTC_4BPPV1_Format)return b.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(a===THREE.RGBA_PVRTC_2BPPV1_Format)return b.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}b=ba.get("EXT_blend_minmax");if(null!==b){if(a===THREE.MinEquation)return b.MIN_EXT;if(a===THREE.MaxEquation)return b.MAX_EXT}return 0}console.log("THREE.WebGLRenderer",THREE.REVISION);
-a=a||{};var F=void 0!==a.canvas?a.canvas:document.createElement("canvas"),S=void 0!==a.context?a.context:null,H=F.width,J=F.height,P=1,L=void 0!==a.precision?a.precision:"highp",z=void 0!==a.alpha?a.alpha:!1,M=void 0!==a.depth?a.depth:!0,R=void 0!==a.stencil?a.stencil:!0,K=void 0!==a.antialias?a.antialias:!1,E=void 0!==a.premultipliedAlpha?a.premultipliedAlpha:!0,$=void 0!==a.preserveDrawingBuffer?a.preserveDrawingBuffer:!1,na=void 0!==a.logarithmicDepthBuffer?a.logarithmicDepthBuffer:!1,N=new THREE.Color(0),
-ea=0,W=[],Y={},ta=[],pa=[],qa=[],V=[],ka=[];this.domElement=F;this.context=null;this.sortObjects=this.autoClearStencil=this.autoClearDepth=this.autoClearColor=this.autoClear=!0;this.gammaFactor=2;this.shadowMapEnabled=this.gammaOutput=this.gammaInput=!1;this.shadowMapType=THREE.PCFShadowMap;this.shadowMapCullFace=THREE.CullFaceFront;this.shadowMapCascade=this.shadowMapDebug=!1;this.maxMorphTargets=8;this.maxMorphNormals=4;this.autoScaleCubemaps=!0;this.info={memory:{programs:0,geometries:0,textures:0},
-render:{calls:0,vertices:0,faces:0,points:0}};var O=this,ua=[],Ka=null,sa=null,Aa=-1,ma="",Xa=null,ib=0,Ga=0,Ha=0,Qa=F.width,Ra=F.height,nb=0,ob=0,Ia=new THREE.Frustum,Ja=new THREE.Matrix4,oa=new THREE.Vector3,ia=new THREE.Vector3,jb=!0,Nb={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[],distances:[],decays:[]},spot:{length:0,colors:[],positions:[],distances:[],directions:[],anglesCos:[],exponents:[],decays:[]},hemi:{length:0,skyColors:[],groundColors:[],
-positions:[]}},q;try{var bb={alpha:z,depth:M,stencil:R,antialias:K,premultipliedAlpha:E,preserveDrawingBuffer:$};q=S||F.getContext("webgl",bb)||F.getContext("experimental-webgl",bb);if(null===q){if(null!==F.getContext("webgl"))throw"Error creating WebGL context with your selected attributes.";throw"Error creating WebGL context.";}F.addEventListener("webglcontextlost",function(a){a.preventDefault();cb();db();Y={}},!1)}catch(Ib){THREE.error("THREE.WebGLRenderer: "+Ib)}var U=new THREE.WebGLState(q,C);
-void 0===q.getShaderPrecisionFormat&&(q.getShaderPrecisionFormat=function(){return{rangeMin:1,rangeMax:1,precision:1}});var ba=new THREE.WebGLExtensions(q),ya=new THREE.WebGLBuffers(q,this.info,ba,b);ba.get("OES_texture_float");ba.get("OES_texture_float_linear");ba.get("OES_texture_half_float");ba.get("OES_texture_half_float_linear");ba.get("OES_standard_derivatives");na&&ba.get("EXT_frag_depth");var Sa=function(a,b,c,d){!0===E&&(a*=d,b*=d,c*=d);q.clearColor(a,b,c,d)},db=function(){q.clearColor(0,
-0,0,1);q.clearDepth(1);q.clearStencil(0);q.enable(q.DEPTH_TEST);q.depthFunc(q.LEQUAL);q.frontFace(q.CCW);q.cullFace(q.BACK);q.enable(q.CULL_FACE);q.enable(q.BLEND);q.blendEquation(q.FUNC_ADD);q.blendFunc(q.SRC_ALPHA,q.ONE_MINUS_SRC_ALPHA);q.viewport(Ga,Ha,Qa,Ra);Sa(N.r,N.g,N.b,ea)},cb=function(){Xa=Ka=null;ma="";Aa=-1;jb=!0;U.reset()};db();this.context=q;this.extensions=ba;this.state=U;var mb=q.getParameter(q.MAX_TEXTURE_IMAGE_UNITS),Jb=q.getParameter(q.MAX_VERTEX_TEXTURE_IMAGE_UNITS),Kb=q.getParameter(q.MAX_TEXTURE_SIZE),
-Wb=q.getParameter(q.MAX_CUBE_MAP_TEXTURE_SIZE),rb=0<Jb,qb=rb&&ba.get("OES_texture_float"),Xb=q.getShaderPrecisionFormat(q.VERTEX_SHADER,q.HIGH_FLOAT),Yb=q.getShaderPrecisionFormat(q.VERTEX_SHADER,q.MEDIUM_FLOAT),Zb=q.getShaderPrecisionFormat(q.FRAGMENT_SHADER,q.HIGH_FLOAT),$b=q.getShaderPrecisionFormat(q.FRAGMENT_SHADER,q.MEDIUM_FLOAT),Ub=function(){var a;return function(){if(void 0!==a)return a;a=[];if(ba.get("WEBGL_compressed_texture_pvrtc")||ba.get("WEBGL_compressed_texture_s3tc"))for(var b=q.getParameter(q.COMPRESSED_TEXTURE_FORMATS),
-c=0;c<b.length;c++)a.push(b[c]);return a}}(),ac=0<Xb.precision&&0<Zb.precision,eb=0<Yb.precision&&0<$b.precision;"highp"!==L||ac||(eb?(L="mediump",THREE.warn("THREE.WebGLRenderer: highp not supported, using mediump.")):(L="lowp",THREE.warn("THREE.WebGLRenderer: highp and mediump not supported, using lowp.")));"mediump"!==L||eb||(L="lowp",THREE.warn("THREE.WebGLRenderer: mediump not supported, using lowp."));var bc=new THREE.ShadowMapPlugin(this,W,Y,ta),cc=new THREE.SpritePlugin(this,V),dc=new THREE.LensFlarePlugin(this,
-ka);this.getContext=function(){return q};this.forceContextLoss=function(){ba.get("WEBGL_lose_context").loseContext()};this.supportsVertexTextures=function(){return rb};this.supportsFloatTextures=function(){return ba.get("OES_texture_float")};this.supportsHalfFloatTextures=function(){return ba.get("OES_texture_half_float")};this.supportsStandardDerivatives=function(){return ba.get("OES_standard_derivatives")};this.supportsCompressedTextureS3TC=function(){return ba.get("WEBGL_compressed_texture_s3tc")};
-this.supportsCompressedTexturePVRTC=function(){return ba.get("WEBGL_compressed_texture_pvrtc")};this.supportsBlendMinMax=function(){return ba.get("EXT_blend_minmax")};this.getMaxAnisotropy=function(){var a;return function(){if(void 0!==a)return a;var b=ba.get("EXT_texture_filter_anisotropic");return a=null!==b?q.getParameter(b.MAX_TEXTURE_MAX_ANISOTROPY_EXT):0}}();this.getPrecision=function(){return L};this.getPixelRatio=function(){return P};this.setPixelRatio=function(a){P=a};this.getSize=function(){return{width:H,
-height:J}};this.setSize=function(a,b,c){H=a;J=b;F.width=a*P;F.height=b*P;!1!==c&&(F.style.width=a+"px",F.style.height=b+"px");this.setViewport(0,0,a,b)};this.setViewport=function(a,b,c,d){Ga=a*P;Ha=b*P;Qa=c*P;Ra=d*P;q.viewport(Ga,Ha,Qa,Ra)};this.setScissor=function(a,b,c,d){q.scissor(a*P,b*P,c*P,d*P)};this.enableScissorTest=function(a){a?q.enable(q.SCISSOR_TEST):q.disable(q.SCISSOR_TEST)};this.getClearColor=function(){return N};this.setClearColor=function(a,b){N.set(a);ea=void 0!==b?b:1;Sa(N.r,N.g,
-N.b,ea)};this.getClearAlpha=function(){return ea};this.setClearAlpha=function(a){ea=a;Sa(N.r,N.g,N.b,ea)};this.clear=function(a,b,c){var d=0;if(void 0===a||a)d|=q.COLOR_BUFFER_BIT;if(void 0===b||b)d|=q.DEPTH_BUFFER_BIT;if(void 0===c||c)d|=q.STENCIL_BUFFER_BIT;q.clear(d)};this.clearColor=function(){q.clear(q.COLOR_BUFFER_BIT)};this.clearDepth=function(){q.clear(q.DEPTH_BUFFER_BIT)};this.clearStencil=function(){q.clear(q.STENCIL_BUFFER_BIT)};this.clearTarget=function(a,b,c,d){this.setRenderTarget(a);
-this.clear(b,c,d)};this.resetGLState=cb;var fb=function(a){a.target.traverse(function(a){a.removeEventListener("remove",fb);if(a instanceof THREE.Mesh||a instanceof THREE.PointCloud||a instanceof THREE.Line)delete Y[a.id];else if(a instanceof THREE.ImmediateRenderObject||a.immediateRenderCallback)for(var b=ta,c=b.length-1;0<=c;c--)b[c].object===a&&b.splice(c,1);delete a.__webglInit;delete a._modelViewMatrix;delete a._normalMatrix;delete a.__webglActive})},gb=function(a){a=a.target;a.removeEventListener("dispose",
-gb);delete a.__webglInit;if(a instanceof THREE.BufferGeometry){for(var b in a.attributes){var c=a.attributes[b];void 0!==c.buffer&&(q.deleteBuffer(c.buffer),delete c.buffer)}O.info.memory.geometries--}else if(b=za[a.id],void 0!==b){for(var c=0,d=b.length;c<d;c++){var e=b[c];if(void 0!==e.numMorphTargets){for(var f=0,g=e.numMorphTargets;f<g;f++)q.deleteBuffer(e.__webglMorphTargetsBuffers[f]);delete e.__webglMorphTargetsBuffers}if(void 0!==e.numMorphNormals){f=0;for(g=e.numMorphNormals;f<g;f++)q.deleteBuffer(e.__webglMorphNormalsBuffers[f]);
-delete e.__webglMorphNormalsBuffers}ya.delete(e)}delete za[a.id]}else ya.delete(a);ma=""},Fb=function(a){a=a.target;a.removeEventListener("dispose",Fb);a.image&&a.image.__webglTextureCube?(q.deleteTexture(a.image.__webglTextureCube),delete a.image.__webglTextureCube):void 0!==a.__webglInit&&(q.deleteTexture(a.__webglTexture),delete a.__webglTexture,delete a.__webglInit);O.info.memory.textures--},pb=function(a){a=a.target;a.removeEventListener("dispose",pb);if(a&&void 0!==a.__webglTexture){q.deleteTexture(a.__webglTexture);
-delete a.__webglTexture;if(a instanceof THREE.WebGLRenderTargetCube)for(var b=0;6>b;b++)q.deleteFramebuffer(a.__webglFramebuffer[b]),q.deleteRenderbuffer(a.__webglRenderbuffer[b]);else q.deleteFramebuffer(a.__webglFramebuffer),q.deleteRenderbuffer(a.__webglRenderbuffer);delete a.__webglFramebuffer;delete a.__webglRenderbuffer}O.info.memory.textures--},Mb=function(a){a=a.target;a.removeEventListener("dispose",Mb);Lb(a)},Lb=function(a){var b=a.program.program;if(void 0!==b){a.program=void 0;var c,d,
-e=!1;a=0;for(c=ua.length;a<c;a++)if(d=ua[a],d.program===b){d.usedTimes--;0===d.usedTimes&&(e=!0);break}if(!0===e){e=[];a=0;for(c=ua.length;a<c;a++)d=ua[a],d.program!==b&&e.push(d);ua=e;q.deleteProgram(b);O.info.memory.programs--}}};this.renderBufferImmediate=function(a,b,c){U.initAttributes();a.hasPositions&&!a.__webglVertexBuffer&&(a.__webglVertexBuffer=q.createBuffer());a.hasNormals&&!a.__webglNormalBuffer&&(a.__webglNormalBuffer=q.createBuffer());a.hasUvs&&!a.__webglUvBuffer&&(a.__webglUvBuffer=
-q.createBuffer());a.hasColors&&!a.__webglColorBuffer&&(a.__webglColorBuffer=q.createBuffer());a.hasPositions&&(q.bindBuffer(q.ARRAY_BUFFER,a.__webglVertexBuffer),q.bufferData(q.ARRAY_BUFFER,a.positionArray,q.DYNAMIC_DRAW),U.enableAttribute(b.attributes.position),q.vertexAttribPointer(b.attributes.position,3,q.FLOAT,!1,0,0));if(a.hasNormals){q.bindBuffer(q.ARRAY_BUFFER,a.__webglNormalBuffer);if(!1===c instanceof THREE.MeshPhongMaterial&&c.shading===THREE.FlatShading){var d,e,f,g,h,k,l,m,n,p,r,s=3*
-a.count;for(r=0;r<s;r+=9)p=a.normalArray,d=p[r],e=p[r+1],f=p[r+2],g=p[r+3],k=p[r+4],m=p[r+5],h=p[r+6],l=p[r+7],n=p[r+8],d=(d+g+h)/3,e=(e+k+l)/3,f=(f+m+n)/3,p[r]=d,p[r+1]=e,p[r+2]=f,p[r+3]=d,p[r+4]=e,p[r+5]=f,p[r+6]=d,p[r+7]=e,p[r+8]=f}q.bufferData(q.ARRAY_BUFFER,a.normalArray,q.DYNAMIC_DRAW);U.enableAttribute(b.attributes.normal);q.vertexAttribPointer(b.attributes.normal,3,q.FLOAT,!1,0,0)}a.hasUvs&&c.map&&(q.bindBuffer(q.ARRAY_BUFFER,a.__webglUvBuffer),q.bufferData(q.ARRAY_BUFFER,a.uvArray,q.DYNAMIC_DRAW),
-U.enableAttribute(b.attributes.uv),q.vertexAttribPointer(b.attributes.uv,2,q.FLOAT,!1,0,0));a.hasColors&&c.vertexColors!==THREE.NoColors&&(q.bindBuffer(q.ARRAY_BUFFER,a.__webglColorBuffer),q.bufferData(q.ARRAY_BUFFER,a.colorArray,q.DYNAMIC_DRAW),U.enableAttribute(b.attributes.color),q.vertexAttribPointer(b.attributes.color,3,q.FLOAT,!1,0,0));U.disableUnusedAttributes();q.drawArrays(q.TRIANGLES,0,a.count);a.count=0};this.renderBufferDirect=function(a,b,d,e,f,g){if(!1!==e.visible)if(l(g),a=u(a,b,d,
-e,g),b=!1,d="direct_"+f.id+"_"+a.id+"_"+(e.wireframe?1:0),d!==ma&&(ma=d,b=!0),b&&U.initAttributes(),g instanceof THREE.Mesh){g=!0===e.wireframe?q.LINES:q.TRIANGLES;var h=f.attributes.index;if(h){var k,m;h.array instanceof Uint32Array&&ba.get("OES_element_index_uint")?(k=q.UNSIGNED_INT,m=4):(k=q.UNSIGNED_SHORT,m=2);d=f.offsets;if(0===d.length)b&&(c(e,a,f,0),q.bindBuffer(q.ELEMENT_ARRAY_BUFFER,h.buffer)),q.drawElements(g,h.array.length,k,0),O.info.render.calls++,O.info.render.vertices+=h.array.length,
-O.info.render.faces+=h.array.length/3;else{b=!0;for(var n=0,p=d.length;n<p;n++){var r=d[n].index;b&&(c(e,a,f,r),q.bindBuffer(q.ELEMENT_ARRAY_BUFFER,h.buffer));q.drawElements(g,d[n].count,k,d[n].start*m);O.info.render.calls++;O.info.render.vertices+=d[n].count;O.info.render.faces+=d[n].count/3}}}else b&&c(e,a,f,0),e=f.attributes.position,q.drawArrays(g,0,e.array.length/e.itemSize),O.info.render.calls++,O.info.render.vertices+=e.array.length/e.itemSize,O.info.render.faces+=e.array.length/(3*e.itemSize)}else if(g instanceof
-THREE.PointCloud)if(g=q.POINTS,h=f.attributes.index)if(h.array instanceof Uint32Array&&ba.get("OES_element_index_uint")?(k=q.UNSIGNED_INT,m=4):(k=q.UNSIGNED_SHORT,m=2),d=f.offsets,0===d.length)b&&(c(e,a,f,0),q.bindBuffer(q.ELEMENT_ARRAY_BUFFER,h.buffer)),q.drawElements(g,h.array.length,k,0),O.info.render.calls++,O.info.render.points+=h.array.length;else for(1<d.length&&(b=!0),n=0,p=d.length;n<p;n++)r=d[n].index,b&&(c(e,a,f,r),q.bindBuffer(q.ELEMENT_ARRAY_BUFFER,h.buffer)),q.drawElements(g,d[n].count,
-k,d[n].start*m),O.info.render.calls++,O.info.render.points+=d[n].count;else if(b&&c(e,a,f,0),e=f.attributes.position,d=f.offsets,0===d.length)q.drawArrays(g,0,e.array.length/3),O.info.render.calls++,O.info.render.points+=e.array.length/3;else for(n=0,p=d.length;n<p;n++)q.drawArrays(g,d[n].index,d[n].count),O.info.render.calls++,O.info.render.points+=d[n].count;else if(g instanceof THREE.Line)if(g=g.mode===THREE.LineStrip?q.LINE_STRIP:q.LINES,U.setLineWidth(e.linewidth*P),h=f.attributes.index)if(h.array instanceof
-Uint32Array?(k=q.UNSIGNED_INT,m=4):(k=q.UNSIGNED_SHORT,m=2),d=f.offsets,0===d.length)b&&(c(e,a,f,0),q.bindBuffer(q.ELEMENT_ARRAY_BUFFER,h.buffer)),q.drawElements(g,h.array.length,k,0),O.info.render.calls++,O.info.render.vertices+=h.array.length;else for(1<d.length&&(b=!0),n=0,p=d.length;n<p;n++)r=d[n].index,b&&(c(e,a,f,r),q.bindBuffer(q.ELEMENT_ARRAY_BUFFER,h.buffer)),q.drawElements(g,d[n].count,k,d[n].start*m),O.info.render.calls++,O.info.render.vertices+=d[n].count;else if(b&&c(e,a,f,0),e=f.attributes.position,
-d=f.offsets,0===d.length)q.drawArrays(g,0,e.array.length/3),O.info.render.calls++,O.info.render.vertices+=e.array.length/3;else for(n=0,p=d.length;n<p;n++)q.drawArrays(g,d[n].index,d[n].count),O.info.render.calls++,O.info.render.vertices+=d[n].count};this.renderBuffer=function(a,b,c,d,e,g){if(!1!==d.visible){l(g);c=u(a,b,c,d,g);b=c.attributes;a=!1;c=e.id+"_"+c.id+"_"+(d.wireframe?1:0);c!==ma&&(ma=c,a=!0);a&&U.initAttributes();if(!d.morphTargets&&0<=b.position)a&&(q.bindBuffer(q.ARRAY_BUFFER,e.__webglVertexBuffer),
-U.enableAttribute(b.position),q.vertexAttribPointer(b.position,3,q.FLOAT,!1,0,0));else if(g.morphTargetBase){c=d.program.attributes;-1!==g.morphTargetBase&&0<=c.position?(q.bindBuffer(q.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[g.morphTargetBase]),U.enableAttribute(c.position),q.vertexAttribPointer(c.position,3,q.FLOAT,!1,0,0)):0<=c.position&&(q.bindBuffer(q.ARRAY_BUFFER,e.__webglVertexBuffer),U.enableAttribute(c.position),q.vertexAttribPointer(c.position,3,q.FLOAT,!1,0,0));if(g.morphTargetForcedOrder.length)for(var h=
-0,k=g.morphTargetForcedOrder,m=g.morphTargetInfluences,n;h<d.numSupportedMorphTargets&&h<k.length;)n=c["morphTarget"+h],0<=n&&(q.bindBuffer(q.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[k[h]]),U.enableAttribute(n),q.vertexAttribPointer(n,3,q.FLOAT,!1,0,0)),n=c["morphNormal"+h],0<=n&&d.morphNormals&&(q.bindBuffer(q.ARRAY_BUFFER,e.__webglMorphNormalsBuffers[k[h]]),U.enableAttribute(n),q.vertexAttribPointer(n,3,q.FLOAT,!1,0,0)),g.__webglMorphTargetInfluences[h]=m[k[h]],h++;else{k=[];m=g.morphTargetInfluences;
-h=g.geometry.morphTargets;m.length>h.length&&(THREE.warn("THREE.WebGLRenderer: Influences array is bigger than morphTargets array."),m.length=h.length);h=0;for(n=m.length;h<n;h++)k.push([m[h],h]);k.length>d.numSupportedMorphTargets?(k.sort(f),k.length=d.numSupportedMorphTargets):k.length>d.numSupportedMorphNormals?k.sort(f):0===k.length&&k.push([0,0]);for(var h=0,p=d.numSupportedMorphTargets;h<p;h++)if(k[h]){var r=k[h][1];n=c["morphTarget"+h];0<=n&&(q.bindBuffer(q.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[r]),
-U.enableAttribute(n),q.vertexAttribPointer(n,3,q.FLOAT,!1,0,0));n=c["morphNormal"+h];0<=n&&d.morphNormals&&(q.bindBuffer(q.ARRAY_BUFFER,e.__webglMorphNormalsBuffers[r]),U.enableAttribute(n),q.vertexAttribPointer(n,3,q.FLOAT,!1,0,0));g.__webglMorphTargetInfluences[h]=m[r]}else g.__webglMorphTargetInfluences[h]=0}null!==d.program.uniforms.morphTargetInfluences&&q.uniform1fv(d.program.uniforms.morphTargetInfluences,g.__webglMorphTargetInfluences)}if(a){if(e.__webglCustomAttributesList)for(c=0,m=e.__webglCustomAttributesList.length;c<
-m;c++)k=e.__webglCustomAttributesList[c],0<=b[k.buffer.belongsToAttribute]&&(q.bindBuffer(q.ARRAY_BUFFER,k.buffer),U.enableAttribute(b[k.buffer.belongsToAttribute]),q.vertexAttribPointer(b[k.buffer.belongsToAttribute],k.size,q.FLOAT,!1,0,0));0<=b.color&&(0<g.geometry.colors.length||0<g.geometry.faces.length?(q.bindBuffer(q.ARRAY_BUFFER,e.__webglColorBuffer),U.enableAttribute(b.color),q.vertexAttribPointer(b.color,3,q.FLOAT,!1,0,0)):void 0!==d.defaultAttributeValues&&q.vertexAttrib3fv(b.color,d.defaultAttributeValues.color));
-0<=b.normal&&(q.bindBuffer(q.ARRAY_BUFFER,e.__webglNormalBuffer),U.enableAttribute(b.normal),q.vertexAttribPointer(b.normal,3,q.FLOAT,!1,0,0));0<=b.tangent&&(q.bindBuffer(q.ARRAY_BUFFER,e.__webglTangentBuffer),U.enableAttribute(b.tangent),q.vertexAttribPointer(b.tangent,4,q.FLOAT,!1,0,0));0<=b.uv&&(g.geometry.faceVertexUvs[0]?(q.bindBuffer(q.ARRAY_BUFFER,e.__webglUVBuffer),U.enableAttribute(b.uv),q.vertexAttribPointer(b.uv,2,q.FLOAT,!1,0,0)):void 0!==d.defaultAttributeValues&&q.vertexAttrib2fv(b.uv,
-d.defaultAttributeValues.uv));0<=b.uv2&&(g.geometry.faceVertexUvs[1]?(q.bindBuffer(q.ARRAY_BUFFER,e.__webglUV2Buffer),U.enableAttribute(b.uv2),q.vertexAttribPointer(b.uv2,2,q.FLOAT,!1,0,0)):void 0!==d.defaultAttributeValues&&q.vertexAttrib2fv(b.uv2,d.defaultAttributeValues.uv2));d.skinning&&0<=b.skinIndex&&0<=b.skinWeight&&(q.bindBuffer(q.ARRAY_BUFFER,e.__webglSkinIndicesBuffer),U.enableAttribute(b.skinIndex),q.vertexAttribPointer(b.skinIndex,4,q.FLOAT,!1,0,0),q.bindBuffer(q.ARRAY_BUFFER,e.__webglSkinWeightsBuffer),
-U.enableAttribute(b.skinWeight),q.vertexAttribPointer(b.skinWeight,4,q.FLOAT,!1,0,0));0<=b.lineDistance&&(q.bindBuffer(q.ARRAY_BUFFER,e.__webglLineDistanceBuffer),U.enableAttribute(b.lineDistance),q.vertexAttribPointer(b.lineDistance,1,q.FLOAT,!1,0,0))}U.disableUnusedAttributes();g instanceof THREE.Mesh?(g=e.__typeArray===Uint32Array?q.UNSIGNED_INT:q.UNSIGNED_SHORT,d.wireframe?(U.setLineWidth(d.wireframeLinewidth*P),a&&q.bindBuffer(q.ELEMENT_ARRAY_BUFFER,e.__webglLineBuffer),q.drawElements(q.LINES,
-e.__webglLineCount,g,0)):(a&&q.bindBuffer(q.ELEMENT_ARRAY_BUFFER,e.__webglFaceBuffer),q.drawElements(q.TRIANGLES,e.__webglFaceCount,g,0)),O.info.render.calls++,O.info.render.vertices+=e.__webglFaceCount,O.info.render.faces+=e.__webglFaceCount/3):g instanceof THREE.Line?(g=g.mode===THREE.LineStrip?q.LINE_STRIP:q.LINES,U.setLineWidth(d.linewidth*P),q.drawArrays(g,0,e.__webglLineCount),O.info.render.calls++):g instanceof THREE.PointCloud&&(q.drawArrays(q.POINTS,0,e.__webglParticleCount),O.info.render.calls++,
-O.info.render.points+=e.__webglParticleCount)}};this.render=function(a,b,c,f){if(!1===b instanceof THREE.Camera)THREE.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.");else{var l=a.fog;ma="";Aa=-1;Xa=null;jb=!0;!0===a.autoUpdate&&a.updateMatrixWorld();void 0===b.parent&&b.updateMatrixWorld();a.traverse(function(a){a instanceof THREE.SkinnedMesh&&a.skeleton.update()});b.matrixWorldInverse.getInverse(b.matrixWorld);Ja.multiplyMatrices(b.projectionMatrix,b.matrixWorldInverse);
-Ia.setFromMatrix(Ja);W.length=0;pa.length=0;qa.length=0;V.length=0;ka.length=0;g(a);!0===O.sortObjects&&(pa.sort(d),qa.sort(e));bc.render(a,b);O.info.render.calls=0;O.info.render.vertices=0;O.info.render.faces=0;O.info.render.points=0;this.setRenderTarget(c);(this.autoClear||f)&&this.clear(this.autoClearColor,this.autoClearDepth,this.autoClearStencil);f=0;for(var n=ta.length;f<n;f++){var p=ta[f],q=p.object;q.visible&&(y(q,b),m(p))}a.overrideMaterial?(f=a.overrideMaterial,s(f),h(pa,b,W,l,f),h(qa,b,
-W,l,f),k(ta,"",b,W,l,f)):(U.setBlending(THREE.NoBlending),h(pa,b,W,l,null),k(ta,"opaque",b,W,l,null),h(qa,b,W,l,null),k(ta,"transparent",b,W,l,null));cc.render(a,b);dc.render(a,b,nb,ob);c&&c.generateMipmaps&&c.minFilter!==THREE.NearestFilter&&c.minFilter!==THREE.LinearFilter&&G(c);U.setDepthTest(!0);U.setDepthWrite(!0);U.setColorWrite(!0)}};this.renderImmediateObject=function(a,b,c,d,e){var f=u(a,b,c,d,e);ma="";O.setMaterialFaces(d);e.immediateRenderCallback?e.immediateRenderCallback(f,q,Ia):e.render(function(a){O.renderBufferImmediate(a,
-f,d)})};var za={},hb=0,Vb={MeshDepthMaterial:"depth",MeshNormalMaterial:"normal",MeshBasicMaterial:"basic",MeshLambertMaterial:"lambert",MeshPhongMaterial:"phong",LineBasicMaterial:"basic",LineDashedMaterial:"dashed",PointCloudMaterial:"particle_basic"};this.setFaceCulling=function(a,b){a===THREE.CullFaceNone?q.disable(q.CULL_FACE):(b===THREE.FrontFaceDirectionCW?q.frontFace(q.CW):q.frontFace(q.CCW),a===THREE.CullFaceBack?q.cullFace(q.BACK):a===THREE.CullFaceFront?q.cullFace(q.FRONT):q.cullFace(q.FRONT_AND_BACK),
-q.enable(q.CULL_FACE))};this.setMaterialFaces=function(a){U.setDoubleSided(a.side===THREE.DoubleSide);U.setFlipSided(a.side===THREE.BackSide)};this.uploadTexture=function(a,b){void 0===a.__webglInit&&(a.__webglInit=!0,a.addEventListener("dispose",Fb),a.__webglTexture=q.createTexture(),O.info.memory.textures++);q.activeTexture(q.TEXTURE0+b);q.bindTexture(q.TEXTURE_2D,a.__webglTexture);q.pixelStorei(q.UNPACK_FLIP_Y_WEBGL,a.flipY);q.pixelStorei(q.UNPACK_PREMULTIPLY_ALPHA_WEBGL,a.premultiplyAlpha);q.pixelStorei(q.UNPACK_ALIGNMENT,
-a.unpackAlignment);a.image=A(a.image,Kb);var c=a.image,d=THREE.Math.isPowerOfTwo(c.width)&&THREE.Math.isPowerOfTwo(c.height),e=C(a.format),f=C(a.type);I(q.TEXTURE_2D,a,d);var g=a.mipmaps;if(a instanceof THREE.DataTexture)if(0<g.length&&d){for(var h=0,k=g.length;h<k;h++)c=g[h],q.texImage2D(q.TEXTURE_2D,h,e,c.width,c.height,0,e,f,c.data);a.generateMipmaps=!1}else q.texImage2D(q.TEXTURE_2D,0,e,c.width,c.height,0,e,f,c.data);else if(a instanceof THREE.CompressedTexture)for(h=0,k=g.length;h<k;h++)c=g[h],
-a.format!==THREE.RGBAFormat&&a.format!==THREE.RGBFormat?-1<Ub().indexOf(e)?q.compressedTexImage2D(q.TEXTURE_2D,h,e,c.width,c.height,0,c.data):THREE.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()"):q.texImage2D(q.TEXTURE_2D,h,e,c.width,c.height,0,e,f,c.data);else if(0<g.length&&d){h=0;for(k=g.length;h<k;h++)c=g[h],q.texImage2D(q.TEXTURE_2D,h,e,e,f,c);a.generateMipmaps=!1}else q.texImage2D(q.TEXTURE_2D,0,e,e,f,a.image);a.generateMipmaps&&d&&q.generateMipmap(q.TEXTURE_2D);
-a.needsUpdate=!1;if(a.onUpdate)a.onUpdate(a)};this.setTexture=function(a,b){!0===a.needsUpdate?!1===a.image.complete?THREE.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete",a):O.uploadTexture(a,b):(q.activeTexture(q.TEXTURE0+b),q.bindTexture(q.TEXTURE_2D,a.__webglTexture))};this.setRenderTarget=function(a){var b=a instanceof THREE.WebGLRenderTargetCube;if(a&&void 0===a.__webglFramebuffer){void 0===a.depthBuffer&&(a.depthBuffer=!0);void 0===a.stencilBuffer&&(a.stencilBuffer=
-!0);a.addEventListener("dispose",pb);a.__webglTexture=q.createTexture();O.info.memory.textures++;var c=THREE.Math.isPowerOfTwo(a.width)&&THREE.Math.isPowerOfTwo(a.height),d=C(a.format),e=C(a.type);if(b){a.__webglFramebuffer=[];a.__webglRenderbuffer=[];q.bindTexture(q.TEXTURE_CUBE_MAP,a.__webglTexture);I(q.TEXTURE_CUBE_MAP,a,c);for(var f=0;6>f;f++){a.__webglFramebuffer[f]=q.createFramebuffer();a.__webglRenderbuffer[f]=q.createRenderbuffer();q.texImage2D(q.TEXTURE_CUBE_MAP_POSITIVE_X+f,0,d,a.width,
-a.height,0,d,e,null);var g=a,h=q.TEXTURE_CUBE_MAP_POSITIVE_X+f;q.bindFramebuffer(q.FRAMEBUFFER,a.__webglFramebuffer[f]);q.framebufferTexture2D(q.FRAMEBUFFER,q.COLOR_ATTACHMENT0,h,g.__webglTexture,0);D(a.__webglRenderbuffer[f],a)}c&&q.generateMipmap(q.TEXTURE_CUBE_MAP)}else a.__webglFramebuffer=q.createFramebuffer(),a.__webglRenderbuffer=a.shareDepthFrom?a.shareDepthFrom.__webglRenderbuffer:q.createRenderbuffer(),q.bindTexture(q.TEXTURE_2D,a.__webglTexture),I(q.TEXTURE_2D,a,c),q.texImage2D(q.TEXTURE_2D,
-0,d,a.width,a.height,0,d,e,null),d=q.TEXTURE_2D,q.bindFramebuffer(q.FRAMEBUFFER,a.__webglFramebuffer),q.framebufferTexture2D(q.FRAMEBUFFER,q.COLOR_ATTACHMENT0,d,a.__webglTexture,0),a.shareDepthFrom?a.depthBuffer&&!a.stencilBuffer?q.framebufferRenderbuffer(q.FRAMEBUFFER,q.DEPTH_ATTACHMENT,q.RENDERBUFFER,a.__webglRenderbuffer):a.depthBuffer&&a.stencilBuffer&&q.framebufferRenderbuffer(q.FRAMEBUFFER,q.DEPTH_STENCIL_ATTACHMENT,q.RENDERBUFFER,a.__webglRenderbuffer):D(a.__webglRenderbuffer,a),c&&q.generateMipmap(q.TEXTURE_2D);
-b?q.bindTexture(q.TEXTURE_CUBE_MAP,null):q.bindTexture(q.TEXTURE_2D,null);q.bindRenderbuffer(q.RENDERBUFFER,null);q.bindFramebuffer(q.FRAMEBUFFER,null)}a?(b=b?a.__webglFramebuffer[a.activeCubeFace]:a.__webglFramebuffer,c=a.width,a=a.height,e=d=0):(b=null,c=Qa,a=Ra,d=Ga,e=Ha);b!==sa&&(q.bindFramebuffer(q.FRAMEBUFFER,b),q.viewport(d,e,c,a),sa=b);nb=c;ob=a};this.readRenderTargetPixels=function(a,b,c,d,e,f){if(!(a instanceof THREE.WebGLRenderTarget))THREE.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");
-else if(a.__webglFramebuffer)if(a.format!==THREE.RGBAFormat)THREE.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA format. readPixels can read only RGBA format.");else{var g=!1;a.__webglFramebuffer!==sa&&(q.bindFramebuffer(q.FRAMEBUFFER,a.__webglFramebuffer),g=!0);q.checkFramebufferStatus(q.FRAMEBUFFER)===q.FRAMEBUFFER_COMPLETE?q.readPixels(b,c,d,e,q.RGBA,q.UNSIGNED_BYTE,f):THREE.error("THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.");
-g&&q.bindFramebuffer(q.FRAMEBUFFER,sa)}};this.initMaterial=function(){THREE.warn("THREE.WebGLRenderer: .initMaterial() has been removed.")};this.addPrePlugin=function(){THREE.warn("THREE.WebGLRenderer: .addPrePlugin() has been removed.")};this.addPostPlugin=function(){THREE.warn("THREE.WebGLRenderer: .addPostPlugin() has been removed.")};this.updateShadowMap=function(){THREE.warn("THREE.WebGLRenderer: .updateShadowMap() has been removed.")}};
+a[0]}function g(a){if(!1!==a.visible){if(!(a instanceof THREE.Scene||a instanceof THREE.Group)){void 0===a.__webglInit&&(a.__webglInit=!0,a._modelViewMatrix=new THREE.Matrix4,a._normalMatrix=new THREE.Matrix3,a.addEventListener("removed",fb));var b=a.geometry;void 0!==b&&void 0===b.__webglInit&&(b.__webglInit=!0,b.addEventListener("dispose",gb),b instanceof THREE.BufferGeometry?O.info.memory.geometries++:a instanceof THREE.Mesh?n(a,b):a instanceof THREE.Line?ya.initLineBuffers(b,a):a instanceof THREE.PointCloud&&
+ya.initPointCloudBuffers(b,a));if(void 0===a.__webglActive)if(a.__webglActive=!0,a instanceof THREE.Mesh)if(b instanceof THREE.BufferGeometry)p(Y,b,a);else{if(b instanceof THREE.Geometry)for(var b=za[b.id],c=0,d=b.length;c<d;c++)p(Y,b[c],a)}else a instanceof THREE.Line||a instanceof THREE.PointCloud?p(Y,b,a):(a instanceof THREE.ImmediateRenderObject||a.immediateRenderCallback)&&ta.push({id:null,object:a,opaque:null,transparent:null,z:0});if(a instanceof THREE.Light)W.push(a);else if(a instanceof THREE.Sprite)V.push(a);
+else if(a instanceof THREE.LensFlare)ka.push(a);else if((b=Y[a.id])&&(!1===a.frustumCulled||!0===Ia.intersectsObject(a)))for(c=0,d=b.length;c<d;c++){var e=b[c],f=e,h=f.object,k=f.buffer,l=h.geometry,h=h.material;h instanceof THREE.MeshFaceMaterial?(h=h.materials[l instanceof THREE.BufferGeometry?0:k.materialIndex],f.material=h,h.transparent?qa.push(f):pa.push(f)):h&&(f.material=h,h.transparent?qa.push(f):pa.push(f));e.render=!0;!0===O.sortObjects&&(oa.setFromMatrixPosition(a.matrixWorld),oa.applyProjection(Ja),
+e.z=oa.z)}}c=0;for(d=a.children.length;c<d;c++)g(a.children[c])}}function h(a,b,c,d,e){for(var f,g=0,h=a.length;g<h;g++){f=a[g];var k=f.object,l=f.buffer;y(k,b);if(e)f=e;else{f=f.material;if(!f)continue;s(f)}O.setMaterialFaces(f);l instanceof THREE.BufferGeometry?O.renderBufferDirect(b,c,d,f,l,k):O.renderBuffer(b,c,d,f,l,k)}}function k(a,b,c,d,e,f){for(var g,h=0,k=a.length;h<k;h++){g=a[h];var l=g.object;if(l.visible){if(f)g=f;else{g=g[b];if(!g)continue;s(g)}O.renderImmediateObject(c,d,e,g,l)}}}function m(a){var b=
+a.object.material;b.transparent?(a.transparent=b,a.opaque=null):(a.opaque=b,a.transparent=null)}function n(a,b){var c=a.material,d=!1;if(void 0===za[b.id]||!0===b.groupsNeedUpdate){delete Y[a.id];for(var d=za,e=b.id,c=c instanceof THREE.MeshFaceMaterial,f=ba.get("OES_element_index_uint")?4294967296:65535,g,h={},k=b.morphTargets.length,l=b.morphNormals.length,m,n={},q=[],r=0,s=b.faces.length;r<s;r++){g=b.faces[r];var t=c?g.materialIndex:0;t in h||(h[t]={hash:t,counter:0});g=h[t].hash+"_"+h[t].counter;
+g in n||(m={id:hb++,faces3:[],materialIndex:t,vertices:0,numMorphTargets:k,numMorphNormals:l},n[g]=m,q.push(m));n[g].vertices+3>f&&(h[t].counter+=1,g=h[t].hash+"_"+h[t].counter,g in n||(m={id:hb++,faces3:[],materialIndex:t,vertices:0,numMorphTargets:k,numMorphNormals:l},n[g]=m,q.push(m)));n[g].faces3.push(r);n[g].vertices+=3}d[e]=q;b.groupsNeedUpdate=!1}e=za[b.id];c=0;for(f=e.length;c<f;c++)h=e[c],void 0===h.__webglVertexBuffer?(ya.initMeshBuffers(h,a),b.verticesNeedUpdate=!0,b.morphTargetsNeedUpdate=
+!0,b.elementsNeedUpdate=!0,b.uvsNeedUpdate=!0,b.normalsNeedUpdate=!0,b.tangentsNeedUpdate=!0,d=b.colorsNeedUpdate=!0):d=!1,(d||void 0===a.__webglActive)&&p(Y,h,a);a.__webglActive=!0}function p(a,b,c){var d=c.id;a[d]=a[d]||[];a[d].push({id:d,buffer:b,object:c,material:null,z:0})}function l(a){var c=a.geometry;if(c instanceof THREE.BufferGeometry){a=c.attributes;for(var c=c.attributesKeys,d=0,e=c.length;d<e;d++){var f=c[d],g=a[f],f="index"===f?q.ELEMENT_ARRAY_BUFFER:q.ARRAY_BUFFER;void 0===g.buffer?
+(g.buffer=q.createBuffer(),q.bindBuffer(f,g.buffer),q.bufferData(f,g.array,g instanceof THREE.DynamicBufferAttribute?q.DYNAMIC_DRAW:q.STATIC_DRAW),g.needsUpdate=!1):!0===g.needsUpdate&&(q.bindBuffer(f,g.buffer),void 0===g.updateRange||-1===g.updateRange.count?q.bufferSubData(f,0,g.array):0===g.updateRange.count?THREE.error("THREE.WebGLRenderer.updateObject: using updateRange for THREE.DynamicBufferAttribute and marked as needsUpdate but count is 0, ensure you are using set methods or updating manually."):
+(q.bufferSubData(f,g.updateRange.offset*g.array.BYTES_PER_ELEMENT,g.array.subarray(g.updateRange.offset,g.updateRange.offset+g.updateRange.count)),g.updateRange.count=0),g.needsUpdate=!1)}}else if(a instanceof THREE.Mesh){!0===c.groupsNeedUpdate&&n(a,c);e=za[c.id];d=0;for(g=e.length;d<g;d++){var f=e[d],h=b(a,f),k=h.attributes&&r(h);(c.verticesNeedUpdate||c.morphTargetsNeedUpdate||c.elementsNeedUpdate||c.uvsNeedUpdate||c.normalsNeedUpdate||c.colorsNeedUpdate||c.tangentsNeedUpdate||k)&&ya.setMeshBuffers(f,
+a,q.DYNAMIC_DRAW,!c.dynamic,h)}c.verticesNeedUpdate=!1;c.morphTargetsNeedUpdate=!1;c.elementsNeedUpdate=!1;c.uvsNeedUpdate=!1;c.normalsNeedUpdate=!1;c.colorsNeedUpdate=!1;c.tangentsNeedUpdate=!1;h.attributes&&t(h)}else a instanceof THREE.Line?(h=b(a,c),k=h.attributes&&r(h),(c.verticesNeedUpdate||c.colorsNeedUpdate||c.lineDistancesNeedUpdate||k)&&ya.setLineBuffers(c,q.DYNAMIC_DRAW),c.verticesNeedUpdate=!1,c.colorsNeedUpdate=!1,c.lineDistancesNeedUpdate=!1,h.attributes&&t(h)):a instanceof THREE.PointCloud&&
+(h=b(a,c),k=h.attributes&&r(h),(c.verticesNeedUpdate||c.colorsNeedUpdate||k)&&ya.setPointCloudBuffers(c,q.DYNAMIC_DRAW,a),c.verticesNeedUpdate=!1,c.colorsNeedUpdate=!1,h.attributes&&t(h))}function r(a){for(var b in a.attributes)if(a.attributes[b].needsUpdate)return!0;return!1}function t(a){for(var b in a.attributes)a.attributes[b].needsUpdate=!1}function s(a){!0===a.transparent?U.setBlending(a.blending,a.blendEquation,a.blendSrc,a.blendDst,a.blendEquationAlpha,a.blendSrcAlpha,a.blendDstAlpha):U.setBlending(THREE.NoBlending);
+U.setDepthTest(a.depthTest);U.setDepthWrite(a.depthWrite);U.setColorWrite(a.colorWrite);U.setPolygonOffset(a.polygonOffset,a.polygonOffsetFactor,a.polygonOffsetUnits)}function u(a,b,c,d,e){var f,g,h,k;ib=0;if(d.needsUpdate){d.program&&Lb(d);d.addEventListener("dispose",Mb);var l=Vb[d.type];if(l){var m=THREE.ShaderLib[l];d.__webglShader={uniforms:THREE.UniformsUtils.clone(m.uniforms),vertexShader:m.vertexShader,fragmentShader:m.fragmentShader}}else d.__webglShader={uniforms:d.uniforms,vertexShader:d.vertexShader,
+fragmentShader:d.fragmentShader};for(var n=0,p=0,r=0,s=0,t=0,u=b.length;t<u;t++){var y=b[t];y.onlyShadow||!1===y.visible||(y instanceof THREE.DirectionalLight&&n++,y instanceof THREE.PointLight&&p++,y instanceof THREE.SpotLight&&r++,y instanceof THREE.HemisphereLight&&s++)}f=n;g=p;h=r;k=s;for(var z,D=0,B=0,G=b.length;B<G;B++){var E=b[B];E.castShadow&&(E instanceof THREE.SpotLight&&D++,E instanceof THREE.DirectionalLight&&!E.shadowCascade&&D++)}z=D;var H;if(qb&&e&&e.skeleton&&e.skeleton.useVertexTexture)H=
+1024;else{var M=q.getParameter(q.MAX_VERTEX_UNIFORM_VECTORS),K=Math.floor((M-20)/4);void 0!==e&&e instanceof THREE.SkinnedMesh&&(K=Math.min(e.skeleton.bones.length,K),K<e.skeleton.bones.length&&THREE.warn("WebGLRenderer: too many bones - "+e.skeleton.bones.length+", this GPU supports just "+K+" (try OpenGL instead of ANGLE)"));H=K}var J={precision:L,supportsVertexTextures:rb,map:!!d.map,envMap:!!d.envMap,envMapMode:d.envMap&&d.envMap.mapping,lightMap:!!d.lightMap,aoMap:!!d.aoMap,bumpMap:!!d.bumpMap,
+normalMap:!!d.normalMap,specularMap:!!d.specularMap,alphaMap:!!d.alphaMap,combine:d.combine,vertexColors:d.vertexColors,fog:c,useFog:d.fog,fogExp:c instanceof THREE.FogExp2,flatShading:d.shading===THREE.FlatShading,sizeAttenuation:d.sizeAttenuation,logarithmicDepthBuffer:na,skinning:d.skinning,maxBones:H,useVertexTexture:qb&&e&&e.skeleton&&e.skeleton.useVertexTexture,morphTargets:d.morphTargets,morphNormals:d.morphNormals,maxMorphTargets:O.maxMorphTargets,maxMorphNormals:O.maxMorphNormals,maxDirLights:f,
+maxPointLights:g,maxSpotLights:h,maxHemiLights:k,maxShadows:z,shadowMapEnabled:O.shadowMapEnabled&&e.receiveShadow&&0<z,shadowMapType:O.shadowMapType,shadowMapDebug:O.shadowMapDebug,shadowMapCascade:O.shadowMapCascade,alphaTest:d.alphaTest,metal:d.metal,wrapAround:d.wrapAround,doubleSided:d.side===THREE.DoubleSide,flipSided:d.side===THREE.BackSide},P=[];l?P.push(l):(P.push(d.fragmentShader),P.push(d.vertexShader));if(void 0!==d.defines)for(var N in d.defines)P.push(N),P.push(d.defines[N]);for(N in J)P.push(N),
+P.push(J[N]);for(var R=P.join(),S,V=0,ta=ua.length;V<ta;V++){var U=ua[V];if(U.code===R){S=U;S.usedTimes++;break}}void 0===S&&(S=new THREE.WebGLProgram(O,R,d,J),ua.push(S),O.info.memory.programs=ua.length);d.program=S;var Y=S.attributes;if(d.morphTargets){d.numSupportedMorphTargets=0;for(var qa,pa="morphTarget",W=0;W<O.maxMorphTargets;W++)qa=pa+W,0<=Y[qa]&&d.numSupportedMorphTargets++}if(d.morphNormals)for(d.numSupportedMorphNormals=0,pa="morphNormal",W=0;W<O.maxMorphNormals;W++)qa=pa+W,0<=Y[qa]&&
+d.numSupportedMorphNormals++;d.uniformsList=[];for(var ka in d.__webglShader.uniforms){var $=d.program.uniforms[ka];$&&d.uniformsList.push([d.__webglShader.uniforms[ka],$])}d.needsUpdate=!1}d.morphTargets&&!e.__webglMorphTargetInfluences&&(e.__webglMorphTargetInfluences=new Float32Array(O.maxMorphTargets));var ba=!1,sa=!1,ea=!1,ma=d.program,fa=ma.uniforms,Q=d.__webglShader.uniforms;ma.id!==Ka&&(q.useProgram(ma.program),Ka=ma.id,ea=sa=ba=!0);d.id!==Aa&&(-1===Aa&&(ea=!0),Aa=d.id,sa=!0);if(ba||a!==Xa)q.uniformMatrix4fv(fa.projectionMatrix,
+!1,a.projectionMatrix.elements),na&&q.uniform1f(fa.logDepthBufFC,2/(Math.log(a.far+1)/Math.LN2)),a!==Xa&&(Xa=a),(d instanceof THREE.ShaderMaterial||d instanceof THREE.MeshPhongMaterial||d.envMap)&&null!==fa.cameraPosition&&(oa.setFromMatrixPosition(a.matrixWorld),q.uniform3f(fa.cameraPosition,oa.x,oa.y,oa.z)),(d instanceof THREE.MeshPhongMaterial||d instanceof THREE.MeshLambertMaterial||d instanceof THREE.MeshBasicMaterial||d instanceof THREE.ShaderMaterial||d.skinning)&&null!==fa.viewMatrix&&q.uniformMatrix4fv(fa.viewMatrix,
+!1,a.matrixWorldInverse.elements);if(d.skinning)if(e.bindMatrix&&null!==fa.bindMatrix&&q.uniformMatrix4fv(fa.bindMatrix,!1,e.bindMatrix.elements),e.bindMatrixInverse&&null!==fa.bindMatrixInverse&&q.uniformMatrix4fv(fa.bindMatrixInverse,!1,e.bindMatrixInverse.elements),qb&&e.skeleton&&e.skeleton.useVertexTexture){if(null!==fa.boneTexture){var ya=x();q.uniform1i(fa.boneTexture,ya);O.setTexture(e.skeleton.boneTexture,ya)}null!==fa.boneTextureWidth&&q.uniform1i(fa.boneTextureWidth,e.skeleton.boneTextureWidth);
+null!==fa.boneTextureHeight&&q.uniform1i(fa.boneTextureHeight,e.skeleton.boneTextureHeight)}else e.skeleton&&e.skeleton.boneMatrices&&null!==fa.boneGlobalMatrices&&q.uniformMatrix4fv(fa.boneGlobalMatrices,!1,e.skeleton.boneMatrices);if(sa){c&&d.fog&&(Q.fogColor.value=c.color,c instanceof THREE.Fog?(Q.fogNear.value=c.near,Q.fogFar.value=c.far):c instanceof THREE.FogExp2&&(Q.fogDensity.value=c.density));if(d instanceof THREE.MeshPhongMaterial||d instanceof THREE.MeshLambertMaterial||d.lights){if(jb){var ea=
+!0,da,va,ca,za=0,Ga=0,Ha=0,La,Qa,Ra,Ta,Ia,ga=Nb,Ja=ga.directional.colors,Sa=ga.directional.positions,sb=ga.point.colors,tb=ga.point.positions,fb=ga.point.distances,gb=ga.point.decays,ub=ga.spot.colors,vb=ga.spot.positions,hb=ga.spot.distances,wb=ga.spot.directions,mb=ga.spot.anglesCos,nb=ga.spot.exponents,ob=ga.spot.decays,xb=ga.hemi.skyColors,yb=ga.hemi.groundColors,zb=ga.hemi.positions,Ya=0,Ma=0,Ba=0,Ua=0,Ab=0,Bb=0,Cb=0,kb=0,Za=0,$a=0,Da=0,Va=0;da=0;for(va=b.length;da<va;da++)ca=b[da],ca.onlyShadow||
+(La=ca.color,Ta=ca.intensity,Ia=ca.distance,ca instanceof THREE.AmbientLight?ca.visible&&(za+=La.r,Ga+=La.g,Ha+=La.b):ca instanceof THREE.DirectionalLight?(Ab+=1,ca.visible&&(ia.setFromMatrixPosition(ca.matrixWorld),oa.setFromMatrixPosition(ca.target.matrixWorld),ia.sub(oa),ia.normalize(),Za=3*Ya,Sa[Za]=ia.x,Sa[Za+1]=ia.y,Sa[Za+2]=ia.z,w(Ja,Za,La,Ta),Ya+=1)):ca instanceof THREE.PointLight?(Bb+=1,ca.visible&&($a=3*Ma,w(sb,$a,La,Ta),oa.setFromMatrixPosition(ca.matrixWorld),tb[$a]=oa.x,tb[$a+1]=oa.y,
+tb[$a+2]=oa.z,fb[Ma]=Ia,gb[Ma]=0===ca.distance?0:ca.decay,Ma+=1)):ca instanceof THREE.SpotLight?(Cb+=1,ca.visible&&(Da=3*Ba,w(ub,Da,La,Ta),ia.setFromMatrixPosition(ca.matrixWorld),vb[Da]=ia.x,vb[Da+1]=ia.y,vb[Da+2]=ia.z,hb[Ba]=Ia,oa.setFromMatrixPosition(ca.target.matrixWorld),ia.sub(oa),ia.normalize(),wb[Da]=ia.x,wb[Da+1]=ia.y,wb[Da+2]=ia.z,mb[Ba]=Math.cos(ca.angle),nb[Ba]=ca.exponent,ob[Ba]=0===ca.distance?0:ca.decay,Ba+=1)):ca instanceof THREE.HemisphereLight&&(kb+=1,ca.visible&&(ia.setFromMatrixPosition(ca.matrixWorld),
+ia.normalize(),Va=3*Ua,zb[Va]=ia.x,zb[Va+1]=ia.y,zb[Va+2]=ia.z,Qa=ca.color,Ra=ca.groundColor,w(xb,Va,Qa,Ta),w(yb,Va,Ra,Ta),Ua+=1)));da=3*Ya;for(va=Math.max(Ja.length,3*Ab);da<va;da++)Ja[da]=0;da=3*Ma;for(va=Math.max(sb.length,3*Bb);da<va;da++)sb[da]=0;da=3*Ba;for(va=Math.max(ub.length,3*Cb);da<va;da++)ub[da]=0;da=3*Ua;for(va=Math.max(xb.length,3*kb);da<va;da++)xb[da]=0;da=3*Ua;for(va=Math.max(yb.length,3*kb);da<va;da++)yb[da]=0;ga.directional.length=Ya;ga.point.length=Ma;ga.spot.length=Ba;ga.hemi.length=
+Ua;ga.ambient[0]=za;ga.ambient[1]=Ga;ga.ambient[2]=Ha;jb=!1}if(ea){var la=Nb;Q.ambientLightColor.value=la.ambient;Q.directionalLightColor.value=la.directional.colors;Q.directionalLightDirection.value=la.directional.positions;Q.pointLightColor.value=la.point.colors;Q.pointLightPosition.value=la.point.positions;Q.pointLightDistance.value=la.point.distances;Q.pointLightDecay.value=la.point.decays;Q.spotLightColor.value=la.spot.colors;Q.spotLightPosition.value=la.spot.positions;Q.spotLightDistance.value=
+la.spot.distances;Q.spotLightDirection.value=la.spot.directions;Q.spotLightAngleCos.value=la.spot.anglesCos;Q.spotLightExponent.value=la.spot.exponents;Q.spotLightDecay.value=la.spot.decays;Q.hemisphereLightSkyColor.value=la.hemi.skyColors;Q.hemisphereLightGroundColor.value=la.hemi.groundColors;Q.hemisphereLightDirection.value=la.hemi.positions;v(Q,!0)}else v(Q,!1)}if(d instanceof THREE.MeshBasicMaterial||d instanceof THREE.MeshLambertMaterial||d instanceof THREE.MeshPhongMaterial){Q.opacity.value=
+d.opacity;Q.diffuse.value=d.color;Q.map.value=d.map;Q.lightMap.value=d.lightMap;Q.lightMapIntensity.value=d.lightMapIntensity;Q.aoMap.value=d.aoMap;Q.aoMapIntensity.value=d.aoMapIntensity;Q.specularMap.value=d.specularMap;Q.alphaMap.value=d.alphaMap;d.bumpMap&&(Q.bumpMap.value=d.bumpMap,Q.bumpScale.value=d.bumpScale);d.normalMap&&(Q.normalMap.value=d.normalMap,Q.normalScale.value.copy(d.normalScale));var Ea;d.map?Ea=d.map:d.specularMap?Ea=d.specularMap:d.normalMap?Ea=d.normalMap:d.bumpMap?Ea=d.bumpMap:
+d.alphaMap&&(Ea=d.alphaMap);if(void 0!==Ea){var bb=Ea.offset,cb=Ea.repeat;Q.offsetRepeat.value.set(bb.x,bb.y,cb.x,cb.y)}Q.envMap.value=d.envMap;Q.flipEnvMap.value=d.envMap instanceof THREE.WebGLRenderTargetCube?1:-1;Q.reflectivity.value=d.reflectivity;Q.refractionRatio.value=d.refractionRatio}if(d instanceof THREE.LineBasicMaterial)Q.diffuse.value=d.color,Q.opacity.value=d.opacity;else if(d instanceof THREE.LineDashedMaterial)Q.diffuse.value=d.color,Q.opacity.value=d.opacity,Q.dashSize.value=d.dashSize,
+Q.totalSize.value=d.dashSize+d.gapSize,Q.scale.value=d.scale;else if(d instanceof THREE.PointCloudMaterial){if(Q.psColor.value=d.color,Q.opacity.value=d.opacity,Q.size.value=d.size,Q.scale.value=F.height/2,Q.map.value=d.map,null!==d.map){var db=d.map.offset,eb=d.map.repeat;Q.offsetRepeat.value.set(db.x,db.y,eb.x,eb.y)}}else d instanceof THREE.MeshPhongMaterial?(Q.shininess.value=d.shininess,Q.emissive.value=d.emissive,Q.specular.value=d.specular,d.wrapAround&&Q.wrapRGB.value.copy(d.wrapRGB)):d instanceof
+THREE.MeshLambertMaterial?(Q.emissive.value=d.emissive,d.wrapAround&&Q.wrapRGB.value.copy(d.wrapRGB)):d instanceof THREE.MeshDepthMaterial?(Q.mNear.value=a.near,Q.mFar.value=a.far,Q.opacity.value=d.opacity):d instanceof THREE.MeshNormalMaterial&&(Q.opacity.value=d.opacity);if(e.receiveShadow&&!d._shadowPass&&Q.shadowMatrix)for(var Wa=0,Db=0,pb=b.length;Db<pb;Db++){var Ca=b[Db];Ca.castShadow&&(Ca instanceof THREE.SpotLight||Ca instanceof THREE.DirectionalLight&&!Ca.shadowCascade)&&(Q.shadowMap.value[Wa]=
+Ca.shadowMap,Q.shadowMapSize.value[Wa]=Ca.shadowMapSize,Q.shadowMatrix.value[Wa]=Ca.shadowMatrix,Q.shadowDarkness.value[Wa]=Ca.shadowDarkness,Q.shadowBias.value[Wa]=Ca.shadowBias,Wa++)}for(var Eb=d.uniformsList,wa,Na,xa,lb=0,Ib=Eb.length;lb<Ib;lb++){var Z=Eb[lb][0];if(!1!==Z.needsUpdate){var Ob=Z.type,T=Z.value,aa=Eb[lb][1];switch(Ob){case "1i":q.uniform1i(aa,T);break;case "1f":q.uniform1f(aa,T);break;case "2f":q.uniform2f(aa,T[0],T[1]);break;case "3f":q.uniform3f(aa,T[0],T[1],T[2]);break;case "4f":q.uniform4f(aa,
+T[0],T[1],T[2],T[3]);break;case "1iv":q.uniform1iv(aa,T);break;case "3iv":q.uniform3iv(aa,T);break;case "1fv":q.uniform1fv(aa,T);break;case "2fv":q.uniform2fv(aa,T);break;case "3fv":q.uniform3fv(aa,T);break;case "4fv":q.uniform4fv(aa,T);break;case "Matrix3fv":q.uniformMatrix3fv(aa,!1,T);break;case "Matrix4fv":q.uniformMatrix4fv(aa,!1,T);break;case "i":q.uniform1i(aa,T);break;case "f":q.uniform1f(aa,T);break;case "v2":q.uniform2f(aa,T.x,T.y);break;case "v3":q.uniform3f(aa,T.x,T.y,T.z);break;case "v4":q.uniform4f(aa,
+T.x,T.y,T.z,T.w);break;case "c":q.uniform3f(aa,T.r,T.g,T.b);break;case "iv1":q.uniform1iv(aa,T);break;case "iv":q.uniform3iv(aa,T);break;case "fv1":q.uniform1fv(aa,T);break;case "fv":q.uniform3fv(aa,T);break;case "v2v":void 0===Z._array&&(Z._array=new Float32Array(2*T.length));for(var X=0,ra=T.length;X<ra;X++)xa=2*X,Z._array[xa]=T[X].x,Z._array[xa+1]=T[X].y;q.uniform2fv(aa,Z._array);break;case "v3v":void 0===Z._array&&(Z._array=new Float32Array(3*T.length));X=0;for(ra=T.length;X<ra;X++)xa=3*X,Z._array[xa]=
+T[X].x,Z._array[xa+1]=T[X].y,Z._array[xa+2]=T[X].z;q.uniform3fv(aa,Z._array);break;case "v4v":void 0===Z._array&&(Z._array=new Float32Array(4*T.length));X=0;for(ra=T.length;X<ra;X++)xa=4*X,Z._array[xa]=T[X].x,Z._array[xa+1]=T[X].y,Z._array[xa+2]=T[X].z,Z._array[xa+3]=T[X].w;q.uniform4fv(aa,Z._array);break;case "m3":q.uniformMatrix3fv(aa,!1,T.elements);break;case "m3v":void 0===Z._array&&(Z._array=new Float32Array(9*T.length));X=0;for(ra=T.length;X<ra;X++)T[X].flattenToArrayOffset(Z._array,9*X);q.uniformMatrix3fv(aa,
+!1,Z._array);break;case "m4":q.uniformMatrix4fv(aa,!1,T.elements);break;case "m4v":void 0===Z._array&&(Z._array=new Float32Array(16*T.length));X=0;for(ra=T.length;X<ra;X++)T[X].flattenToArrayOffset(Z._array,16*X);q.uniformMatrix4fv(aa,!1,Z._array);break;case "t":wa=T;Na=x();q.uniform1i(aa,Na);if(!wa)continue;if(wa instanceof THREE.CubeTexture||wa.image instanceof Array&&6===wa.image.length){var ha=wa,Pb=Na;if(6===ha.image.length)if(ha.needsUpdate){ha.image.__webglTextureCube||(ha.addEventListener("dispose",
+Fb),ha.image.__webglTextureCube=q.createTexture(),O.info.memory.textures++);q.activeTexture(q.TEXTURE0+Pb);q.bindTexture(q.TEXTURE_CUBE_MAP,ha.image.__webglTextureCube);q.pixelStorei(q.UNPACK_FLIP_Y_WEBGL,ha.flipY);for(var Qb=ha instanceof THREE.CompressedTexture,Gb=ha.image[0]instanceof THREE.DataTexture,Oa=[],ja=0;6>ja;ja++)Oa[ja]=!O.autoScaleCubemaps||Qb||Gb?Gb?ha.image[ja].image:ha.image[ja]:A(ha.image[ja],Wb);var Rb=Oa[0],Sb=THREE.Math.isPowerOfTwo(Rb.width)&&THREE.Math.isPowerOfTwo(Rb.height),
+Fa=C(ha.format),Hb=C(ha.type);I(q.TEXTURE_CUBE_MAP,ha,Sb);for(ja=0;6>ja;ja++)if(Qb)for(var Pa,Tb=Oa[ja].mipmaps,ab=0,Jb=Tb.length;ab<Jb;ab++)Pa=Tb[ab],ha.format!==THREE.RGBAFormat&&ha.format!==THREE.RGBFormat?-1<Ub().indexOf(Fa)?q.compressedTexImage2D(q.TEXTURE_CUBE_MAP_POSITIVE_X+ja,ab,Fa,Pa.width,Pa.height,0,Pa.data):THREE.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setCubeTexture()"):q.texImage2D(q.TEXTURE_CUBE_MAP_POSITIVE_X+ja,ab,Fa,Pa.width,Pa.height,
+0,Fa,Hb,Pa.data);else Gb?q.texImage2D(q.TEXTURE_CUBE_MAP_POSITIVE_X+ja,0,Fa,Oa[ja].width,Oa[ja].height,0,Fa,Hb,Oa[ja].data):q.texImage2D(q.TEXTURE_CUBE_MAP_POSITIVE_X+ja,0,Fa,Fa,Hb,Oa[ja]);ha.generateMipmaps&&Sb&&q.generateMipmap(q.TEXTURE_CUBE_MAP);ha.needsUpdate=!1;if(ha.onUpdate)ha.onUpdate(ha)}else q.activeTexture(q.TEXTURE0+Pb),q.bindTexture(q.TEXTURE_CUBE_MAP,ha.image.__webglTextureCube)}else if(wa instanceof THREE.WebGLRenderTargetCube){var Kb=wa;q.activeTexture(q.TEXTURE0+Na);q.bindTexture(q.TEXTURE_CUBE_MAP,
+Kb.__webglTexture)}else O.setTexture(wa,Na);break;case "tv":void 0===Z._array&&(Z._array=[]);X=0;for(ra=Z.value.length;X<ra;X++)Z._array[X]=x();q.uniform1iv(aa,Z._array);X=0;for(ra=Z.value.length;X<ra;X++)wa=Z.value[X],Na=Z._array[X],wa&&O.setTexture(wa,Na);break;default:THREE.warn("THREE.WebGLRenderer: Unknown uniform type: "+Ob)}}}}q.uniformMatrix4fv(fa.modelViewMatrix,!1,e._modelViewMatrix.elements);fa.normalMatrix&&q.uniformMatrix3fv(fa.normalMatrix,!1,e._normalMatrix.elements);null!==fa.modelMatrix&&
+q.uniformMatrix4fv(fa.modelMatrix,!1,e.matrixWorld.elements);return ma}function v(a,b){a.ambientLightColor.needsUpdate=b;a.directionalLightColor.needsUpdate=b;a.directionalLightDirection.needsUpdate=b;a.pointLightColor.needsUpdate=b;a.pointLightPosition.needsUpdate=b;a.pointLightDistance.needsUpdate=b;a.pointLightDecay.needsUpdate=b;a.spotLightColor.needsUpdate=b;a.spotLightPosition.needsUpdate=b;a.spotLightDistance.needsUpdate=b;a.spotLightDirection.needsUpdate=b;a.spotLightAngleCos.needsUpdate=
+b;a.spotLightExponent.needsUpdate=b;a.spotLightDecay.needsUpdate=b;a.hemisphereLightSkyColor.needsUpdate=b;a.hemisphereLightGroundColor.needsUpdate=b;a.hemisphereLightDirection.needsUpdate=b}function x(){var a=ib;a>=mb&&THREE.warn("WebGLRenderer: trying to use "+a+" texture units while this GPU supports only "+mb);ib+=1;return a}function y(a,b){a._modelViewMatrix.multiplyMatrices(b.matrixWorldInverse,a.matrixWorld);a._normalMatrix.getNormalMatrix(a._modelViewMatrix)}function w(a,b,c,d){a[b]=c.r*d;
+a[b+1]=c.g*d;a[b+2]=c.b*d}function I(a,b,c){c?(q.texParameteri(a,q.TEXTURE_WRAP_S,C(b.wrapS)),q.texParameteri(a,q.TEXTURE_WRAP_T,C(b.wrapT)),q.texParameteri(a,q.TEXTURE_MAG_FILTER,C(b.magFilter)),q.texParameteri(a,q.TEXTURE_MIN_FILTER,C(b.minFilter))):(q.texParameteri(a,q.TEXTURE_WRAP_S,q.CLAMP_TO_EDGE),q.texParameteri(a,q.TEXTURE_WRAP_T,q.CLAMP_TO_EDGE),b.wrapS===THREE.ClampToEdgeWrapping&&b.wrapT===THREE.ClampToEdgeWrapping||THREE.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping. ( "+
+b.sourceFile+" )"),q.texParameteri(a,q.TEXTURE_MAG_FILTER,B(b.magFilter)),q.texParameteri(a,q.TEXTURE_MIN_FILTER,B(b.minFilter)),b.minFilter!==THREE.NearestFilter&&b.minFilter!==THREE.LinearFilter&&THREE.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter. ( "+b.sourceFile+" )"));(c=ba.get("EXT_texture_filter_anisotropic"))&&b.type!==THREE.FloatType&&b.type!==THREE.HalfFloatType&&(1<b.anisotropy||b.__currentAnisotropy)&&
+(q.texParameterf(a,c.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(b.anisotropy,O.getMaxAnisotropy())),b.__currentAnisotropy=b.anisotropy)}function A(a,b){if(a.width>b||a.height>b){var c=b/Math.max(a.width,a.height),d=document.createElement("canvas");d.width=Math.floor(a.width*c);d.height=Math.floor(a.height*c);d.getContext("2d").drawImage(a,0,0,a.width,a.height,0,0,d.width,d.height);THREE.warn("THREE.WebGLRenderer: image is too big ("+a.width+"x"+a.height+"). Resized to "+d.width+"x"+d.height,a);return d}return a}
+function D(a,b){q.bindRenderbuffer(q.RENDERBUFFER,a);b.depthBuffer&&!b.stencilBuffer?(q.renderbufferStorage(q.RENDERBUFFER,q.DEPTH_COMPONENT16,b.width,b.height),q.framebufferRenderbuffer(q.FRAMEBUFFER,q.DEPTH_ATTACHMENT,q.RENDERBUFFER,a)):b.depthBuffer&&b.stencilBuffer?(q.renderbufferStorage(q.RENDERBUFFER,q.DEPTH_STENCIL,b.width,b.height),q.framebufferRenderbuffer(q.FRAMEBUFFER,q.DEPTH_STENCIL_ATTACHMENT,q.RENDERBUFFER,a)):q.renderbufferStorage(q.RENDERBUFFER,q.RGBA4,b.width,b.height)}function G(a){a instanceof
+THREE.WebGLRenderTargetCube?(q.bindTexture(q.TEXTURE_CUBE_MAP,a.__webglTexture),q.generateMipmap(q.TEXTURE_CUBE_MAP),q.bindTexture(q.TEXTURE_CUBE_MAP,null)):(q.bindTexture(q.TEXTURE_2D,a.__webglTexture),q.generateMipmap(q.TEXTURE_2D),q.bindTexture(q.TEXTURE_2D,null))}function B(a){return a===THREE.NearestFilter||a===THREE.NearestMipMapNearestFilter||a===THREE.NearestMipMapLinearFilter?q.NEAREST:q.LINEAR}function C(a){var b;if(a===THREE.RepeatWrapping)return q.REPEAT;if(a===THREE.ClampToEdgeWrapping)return q.CLAMP_TO_EDGE;
+if(a===THREE.MirroredRepeatWrapping)return q.MIRRORED_REPEAT;if(a===THREE.NearestFilter)return q.NEAREST;if(a===THREE.NearestMipMapNearestFilter)return q.NEAREST_MIPMAP_NEAREST;if(a===THREE.NearestMipMapLinearFilter)return q.NEAREST_MIPMAP_LINEAR;if(a===THREE.LinearFilter)return q.LINEAR;if(a===THREE.LinearMipMapNearestFilter)return q.LINEAR_MIPMAP_NEAREST;if(a===THREE.LinearMipMapLinearFilter)return q.LINEAR_MIPMAP_LINEAR;if(a===THREE.UnsignedByteType)return q.UNSIGNED_BYTE;if(a===THREE.UnsignedShort4444Type)return q.UNSIGNED_SHORT_4_4_4_4;
+if(a===THREE.UnsignedShort5551Type)return q.UNSIGNED_SHORT_5_5_5_1;if(a===THREE.UnsignedShort565Type)return q.UNSIGNED_SHORT_5_6_5;if(a===THREE.ByteType)return q.BYTE;if(a===THREE.ShortType)return q.SHORT;if(a===THREE.UnsignedShortType)return q.UNSIGNED_SHORT;if(a===THREE.IntType)return q.INT;if(a===THREE.UnsignedIntType)return q.UNSIGNED_INT;if(a===THREE.FloatType)return q.FLOAT;b=ba.get("OES_texture_half_float");if(null!==b&&a===THREE.HalfFloatType)return b.HALF_FLOAT_OES;if(a===THREE.AlphaFormat)return q.ALPHA;
+if(a===THREE.RGBFormat)return q.RGB;if(a===THREE.RGBAFormat)return q.RGBA;if(a===THREE.LuminanceFormat)return q.LUMINANCE;if(a===THREE.LuminanceAlphaFormat)return q.LUMINANCE_ALPHA;if(a===THREE.AddEquation)return q.FUNC_ADD;if(a===THREE.SubtractEquation)return q.FUNC_SUBTRACT;if(a===THREE.ReverseSubtractEquation)return q.FUNC_REVERSE_SUBTRACT;if(a===THREE.ZeroFactor)return q.ZERO;if(a===THREE.OneFactor)return q.ONE;if(a===THREE.SrcColorFactor)return q.SRC_COLOR;if(a===THREE.OneMinusSrcColorFactor)return q.ONE_MINUS_SRC_COLOR;
+if(a===THREE.SrcAlphaFactor)return q.SRC_ALPHA;if(a===THREE.OneMinusSrcAlphaFactor)return q.ONE_MINUS_SRC_ALPHA;if(a===THREE.DstAlphaFactor)return q.DST_ALPHA;if(a===THREE.OneMinusDstAlphaFactor)return q.ONE_MINUS_DST_ALPHA;if(a===THREE.DstColorFactor)return q.DST_COLOR;if(a===THREE.OneMinusDstColorFactor)return q.ONE_MINUS_DST_COLOR;if(a===THREE.SrcAlphaSaturateFactor)return q.SRC_ALPHA_SATURATE;b=ba.get("WEBGL_compressed_texture_s3tc");if(null!==b){if(a===THREE.RGB_S3TC_DXT1_Format)return b.COMPRESSED_RGB_S3TC_DXT1_EXT;
+if(a===THREE.RGBA_S3TC_DXT1_Format)return b.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(a===THREE.RGBA_S3TC_DXT3_Format)return b.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(a===THREE.RGBA_S3TC_DXT5_Format)return b.COMPRESSED_RGBA_S3TC_DXT5_EXT}b=ba.get("WEBGL_compressed_texture_pvrtc");if(null!==b){if(a===THREE.RGB_PVRTC_4BPPV1_Format)return b.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(a===THREE.RGB_PVRTC_2BPPV1_Format)return b.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(a===THREE.RGBA_PVRTC_4BPPV1_Format)return b.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;
+if(a===THREE.RGBA_PVRTC_2BPPV1_Format)return b.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}b=ba.get("EXT_blend_minmax");if(null!==b){if(a===THREE.MinEquation)return b.MIN_EXT;if(a===THREE.MaxEquation)return b.MAX_EXT}return 0}console.log("THREE.WebGLRenderer",THREE.REVISION);a=a||{};var F=void 0!==a.canvas?a.canvas:document.createElement("canvas"),S=void 0!==a.context?a.context:null,H=F.width,J=F.height,P=1,L=void 0!==a.precision?a.precision:"highp",z=void 0!==a.alpha?a.alpha:!1,M=void 0!==a.depth?a.depth:!0,
+R=void 0!==a.stencil?a.stencil:!0,K=void 0!==a.antialias?a.antialias:!1,E=void 0!==a.premultipliedAlpha?a.premultipliedAlpha:!0,$=void 0!==a.preserveDrawingBuffer?a.preserveDrawingBuffer:!1,na=void 0!==a.logarithmicDepthBuffer?a.logarithmicDepthBuffer:!1,N=new THREE.Color(0),ea=0,W=[],Y={},ta=[],pa=[],qa=[],V=[],ka=[];this.domElement=F;this.context=null;this.sortObjects=this.autoClearStencil=this.autoClearDepth=this.autoClearColor=this.autoClear=!0;this.gammaFactor=2;this.shadowMapEnabled=this.gammaOutput=
+this.gammaInput=!1;this.shadowMapType=THREE.PCFShadowMap;this.shadowMapCullFace=THREE.CullFaceFront;this.shadowMapCascade=this.shadowMapDebug=!1;this.maxMorphTargets=8;this.maxMorphNormals=4;this.autoScaleCubemaps=!0;this.info={memory:{programs:0,geometries:0,textures:0},render:{calls:0,vertices:0,faces:0,points:0}};var O=this,ua=[],Ka=null,sa=null,Aa=-1,ma="",Xa=null,ib=0,Ga=0,Ha=0,Qa=F.width,Ra=F.height,nb=0,ob=0,Ia=new THREE.Frustum,Ja=new THREE.Matrix4,oa=new THREE.Vector3,ia=new THREE.Vector3,
+jb=!0,Nb={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[],distances:[],decays:[]},spot:{length:0,colors:[],positions:[],distances:[],directions:[],anglesCos:[],exponents:[],decays:[]},hemi:{length:0,skyColors:[],groundColors:[],positions:[]}},q;try{var bb={alpha:z,depth:M,stencil:R,antialias:K,premultipliedAlpha:E,preserveDrawingBuffer:$};q=S||F.getContext("webgl",bb)||F.getContext("experimental-webgl",bb);if(null===q){if(null!==F.getContext("webgl"))throw"Error creating WebGL context with your selected attributes.";
+throw"Error creating WebGL context.";}F.addEventListener("webglcontextlost",function(a){a.preventDefault();cb();db();Y={}},!1)}catch(Ib){THREE.error("THREE.WebGLRenderer: "+Ib)}var U=new THREE.WebGLState(q,C);void 0===q.getShaderPrecisionFormat&&(q.getShaderPrecisionFormat=function(){return{rangeMin:1,rangeMax:1,precision:1}});var ba=new THREE.WebGLExtensions(q),ya=new THREE.WebGLBuffers(q,this.info,ba,b);ba.get("OES_texture_float");ba.get("OES_texture_float_linear");ba.get("OES_texture_half_float");
+ba.get("OES_texture_half_float_linear");ba.get("OES_standard_derivatives");na&&ba.get("EXT_frag_depth");var Sa=function(a,b,c,d){!0===E&&(a*=d,b*=d,c*=d);q.clearColor(a,b,c,d)},db=function(){q.clearColor(0,0,0,1);q.clearDepth(1);q.clearStencil(0);q.enable(q.DEPTH_TEST);q.depthFunc(q.LEQUAL);q.frontFace(q.CCW);q.cullFace(q.BACK);q.enable(q.CULL_FACE);q.enable(q.BLEND);q.blendEquation(q.FUNC_ADD);q.blendFunc(q.SRC_ALPHA,q.ONE_MINUS_SRC_ALPHA);q.viewport(Ga,Ha,Qa,Ra);Sa(N.r,N.g,N.b,ea)},cb=function(){Xa=
+Ka=null;ma="";Aa=-1;jb=!0;U.reset()};db();this.context=q;this.extensions=ba;this.state=U;var mb=q.getParameter(q.MAX_TEXTURE_IMAGE_UNITS),Jb=q.getParameter(q.MAX_VERTEX_TEXTURE_IMAGE_UNITS),Kb=q.getParameter(q.MAX_TEXTURE_SIZE),Wb=q.getParameter(q.MAX_CUBE_MAP_TEXTURE_SIZE),rb=0<Jb,qb=rb&&ba.get("OES_texture_float"),Xb=q.getShaderPrecisionFormat(q.VERTEX_SHADER,q.HIGH_FLOAT),Yb=q.getShaderPrecisionFormat(q.VERTEX_SHADER,q.MEDIUM_FLOAT),Zb=q.getShaderPrecisionFormat(q.FRAGMENT_SHADER,q.HIGH_FLOAT),
+$b=q.getShaderPrecisionFormat(q.FRAGMENT_SHADER,q.MEDIUM_FLOAT),Ub=function(){var a;return function(){if(void 0!==a)return a;a=[];if(ba.get("WEBGL_compressed_texture_pvrtc")||ba.get("WEBGL_compressed_texture_s3tc"))for(var b=q.getParameter(q.COMPRESSED_TEXTURE_FORMATS),c=0;c<b.length;c++)a.push(b[c]);return a}}(),ac=0<Xb.precision&&0<Zb.precision,eb=0<Yb.precision&&0<$b.precision;"highp"!==L||ac||(eb?(L="mediump",THREE.warn("THREE.WebGLRenderer: highp not supported, using mediump.")):(L="lowp",THREE.warn("THREE.WebGLRenderer: highp and mediump not supported, using lowp.")));
+"mediump"!==L||eb||(L="lowp",THREE.warn("THREE.WebGLRenderer: mediump not supported, using lowp."));var bc=new THREE.ShadowMapPlugin(this,W,Y,ta),cc=new THREE.SpritePlugin(this,V),dc=new THREE.LensFlarePlugin(this,ka);this.getContext=function(){return q};this.forceContextLoss=function(){ba.get("WEBGL_lose_context").loseContext()};this.supportsVertexTextures=function(){return rb};this.supportsFloatTextures=function(){return ba.get("OES_texture_float")};this.supportsHalfFloatTextures=function(){return ba.get("OES_texture_half_float")};
+this.supportsStandardDerivatives=function(){return ba.get("OES_standard_derivatives")};this.supportsCompressedTextureS3TC=function(){return ba.get("WEBGL_compressed_texture_s3tc")};this.supportsCompressedTexturePVRTC=function(){return ba.get("WEBGL_compressed_texture_pvrtc")};this.supportsBlendMinMax=function(){return ba.get("EXT_blend_minmax")};this.getMaxAnisotropy=function(){var a;return function(){if(void 0!==a)return a;var b=ba.get("EXT_texture_filter_anisotropic");return a=null!==b?q.getParameter(b.MAX_TEXTURE_MAX_ANISOTROPY_EXT):
+0}}();this.getPrecision=function(){return L};this.getPixelRatio=function(){return P};this.setPixelRatio=function(a){P=a};this.getSize=function(){return{width:H,height:J}};this.setSize=function(a,b,c){H=a;J=b;F.width=a*P;F.height=b*P;!1!==c&&(F.style.width=a+"px",F.style.height=b+"px");this.setViewport(0,0,a,b)};this.setViewport=function(a,b,c,d){Ga=a*P;Ha=b*P;Qa=c*P;Ra=d*P;q.viewport(Ga,Ha,Qa,Ra)};this.setScissor=function(a,b,c,d){q.scissor(a*P,b*P,c*P,d*P)};this.enableScissorTest=function(a){a?q.enable(q.SCISSOR_TEST):
+q.disable(q.SCISSOR_TEST)};this.getClearColor=function(){return N};this.setClearColor=function(a,b){N.set(a);ea=void 0!==b?b:1;Sa(N.r,N.g,N.b,ea)};this.getClearAlpha=function(){return ea};this.setClearAlpha=function(a){ea=a;Sa(N.r,N.g,N.b,ea)};this.clear=function(a,b,c){var d=0;if(void 0===a||a)d|=q.COLOR_BUFFER_BIT;if(void 0===b||b)d|=q.DEPTH_BUFFER_BIT;if(void 0===c||c)d|=q.STENCIL_BUFFER_BIT;q.clear(d)};this.clearColor=function(){q.clear(q.COLOR_BUFFER_BIT)};this.clearDepth=function(){q.clear(q.DEPTH_BUFFER_BIT)};
+this.clearStencil=function(){q.clear(q.STENCIL_BUFFER_BIT)};this.clearTarget=function(a,b,c,d){this.setRenderTarget(a);this.clear(b,c,d)};this.resetGLState=cb;var fb=function(a){a.target.traverse(function(a){a.removeEventListener("remove",fb);if(a instanceof THREE.Mesh||a instanceof THREE.PointCloud||a instanceof THREE.Line)delete Y[a.id];else if(a instanceof THREE.ImmediateRenderObject||a.immediateRenderCallback)for(var b=ta,c=b.length-1;0<=c;c--)b[c].object===a&&b.splice(c,1);delete a.__webglInit;
+delete a._modelViewMatrix;delete a._normalMatrix;delete a.__webglActive})},gb=function(a){a=a.target;a.removeEventListener("dispose",gb);delete a.__webglInit;if(a instanceof THREE.BufferGeometry){for(var b in a.attributes){var c=a.attributes[b];void 0!==c.buffer&&(q.deleteBuffer(c.buffer),delete c.buffer)}O.info.memory.geometries--}else if(b=za[a.id],void 0!==b){for(var c=0,d=b.length;c<d;c++){var e=b[c];if(void 0!==e.numMorphTargets){for(var f=0,g=e.numMorphTargets;f<g;f++)q.deleteBuffer(e.__webglMorphTargetsBuffers[f]);
+delete e.__webglMorphTargetsBuffers}if(void 0!==e.numMorphNormals){f=0;for(g=e.numMorphNormals;f<g;f++)q.deleteBuffer(e.__webglMorphNormalsBuffers[f]);delete e.__webglMorphNormalsBuffers}ya.delete(e)}delete za[a.id]}else ya.delete(a);ma=""},Fb=function(a){a=a.target;a.removeEventListener("dispose",Fb);a.image&&a.image.__webglTextureCube?(q.deleteTexture(a.image.__webglTextureCube),delete a.image.__webglTextureCube):void 0!==a.__webglInit&&(q.deleteTexture(a.__webglTexture),delete a.__webglTexture,
+delete a.__webglInit);O.info.memory.textures--},pb=function(a){a=a.target;a.removeEventListener("dispose",pb);if(a&&void 0!==a.__webglTexture){q.deleteTexture(a.__webglTexture);delete a.__webglTexture;if(a instanceof THREE.WebGLRenderTargetCube)for(var b=0;6>b;b++)q.deleteFramebuffer(a.__webglFramebuffer[b]),q.deleteRenderbuffer(a.__webglRenderbuffer[b]);else q.deleteFramebuffer(a.__webglFramebuffer),q.deleteRenderbuffer(a.__webglRenderbuffer);delete a.__webglFramebuffer;delete a.__webglRenderbuffer}O.info.memory.textures--},
+Mb=function(a){a=a.target;a.removeEventListener("dispose",Mb);Lb(a)},Lb=function(a){var b=a.program.program;if(void 0!==b){a.program=void 0;var c,d,e=!1;a=0;for(c=ua.length;a<c;a++)if(d=ua[a],d.program===b){d.usedTimes--;0===d.usedTimes&&(e=!0);break}if(!0===e){e=[];a=0;for(c=ua.length;a<c;a++)d=ua[a],d.program!==b&&e.push(d);ua=e;q.deleteProgram(b);O.info.memory.programs--}}};this.renderBufferImmediate=function(a,b,c){U.initAttributes();a.hasPositions&&!a.__webglVertexBuffer&&(a.__webglVertexBuffer=
+q.createBuffer());a.hasNormals&&!a.__webglNormalBuffer&&(a.__webglNormalBuffer=q.createBuffer());a.hasUvs&&!a.__webglUvBuffer&&(a.__webglUvBuffer=q.createBuffer());a.hasColors&&!a.__webglColorBuffer&&(a.__webglColorBuffer=q.createBuffer());a.hasPositions&&(q.bindBuffer(q.ARRAY_BUFFER,a.__webglVertexBuffer),q.bufferData(q.ARRAY_BUFFER,a.positionArray,q.DYNAMIC_DRAW),U.enableAttribute(b.attributes.position),q.vertexAttribPointer(b.attributes.position,3,q.FLOAT,!1,0,0));if(a.hasNormals){q.bindBuffer(q.ARRAY_BUFFER,
+a.__webglNormalBuffer);if(!1===c instanceof THREE.MeshPhongMaterial&&c.shading===THREE.FlatShading){var d,e,f,g,h,k,l,m,n,p,r,s=3*a.count;for(r=0;r<s;r+=9)p=a.normalArray,d=p[r],e=p[r+1],f=p[r+2],g=p[r+3],k=p[r+4],m=p[r+5],h=p[r+6],l=p[r+7],n=p[r+8],d=(d+g+h)/3,e=(e+k+l)/3,f=(f+m+n)/3,p[r]=d,p[r+1]=e,p[r+2]=f,p[r+3]=d,p[r+4]=e,p[r+5]=f,p[r+6]=d,p[r+7]=e,p[r+8]=f}q.bufferData(q.ARRAY_BUFFER,a.normalArray,q.DYNAMIC_DRAW);U.enableAttribute(b.attributes.normal);q.vertexAttribPointer(b.attributes.normal,
+3,q.FLOAT,!1,0,0)}a.hasUvs&&c.map&&(q.bindBuffer(q.ARRAY_BUFFER,a.__webglUvBuffer),q.bufferData(q.ARRAY_BUFFER,a.uvArray,q.DYNAMIC_DRAW),U.enableAttribute(b.attributes.uv),q.vertexAttribPointer(b.attributes.uv,2,q.FLOAT,!1,0,0));a.hasColors&&c.vertexColors!==THREE.NoColors&&(q.bindBuffer(q.ARRAY_BUFFER,a.__webglColorBuffer),q.bufferData(q.ARRAY_BUFFER,a.colorArray,q.DYNAMIC_DRAW),U.enableAttribute(b.attributes.color),q.vertexAttribPointer(b.attributes.color,3,q.FLOAT,!1,0,0));U.disableUnusedAttributes();
+q.drawArrays(q.TRIANGLES,0,a.count);a.count=0};this.renderBufferDirect=function(a,b,d,e,f,g){if(!1!==e.visible)if(l(g),a=u(a,b,d,e,g),b=!1,d="direct_"+f.id+"_"+a.id+"_"+(e.wireframe?1:0),d!==ma&&(ma=d,b=!0),b&&U.initAttributes(),g instanceof THREE.Mesh){g=!0===e.wireframe?q.LINES:q.TRIANGLES;var h=f.attributes.index;if(h){var k,m;h.array instanceof Uint32Array&&ba.get("OES_element_index_uint")?(k=q.UNSIGNED_INT,m=4):(k=q.UNSIGNED_SHORT,m=2);d=f.offsets;if(0===d.length)b&&(c(e,a,f,0),q.bindBuffer(q.ELEMENT_ARRAY_BUFFER,
+h.buffer)),q.drawElements(g,h.array.length,k,0),O.info.render.calls++,O.info.render.vertices+=h.array.length,O.info.render.faces+=h.array.length/3;else{b=!0;for(var n=0,p=d.length;n<p;n++){var r=d[n].index;b&&(c(e,a,f,r),q.bindBuffer(q.ELEMENT_ARRAY_BUFFER,h.buffer));q.drawElements(g,d[n].count,k,d[n].start*m);O.info.render.calls++;O.info.render.vertices+=d[n].count;O.info.render.faces+=d[n].count/3}}}else b&&c(e,a,f,0),e=f.attributes.position,q.drawArrays(g,0,e.array.length/e.itemSize),O.info.render.calls++,
+O.info.render.vertices+=e.array.length/e.itemSize,O.info.render.faces+=e.array.length/(3*e.itemSize)}else if(g instanceof THREE.PointCloud)if(g=q.POINTS,h=f.attributes.index)if(h.array instanceof Uint32Array&&ba.get("OES_element_index_uint")?(k=q.UNSIGNED_INT,m=4):(k=q.UNSIGNED_SHORT,m=2),d=f.offsets,0===d.length)b&&(c(e,a,f,0),q.bindBuffer(q.ELEMENT_ARRAY_BUFFER,h.buffer)),q.drawElements(g,h.array.length,k,0),O.info.render.calls++,O.info.render.points+=h.array.length;else for(1<d.length&&(b=!0),
+n=0,p=d.length;n<p;n++)r=d[n].index,b&&(c(e,a,f,r),q.bindBuffer(q.ELEMENT_ARRAY_BUFFER,h.buffer)),q.drawElements(g,d[n].count,k,d[n].start*m),O.info.render.calls++,O.info.render.points+=d[n].count;else if(b&&c(e,a,f,0),e=f.attributes.position,d=f.offsets,0===d.length)q.drawArrays(g,0,e.array.length/3),O.info.render.calls++,O.info.render.points+=e.array.length/3;else for(n=0,p=d.length;n<p;n++)q.drawArrays(g,d[n].index,d[n].count),O.info.render.calls++,O.info.render.points+=d[n].count;else if(g instanceof
+THREE.Line)if(g=g.mode===THREE.LineStrip?q.LINE_STRIP:q.LINES,U.setLineWidth(e.linewidth*P),h=f.attributes.index)if(h.array instanceof Uint32Array?(k=q.UNSIGNED_INT,m=4):(k=q.UNSIGNED_SHORT,m=2),d=f.offsets,0===d.length)b&&(c(e,a,f,0),q.bindBuffer(q.ELEMENT_ARRAY_BUFFER,h.buffer)),q.drawElements(g,h.array.length,k,0),O.info.render.calls++,O.info.render.vertices+=h.array.length;else for(1<d.length&&(b=!0),n=0,p=d.length;n<p;n++)r=d[n].index,b&&(c(e,a,f,r),q.bindBuffer(q.ELEMENT_ARRAY_BUFFER,h.buffer)),
+q.drawElements(g,d[n].count,k,d[n].start*m),O.info.render.calls++,O.info.render.vertices+=d[n].count;else if(b&&c(e,a,f,0),e=f.attributes.position,d=f.offsets,0===d.length)q.drawArrays(g,0,e.array.length/3),O.info.render.calls++,O.info.render.vertices+=e.array.length/3;else for(n=0,p=d.length;n<p;n++)q.drawArrays(g,d[n].index,d[n].count),O.info.render.calls++,O.info.render.vertices+=d[n].count};this.renderBuffer=function(a,b,c,d,e,g){if(!1!==d.visible){l(g);c=u(a,b,c,d,g);b=c.attributes;a=!1;c=e.id+
+"_"+c.id+"_"+(d.wireframe?1:0);c!==ma&&(ma=c,a=!0);a&&U.initAttributes();if(!d.morphTargets&&0<=b.position)a&&(q.bindBuffer(q.ARRAY_BUFFER,e.__webglVertexBuffer),U.enableAttribute(b.position),q.vertexAttribPointer(b.position,3,q.FLOAT,!1,0,0));else if(g.morphTargetBase){c=d.program.attributes;-1!==g.morphTargetBase&&0<=c.position?(q.bindBuffer(q.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[g.morphTargetBase]),U.enableAttribute(c.position),q.vertexAttribPointer(c.position,3,q.FLOAT,!1,0,0)):0<=c.position&&
+(q.bindBuffer(q.ARRAY_BUFFER,e.__webglVertexBuffer),U.enableAttribute(c.position),q.vertexAttribPointer(c.position,3,q.FLOAT,!1,0,0));if(g.morphTargetForcedOrder.length)for(var h=0,k=g.morphTargetForcedOrder,m=g.morphTargetInfluences,n;h<d.numSupportedMorphTargets&&h<k.length;)n=c["morphTarget"+h],0<=n&&(q.bindBuffer(q.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[k[h]]),U.enableAttribute(n),q.vertexAttribPointer(n,3,q.FLOAT,!1,0,0)),n=c["morphNormal"+h],0<=n&&d.morphNormals&&(q.bindBuffer(q.ARRAY_BUFFER,
+e.__webglMorphNormalsBuffers[k[h]]),U.enableAttribute(n),q.vertexAttribPointer(n,3,q.FLOAT,!1,0,0)),g.__webglMorphTargetInfluences[h]=m[k[h]],h++;else{k=[];m=g.morphTargetInfluences;h=g.geometry.morphTargets;m.length>h.length&&(THREE.warn("THREE.WebGLRenderer: Influences array is bigger than morphTargets array."),m.length=h.length);h=0;for(n=m.length;h<n;h++)k.push([m[h],h]);k.length>d.numSupportedMorphTargets?(k.sort(f),k.length=d.numSupportedMorphTargets):k.length>d.numSupportedMorphNormals?k.sort(f):
+0===k.length&&k.push([0,0]);for(var h=0,p=d.numSupportedMorphTargets;h<p;h++)if(k[h]){var r=k[h][1];n=c["morphTarget"+h];0<=n&&(q.bindBuffer(q.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[r]),U.enableAttribute(n),q.vertexAttribPointer(n,3,q.FLOAT,!1,0,0));n=c["morphNormal"+h];0<=n&&d.morphNormals&&(q.bindBuffer(q.ARRAY_BUFFER,e.__webglMorphNormalsBuffers[r]),U.enableAttribute(n),q.vertexAttribPointer(n,3,q.FLOAT,!1,0,0));g.__webglMorphTargetInfluences[h]=m[r]}else g.__webglMorphTargetInfluences[h]=0}null!==
+d.program.uniforms.morphTargetInfluences&&q.uniform1fv(d.program.uniforms.morphTargetInfluences,g.__webglMorphTargetInfluences)}if(a){if(e.__webglCustomAttributesList)for(c=0,m=e.__webglCustomAttributesList.length;c<m;c++)k=e.__webglCustomAttributesList[c],0<=b[k.buffer.belongsToAttribute]&&(q.bindBuffer(q.ARRAY_BUFFER,k.buffer),U.enableAttribute(b[k.buffer.belongsToAttribute]),q.vertexAttribPointer(b[k.buffer.belongsToAttribute],k.size,q.FLOAT,!1,0,0));0<=b.color&&(0<g.geometry.colors.length||0<
+g.geometry.faces.length?(q.bindBuffer(q.ARRAY_BUFFER,e.__webglColorBuffer),U.enableAttribute(b.color),q.vertexAttribPointer(b.color,3,q.FLOAT,!1,0,0)):void 0!==d.defaultAttributeValues&&q.vertexAttrib3fv(b.color,d.defaultAttributeValues.color));0<=b.normal&&(q.bindBuffer(q.ARRAY_BUFFER,e.__webglNormalBuffer),U.enableAttribute(b.normal),q.vertexAttribPointer(b.normal,3,q.FLOAT,!1,0,0));0<=b.tangent&&(q.bindBuffer(q.ARRAY_BUFFER,e.__webglTangentBuffer),U.enableAttribute(b.tangent),q.vertexAttribPointer(b.tangent,
+4,q.FLOAT,!1,0,0));0<=b.uv&&(g.geometry.faceVertexUvs[0]?(q.bindBuffer(q.ARRAY_BUFFER,e.__webglUVBuffer),U.enableAttribute(b.uv),q.vertexAttribPointer(b.uv,2,q.FLOAT,!1,0,0)):void 0!==d.defaultAttributeValues&&q.vertexAttrib2fv(b.uv,d.defaultAttributeValues.uv));0<=b.uv2&&(g.geometry.faceVertexUvs[1]?(q.bindBuffer(q.ARRAY_BUFFER,e.__webglUV2Buffer),U.enableAttribute(b.uv2),q.vertexAttribPointer(b.uv2,2,q.FLOAT,!1,0,0)):void 0!==d.defaultAttributeValues&&q.vertexAttrib2fv(b.uv2,d.defaultAttributeValues.uv2));
+d.skinning&&0<=b.skinIndex&&0<=b.skinWeight&&(q.bindBuffer(q.ARRAY_BUFFER,e.__webglSkinIndicesBuffer),U.enableAttribute(b.skinIndex),q.vertexAttribPointer(b.skinIndex,4,q.FLOAT,!1,0,0),q.bindBuffer(q.ARRAY_BUFFER,e.__webglSkinWeightsBuffer),U.enableAttribute(b.skinWeight),q.vertexAttribPointer(b.skinWeight,4,q.FLOAT,!1,0,0));0<=b.lineDistance&&(q.bindBuffer(q.ARRAY_BUFFER,e.__webglLineDistanceBuffer),U.enableAttribute(b.lineDistance),q.vertexAttribPointer(b.lineDistance,1,q.FLOAT,!1,0,0))}U.disableUnusedAttributes();
+g instanceof THREE.Mesh?(g=e.__typeArray===Uint32Array?q.UNSIGNED_INT:q.UNSIGNED_SHORT,d.wireframe?(U.setLineWidth(d.wireframeLinewidth*P),a&&q.bindBuffer(q.ELEMENT_ARRAY_BUFFER,e.__webglLineBuffer),q.drawElements(q.LINES,e.__webglLineCount,g,0)):(a&&q.bindBuffer(q.ELEMENT_ARRAY_BUFFER,e.__webglFaceBuffer),q.drawElements(q.TRIANGLES,e.__webglFaceCount,g,0)),O.info.render.calls++,O.info.render.vertices+=e.__webglFaceCount,O.info.render.faces+=e.__webglFaceCount/3):g instanceof THREE.Line?(g=g.mode===
+THREE.LineStrip?q.LINE_STRIP:q.LINES,U.setLineWidth(d.linewidth*P),q.drawArrays(g,0,e.__webglLineCount),O.info.render.calls++):g instanceof THREE.PointCloud&&(q.drawArrays(q.POINTS,0,e.__webglParticleCount),O.info.render.calls++,O.info.render.points+=e.__webglParticleCount)}};this.render=function(a,b,c,f){if(!1===b instanceof THREE.Camera)THREE.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.");else{var l=a.fog;ma="";Aa=-1;Xa=null;jb=!0;!0===a.autoUpdate&&a.updateMatrixWorld();
+void 0===b.parent&&b.updateMatrixWorld();a.traverse(function(a){a instanceof THREE.SkinnedMesh&&a.skeleton.update()});b.matrixWorldInverse.getInverse(b.matrixWorld);Ja.multiplyMatrices(b.projectionMatrix,b.matrixWorldInverse);Ia.setFromMatrix(Ja);W.length=0;pa.length=0;qa.length=0;V.length=0;ka.length=0;g(a);!0===O.sortObjects&&(pa.sort(d),qa.sort(e));bc.render(a,b);O.info.render.calls=0;O.info.render.vertices=0;O.info.render.faces=0;O.info.render.points=0;this.setRenderTarget(c);(this.autoClear||
+f)&&this.clear(this.autoClearColor,this.autoClearDepth,this.autoClearStencil);f=0;for(var n=ta.length;f<n;f++){var p=ta[f],q=p.object;q.visible&&(y(q,b),m(p))}a.overrideMaterial?(f=a.overrideMaterial,s(f),h(pa,b,W,l,f),h(qa,b,W,l,f),k(ta,"",b,W,l,f)):(U.setBlending(THREE.NoBlending),h(pa,b,W,l,null),k(ta,"opaque",b,W,l,null),h(qa,b,W,l,null),k(ta,"transparent",b,W,l,null));cc.render(a,b);dc.render(a,b,nb,ob);c&&c.generateMipmaps&&c.minFilter!==THREE.NearestFilter&&c.minFilter!==THREE.LinearFilter&&
+G(c);U.setDepthTest(!0);U.setDepthWrite(!0);U.setColorWrite(!0)}};this.renderImmediateObject=function(a,b,c,d,e){var f=u(a,b,c,d,e);ma="";O.setMaterialFaces(d);e.immediateRenderCallback?e.immediateRenderCallback(f,q,Ia):e.render(function(a){O.renderBufferImmediate(a,f,d)})};var za={},hb=0,Vb={MeshDepthMaterial:"depth",MeshNormalMaterial:"normal",MeshBasicMaterial:"basic",MeshLambertMaterial:"lambert",MeshPhongMaterial:"phong",LineBasicMaterial:"basic",LineDashedMaterial:"dashed",PointCloudMaterial:"particle_basic"};
+this.setFaceCulling=function(a,b){a===THREE.CullFaceNone?q.disable(q.CULL_FACE):(b===THREE.FrontFaceDirectionCW?q.frontFace(q.CW):q.frontFace(q.CCW),a===THREE.CullFaceBack?q.cullFace(q.BACK):a===THREE.CullFaceFront?q.cullFace(q.FRONT):q.cullFace(q.FRONT_AND_BACK),q.enable(q.CULL_FACE))};this.setMaterialFaces=function(a){U.setDoubleSided(a.side===THREE.DoubleSide);U.setFlipSided(a.side===THREE.BackSide)};this.uploadTexture=function(a,b){void 0===a.__webglInit&&(a.__webglInit=!0,a.addEventListener("dispose",
+Fb),a.__webglTexture=q.createTexture(),O.info.memory.textures++);q.activeTexture(q.TEXTURE0+b);q.bindTexture(q.TEXTURE_2D,a.__webglTexture);q.pixelStorei(q.UNPACK_FLIP_Y_WEBGL,a.flipY);q.pixelStorei(q.UNPACK_PREMULTIPLY_ALPHA_WEBGL,a.premultiplyAlpha);q.pixelStorei(q.UNPACK_ALIGNMENT,a.unpackAlignment);a.image=A(a.image,Kb);var c=a.image,d=THREE.Math.isPowerOfTwo(c.width)&&THREE.Math.isPowerOfTwo(c.height),e=C(a.format),f=C(a.type);I(q.TEXTURE_2D,a,d);var g=a.mipmaps;if(a instanceof THREE.DataTexture)if(0<
+g.length&&d){for(var h=0,k=g.length;h<k;h++)c=g[h],q.texImage2D(q.TEXTURE_2D,h,e,c.width,c.height,0,e,f,c.data);a.generateMipmaps=!1}else q.texImage2D(q.TEXTURE_2D,0,e,c.width,c.height,0,e,f,c.data);else if(a instanceof THREE.CompressedTexture)for(h=0,k=g.length;h<k;h++)c=g[h],a.format!==THREE.RGBAFormat&&a.format!==THREE.RGBFormat?-1<Ub().indexOf(e)?q.compressedTexImage2D(q.TEXTURE_2D,h,e,c.width,c.height,0,c.data):THREE.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()"):
+q.texImage2D(q.TEXTURE_2D,h,e,c.width,c.height,0,e,f,c.data);else if(0<g.length&&d){h=0;for(k=g.length;h<k;h++)c=g[h],q.texImage2D(q.TEXTURE_2D,h,e,e,f,c);a.generateMipmaps=!1}else q.texImage2D(q.TEXTURE_2D,0,e,e,f,a.image);a.generateMipmaps&&d&&q.generateMipmap(q.TEXTURE_2D);a.needsUpdate=!1;if(a.onUpdate)a.onUpdate(a)};this.setTexture=function(a,b){!0===a.needsUpdate?!1===a.image.complete?THREE.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete",a):O.uploadTexture(a,b):
+(q.activeTexture(q.TEXTURE0+b),q.bindTexture(q.TEXTURE_2D,a.__webglTexture))};this.setRenderTarget=function(a){var b=a instanceof THREE.WebGLRenderTargetCube;if(a&&void 0===a.__webglFramebuffer){void 0===a.depthBuffer&&(a.depthBuffer=!0);void 0===a.stencilBuffer&&(a.stencilBuffer=!0);a.addEventListener("dispose",pb);a.__webglTexture=q.createTexture();O.info.memory.textures++;var c=THREE.Math.isPowerOfTwo(a.width)&&THREE.Math.isPowerOfTwo(a.height),d=C(a.format),e=C(a.type);if(b){a.__webglFramebuffer=
+[];a.__webglRenderbuffer=[];q.bindTexture(q.TEXTURE_CUBE_MAP,a.__webglTexture);I(q.TEXTURE_CUBE_MAP,a,c);for(var f=0;6>f;f++){a.__webglFramebuffer[f]=q.createFramebuffer();a.__webglRenderbuffer[f]=q.createRenderbuffer();q.texImage2D(q.TEXTURE_CUBE_MAP_POSITIVE_X+f,0,d,a.width,a.height,0,d,e,null);var g=a,h=q.TEXTURE_CUBE_MAP_POSITIVE_X+f;q.bindFramebuffer(q.FRAMEBUFFER,a.__webglFramebuffer[f]);q.framebufferTexture2D(q.FRAMEBUFFER,q.COLOR_ATTACHMENT0,h,g.__webglTexture,0);D(a.__webglRenderbuffer[f],
+a)}c&&q.generateMipmap(q.TEXTURE_CUBE_MAP)}else a.__webglFramebuffer=q.createFramebuffer(),a.__webglRenderbuffer=a.shareDepthFrom?a.shareDepthFrom.__webglRenderbuffer:q.createRenderbuffer(),q.bindTexture(q.TEXTURE_2D,a.__webglTexture),I(q.TEXTURE_2D,a,c),q.texImage2D(q.TEXTURE_2D,0,d,a.width,a.height,0,d,e,null),d=q.TEXTURE_2D,q.bindFramebuffer(q.FRAMEBUFFER,a.__webglFramebuffer),q.framebufferTexture2D(q.FRAMEBUFFER,q.COLOR_ATTACHMENT0,d,a.__webglTexture,0),a.shareDepthFrom?a.depthBuffer&&!a.stencilBuffer?
+q.framebufferRenderbuffer(q.FRAMEBUFFER,q.DEPTH_ATTACHMENT,q.RENDERBUFFER,a.__webglRenderbuffer):a.depthBuffer&&a.stencilBuffer&&q.framebufferRenderbuffer(q.FRAMEBUFFER,q.DEPTH_STENCIL_ATTACHMENT,q.RENDERBUFFER,a.__webglRenderbuffer):D(a.__webglRenderbuffer,a),c&&q.generateMipmap(q.TEXTURE_2D);b?q.bindTexture(q.TEXTURE_CUBE_MAP,null):q.bindTexture(q.TEXTURE_2D,null);q.bindRenderbuffer(q.RENDERBUFFER,null);q.bindFramebuffer(q.FRAMEBUFFER,null)}a?(b=b?a.__webglFramebuffer[a.activeCubeFace]:a.__webglFramebuffer,
+c=a.width,a=a.height,e=d=0):(b=null,c=Qa,a=Ra,d=Ga,e=Ha);b!==sa&&(q.bindFramebuffer(q.FRAMEBUFFER,b),q.viewport(d,e,c,a),sa=b);nb=c;ob=a};this.readRenderTargetPixels=function(a,b,c,d,e,f){if(!(a instanceof THREE.WebGLRenderTarget))THREE.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");else if(a.__webglFramebuffer)if(a.format!==THREE.RGBAFormat)THREE.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA format. readPixels can read only RGBA format.");
+else{var g=!1;a.__webglFramebuffer!==sa&&(q.bindFramebuffer(q.FRAMEBUFFER,a.__webglFramebuffer),g=!0);q.checkFramebufferStatus(q.FRAMEBUFFER)===q.FRAMEBUFFER_COMPLETE?q.readPixels(b,c,d,e,q.RGBA,q.UNSIGNED_BYTE,f):THREE.error("THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.");g&&q.bindFramebuffer(q.FRAMEBUFFER,sa)}};this.initMaterial=function(){THREE.warn("THREE.WebGLRenderer: .initMaterial() has been removed.")};this.addPrePlugin=function(){THREE.warn("THREE.WebGLRenderer: .addPrePlugin() has been removed.")};
+this.addPostPlugin=function(){THREE.warn("THREE.WebGLRenderer: .addPostPlugin() has been removed.")};this.updateShadowMap=function(){THREE.warn("THREE.WebGLRenderer: .updateShadowMap() has been removed.")}};
 THREE.WebGLRenderTarget=function(a,b,c){this.width=a;this.height=b;c=c||{};this.wrapS=void 0!==c.wrapS?c.wrapS:THREE.ClampToEdgeWrapping;this.wrapT=void 0!==c.wrapT?c.wrapT:THREE.ClampToEdgeWrapping;this.magFilter=void 0!==c.magFilter?c.magFilter:THREE.LinearFilter;this.minFilter=void 0!==c.minFilter?c.minFilter:THREE.LinearMipMapLinearFilter;this.anisotropy=void 0!==c.anisotropy?c.anisotropy:1;this.offset=new THREE.Vector2(0,0);this.repeat=new THREE.Vector2(1,1);this.format=void 0!==c.format?c.format:
 THREE.RGBAFormat;this.type=void 0!==c.type?c.type:THREE.UnsignedByteType;this.depthBuffer=void 0!==c.depthBuffer?c.depthBuffer:!0;this.stencilBuffer=void 0!==c.stencilBuffer?c.stencilBuffer:!0;this.generateMipmaps=!0;this.shareDepthFrom=void 0!==c.shareDepthFrom?c.shareDepthFrom:null};
 THREE.WebGLRenderTarget.prototype={constructor:THREE.WebGLRenderTarget,setSize:function(a,b){this.width=a;this.height=b},clone:function(){var a=new THREE.WebGLRenderTarget(this.width,this.height);a.wrapS=this.wrapS;a.wrapT=this.wrapT;a.magFilter=this.magFilter;a.minFilter=this.minFilter;a.anisotropy=this.anisotropy;a.offset.copy(this.offset);a.repeat.copy(this.repeat);a.format=this.format;a.type=this.type;a.depthBuffer=this.depthBuffer;a.stencilBuffer=this.stencilBuffer;a.generateMipmaps=this.generateMipmaps;
 a.shareDepthFrom=this.shareDepthFrom;return a},dispose:function(){this.dispatchEvent({type:"dispose"})}};THREE.EventDispatcher.prototype.apply(THREE.WebGLRenderTarget.prototype);THREE.WebGLRenderTargetCube=function(a,b,c){THREE.WebGLRenderTarget.call(this,a,b,c);this.activeCubeFace=0};THREE.WebGLRenderTargetCube.prototype=Object.create(THREE.WebGLRenderTarget.prototype);THREE.WebGLRenderTargetCube.prototype.constructor=THREE.WebGLRenderTargetCube;
 THREE.WebGLBuffers=function(a,b,c,d){function e(b){var c=b.geometry;b=b.material;var d=c.vertices.length;if(b.attributes){void 0===c.__webglCustomAttributesList&&(c.__webglCustomAttributesList=[]);for(var e in b.attributes){var m=b.attributes[e];if(!m.__webglInitialized||m.createUniqueBuffers){m.__webglInitialized=!0;var n=1;"v2"===m.type?n=2:"v3"===m.type?n=3:"v4"===m.type?n=4:"c"===m.type&&(n=3);m.size=n;m.array=new Float32Array(d*n);m.buffer=a.createBuffer();m.buffer.belongsToAttribute=e;m.needsUpdate=
-!0}c.__webglCustomAttributesList.push(m)}}}this.initParticleBuffers=function(c,d){c.__webglVertexBuffer=a.createBuffer();c.__webglColorBuffer=a.createBuffer();b.memory.geometries++;var h=c.vertices.length;c.__vertexArray=new Float32Array(3*h);c.__colorArray=new Float32Array(3*h);c.__webglParticleCount=h;e(d)};this.initLineBuffers=function(c,d){c.__webglVertexBuffer=a.createBuffer();c.__webglColorBuffer=a.createBuffer();c.__webglLineDistanceBuffer=a.createBuffer();b.memory.geometries++;var h=c.vertices.length;
-c.__vertexArray=new Float32Array(3*h);c.__colorArray=new Float32Array(3*h);c.__lineDistanceArray=new Float32Array(1*h);c.__webglLineCount=h;e(d)};this.initMeshBuffers=function(e,g){e.__webglVertexBuffer=a.createBuffer();e.__webglNormalBuffer=a.createBuffer();e.__webglTangentBuffer=a.createBuffer();e.__webglColorBuffer=a.createBuffer();e.__webglUVBuffer=a.createBuffer();e.__webglUV2Buffer=a.createBuffer();e.__webglSkinIndicesBuffer=a.createBuffer();e.__webglSkinWeightsBuffer=a.createBuffer();e.__webglFaceBuffer=
-a.createBuffer();e.__webglLineBuffer=a.createBuffer();var h=e.numMorphTargets;if(h){e.__webglMorphTargetsBuffers=[];for(var k=0,m=h;k<m;k++)e.__webglMorphTargetsBuffers.push(a.createBuffer())}var n=e.numMorphNormals;if(n)for(e.__webglMorphNormalsBuffers=[],k=0,m=n;k<m;k++)e.__webglMorphNormalsBuffers.push(a.createBuffer());b.memory.geometries++;var k=g.geometry,p=e.faces3,l=3*p.length,r=1*p.length,t=3*p.length,p=d(g,e);e.__vertexArray=new Float32Array(3*l);e.__normalArray=new Float32Array(3*l);e.__colorArray=
-new Float32Array(3*l);e.__uvArray=new Float32Array(2*l);1<k.faceVertexUvs.length&&(e.__uv2Array=new Float32Array(2*l));k.hasTangents&&(e.__tangentArray=new Float32Array(4*l));g.geometry.skinWeights.length&&g.geometry.skinIndices.length&&(e.__skinIndexArray=new Float32Array(4*l),e.__skinWeightArray=new Float32Array(4*l));k=null!==c.get("OES_element_index_uint")&&21845<r?Uint32Array:Uint16Array;e.__typeArray=k;e.__faceArray=new k(3*r);e.__lineArray=new k(2*t);if(h)for(e.__morphTargetsArrays=[],k=0,
-m=h;k<m;k++)e.__morphTargetsArrays.push(new Float32Array(3*l));if(n)for(e.__morphNormalsArrays=[],k=0,m=n;k<m;k++)e.__morphNormalsArrays.push(new Float32Array(3*l));e.__webglFaceCount=3*r;e.__webglLineCount=2*t;if(p.attributes){void 0===e.__webglCustomAttributesList&&(e.__webglCustomAttributesList=[]);for(var s in p.attributes){var h=p.attributes[s],n={},u;for(u in h)n[u]=h[u];if(!n.__webglInitialized||n.createUniqueBuffers)n.__webglInitialized=!0,r=1,"v2"===n.type?r=2:"v3"===n.type?r=3:"v4"===n.type?
-r=4:"c"===n.type&&(r=3),n.size=r,n.array=new Float32Array(l*r),n.buffer=a.createBuffer(),n.buffer.belongsToAttribute=s,h.needsUpdate=!0,n.__original=h;e.__webglCustomAttributesList.push(n)}}e.__inittedArrays=!0};this.setParticleBuffers=function(b,c,d){var e,m,n=b.vertices,p=n.length,l=b.colors,r=l.length,t=b.__vertexArray,s=b.__colorArray,u=b.colorsNeedUpdate,v=b.__webglCustomAttributesList;if(b.verticesNeedUpdate){for(e=0;e<p;e++)m=n[e],d=3*e,t[d]=m.x,t[d+1]=m.y,t[d+2]=m.z;a.bindBuffer(a.ARRAY_BUFFER,
-b.__webglVertexBuffer);a.bufferData(a.ARRAY_BUFFER,t,c)}if(u){for(e=0;e<r;e++)m=l[e],d=3*e,s[d]=m.r,s[d+1]=m.g,s[d+2]=m.b;a.bindBuffer(a.ARRAY_BUFFER,b.__webglColorBuffer);a.bufferData(a.ARRAY_BUFFER,s,c)}if(v)for(b=0,l=v.length;b<l;b++){m=v[b];if(m.needsUpdate&&(void 0===m.boundTo||"vertices"===m.boundTo))if(s=m.value.length,d=0,1===m.size)for(r=0;r<s;r++)m.array[r]=m.value[r];else if(2===m.size)for(r=0;r<s;r++)e=m.value[r],m.array[d]=e.x,m.array[d+1]=e.y,d+=2;else if(3===m.size)if("c"===m.type)for(r=
-0;r<s;r++)e=m.value[r],m.array[d]=e.r,m.array[d+1]=e.g,m.array[d+2]=e.b,d+=3;else for(r=0;r<s;r++)e=m.value[r],m.array[d]=e.x,m.array[d+1]=e.y,m.array[d+2]=e.z,d+=3;else if(4===m.size)for(r=0;r<s;r++)e=m.value[r],m.array[d]=e.x,m.array[d+1]=e.y,m.array[d+2]=e.z,m.array[d+3]=e.w,d+=4;a.bindBuffer(a.ARRAY_BUFFER,m.buffer);a.bufferData(a.ARRAY_BUFFER,m.array,c);m.needsUpdate=!1}};this.setLineBuffers=function(b,c){var d,e,m,n=b.vertices,p=b.colors,l=b.lineDistances,r=n.length,t=p.length,s=l.length,u=
-b.__vertexArray,v=b.__colorArray,x=b.__lineDistanceArray,y=b.colorsNeedUpdate,w=b.lineDistancesNeedUpdate,I=b.__webglCustomAttributesList;if(b.verticesNeedUpdate){for(d=0;d<r;d++)m=n[d],e=3*d,u[e]=m.x,u[e+1]=m.y,u[e+2]=m.z;a.bindBuffer(a.ARRAY_BUFFER,b.__webglVertexBuffer);a.bufferData(a.ARRAY_BUFFER,u,c)}if(y){for(d=0;d<t;d++)m=p[d],e=3*d,v[e]=m.r,v[e+1]=m.g,v[e+2]=m.b;a.bindBuffer(a.ARRAY_BUFFER,b.__webglColorBuffer);a.bufferData(a.ARRAY_BUFFER,v,c)}if(w){for(e=0;e<s;e++)x[e]=l[e];a.bindBuffer(a.ARRAY_BUFFER,
-b.__webglLineDistanceBuffer);a.bufferData(a.ARRAY_BUFFER,x,c)}if(I)for(l=0,s=I.length;l<s;l++)if(v=I[l],v.needsUpdate&&(void 0===v.boundTo||"vertices"===v.boundTo)){e=0;p=v.value.length;if(1===v.size)for(x=0;x<p;x++)v.array[x]=v.value[x];else if(2===v.size)for(x=0;x<p;x++)t=v.value[x],v.array[e]=t.x,v.array[e+1]=t.y,e+=2;else if(3===v.size)if("c"===v.type)for(x=0;x<p;x++)t=v.value[x],v.array[e]=t.r,v.array[e+1]=t.g,v.array[e+2]=t.b,e+=3;else for(x=0;x<p;x++)t=v.value[x],v.array[e]=t.x,v.array[e+1]=
-t.y,v.array[e+2]=t.z,e+=3;else if(4===v.size)for(x=0;x<p;x++)t=v.value[x],v.array[e]=t.x,v.array[e+1]=t.y,v.array[e+2]=t.z,v.array[e+3]=t.w,e+=4;a.bindBuffer(a.ARRAY_BUFFER,v.buffer);a.bufferData(a.ARRAY_BUFFER,v.array,c);v.needsUpdate=!1}};this.setMeshBuffers=function(b,c,d,e,m){if(b.__inittedArrays){var n=!1===m instanceof THREE.MeshPhongMaterial&&m.shading===THREE.FlatShading,p,l,r,t,s,u,v,x,y,w,I,A,D,G,B,C,F,S,H,J,P,L,z=x=H=C=0,M=0,R=B=F=0,K=s=I=0,E=0,K=b.__vertexArray;S=b.__uvArray;var E=b.__uv2Array,
-$=b.__normalArray;r=b.__tangentArray;v=b.__colorArray;A=b.__skinIndexArray;D=b.__skinWeightArray;G=b.__morphTargetsArrays;var na=b.__morphNormalsArrays,N=b.__webglCustomAttributesList,ea=b.__faceArray,W=b.__lineArray,Y=c.geometry,ta=Y.elementsNeedUpdate,pa=Y.uvsNeedUpdate;t=Y.normalsNeedUpdate;var qa=Y.tangentsNeedUpdate;u=Y.colorsNeedUpdate;J=Y.morphTargetsNeedUpdate;L=Y.vertices;var V=b.faces3,ka=Y.faces,O=Y.faceVertexUvs[0],ua=Y.faceVertexUvs[1],Ka=Y.skinIndices,sa=Y.skinWeights,Aa=Y.morphTargets,
-ma=Y.morphNormals;if(Y.verticesNeedUpdate){c=0;for(p=V.length;c<p;c++)l=ka[V[c]],y=L[l.a],w=L[l.b],l=L[l.c],K[H]=y.x,K[H+1]=y.y,K[H+2]=y.z,K[H+3]=w.x,K[H+4]=w.y,K[H+5]=w.z,K[H+6]=l.x,K[H+7]=l.y,K[H+8]=l.z,H+=9;a.bindBuffer(a.ARRAY_BUFFER,b.__webglVertexBuffer);a.bufferData(a.ARRAY_BUFFER,K,d)}if(J)for(H=0,J=Aa.length;H<J;H++){c=K=0;for(p=V.length;c<p;c++)L=V[c],l=ka[L],y=Aa[H].vertices[l.a],w=Aa[H].vertices[l.b],l=Aa[H].vertices[l.c],P=G[H],P[K]=y.x,P[K+1]=y.y,P[K+2]=y.z,P[K+3]=w.x,P[K+4]=w.y,P[K+
-5]=w.z,P[K+6]=l.x,P[K+7]=l.y,P[K+8]=l.z,m.morphNormals&&(n?w=y=l=ma[H].faceNormals[L]:(w=ma[H].vertexNormals[L],l=w.a,y=w.b,w=w.c),L=na[H],L[K]=l.x,L[K+1]=l.y,L[K+2]=l.z,L[K+3]=y.x,L[K+4]=y.y,L[K+5]=y.z,L[K+6]=w.x,L[K+7]=w.y,L[K+8]=w.z),K+=9;a.bindBuffer(a.ARRAY_BUFFER,b.__webglMorphTargetsBuffers[H]);a.bufferData(a.ARRAY_BUFFER,G[H],d);m.morphNormals&&(a.bindBuffer(a.ARRAY_BUFFER,b.__webglMorphNormalsBuffers[H]),a.bufferData(a.ARRAY_BUFFER,na[H],d))}if(sa.length){c=0;for(p=V.length;c<p;c++)l=ka[V[c]],
-y=sa[l.a],w=sa[l.b],G=sa[l.c],D[s]=y.x,D[s+1]=y.y,D[s+2]=y.z,D[s+3]=y.w,D[s+4]=w.x,D[s+5]=w.y,D[s+6]=w.z,D[s+7]=w.w,D[s+8]=G.x,D[s+9]=G.y,D[s+10]=G.z,D[s+11]=G.w,y=Ka[l.a],w=Ka[l.b],l=Ka[l.c],A[s]=y.x,A[s+1]=y.y,A[s+2]=y.z,A[s+3]=y.w,A[s+4]=w.x,A[s+5]=w.y,A[s+6]=w.z,A[s+7]=w.w,A[s+8]=l.x,A[s+9]=l.y,A[s+10]=l.z,A[s+11]=l.w,s+=12;0<s&&(a.bindBuffer(a.ARRAY_BUFFER,b.__webglSkinIndicesBuffer),a.bufferData(a.ARRAY_BUFFER,A,d),a.bindBuffer(a.ARRAY_BUFFER,b.__webglSkinWeightsBuffer),a.bufferData(a.ARRAY_BUFFER,
-D,d))}if(u){c=0;for(p=V.length;c<p;c++)l=ka[V[c]],s=l.vertexColors,u=l.color,3===s.length&&m.vertexColors===THREE.VertexColors?(A=s[0],D=s[1],s=s[2]):s=D=A=u,v[I]=A.r,v[I+1]=A.g,v[I+2]=A.b,v[I+3]=D.r,v[I+4]=D.g,v[I+5]=D.b,v[I+6]=s.r,v[I+7]=s.g,v[I+8]=s.b,I+=9;0<I&&(a.bindBuffer(a.ARRAY_BUFFER,b.__webglColorBuffer),a.bufferData(a.ARRAY_BUFFER,v,d))}if(qa&&Y.hasTangents){c=0;for(p=V.length;c<p;c++)l=ka[V[c]],v=l.vertexTangents,m=v[0],I=v[1],v=v[2],r[B]=m.x,r[B+1]=m.y,r[B+2]=m.z,r[B+3]=m.w,r[B+4]=I.x,
-r[B+5]=I.y,r[B+6]=I.z,r[B+7]=I.w,r[B+8]=v.x,r[B+9]=v.y,r[B+10]=v.z,r[B+11]=v.w,B+=12;a.bindBuffer(a.ARRAY_BUFFER,b.__webglTangentBuffer);a.bufferData(a.ARRAY_BUFFER,r,d)}if(t){c=0;for(p=V.length;c<p;c++)if(l=ka[V[c]],r=l.vertexNormals,t=l.normal,3===r.length&&!1===n)for(B=0;3>B;B++)t=r[B],$[F]=t.x,$[F+1]=t.y,$[F+2]=t.z,F+=3;else for(B=0;3>B;B++)$[F]=t.x,$[F+1]=t.y,$[F+2]=t.z,F+=3;a.bindBuffer(a.ARRAY_BUFFER,b.__webglNormalBuffer);a.bufferData(a.ARRAY_BUFFER,$,d)}if(pa&&O){c=0;for(p=V.length;c<p;c++)if(n=
-V[c],n=O[n],void 0!==n)for(B=0;3>B;B++)F=n[B],S[x]=F.x,S[x+1]=F.y,x+=2;0<x&&(a.bindBuffer(a.ARRAY_BUFFER,b.__webglUVBuffer),a.bufferData(a.ARRAY_BUFFER,S,d))}if(pa&&ua){c=0;for(p=V.length;c<p;c++)if(n=V[c],x=ua[n],void 0!==x)for(B=0;3>B;B++)S=x[B],E[z]=S.x,E[z+1]=S.y,z+=2;0<z&&(a.bindBuffer(a.ARRAY_BUFFER,b.__webglUV2Buffer),a.bufferData(a.ARRAY_BUFFER,E,d))}if(ta){c=0;for(p=V.length;c<p;c++)ea[M]=C,ea[M+1]=C+1,ea[M+2]=C+2,M+=3,W[R]=C,W[R+1]=C+1,W[R+2]=C,W[R+3]=C+2,W[R+4]=C+1,W[R+5]=C+2,R+=6,C+=3;
-a.bindBuffer(a.ELEMENT_ARRAY_BUFFER,b.__webglFaceBuffer);a.bufferData(a.ELEMENT_ARRAY_BUFFER,ea,d);a.bindBuffer(a.ELEMENT_ARRAY_BUFFER,b.__webglLineBuffer);a.bufferData(a.ELEMENT_ARRAY_BUFFER,W,d)}if(N)for(B=0,C=N.length;B<C;B++)if(z=N[B],z.__original.needsUpdate){E=0;if(1===z.size)if(void 0===z.boundTo||"vertices"===z.boundTo)for(c=0,p=V.length;c<p;c++)l=ka[V[c]],z.array[E]=z.value[l.a],z.array[E+1]=z.value[l.b],z.array[E+2]=z.value[l.c],E+=3;else{if("faces"===z.boundTo)for(c=0,p=V.length;c<p;c++)R=
-z.value[V[c]],z.array[E]=R,z.array[E+1]=R,z.array[E+2]=R,E+=3}else if(2===z.size)if(void 0===z.boundTo||"vertices"===z.boundTo)for(c=0,p=V.length;c<p;c++)l=ka[V[c]],y=z.value[l.a],w=z.value[l.b],l=z.value[l.c],z.array[E]=y.x,z.array[E+1]=y.y,z.array[E+2]=w.x,z.array[E+3]=w.y,z.array[E+4]=l.x,z.array[E+5]=l.y,E+=6;else{if("faces"===z.boundTo)for(c=0,p=V.length;c<p;c++)l=w=y=R=z.value[V[c]],z.array[E]=y.x,z.array[E+1]=y.y,z.array[E+2]=w.x,z.array[E+3]=w.y,z.array[E+4]=l.x,z.array[E+5]=l.y,E+=6}else if(3===
-z.size)if(M="c"===z.type?["r","g","b"]:["x","y","z"],void 0===z.boundTo||"vertices"===z.boundTo)for(c=0,p=V.length;c<p;c++)l=ka[V[c]],y=z.value[l.a],w=z.value[l.b],l=z.value[l.c],z.array[E]=y[M[0]],z.array[E+1]=y[M[1]],z.array[E+2]=y[M[2]],z.array[E+3]=w[M[0]],z.array[E+4]=w[M[1]],z.array[E+5]=w[M[2]],z.array[E+6]=l[M[0]],z.array[E+7]=l[M[1]],z.array[E+8]=l[M[2]],E+=9;else if("faces"===z.boundTo)for(c=0,p=V.length;c<p;c++)l=w=y=R=z.value[V[c]],z.array[E]=y[M[0]],z.array[E+1]=y[M[1]],z.array[E+2]=
-y[M[2]],z.array[E+3]=w[M[0]],z.array[E+4]=w[M[1]],z.array[E+5]=w[M[2]],z.array[E+6]=l[M[0]],z.array[E+7]=l[M[1]],z.array[E+8]=l[M[2]],E+=9;else{if("faceVertices"===z.boundTo)for(c=0,p=V.length;c<p;c++)R=z.value[V[c]],y=R[0],w=R[1],l=R[2],z.array[E]=y[M[0]],z.array[E+1]=y[M[1]],z.array[E+2]=y[M[2]],z.array[E+3]=w[M[0]],z.array[E+4]=w[M[1]],z.array[E+5]=w[M[2]],z.array[E+6]=l[M[0]],z.array[E+7]=l[M[1]],z.array[E+8]=l[M[2]],E+=9}else if(4===z.size)if(void 0===z.boundTo||"vertices"===z.boundTo)for(c=
-0,p=V.length;c<p;c++)l=ka[V[c]],y=z.value[l.a],w=z.value[l.b],l=z.value[l.c],z.array[E]=y.x,z.array[E+1]=y.y,z.array[E+2]=y.z,z.array[E+3]=y.w,z.array[E+4]=w.x,z.array[E+5]=w.y,z.array[E+6]=w.z,z.array[E+7]=w.w,z.array[E+8]=l.x,z.array[E+9]=l.y,z.array[E+10]=l.z,z.array[E+11]=l.w,E+=12;else if("faces"===z.boundTo)for(c=0,p=V.length;c<p;c++)l=w=y=R=z.value[V[c]],z.array[E]=y.x,z.array[E+1]=y.y,z.array[E+2]=y.z,z.array[E+3]=y.w,z.array[E+4]=w.x,z.array[E+5]=w.y,z.array[E+6]=w.z,z.array[E+7]=w.w,z.array[E+
-8]=l.x,z.array[E+9]=l.y,z.array[E+10]=l.z,z.array[E+11]=l.w,E+=12;else if("faceVertices"===z.boundTo)for(c=0,p=V.length;c<p;c++)R=z.value[V[c]],y=R[0],w=R[1],l=R[2],z.array[E]=y.x,z.array[E+1]=y.y,z.array[E+2]=y.z,z.array[E+3]=y.w,z.array[E+4]=w.x,z.array[E+5]=w.y,z.array[E+6]=w.z,z.array[E+7]=w.w,z.array[E+8]=l.x,z.array[E+9]=l.y,z.array[E+10]=l.z,z.array[E+11]=l.w,E+=12;a.bindBuffer(a.ARRAY_BUFFER,z.buffer);a.bufferData(a.ARRAY_BUFFER,z.array,d)}e&&(delete b.__inittedArrays,delete b.__colorArray,
-delete b.__normalArray,delete b.__tangentArray,delete b.__uvArray,delete b.__uv2Array,delete b.__faceArray,delete b.__vertexArray,delete b.__lineArray,delete b.__skinIndexArray,delete b.__skinWeightArray)}};this.delete=function(c){for(var d="__webglVertexBuffer __webglNormalBuffer __webglTangentBuffer __webglColorBuffer __webglUVBuffer __webglUV2Buffer __webglSkinIndicesBuffer __webglSkinWeightsBuffer __webglFaceBuffer __webglLineBuffer __webglLineDistanceBuffer".split(" "),e=0,k=d.length;e<k;e++){var m=
-d[e];void 0!==c[m]&&(a.deleteBuffer(c[m]),delete c[m])}if(void 0!==c.__webglCustomAttributesList){for(m in c.__webglCustomAttributesList)a.deleteBuffer(c.__webglCustomAttributesList[m].buffer);delete c.__webglCustomAttributesList}b.memory.geometries--}};
+!0}c.__webglCustomAttributesList.push(m)}}}this.initPointCloudBuffers=function(c,d){if(void 0===c.__webglVertexBuffer){c.__webglVertexBuffer=a.createBuffer();c.__webglColorBuffer=a.createBuffer();b.memory.geometries++;var h=c.vertices.length;c.__vertexArray=new Float32Array(3*h);c.__colorArray=new Float32Array(3*h);c.__webglParticleCount=h;e(d);c.verticesNeedUpdate=!0;c.colorsNeedUpdate=!0}};this.initLineBuffers=function(c,d){if(void 0===c.__webglVertexBuffer){c.__webglVertexBuffer=a.createBuffer();
+c.__webglColorBuffer=a.createBuffer();c.__webglLineDistanceBuffer=a.createBuffer();b.memory.geometries++;var h=c.vertices.length;c.__vertexArray=new Float32Array(3*h);c.__colorArray=new Float32Array(3*h);c.__lineDistanceArray=new Float32Array(1*h);c.__webglLineCount=h;e(d);c.verticesNeedUpdate=!0;c.colorsNeedUpdate=!0;c.lineDistancesNeedUpdate=!0}};this.initMeshBuffers=function(e,g){e.__webglVertexBuffer=a.createBuffer();e.__webglNormalBuffer=a.createBuffer();e.__webglTangentBuffer=a.createBuffer();
+e.__webglColorBuffer=a.createBuffer();e.__webglUVBuffer=a.createBuffer();e.__webglUV2Buffer=a.createBuffer();e.__webglSkinIndicesBuffer=a.createBuffer();e.__webglSkinWeightsBuffer=a.createBuffer();e.__webglFaceBuffer=a.createBuffer();e.__webglLineBuffer=a.createBuffer();var h=e.numMorphTargets;if(h){e.__webglMorphTargetsBuffers=[];for(var k=0,m=h;k<m;k++)e.__webglMorphTargetsBuffers.push(a.createBuffer())}var n=e.numMorphNormals;if(n)for(e.__webglMorphNormalsBuffers=[],k=0,m=n;k<m;k++)e.__webglMorphNormalsBuffers.push(a.createBuffer());
+b.memory.geometries++;var k=g.geometry,p=e.faces3,l=3*p.length,r=1*p.length,t=3*p.length,p=d(g,e);e.__vertexArray=new Float32Array(3*l);e.__normalArray=new Float32Array(3*l);e.__colorArray=new Float32Array(3*l);e.__uvArray=new Float32Array(2*l);1<k.faceVertexUvs.length&&(e.__uv2Array=new Float32Array(2*l));k.hasTangents&&(e.__tangentArray=new Float32Array(4*l));g.geometry.skinWeights.length&&g.geometry.skinIndices.length&&(e.__skinIndexArray=new Float32Array(4*l),e.__skinWeightArray=new Float32Array(4*
+l));k=null!==c.get("OES_element_index_uint")&&21845<r?Uint32Array:Uint16Array;e.__typeArray=k;e.__faceArray=new k(3*r);e.__lineArray=new k(2*t);if(h)for(e.__morphTargetsArrays=[],k=0,m=h;k<m;k++)e.__morphTargetsArrays.push(new Float32Array(3*l));if(n)for(e.__morphNormalsArrays=[],k=0,m=n;k<m;k++)e.__morphNormalsArrays.push(new Float32Array(3*l));e.__webglFaceCount=3*r;e.__webglLineCount=2*t;if(p.attributes){void 0===e.__webglCustomAttributesList&&(e.__webglCustomAttributesList=[]);for(var s in p.attributes){var h=
+p.attributes[s],n={},u;for(u in h)n[u]=h[u];if(!n.__webglInitialized||n.createUniqueBuffers)n.__webglInitialized=!0,r=1,"v2"===n.type?r=2:"v3"===n.type?r=3:"v4"===n.type?r=4:"c"===n.type&&(r=3),n.size=r,n.array=new Float32Array(l*r),n.buffer=a.createBuffer(),n.buffer.belongsToAttribute=s,h.needsUpdate=!0,n.__original=h;e.__webglCustomAttributesList.push(n)}}e.__inittedArrays=!0};this.setPointCloudBuffers=function(b,c,d){var e,m,n=b.vertices,p=n.length,l=b.colors,r=l.length,t=b.__vertexArray,s=b.__colorArray,
+u=b.colorsNeedUpdate,v=b.__webglCustomAttributesList;if(b.verticesNeedUpdate){for(e=0;e<p;e++)m=n[e],d=3*e,t[d]=m.x,t[d+1]=m.y,t[d+2]=m.z;a.bindBuffer(a.ARRAY_BUFFER,b.__webglVertexBuffer);a.bufferData(a.ARRAY_BUFFER,t,c)}if(u){for(e=0;e<r;e++)m=l[e],d=3*e,s[d]=m.r,s[d+1]=m.g,s[d+2]=m.b;a.bindBuffer(a.ARRAY_BUFFER,b.__webglColorBuffer);a.bufferData(a.ARRAY_BUFFER,s,c)}if(v)for(b=0,l=v.length;b<l;b++){m=v[b];if(m.needsUpdate&&(void 0===m.boundTo||"vertices"===m.boundTo))if(s=m.value.length,d=0,1===
+m.size)for(r=0;r<s;r++)m.array[r]=m.value[r];else if(2===m.size)for(r=0;r<s;r++)e=m.value[r],m.array[d]=e.x,m.array[d+1]=e.y,d+=2;else if(3===m.size)if("c"===m.type)for(r=0;r<s;r++)e=m.value[r],m.array[d]=e.r,m.array[d+1]=e.g,m.array[d+2]=e.b,d+=3;else for(r=0;r<s;r++)e=m.value[r],m.array[d]=e.x,m.array[d+1]=e.y,m.array[d+2]=e.z,d+=3;else if(4===m.size)for(r=0;r<s;r++)e=m.value[r],m.array[d]=e.x,m.array[d+1]=e.y,m.array[d+2]=e.z,m.array[d+3]=e.w,d+=4;a.bindBuffer(a.ARRAY_BUFFER,m.buffer);a.bufferData(a.ARRAY_BUFFER,
+m.array,c);m.needsUpdate=!1}};this.setLineBuffers=function(b,c){var d,e,m,n=b.vertices,p=b.colors,l=b.lineDistances,r=n.length,t=p.length,s=l.length,u=b.__vertexArray,v=b.__colorArray,x=b.__lineDistanceArray,y=b.colorsNeedUpdate,w=b.lineDistancesNeedUpdate,I=b.__webglCustomAttributesList;if(b.verticesNeedUpdate){for(d=0;d<r;d++)m=n[d],e=3*d,u[e]=m.x,u[e+1]=m.y,u[e+2]=m.z;a.bindBuffer(a.ARRAY_BUFFER,b.__webglVertexBuffer);a.bufferData(a.ARRAY_BUFFER,u,c)}if(y){for(d=0;d<t;d++)m=p[d],e=3*d,v[e]=m.r,
+v[e+1]=m.g,v[e+2]=m.b;a.bindBuffer(a.ARRAY_BUFFER,b.__webglColorBuffer);a.bufferData(a.ARRAY_BUFFER,v,c)}if(w){for(e=0;e<s;e++)x[e]=l[e];a.bindBuffer(a.ARRAY_BUFFER,b.__webglLineDistanceBuffer);a.bufferData(a.ARRAY_BUFFER,x,c)}if(I)for(l=0,s=I.length;l<s;l++)if(v=I[l],v.needsUpdate&&(void 0===v.boundTo||"vertices"===v.boundTo)){e=0;p=v.value.length;if(1===v.size)for(x=0;x<p;x++)v.array[x]=v.value[x];else if(2===v.size)for(x=0;x<p;x++)t=v.value[x],v.array[e]=t.x,v.array[e+1]=t.y,e+=2;else if(3===v.size)if("c"===
+v.type)for(x=0;x<p;x++)t=v.value[x],v.array[e]=t.r,v.array[e+1]=t.g,v.array[e+2]=t.b,e+=3;else for(x=0;x<p;x++)t=v.value[x],v.array[e]=t.x,v.array[e+1]=t.y,v.array[e+2]=t.z,e+=3;else if(4===v.size)for(x=0;x<p;x++)t=v.value[x],v.array[e]=t.x,v.array[e+1]=t.y,v.array[e+2]=t.z,v.array[e+3]=t.w,e+=4;a.bindBuffer(a.ARRAY_BUFFER,v.buffer);a.bufferData(a.ARRAY_BUFFER,v.array,c);v.needsUpdate=!1}};this.setMeshBuffers=function(b,c,d,e,m){if(b.__inittedArrays){var n=!1===m instanceof THREE.MeshPhongMaterial&&
+m.shading===THREE.FlatShading,p,l,r,t,s,u,v,x,y,w,I,A,D,G,B,C,F,S,H,J,P,L,z=x=H=C=0,M=0,R=B=F=0,K=s=I=0,E=0,K=b.__vertexArray;S=b.__uvArray;var E=b.__uv2Array,$=b.__normalArray;r=b.__tangentArray;v=b.__colorArray;A=b.__skinIndexArray;D=b.__skinWeightArray;G=b.__morphTargetsArrays;var na=b.__morphNormalsArrays,N=b.__webglCustomAttributesList,ea=b.__faceArray,W=b.__lineArray,Y=c.geometry,ta=Y.elementsNeedUpdate,pa=Y.uvsNeedUpdate;t=Y.normalsNeedUpdate;var qa=Y.tangentsNeedUpdate;u=Y.colorsNeedUpdate;
+J=Y.morphTargetsNeedUpdate;L=Y.vertices;var V=b.faces3,ka=Y.faces,O=Y.faceVertexUvs[0],ua=Y.faceVertexUvs[1],Ka=Y.skinIndices,sa=Y.skinWeights,Aa=Y.morphTargets,ma=Y.morphNormals;if(Y.verticesNeedUpdate){c=0;for(p=V.length;c<p;c++)l=ka[V[c]],y=L[l.a],w=L[l.b],l=L[l.c],K[H]=y.x,K[H+1]=y.y,K[H+2]=y.z,K[H+3]=w.x,K[H+4]=w.y,K[H+5]=w.z,K[H+6]=l.x,K[H+7]=l.y,K[H+8]=l.z,H+=9;a.bindBuffer(a.ARRAY_BUFFER,b.__webglVertexBuffer);a.bufferData(a.ARRAY_BUFFER,K,d)}if(J)for(H=0,J=Aa.length;H<J;H++){c=K=0;for(p=
+V.length;c<p;c++)L=V[c],l=ka[L],y=Aa[H].vertices[l.a],w=Aa[H].vertices[l.b],l=Aa[H].vertices[l.c],P=G[H],P[K]=y.x,P[K+1]=y.y,P[K+2]=y.z,P[K+3]=w.x,P[K+4]=w.y,P[K+5]=w.z,P[K+6]=l.x,P[K+7]=l.y,P[K+8]=l.z,m.morphNormals&&(n?w=y=l=ma[H].faceNormals[L]:(w=ma[H].vertexNormals[L],l=w.a,y=w.b,w=w.c),L=na[H],L[K]=l.x,L[K+1]=l.y,L[K+2]=l.z,L[K+3]=y.x,L[K+4]=y.y,L[K+5]=y.z,L[K+6]=w.x,L[K+7]=w.y,L[K+8]=w.z),K+=9;a.bindBuffer(a.ARRAY_BUFFER,b.__webglMorphTargetsBuffers[H]);a.bufferData(a.ARRAY_BUFFER,G[H],d);
+m.morphNormals&&(a.bindBuffer(a.ARRAY_BUFFER,b.__webglMorphNormalsBuffers[H]),a.bufferData(a.ARRAY_BUFFER,na[H],d))}if(sa.length){c=0;for(p=V.length;c<p;c++)l=ka[V[c]],y=sa[l.a],w=sa[l.b],G=sa[l.c],D[s]=y.x,D[s+1]=y.y,D[s+2]=y.z,D[s+3]=y.w,D[s+4]=w.x,D[s+5]=w.y,D[s+6]=w.z,D[s+7]=w.w,D[s+8]=G.x,D[s+9]=G.y,D[s+10]=G.z,D[s+11]=G.w,y=Ka[l.a],w=Ka[l.b],l=Ka[l.c],A[s]=y.x,A[s+1]=y.y,A[s+2]=y.z,A[s+3]=y.w,A[s+4]=w.x,A[s+5]=w.y,A[s+6]=w.z,A[s+7]=w.w,A[s+8]=l.x,A[s+9]=l.y,A[s+10]=l.z,A[s+11]=l.w,s+=12;0<s&&
+(a.bindBuffer(a.ARRAY_BUFFER,b.__webglSkinIndicesBuffer),a.bufferData(a.ARRAY_BUFFER,A,d),a.bindBuffer(a.ARRAY_BUFFER,b.__webglSkinWeightsBuffer),a.bufferData(a.ARRAY_BUFFER,D,d))}if(u){c=0;for(p=V.length;c<p;c++)l=ka[V[c]],s=l.vertexColors,u=l.color,3===s.length&&m.vertexColors===THREE.VertexColors?(A=s[0],D=s[1],s=s[2]):s=D=A=u,v[I]=A.r,v[I+1]=A.g,v[I+2]=A.b,v[I+3]=D.r,v[I+4]=D.g,v[I+5]=D.b,v[I+6]=s.r,v[I+7]=s.g,v[I+8]=s.b,I+=9;0<I&&(a.bindBuffer(a.ARRAY_BUFFER,b.__webglColorBuffer),a.bufferData(a.ARRAY_BUFFER,
+v,d))}if(qa&&Y.hasTangents){c=0;for(p=V.length;c<p;c++)l=ka[V[c]],v=l.vertexTangents,m=v[0],I=v[1],v=v[2],r[B]=m.x,r[B+1]=m.y,r[B+2]=m.z,r[B+3]=m.w,r[B+4]=I.x,r[B+5]=I.y,r[B+6]=I.z,r[B+7]=I.w,r[B+8]=v.x,r[B+9]=v.y,r[B+10]=v.z,r[B+11]=v.w,B+=12;a.bindBuffer(a.ARRAY_BUFFER,b.__webglTangentBuffer);a.bufferData(a.ARRAY_BUFFER,r,d)}if(t){c=0;for(p=V.length;c<p;c++)if(l=ka[V[c]],r=l.vertexNormals,t=l.normal,3===r.length&&!1===n)for(B=0;3>B;B++)t=r[B],$[F]=t.x,$[F+1]=t.y,$[F+2]=t.z,F+=3;else for(B=0;3>B;B++)$[F]=
+t.x,$[F+1]=t.y,$[F+2]=t.z,F+=3;a.bindBuffer(a.ARRAY_BUFFER,b.__webglNormalBuffer);a.bufferData(a.ARRAY_BUFFER,$,d)}if(pa&&O){c=0;for(p=V.length;c<p;c++)if(n=V[c],n=O[n],void 0!==n)for(B=0;3>B;B++)F=n[B],S[x]=F.x,S[x+1]=F.y,x+=2;0<x&&(a.bindBuffer(a.ARRAY_BUFFER,b.__webglUVBuffer),a.bufferData(a.ARRAY_BUFFER,S,d))}if(pa&&ua){c=0;for(p=V.length;c<p;c++)if(n=V[c],x=ua[n],void 0!==x)for(B=0;3>B;B++)S=x[B],E[z]=S.x,E[z+1]=S.y,z+=2;0<z&&(a.bindBuffer(a.ARRAY_BUFFER,b.__webglUV2Buffer),a.bufferData(a.ARRAY_BUFFER,
+E,d))}if(ta){c=0;for(p=V.length;c<p;c++)ea[M]=C,ea[M+1]=C+1,ea[M+2]=C+2,M+=3,W[R]=C,W[R+1]=C+1,W[R+2]=C,W[R+3]=C+2,W[R+4]=C+1,W[R+5]=C+2,R+=6,C+=3;a.bindBuffer(a.ELEMENT_ARRAY_BUFFER,b.__webglFaceBuffer);a.bufferData(a.ELEMENT_ARRAY_BUFFER,ea,d);a.bindBuffer(a.ELEMENT_ARRAY_BUFFER,b.__webglLineBuffer);a.bufferData(a.ELEMENT_ARRAY_BUFFER,W,d)}if(N)for(B=0,C=N.length;B<C;B++)if(z=N[B],z.__original.needsUpdate){E=0;if(1===z.size)if(void 0===z.boundTo||"vertices"===z.boundTo)for(c=0,p=V.length;c<p;c++)l=
+ka[V[c]],z.array[E]=z.value[l.a],z.array[E+1]=z.value[l.b],z.array[E+2]=z.value[l.c],E+=3;else{if("faces"===z.boundTo)for(c=0,p=V.length;c<p;c++)R=z.value[V[c]],z.array[E]=R,z.array[E+1]=R,z.array[E+2]=R,E+=3}else if(2===z.size)if(void 0===z.boundTo||"vertices"===z.boundTo)for(c=0,p=V.length;c<p;c++)l=ka[V[c]],y=z.value[l.a],w=z.value[l.b],l=z.value[l.c],z.array[E]=y.x,z.array[E+1]=y.y,z.array[E+2]=w.x,z.array[E+3]=w.y,z.array[E+4]=l.x,z.array[E+5]=l.y,E+=6;else{if("faces"===z.boundTo)for(c=0,p=V.length;c<
+p;c++)l=w=y=R=z.value[V[c]],z.array[E]=y.x,z.array[E+1]=y.y,z.array[E+2]=w.x,z.array[E+3]=w.y,z.array[E+4]=l.x,z.array[E+5]=l.y,E+=6}else if(3===z.size)if(M="c"===z.type?["r","g","b"]:["x","y","z"],void 0===z.boundTo||"vertices"===z.boundTo)for(c=0,p=V.length;c<p;c++)l=ka[V[c]],y=z.value[l.a],w=z.value[l.b],l=z.value[l.c],z.array[E]=y[M[0]],z.array[E+1]=y[M[1]],z.array[E+2]=y[M[2]],z.array[E+3]=w[M[0]],z.array[E+4]=w[M[1]],z.array[E+5]=w[M[2]],z.array[E+6]=l[M[0]],z.array[E+7]=l[M[1]],z.array[E+8]=
+l[M[2]],E+=9;else if("faces"===z.boundTo)for(c=0,p=V.length;c<p;c++)l=w=y=R=z.value[V[c]],z.array[E]=y[M[0]],z.array[E+1]=y[M[1]],z.array[E+2]=y[M[2]],z.array[E+3]=w[M[0]],z.array[E+4]=w[M[1]],z.array[E+5]=w[M[2]],z.array[E+6]=l[M[0]],z.array[E+7]=l[M[1]],z.array[E+8]=l[M[2]],E+=9;else{if("faceVertices"===z.boundTo)for(c=0,p=V.length;c<p;c++)R=z.value[V[c]],y=R[0],w=R[1],l=R[2],z.array[E]=y[M[0]],z.array[E+1]=y[M[1]],z.array[E+2]=y[M[2]],z.array[E+3]=w[M[0]],z.array[E+4]=w[M[1]],z.array[E+5]=w[M[2]],
+z.array[E+6]=l[M[0]],z.array[E+7]=l[M[1]],z.array[E+8]=l[M[2]],E+=9}else if(4===z.size)if(void 0===z.boundTo||"vertices"===z.boundTo)for(c=0,p=V.length;c<p;c++)l=ka[V[c]],y=z.value[l.a],w=z.value[l.b],l=z.value[l.c],z.array[E]=y.x,z.array[E+1]=y.y,z.array[E+2]=y.z,z.array[E+3]=y.w,z.array[E+4]=w.x,z.array[E+5]=w.y,z.array[E+6]=w.z,z.array[E+7]=w.w,z.array[E+8]=l.x,z.array[E+9]=l.y,z.array[E+10]=l.z,z.array[E+11]=l.w,E+=12;else if("faces"===z.boundTo)for(c=0,p=V.length;c<p;c++)l=w=y=R=z.value[V[c]],
+z.array[E]=y.x,z.array[E+1]=y.y,z.array[E+2]=y.z,z.array[E+3]=y.w,z.array[E+4]=w.x,z.array[E+5]=w.y,z.array[E+6]=w.z,z.array[E+7]=w.w,z.array[E+8]=l.x,z.array[E+9]=l.y,z.array[E+10]=l.z,z.array[E+11]=l.w,E+=12;else if("faceVertices"===z.boundTo)for(c=0,p=V.length;c<p;c++)R=z.value[V[c]],y=R[0],w=R[1],l=R[2],z.array[E]=y.x,z.array[E+1]=y.y,z.array[E+2]=y.z,z.array[E+3]=y.w,z.array[E+4]=w.x,z.array[E+5]=w.y,z.array[E+6]=w.z,z.array[E+7]=w.w,z.array[E+8]=l.x,z.array[E+9]=l.y,z.array[E+10]=l.z,z.array[E+
+11]=l.w,E+=12;a.bindBuffer(a.ARRAY_BUFFER,z.buffer);a.bufferData(a.ARRAY_BUFFER,z.array,d)}e&&(delete b.__inittedArrays,delete b.__colorArray,delete b.__normalArray,delete b.__tangentArray,delete b.__uvArray,delete b.__uv2Array,delete b.__faceArray,delete b.__vertexArray,delete b.__lineArray,delete b.__skinIndexArray,delete b.__skinWeightArray)}};this.delete=function(c){for(var d="__webglVertexBuffer __webglNormalBuffer __webglTangentBuffer __webglColorBuffer __webglUVBuffer __webglUV2Buffer __webglSkinIndicesBuffer __webglSkinWeightsBuffer __webglFaceBuffer __webglLineBuffer __webglLineDistanceBuffer".split(" "),
+e=0,k=d.length;e<k;e++){var m=d[e];void 0!==c[m]&&(a.deleteBuffer(c[m]),delete c[m])}if(void 0!==c.__webglCustomAttributesList){for(m in c.__webglCustomAttributesList)a.deleteBuffer(c.__webglCustomAttributesList[m].buffer);delete c.__webglCustomAttributesList}b.memory.geometries--}};
 THREE.WebGLExtensions=function(a){var b={};this.get=function(c){if(void 0!==b[c])return b[c];var d;switch(c){case "EXT_texture_filter_anisotropic":d=a.getExtension("EXT_texture_filter_anisotropic")||a.getExtension("MOZ_EXT_texture_filter_anisotropic")||a.getExtension("WEBKIT_EXT_texture_filter_anisotropic");break;case "WEBGL_compressed_texture_s3tc":d=a.getExtension("WEBGL_compressed_texture_s3tc")||a.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||a.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc");
 break;case "WEBGL_compressed_texture_pvrtc":d=a.getExtension("WEBGL_compressed_texture_pvrtc")||a.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc");break;default:d=a.getExtension(c)}null===d&&THREE.warn("THREE.WebGLRenderer: "+c+" extension not supported.");return b[c]=d}};
 THREE.WebGLProgram=function(){var a=0;return function(b,c,d,e){var f=b.context,g=d.defines,h=d.__webglShader.uniforms,k=d.attributes,m=d.__webglShader.vertexShader,n=d.__webglShader.fragmentShader,p=d.index0AttributeName;void 0===p&&!0===e.morphTargets&&(p="position");var l="SHADOWMAP_TYPE_BASIC";e.shadowMapType===THREE.PCFShadowMap?l="SHADOWMAP_TYPE_PCF":e.shadowMapType===THREE.PCFSoftShadowMap&&(l="SHADOWMAP_TYPE_PCF_SOFT");var r="ENVMAP_TYPE_CUBE",t="ENVMAP_MODE_REFLECTION",s="ENVMAP_BLENDING_MULTIPLY";