Browse Source

Fixed multiple issues caught by stricter Closer Compiler settings (checkTypes on).

Unfortunately we can't keep these settings always on: without "--jscomp_off=checkTypes" the amount of spam is just too crazy. It complains about tons of normal things, I had to manually dig out few useful warnings among 900 irrelevant ones.
alteredq 12 years ago
parent
commit
8c26ddf224

+ 16 - 24
build/three.js

@@ -1641,7 +1641,7 @@ THREE.Matrix3.prototype = {
 
 	transposeIntoArray: function ( r ) {
 
-		var m = this.m;
+		var m = this.elements;
 
 		r[ 0 ] = m[ 0 ];
 		r[ 1 ] = m[ 3 ];
@@ -5800,6 +5800,10 @@ THREE.BufferGeometry = function () {
 
 	this.dynamic = false;
 
+	// offsets for chunks when using indexed elements
+
+	this.offsets = [];
+
 	// boundings
 
 	this.boundingBox = null;
@@ -10838,9 +10842,9 @@ THREE.TextureLibrary = [];
  * @author alteredq / http://alteredqualia.com/
  */
 
-THREE.CompressedTexture = function ( mipmaps, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter ) {
+THREE.CompressedTexture = function ( mipmaps, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy ) {
 
-	THREE.Texture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type );
+	THREE.Texture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );
 
 	this.image = { width: width, height: height };
 	this.mipmaps = mipmaps;
@@ -10879,9 +10883,9 @@ THREE.CompressedTexture.prototype.clone = function () {
  * @author alteredq / http://alteredqualia.com/
  */
 
-THREE.DataTexture = function ( data, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter ) {
+THREE.DataTexture = function ( data, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy ) {
 
-	THREE.Texture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type );
+	THREE.Texture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );
 
 	this.image = { data: data, width: width, height: height };
 
@@ -10891,7 +10895,7 @@ THREE.DataTexture.prototype = Object.create( THREE.Texture.prototype );
 
 THREE.DataTexture.prototype.clone = function () {
 
-	var clonedTexture = new THREE.DataTexture( this.image.data,  this.image.width, this.image.height, this.format, this.type, this.mapping, this.wrapS, this.wrapT, this.magFilter, this.minFilter );
+	var clonedTexture = new THREE.DataTexture( this.image.data,  this.image.width, this.image.height, this.format, this.type, this.mapping, this.wrapS, this.wrapT, this.magFilter, this.minFilter, this.anisotropy );
 
 	clonedTexture.offset.copy( this.offset );
 	clonedTexture.repeat.copy( this.repeat );
@@ -15905,10 +15909,6 @@ THREE.WebGLRenderer = function ( parameters ) {
 		delete object._modelViewMatrix;
 		delete object._normalMatrix;
 
-		delete object._normalMatrixArray;
-		delete object._modelViewMatrixArray;
-		delete object._modelMatrixArray;
-
 		if ( object instanceof THREE.Mesh ) {
 
 			for ( var g in object.geometry.geometryGroups ) {
@@ -19539,8 +19539,6 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 				if ( ! ( object instanceof THREE.Mesh || object instanceof THREE.ParticleSystem ) || ! ( object.frustumCulled ) || _frustum.contains( object ) ) {
 
-					//object.matrixWorld.flattenToArray( object._modelMatrixArray );
-
 					setupMatrices( object, camera );
 
 					unrollBufferMaterial( webglObject );
@@ -19589,14 +19587,6 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 			if ( object.visible ) {
 
-				/*
-				if ( object.matrixAutoUpdate ) {
-
-					object.matrixWorld.flattenToArray( object._modelMatrixArray );
-
-				}
-				*/
-
 				setupMatrices( object, camera );
 
 				unrollImmediateBufferMaterial( webglObject );
@@ -19619,17 +19609,19 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 		} else {
 
+			var material = null;
+
 			// opaque pass (front-to-back order)
 
 			this.setBlending( THREE.NormalBlending );
 
-			renderObjects( scene.__webglObjects, true, "opaque", camera, lights, fog, false );
-			renderObjectsImmediate( scene.__webglObjectsImmediate, "opaque", camera, lights, fog, false );
+			renderObjects( scene.__webglObjects, true, "opaque", camera, lights, fog, false, material );
+			renderObjectsImmediate( scene.__webglObjectsImmediate, "opaque", camera, lights, fog, false, material );
 
 			// transparent pass (back-to-front order)
 
-			renderObjects( scene.__webglObjects, false, "transparent", camera, lights, fog, true );
-			renderObjectsImmediate( scene.__webglObjectsImmediate, "transparent", camera, lights, fog, true );
+			renderObjects( scene.__webglObjects, false, "transparent", camera, lights, fog, true, material );
+			renderObjectsImmediate( scene.__webglObjectsImmediate, "transparent", camera, lights, fog, true, material );
 
 		}
 

+ 87 - 87
build/three.min.js

@@ -30,7 +30,7 @@ Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)},normalize:function(){return
 (this.x=a.x/b,this.y=a.y/b,this.z=a.z/b);return this},setAxisAngleFromRotationMatrix:function(a){var b,c,d,a=a.elements,e=a[0];d=a[4];var f=a[8],g=a[1],h=a[5],i=a[9];c=a[2];b=a[6];var j=a[10];if(0.01>Math.abs(d-g)&&0.01>Math.abs(f-c)&&0.01>Math.abs(i-b)){if(0.1>Math.abs(d+g)&&0.1>Math.abs(f+c)&&0.1>Math.abs(i+b)&&0.1>Math.abs(e+h+j-3))return this.set(1,0,0,0),this;a=Math.PI;e=(e+1)/2;h=(h+1)/2;j=(j+1)/2;d=(d+g)/4;f=(f+c)/4;i=(i+b)/4;e>h&&e>j?0.01>e?(b=0,d=c=0.707106781):(b=Math.sqrt(e),c=d/b,d=f/
 b):h>j?0.01>h?(b=0.707106781,c=0,d=0.707106781):(c=Math.sqrt(h),b=d/c,d=i/c):0.01>j?(c=b=0.707106781,d=0):(d=Math.sqrt(j),b=f/d,c=i/d);this.set(b,c,d,a);return this}a=Math.sqrt((b-i)*(b-i)+(f-c)*(f-c)+(g-d)*(g-d));0.001>Math.abs(a)&&(a=1);this.x=(b-i)/a;this.y=(f-c)/a;this.z=(g-d)/a;this.w=Math.acos((e+h+j-1)/2);return this}};THREE.Matrix3=function(){this.elements=new Float32Array(9)};
 THREE.Matrix3.prototype={constructor:THREE.Matrix3,multiplyVector3:function(a){var b=this.elements,c=a.x,d=a.y,e=a.z;a.x=b[0]*c+b[3]*d+b[6]*e;a.y=b[1]*c+b[4]*d+b[7]*e;a.z=b[2]*c+b[5]*d+b[8]*e;return a},multiplyVector3Array:function(a){for(var b=THREE.Matrix3.__v1,c=0,d=a.length;c<d;c+=3)b.x=a[c],b.y=a[c+1],b.z=a[c+2],this.multiplyVector3(b),a[c]=b.x,a[c+1]=b.y,a[c+2]=b.z;return a},getInverse:function(a){var b=a.elements,a=b[10]*b[5]-b[6]*b[9],c=-b[10]*b[1]+b[2]*b[9],d=b[6]*b[1]-b[2]*b[5],e=-b[10]*
-b[4]+b[6]*b[8],f=b[10]*b[0]-b[2]*b[8],g=-b[6]*b[0]+b[2]*b[4],h=b[9]*b[4]-b[5]*b[8],i=-b[9]*b[0]+b[1]*b[8],j=b[5]*b[0]-b[1]*b[4],b=b[0]*a+b[1]*e+b[2]*h;0===b&&console.warn("Matrix3.getInverse(): determinant == 0");var b=1/b,l=this.elements;l[0]=b*a;l[1]=b*c;l[2]=b*d;l[3]=b*e;l[4]=b*f;l[5]=b*g;l[6]=b*h;l[7]=b*i;l[8]=b*j;return this},transpose:function(){var a,b=this.elements;a=b[1];b[1]=b[3];b[3]=a;a=b[2];b[2]=b[6];b[6]=a;a=b[5];b[5]=b[7];b[7]=a;return this},transposeIntoArray:function(a){var b=this.m;
+b[4]+b[6]*b[8],f=b[10]*b[0]-b[2]*b[8],g=-b[6]*b[0]+b[2]*b[4],h=b[9]*b[4]-b[5]*b[8],i=-b[9]*b[0]+b[1]*b[8],j=b[5]*b[0]-b[1]*b[4],b=b[0]*a+b[1]*e+b[2]*h;0===b&&console.warn("Matrix3.getInverse(): determinant == 0");var b=1/b,l=this.elements;l[0]=b*a;l[1]=b*c;l[2]=b*d;l[3]=b*e;l[4]=b*f;l[5]=b*g;l[6]=b*h;l[7]=b*i;l[8]=b*j;return this},transpose:function(){var a,b=this.elements;a=b[1];b[1]=b[3];b[3]=a;a=b[2];b[2]=b[6];b[6]=a;a=b[5];b[5]=b[7];b[7]=a;return this},transposeIntoArray:function(a){var b=this.elements;
 a[0]=b[0];a[1]=b[3];a[2]=b[6];a[3]=b[1];a[4]=b[4];a[5]=b[7];a[6]=b[2];a[7]=b[5];a[8]=b[8];return this}};THREE.Matrix3.__v1=new THREE.Vector3;THREE.Matrix4=function(a,b,c,d,e,f,g,h,i,j,l,m,n,p,q,r){this.elements=new Float32Array(16);this.set(void 0!==a?a:1,b||0,c||0,d||0,e||0,void 0!==f?f:1,g||0,h||0,i||0,j||0,void 0!==l?l:1,m||0,n||0,p||0,q||0,void 0!==r?r:1)};
 THREE.Matrix4.prototype={constructor:THREE.Matrix4,set:function(a,b,c,d,e,f,g,h,i,j,l,m,n,p,q,r){var u=this.elements;u[0]=a;u[4]=b;u[8]=c;u[12]=d;u[1]=e;u[5]=f;u[9]=g;u[13]=h;u[2]=i;u[6]=j;u[10]=l;u[14]=m;u[3]=n;u[7]=p;u[11]=q;u[15]=r;return this},identity:function(){this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);return this},copy:function(a){a=a.elements;this.set(a[0],a[4],a[8],a[12],a[1],a[5],a[9],a[13],a[2],a[6],a[10],a[14],a[3],a[7],a[11],a[15]);return this},lookAt:function(a,b,c){var d=this.elements,
 e=THREE.Matrix4.__v1,f=THREE.Matrix4.__v2,g=THREE.Matrix4.__v3;g.sub(a,b).normalize();0===g.length()&&(g.z=1);e.cross(c,g).normalize();0===e.length()&&(g.x+=1E-4,e.cross(c,g).normalize());f.cross(g,e);d[0]=e.x;d[4]=f.x;d[8]=g.x;d[1]=e.y;d[5]=f.y;d[9]=g.y;d[2]=e.z;d[6]=f.z;d[10]=g.z;return this},multiply:function(a,b){var c=a.elements,d=b.elements,e=this.elements,f=c[0],g=c[4],h=c[8],i=c[12],j=c[1],l=c[5],m=c[9],n=c[13],p=c[2],q=c[6],r=c[10],u=c[14],s=c[3],D=c[7],x=c[11],c=c[15],t=d[0],F=d[4],A=d[8],
@@ -111,7 +111,7 @@ f.vertexNormals.length;d++)I.copy(f.vertexNormals[d]),e=f[M[d]],z=E[e],C.copy(z)
 if(0<this.vertices.length){var a;a=this.vertices[0];this.boundingBox.min.copy(a);this.boundingBox.max.copy(a);for(var b=this.boundingBox.min,c=this.boundingBox.max,d=1,e=this.vertices.length;d<e;d++)a=this.vertices[d],a.x<b.x?b.x=a.x:a.x>c.x&&(c.x=a.x),a.y<b.y?b.y=a.y:a.y>c.y&&(c.y=a.y),a.z<b.z?b.z=a.z:a.z>c.z&&(c.z=a.z)}else this.boundingBox.min.set(0,0,0),this.boundingBox.max.set(0,0,0)},computeBoundingSphere:function(){var a=0;null===this.boundingSphere&&(this.boundingSphere={radius:0});for(var b=
 0,c=this.vertices.length;b<c;b++){var d=this.vertices[b].lengthSq();d>a&&(a=d)}this.boundingSphere.radius=Math.sqrt(a)},mergeVertices:function(){var a={},b=[],c=[],d,e=Math.pow(10,4),f,g,h,i;f=0;for(g=this.vertices.length;f<g;f++)d=this.vertices[f],d=[Math.round(d.x*e),Math.round(d.y*e),Math.round(d.z*e)].join("_"),void 0===a[d]?(a[d]=f,b.push(this.vertices[f]),c[f]=b.length-1):c[f]=c[a[d]];f=0;for(g=this.faces.length;f<g;f++)if(a=this.faces[f],a instanceof THREE.Face3)a.a=c[a.a],a.b=c[a.b],a.c=c[a.c];
 else if(a instanceof THREE.Face4){a.a=c[a.a];a.b=c[a.b];a.c=c[a.c];a.d=c[a.d];d=[a.a,a.b,a.c,a.d];for(e=3;0<e;e--)if(d.indexOf(a["abcd"[e]])!==e){d.splice(e,1);this.faces[f]=new THREE.Face3(d[0],d[1],d[2],a.normal,a.color,a.materialIndex);d=0;for(h=this.faceVertexUvs.length;d<h;d++)(i=this.faceVertexUvs[d][f])&&i.splice(e,1);this.faces[f].vertexColors=a.vertexColors;break}}c=this.vertices.length-b.length;this.vertices=b;return c},clone:function(){for(var a=new THREE.Geometry,b=this.vertices,c=0,d=
-b.length;c<d;c++)a.vertices.push(b[c].clone());b=this.faces;c=0;for(d=b.length;c<d;c++)a.faces.push(b[c].clone());b=this.faceVertexUvs[0];c=0;for(d=b.length;c<d;c++){for(var e=b[c],f=[],g=0,h=e.length;g<h;g++)f.push(new THREE.UV(e[g].u,e[g].v));a.faceVertexUvs[0].push(f)}return a},deallocate:function(){var a=THREE.GeometryLibrary.indexOf(this);-1!==a&&THREE.GeometryLibrary.splice(a,1)}};THREE.GeometryIdCount=0;THREE.GeometryLibrary=[];THREE.BufferGeometry=function(){THREE.GeometryLibrary.push(this);this.id=THREE.GeometryIdCount++;this.attributes={};this.dynamic=!1;this.boundingSphere=this.boundingBox=null;this.hasTangents=!1;this.morphTargets=[]};
+b.length;c<d;c++)a.vertices.push(b[c].clone());b=this.faces;c=0;for(d=b.length;c<d;c++)a.faces.push(b[c].clone());b=this.faceVertexUvs[0];c=0;for(d=b.length;c<d;c++){for(var e=b[c],f=[],g=0,h=e.length;g<h;g++)f.push(new THREE.UV(e[g].u,e[g].v));a.faceVertexUvs[0].push(f)}return a},deallocate:function(){var a=THREE.GeometryLibrary.indexOf(this);-1!==a&&THREE.GeometryLibrary.splice(a,1)}};THREE.GeometryIdCount=0;THREE.GeometryLibrary=[];THREE.BufferGeometry=function(){THREE.GeometryLibrary.push(this);this.id=THREE.GeometryIdCount++;this.attributes={};this.dynamic=!1;this.offsets=[];this.boundingSphere=this.boundingBox=null;this.hasTangents=!1;this.morphTargets=[]};
 THREE.BufferGeometry.prototype={constructor:THREE.BufferGeometry,applyMatrix:function(a){var b,c;this.attributes.position&&(b=this.attributes.position.array);this.attributes.normal&&(c=this.attributes.normal.array);void 0!==b&&(a.multiplyVector3Array(b),this.verticesNeedUpdate=!0);void 0!==c&&(b=new THREE.Matrix3,b.getInverse(a).transpose(),b.multiplyVector3Array(c),this.normalizeNormals(),this.normalsNeedUpdate=!0)},computeBoundingBox:function(){this.boundingBox||(this.boundingBox={min:new THREE.Vector3(Infinity,
 Infinity,Infinity),max:new THREE.Vector3(-Infinity,-Infinity,-Infinity)});var a=this.attributes.position.array;if(a)for(var b=this.boundingBox,c,d,e,f=0,g=a.length;f<g;f+=3)c=a[f],d=a[f+1],e=a[f+2],c<b.min.x?b.min.x=c:c>b.max.x&&(b.max.x=c),d<b.min.y?b.min.y=d:d>b.max.y&&(b.max.y=d),e<b.min.z?b.min.z=e:e>b.max.z&&(b.max.z=e);if(void 0===a||0===a.length)this.boundingBox.min.set(0,0,0),this.boundingBox.max.set(0,0,0)},computeBoundingSphere:function(){this.boundingSphere||(this.boundingSphere={radius:0});
 var a=this.attributes.position.array;if(a){for(var b,c=0,d,e,f=0,g=a.length;f<g;f+=3)b=a[f],d=a[f+1],e=a[f+2],b=b*b+d*d+e*e,b>c&&(c=b);this.boundingSphere.radius=Math.sqrt(c)}},computeVertexNormals:function(){if(this.attributes.position&&this.attributes.index){var a,b,c,d;a=this.attributes.position.array.length;if(void 0===this.attributes.normal)this.attributes.normal={itemSize:3,array:new Float32Array(a),numItems:a};else{a=0;for(b=this.attributes.normal.array.length;a<b;a++)this.attributes.normal.array[a]=
@@ -200,8 +200,8 @@ THREE.SpriteMaterial.prototype.clone=function(){var a=new THREE.SpriteMaterial;T
 THREE.SpriteAlignment.topCenter=new THREE.Vector2(0,-1);THREE.SpriteAlignment.topRight=new THREE.Vector2(-1,-1);THREE.SpriteAlignment.centerLeft=new THREE.Vector2(1,0);THREE.SpriteAlignment.center=new THREE.Vector2(0,0);THREE.SpriteAlignment.centerRight=new THREE.Vector2(-1,0);THREE.SpriteAlignment.bottomLeft=new THREE.Vector2(1,1);THREE.SpriteAlignment.bottomCenter=new THREE.Vector2(0,1);THREE.SpriteAlignment.bottomRight=new THREE.Vector2(-1,1);THREE.Texture=function(a,b,c,d,e,f,g,h,i){THREE.TextureLibrary.push(this);this.id=THREE.TextureIdCount++;this.name="";this.image=a;this.mapping=void 0!==b?b:new THREE.UVMapping;this.wrapS=void 0!==c?c:THREE.ClampToEdgeWrapping;this.wrapT=void 0!==d?d:THREE.ClampToEdgeWrapping;this.magFilter=void 0!==e?e:THREE.LinearFilter;this.minFilter=void 0!==f?f:THREE.LinearMipMapLinearFilter;this.anisotropy=void 0!==i?i:1;this.format=void 0!==g?g:THREE.RGBAFormat;this.type=void 0!==h?h:THREE.UnsignedByteType;
 this.offset=new THREE.Vector2(0,0);this.repeat=new THREE.Vector2(1,1);this.generateMipmaps=!0;this.premultiplyAlpha=!1;this.flipY=!0;this.needsUpdate=!1;this.onUpdate=null};
 THREE.Texture.prototype={constructor:THREE.Texture,clone:function(){var a=new THREE.Texture;a.image=this.image;a.mapping=this.mapping;a.wrapS=this.wrapS;a.wrapT=this.wrapT;a.magFilter=this.magFilter;a.minFilter=this.minFilter;a.anisotropy=this.anisotropy;a.format=this.format;a.type=this.type;a.offset.copy(this.offset);a.repeat.copy(this.repeat);a.generateMipmaps=this.generateMipmaps;a.premultiplyAlpha=this.premultiplyAlpha;a.flipY=this.flipY;return a},deallocate:function(){var a=THREE.TextureLibrary.indexOf(this);
--1!==a&&THREE.TextureLibrary.splice(a,1)}};THREE.TextureIdCount=0;THREE.TextureLibrary=[];THREE.CompressedTexture=function(a,b,c,d,e,f,g,h,i,j){THREE.Texture.call(this,null,f,g,h,i,j,d,e);this.image={width:b,height:c};this.mipmaps=a};THREE.CompressedTexture.prototype=Object.create(THREE.Texture.prototype);
-THREE.CompressedTexture.prototype.clone=function(){var a=new THREE.CompressedTexture;a.image=this.image;a.mipmaps=this.mipmaps;a.format=this.format;a.type=this.type;a.mapping=this.mapping;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);return a};THREE.DataTexture=function(a,b,c,d,e,f,g,h,i,j){THREE.Texture.call(this,null,f,g,h,i,j,d,e);this.image={data:a,width:b,height:c}};THREE.DataTexture.prototype=Object.create(THREE.Texture.prototype);THREE.DataTexture.prototype.clone=function(){var a=new THREE.DataTexture(this.image.data,this.image.width,this.image.height,this.format,this.type,this.mapping,this.wrapS,this.wrapT,this.magFilter,this.minFilter);a.offset.copy(this.offset);a.repeat.copy(this.repeat);return a};THREE.Particle=function(a){THREE.Object3D.call(this);this.material=a};THREE.Particle.prototype=Object.create(THREE.Object3D.prototype);THREE.Particle.prototype.clone=function(a){void 0===a&&(a=new THREE.Particle(this.material));THREE.Object3D.prototype.clone.call(this,a);return a};THREE.ParticleSystem=function(a,b){THREE.Object3D.call(this);this.geometry=a;this.material=void 0!==b?b:new THREE.ParticleBasicMaterial({color:16777215*Math.random()});this.sortParticles=!1;this.geometry&&(null===this.geometry.boundingSphere&&this.geometry.computeBoundingSphere(),this.boundRadius=a.boundingSphere.radius);this.frustumCulled=!1};THREE.ParticleSystem.prototype=Object.create(THREE.Object3D.prototype);
+-1!==a&&THREE.TextureLibrary.splice(a,1)}};THREE.TextureIdCount=0;THREE.TextureLibrary=[];THREE.CompressedTexture=function(a,b,c,d,e,f,g,h,i,j,l){THREE.Texture.call(this,null,f,g,h,i,j,d,e,l);this.image={width:b,height:c};this.mipmaps=a};THREE.CompressedTexture.prototype=Object.create(THREE.Texture.prototype);
+THREE.CompressedTexture.prototype.clone=function(){var a=new THREE.CompressedTexture;a.image=this.image;a.mipmaps=this.mipmaps;a.format=this.format;a.type=this.type;a.mapping=this.mapping;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);return a};THREE.DataTexture=function(a,b,c,d,e,f,g,h,i,j,l){THREE.Texture.call(this,null,f,g,h,i,j,d,e,l);this.image={data:a,width:b,height:c}};THREE.DataTexture.prototype=Object.create(THREE.Texture.prototype);THREE.DataTexture.prototype.clone=function(){var a=new THREE.DataTexture(this.image.data,this.image.width,this.image.height,this.format,this.type,this.mapping,this.wrapS,this.wrapT,this.magFilter,this.minFilter,this.anisotropy);a.offset.copy(this.offset);a.repeat.copy(this.repeat);return a};THREE.Particle=function(a){THREE.Object3D.call(this);this.material=a};THREE.Particle.prototype=Object.create(THREE.Object3D.prototype);THREE.Particle.prototype.clone=function(a){void 0===a&&(a=new THREE.Particle(this.material));THREE.Object3D.prototype.clone.call(this,a);return a};THREE.ParticleSystem=function(a,b){THREE.Object3D.call(this);this.geometry=a;this.material=void 0!==b?b:new THREE.ParticleBasicMaterial({color:16777215*Math.random()});this.sortParticles=!1;this.geometry&&(null===this.geometry.boundingSphere&&this.geometry.computeBoundingSphere(),this.boundRadius=a.boundingSphere.radius);this.frustumCulled=!1};THREE.ParticleSystem.prototype=Object.create(THREE.Object3D.prototype);
 THREE.ParticleSystem.prototype.clone=function(a){void 0===a&&(a=new THREE.ParticleSystem(this.geometry,this.material));a.sortParticles=this.sortParticles;THREE.Object3D.prototype.clone.call(this,a);return a};THREE.Line=function(a,b,c){THREE.Object3D.call(this);this.geometry=a;this.material=void 0!==b?b:new THREE.LineBasicMaterial({color:16777215*Math.random()});this.type=void 0!==c?c:THREE.LineStrip;this.geometry&&(this.geometry.boundingSphere||this.geometry.computeBoundingSphere())};THREE.LineStrip=0;THREE.LinePieces=1;THREE.Line.prototype=Object.create(THREE.Object3D.prototype);
 THREE.Line.prototype.clone=function(a){void 0===a&&(a=new THREE.Line(this.geometry,this.material,this.type));THREE.Object3D.prototype.clone.call(this,a);return a};THREE.Mesh=function(a,b){THREE.Object3D.call(this);this.geometry=a;this.material=void 0!==b?b:new THREE.MeshBasicMaterial({color:16777215*Math.random(),wireframe:!0});if(this.geometry&&(null===this.geometry.boundingSphere&&this.geometry.computeBoundingSphere(),this.boundRadius=a.boundingSphere.radius,this.geometry.morphTargets.length)){this.morphTargetBase=-1;this.morphTargetForcedOrder=[];this.morphTargetInfluences=[];this.morphTargetDictionary={};for(var c=0;c<this.geometry.morphTargets.length;c++)this.morphTargetInfluences.push(0),
 this.morphTargetDictionary[this.geometry.morphTargets[c].name]=c}};THREE.Mesh.prototype=Object.create(THREE.Object3D.prototype);THREE.Mesh.prototype.getMorphTargetIndexByName=function(a){if(void 0!==this.morphTargetDictionary[a])return this.morphTargetDictionary[a];console.log("THREE.Mesh.getMorphTargetIndexByName: morph target "+a+" does not exist. Returning 0.");return 0};
@@ -345,89 +345,89 @@ T||console.log("THREE.WebGLRenderer: Standard derivatives not supported.");Eb||c
 ga.g,ga.b,Ia);this.context=k;var yc=k.getParameter(k.MAX_TEXTURE_IMAGE_UNITS),T=k.getParameter(k.MAX_VERTEX_TEXTURE_IMAGE_UNITS);k.getParameter(k.MAX_TEXTURE_SIZE);var Qc=k.getParameter(k.MAX_CUBE_MAP_TEXTURE_SIZE),oc=Eb?k.getParameter(Eb.MAX_TEXTURE_MAX_ANISOTROPY_EXT):0,ic=0<T,Ya=ic&&a;ub&&k.getParameter(k.COMPRESSED_TEXTURE_FORMATS);this.getContext=function(){return k};this.supportsVertexTextures=function(){return ic};this.getMaxAnisotropy=function(){return oc};this.setSize=function(a,b){O.width=
 a;O.height=b;this.setViewport(0,0,O.width,O.height)};this.setViewport=function(a,b,c,d){ob=void 0!==a?a:0;la=void 0!==b?b:0;sb=void 0!==c?c:O.width;gb=void 0!==d?d:O.height;k.viewport(ob,la,sb,gb)};this.setScissor=function(a,b,c,d){k.scissor(a,b,c,d)};this.enableScissorTest=function(a){a?k.enable(k.SCISSOR_TEST):k.disable(k.SCISSOR_TEST)};this.setClearColorHex=function(a,b){ga.setHex(a);Ia=b;k.clearColor(ga.r,ga.g,ga.b,Ia)};this.setClearColor=function(a,b){ga.copy(a);Ia=b;k.clearColor(ga.r,ga.g,ga.b,
 Ia)};this.getClearColor=function(){return ga};this.getClearAlpha=function(){return Ia};this.clear=function(a,b,c){var d=0;if(void 0===a||a)d|=k.COLOR_BUFFER_BIT;if(void 0===b||b)d|=k.DEPTH_BUFFER_BIT;if(void 0===c||c)d|=k.STENCIL_BUFFER_BIT;k.clear(d)};this.clearTarget=function(a,b,c,d){this.setRenderTarget(a);this.clear(b,c,d)};this.addPostPlugin=function(a){a.init(this);this.renderPluginsPost.push(a)};this.addPrePlugin=function(a){a.init(this);this.renderPluginsPre.push(a)};this.deallocateObject=
-function(a){if(a.__webglInit)if(a.__webglInit=!1,delete a._modelViewMatrix,delete a._normalMatrix,delete a._normalMatrixArray,delete a._modelViewMatrixArray,delete a._modelMatrixArray,a instanceof THREE.Mesh)for(var c in a.geometry.geometryGroups){var d=a.geometry.geometryGroups[c];k.deleteBuffer(d.__webglVertexBuffer);k.deleteBuffer(d.__webglNormalBuffer);k.deleteBuffer(d.__webglTangentBuffer);k.deleteBuffer(d.__webglColorBuffer);k.deleteBuffer(d.__webglUVBuffer);k.deleteBuffer(d.__webglUV2Buffer);
-k.deleteBuffer(d.__webglSkinIndicesBuffer);k.deleteBuffer(d.__webglSkinWeightsBuffer);k.deleteBuffer(d.__webglFaceBuffer);k.deleteBuffer(d.__webglLineBuffer);var e=void 0,f=void 0;if(d.numMorphTargets){e=0;for(f=d.numMorphTargets;e<f;e++)k.deleteBuffer(d.__webglMorphTargetsBuffers[e])}if(d.numMorphNormals){e=0;for(f=d.numMorphNormals;e<f;e++)k.deleteBuffer(d.__webglMorphNormalsBuffers[e])}b(d);H.info.memory.geometries--}else a instanceof THREE.Ribbon?(a=a.geometry,k.deleteBuffer(a.__webglVertexBuffer),
-k.deleteBuffer(a.__webglColorBuffer),k.deleteBuffer(a.__webglNormalBuffer),b(a),H.info.memory.geometries--):a instanceof THREE.Line?(a=a.geometry,k.deleteBuffer(a.__webglVertexBuffer),k.deleteBuffer(a.__webglColorBuffer),k.deleteBuffer(a.__webglLineDistanceBuffer),b(a),H.info.memory.geometries--):a instanceof THREE.ParticleSystem&&(a=a.geometry,k.deleteBuffer(a.__webglVertexBuffer),k.deleteBuffer(a.__webglColorBuffer),b(a),H.info.memory.geometries--)};this.deallocateTexture=function(a){a.__webglInit&&
-(a.__webglInit=!1,k.deleteTexture(a.__webglTexture),H.info.memory.textures--)};this.deallocateRenderTarget=function(a){if(a&&a.__webglTexture)if(k.deleteTexture(a.__webglTexture),a instanceof THREE.WebGLRenderTargetCube)for(var b=0;6>b;b++)k.deleteFramebuffer(a.__webglFramebuffer[b]),k.deleteRenderbuffer(a.__webglRenderbuffer[b]);else k.deleteFramebuffer(a.__webglFramebuffer),k.deleteRenderbuffer(a.__webglRenderbuffer)};this.deallocateMaterial=function(a){var b=a.program;if(b){a.program=void 0;var c,
-d,e=!1,a=0;for(c=ca.length;a<c;a++)if(d=ca[a],d.program===b){d.usedTimes--;0===d.usedTimes&&(e=!0);break}if(e){e=[];a=0;for(c=ca.length;a<c;a++)d=ca[a],d.program!==b&&e.push(d);ca=e;k.deleteProgram(b);H.info.memory.programs--}}};this.updateShadowMap=function(a,b){Z=null;da=ba=mb=nb=Sa=-1;Db=!0;qa=za=-1;this.shadowMapPlugin.update(a,b)};this.renderBufferImmediate=function(a,b,c){a.hasPositions&&!a.__webglVertexBuffer&&(a.__webglVertexBuffer=k.createBuffer());a.hasNormals&&!a.__webglNormalBuffer&&(a.__webglNormalBuffer=
-k.createBuffer());a.hasUvs&&!a.__webglUvBuffer&&(a.__webglUvBuffer=k.createBuffer());a.hasColors&&!a.__webglColorBuffer&&(a.__webglColorBuffer=k.createBuffer());a.hasPositions&&(k.bindBuffer(k.ARRAY_BUFFER,a.__webglVertexBuffer),k.bufferData(k.ARRAY_BUFFER,a.positionArray,k.DYNAMIC_DRAW),k.enableVertexAttribArray(b.attributes.position),k.vertexAttribPointer(b.attributes.position,3,k.FLOAT,!1,0,0));if(a.hasNormals){k.bindBuffer(k.ARRAY_BUFFER,a.__webglNormalBuffer);if(c.shading===THREE.FlatShading){var d,
-e,f,g,h,i,j,l,n,m,p,q=3*a.count;for(p=0;p<q;p+=9)m=a.normalArray,d=m[p],e=m[p+1],f=m[p+2],g=m[p+3],i=m[p+4],l=m[p+5],h=m[p+6],j=m[p+7],n=m[p+8],d=(d+g+h)/3,e=(e+i+j)/3,f=(f+l+n)/3,m[p]=d,m[p+1]=e,m[p+2]=f,m[p+3]=d,m[p+4]=e,m[p+5]=f,m[p+6]=d,m[p+7]=e,m[p+8]=f}k.bufferData(k.ARRAY_BUFFER,a.normalArray,k.DYNAMIC_DRAW);k.enableVertexAttribArray(b.attributes.normal);k.vertexAttribPointer(b.attributes.normal,3,k.FLOAT,!1,0,0)}a.hasUvs&&c.map&&(k.bindBuffer(k.ARRAY_BUFFER,a.__webglUvBuffer),k.bufferData(k.ARRAY_BUFFER,
-a.uvArray,k.DYNAMIC_DRAW),k.enableVertexAttribArray(b.attributes.uv),k.vertexAttribPointer(b.attributes.uv,2,k.FLOAT,!1,0,0));a.hasColors&&c.vertexColors!==THREE.NoColors&&(k.bindBuffer(k.ARRAY_BUFFER,a.__webglColorBuffer),k.bufferData(k.ARRAY_BUFFER,a.colorArray,k.DYNAMIC_DRAW),k.enableVertexAttribArray(b.attributes.color),k.vertexAttribPointer(b.attributes.color,3,k.FLOAT,!1,0,0));k.drawArrays(k.TRIANGLES,0,a.count);a.count=0};this.renderBufferDirect=function(a,b,c,d,e,f){if(!1!==d.visible)if(c=
-A(a,b,c,d,f),a=c.attributes,b=!1,d=16777215*e.id+2*c.id+(d.wireframe?1:0),d!==ba&&(ba=d,b=!0),b&&m(),f instanceof THREE.Mesh)if(f=e.attributes.index){d=e.offsets;1<d.length&&(b=!0);for(var c=0,g=d.length;c<g;c++){var h=d[c].index;if(b){var i=e.attributes.position,j=i.itemSize;k.bindBuffer(k.ARRAY_BUFFER,i.buffer);l(a.position);k.vertexAttribPointer(a.position,j,k.FLOAT,!1,0,4*h*j);j=e.attributes.normal;if(0<=a.normal&&j){var n=j.itemSize;k.bindBuffer(k.ARRAY_BUFFER,j.buffer);l(a.normal);k.vertexAttribPointer(a.normal,
-n,k.FLOAT,!1,0,4*h*n)}j=e.attributes.uv;0<=a.uv&&j&&(n=j.itemSize,k.bindBuffer(k.ARRAY_BUFFER,j.buffer),l(a.uv),k.vertexAttribPointer(a.uv,n,k.FLOAT,!1,0,4*h*n));j=e.attributes.color;0<=a.color&&j&&(n=j.itemSize,k.bindBuffer(k.ARRAY_BUFFER,j.buffer),l(a.color),k.vertexAttribPointer(a.color,n,k.FLOAT,!1,0,4*h*n));j=e.attributes.tangent;0<=a.tangent&&j&&(n=j.itemSize,k.bindBuffer(k.ARRAY_BUFFER,j.buffer),l(a.tangent),k.vertexAttribPointer(a.tangent,n,k.FLOAT,!1,0,4*h*n));k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,
-f.buffer)}k.drawElements(k.TRIANGLES,d[c].count,k.UNSIGNED_SHORT,2*d[c].start);H.info.render.calls++;H.info.render.vertices+=d[c].count;H.info.render.faces+=d[c].count/3}}else b&&(i=e.attributes.position,j=i.itemSize,k.bindBuffer(k.ARRAY_BUFFER,i.buffer),l(a.position),k.vertexAttribPointer(a.position,j,k.FLOAT,!1,0,0),j=e.attributes.normal,0<=a.normal&&j&&(n=j.itemSize,k.bindBuffer(k.ARRAY_BUFFER,j.buffer),l(a.normal),k.vertexAttribPointer(a.normal,n,k.FLOAT,!1,0,0)),j=e.attributes.uv,0<=a.uv&&j&&
-(n=j.itemSize,k.bindBuffer(k.ARRAY_BUFFER,j.buffer),l(a.uv),k.vertexAttribPointer(a.uv,n,k.FLOAT,!1,0,0)),j=e.attributes.color,0<=a.color&&j&&(n=j.itemSize,k.bindBuffer(k.ARRAY_BUFFER,j.buffer),l(a.color),k.vertexAttribPointer(a.color,n,k.FLOAT,!1,0,0)),j=e.attributes.tangent,0<=a.tangent&&j&&(n=j.itemSize,k.bindBuffer(k.ARRAY_BUFFER,j.buffer),l(a.tangent),k.vertexAttribPointer(a.tangent,n,k.FLOAT,!1,0,0))),k.drawArrays(k.TRIANGLES,0,i.numItems/3),H.info.render.calls++,H.info.render.vertices+=i.numItems/
-3,H.info.render.faces+=i.numItems/3/3;else f instanceof THREE.ParticleSystem&&b&&(i=e.attributes.position,j=i.itemSize,k.bindBuffer(k.ARRAY_BUFFER,i.buffer),l(a.position),k.vertexAttribPointer(a.position,j,k.FLOAT,!1,0,0),j=e.attributes.color,0<=a.color&&j&&(n=j.itemSize,k.bindBuffer(k.ARRAY_BUFFER,j.buffer),l(a.color),k.vertexAttribPointer(a.color,n,k.FLOAT,!1,0,0)),k.drawArrays(k.POINTS,0,i.numItems/3),H.info.render.calls++,H.info.render.points+=i.numItems/3)};this.renderBuffer=function(a,b,c,d,
-e,f){if(!1!==d.visible){var g,h,c=A(a,b,c,d,f),b=c.attributes,a=!1,c=16777215*e.id+2*c.id+(d.wireframe?1:0);c!==ba&&(ba=c,a=!0);a&&m();if(!d.morphTargets&&0<=b.position)a&&(k.bindBuffer(k.ARRAY_BUFFER,e.__webglVertexBuffer),l(b.position),k.vertexAttribPointer(b.position,3,k.FLOAT,!1,0,0));else if(f.morphTargetBase){c=d.program.attributes;-1!==f.morphTargetBase?(k.bindBuffer(k.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[f.morphTargetBase]),l(c.position),k.vertexAttribPointer(c.position,3,k.FLOAT,!1,
-0,0)):0<=c.position&&(k.bindBuffer(k.ARRAY_BUFFER,e.__webglVertexBuffer),l(c.position),k.vertexAttribPointer(c.position,3,k.FLOAT,!1,0,0));if(f.morphTargetForcedOrder.length){var i=0;h=f.morphTargetForcedOrder;for(g=f.morphTargetInfluences;i<d.numSupportedMorphTargets&&i<h.length;)k.bindBuffer(k.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[h[i]]),l(c["morphTarget"+i]),k.vertexAttribPointer(c["morphTarget"+i],3,k.FLOAT,!1,0,0),d.morphNormals&&(k.bindBuffer(k.ARRAY_BUFFER,e.__webglMorphNormalsBuffers[h[i]]),
-l(c["morphNormal"+i]),k.vertexAttribPointer(c["morphNormal"+i],3,k.FLOAT,!1,0,0)),f.__webglMorphTargetInfluences[i]=g[h[i]],i++}else{h=[];g=f.morphTargetInfluences;var j,n=g.length;for(j=0;j<n;j++)i=g[j],0<i&&h.push([j,i]);h.length>d.numSupportedMorphTargets?(h.sort(p),h.length=d.numSupportedMorphTargets):h.length>d.numSupportedMorphNormals?h.sort(p):0===h.length&&h.push([0,0]);for(i=0;i<d.numSupportedMorphTargets;)h[i]?(j=h[i][0],k.bindBuffer(k.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[j]),l(c["morphTarget"+
-i]),k.vertexAttribPointer(c["morphTarget"+i],3,k.FLOAT,!1,0,0),d.morphNormals&&(k.bindBuffer(k.ARRAY_BUFFER,e.__webglMorphNormalsBuffers[j]),l(c["morphNormal"+i]),k.vertexAttribPointer(c["morphNormal"+i],3,k.FLOAT,!1,0,0)),f.__webglMorphTargetInfluences[i]=g[j]):(k.vertexAttribPointer(c["morphTarget"+i],3,k.FLOAT,!1,0,0),d.morphNormals&&k.vertexAttribPointer(c["morphNormal"+i],3,k.FLOAT,!1,0,0),f.__webglMorphTargetInfluences[i]=0),i++}null!==d.program.uniforms.morphTargetInfluences&&k.uniform1fv(d.program.uniforms.morphTargetInfluences,
-f.__webglMorphTargetInfluences)}if(a){if(e.__webglCustomAttributesList){g=0;for(h=e.__webglCustomAttributesList.length;g<h;g++)c=e.__webglCustomAttributesList[g],0<=b[c.buffer.belongsToAttribute]&&(k.bindBuffer(k.ARRAY_BUFFER,c.buffer),l(b[c.buffer.belongsToAttribute]),k.vertexAttribPointer(b[c.buffer.belongsToAttribute],c.size,k.FLOAT,!1,0,0))}0<=b.color&&(k.bindBuffer(k.ARRAY_BUFFER,e.__webglColorBuffer),l(b.color),k.vertexAttribPointer(b.color,3,k.FLOAT,!1,0,0));0<=b.normal&&(k.bindBuffer(k.ARRAY_BUFFER,
-e.__webglNormalBuffer),l(b.normal),k.vertexAttribPointer(b.normal,3,k.FLOAT,!1,0,0));0<=b.tangent&&(k.bindBuffer(k.ARRAY_BUFFER,e.__webglTangentBuffer),l(b.tangent),k.vertexAttribPointer(b.tangent,4,k.FLOAT,!1,0,0));0<=b.uv&&(k.bindBuffer(k.ARRAY_BUFFER,e.__webglUVBuffer),l(b.uv),k.vertexAttribPointer(b.uv,2,k.FLOAT,!1,0,0));0<=b.uv2&&(k.bindBuffer(k.ARRAY_BUFFER,e.__webglUV2Buffer),l(b.uv2),k.vertexAttribPointer(b.uv2,2,k.FLOAT,!1,0,0));d.skinning&&(0<=b.skinIndex&&0<=b.skinWeight)&&(k.bindBuffer(k.ARRAY_BUFFER,
-e.__webglSkinIndicesBuffer),l(b.skinIndex),k.vertexAttribPointer(b.skinIndex,4,k.FLOAT,!1,0,0),k.bindBuffer(k.ARRAY_BUFFER,e.__webglSkinWeightsBuffer),l(b.skinWeight),k.vertexAttribPointer(b.skinWeight,4,k.FLOAT,!1,0,0));0<=b.lineDistance&&(k.bindBuffer(k.ARRAY_BUFFER,e.__webglLineDistanceBuffer),l(b.lineDistance),k.vertexAttribPointer(b.lineDistance,1,k.FLOAT,!1,0,0))}f instanceof THREE.Mesh?(d.wireframe?(d=d.wireframeLinewidth,d!==ra&&(k.lineWidth(d),ra=d),a&&k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,
-e.__webglLineBuffer),k.drawElements(k.LINES,e.__webglLineCount,k.UNSIGNED_SHORT,0)):(a&&k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,e.__webglFaceBuffer),k.drawElements(k.TRIANGLES,e.__webglFaceCount,k.UNSIGNED_SHORT,0)),H.info.render.calls++,H.info.render.vertices+=e.__webglFaceCount,H.info.render.faces+=e.__webglFaceCount/3):f instanceof THREE.Line?(f=f.type===THREE.LineStrip?k.LINE_STRIP:k.LINES,d=d.linewidth,d!==ra&&(k.lineWidth(d),ra=d),k.drawArrays(f,0,e.__webglLineCount),H.info.render.calls++):f instanceof
-THREE.ParticleSystem?(k.drawArrays(k.POINTS,0,e.__webglParticleCount),H.info.render.calls++,H.info.render.points+=e.__webglParticleCount):f instanceof THREE.Ribbon&&(k.drawArrays(k.TRIANGLE_STRIP,0,e.__webglVertexCount),H.info.render.calls++)}};this.render=function(a,b,c,d){if(!1===b instanceof THREE.Camera)console.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.");else{var e,f,g,h,i=a.__lights,j=a.fog;da=-1;Db=!0;this.autoUpdateScene&&a.updateMatrixWorld();void 0===b.parent&&
-b.updateMatrixWorld();b._viewMatrixArray||(b._viewMatrixArray=new Float32Array(16));b._projectionMatrixArray||(b._projectionMatrixArray=new Float32Array(16));b.matrixWorldInverse.getInverse(b.matrixWorld);b.matrixWorldInverse.flattenToArray(b._viewMatrixArray);b.projectionMatrix.flattenToArray(b._projectionMatrixArray);Xa.multiply(b.projectionMatrix,b.matrixWorldInverse);wb.setFromMatrix(Xa);this.autoUpdateObjects&&this.initWebGLObjects(a);q(this.renderPluginsPre,a,b);H.info.render.calls=0;H.info.render.vertices=
-0;H.info.render.faces=0;H.info.render.points=0;this.setRenderTarget(c);(this.autoClear||d)&&this.clear(this.autoClearColor,this.autoClearDepth,this.autoClearStencil);h=a.__webglObjects;d=0;for(e=h.length;d<e;d++)if(f=h[d],g=f.object,f.render=!1,g.visible&&(!(g instanceof THREE.Mesh||g instanceof THREE.ParticleSystem)||!g.frustumCulled||wb.contains(g))){z(g,b);var l=f,m=l.buffer,p=void 0,s=p=void 0,s=l.object.material;if(s instanceof THREE.MeshFaceMaterial)p=m.materialIndex,0<=p&&(p=s.materials[p],
-p.transparent?(l.transparent=p,l.opaque=null):(l.opaque=p,l.transparent=null));else if(p=s)p.transparent?(l.transparent=p,l.opaque=null):(l.opaque=p,l.transparent=null);f.render=!0;!0===this.sortObjects&&(null!==g.renderDepth?f.z=g.renderDepth:(cb.copy(g.matrixWorld.getPosition()),Xa.multiplyVector3(cb),f.z=cb.z),f.id=g.id)}this.sortObjects&&h.sort(n);h=a.__webglObjectsImmediate;d=0;for(e=h.length;d<e;d++)f=h[d],g=f.object,g.visible&&(z(g,b),g=f.object.material,g.transparent?(f.transparent=g,f.opaque=
-null):(f.opaque=g,f.transparent=null));a.overrideMaterial?(d=a.overrideMaterial,this.setBlending(d.blending,d.blendEquation,d.blendSrc,d.blendDst),this.setDepthTest(d.depthTest),this.setDepthWrite(d.depthWrite),J(d.polygonOffset,d.polygonOffsetFactor,d.polygonOffsetUnits),r(a.__webglObjects,!1,"",b,i,j,!0,d),u(a.__webglObjectsImmediate,"",b,i,j,!1,d)):(this.setBlending(THREE.NormalBlending),r(a.__webglObjects,!0,"opaque",b,i,j,!1),u(a.__webglObjectsImmediate,"opaque",b,i,j,!1),r(a.__webglObjects,
-!1,"transparent",b,i,j,!0),u(a.__webglObjectsImmediate,"transparent",b,i,j,!0));q(this.renderPluginsPost,a,b);c&&(c.generateMipmaps&&c.minFilter!==THREE.NearestFilter&&c.minFilter!==THREE.LinearFilter)&&(c instanceof THREE.WebGLRenderTargetCube?(k.bindTexture(k.TEXTURE_CUBE_MAP,c.__webglTexture),k.generateMipmap(k.TEXTURE_CUBE_MAP),k.bindTexture(k.TEXTURE_CUBE_MAP,null)):(k.bindTexture(k.TEXTURE_2D,c.__webglTexture),k.generateMipmap(k.TEXTURE_2D),k.bindTexture(k.TEXTURE_2D,null)));this.setDepthTest(!0);
-this.setDepthWrite(!0)}};this.renderImmediateObject=function(a,b,c,d,e){var f=A(a,b,c,d,e);ba=-1;H.setMaterialFaces(d);e.immediateRenderCallback?e.immediateRenderCallback(f,k,wb):e.render(function(a){H.renderBufferImmediate(a,f,d)})};this.initWebGLObjects=function(a){a.__webglObjects||(a.__webglObjects=[],a.__webglObjectsImmediate=[],a.__webglSprites=[],a.__webglFlares=[]);for(;a.__objectsAdded.length;){var b=a.__objectsAdded[0],l=a,n=void 0,m=void 0,p=void 0,q=void 0;if(!b.__webglInit)if(b.__webglInit=
-!0,b._modelViewMatrix=new THREE.Matrix4,b._normalMatrix=new THREE.Matrix3,b instanceof THREE.Mesh)if(m=b.geometry,p=b.material,m instanceof THREE.Geometry){if(void 0===m.geometryGroups){var r=m,u=void 0,v=void 0,z=void 0,A=void 0,C=void 0,B=void 0,E=void 0,I={},J=r.morphTargets.length,L=r.morphNormals.length,Z=p instanceof THREE.MeshFaceMaterial;r.geometryGroups={};u=0;for(v=r.faces.length;u<v;u++)z=r.faces[u],A=Z?z.materialIndex:void 0,B=void 0!==A?A:-1,void 0===I[B]&&(I[B]={hash:B,counter:0}),E=
-I[B].hash+"_"+I[B].counter,void 0===r.geometryGroups[E]&&(r.geometryGroups[E]={faces3:[],faces4:[],materialIndex:A,vertices:0,numMorphTargets:J,numMorphNormals:L}),C=z instanceof THREE.Face3?3:4,65535<r.geometryGroups[E].vertices+C&&(I[B].counter+=1,E=I[B].hash+"_"+I[B].counter,void 0===r.geometryGroups[E]&&(r.geometryGroups[E]={faces3:[],faces4:[],materialIndex:A,vertices:0,numMorphTargets:J,numMorphNormals:L})),z instanceof THREE.Face3?r.geometryGroups[E].faces3.push(u):r.geometryGroups[E].faces4.push(u),
-r.geometryGroups[E].vertices+=C;r.geometryGroupsList=[];var P=void 0;for(P in r.geometryGroups)r.geometryGroups[P].id=eb++,r.geometryGroupsList.push(r.geometryGroups[P])}for(n in m.geometryGroups)if(q=m.geometryGroups[n],!q.__webglVertexBuffer){var K=q;K.__webglVertexBuffer=k.createBuffer();K.__webglNormalBuffer=k.createBuffer();K.__webglTangentBuffer=k.createBuffer();K.__webglColorBuffer=k.createBuffer();K.__webglUVBuffer=k.createBuffer();K.__webglUV2Buffer=k.createBuffer();K.__webglSkinIndicesBuffer=
-k.createBuffer();K.__webglSkinWeightsBuffer=k.createBuffer();K.__webglFaceBuffer=k.createBuffer();K.__webglLineBuffer=k.createBuffer();var M=void 0,ca=void 0;if(K.numMorphTargets){K.__webglMorphTargetsBuffers=[];M=0;for(ca=K.numMorphTargets;M<ca;M++)K.__webglMorphTargetsBuffers.push(k.createBuffer())}if(K.numMorphNormals){K.__webglMorphNormalsBuffers=[];M=0;for(ca=K.numMorphNormals;M<ca;M++)K.__webglMorphNormalsBuffers.push(k.createBuffer())}H.info.memory.geometries++;d(q,b);m.verticesNeedUpdate=
-!0;m.morphTargetsNeedUpdate=!0;m.elementsNeedUpdate=!0;m.uvsNeedUpdate=!0;m.normalsNeedUpdate=!0;m.tangentsNeedUpdate=!0;m.colorsNeedUpdate=!0}}else m instanceof THREE.BufferGeometry&&h(m);else if(b instanceof THREE.Ribbon){if(m=b.geometry,!m.__webglVertexBuffer){var N=m;N.__webglVertexBuffer=k.createBuffer();N.__webglColorBuffer=k.createBuffer();N.__webglNormalBuffer=k.createBuffer();H.info.memory.geometries++;var S=m,ba=b,O=S.vertices.length;S.__vertexArray=new Float32Array(3*O);S.__colorArray=
-new Float32Array(3*O);S.__normalArray=new Float32Array(3*O);S.__webglVertexCount=O;c(S,ba);m.verticesNeedUpdate=!0;m.colorsNeedUpdate=!0;m.normalsNeedUpdate=!0}}else if(b instanceof THREE.Line){if(m=b.geometry,!m.__webglVertexBuffer){var Q=m;Q.__webglVertexBuffer=k.createBuffer();Q.__webglColorBuffer=k.createBuffer();Q.__webglLineDistanceBuffer=k.createBuffer();H.info.memory.geometries++;var R=m,ia=b,T=R.vertices.length;R.__vertexArray=new Float32Array(3*T);R.__colorArray=new Float32Array(3*T);R.__lineDistanceArray=
-new Float32Array(1*T);R.__webglLineCount=T;c(R,ia);m.verticesNeedUpdate=!0;m.colorsNeedUpdate=!0;m.lineDistancesNeedUpdate=!0}}else if(b instanceof THREE.ParticleSystem&&(m=b.geometry,!m.__webglVertexBuffer))if(m instanceof THREE.Geometry){var da=m;da.__webglVertexBuffer=k.createBuffer();da.__webglColorBuffer=k.createBuffer();H.info.memory.geometries++;var aa=m,ga=b,ja=aa.vertices.length;aa.__vertexArray=new Float32Array(3*ja);aa.__colorArray=new Float32Array(3*ja);aa.__sortArray=[];aa.__webglParticleCount=
-ja;c(aa,ga);m.verticesNeedUpdate=!0;m.colorsNeedUpdate=!0}else m instanceof THREE.BufferGeometry&&h(m);if(!b.__webglActive){if(b instanceof THREE.Mesh)if(m=b.geometry,m instanceof THREE.BufferGeometry)s(l.__webglObjects,m,b);else for(n in m.geometryGroups)q=m.geometryGroups[n],s(l.__webglObjects,q,b);else b instanceof THREE.Ribbon||b instanceof THREE.Line||b instanceof THREE.ParticleSystem?(m=b.geometry,s(l.__webglObjects,m,b)):b instanceof THREE.ImmediateRenderObject||b.immediateRenderCallback?l.__webglObjectsImmediate.push({object:b,
-opaque:null,transparent:null}):b instanceof THREE.Sprite?l.__webglSprites.push(b):b instanceof THREE.LensFlare&&l.__webglFlares.push(b);b.__webglActive=!0}a.__objectsAdded.splice(0,1)}for(;a.__objectsRemoved.length;){var oa=a.__objectsRemoved[0],qa=a;oa instanceof THREE.Mesh||oa instanceof THREE.ParticleSystem||oa instanceof THREE.Ribbon||oa instanceof THREE.Line?t(qa.__webglObjects,oa):oa instanceof THREE.Sprite?F(qa.__webglSprites,oa):oa instanceof THREE.LensFlare?F(qa.__webglFlares,oa):(oa instanceof
-THREE.ImmediateRenderObject||oa.immediateRenderCallback)&&t(qa.__webglObjectsImmediate,oa);oa.__webglActive=!1;a.__objectsRemoved.splice(0,1)}for(var Ia=0,Ma=a.__webglObjects.length;Ia<Ma;Ia++){var ra=a.__webglObjects[Ia].object,V=ra.geometry,Ba=void 0,za=void 0,la=void 0;if(ra instanceof THREE.Mesh)if(V instanceof THREE.BufferGeometry)(V.verticesNeedUpdate||V.elementsNeedUpdate||V.uvsNeedUpdate||V.normalsNeedUpdate||V.colorsNeedUpdate||V.tangentsNeedUpdate)&&j(V,k.DYNAMIC_DRAW,!V.dynamic),V.verticesNeedUpdate=
-!1,V.elementsNeedUpdate=!1,V.uvsNeedUpdate=!1,V.normalsNeedUpdate=!1,V.colorsNeedUpdate=!1,V.tangentsNeedUpdate=!1;else{for(var Sa=0,Ta=V.geometryGroupsList.length;Sa<Ta;Sa++)if(Ba=V.geometryGroupsList[Sa],la=e(ra,Ba),V.buffersNeedUpdate&&d(Ba,ra),za=la.attributes&&D(la),V.verticesNeedUpdate||V.morphTargetsNeedUpdate||V.elementsNeedUpdate||V.uvsNeedUpdate||V.normalsNeedUpdate||V.colorsNeedUpdate||V.tangentsNeedUpdate||za){var sa=Ba,Xa=ra,Aa=k.DYNAMIC_DRAW,vb=!V.dynamic,fb=la;if(sa.__inittedArrays){var qb=
-f(fb),nb=fb.vertexColors?fb.vertexColors:!1,sb=g(fb),gb=qb===THREE.SmoothShading,G=void 0,$=void 0,Wa=void 0,U=void 0,cb=void 0,Ya=void 0,Hb=void 0,rb=void 0,ab=void 0,mb=void 0,ob=void 0,W=void 0,X=void 0,Y=void 0,pa=void 0,Ib=void 0,Jb=void 0,Kb=void 0,tb=void 0,Lb=void 0,Mb=void 0,Nb=void 0,ub=void 0,Ob=void 0,Pb=void 0,Qb=void 0,wb=void 0,Rb=void 0,Sb=void 0,Tb=void 0,Db=void 0,Ub=void 0,Vb=void 0,Wb=void 0,Eb=void 0,va=void 0,ac=void 0,cc=void 0,kc=void 0,lc=void 0,Pa=void 0,ic=void 0,Na=void 0,
-Oa=void 0,dc=void 0,Yb=void 0,Ja=0,La=0,Zb=0,$b=0,zb=0,Za=0,ya=0,db=0,Ka=0,ha=0,ka=0,y=0,wa=void 0,Qa=sa.__vertexArray,pc=sa.__uvArray,qc=sa.__uv2Array,Ab=sa.__normalArray,Ea=sa.__tangentArray,Ra=sa.__colorArray,Fa=sa.__skinIndexArray,Ga=sa.__skinWeightArray,Sc=sa.__morphTargetsArrays,Tc=sa.__morphNormalsArrays,Uc=sa.__webglCustomAttributesList,w=void 0,Xb=sa.__faceArray,pb=sa.__lineArray,jb=Xa.geometry,xc=jb.elementsNeedUpdate,oc=jb.uvsNeedUpdate,yc=jb.normalsNeedUpdate,Pc=jb.tangentsNeedUpdate,
-Qc=jb.colorsNeedUpdate,hd=jb.morphTargetsNeedUpdate,gc=jb.vertices,ta=sa.faces3,ua=sa.faces4,$a=jb.faces,Vc=jb.faceVertexUvs[0],Wc=jb.faceVertexUvs[1],hc=jb.skinIndices,ec=jb.skinWeights,fc=jb.morphTargets,Ac=jb.morphNormals;if(jb.verticesNeedUpdate){G=0;for($=ta.length;G<$;G++)U=$a[ta[G]],W=gc[U.a],X=gc[U.b],Y=gc[U.c],Qa[La]=W.x,Qa[La+1]=W.y,Qa[La+2]=W.z,Qa[La+3]=X.x,Qa[La+4]=X.y,Qa[La+5]=X.z,Qa[La+6]=Y.x,Qa[La+7]=Y.y,Qa[La+8]=Y.z,La+=9;G=0;for($=ua.length;G<$;G++)U=$a[ua[G]],W=gc[U.a],X=gc[U.b],
-Y=gc[U.c],pa=gc[U.d],Qa[La]=W.x,Qa[La+1]=W.y,Qa[La+2]=W.z,Qa[La+3]=X.x,Qa[La+4]=X.y,Qa[La+5]=X.z,Qa[La+6]=Y.x,Qa[La+7]=Y.y,Qa[La+8]=Y.z,Qa[La+9]=pa.x,Qa[La+10]=pa.y,Qa[La+11]=pa.z,La+=12;k.bindBuffer(k.ARRAY_BUFFER,sa.__webglVertexBuffer);k.bufferData(k.ARRAY_BUFFER,Qa,Aa)}if(hd){Pa=0;for(ic=fc.length;Pa<ic;Pa++){G=ka=0;for($=ta.length;G<$;G++)dc=ta[G],U=$a[dc],W=fc[Pa].vertices[U.a],X=fc[Pa].vertices[U.b],Y=fc[Pa].vertices[U.c],Na=Sc[Pa],Na[ka]=W.x,Na[ka+1]=W.y,Na[ka+2]=W.z,Na[ka+3]=X.x,Na[ka+4]=
-X.y,Na[ka+5]=X.z,Na[ka+6]=Y.x,Na[ka+7]=Y.y,Na[ka+8]=Y.z,fb.morphNormals&&(gb?(Yb=Ac[Pa].vertexNormals[dc],Lb=Yb.a,Mb=Yb.b,Nb=Yb.c):Nb=Mb=Lb=Ac[Pa].faceNormals[dc],Oa=Tc[Pa],Oa[ka]=Lb.x,Oa[ka+1]=Lb.y,Oa[ka+2]=Lb.z,Oa[ka+3]=Mb.x,Oa[ka+4]=Mb.y,Oa[ka+5]=Mb.z,Oa[ka+6]=Nb.x,Oa[ka+7]=Nb.y,Oa[ka+8]=Nb.z),ka+=9;G=0;for($=ua.length;G<$;G++)dc=ua[G],U=$a[dc],W=fc[Pa].vertices[U.a],X=fc[Pa].vertices[U.b],Y=fc[Pa].vertices[U.c],pa=fc[Pa].vertices[U.d],Na=Sc[Pa],Na[ka]=W.x,Na[ka+1]=W.y,Na[ka+2]=W.z,Na[ka+3]=X.x,
-Na[ka+4]=X.y,Na[ka+5]=X.z,Na[ka+6]=Y.x,Na[ka+7]=Y.y,Na[ka+8]=Y.z,Na[ka+9]=pa.x,Na[ka+10]=pa.y,Na[ka+11]=pa.z,fb.morphNormals&&(gb?(Yb=Ac[Pa].vertexNormals[dc],Lb=Yb.a,Mb=Yb.b,Nb=Yb.c,ub=Yb.d):ub=Nb=Mb=Lb=Ac[Pa].faceNormals[dc],Oa=Tc[Pa],Oa[ka]=Lb.x,Oa[ka+1]=Lb.y,Oa[ka+2]=Lb.z,Oa[ka+3]=Mb.x,Oa[ka+4]=Mb.y,Oa[ka+5]=Mb.z,Oa[ka+6]=Nb.x,Oa[ka+7]=Nb.y,Oa[ka+8]=Nb.z,Oa[ka+9]=ub.x,Oa[ka+10]=ub.y,Oa[ka+11]=ub.z),ka+=12;k.bindBuffer(k.ARRAY_BUFFER,sa.__webglMorphTargetsBuffers[Pa]);k.bufferData(k.ARRAY_BUFFER,
-Sc[Pa],Aa);fb.morphNormals&&(k.bindBuffer(k.ARRAY_BUFFER,sa.__webglMorphNormalsBuffers[Pa]),k.bufferData(k.ARRAY_BUFFER,Tc[Pa],Aa))}}if(ec.length){G=0;for($=ta.length;G<$;G++)U=$a[ta[G]],Rb=ec[U.a],Sb=ec[U.b],Tb=ec[U.c],Ga[ha]=Rb.x,Ga[ha+1]=Rb.y,Ga[ha+2]=Rb.z,Ga[ha+3]=Rb.w,Ga[ha+4]=Sb.x,Ga[ha+5]=Sb.y,Ga[ha+6]=Sb.z,Ga[ha+7]=Sb.w,Ga[ha+8]=Tb.x,Ga[ha+9]=Tb.y,Ga[ha+10]=Tb.z,Ga[ha+11]=Tb.w,Ub=hc[U.a],Vb=hc[U.b],Wb=hc[U.c],Fa[ha]=Ub.x,Fa[ha+1]=Ub.y,Fa[ha+2]=Ub.z,Fa[ha+3]=Ub.w,Fa[ha+4]=Vb.x,Fa[ha+5]=Vb.y,
-Fa[ha+6]=Vb.z,Fa[ha+7]=Vb.w,Fa[ha+8]=Wb.x,Fa[ha+9]=Wb.y,Fa[ha+10]=Wb.z,Fa[ha+11]=Wb.w,ha+=12;G=0;for($=ua.length;G<$;G++)U=$a[ua[G]],Rb=ec[U.a],Sb=ec[U.b],Tb=ec[U.c],Db=ec[U.d],Ga[ha]=Rb.x,Ga[ha+1]=Rb.y,Ga[ha+2]=Rb.z,Ga[ha+3]=Rb.w,Ga[ha+4]=Sb.x,Ga[ha+5]=Sb.y,Ga[ha+6]=Sb.z,Ga[ha+7]=Sb.w,Ga[ha+8]=Tb.x,Ga[ha+9]=Tb.y,Ga[ha+10]=Tb.z,Ga[ha+11]=Tb.w,Ga[ha+12]=Db.x,Ga[ha+13]=Db.y,Ga[ha+14]=Db.z,Ga[ha+15]=Db.w,Ub=hc[U.a],Vb=hc[U.b],Wb=hc[U.c],Eb=hc[U.d],Fa[ha]=Ub.x,Fa[ha+1]=Ub.y,Fa[ha+2]=Ub.z,Fa[ha+3]=Ub.w,
-Fa[ha+4]=Vb.x,Fa[ha+5]=Vb.y,Fa[ha+6]=Vb.z,Fa[ha+7]=Vb.w,Fa[ha+8]=Wb.x,Fa[ha+9]=Wb.y,Fa[ha+10]=Wb.z,Fa[ha+11]=Wb.w,Fa[ha+12]=Eb.x,Fa[ha+13]=Eb.y,Fa[ha+14]=Eb.z,Fa[ha+15]=Eb.w,ha+=16;0<ha&&(k.bindBuffer(k.ARRAY_BUFFER,sa.__webglSkinIndicesBuffer),k.bufferData(k.ARRAY_BUFFER,Fa,Aa),k.bindBuffer(k.ARRAY_BUFFER,sa.__webglSkinWeightsBuffer),k.bufferData(k.ARRAY_BUFFER,Ga,Aa))}if(Qc&&nb){G=0;for($=ta.length;G<$;G++)U=$a[ta[G]],Hb=U.vertexColors,rb=U.color,3===Hb.length&&nb===THREE.VertexColors?(Ob=Hb[0],
-Pb=Hb[1],Qb=Hb[2]):Qb=Pb=Ob=rb,Ra[Ka]=Ob.r,Ra[Ka+1]=Ob.g,Ra[Ka+2]=Ob.b,Ra[Ka+3]=Pb.r,Ra[Ka+4]=Pb.g,Ra[Ka+5]=Pb.b,Ra[Ka+6]=Qb.r,Ra[Ka+7]=Qb.g,Ra[Ka+8]=Qb.b,Ka+=9;G=0;for($=ua.length;G<$;G++)U=$a[ua[G]],Hb=U.vertexColors,rb=U.color,4===Hb.length&&nb===THREE.VertexColors?(Ob=Hb[0],Pb=Hb[1],Qb=Hb[2],wb=Hb[3]):wb=Qb=Pb=Ob=rb,Ra[Ka]=Ob.r,Ra[Ka+1]=Ob.g,Ra[Ka+2]=Ob.b,Ra[Ka+3]=Pb.r,Ra[Ka+4]=Pb.g,Ra[Ka+5]=Pb.b,Ra[Ka+6]=Qb.r,Ra[Ka+7]=Qb.g,Ra[Ka+8]=Qb.b,Ra[Ka+9]=wb.r,Ra[Ka+10]=wb.g,Ra[Ka+11]=wb.b,Ka+=12;0<Ka&&
-(k.bindBuffer(k.ARRAY_BUFFER,sa.__webglColorBuffer),k.bufferData(k.ARRAY_BUFFER,Ra,Aa))}if(Pc&&jb.hasTangents){G=0;for($=ta.length;G<$;G++)U=$a[ta[G]],ab=U.vertexTangents,Ib=ab[0],Jb=ab[1],Kb=ab[2],Ea[ya]=Ib.x,Ea[ya+1]=Ib.y,Ea[ya+2]=Ib.z,Ea[ya+3]=Ib.w,Ea[ya+4]=Jb.x,Ea[ya+5]=Jb.y,Ea[ya+6]=Jb.z,Ea[ya+7]=Jb.w,Ea[ya+8]=Kb.x,Ea[ya+9]=Kb.y,Ea[ya+10]=Kb.z,Ea[ya+11]=Kb.w,ya+=12;G=0;for($=ua.length;G<$;G++)U=$a[ua[G]],ab=U.vertexTangents,Ib=ab[0],Jb=ab[1],Kb=ab[2],tb=ab[3],Ea[ya]=Ib.x,Ea[ya+1]=Ib.y,Ea[ya+
-2]=Ib.z,Ea[ya+3]=Ib.w,Ea[ya+4]=Jb.x,Ea[ya+5]=Jb.y,Ea[ya+6]=Jb.z,Ea[ya+7]=Jb.w,Ea[ya+8]=Kb.x,Ea[ya+9]=Kb.y,Ea[ya+10]=Kb.z,Ea[ya+11]=Kb.w,Ea[ya+12]=tb.x,Ea[ya+13]=tb.y,Ea[ya+14]=tb.z,Ea[ya+15]=tb.w,ya+=16;k.bindBuffer(k.ARRAY_BUFFER,sa.__webglTangentBuffer);k.bufferData(k.ARRAY_BUFFER,Ea,Aa)}if(yc&&qb){G=0;for($=ta.length;G<$;G++)if(U=$a[ta[G]],cb=U.vertexNormals,Ya=U.normal,3===cb.length&&gb)for(va=0;3>va;va++)cc=cb[va],Ab[Za]=cc.x,Ab[Za+1]=cc.y,Ab[Za+2]=cc.z,Za+=3;else for(va=0;3>va;va++)Ab[Za]=Ya.x,
-Ab[Za+1]=Ya.y,Ab[Za+2]=Ya.z,Za+=3;G=0;for($=ua.length;G<$;G++)if(U=$a[ua[G]],cb=U.vertexNormals,Ya=U.normal,4===cb.length&&gb)for(va=0;4>va;va++)cc=cb[va],Ab[Za]=cc.x,Ab[Za+1]=cc.y,Ab[Za+2]=cc.z,Za+=3;else for(va=0;4>va;va++)Ab[Za]=Ya.x,Ab[Za+1]=Ya.y,Ab[Za+2]=Ya.z,Za+=3;k.bindBuffer(k.ARRAY_BUFFER,sa.__webglNormalBuffer);k.bufferData(k.ARRAY_BUFFER,Ab,Aa)}if(oc&&Vc&&sb){G=0;for($=ta.length;G<$;G++)if(Wa=ta[G],mb=Vc[Wa],void 0!==mb)for(va=0;3>va;va++)kc=mb[va],pc[Zb]=kc.u,pc[Zb+1]=kc.v,Zb+=2;G=0;for($=
-ua.length;G<$;G++)if(Wa=ua[G],mb=Vc[Wa],void 0!==mb)for(va=0;4>va;va++)kc=mb[va],pc[Zb]=kc.u,pc[Zb+1]=kc.v,Zb+=2;0<Zb&&(k.bindBuffer(k.ARRAY_BUFFER,sa.__webglUVBuffer),k.bufferData(k.ARRAY_BUFFER,pc,Aa))}if(oc&&Wc&&sb){G=0;for($=ta.length;G<$;G++)if(Wa=ta[G],ob=Wc[Wa],void 0!==ob)for(va=0;3>va;va++)lc=ob[va],qc[$b]=lc.u,qc[$b+1]=lc.v,$b+=2;G=0;for($=ua.length;G<$;G++)if(Wa=ua[G],ob=Wc[Wa],void 0!==ob)for(va=0;4>va;va++)lc=ob[va],qc[$b]=lc.u,qc[$b+1]=lc.v,$b+=2;0<$b&&(k.bindBuffer(k.ARRAY_BUFFER,sa.__webglUV2Buffer),
-k.bufferData(k.ARRAY_BUFFER,qc,Aa))}if(xc){G=0;for($=ta.length;G<$;G++)Xb[zb]=Ja,Xb[zb+1]=Ja+1,Xb[zb+2]=Ja+2,zb+=3,pb[db]=Ja,pb[db+1]=Ja+1,pb[db+2]=Ja,pb[db+3]=Ja+2,pb[db+4]=Ja+1,pb[db+5]=Ja+2,db+=6,Ja+=3;G=0;for($=ua.length;G<$;G++)Xb[zb]=Ja,Xb[zb+1]=Ja+1,Xb[zb+2]=Ja+3,Xb[zb+3]=Ja+1,Xb[zb+4]=Ja+2,Xb[zb+5]=Ja+3,zb+=6,pb[db]=Ja,pb[db+1]=Ja+1,pb[db+2]=Ja,pb[db+3]=Ja+3,pb[db+4]=Ja+1,pb[db+5]=Ja+2,pb[db+6]=Ja+2,pb[db+7]=Ja+3,db+=8,Ja+=4;k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,sa.__webglFaceBuffer);k.bufferData(k.ELEMENT_ARRAY_BUFFER,
-Xb,Aa);k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,sa.__webglLineBuffer);k.bufferData(k.ELEMENT_ARRAY_BUFFER,pb,Aa)}if(Uc){va=0;for(ac=Uc.length;va<ac;va++)if(w=Uc[va],w.__original.needsUpdate){y=0;if(1===w.size)if(void 0===w.boundTo||"vertices"===w.boundTo){G=0;for($=ta.length;G<$;G++)U=$a[ta[G]],w.array[y]=w.value[U.a],w.array[y+1]=w.value[U.b],w.array[y+2]=w.value[U.c],y+=3;G=0;for($=ua.length;G<$;G++)U=$a[ua[G]],w.array[y]=w.value[U.a],w.array[y+1]=w.value[U.b],w.array[y+2]=w.value[U.c],w.array[y+3]=
-w.value[U.d],y+=4}else{if("faces"===w.boundTo){G=0;for($=ta.length;G<$;G++)wa=w.value[ta[G]],w.array[y]=wa,w.array[y+1]=wa,w.array[y+2]=wa,y+=3;G=0;for($=ua.length;G<$;G++)wa=w.value[ua[G]],w.array[y]=wa,w.array[y+1]=wa,w.array[y+2]=wa,w.array[y+3]=wa,y+=4}}else if(2===w.size)if(void 0===w.boundTo||"vertices"===w.boundTo){G=0;for($=ta.length;G<$;G++)U=$a[ta[G]],W=w.value[U.a],X=w.value[U.b],Y=w.value[U.c],w.array[y]=W.x,w.array[y+1]=W.y,w.array[y+2]=X.x,w.array[y+3]=X.y,w.array[y+4]=Y.x,w.array[y+
-5]=Y.y,y+=6;G=0;for($=ua.length;G<$;G++)U=$a[ua[G]],W=w.value[U.a],X=w.value[U.b],Y=w.value[U.c],pa=w.value[U.d],w.array[y]=W.x,w.array[y+1]=W.y,w.array[y+2]=X.x,w.array[y+3]=X.y,w.array[y+4]=Y.x,w.array[y+5]=Y.y,w.array[y+6]=pa.x,w.array[y+7]=pa.y,y+=8}else{if("faces"===w.boundTo){G=0;for($=ta.length;G<$;G++)Y=X=W=wa=w.value[ta[G]],w.array[y]=W.x,w.array[y+1]=W.y,w.array[y+2]=X.x,w.array[y+3]=X.y,w.array[y+4]=Y.x,w.array[y+5]=Y.y,y+=6;G=0;for($=ua.length;G<$;G++)pa=Y=X=W=wa=w.value[ua[G]],w.array[y]=
-W.x,w.array[y+1]=W.y,w.array[y+2]=X.x,w.array[y+3]=X.y,w.array[y+4]=Y.x,w.array[y+5]=Y.y,w.array[y+6]=pa.x,w.array[y+7]=pa.y,y+=8}}else if(3===w.size){var fa;fa="c"===w.type?["r","g","b"]:["x","y","z"];if(void 0===w.boundTo||"vertices"===w.boundTo){G=0;for($=ta.length;G<$;G++)U=$a[ta[G]],W=w.value[U.a],X=w.value[U.b],Y=w.value[U.c],w.array[y]=W[fa[0]],w.array[y+1]=W[fa[1]],w.array[y+2]=W[fa[2]],w.array[y+3]=X[fa[0]],w.array[y+4]=X[fa[1]],w.array[y+5]=X[fa[2]],w.array[y+6]=Y[fa[0]],w.array[y+7]=Y[fa[1]],
-w.array[y+8]=Y[fa[2]],y+=9;G=0;for($=ua.length;G<$;G++)U=$a[ua[G]],W=w.value[U.a],X=w.value[U.b],Y=w.value[U.c],pa=w.value[U.d],w.array[y]=W[fa[0]],w.array[y+1]=W[fa[1]],w.array[y+2]=W[fa[2]],w.array[y+3]=X[fa[0]],w.array[y+4]=X[fa[1]],w.array[y+5]=X[fa[2]],w.array[y+6]=Y[fa[0]],w.array[y+7]=Y[fa[1]],w.array[y+8]=Y[fa[2]],w.array[y+9]=pa[fa[0]],w.array[y+10]=pa[fa[1]],w.array[y+11]=pa[fa[2]],y+=12}else if("faces"===w.boundTo){G=0;for($=ta.length;G<$;G++)Y=X=W=wa=w.value[ta[G]],w.array[y]=W[fa[0]],
-w.array[y+1]=W[fa[1]],w.array[y+2]=W[fa[2]],w.array[y+3]=X[fa[0]],w.array[y+4]=X[fa[1]],w.array[y+5]=X[fa[2]],w.array[y+6]=Y[fa[0]],w.array[y+7]=Y[fa[1]],w.array[y+8]=Y[fa[2]],y+=9;G=0;for($=ua.length;G<$;G++)pa=Y=X=W=wa=w.value[ua[G]],w.array[y]=W[fa[0]],w.array[y+1]=W[fa[1]],w.array[y+2]=W[fa[2]],w.array[y+3]=X[fa[0]],w.array[y+4]=X[fa[1]],w.array[y+5]=X[fa[2]],w.array[y+6]=Y[fa[0]],w.array[y+7]=Y[fa[1]],w.array[y+8]=Y[fa[2]],w.array[y+9]=pa[fa[0]],w.array[y+10]=pa[fa[1]],w.array[y+11]=pa[fa[2]],
-y+=12}else if("faceVertices"===w.boundTo){G=0;for($=ta.length;G<$;G++)wa=w.value[ta[G]],W=wa[0],X=wa[1],Y=wa[2],w.array[y]=W[fa[0]],w.array[y+1]=W[fa[1]],w.array[y+2]=W[fa[2]],w.array[y+3]=X[fa[0]],w.array[y+4]=X[fa[1]],w.array[y+5]=X[fa[2]],w.array[y+6]=Y[fa[0]],w.array[y+7]=Y[fa[1]],w.array[y+8]=Y[fa[2]],y+=9;G=0;for($=ua.length;G<$;G++)wa=w.value[ua[G]],W=wa[0],X=wa[1],Y=wa[2],pa=wa[3],w.array[y]=W[fa[0]],w.array[y+1]=W[fa[1]],w.array[y+2]=W[fa[2]],w.array[y+3]=X[fa[0]],w.array[y+4]=X[fa[1]],w.array[y+
-5]=X[fa[2]],w.array[y+6]=Y[fa[0]],w.array[y+7]=Y[fa[1]],w.array[y+8]=Y[fa[2]],w.array[y+9]=pa[fa[0]],w.array[y+10]=pa[fa[1]],w.array[y+11]=pa[fa[2]],y+=12}}else if(4===w.size)if(void 0===w.boundTo||"vertices"===w.boundTo){G=0;for($=ta.length;G<$;G++)U=$a[ta[G]],W=w.value[U.a],X=w.value[U.b],Y=w.value[U.c],w.array[y]=W.x,w.array[y+1]=W.y,w.array[y+2]=W.z,w.array[y+3]=W.w,w.array[y+4]=X.x,w.array[y+5]=X.y,w.array[y+6]=X.z,w.array[y+7]=X.w,w.array[y+8]=Y.x,w.array[y+9]=Y.y,w.array[y+10]=Y.z,w.array[y+
-11]=Y.w,y+=12;G=0;for($=ua.length;G<$;G++)U=$a[ua[G]],W=w.value[U.a],X=w.value[U.b],Y=w.value[U.c],pa=w.value[U.d],w.array[y]=W.x,w.array[y+1]=W.y,w.array[y+2]=W.z,w.array[y+3]=W.w,w.array[y+4]=X.x,w.array[y+5]=X.y,w.array[y+6]=X.z,w.array[y+7]=X.w,w.array[y+8]=Y.x,w.array[y+9]=Y.y,w.array[y+10]=Y.z,w.array[y+11]=Y.w,w.array[y+12]=pa.x,w.array[y+13]=pa.y,w.array[y+14]=pa.z,w.array[y+15]=pa.w,y+=16}else if("faces"===w.boundTo){G=0;for($=ta.length;G<$;G++)Y=X=W=wa=w.value[ta[G]],w.array[y]=W.x,w.array[y+
-1]=W.y,w.array[y+2]=W.z,w.array[y+3]=W.w,w.array[y+4]=X.x,w.array[y+5]=X.y,w.array[y+6]=X.z,w.array[y+7]=X.w,w.array[y+8]=Y.x,w.array[y+9]=Y.y,w.array[y+10]=Y.z,w.array[y+11]=Y.w,y+=12;G=0;for($=ua.length;G<$;G++)pa=Y=X=W=wa=w.value[ua[G]],w.array[y]=W.x,w.array[y+1]=W.y,w.array[y+2]=W.z,w.array[y+3]=W.w,w.array[y+4]=X.x,w.array[y+5]=X.y,w.array[y+6]=X.z,w.array[y+7]=X.w,w.array[y+8]=Y.x,w.array[y+9]=Y.y,w.array[y+10]=Y.z,w.array[y+11]=Y.w,w.array[y+12]=pa.x,w.array[y+13]=pa.y,w.array[y+14]=pa.z,
-w.array[y+15]=pa.w,y+=16}else if("faceVertices"===w.boundTo){G=0;for($=ta.length;G<$;G++)wa=w.value[ta[G]],W=wa[0],X=wa[1],Y=wa[2],w.array[y]=W.x,w.array[y+1]=W.y,w.array[y+2]=W.z,w.array[y+3]=W.w,w.array[y+4]=X.x,w.array[y+5]=X.y,w.array[y+6]=X.z,w.array[y+7]=X.w,w.array[y+8]=Y.x,w.array[y+9]=Y.y,w.array[y+10]=Y.z,w.array[y+11]=Y.w,y+=12;G=0;for($=ua.length;G<$;G++)wa=w.value[ua[G]],W=wa[0],X=wa[1],Y=wa[2],pa=wa[3],w.array[y]=W.x,w.array[y+1]=W.y,w.array[y+2]=W.z,w.array[y+3]=W.w,w.array[y+4]=X.x,
-w.array[y+5]=X.y,w.array[y+6]=X.z,w.array[y+7]=X.w,w.array[y+8]=Y.x,w.array[y+9]=Y.y,w.array[y+10]=Y.z,w.array[y+11]=Y.w,w.array[y+12]=pa.x,w.array[y+13]=pa.y,w.array[y+14]=pa.z,w.array[y+15]=pa.w,y+=16}k.bindBuffer(k.ARRAY_BUFFER,w.buffer);k.bufferData(k.ARRAY_BUFFER,w.array,Aa)}}vb&&(delete sa.__inittedArrays,delete sa.__colorArray,delete sa.__normalArray,delete sa.__tangentArray,delete sa.__uvArray,delete sa.__uv2Array,delete sa.__faceArray,delete sa.__vertexArray,delete sa.__lineArray,delete sa.__skinIndexArray,
-delete sa.__skinWeightArray)}}V.verticesNeedUpdate=!1;V.morphTargetsNeedUpdate=!1;V.elementsNeedUpdate=!1;V.uvsNeedUpdate=!1;V.normalsNeedUpdate=!1;V.colorsNeedUpdate=!1;V.tangentsNeedUpdate=!1;V.buffersNeedUpdate=!1;la.attributes&&x(la)}else if(ra instanceof THREE.Ribbon){la=e(ra,V);za=la.attributes&&D(la);if(V.verticesNeedUpdate||V.colorsNeedUpdate||V.normalsNeedUpdate||za){var Bb=V,Bc=k.DYNAMIC_DRAW,rc=void 0,sc=void 0,tc=void 0,Cc=void 0,xa=void 0,Dc=void 0,Ec=void 0,Fc=void 0,Zc=void 0,Ua=void 0,
-mc=void 0,Ca=void 0,kb=void 0,$c=Bb.vertices,ad=Bb.colors,bd=Bb.normals,id=$c.length,jd=ad.length,kd=bd.length,Gc=Bb.__vertexArray,Hc=Bb.__colorArray,Ic=Bb.__normalArray,ld=Bb.colorsNeedUpdate,md=Bb.normalsNeedUpdate,Xc=Bb.__webglCustomAttributesList;if(Bb.verticesNeedUpdate){for(rc=0;rc<id;rc++)Cc=$c[rc],xa=3*rc,Gc[xa]=Cc.x,Gc[xa+1]=Cc.y,Gc[xa+2]=Cc.z;k.bindBuffer(k.ARRAY_BUFFER,Bb.__webglVertexBuffer);k.bufferData(k.ARRAY_BUFFER,Gc,Bc)}if(ld){for(sc=0;sc<jd;sc++)Dc=ad[sc],xa=3*sc,Hc[xa]=Dc.r,Hc[xa+
-1]=Dc.g,Hc[xa+2]=Dc.b;k.bindBuffer(k.ARRAY_BUFFER,Bb.__webglColorBuffer);k.bufferData(k.ARRAY_BUFFER,Hc,Bc)}if(md){for(tc=0;tc<kd;tc++)Ec=bd[tc],xa=3*tc,Ic[xa]=Ec.x,Ic[xa+1]=Ec.y,Ic[xa+2]=Ec.z;k.bindBuffer(k.ARRAY_BUFFER,Bb.__webglNormalBuffer);k.bufferData(k.ARRAY_BUFFER,Ic,Bc)}if(Xc){Fc=0;for(Zc=Xc.length;Fc<Zc;Fc++)if(Ca=Xc[Fc],Ca.needsUpdate&&(void 0===Ca.boundTo||"vertices"===Ca.boundTo)){xa=0;mc=Ca.value.length;if(1===Ca.size)for(Ua=0;Ua<mc;Ua++)Ca.array[Ua]=Ca.value[Ua];else if(2===Ca.size)for(Ua=
-0;Ua<mc;Ua++)kb=Ca.value[Ua],Ca.array[xa]=kb.x,Ca.array[xa+1]=kb.y,xa+=2;else if(3===Ca.size)if("c"===Ca.type)for(Ua=0;Ua<mc;Ua++)kb=Ca.value[Ua],Ca.array[xa]=kb.r,Ca.array[xa+1]=kb.g,Ca.array[xa+2]=kb.b,xa+=3;else for(Ua=0;Ua<mc;Ua++)kb=Ca.value[Ua],Ca.array[xa]=kb.x,Ca.array[xa+1]=kb.y,Ca.array[xa+2]=kb.z,xa+=3;else if(4===Ca.size)for(Ua=0;Ua<mc;Ua++)kb=Ca.value[Ua],Ca.array[xa]=kb.x,Ca.array[xa+1]=kb.y,Ca.array[xa+2]=kb.z,Ca.array[xa+3]=kb.w,xa+=4;k.bindBuffer(k.ARRAY_BUFFER,Ca.buffer);k.bufferData(k.ARRAY_BUFFER,
-Ca.array,Bc)}}}V.verticesNeedUpdate=!1;V.colorsNeedUpdate=!1;V.normalsNeedUpdate=!1;la.attributes&&x(la)}else if(ra instanceof THREE.Line){la=e(ra,V);za=la.attributes&&D(la);if(V.verticesNeedUpdate||V.colorsNeedUpdate||V.lineDistancesNeedUpdate||za){var Cb=V,Jc=k.DYNAMIC_DRAW,uc=void 0,vc=void 0,wc=void 0,Kc=void 0,Ha=void 0,Lc=void 0,cd=Cb.vertices,dd=Cb.colors,ed=Cb.lineDistances,nd=cd.length,od=dd.length,pd=ed.length,Mc=Cb.__vertexArray,Nc=Cb.__colorArray,fd=Cb.__lineDistanceArray,qd=Cb.colorsNeedUpdate,
-rd=Cb.lineDistancesNeedUpdate,Yc=Cb.__webglCustomAttributesList,Oc=void 0,gd=void 0,Va=void 0,nc=void 0,lb=void 0,Da=void 0;if(Cb.verticesNeedUpdate){for(uc=0;uc<nd;uc++)Kc=cd[uc],Ha=3*uc,Mc[Ha]=Kc.x,Mc[Ha+1]=Kc.y,Mc[Ha+2]=Kc.z;k.bindBuffer(k.ARRAY_BUFFER,Cb.__webglVertexBuffer);k.bufferData(k.ARRAY_BUFFER,Mc,Jc)}if(qd){for(vc=0;vc<od;vc++)Lc=dd[vc],Ha=3*vc,Nc[Ha]=Lc.r,Nc[Ha+1]=Lc.g,Nc[Ha+2]=Lc.b;k.bindBuffer(k.ARRAY_BUFFER,Cb.__webglColorBuffer);k.bufferData(k.ARRAY_BUFFER,Nc,Jc)}if(rd){for(wc=0;wc<
-pd;wc++)fd[wc]=ed[wc];k.bindBuffer(k.ARRAY_BUFFER,Cb.__webglLineDistanceBuffer);k.bufferData(k.ARRAY_BUFFER,fd,Jc)}if(Yc){Oc=0;for(gd=Yc.length;Oc<gd;Oc++)if(Da=Yc[Oc],Da.needsUpdate&&(void 0===Da.boundTo||"vertices"===Da.boundTo)){Ha=0;nc=Da.value.length;if(1===Da.size)for(Va=0;Va<nc;Va++)Da.array[Va]=Da.value[Va];else if(2===Da.size)for(Va=0;Va<nc;Va++)lb=Da.value[Va],Da.array[Ha]=lb.x,Da.array[Ha+1]=lb.y,Ha+=2;else if(3===Da.size)if("c"===Da.type)for(Va=0;Va<nc;Va++)lb=Da.value[Va],Da.array[Ha]=
-lb.r,Da.array[Ha+1]=lb.g,Da.array[Ha+2]=lb.b,Ha+=3;else for(Va=0;Va<nc;Va++)lb=Da.value[Va],Da.array[Ha]=lb.x,Da.array[Ha+1]=lb.y,Da.array[Ha+2]=lb.z,Ha+=3;else if(4===Da.size)for(Va=0;Va<nc;Va++)lb=Da.value[Va],Da.array[Ha]=lb.x,Da.array[Ha+1]=lb.y,Da.array[Ha+2]=lb.z,Da.array[Ha+3]=lb.w,Ha+=4;k.bindBuffer(k.ARRAY_BUFFER,Da.buffer);k.bufferData(k.ARRAY_BUFFER,Da.array,Jc)}}}V.verticesNeedUpdate=!1;V.colorsNeedUpdate=!1;V.lineDistancesNeedUpdate=!1;la.attributes&&x(la)}else ra instanceof THREE.ParticleSystem&&
-(V instanceof THREE.BufferGeometry?((V.verticesNeedUpdate||V.colorsNeedUpdate)&&j(V,k.DYNAMIC_DRAW,!V.dynamic),V.verticesNeedUpdate=!1,V.colorsNeedUpdate=!1):(la=e(ra,V),za=la.attributes&&D(la),(V.verticesNeedUpdate||V.colorsNeedUpdate||ra.sortParticles||za)&&i(V,k.DYNAMIC_DRAW,ra),V.verticesNeedUpdate=!1,V.colorsNeedUpdate=!1,la.attributes&&x(la)))}};this.initMaterial=function(a,b,c,d){var e,f,g,h,i,j,l,n,m;a instanceof THREE.MeshDepthMaterial?m="depth":a instanceof THREE.MeshNormalMaterial?m="normal":
-a instanceof THREE.MeshBasicMaterial?m="basic":a instanceof THREE.MeshLambertMaterial?m="lambert":a instanceof THREE.MeshPhongMaterial?m="phong":a instanceof THREE.LineBasicMaterial?m="basic":a instanceof THREE.LineDashedMaterial?m="dashed":a instanceof THREE.ParticleBasicMaterial&&(m="particle_basic");if(m){var p=THREE.ShaderLib[m];a.uniforms=THREE.UniformsUtils.clone(p.uniforms);a.vertexShader=p.vertexShader;a.fragmentShader=p.fragmentShader}var q,r,s;e=q=r=s=p=0;for(f=b.length;e<f;e++)g=b[e],g.onlyShadow||
-(g instanceof THREE.DirectionalLight&&q++,g instanceof THREE.PointLight&&r++,g instanceof THREE.SpotLight&&s++,g instanceof THREE.HemisphereLight&&p++);e=q;f=r;g=s;h=p;p=q=0;for(s=b.length;p<s;p++)r=b[p],r.castShadow&&(r instanceof THREE.SpotLight&&q++,r instanceof THREE.DirectionalLight&&!r.shadowCascade&&q++);n=q;Ya&&d&&d.useVertexTexture?l=1024:(b=k.getParameter(k.MAX_VERTEX_UNIFORM_VECTORS),b=Math.floor((b-20)/4),void 0!==d&&d instanceof THREE.SkinnedMesh&&(b=Math.min(d.bones.length,b),b<d.bones.length&&
-console.warn("WebGLRenderer: too many bones - "+d.bones.length+", this GPU supports just "+b+" (try OpenGL instead of ANGLE)")),l=b);a:{r=a.fragmentShader;s=a.vertexShader;p=a.uniforms;b=a.attributes;q=a.defines;var c={map:!!a.map,envMap:!!a.envMap,lightMap:!!a.lightMap,bumpMap:!!a.bumpMap,normalMap:!!a.normalMap,specularMap:!!a.specularMap,vertexColors:a.vertexColors,fog:c,useFog:a.fog,fogExp:c instanceof THREE.FogExp2,sizeAttenuation:a.sizeAttenuation,skinning:a.skinning,maxBones:l,useVertexTexture:Ya&&
-d&&d.useVertexTexture,boneTextureWidth:d&&d.boneTextureWidth,boneTextureHeight:d&&d.boneTextureHeight,morphTargets:a.morphTargets,morphNormals:a.morphNormals,maxMorphTargets:this.maxMorphTargets,maxMorphNormals:this.maxMorphNormals,maxDirLights:e,maxPointLights:f,maxSpotLights:g,maxHemiLights:h,maxShadows:n,shadowMapEnabled:this.shadowMapEnabled&&d.receiveShadow,shadowMapSoft:this.shadowMapSoft,shadowMapDebug:this.shadowMapDebug,shadowMapCascade:this.shadowMapCascade,alphaTest:a.alphaTest,metal:a.metal,
-perPixel:a.perPixel,wrapAround:a.wrapAround,doubleSided:a.side===THREE.DoubleSide,flipSided:a.side===THREE.BackSide},t,u,v,d=[];m?d.push(m):(d.push(r),d.push(s));for(u in q)d.push(u),d.push(q[u]);for(t in c)d.push(t),d.push(c[t]);m=d.join();t=0;for(u=ca.length;t<u;t++)if(d=ca[t],d.code===m){d.usedTimes++;j=d.program;break a}t=[];for(v in q)u=q[v],!1!==u&&(u="#define "+v+" "+u,t.push(u));u=t.join("\n");v=k.createProgram();t=["precision "+R+" float;",u,ic?"#define VERTEX_TEXTURES":"",H.gammaInput?"#define GAMMA_INPUT":
-"",H.gammaOutput?"#define GAMMA_OUTPUT":"",H.physicallyBasedShading?"#define PHYSICALLY_BASED_SHADING":"","#define MAX_DIR_LIGHTS "+c.maxDirLights,"#define MAX_POINT_LIGHTS "+c.maxPointLights,"#define MAX_SPOT_LIGHTS "+c.maxSpotLights,"#define MAX_HEMI_LIGHTS "+c.maxHemiLights,"#define MAX_SHADOWS "+c.maxShadows,"#define MAX_BONES "+c.maxBones,c.map?"#define USE_MAP":"",c.envMap?"#define USE_ENVMAP":"",c.lightMap?"#define USE_LIGHTMAP":"",c.bumpMap?"#define USE_BUMPMAP":"",c.normalMap?"#define USE_NORMALMAP":
-"",c.specularMap?"#define USE_SPECULARMAP":"",c.vertexColors?"#define USE_COLOR":"",c.skinning?"#define USE_SKINNING":"",c.useVertexTexture?"#define BONE_TEXTURE":"",c.boneTextureWidth?"#define N_BONE_PIXEL_X "+c.boneTextureWidth.toFixed(1):"",c.boneTextureHeight?"#define N_BONE_PIXEL_Y "+c.boneTextureHeight.toFixed(1):"",c.morphTargets?"#define USE_MORPHTARGETS":"",c.morphNormals?"#define USE_MORPHNORMALS":"",c.perPixel?"#define PHONG_PER_PIXEL":"",c.wrapAround?"#define WRAP_AROUND":"",c.doubleSided?
-"#define DOUBLE_SIDED":"",c.flipSided?"#define FLIP_SIDED":"",c.shadowMapEnabled?"#define USE_SHADOWMAP":"",c.shadowMapSoft?"#define SHADOWMAP_SOFT":"",c.shadowMapDebug?"#define SHADOWMAP_DEBUG":"",c.shadowMapCascade?"#define SHADOWMAP_CASCADE":"",c.sizeAttenuation?"#define USE_SIZEATTENUATION":"","uniform mat4 modelMatrix;\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform mat4 viewMatrix;\nuniform mat3 normalMatrix;\nuniform vec3 cameraPosition;\nattribute vec3 position;\nattribute vec3 normal;\nattribute vec2 uv;\nattribute vec2 uv2;\n#ifdef USE_COLOR\nattribute vec3 color;\n#endif\n#ifdef USE_MORPHTARGETS\nattribute vec3 morphTarget0;\nattribute vec3 morphTarget1;\nattribute vec3 morphTarget2;\nattribute vec3 morphTarget3;\n#ifdef USE_MORPHNORMALS\nattribute vec3 morphNormal0;\nattribute vec3 morphNormal1;\nattribute vec3 morphNormal2;\nattribute vec3 morphNormal3;\n#else\nattribute vec3 morphTarget4;\nattribute vec3 morphTarget5;\nattribute vec3 morphTarget6;\nattribute vec3 morphTarget7;\n#endif\n#endif\n#ifdef USE_SKINNING\nattribute vec4 skinIndex;\nattribute vec4 skinWeight;\n#endif\n"].join("\n");
+function(a){if(a.__webglInit)if(a.__webglInit=!1,delete a._modelViewMatrix,delete a._normalMatrix,a instanceof THREE.Mesh)for(var c in a.geometry.geometryGroups){var d=a.geometry.geometryGroups[c];k.deleteBuffer(d.__webglVertexBuffer);k.deleteBuffer(d.__webglNormalBuffer);k.deleteBuffer(d.__webglTangentBuffer);k.deleteBuffer(d.__webglColorBuffer);k.deleteBuffer(d.__webglUVBuffer);k.deleteBuffer(d.__webglUV2Buffer);k.deleteBuffer(d.__webglSkinIndicesBuffer);k.deleteBuffer(d.__webglSkinWeightsBuffer);
+k.deleteBuffer(d.__webglFaceBuffer);k.deleteBuffer(d.__webglLineBuffer);var e=void 0,f=void 0;if(d.numMorphTargets){e=0;for(f=d.numMorphTargets;e<f;e++)k.deleteBuffer(d.__webglMorphTargetsBuffers[e])}if(d.numMorphNormals){e=0;for(f=d.numMorphNormals;e<f;e++)k.deleteBuffer(d.__webglMorphNormalsBuffers[e])}b(d);H.info.memory.geometries--}else a instanceof THREE.Ribbon?(a=a.geometry,k.deleteBuffer(a.__webglVertexBuffer),k.deleteBuffer(a.__webglColorBuffer),k.deleteBuffer(a.__webglNormalBuffer),b(a),
+H.info.memory.geometries--):a instanceof THREE.Line?(a=a.geometry,k.deleteBuffer(a.__webglVertexBuffer),k.deleteBuffer(a.__webglColorBuffer),k.deleteBuffer(a.__webglLineDistanceBuffer),b(a),H.info.memory.geometries--):a instanceof THREE.ParticleSystem&&(a=a.geometry,k.deleteBuffer(a.__webglVertexBuffer),k.deleteBuffer(a.__webglColorBuffer),b(a),H.info.memory.geometries--)};this.deallocateTexture=function(a){a.__webglInit&&(a.__webglInit=!1,k.deleteTexture(a.__webglTexture),H.info.memory.textures--)};
+this.deallocateRenderTarget=function(a){if(a&&a.__webglTexture)if(k.deleteTexture(a.__webglTexture),a instanceof THREE.WebGLRenderTargetCube)for(var b=0;6>b;b++)k.deleteFramebuffer(a.__webglFramebuffer[b]),k.deleteRenderbuffer(a.__webglRenderbuffer[b]);else k.deleteFramebuffer(a.__webglFramebuffer),k.deleteRenderbuffer(a.__webglRenderbuffer)};this.deallocateMaterial=function(a){var b=a.program;if(b){a.program=void 0;var c,d,e=!1,a=0;for(c=ca.length;a<c;a++)if(d=ca[a],d.program===b){d.usedTimes--;
+0===d.usedTimes&&(e=!0);break}if(e){e=[];a=0;for(c=ca.length;a<c;a++)d=ca[a],d.program!==b&&e.push(d);ca=e;k.deleteProgram(b);H.info.memory.programs--}}};this.updateShadowMap=function(a,b){Z=null;da=ba=mb=nb=Sa=-1;Db=!0;qa=za=-1;this.shadowMapPlugin.update(a,b)};this.renderBufferImmediate=function(a,b,c){a.hasPositions&&!a.__webglVertexBuffer&&(a.__webglVertexBuffer=k.createBuffer());a.hasNormals&&!a.__webglNormalBuffer&&(a.__webglNormalBuffer=k.createBuffer());a.hasUvs&&!a.__webglUvBuffer&&(a.__webglUvBuffer=
+k.createBuffer());a.hasColors&&!a.__webglColorBuffer&&(a.__webglColorBuffer=k.createBuffer());a.hasPositions&&(k.bindBuffer(k.ARRAY_BUFFER,a.__webglVertexBuffer),k.bufferData(k.ARRAY_BUFFER,a.positionArray,k.DYNAMIC_DRAW),k.enableVertexAttribArray(b.attributes.position),k.vertexAttribPointer(b.attributes.position,3,k.FLOAT,!1,0,0));if(a.hasNormals){k.bindBuffer(k.ARRAY_BUFFER,a.__webglNormalBuffer);if(c.shading===THREE.FlatShading){var d,e,f,g,h,i,j,l,n,m,p,q=3*a.count;for(p=0;p<q;p+=9)m=a.normalArray,
+d=m[p],e=m[p+1],f=m[p+2],g=m[p+3],i=m[p+4],l=m[p+5],h=m[p+6],j=m[p+7],n=m[p+8],d=(d+g+h)/3,e=(e+i+j)/3,f=(f+l+n)/3,m[p]=d,m[p+1]=e,m[p+2]=f,m[p+3]=d,m[p+4]=e,m[p+5]=f,m[p+6]=d,m[p+7]=e,m[p+8]=f}k.bufferData(k.ARRAY_BUFFER,a.normalArray,k.DYNAMIC_DRAW);k.enableVertexAttribArray(b.attributes.normal);k.vertexAttribPointer(b.attributes.normal,3,k.FLOAT,!1,0,0)}a.hasUvs&&c.map&&(k.bindBuffer(k.ARRAY_BUFFER,a.__webglUvBuffer),k.bufferData(k.ARRAY_BUFFER,a.uvArray,k.DYNAMIC_DRAW),k.enableVertexAttribArray(b.attributes.uv),
+k.vertexAttribPointer(b.attributes.uv,2,k.FLOAT,!1,0,0));a.hasColors&&c.vertexColors!==THREE.NoColors&&(k.bindBuffer(k.ARRAY_BUFFER,a.__webglColorBuffer),k.bufferData(k.ARRAY_BUFFER,a.colorArray,k.DYNAMIC_DRAW),k.enableVertexAttribArray(b.attributes.color),k.vertexAttribPointer(b.attributes.color,3,k.FLOAT,!1,0,0));k.drawArrays(k.TRIANGLES,0,a.count);a.count=0};this.renderBufferDirect=function(a,b,c,d,e,f){if(!1!==d.visible)if(c=A(a,b,c,d,f),a=c.attributes,b=!1,d=16777215*e.id+2*c.id+(d.wireframe?
+1:0),d!==ba&&(ba=d,b=!0),b&&m(),f instanceof THREE.Mesh)if(f=e.attributes.index){d=e.offsets;1<d.length&&(b=!0);for(var c=0,g=d.length;c<g;c++){var h=d[c].index;if(b){var i=e.attributes.position,j=i.itemSize;k.bindBuffer(k.ARRAY_BUFFER,i.buffer);l(a.position);k.vertexAttribPointer(a.position,j,k.FLOAT,!1,0,4*h*j);j=e.attributes.normal;if(0<=a.normal&&j){var n=j.itemSize;k.bindBuffer(k.ARRAY_BUFFER,j.buffer);l(a.normal);k.vertexAttribPointer(a.normal,n,k.FLOAT,!1,0,4*h*n)}j=e.attributes.uv;0<=a.uv&&
+j&&(n=j.itemSize,k.bindBuffer(k.ARRAY_BUFFER,j.buffer),l(a.uv),k.vertexAttribPointer(a.uv,n,k.FLOAT,!1,0,4*h*n));j=e.attributes.color;0<=a.color&&j&&(n=j.itemSize,k.bindBuffer(k.ARRAY_BUFFER,j.buffer),l(a.color),k.vertexAttribPointer(a.color,n,k.FLOAT,!1,0,4*h*n));j=e.attributes.tangent;0<=a.tangent&&j&&(n=j.itemSize,k.bindBuffer(k.ARRAY_BUFFER,j.buffer),l(a.tangent),k.vertexAttribPointer(a.tangent,n,k.FLOAT,!1,0,4*h*n));k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,f.buffer)}k.drawElements(k.TRIANGLES,d[c].count,
+k.UNSIGNED_SHORT,2*d[c].start);H.info.render.calls++;H.info.render.vertices+=d[c].count;H.info.render.faces+=d[c].count/3}}else b&&(i=e.attributes.position,j=i.itemSize,k.bindBuffer(k.ARRAY_BUFFER,i.buffer),l(a.position),k.vertexAttribPointer(a.position,j,k.FLOAT,!1,0,0),j=e.attributes.normal,0<=a.normal&&j&&(n=j.itemSize,k.bindBuffer(k.ARRAY_BUFFER,j.buffer),l(a.normal),k.vertexAttribPointer(a.normal,n,k.FLOAT,!1,0,0)),j=e.attributes.uv,0<=a.uv&&j&&(n=j.itemSize,k.bindBuffer(k.ARRAY_BUFFER,j.buffer),
+l(a.uv),k.vertexAttribPointer(a.uv,n,k.FLOAT,!1,0,0)),j=e.attributes.color,0<=a.color&&j&&(n=j.itemSize,k.bindBuffer(k.ARRAY_BUFFER,j.buffer),l(a.color),k.vertexAttribPointer(a.color,n,k.FLOAT,!1,0,0)),j=e.attributes.tangent,0<=a.tangent&&j&&(n=j.itemSize,k.bindBuffer(k.ARRAY_BUFFER,j.buffer),l(a.tangent),k.vertexAttribPointer(a.tangent,n,k.FLOAT,!1,0,0))),k.drawArrays(k.TRIANGLES,0,i.numItems/3),H.info.render.calls++,H.info.render.vertices+=i.numItems/3,H.info.render.faces+=i.numItems/3/3;else f instanceof
+THREE.ParticleSystem&&b&&(i=e.attributes.position,j=i.itemSize,k.bindBuffer(k.ARRAY_BUFFER,i.buffer),l(a.position),k.vertexAttribPointer(a.position,j,k.FLOAT,!1,0,0),j=e.attributes.color,0<=a.color&&j&&(n=j.itemSize,k.bindBuffer(k.ARRAY_BUFFER,j.buffer),l(a.color),k.vertexAttribPointer(a.color,n,k.FLOAT,!1,0,0)),k.drawArrays(k.POINTS,0,i.numItems/3),H.info.render.calls++,H.info.render.points+=i.numItems/3)};this.renderBuffer=function(a,b,c,d,e,f){if(!1!==d.visible){var g,h,c=A(a,b,c,d,f),b=c.attributes,
+a=!1,c=16777215*e.id+2*c.id+(d.wireframe?1:0);c!==ba&&(ba=c,a=!0);a&&m();if(!d.morphTargets&&0<=b.position)a&&(k.bindBuffer(k.ARRAY_BUFFER,e.__webglVertexBuffer),l(b.position),k.vertexAttribPointer(b.position,3,k.FLOAT,!1,0,0));else if(f.morphTargetBase){c=d.program.attributes;-1!==f.morphTargetBase?(k.bindBuffer(k.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[f.morphTargetBase]),l(c.position),k.vertexAttribPointer(c.position,3,k.FLOAT,!1,0,0)):0<=c.position&&(k.bindBuffer(k.ARRAY_BUFFER,e.__webglVertexBuffer),
+l(c.position),k.vertexAttribPointer(c.position,3,k.FLOAT,!1,0,0));if(f.morphTargetForcedOrder.length){var i=0;h=f.morphTargetForcedOrder;for(g=f.morphTargetInfluences;i<d.numSupportedMorphTargets&&i<h.length;)k.bindBuffer(k.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[h[i]]),l(c["morphTarget"+i]),k.vertexAttribPointer(c["morphTarget"+i],3,k.FLOAT,!1,0,0),d.morphNormals&&(k.bindBuffer(k.ARRAY_BUFFER,e.__webglMorphNormalsBuffers[h[i]]),l(c["morphNormal"+i]),k.vertexAttribPointer(c["morphNormal"+i],3,k.FLOAT,
+!1,0,0)),f.__webglMorphTargetInfluences[i]=g[h[i]],i++}else{h=[];g=f.morphTargetInfluences;var j,n=g.length;for(j=0;j<n;j++)i=g[j],0<i&&h.push([j,i]);h.length>d.numSupportedMorphTargets?(h.sort(p),h.length=d.numSupportedMorphTargets):h.length>d.numSupportedMorphNormals?h.sort(p):0===h.length&&h.push([0,0]);for(i=0;i<d.numSupportedMorphTargets;)h[i]?(j=h[i][0],k.bindBuffer(k.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[j]),l(c["morphTarget"+i]),k.vertexAttribPointer(c["morphTarget"+i],3,k.FLOAT,!1,0,
+0),d.morphNormals&&(k.bindBuffer(k.ARRAY_BUFFER,e.__webglMorphNormalsBuffers[j]),l(c["morphNormal"+i]),k.vertexAttribPointer(c["morphNormal"+i],3,k.FLOAT,!1,0,0)),f.__webglMorphTargetInfluences[i]=g[j]):(k.vertexAttribPointer(c["morphTarget"+i],3,k.FLOAT,!1,0,0),d.morphNormals&&k.vertexAttribPointer(c["morphNormal"+i],3,k.FLOAT,!1,0,0),f.__webglMorphTargetInfluences[i]=0),i++}null!==d.program.uniforms.morphTargetInfluences&&k.uniform1fv(d.program.uniforms.morphTargetInfluences,f.__webglMorphTargetInfluences)}if(a){if(e.__webglCustomAttributesList){g=
+0;for(h=e.__webglCustomAttributesList.length;g<h;g++)c=e.__webglCustomAttributesList[g],0<=b[c.buffer.belongsToAttribute]&&(k.bindBuffer(k.ARRAY_BUFFER,c.buffer),l(b[c.buffer.belongsToAttribute]),k.vertexAttribPointer(b[c.buffer.belongsToAttribute],c.size,k.FLOAT,!1,0,0))}0<=b.color&&(k.bindBuffer(k.ARRAY_BUFFER,e.__webglColorBuffer),l(b.color),k.vertexAttribPointer(b.color,3,k.FLOAT,!1,0,0));0<=b.normal&&(k.bindBuffer(k.ARRAY_BUFFER,e.__webglNormalBuffer),l(b.normal),k.vertexAttribPointer(b.normal,
+3,k.FLOAT,!1,0,0));0<=b.tangent&&(k.bindBuffer(k.ARRAY_BUFFER,e.__webglTangentBuffer),l(b.tangent),k.vertexAttribPointer(b.tangent,4,k.FLOAT,!1,0,0));0<=b.uv&&(k.bindBuffer(k.ARRAY_BUFFER,e.__webglUVBuffer),l(b.uv),k.vertexAttribPointer(b.uv,2,k.FLOAT,!1,0,0));0<=b.uv2&&(k.bindBuffer(k.ARRAY_BUFFER,e.__webglUV2Buffer),l(b.uv2),k.vertexAttribPointer(b.uv2,2,k.FLOAT,!1,0,0));d.skinning&&(0<=b.skinIndex&&0<=b.skinWeight)&&(k.bindBuffer(k.ARRAY_BUFFER,e.__webglSkinIndicesBuffer),l(b.skinIndex),k.vertexAttribPointer(b.skinIndex,
+4,k.FLOAT,!1,0,0),k.bindBuffer(k.ARRAY_BUFFER,e.__webglSkinWeightsBuffer),l(b.skinWeight),k.vertexAttribPointer(b.skinWeight,4,k.FLOAT,!1,0,0));0<=b.lineDistance&&(k.bindBuffer(k.ARRAY_BUFFER,e.__webglLineDistanceBuffer),l(b.lineDistance),k.vertexAttribPointer(b.lineDistance,1,k.FLOAT,!1,0,0))}f instanceof THREE.Mesh?(d.wireframe?(d=d.wireframeLinewidth,d!==ra&&(k.lineWidth(d),ra=d),a&&k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,e.__webglLineBuffer),k.drawElements(k.LINES,e.__webglLineCount,k.UNSIGNED_SHORT,
+0)):(a&&k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,e.__webglFaceBuffer),k.drawElements(k.TRIANGLES,e.__webglFaceCount,k.UNSIGNED_SHORT,0)),H.info.render.calls++,H.info.render.vertices+=e.__webglFaceCount,H.info.render.faces+=e.__webglFaceCount/3):f instanceof THREE.Line?(f=f.type===THREE.LineStrip?k.LINE_STRIP:k.LINES,d=d.linewidth,d!==ra&&(k.lineWidth(d),ra=d),k.drawArrays(f,0,e.__webglLineCount),H.info.render.calls++):f instanceof THREE.ParticleSystem?(k.drawArrays(k.POINTS,0,e.__webglParticleCount),H.info.render.calls++,
+H.info.render.points+=e.__webglParticleCount):f instanceof THREE.Ribbon&&(k.drawArrays(k.TRIANGLE_STRIP,0,e.__webglVertexCount),H.info.render.calls++)}};this.render=function(a,b,c,d){if(!1===b instanceof THREE.Camera)console.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.");else{var e,f,g,h,i=a.__lights,j=a.fog;da=-1;Db=!0;this.autoUpdateScene&&a.updateMatrixWorld();void 0===b.parent&&b.updateMatrixWorld();b._viewMatrixArray||(b._viewMatrixArray=new Float32Array(16));
+b._projectionMatrixArray||(b._projectionMatrixArray=new Float32Array(16));b.matrixWorldInverse.getInverse(b.matrixWorld);b.matrixWorldInverse.flattenToArray(b._viewMatrixArray);b.projectionMatrix.flattenToArray(b._projectionMatrixArray);Xa.multiply(b.projectionMatrix,b.matrixWorldInverse);wb.setFromMatrix(Xa);this.autoUpdateObjects&&this.initWebGLObjects(a);q(this.renderPluginsPre,a,b);H.info.render.calls=0;H.info.render.vertices=0;H.info.render.faces=0;H.info.render.points=0;this.setRenderTarget(c);
+(this.autoClear||d)&&this.clear(this.autoClearColor,this.autoClearDepth,this.autoClearStencil);h=a.__webglObjects;d=0;for(e=h.length;d<e;d++)if(f=h[d],g=f.object,f.render=!1,g.visible&&(!(g instanceof THREE.Mesh||g instanceof THREE.ParticleSystem)||!g.frustumCulled||wb.contains(g))){z(g,b);var l=f,m=l.buffer,p=void 0,s=p=void 0,s=l.object.material;if(s instanceof THREE.MeshFaceMaterial)p=m.materialIndex,0<=p&&(p=s.materials[p],p.transparent?(l.transparent=p,l.opaque=null):(l.opaque=p,l.transparent=
+null));else if(p=s)p.transparent?(l.transparent=p,l.opaque=null):(l.opaque=p,l.transparent=null);f.render=!0;!0===this.sortObjects&&(null!==g.renderDepth?f.z=g.renderDepth:(cb.copy(g.matrixWorld.getPosition()),Xa.multiplyVector3(cb),f.z=cb.z),f.id=g.id)}this.sortObjects&&h.sort(n);h=a.__webglObjectsImmediate;d=0;for(e=h.length;d<e;d++)f=h[d],g=f.object,g.visible&&(z(g,b),g=f.object.material,g.transparent?(f.transparent=g,f.opaque=null):(f.opaque=g,f.transparent=null));a.overrideMaterial?(d=a.overrideMaterial,
+this.setBlending(d.blending,d.blendEquation,d.blendSrc,d.blendDst),this.setDepthTest(d.depthTest),this.setDepthWrite(d.depthWrite),J(d.polygonOffset,d.polygonOffsetFactor,d.polygonOffsetUnits),r(a.__webglObjects,!1,"",b,i,j,!0,d),u(a.__webglObjectsImmediate,"",b,i,j,!1,d)):(d=null,this.setBlending(THREE.NormalBlending),r(a.__webglObjects,!0,"opaque",b,i,j,!1,d),u(a.__webglObjectsImmediate,"opaque",b,i,j,!1,d),r(a.__webglObjects,!1,"transparent",b,i,j,!0,d),u(a.__webglObjectsImmediate,"transparent",
+b,i,j,!0,d));q(this.renderPluginsPost,a,b);c&&(c.generateMipmaps&&c.minFilter!==THREE.NearestFilter&&c.minFilter!==THREE.LinearFilter)&&(c instanceof THREE.WebGLRenderTargetCube?(k.bindTexture(k.TEXTURE_CUBE_MAP,c.__webglTexture),k.generateMipmap(k.TEXTURE_CUBE_MAP),k.bindTexture(k.TEXTURE_CUBE_MAP,null)):(k.bindTexture(k.TEXTURE_2D,c.__webglTexture),k.generateMipmap(k.TEXTURE_2D),k.bindTexture(k.TEXTURE_2D,null)));this.setDepthTest(!0);this.setDepthWrite(!0)}};this.renderImmediateObject=function(a,
+b,c,d,e){var f=A(a,b,c,d,e);ba=-1;H.setMaterialFaces(d);e.immediateRenderCallback?e.immediateRenderCallback(f,k,wb):e.render(function(a){H.renderBufferImmediate(a,f,d)})};this.initWebGLObjects=function(a){a.__webglObjects||(a.__webglObjects=[],a.__webglObjectsImmediate=[],a.__webglSprites=[],a.__webglFlares=[]);for(;a.__objectsAdded.length;){var b=a.__objectsAdded[0],l=a,n=void 0,m=void 0,p=void 0,q=void 0;if(!b.__webglInit)if(b.__webglInit=!0,b._modelViewMatrix=new THREE.Matrix4,b._normalMatrix=
+new THREE.Matrix3,b instanceof THREE.Mesh)if(m=b.geometry,p=b.material,m instanceof THREE.Geometry){if(void 0===m.geometryGroups){var r=m,u=void 0,v=void 0,z=void 0,A=void 0,C=void 0,B=void 0,E=void 0,I={},J=r.morphTargets.length,L=r.morphNormals.length,Z=p instanceof THREE.MeshFaceMaterial;r.geometryGroups={};u=0;for(v=r.faces.length;u<v;u++)z=r.faces[u],A=Z?z.materialIndex:void 0,B=void 0!==A?A:-1,void 0===I[B]&&(I[B]={hash:B,counter:0}),E=I[B].hash+"_"+I[B].counter,void 0===r.geometryGroups[E]&&
+(r.geometryGroups[E]={faces3:[],faces4:[],materialIndex:A,vertices:0,numMorphTargets:J,numMorphNormals:L}),C=z instanceof THREE.Face3?3:4,65535<r.geometryGroups[E].vertices+C&&(I[B].counter+=1,E=I[B].hash+"_"+I[B].counter,void 0===r.geometryGroups[E]&&(r.geometryGroups[E]={faces3:[],faces4:[],materialIndex:A,vertices:0,numMorphTargets:J,numMorphNormals:L})),z instanceof THREE.Face3?r.geometryGroups[E].faces3.push(u):r.geometryGroups[E].faces4.push(u),r.geometryGroups[E].vertices+=C;r.geometryGroupsList=
+[];var P=void 0;for(P in r.geometryGroups)r.geometryGroups[P].id=eb++,r.geometryGroupsList.push(r.geometryGroups[P])}for(n in m.geometryGroups)if(q=m.geometryGroups[n],!q.__webglVertexBuffer){var K=q;K.__webglVertexBuffer=k.createBuffer();K.__webglNormalBuffer=k.createBuffer();K.__webglTangentBuffer=k.createBuffer();K.__webglColorBuffer=k.createBuffer();K.__webglUVBuffer=k.createBuffer();K.__webglUV2Buffer=k.createBuffer();K.__webglSkinIndicesBuffer=k.createBuffer();K.__webglSkinWeightsBuffer=k.createBuffer();
+K.__webglFaceBuffer=k.createBuffer();K.__webglLineBuffer=k.createBuffer();var M=void 0,ca=void 0;if(K.numMorphTargets){K.__webglMorphTargetsBuffers=[];M=0;for(ca=K.numMorphTargets;M<ca;M++)K.__webglMorphTargetsBuffers.push(k.createBuffer())}if(K.numMorphNormals){K.__webglMorphNormalsBuffers=[];M=0;for(ca=K.numMorphNormals;M<ca;M++)K.__webglMorphNormalsBuffers.push(k.createBuffer())}H.info.memory.geometries++;d(q,b);m.verticesNeedUpdate=!0;m.morphTargetsNeedUpdate=!0;m.elementsNeedUpdate=!0;m.uvsNeedUpdate=
+!0;m.normalsNeedUpdate=!0;m.tangentsNeedUpdate=!0;m.colorsNeedUpdate=!0}}else m instanceof THREE.BufferGeometry&&h(m);else if(b instanceof THREE.Ribbon){if(m=b.geometry,!m.__webglVertexBuffer){var N=m;N.__webglVertexBuffer=k.createBuffer();N.__webglColorBuffer=k.createBuffer();N.__webglNormalBuffer=k.createBuffer();H.info.memory.geometries++;var S=m,ba=b,O=S.vertices.length;S.__vertexArray=new Float32Array(3*O);S.__colorArray=new Float32Array(3*O);S.__normalArray=new Float32Array(3*O);S.__webglVertexCount=
+O;c(S,ba);m.verticesNeedUpdate=!0;m.colorsNeedUpdate=!0;m.normalsNeedUpdate=!0}}else if(b instanceof THREE.Line){if(m=b.geometry,!m.__webglVertexBuffer){var Q=m;Q.__webglVertexBuffer=k.createBuffer();Q.__webglColorBuffer=k.createBuffer();Q.__webglLineDistanceBuffer=k.createBuffer();H.info.memory.geometries++;var R=m,ia=b,T=R.vertices.length;R.__vertexArray=new Float32Array(3*T);R.__colorArray=new Float32Array(3*T);R.__lineDistanceArray=new Float32Array(1*T);R.__webglLineCount=T;c(R,ia);m.verticesNeedUpdate=
+!0;m.colorsNeedUpdate=!0;m.lineDistancesNeedUpdate=!0}}else if(b instanceof THREE.ParticleSystem&&(m=b.geometry,!m.__webglVertexBuffer))if(m instanceof THREE.Geometry){var da=m;da.__webglVertexBuffer=k.createBuffer();da.__webglColorBuffer=k.createBuffer();H.info.memory.geometries++;var aa=m,ga=b,ja=aa.vertices.length;aa.__vertexArray=new Float32Array(3*ja);aa.__colorArray=new Float32Array(3*ja);aa.__sortArray=[];aa.__webglParticleCount=ja;c(aa,ga);m.verticesNeedUpdate=!0;m.colorsNeedUpdate=!0}else m instanceof
+THREE.BufferGeometry&&h(m);if(!b.__webglActive){if(b instanceof THREE.Mesh)if(m=b.geometry,m instanceof THREE.BufferGeometry)s(l.__webglObjects,m,b);else for(n in m.geometryGroups)q=m.geometryGroups[n],s(l.__webglObjects,q,b);else b instanceof THREE.Ribbon||b instanceof THREE.Line||b instanceof THREE.ParticleSystem?(m=b.geometry,s(l.__webglObjects,m,b)):b instanceof THREE.ImmediateRenderObject||b.immediateRenderCallback?l.__webglObjectsImmediate.push({object:b,opaque:null,transparent:null}):b instanceof
+THREE.Sprite?l.__webglSprites.push(b):b instanceof THREE.LensFlare&&l.__webglFlares.push(b);b.__webglActive=!0}a.__objectsAdded.splice(0,1)}for(;a.__objectsRemoved.length;){var oa=a.__objectsRemoved[0],qa=a;oa instanceof THREE.Mesh||oa instanceof THREE.ParticleSystem||oa instanceof THREE.Ribbon||oa instanceof THREE.Line?t(qa.__webglObjects,oa):oa instanceof THREE.Sprite?F(qa.__webglSprites,oa):oa instanceof THREE.LensFlare?F(qa.__webglFlares,oa):(oa instanceof THREE.ImmediateRenderObject||oa.immediateRenderCallback)&&
+t(qa.__webglObjectsImmediate,oa);oa.__webglActive=!1;a.__objectsRemoved.splice(0,1)}for(var Ia=0,Ma=a.__webglObjects.length;Ia<Ma;Ia++){var ra=a.__webglObjects[Ia].object,V=ra.geometry,Ba=void 0,za=void 0,la=void 0;if(ra instanceof THREE.Mesh)if(V instanceof THREE.BufferGeometry)(V.verticesNeedUpdate||V.elementsNeedUpdate||V.uvsNeedUpdate||V.normalsNeedUpdate||V.colorsNeedUpdate||V.tangentsNeedUpdate)&&j(V,k.DYNAMIC_DRAW,!V.dynamic),V.verticesNeedUpdate=!1,V.elementsNeedUpdate=!1,V.uvsNeedUpdate=
+!1,V.normalsNeedUpdate=!1,V.colorsNeedUpdate=!1,V.tangentsNeedUpdate=!1;else{for(var Sa=0,Ta=V.geometryGroupsList.length;Sa<Ta;Sa++)if(Ba=V.geometryGroupsList[Sa],la=e(ra,Ba),V.buffersNeedUpdate&&d(Ba,ra),za=la.attributes&&D(la),V.verticesNeedUpdate||V.morphTargetsNeedUpdate||V.elementsNeedUpdate||V.uvsNeedUpdate||V.normalsNeedUpdate||V.colorsNeedUpdate||V.tangentsNeedUpdate||za){var sa=Ba,Xa=ra,Aa=k.DYNAMIC_DRAW,vb=!V.dynamic,fb=la;if(sa.__inittedArrays){var qb=f(fb),nb=fb.vertexColors?fb.vertexColors:
+!1,sb=g(fb),gb=qb===THREE.SmoothShading,G=void 0,$=void 0,Wa=void 0,U=void 0,cb=void 0,Ya=void 0,Hb=void 0,rb=void 0,ab=void 0,mb=void 0,ob=void 0,W=void 0,X=void 0,Y=void 0,pa=void 0,Ib=void 0,Jb=void 0,Kb=void 0,tb=void 0,Lb=void 0,Mb=void 0,Nb=void 0,ub=void 0,Ob=void 0,Pb=void 0,Qb=void 0,wb=void 0,Rb=void 0,Sb=void 0,Tb=void 0,Db=void 0,Ub=void 0,Vb=void 0,Wb=void 0,Eb=void 0,va=void 0,ac=void 0,cc=void 0,kc=void 0,lc=void 0,Pa=void 0,ic=void 0,Na=void 0,Oa=void 0,dc=void 0,Yb=void 0,Ja=0,La=
+0,Zb=0,$b=0,zb=0,Za=0,ya=0,db=0,Ka=0,ha=0,ka=0,y=0,wa=void 0,Qa=sa.__vertexArray,pc=sa.__uvArray,qc=sa.__uv2Array,Ab=sa.__normalArray,Ea=sa.__tangentArray,Ra=sa.__colorArray,Fa=sa.__skinIndexArray,Ga=sa.__skinWeightArray,Sc=sa.__morphTargetsArrays,Tc=sa.__morphNormalsArrays,Uc=sa.__webglCustomAttributesList,w=void 0,Xb=sa.__faceArray,pb=sa.__lineArray,jb=Xa.geometry,xc=jb.elementsNeedUpdate,oc=jb.uvsNeedUpdate,yc=jb.normalsNeedUpdate,Pc=jb.tangentsNeedUpdate,Qc=jb.colorsNeedUpdate,hd=jb.morphTargetsNeedUpdate,
+gc=jb.vertices,ta=sa.faces3,ua=sa.faces4,$a=jb.faces,Vc=jb.faceVertexUvs[0],Wc=jb.faceVertexUvs[1],hc=jb.skinIndices,ec=jb.skinWeights,fc=jb.morphTargets,Ac=jb.morphNormals;if(jb.verticesNeedUpdate){G=0;for($=ta.length;G<$;G++)U=$a[ta[G]],W=gc[U.a],X=gc[U.b],Y=gc[U.c],Qa[La]=W.x,Qa[La+1]=W.y,Qa[La+2]=W.z,Qa[La+3]=X.x,Qa[La+4]=X.y,Qa[La+5]=X.z,Qa[La+6]=Y.x,Qa[La+7]=Y.y,Qa[La+8]=Y.z,La+=9;G=0;for($=ua.length;G<$;G++)U=$a[ua[G]],W=gc[U.a],X=gc[U.b],Y=gc[U.c],pa=gc[U.d],Qa[La]=W.x,Qa[La+1]=W.y,Qa[La+
+2]=W.z,Qa[La+3]=X.x,Qa[La+4]=X.y,Qa[La+5]=X.z,Qa[La+6]=Y.x,Qa[La+7]=Y.y,Qa[La+8]=Y.z,Qa[La+9]=pa.x,Qa[La+10]=pa.y,Qa[La+11]=pa.z,La+=12;k.bindBuffer(k.ARRAY_BUFFER,sa.__webglVertexBuffer);k.bufferData(k.ARRAY_BUFFER,Qa,Aa)}if(hd){Pa=0;for(ic=fc.length;Pa<ic;Pa++){G=ka=0;for($=ta.length;G<$;G++)dc=ta[G],U=$a[dc],W=fc[Pa].vertices[U.a],X=fc[Pa].vertices[U.b],Y=fc[Pa].vertices[U.c],Na=Sc[Pa],Na[ka]=W.x,Na[ka+1]=W.y,Na[ka+2]=W.z,Na[ka+3]=X.x,Na[ka+4]=X.y,Na[ka+5]=X.z,Na[ka+6]=Y.x,Na[ka+7]=Y.y,Na[ka+8]=
+Y.z,fb.morphNormals&&(gb?(Yb=Ac[Pa].vertexNormals[dc],Lb=Yb.a,Mb=Yb.b,Nb=Yb.c):Nb=Mb=Lb=Ac[Pa].faceNormals[dc],Oa=Tc[Pa],Oa[ka]=Lb.x,Oa[ka+1]=Lb.y,Oa[ka+2]=Lb.z,Oa[ka+3]=Mb.x,Oa[ka+4]=Mb.y,Oa[ka+5]=Mb.z,Oa[ka+6]=Nb.x,Oa[ka+7]=Nb.y,Oa[ka+8]=Nb.z),ka+=9;G=0;for($=ua.length;G<$;G++)dc=ua[G],U=$a[dc],W=fc[Pa].vertices[U.a],X=fc[Pa].vertices[U.b],Y=fc[Pa].vertices[U.c],pa=fc[Pa].vertices[U.d],Na=Sc[Pa],Na[ka]=W.x,Na[ka+1]=W.y,Na[ka+2]=W.z,Na[ka+3]=X.x,Na[ka+4]=X.y,Na[ka+5]=X.z,Na[ka+6]=Y.x,Na[ka+7]=Y.y,
+Na[ka+8]=Y.z,Na[ka+9]=pa.x,Na[ka+10]=pa.y,Na[ka+11]=pa.z,fb.morphNormals&&(gb?(Yb=Ac[Pa].vertexNormals[dc],Lb=Yb.a,Mb=Yb.b,Nb=Yb.c,ub=Yb.d):ub=Nb=Mb=Lb=Ac[Pa].faceNormals[dc],Oa=Tc[Pa],Oa[ka]=Lb.x,Oa[ka+1]=Lb.y,Oa[ka+2]=Lb.z,Oa[ka+3]=Mb.x,Oa[ka+4]=Mb.y,Oa[ka+5]=Mb.z,Oa[ka+6]=Nb.x,Oa[ka+7]=Nb.y,Oa[ka+8]=Nb.z,Oa[ka+9]=ub.x,Oa[ka+10]=ub.y,Oa[ka+11]=ub.z),ka+=12;k.bindBuffer(k.ARRAY_BUFFER,sa.__webglMorphTargetsBuffers[Pa]);k.bufferData(k.ARRAY_BUFFER,Sc[Pa],Aa);fb.morphNormals&&(k.bindBuffer(k.ARRAY_BUFFER,
+sa.__webglMorphNormalsBuffers[Pa]),k.bufferData(k.ARRAY_BUFFER,Tc[Pa],Aa))}}if(ec.length){G=0;for($=ta.length;G<$;G++)U=$a[ta[G]],Rb=ec[U.a],Sb=ec[U.b],Tb=ec[U.c],Ga[ha]=Rb.x,Ga[ha+1]=Rb.y,Ga[ha+2]=Rb.z,Ga[ha+3]=Rb.w,Ga[ha+4]=Sb.x,Ga[ha+5]=Sb.y,Ga[ha+6]=Sb.z,Ga[ha+7]=Sb.w,Ga[ha+8]=Tb.x,Ga[ha+9]=Tb.y,Ga[ha+10]=Tb.z,Ga[ha+11]=Tb.w,Ub=hc[U.a],Vb=hc[U.b],Wb=hc[U.c],Fa[ha]=Ub.x,Fa[ha+1]=Ub.y,Fa[ha+2]=Ub.z,Fa[ha+3]=Ub.w,Fa[ha+4]=Vb.x,Fa[ha+5]=Vb.y,Fa[ha+6]=Vb.z,Fa[ha+7]=Vb.w,Fa[ha+8]=Wb.x,Fa[ha+9]=Wb.y,
+Fa[ha+10]=Wb.z,Fa[ha+11]=Wb.w,ha+=12;G=0;for($=ua.length;G<$;G++)U=$a[ua[G]],Rb=ec[U.a],Sb=ec[U.b],Tb=ec[U.c],Db=ec[U.d],Ga[ha]=Rb.x,Ga[ha+1]=Rb.y,Ga[ha+2]=Rb.z,Ga[ha+3]=Rb.w,Ga[ha+4]=Sb.x,Ga[ha+5]=Sb.y,Ga[ha+6]=Sb.z,Ga[ha+7]=Sb.w,Ga[ha+8]=Tb.x,Ga[ha+9]=Tb.y,Ga[ha+10]=Tb.z,Ga[ha+11]=Tb.w,Ga[ha+12]=Db.x,Ga[ha+13]=Db.y,Ga[ha+14]=Db.z,Ga[ha+15]=Db.w,Ub=hc[U.a],Vb=hc[U.b],Wb=hc[U.c],Eb=hc[U.d],Fa[ha]=Ub.x,Fa[ha+1]=Ub.y,Fa[ha+2]=Ub.z,Fa[ha+3]=Ub.w,Fa[ha+4]=Vb.x,Fa[ha+5]=Vb.y,Fa[ha+6]=Vb.z,Fa[ha+7]=Vb.w,
+Fa[ha+8]=Wb.x,Fa[ha+9]=Wb.y,Fa[ha+10]=Wb.z,Fa[ha+11]=Wb.w,Fa[ha+12]=Eb.x,Fa[ha+13]=Eb.y,Fa[ha+14]=Eb.z,Fa[ha+15]=Eb.w,ha+=16;0<ha&&(k.bindBuffer(k.ARRAY_BUFFER,sa.__webglSkinIndicesBuffer),k.bufferData(k.ARRAY_BUFFER,Fa,Aa),k.bindBuffer(k.ARRAY_BUFFER,sa.__webglSkinWeightsBuffer),k.bufferData(k.ARRAY_BUFFER,Ga,Aa))}if(Qc&&nb){G=0;for($=ta.length;G<$;G++)U=$a[ta[G]],Hb=U.vertexColors,rb=U.color,3===Hb.length&&nb===THREE.VertexColors?(Ob=Hb[0],Pb=Hb[1],Qb=Hb[2]):Qb=Pb=Ob=rb,Ra[Ka]=Ob.r,Ra[Ka+1]=Ob.g,
+Ra[Ka+2]=Ob.b,Ra[Ka+3]=Pb.r,Ra[Ka+4]=Pb.g,Ra[Ka+5]=Pb.b,Ra[Ka+6]=Qb.r,Ra[Ka+7]=Qb.g,Ra[Ka+8]=Qb.b,Ka+=9;G=0;for($=ua.length;G<$;G++)U=$a[ua[G]],Hb=U.vertexColors,rb=U.color,4===Hb.length&&nb===THREE.VertexColors?(Ob=Hb[0],Pb=Hb[1],Qb=Hb[2],wb=Hb[3]):wb=Qb=Pb=Ob=rb,Ra[Ka]=Ob.r,Ra[Ka+1]=Ob.g,Ra[Ka+2]=Ob.b,Ra[Ka+3]=Pb.r,Ra[Ka+4]=Pb.g,Ra[Ka+5]=Pb.b,Ra[Ka+6]=Qb.r,Ra[Ka+7]=Qb.g,Ra[Ka+8]=Qb.b,Ra[Ka+9]=wb.r,Ra[Ka+10]=wb.g,Ra[Ka+11]=wb.b,Ka+=12;0<Ka&&(k.bindBuffer(k.ARRAY_BUFFER,sa.__webglColorBuffer),k.bufferData(k.ARRAY_BUFFER,
+Ra,Aa))}if(Pc&&jb.hasTangents){G=0;for($=ta.length;G<$;G++)U=$a[ta[G]],ab=U.vertexTangents,Ib=ab[0],Jb=ab[1],Kb=ab[2],Ea[ya]=Ib.x,Ea[ya+1]=Ib.y,Ea[ya+2]=Ib.z,Ea[ya+3]=Ib.w,Ea[ya+4]=Jb.x,Ea[ya+5]=Jb.y,Ea[ya+6]=Jb.z,Ea[ya+7]=Jb.w,Ea[ya+8]=Kb.x,Ea[ya+9]=Kb.y,Ea[ya+10]=Kb.z,Ea[ya+11]=Kb.w,ya+=12;G=0;for($=ua.length;G<$;G++)U=$a[ua[G]],ab=U.vertexTangents,Ib=ab[0],Jb=ab[1],Kb=ab[2],tb=ab[3],Ea[ya]=Ib.x,Ea[ya+1]=Ib.y,Ea[ya+2]=Ib.z,Ea[ya+3]=Ib.w,Ea[ya+4]=Jb.x,Ea[ya+5]=Jb.y,Ea[ya+6]=Jb.z,Ea[ya+7]=Jb.w,Ea[ya+
+8]=Kb.x,Ea[ya+9]=Kb.y,Ea[ya+10]=Kb.z,Ea[ya+11]=Kb.w,Ea[ya+12]=tb.x,Ea[ya+13]=tb.y,Ea[ya+14]=tb.z,Ea[ya+15]=tb.w,ya+=16;k.bindBuffer(k.ARRAY_BUFFER,sa.__webglTangentBuffer);k.bufferData(k.ARRAY_BUFFER,Ea,Aa)}if(yc&&qb){G=0;for($=ta.length;G<$;G++)if(U=$a[ta[G]],cb=U.vertexNormals,Ya=U.normal,3===cb.length&&gb)for(va=0;3>va;va++)cc=cb[va],Ab[Za]=cc.x,Ab[Za+1]=cc.y,Ab[Za+2]=cc.z,Za+=3;else for(va=0;3>va;va++)Ab[Za]=Ya.x,Ab[Za+1]=Ya.y,Ab[Za+2]=Ya.z,Za+=3;G=0;for($=ua.length;G<$;G++)if(U=$a[ua[G]],cb=
+U.vertexNormals,Ya=U.normal,4===cb.length&&gb)for(va=0;4>va;va++)cc=cb[va],Ab[Za]=cc.x,Ab[Za+1]=cc.y,Ab[Za+2]=cc.z,Za+=3;else for(va=0;4>va;va++)Ab[Za]=Ya.x,Ab[Za+1]=Ya.y,Ab[Za+2]=Ya.z,Za+=3;k.bindBuffer(k.ARRAY_BUFFER,sa.__webglNormalBuffer);k.bufferData(k.ARRAY_BUFFER,Ab,Aa)}if(oc&&Vc&&sb){G=0;for($=ta.length;G<$;G++)if(Wa=ta[G],mb=Vc[Wa],void 0!==mb)for(va=0;3>va;va++)kc=mb[va],pc[Zb]=kc.u,pc[Zb+1]=kc.v,Zb+=2;G=0;for($=ua.length;G<$;G++)if(Wa=ua[G],mb=Vc[Wa],void 0!==mb)for(va=0;4>va;va++)kc=mb[va],
+pc[Zb]=kc.u,pc[Zb+1]=kc.v,Zb+=2;0<Zb&&(k.bindBuffer(k.ARRAY_BUFFER,sa.__webglUVBuffer),k.bufferData(k.ARRAY_BUFFER,pc,Aa))}if(oc&&Wc&&sb){G=0;for($=ta.length;G<$;G++)if(Wa=ta[G],ob=Wc[Wa],void 0!==ob)for(va=0;3>va;va++)lc=ob[va],qc[$b]=lc.u,qc[$b+1]=lc.v,$b+=2;G=0;for($=ua.length;G<$;G++)if(Wa=ua[G],ob=Wc[Wa],void 0!==ob)for(va=0;4>va;va++)lc=ob[va],qc[$b]=lc.u,qc[$b+1]=lc.v,$b+=2;0<$b&&(k.bindBuffer(k.ARRAY_BUFFER,sa.__webglUV2Buffer),k.bufferData(k.ARRAY_BUFFER,qc,Aa))}if(xc){G=0;for($=ta.length;G<
+$;G++)Xb[zb]=Ja,Xb[zb+1]=Ja+1,Xb[zb+2]=Ja+2,zb+=3,pb[db]=Ja,pb[db+1]=Ja+1,pb[db+2]=Ja,pb[db+3]=Ja+2,pb[db+4]=Ja+1,pb[db+5]=Ja+2,db+=6,Ja+=3;G=0;for($=ua.length;G<$;G++)Xb[zb]=Ja,Xb[zb+1]=Ja+1,Xb[zb+2]=Ja+3,Xb[zb+3]=Ja+1,Xb[zb+4]=Ja+2,Xb[zb+5]=Ja+3,zb+=6,pb[db]=Ja,pb[db+1]=Ja+1,pb[db+2]=Ja,pb[db+3]=Ja+3,pb[db+4]=Ja+1,pb[db+5]=Ja+2,pb[db+6]=Ja+2,pb[db+7]=Ja+3,db+=8,Ja+=4;k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,sa.__webglFaceBuffer);k.bufferData(k.ELEMENT_ARRAY_BUFFER,Xb,Aa);k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,
+sa.__webglLineBuffer);k.bufferData(k.ELEMENT_ARRAY_BUFFER,pb,Aa)}if(Uc){va=0;for(ac=Uc.length;va<ac;va++)if(w=Uc[va],w.__original.needsUpdate){y=0;if(1===w.size)if(void 0===w.boundTo||"vertices"===w.boundTo){G=0;for($=ta.length;G<$;G++)U=$a[ta[G]],w.array[y]=w.value[U.a],w.array[y+1]=w.value[U.b],w.array[y+2]=w.value[U.c],y+=3;G=0;for($=ua.length;G<$;G++)U=$a[ua[G]],w.array[y]=w.value[U.a],w.array[y+1]=w.value[U.b],w.array[y+2]=w.value[U.c],w.array[y+3]=w.value[U.d],y+=4}else{if("faces"===w.boundTo){G=
+0;for($=ta.length;G<$;G++)wa=w.value[ta[G]],w.array[y]=wa,w.array[y+1]=wa,w.array[y+2]=wa,y+=3;G=0;for($=ua.length;G<$;G++)wa=w.value[ua[G]],w.array[y]=wa,w.array[y+1]=wa,w.array[y+2]=wa,w.array[y+3]=wa,y+=4}}else if(2===w.size)if(void 0===w.boundTo||"vertices"===w.boundTo){G=0;for($=ta.length;G<$;G++)U=$a[ta[G]],W=w.value[U.a],X=w.value[U.b],Y=w.value[U.c],w.array[y]=W.x,w.array[y+1]=W.y,w.array[y+2]=X.x,w.array[y+3]=X.y,w.array[y+4]=Y.x,w.array[y+5]=Y.y,y+=6;G=0;for($=ua.length;G<$;G++)U=$a[ua[G]],
+W=w.value[U.a],X=w.value[U.b],Y=w.value[U.c],pa=w.value[U.d],w.array[y]=W.x,w.array[y+1]=W.y,w.array[y+2]=X.x,w.array[y+3]=X.y,w.array[y+4]=Y.x,w.array[y+5]=Y.y,w.array[y+6]=pa.x,w.array[y+7]=pa.y,y+=8}else{if("faces"===w.boundTo){G=0;for($=ta.length;G<$;G++)Y=X=W=wa=w.value[ta[G]],w.array[y]=W.x,w.array[y+1]=W.y,w.array[y+2]=X.x,w.array[y+3]=X.y,w.array[y+4]=Y.x,w.array[y+5]=Y.y,y+=6;G=0;for($=ua.length;G<$;G++)pa=Y=X=W=wa=w.value[ua[G]],w.array[y]=W.x,w.array[y+1]=W.y,w.array[y+2]=X.x,w.array[y+
+3]=X.y,w.array[y+4]=Y.x,w.array[y+5]=Y.y,w.array[y+6]=pa.x,w.array[y+7]=pa.y,y+=8}}else if(3===w.size){var fa;fa="c"===w.type?["r","g","b"]:["x","y","z"];if(void 0===w.boundTo||"vertices"===w.boundTo){G=0;for($=ta.length;G<$;G++)U=$a[ta[G]],W=w.value[U.a],X=w.value[U.b],Y=w.value[U.c],w.array[y]=W[fa[0]],w.array[y+1]=W[fa[1]],w.array[y+2]=W[fa[2]],w.array[y+3]=X[fa[0]],w.array[y+4]=X[fa[1]],w.array[y+5]=X[fa[2]],w.array[y+6]=Y[fa[0]],w.array[y+7]=Y[fa[1]],w.array[y+8]=Y[fa[2]],y+=9;G=0;for($=ua.length;G<
+$;G++)U=$a[ua[G]],W=w.value[U.a],X=w.value[U.b],Y=w.value[U.c],pa=w.value[U.d],w.array[y]=W[fa[0]],w.array[y+1]=W[fa[1]],w.array[y+2]=W[fa[2]],w.array[y+3]=X[fa[0]],w.array[y+4]=X[fa[1]],w.array[y+5]=X[fa[2]],w.array[y+6]=Y[fa[0]],w.array[y+7]=Y[fa[1]],w.array[y+8]=Y[fa[2]],w.array[y+9]=pa[fa[0]],w.array[y+10]=pa[fa[1]],w.array[y+11]=pa[fa[2]],y+=12}else if("faces"===w.boundTo){G=0;for($=ta.length;G<$;G++)Y=X=W=wa=w.value[ta[G]],w.array[y]=W[fa[0]],w.array[y+1]=W[fa[1]],w.array[y+2]=W[fa[2]],w.array[y+
+3]=X[fa[0]],w.array[y+4]=X[fa[1]],w.array[y+5]=X[fa[2]],w.array[y+6]=Y[fa[0]],w.array[y+7]=Y[fa[1]],w.array[y+8]=Y[fa[2]],y+=9;G=0;for($=ua.length;G<$;G++)pa=Y=X=W=wa=w.value[ua[G]],w.array[y]=W[fa[0]],w.array[y+1]=W[fa[1]],w.array[y+2]=W[fa[2]],w.array[y+3]=X[fa[0]],w.array[y+4]=X[fa[1]],w.array[y+5]=X[fa[2]],w.array[y+6]=Y[fa[0]],w.array[y+7]=Y[fa[1]],w.array[y+8]=Y[fa[2]],w.array[y+9]=pa[fa[0]],w.array[y+10]=pa[fa[1]],w.array[y+11]=pa[fa[2]],y+=12}else if("faceVertices"===w.boundTo){G=0;for($=
+ta.length;G<$;G++)wa=w.value[ta[G]],W=wa[0],X=wa[1],Y=wa[2],w.array[y]=W[fa[0]],w.array[y+1]=W[fa[1]],w.array[y+2]=W[fa[2]],w.array[y+3]=X[fa[0]],w.array[y+4]=X[fa[1]],w.array[y+5]=X[fa[2]],w.array[y+6]=Y[fa[0]],w.array[y+7]=Y[fa[1]],w.array[y+8]=Y[fa[2]],y+=9;G=0;for($=ua.length;G<$;G++)wa=w.value[ua[G]],W=wa[0],X=wa[1],Y=wa[2],pa=wa[3],w.array[y]=W[fa[0]],w.array[y+1]=W[fa[1]],w.array[y+2]=W[fa[2]],w.array[y+3]=X[fa[0]],w.array[y+4]=X[fa[1]],w.array[y+5]=X[fa[2]],w.array[y+6]=Y[fa[0]],w.array[y+
+7]=Y[fa[1]],w.array[y+8]=Y[fa[2]],w.array[y+9]=pa[fa[0]],w.array[y+10]=pa[fa[1]],w.array[y+11]=pa[fa[2]],y+=12}}else if(4===w.size)if(void 0===w.boundTo||"vertices"===w.boundTo){G=0;for($=ta.length;G<$;G++)U=$a[ta[G]],W=w.value[U.a],X=w.value[U.b],Y=w.value[U.c],w.array[y]=W.x,w.array[y+1]=W.y,w.array[y+2]=W.z,w.array[y+3]=W.w,w.array[y+4]=X.x,w.array[y+5]=X.y,w.array[y+6]=X.z,w.array[y+7]=X.w,w.array[y+8]=Y.x,w.array[y+9]=Y.y,w.array[y+10]=Y.z,w.array[y+11]=Y.w,y+=12;G=0;for($=ua.length;G<$;G++)U=
+$a[ua[G]],W=w.value[U.a],X=w.value[U.b],Y=w.value[U.c],pa=w.value[U.d],w.array[y]=W.x,w.array[y+1]=W.y,w.array[y+2]=W.z,w.array[y+3]=W.w,w.array[y+4]=X.x,w.array[y+5]=X.y,w.array[y+6]=X.z,w.array[y+7]=X.w,w.array[y+8]=Y.x,w.array[y+9]=Y.y,w.array[y+10]=Y.z,w.array[y+11]=Y.w,w.array[y+12]=pa.x,w.array[y+13]=pa.y,w.array[y+14]=pa.z,w.array[y+15]=pa.w,y+=16}else if("faces"===w.boundTo){G=0;for($=ta.length;G<$;G++)Y=X=W=wa=w.value[ta[G]],w.array[y]=W.x,w.array[y+1]=W.y,w.array[y+2]=W.z,w.array[y+3]=W.w,
+w.array[y+4]=X.x,w.array[y+5]=X.y,w.array[y+6]=X.z,w.array[y+7]=X.w,w.array[y+8]=Y.x,w.array[y+9]=Y.y,w.array[y+10]=Y.z,w.array[y+11]=Y.w,y+=12;G=0;for($=ua.length;G<$;G++)pa=Y=X=W=wa=w.value[ua[G]],w.array[y]=W.x,w.array[y+1]=W.y,w.array[y+2]=W.z,w.array[y+3]=W.w,w.array[y+4]=X.x,w.array[y+5]=X.y,w.array[y+6]=X.z,w.array[y+7]=X.w,w.array[y+8]=Y.x,w.array[y+9]=Y.y,w.array[y+10]=Y.z,w.array[y+11]=Y.w,w.array[y+12]=pa.x,w.array[y+13]=pa.y,w.array[y+14]=pa.z,w.array[y+15]=pa.w,y+=16}else if("faceVertices"===
+w.boundTo){G=0;for($=ta.length;G<$;G++)wa=w.value[ta[G]],W=wa[0],X=wa[1],Y=wa[2],w.array[y]=W.x,w.array[y+1]=W.y,w.array[y+2]=W.z,w.array[y+3]=W.w,w.array[y+4]=X.x,w.array[y+5]=X.y,w.array[y+6]=X.z,w.array[y+7]=X.w,w.array[y+8]=Y.x,w.array[y+9]=Y.y,w.array[y+10]=Y.z,w.array[y+11]=Y.w,y+=12;G=0;for($=ua.length;G<$;G++)wa=w.value[ua[G]],W=wa[0],X=wa[1],Y=wa[2],pa=wa[3],w.array[y]=W.x,w.array[y+1]=W.y,w.array[y+2]=W.z,w.array[y+3]=W.w,w.array[y+4]=X.x,w.array[y+5]=X.y,w.array[y+6]=X.z,w.array[y+7]=X.w,
+w.array[y+8]=Y.x,w.array[y+9]=Y.y,w.array[y+10]=Y.z,w.array[y+11]=Y.w,w.array[y+12]=pa.x,w.array[y+13]=pa.y,w.array[y+14]=pa.z,w.array[y+15]=pa.w,y+=16}k.bindBuffer(k.ARRAY_BUFFER,w.buffer);k.bufferData(k.ARRAY_BUFFER,w.array,Aa)}}vb&&(delete sa.__inittedArrays,delete sa.__colorArray,delete sa.__normalArray,delete sa.__tangentArray,delete sa.__uvArray,delete sa.__uv2Array,delete sa.__faceArray,delete sa.__vertexArray,delete sa.__lineArray,delete sa.__skinIndexArray,delete sa.__skinWeightArray)}}V.verticesNeedUpdate=
+!1;V.morphTargetsNeedUpdate=!1;V.elementsNeedUpdate=!1;V.uvsNeedUpdate=!1;V.normalsNeedUpdate=!1;V.colorsNeedUpdate=!1;V.tangentsNeedUpdate=!1;V.buffersNeedUpdate=!1;la.attributes&&x(la)}else if(ra instanceof THREE.Ribbon){la=e(ra,V);za=la.attributes&&D(la);if(V.verticesNeedUpdate||V.colorsNeedUpdate||V.normalsNeedUpdate||za){var Bb=V,Bc=k.DYNAMIC_DRAW,rc=void 0,sc=void 0,tc=void 0,Cc=void 0,xa=void 0,Dc=void 0,Ec=void 0,Fc=void 0,Zc=void 0,Ua=void 0,mc=void 0,Ca=void 0,kb=void 0,$c=Bb.vertices,ad=
+Bb.colors,bd=Bb.normals,id=$c.length,jd=ad.length,kd=bd.length,Gc=Bb.__vertexArray,Hc=Bb.__colorArray,Ic=Bb.__normalArray,ld=Bb.colorsNeedUpdate,md=Bb.normalsNeedUpdate,Xc=Bb.__webglCustomAttributesList;if(Bb.verticesNeedUpdate){for(rc=0;rc<id;rc++)Cc=$c[rc],xa=3*rc,Gc[xa]=Cc.x,Gc[xa+1]=Cc.y,Gc[xa+2]=Cc.z;k.bindBuffer(k.ARRAY_BUFFER,Bb.__webglVertexBuffer);k.bufferData(k.ARRAY_BUFFER,Gc,Bc)}if(ld){for(sc=0;sc<jd;sc++)Dc=ad[sc],xa=3*sc,Hc[xa]=Dc.r,Hc[xa+1]=Dc.g,Hc[xa+2]=Dc.b;k.bindBuffer(k.ARRAY_BUFFER,
+Bb.__webglColorBuffer);k.bufferData(k.ARRAY_BUFFER,Hc,Bc)}if(md){for(tc=0;tc<kd;tc++)Ec=bd[tc],xa=3*tc,Ic[xa]=Ec.x,Ic[xa+1]=Ec.y,Ic[xa+2]=Ec.z;k.bindBuffer(k.ARRAY_BUFFER,Bb.__webglNormalBuffer);k.bufferData(k.ARRAY_BUFFER,Ic,Bc)}if(Xc){Fc=0;for(Zc=Xc.length;Fc<Zc;Fc++)if(Ca=Xc[Fc],Ca.needsUpdate&&(void 0===Ca.boundTo||"vertices"===Ca.boundTo)){xa=0;mc=Ca.value.length;if(1===Ca.size)for(Ua=0;Ua<mc;Ua++)Ca.array[Ua]=Ca.value[Ua];else if(2===Ca.size)for(Ua=0;Ua<mc;Ua++)kb=Ca.value[Ua],Ca.array[xa]=
+kb.x,Ca.array[xa+1]=kb.y,xa+=2;else if(3===Ca.size)if("c"===Ca.type)for(Ua=0;Ua<mc;Ua++)kb=Ca.value[Ua],Ca.array[xa]=kb.r,Ca.array[xa+1]=kb.g,Ca.array[xa+2]=kb.b,xa+=3;else for(Ua=0;Ua<mc;Ua++)kb=Ca.value[Ua],Ca.array[xa]=kb.x,Ca.array[xa+1]=kb.y,Ca.array[xa+2]=kb.z,xa+=3;else if(4===Ca.size)for(Ua=0;Ua<mc;Ua++)kb=Ca.value[Ua],Ca.array[xa]=kb.x,Ca.array[xa+1]=kb.y,Ca.array[xa+2]=kb.z,Ca.array[xa+3]=kb.w,xa+=4;k.bindBuffer(k.ARRAY_BUFFER,Ca.buffer);k.bufferData(k.ARRAY_BUFFER,Ca.array,Bc)}}}V.verticesNeedUpdate=
+!1;V.colorsNeedUpdate=!1;V.normalsNeedUpdate=!1;la.attributes&&x(la)}else if(ra instanceof THREE.Line){la=e(ra,V);za=la.attributes&&D(la);if(V.verticesNeedUpdate||V.colorsNeedUpdate||V.lineDistancesNeedUpdate||za){var Cb=V,Jc=k.DYNAMIC_DRAW,uc=void 0,vc=void 0,wc=void 0,Kc=void 0,Ha=void 0,Lc=void 0,cd=Cb.vertices,dd=Cb.colors,ed=Cb.lineDistances,nd=cd.length,od=dd.length,pd=ed.length,Mc=Cb.__vertexArray,Nc=Cb.__colorArray,fd=Cb.__lineDistanceArray,qd=Cb.colorsNeedUpdate,rd=Cb.lineDistancesNeedUpdate,
+Yc=Cb.__webglCustomAttributesList,Oc=void 0,gd=void 0,Va=void 0,nc=void 0,lb=void 0,Da=void 0;if(Cb.verticesNeedUpdate){for(uc=0;uc<nd;uc++)Kc=cd[uc],Ha=3*uc,Mc[Ha]=Kc.x,Mc[Ha+1]=Kc.y,Mc[Ha+2]=Kc.z;k.bindBuffer(k.ARRAY_BUFFER,Cb.__webglVertexBuffer);k.bufferData(k.ARRAY_BUFFER,Mc,Jc)}if(qd){for(vc=0;vc<od;vc++)Lc=dd[vc],Ha=3*vc,Nc[Ha]=Lc.r,Nc[Ha+1]=Lc.g,Nc[Ha+2]=Lc.b;k.bindBuffer(k.ARRAY_BUFFER,Cb.__webglColorBuffer);k.bufferData(k.ARRAY_BUFFER,Nc,Jc)}if(rd){for(wc=0;wc<pd;wc++)fd[wc]=ed[wc];k.bindBuffer(k.ARRAY_BUFFER,
+Cb.__webglLineDistanceBuffer);k.bufferData(k.ARRAY_BUFFER,fd,Jc)}if(Yc){Oc=0;for(gd=Yc.length;Oc<gd;Oc++)if(Da=Yc[Oc],Da.needsUpdate&&(void 0===Da.boundTo||"vertices"===Da.boundTo)){Ha=0;nc=Da.value.length;if(1===Da.size)for(Va=0;Va<nc;Va++)Da.array[Va]=Da.value[Va];else if(2===Da.size)for(Va=0;Va<nc;Va++)lb=Da.value[Va],Da.array[Ha]=lb.x,Da.array[Ha+1]=lb.y,Ha+=2;else if(3===Da.size)if("c"===Da.type)for(Va=0;Va<nc;Va++)lb=Da.value[Va],Da.array[Ha]=lb.r,Da.array[Ha+1]=lb.g,Da.array[Ha+2]=lb.b,Ha+=
+3;else for(Va=0;Va<nc;Va++)lb=Da.value[Va],Da.array[Ha]=lb.x,Da.array[Ha+1]=lb.y,Da.array[Ha+2]=lb.z,Ha+=3;else if(4===Da.size)for(Va=0;Va<nc;Va++)lb=Da.value[Va],Da.array[Ha]=lb.x,Da.array[Ha+1]=lb.y,Da.array[Ha+2]=lb.z,Da.array[Ha+3]=lb.w,Ha+=4;k.bindBuffer(k.ARRAY_BUFFER,Da.buffer);k.bufferData(k.ARRAY_BUFFER,Da.array,Jc)}}}V.verticesNeedUpdate=!1;V.colorsNeedUpdate=!1;V.lineDistancesNeedUpdate=!1;la.attributes&&x(la)}else ra instanceof THREE.ParticleSystem&&(V instanceof THREE.BufferGeometry?
+((V.verticesNeedUpdate||V.colorsNeedUpdate)&&j(V,k.DYNAMIC_DRAW,!V.dynamic),V.verticesNeedUpdate=!1,V.colorsNeedUpdate=!1):(la=e(ra,V),za=la.attributes&&D(la),(V.verticesNeedUpdate||V.colorsNeedUpdate||ra.sortParticles||za)&&i(V,k.DYNAMIC_DRAW,ra),V.verticesNeedUpdate=!1,V.colorsNeedUpdate=!1,la.attributes&&x(la)))}};this.initMaterial=function(a,b,c,d){var e,f,g,h,i,j,l,n,m;a instanceof THREE.MeshDepthMaterial?m="depth":a instanceof THREE.MeshNormalMaterial?m="normal":a instanceof THREE.MeshBasicMaterial?
+m="basic":a instanceof THREE.MeshLambertMaterial?m="lambert":a instanceof THREE.MeshPhongMaterial?m="phong":a instanceof THREE.LineBasicMaterial?m="basic":a instanceof THREE.LineDashedMaterial?m="dashed":a instanceof THREE.ParticleBasicMaterial&&(m="particle_basic");if(m){var p=THREE.ShaderLib[m];a.uniforms=THREE.UniformsUtils.clone(p.uniforms);a.vertexShader=p.vertexShader;a.fragmentShader=p.fragmentShader}var q,r,s;e=q=r=s=p=0;for(f=b.length;e<f;e++)g=b[e],g.onlyShadow||(g instanceof THREE.DirectionalLight&&
+q++,g instanceof THREE.PointLight&&r++,g instanceof THREE.SpotLight&&s++,g instanceof THREE.HemisphereLight&&p++);e=q;f=r;g=s;h=p;p=q=0;for(s=b.length;p<s;p++)r=b[p],r.castShadow&&(r instanceof THREE.SpotLight&&q++,r instanceof THREE.DirectionalLight&&!r.shadowCascade&&q++);n=q;Ya&&d&&d.useVertexTexture?l=1024:(b=k.getParameter(k.MAX_VERTEX_UNIFORM_VECTORS),b=Math.floor((b-20)/4),void 0!==d&&d instanceof THREE.SkinnedMesh&&(b=Math.min(d.bones.length,b),b<d.bones.length&&console.warn("WebGLRenderer: too many bones - "+
+d.bones.length+", this GPU supports just "+b+" (try OpenGL instead of ANGLE)")),l=b);a:{r=a.fragmentShader;s=a.vertexShader;p=a.uniforms;b=a.attributes;q=a.defines;var c={map:!!a.map,envMap:!!a.envMap,lightMap:!!a.lightMap,bumpMap:!!a.bumpMap,normalMap:!!a.normalMap,specularMap:!!a.specularMap,vertexColors:a.vertexColors,fog:c,useFog:a.fog,fogExp:c instanceof THREE.FogExp2,sizeAttenuation:a.sizeAttenuation,skinning:a.skinning,maxBones:l,useVertexTexture:Ya&&d&&d.useVertexTexture,boneTextureWidth:d&&
+d.boneTextureWidth,boneTextureHeight:d&&d.boneTextureHeight,morphTargets:a.morphTargets,morphNormals:a.morphNormals,maxMorphTargets:this.maxMorphTargets,maxMorphNormals:this.maxMorphNormals,maxDirLights:e,maxPointLights:f,maxSpotLights:g,maxHemiLights:h,maxShadows:n,shadowMapEnabled:this.shadowMapEnabled&&d.receiveShadow,shadowMapSoft:this.shadowMapSoft,shadowMapDebug:this.shadowMapDebug,shadowMapCascade:this.shadowMapCascade,alphaTest:a.alphaTest,metal:a.metal,perPixel:a.perPixel,wrapAround:a.wrapAround,
+doubleSided:a.side===THREE.DoubleSide,flipSided:a.side===THREE.BackSide},t,u,v,d=[];m?d.push(m):(d.push(r),d.push(s));for(u in q)d.push(u),d.push(q[u]);for(t in c)d.push(t),d.push(c[t]);m=d.join();t=0;for(u=ca.length;t<u;t++)if(d=ca[t],d.code===m){d.usedTimes++;j=d.program;break a}t=[];for(v in q)u=q[v],!1!==u&&(u="#define "+v+" "+u,t.push(u));u=t.join("\n");v=k.createProgram();t=["precision "+R+" float;",u,ic?"#define VERTEX_TEXTURES":"",H.gammaInput?"#define GAMMA_INPUT":"",H.gammaOutput?"#define GAMMA_OUTPUT":
+"",H.physicallyBasedShading?"#define PHYSICALLY_BASED_SHADING":"","#define MAX_DIR_LIGHTS "+c.maxDirLights,"#define MAX_POINT_LIGHTS "+c.maxPointLights,"#define MAX_SPOT_LIGHTS "+c.maxSpotLights,"#define MAX_HEMI_LIGHTS "+c.maxHemiLights,"#define MAX_SHADOWS "+c.maxShadows,"#define MAX_BONES "+c.maxBones,c.map?"#define USE_MAP":"",c.envMap?"#define USE_ENVMAP":"",c.lightMap?"#define USE_LIGHTMAP":"",c.bumpMap?"#define USE_BUMPMAP":"",c.normalMap?"#define USE_NORMALMAP":"",c.specularMap?"#define USE_SPECULARMAP":
+"",c.vertexColors?"#define USE_COLOR":"",c.skinning?"#define USE_SKINNING":"",c.useVertexTexture?"#define BONE_TEXTURE":"",c.boneTextureWidth?"#define N_BONE_PIXEL_X "+c.boneTextureWidth.toFixed(1):"",c.boneTextureHeight?"#define N_BONE_PIXEL_Y "+c.boneTextureHeight.toFixed(1):"",c.morphTargets?"#define USE_MORPHTARGETS":"",c.morphNormals?"#define USE_MORPHNORMALS":"",c.perPixel?"#define PHONG_PER_PIXEL":"",c.wrapAround?"#define WRAP_AROUND":"",c.doubleSided?"#define DOUBLE_SIDED":"",c.flipSided?
+"#define FLIP_SIDED":"",c.shadowMapEnabled?"#define USE_SHADOWMAP":"",c.shadowMapSoft?"#define SHADOWMAP_SOFT":"",c.shadowMapDebug?"#define SHADOWMAP_DEBUG":"",c.shadowMapCascade?"#define SHADOWMAP_CASCADE":"",c.sizeAttenuation?"#define USE_SIZEATTENUATION":"","uniform mat4 modelMatrix;\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform mat4 viewMatrix;\nuniform mat3 normalMatrix;\nuniform vec3 cameraPosition;\nattribute vec3 position;\nattribute vec3 normal;\nattribute vec2 uv;\nattribute vec2 uv2;\n#ifdef USE_COLOR\nattribute vec3 color;\n#endif\n#ifdef USE_MORPHTARGETS\nattribute vec3 morphTarget0;\nattribute vec3 morphTarget1;\nattribute vec3 morphTarget2;\nattribute vec3 morphTarget3;\n#ifdef USE_MORPHNORMALS\nattribute vec3 morphNormal0;\nattribute vec3 morphNormal1;\nattribute vec3 morphNormal2;\nattribute vec3 morphNormal3;\n#else\nattribute vec3 morphTarget4;\nattribute vec3 morphTarget5;\nattribute vec3 morphTarget6;\nattribute vec3 morphTarget7;\n#endif\n#endif\n#ifdef USE_SKINNING\nattribute vec4 skinIndex;\nattribute vec4 skinWeight;\n#endif\n"].join("\n");
 u=["precision "+R+" float;",c.bumpMap||c.normalMap?"#extension GL_OES_standard_derivatives : enable":"",u,"#define MAX_DIR_LIGHTS "+c.maxDirLights,"#define MAX_POINT_LIGHTS "+c.maxPointLights,"#define MAX_SPOT_LIGHTS "+c.maxSpotLights,"#define MAX_HEMI_LIGHTS "+c.maxHemiLights,"#define MAX_SHADOWS "+c.maxShadows,c.alphaTest?"#define ALPHATEST "+c.alphaTest:"",H.gammaInput?"#define GAMMA_INPUT":"",H.gammaOutput?"#define GAMMA_OUTPUT":"",H.physicallyBasedShading?"#define PHYSICALLY_BASED_SHADING":"",
 c.useFog&&c.fog?"#define USE_FOG":"",c.useFog&&c.fogExp?"#define FOG_EXP2":"",c.map?"#define USE_MAP":"",c.envMap?"#define USE_ENVMAP":"",c.lightMap?"#define USE_LIGHTMAP":"",c.bumpMap?"#define USE_BUMPMAP":"",c.normalMap?"#define USE_NORMALMAP":"",c.specularMap?"#define USE_SPECULARMAP":"",c.vertexColors?"#define USE_COLOR":"",c.metal?"#define METAL":"",c.perPixel?"#define PHONG_PER_PIXEL":"",c.wrapAround?"#define WRAP_AROUND":"",c.doubleSided?"#define DOUBLE_SIDED":"",c.flipSided?"#define FLIP_SIDED":
 "",c.shadowMapEnabled?"#define USE_SHADOWMAP":"",c.shadowMapSoft?"#define SHADOWMAP_SOFT":"",c.shadowMapDebug?"#define SHADOWMAP_DEBUG":"",c.shadowMapCascade?"#define SHADOWMAP_CASCADE":"","uniform mat4 viewMatrix;\nuniform vec3 cameraPosition;\n"].join("\n");u=C("fragment",u+r);t=C("vertex",t+s);k.attachShader(v,t);k.attachShader(v,u);k.linkProgram(v);k.getProgramParameter(v,k.LINK_STATUS)||console.error("Could not initialise shader\nVALIDATE_STATUS: "+k.getProgramParameter(v,k.VALIDATE_STATUS)+

+ 4 - 0
src/core/BufferGeometry.js

@@ -16,6 +16,10 @@ THREE.BufferGeometry = function () {
 
 	this.dynamic = false;
 
+	// offsets for chunks when using indexed elements
+
+	this.offsets = [];
+
 	// boundings
 
 	this.boundingBox = null;

+ 1 - 1
src/core/Matrix3.js

@@ -104,7 +104,7 @@ THREE.Matrix3.prototype = {
 
 	transposeIntoArray: function ( r ) {
 
-		var m = this.m;
+		var m = this.elements;
 
 		r[ 0 ] = m[ 0 ];
 		r[ 1 ] = m[ 3 ];

+ 6 - 18
src/renderers/WebGLRenderer.js

@@ -329,10 +329,6 @@ THREE.WebGLRenderer = function ( parameters ) {
 		delete object._modelViewMatrix;
 		delete object._normalMatrix;
 
-		delete object._normalMatrixArray;
-		delete object._modelViewMatrixArray;
-		delete object._modelMatrixArray;
-
 		if ( object instanceof THREE.Mesh ) {
 
 			for ( var g in object.geometry.geometryGroups ) {
@@ -3963,8 +3959,6 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 				if ( ! ( object instanceof THREE.Mesh || object instanceof THREE.ParticleSystem ) || ! ( object.frustumCulled ) || _frustum.contains( object ) ) {
 
-					//object.matrixWorld.flattenToArray( object._modelMatrixArray );
-
 					setupMatrices( object, camera );
 
 					unrollBufferMaterial( webglObject );
@@ -4013,14 +4007,6 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 			if ( object.visible ) {
 
-				/*
-				if ( object.matrixAutoUpdate ) {
-
-					object.matrixWorld.flattenToArray( object._modelMatrixArray );
-
-				}
-				*/
-
 				setupMatrices( object, camera );
 
 				unrollImmediateBufferMaterial( webglObject );
@@ -4043,17 +4029,19 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 		} else {
 
+			var material = null;
+
 			// opaque pass (front-to-back order)
 
 			this.setBlending( THREE.NormalBlending );
 
-			renderObjects( scene.__webglObjects, true, "opaque", camera, lights, fog, false );
-			renderObjectsImmediate( scene.__webglObjectsImmediate, "opaque", camera, lights, fog, false );
+			renderObjects( scene.__webglObjects, true, "opaque", camera, lights, fog, false, material );
+			renderObjectsImmediate( scene.__webglObjectsImmediate, "opaque", camera, lights, fog, false, material );
 
 			// transparent pass (back-to-front order)
 
-			renderObjects( scene.__webglObjects, false, "transparent", camera, lights, fog, true );
-			renderObjectsImmediate( scene.__webglObjectsImmediate, "transparent", camera, lights, fog, true );
+			renderObjects( scene.__webglObjects, false, "transparent", camera, lights, fog, true, material );
+			renderObjectsImmediate( scene.__webglObjectsImmediate, "transparent", camera, lights, fog, true, material );
 
 		}
 

+ 2 - 2
src/textures/CompressedTexture.js

@@ -2,9 +2,9 @@
  * @author alteredq / http://alteredqualia.com/
  */
 
-THREE.CompressedTexture = function ( mipmaps, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter ) {
+THREE.CompressedTexture = function ( mipmaps, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy ) {
 
-	THREE.Texture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type );
+	THREE.Texture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );
 
 	this.image = { width: width, height: height };
 	this.mipmaps = mipmaps;

+ 3 - 3
src/textures/DataTexture.js

@@ -2,9 +2,9 @@
  * @author alteredq / http://alteredqualia.com/
  */
 
-THREE.DataTexture = function ( data, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter ) {
+THREE.DataTexture = function ( data, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy ) {
 
-	THREE.Texture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type );
+	THREE.Texture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );
 
 	this.image = { data: data, width: width, height: height };
 
@@ -14,7 +14,7 @@ THREE.DataTexture.prototype = Object.create( THREE.Texture.prototype );
 
 THREE.DataTexture.prototype.clone = function () {
 
-	var clonedTexture = new THREE.DataTexture( this.image.data,  this.image.width, this.image.height, this.format, this.type, this.mapping, this.wrapS, this.wrapT, this.magFilter, this.minFilter );
+	var clonedTexture = new THREE.DataTexture( this.image.data,  this.image.width, this.image.height, this.format, this.type, this.mapping, this.wrapS, this.wrapT, this.magFilter, this.minFilter, this.anisotropy );
 
 	clonedTexture.offset.copy( this.offset );
 	clonedTexture.repeat.copy( this.repeat );