浏览代码

Updated builds.

Mr.doob 10 年之前
父节点
当前提交
c63db605fe
共有 2 个文件被更改,包括 59 次插入70 次删除
  1. 38 49
      build/three.js
  2. 21 21
      build/three.min.js

+ 38 - 49
build/three.js

@@ -17650,7 +17650,7 @@ THREE.WebGLRenderer = function ( parameters ) {
 	_currentProgram = null,
 	_currentFramebuffer = null,
 	_currentMaterialId = - 1,
-	_currentGeometryGroupHash = null,
+	_currentGeometryGroupHash = - 1,
 	_currentCamera = null,
 
 	_usedTextureUnits = 0,
@@ -18369,7 +18369,7 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 		// TOFIX: Workaround for deleted geometry being currently bound
 
-		_currentGeometryGroupHash = -1;
+		_currentGeometryGroupHash = - 1;
 
 	};
 
@@ -20014,24 +20014,24 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 		for ( var i = 0, l = attributesKeys.length; i < l; i ++ ) {
 
-			var attributeName = attributesKeys[ i ];
-			var attributeItem = attributes[ attributeName ];
+			var key = attributesKeys[ i ];
+			var attribute = attributes[ key ];
 
-			if ( attributeItem.buffer === undefined ) {
+			if ( attribute.buffer === undefined ) {
 
-				attributeItem.buffer = _gl.createBuffer();
-				attributeItem.needsUpdate = true;
+				attribute.buffer = _gl.createBuffer();
+				attribute.needsUpdate = true;
 
 			}
 
-			if ( attributeItem.needsUpdate === true ) {
+			if ( attribute.needsUpdate === true ) {
 
-				var bufferType = ( attributeName === 'index' ) ? _gl.ELEMENT_ARRAY_BUFFER : _gl.ARRAY_BUFFER;
+				var bufferType = ( key === 'index' ) ? _gl.ELEMENT_ARRAY_BUFFER : _gl.ARRAY_BUFFER;
 
-				_gl.bindBuffer( bufferType, attributeItem.buffer );
-				_gl.bufferData( bufferType, attributeItem.array, _gl.STATIC_DRAW );
+				_gl.bindBuffer( bufferType, attribute.buffer );
+				_gl.bufferData( bufferType, attribute.array, _gl.STATIC_DRAW );
 
-				attributeItem.needsUpdate = false;
+				attribute.needsUpdate = false;
 
 			}
 
@@ -20147,33 +20147,32 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 		for ( var i = 0, l = programAttributesKeys.length; i < l; i ++ ) {
 
-			var attributeName = programAttributesKeys[ i ];
+			var key = programAttributesKeys[ i ];
+			var programAttribute = programAttributes[ key ];
 
-			var attributePointer = programAttributes[ attributeName ];
+			if ( programAttribute >= 0 ) {
 
-			if ( attributePointer >= 0 ) {
+				var geometryAttribute = geometryAttributes[ key ];
 
-				var attributeItem = geometryAttributes[ attributeName ];
+				if ( geometryAttribute !== undefined ) {
 
-				if ( attributeItem !== undefined ) {
+					var size = geometryAttribute.itemSize;
 
-					var attributeSize = attributeItem.itemSize;
+					_gl.bindBuffer( _gl.ARRAY_BUFFER, geometryAttribute.buffer );
 
-					_gl.bindBuffer( _gl.ARRAY_BUFFER, attributeItem.buffer );
+					enableAttribute( programAttribute );
 
-					enableAttribute( attributePointer );
-
-					_gl.vertexAttribPointer( attributePointer, attributeSize, _gl.FLOAT, false, 0, startIndex * attributeSize * 4 ); // 4 bytes per Float32
+					_gl.vertexAttribPointer( programAttribute, size, _gl.FLOAT, false, 0, startIndex * size * 4 ); // 4 bytes per Float32
 
 				} else if ( material.defaultAttributeValues !== undefined ) {
 
-					if ( material.defaultAttributeValues[ attributeName ].length === 2 ) {
+					if ( material.defaultAttributeValues[ key ].length === 2 ) {
 
-						_gl.vertexAttrib2fv( attributePointer, material.defaultAttributeValues[ attributeName ] );
+						_gl.vertexAttrib2fv( programAttribute, material.defaultAttributeValues[ key ] );
 
-					} else if ( material.defaultAttributeValues[ attributeName ].length === 3 ) {
+					} else if ( material.defaultAttributeValues[ key ].length === 3 ) {
 
-						_gl.vertexAttrib3fv( attributePointer, material.defaultAttributeValues[ attributeName ] );
+						_gl.vertexAttrib3fv( programAttribute, material.defaultAttributeValues[ key ] );
 
 					}
 
@@ -20191,9 +20190,6 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 		if ( material.visible === false ) return;
 
-		var linewidth, a, attribute;
-		var attributeItem, attributeName, attributePointer, attributeSize;
-
 		var program = setProgram( camera, lights, fog, material, object );
 
 		var updateBuffers = false,
@@ -20427,8 +20423,6 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 		if ( material.visible === false ) return;
 
-		var linewidth, a, attribute, i, il;
-
 		var program = setProgram( camera, lights, fog, material, object );
 
 		var attributes = program.attributes;
@@ -20481,9 +20475,9 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 			if ( geometryGroup.__webglCustomAttributesList ) {
 
-				for ( i = 0, il = geometryGroup.__webglCustomAttributesList.length; i < il; i ++ ) {
+				for ( var i = 0, il = geometryGroup.__webglCustomAttributesList.length; i < il; i ++ ) {
 
-					attribute = geometryGroup.__webglCustomAttributesList[ i ];
+					var attribute = geometryGroup.__webglCustomAttributesList[ i ];
 
 					if ( attributes[ attribute.buffer.belongsToAttribute ] >= 0 ) {
 
@@ -20886,12 +20880,7 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 		}
 
-		var i, il,
-
-		webglObject, object,
-		renderList,
-
-		fog = scene.fog;
+		var fog = scene.fog;
 
 		// reset caching for this frame
 
@@ -20958,10 +20947,10 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 		// set matrices for immediate objects
 
-		for ( i = 0, il = _webglObjectsImmediate.length; i < il; i ++ ) {
+		for ( var i = 0, il = _webglObjectsImmediate.length; i < il; i ++ ) {
 
-			webglObject = _webglObjectsImmediate[ i ];
-			object = webglObject.object;
+			var webglObject = _webglObjectsImmediate[ i ];
+			var object = webglObject.object;
 
 			if ( object.visible ) {
 
@@ -21103,14 +21092,14 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 	function renderObjects( renderList, camera, lights, fog, useBlending, overrideMaterial ) {
 
-		var webglObject, object, buffer, material;
+		var material;
 
 		for ( var i = renderList.length - 1; i !== - 1; i -- ) {
 
-			webglObject = renderList[ i ];
+			var webglObject = renderList[ i ];
 
-			object = webglObject.object;
-			buffer = webglObject.buffer;
+			var object = webglObject.object;
+			var buffer = webglObject.buffer;
 
 			setupMatrices( object, camera );
 
@@ -21150,12 +21139,12 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 	function renderObjectsImmediate ( renderList, materialType, camera, lights, fog, useBlending, overrideMaterial ) {
 
-		var webglObject, object, material, program;
+		var material;
 
 		for ( var i = 0, il = renderList.length; i < il; i ++ ) {
 
-			webglObject = renderList[ i ];
-			object = webglObject.object;
+			var webglObject = renderList[ i ];
+			var object = webglObject.object;
 
 			if ( object.visible ) {
 

+ 21 - 21
build/three.min.js

@@ -466,9 +466,9 @@ ja.z,V+=3;else if(4===U.size)for(ca=0;ca<ob;ca++)zb=Ib[ca][1],ja=U.value[zb],U.a
 else if(2===U.size)for(ca=0;ca<ob;ca++)ja=U.value[ca],U.array[V]=ja.x,U.array[V+1]=ja.y,V+=2;else if(3===U.size)if("c"===U.type)for(ca=0;ca<ob;ca++)ja=U.value[ca],U.array[V]=ja.r,U.array[V+1]=ja.g,U.array[V+2]=ja.b,V+=3;else for(ca=0;ca<ob;ca++)ja=U.value[ca],U.array[V]=ja.x,U.array[V+1]=ja.y,U.array[V+2]=ja.z,V+=3;else if(4===U.size)for(ca=0;ca<ob;ca++)ja=U.value[ca],U.array[V]=ja.x,U.array[V+1]=ja.y,U.array[V+2]=ja.z,U.array[V+3]=ja.w,V+=4}if(qc||e.sortParticles)m.bindBuffer(m.ARRAY_BUFFER,q.__webglVertexBuffer),
 m.bufferData(m.ARRAY_BUFFER,cc,tb);if(rc||e.sortParticles)m.bindBuffer(m.ARRAY_BUFFER,q.__webglColorBuffer),m.bufferData(m.ARRAY_BUFFER,dc,tb);if(Jb)for(nb=0,ic=Jb.length;nb<ic;nb++)if(U=Jb[nb],U.needsUpdate||e.sortParticles)m.bindBuffer(m.ARRAY_BUFFER,U.buffer),m.bufferData(m.ARRAY_BUFFER,U.array,tb)}q.verticesNeedUpdate=!1;q.colorsNeedUpdate=!1;x.attributes&&A(x)}for(var ec=0,Ec=t.length;ec<Ec;ec++){var yc=t[ec],Wb=yc,sc=Wb.object,zc=Wb.buffer,Ac=sc.geometry,Xb=sc.material;Xb instanceof THREE.MeshFaceMaterial?
 (Xb=Xb.materials[Ac instanceof THREE.BufferGeometry?0:zc.materialIndex],Wb.material=Xb,Xb.transparent?pb.push(Wb):Kb.push(Wb)):Xb&&(Wb.material=Xb,Xb.transparent?pb.push(Wb):Kb.push(Wb));yc.render=!0;!0===H.sortObjects&&(null!==e.renderDepth?yc.z=e.renderDepth:(Oa.setFromMatrixPosition(e.matrixWorld),Oa.applyProjection(xc),yc.z=Oa.z))}}}ec=0;for(Ec=e.children.length;ec<Ec;ec++)l(a,e.children[ec])}}function r(a,b,c){if(0!==a.length)for(var d=0,e=a.length;d<e;d++)a[d].render(b,c,pc,qc)}function q(a,
-b,c,d,e,f){for(var g,h,k,m=a.length-1;-1!==m;m--){g=a[m];h=g.object;k=g.buffer;B(h,b);if(f)g=f;else{g=g.material;if(!g)continue;e&&H.setBlending(g.blending,g.blendEquation,g.blendSrc,g.blendDst);H.setDepthTest(g.depthTest);H.setDepthWrite(g.depthWrite);F(g.polygonOffset,g.polygonOffsetFactor,g.polygonOffsetUnits)}H.setMaterialFaces(g);k instanceof THREE.BufferGeometry?H.renderBufferDirect(b,c,d,g,k,h):H.renderBuffer(b,c,d,g,k,h)}}function t(a,b,c,d,e,f,g){for(var h,k,m=0,l=a.length;m<l;m++)if(h=a[m],
-k=h.object,k.visible){if(g)h=g;else{h=h[b];if(!h)continue;f&&H.setBlending(h.blending,h.blendEquation,h.blendSrc,h.blendDst);H.setDepthTest(h.depthTest);H.setDepthWrite(h.depthWrite);F(h.polygonOffset,h.polygonOffsetFactor,h.polygonOffsetUnits)}H.renderImmediateObject(c,d,e,h,k)}}function s(a){var b=a.object.material;b.transparent?(a.transparent=b,a.opaque=null):(a.opaque=b,a.transparent=null)}function v(a,b,d){var e=b.material,f=!1;if(void 0===sb[d.id]||!0===d.groupsNeedUpdate){delete $a[b.id];a=
-sb;for(var g=d.id,e=e instanceof THREE.MeshFaceMaterial,h=ta.get("OES_element_index_uint")?4294967296:65535,k,f={},l=d.morphTargets.length,n=d.morphNormals.length,p,q={},r=[],t=0,s=d.faces.length;t<s;t++){k=d.faces[t];var u=e?k.materialIndex:0;u in f||(f[u]={hash:u,counter:0});k=f[u].hash+"_"+f[u].counter;k in q||(p={id:rc++,faces3:[],materialIndex:u,vertices:0,numMorphTargets:l,numMorphNormals:n},q[k]=p,r.push(p));q[k].vertices+3>h&&(f[u].counter+=1,k=f[u].hash+"_"+f[u].counter,k in q||(p={id:rc++,
+b,c,d,e,f){for(var g,h=a.length-1;-1!==h;h--){g=a[h];var k=g.object,m=g.buffer;B(k,b);if(f)g=f;else{g=g.material;if(!g)continue;e&&H.setBlending(g.blending,g.blendEquation,g.blendSrc,g.blendDst);H.setDepthTest(g.depthTest);H.setDepthWrite(g.depthWrite);F(g.polygonOffset,g.polygonOffsetFactor,g.polygonOffsetUnits)}H.setMaterialFaces(g);m instanceof THREE.BufferGeometry?H.renderBufferDirect(b,c,d,g,m,k):H.renderBuffer(b,c,d,g,m,k)}}function t(a,b,c,d,e,f,g){for(var h,k=0,m=a.length;k<m;k++){h=a[k];
+var l=h.object;if(l.visible){if(g)h=g;else{h=h[b];if(!h)continue;f&&H.setBlending(h.blending,h.blendEquation,h.blendSrc,h.blendDst);H.setDepthTest(h.depthTest);H.setDepthWrite(h.depthWrite);F(h.polygonOffset,h.polygonOffsetFactor,h.polygonOffsetUnits)}H.renderImmediateObject(c,d,e,h,l)}}}function s(a){var b=a.object.material;b.transparent?(a.transparent=b,a.opaque=null):(a.opaque=b,a.transparent=null)}function v(a,b,d){var e=b.material,f=!1;if(void 0===sb[d.id]||!0===d.groupsNeedUpdate){delete $a[b.id];
+a=sb;for(var g=d.id,e=e instanceof THREE.MeshFaceMaterial,h=ta.get("OES_element_index_uint")?4294967296:65535,k,f={},l=d.morphTargets.length,n=d.morphNormals.length,p,q={},r=[],t=0,s=d.faces.length;t<s;t++){k=d.faces[t];var u=e?k.materialIndex:0;u in f||(f[u]={hash:u,counter:0});k=f[u].hash+"_"+f[u].counter;k in q||(p={id:rc++,faces3:[],materialIndex:u,vertices:0,numMorphTargets:l,numMorphNormals:n},q[k]=p,r.push(p));q[k].vertices+3>h&&(f[u].counter+=1,k=f[u].hash+"_"+f[u].counter,k in q||(p={id:rc++,
 faces3:[],materialIndex:u,vertices:0,numMorphTargets:l,numMorphNormals:n},q[k]=p,r.push(p)));q[k].faces3.push(t);q[k].vertices+=3}a[g]=r;d.groupsNeedUpdate=!1}a=sb[d.id];g=0;for(e=a.length;g<e;g++){h=a[g];if(void 0===h.__webglVertexBuffer){f=h;f.__webglVertexBuffer=m.createBuffer();f.__webglNormalBuffer=m.createBuffer();f.__webglTangentBuffer=m.createBuffer();f.__webglColorBuffer=m.createBuffer();f.__webglUVBuffer=m.createBuffer();f.__webglUV2Buffer=m.createBuffer();f.__webglSkinIndicesBuffer=m.createBuffer();
 f.__webglSkinWeightsBuffer=m.createBuffer();f.__webglFaceBuffer=m.createBuffer();f.__webglLineBuffer=m.createBuffer();n=l=void 0;if(f.numMorphTargets)for(f.__webglMorphTargetsBuffers=[],l=0,n=f.numMorphTargets;l<n;l++)f.__webglMorphTargetsBuffers.push(m.createBuffer());if(f.numMorphNormals)for(f.__webglMorphNormalsBuffers=[],l=0,n=f.numMorphNormals;l<n;l++)f.__webglMorphNormalsBuffers.push(m.createBuffer());H.info.memory.geometries++;c(h,b);d.verticesNeedUpdate=!0;d.morphTargetsNeedUpdate=!0;d.elementsNeedUpdate=
 !0;d.uvsNeedUpdate=!0;d.normalsNeedUpdate=!0;d.tangentsNeedUpdate=!0;f=d.colorsNeedUpdate=!0}else f=!1;(f||void 0===b.__webglActive)&&w($a,h,b)}b.__webglActive=!0}function w(a,b,c){var d=c.id;a[d]=a[d]||[];a[d].push({id:d,buffer:b,object:c,material:null,z:0})}function u(a){for(var b in a.attributes)if(a.attributes[b].needsUpdate)return!0;return!1}function A(a){for(var b in a.attributes)a.attributes[b].needsUpdate=!1}function x(a,b,c,d,e){var f,g,h,k;Lb=0;if(d.needsUpdate){d.program&&sc(d);d.addEventListener("dispose",
@@ -516,7 +516,7 @@ if(a===THREE.RGBA_S3TC_DXT1_Format)return b.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(a==
 if(a===THREE.RGBA_PVRTC_2BPPV1_Format)return b.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}b=ta.get("EXT_blend_minmax");if(null!==b){if(a===THREE.MinEquation)return b.MIN_EXT;if(a===THREE.MaxEquation)return b.MAX_EXT}return 0}console.log("THREE.WebGLRenderer",THREE.REVISION);a=a||{};var R=void 0!==a.canvas?a.canvas:document.createElement("canvas"),ka=void 0!==a.context?a.context:null,X=void 0!==a.precision?a.precision:"highp",ba=void 0!==a.alpha?a.alpha:!1,ga=void 0!==a.depth?a.depth:!0,Aa=void 0!==a.stencil?
 a.stencil:!0,O=void 0!==a.antialias?a.antialias:!1,Ma=void 0!==a.premultipliedAlpha?a.premultipliedAlpha:!0,ia=void 0!==a.preserveDrawingBuffer?a.preserveDrawingBuffer:!1,Pa=void 0!==a.logarithmicDepthBuffer?a.logarithmicDepthBuffer:!1,sa=new THREE.Color(0),db=0,Za=[],$a={},lb=[],Kb=[],pb=[];this.domElement=R;this.context=null;this.devicePixelRatio=void 0!==a.devicePixelRatio?a.devicePixelRatio:void 0!==self.devicePixelRatio?self.devicePixelRatio:1;this.sortObjects=this.autoClearStencil=this.autoClearDepth=
 this.autoClearColor=this.autoClear=!0;this.shadowMapEnabled=this.gammaOutput=this.gammaInput=!1;this.shadowMapAutoUpdate=!0;this.shadowMapType=THREE.PCFShadowMap;this.shadowMapCullFace=THREE.CullFaceFront;this.shadowMapCascade=this.shadowMapDebug=!1;this.maxMorphTargets=8;this.maxMorphNormals=4;this.autoScaleCubemaps=!0;this.renderPluginsPre=[];this.renderPluginsPost=[];this.info={memory:{programs:0,geometries:0,textures:0},render:{calls:0,vertices:0,faces:0,points:0}};var H=this,qb=[],Ab=null,Cb=
-null,Bb=-1,Ja=null,Yb=null,Lb=0,Mb=-1,Nb=-1,Ob=-1,tb=-1,Pb=-1,rb=-1,Qb=-1,Zb=-1,Nc=null,Oc=null,Pc=null,Mc=null,jb=0,kb=0,Rb=R.width,$b=R.height,pc=0,qc=0,Db=new Uint8Array(16),eb=new Uint8Array(16),Bc=new THREE.Frustum,xc=new THREE.Matrix4,Dc=new THREE.Matrix4,Oa=new THREE.Vector3,za=new THREE.Vector3,gc=!0,Ac={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[],distances:[]},spot:{length:0,colors:[],positions:[],distances:[],directions:[],anglesCos:[],
+null,Bb=-1,Ja=-1,Yb=null,Lb=0,Mb=-1,Nb=-1,Ob=-1,tb=-1,Pb=-1,rb=-1,Qb=-1,Zb=-1,Nc=null,Oc=null,Pc=null,Mc=null,jb=0,kb=0,Rb=R.width,$b=R.height,pc=0,qc=0,Db=new Uint8Array(16),eb=new Uint8Array(16),Bc=new THREE.Frustum,xc=new THREE.Matrix4,Dc=new THREE.Matrix4,Oa=new THREE.Vector3,za=new THREE.Vector3,gc=!0,Ac={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[],distances:[]},spot:{length:0,colors:[],positions:[],distances:[],directions:[],anglesCos:[],
 exponents:[]},hemi:{length:0,skyColors:[],groundColors:[],positions:[]}},m;try{var Qc={alpha:ba,depth:ga,stencil:Aa,antialias:O,premultipliedAlpha:Ma,preserveDrawingBuffer:ia};m=ka||R.getContext("webgl",Qc)||R.getContext("experimental-webgl",Qc);if(null===m)throw"Error creating WebGL context.";}catch(Vc){console.error(Vc)}void 0===m.getShaderPrecisionFormat&&(m.getShaderPrecisionFormat=function(){return{rangeMin:1,rangeMax:1,precision:1}});var ta=new THREE.WebGLExtensions(m);ta.get("OES_texture_float");
 ta.get("OES_texture_float_linear");ta.get("OES_standard_derivatives");Pa&&ta.get("EXT_frag_depth");m.clearColor(0,0,0,1);m.clearDepth(1);m.clearStencil(0);m.enable(m.DEPTH_TEST);m.depthFunc(m.LEQUAL);m.frontFace(m.CCW);m.cullFace(m.BACK);m.enable(m.CULL_FACE);m.enable(m.BLEND);m.blendEquation(m.FUNC_ADD);m.blendFunc(m.SRC_ALPHA,m.ONE_MINUS_SRC_ALPHA);m.viewport(jb,kb,Rb,$b);m.clearColor(sa.r,sa.g,sa.b,db);this.context=m;var Lc=m.getParameter(m.MAX_TEXTURE_IMAGE_UNITS),Wc=m.getParameter(m.MAX_VERTEX_TEXTURE_IMAGE_UNITS),
 Xc=m.getParameter(m.MAX_TEXTURE_SIZE),Uc=m.getParameter(m.MAX_CUBE_MAP_TEXTURE_SIZE),fc=0<Wc,tc=fc&&ta.get("OES_texture_float"),Yc=m.getShaderPrecisionFormat(m.VERTEX_SHADER,m.HIGH_FLOAT),Zc=m.getShaderPrecisionFormat(m.VERTEX_SHADER,m.MEDIUM_FLOAT);m.getShaderPrecisionFormat(m.VERTEX_SHADER,m.LOW_FLOAT);var $c=m.getShaderPrecisionFormat(m.FRAGMENT_SHADER,m.HIGH_FLOAT),ad=m.getShaderPrecisionFormat(m.FRAGMENT_SHADER,m.MEDIUM_FLOAT);m.getShaderPrecisionFormat(m.FRAGMENT_SHADER,m.LOW_FLOAT);var Kc=
@@ -538,23 +538,23 @@ f(b.attributes.color),m.vertexAttribPointer(b.attributes.color,3,m.FLOAT,!1,0,0)
 f.offsets;if(0===n.length)b&&(e(d,a,f,0),m.bindBuffer(m.ELEMENT_ARRAY_BUFFER,c.buffer)),m.drawElements(h,c.array.length,k,0),H.info.render.calls++,H.info.render.vertices+=c.array.length,H.info.render.faces+=c.array.length/3;else{b=!0;for(var p=0,q=n.length;p<q;p++){var r=n[p].index;b&&(e(d,a,f,r),m.bindBuffer(m.ELEMENT_ARRAY_BUFFER,c.buffer));m.drawElements(h,n[p].count,k,n[p].start*l);H.info.render.calls++;H.info.render.vertices+=n[p].count;H.info.render.faces+=n[p].count/3}}}else b&&e(d,a,f,0),
 d=f.attributes.position,m.drawArrays(h,0,d.array.length/3),H.info.render.calls++,H.info.render.vertices+=d.array.length/3,H.info.render.faces+=d.array.length/9;else if(h instanceof THREE.PointCloud)b&&e(d,a,f,0),d=f.attributes.position,m.drawArrays(m.POINTS,0,d.array.length/3),H.info.render.calls++,H.info.render.points+=d.array.length/3;else if(h instanceof THREE.Line)if(h=h.type===THREE.LineStrip?m.LINE_STRIP:m.LINES,Q(d.linewidth),c=f.attributes.index)if(c.array instanceof Uint32Array?(k=m.UNSIGNED_INT,
 l=4):(k=m.UNSIGNED_SHORT,l=2),n=f.offsets,0===n.length)b&&(e(d,a,f,0),m.bindBuffer(m.ELEMENT_ARRAY_BUFFER,c.buffer)),m.drawElements(h,c.array.length,k,0),H.info.render.calls++,H.info.render.vertices+=c.array.length;else for(1<n.length&&(b=!0),p=0,q=n.length;p<q;p++)r=n[p].index,b&&(e(d,a,f,r),m.bindBuffer(m.ELEMENT_ARRAY_BUFFER,c.buffer)),m.drawElements(h,n[p].count,k,n[p].start*l),H.info.render.calls++,H.info.render.vertices+=n[p].count;else b&&e(d,a,f,0),d=f.attributes.position,m.drawArrays(h,0,
-d.array.length/3),H.info.render.calls++,H.info.render.points+=d.array.length/3};this.renderBuffer=function(a,b,c,d,e,k){if(!1!==d.visible){var l,n;c=x(a,b,c,d,k);b=c.attributes;a=!1;c=16777215*e.id+2*c.id+(d.wireframe?1:0);c!==Ja&&(Ja=c,a=!0);a&&g();if(!d.morphTargets&&0<=b.position)a&&(m.bindBuffer(m.ARRAY_BUFFER,e.__webglVertexBuffer),f(b.position),m.vertexAttribPointer(b.position,3,m.FLOAT,!1,0,0));else if(k.morphTargetBase){c=d.program.attributes;-1!==k.morphTargetBase&&0<=c.position?(m.bindBuffer(m.ARRAY_BUFFER,
-e.__webglMorphTargetsBuffers[k.morphTargetBase]),f(c.position),m.vertexAttribPointer(c.position,3,m.FLOAT,!1,0,0)):0<=c.position&&(m.bindBuffer(m.ARRAY_BUFFER,e.__webglVertexBuffer),f(c.position),m.vertexAttribPointer(c.position,3,m.FLOAT,!1,0,0));if(k.morphTargetForcedOrder.length){var q=0;n=k.morphTargetForcedOrder;for(l=k.morphTargetInfluences;q<d.numSupportedMorphTargets&&q<n.length;)0<=c["morphTarget"+q]&&(m.bindBuffer(m.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[n[q]]),f(c["morphTarget"+q]),
-m.vertexAttribPointer(c["morphTarget"+q],3,m.FLOAT,!1,0,0)),0<=c["morphNormal"+q]&&d.morphNormals&&(m.bindBuffer(m.ARRAY_BUFFER,e.__webglMorphNormalsBuffers[n[q]]),f(c["morphNormal"+q]),m.vertexAttribPointer(c["morphNormal"+q],3,m.FLOAT,!1,0,0)),k.__webglMorphTargetInfluences[q]=l[n[q]],q++}else{n=[];l=k.morphTargetInfluences;var r,t=l.length;for(r=0;r<t;r++)q=l[r],0<q&&n.push([q,r]);n.length>d.numSupportedMorphTargets?(n.sort(p),n.length=d.numSupportedMorphTargets):n.length>d.numSupportedMorphNormals?
-n.sort(p):0===n.length&&n.push([0,0]);for(q=0;q<d.numSupportedMorphTargets;)n[q]?(r=n[q][1],0<=c["morphTarget"+q]&&(m.bindBuffer(m.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[r]),f(c["morphTarget"+q]),m.vertexAttribPointer(c["morphTarget"+q],3,m.FLOAT,!1,0,0)),0<=c["morphNormal"+q]&&d.morphNormals&&(m.bindBuffer(m.ARRAY_BUFFER,e.__webglMorphNormalsBuffers[r]),f(c["morphNormal"+q]),m.vertexAttribPointer(c["morphNormal"+q],3,m.FLOAT,!1,0,0)),k.__webglMorphTargetInfluences[q]=l[r]):k.__webglMorphTargetInfluences[q]=
-0,q++}null!==d.program.uniforms.morphTargetInfluences&&m.uniform1fv(d.program.uniforms.morphTargetInfluences,k.__webglMorphTargetInfluences)}if(a){if(e.__webglCustomAttributesList)for(l=0,n=e.__webglCustomAttributesList.length;l<n;l++)c=e.__webglCustomAttributesList[l],0<=b[c.buffer.belongsToAttribute]&&(m.bindBuffer(m.ARRAY_BUFFER,c.buffer),f(b[c.buffer.belongsToAttribute]),m.vertexAttribPointer(b[c.buffer.belongsToAttribute],c.size,m.FLOAT,!1,0,0));0<=b.color&&(0<k.geometry.colors.length||0<k.geometry.faces.length?
-(m.bindBuffer(m.ARRAY_BUFFER,e.__webglColorBuffer),f(b.color),m.vertexAttribPointer(b.color,3,m.FLOAT,!1,0,0)):void 0!==d.defaultAttributeValues&&m.vertexAttrib3fv(b.color,d.defaultAttributeValues.color));0<=b.normal&&(m.bindBuffer(m.ARRAY_BUFFER,e.__webglNormalBuffer),f(b.normal),m.vertexAttribPointer(b.normal,3,m.FLOAT,!1,0,0));0<=b.tangent&&(m.bindBuffer(m.ARRAY_BUFFER,e.__webglTangentBuffer),f(b.tangent),m.vertexAttribPointer(b.tangent,4,m.FLOAT,!1,0,0));0<=b.uv&&(k.geometry.faceVertexUvs[0]?
-(m.bindBuffer(m.ARRAY_BUFFER,e.__webglUVBuffer),f(b.uv),m.vertexAttribPointer(b.uv,2,m.FLOAT,!1,0,0)):void 0!==d.defaultAttributeValues&&m.vertexAttrib2fv(b.uv,d.defaultAttributeValues.uv));0<=b.uv2&&(k.geometry.faceVertexUvs[1]?(m.bindBuffer(m.ARRAY_BUFFER,e.__webglUV2Buffer),f(b.uv2),m.vertexAttribPointer(b.uv2,2,m.FLOAT,!1,0,0)):void 0!==d.defaultAttributeValues&&m.vertexAttrib2fv(b.uv2,d.defaultAttributeValues.uv2));d.skinning&&0<=b.skinIndex&&0<=b.skinWeight&&(m.bindBuffer(m.ARRAY_BUFFER,e.__webglSkinIndicesBuffer),
-f(b.skinIndex),m.vertexAttribPointer(b.skinIndex,4,m.FLOAT,!1,0,0),m.bindBuffer(m.ARRAY_BUFFER,e.__webglSkinWeightsBuffer),f(b.skinWeight),m.vertexAttribPointer(b.skinWeight,4,m.FLOAT,!1,0,0));0<=b.lineDistance&&(m.bindBuffer(m.ARRAY_BUFFER,e.__webglLineDistanceBuffer),f(b.lineDistance),m.vertexAttribPointer(b.lineDistance,1,m.FLOAT,!1,0,0))}h();k instanceof THREE.Mesh?(k=e.__typeArray===Uint32Array?m.UNSIGNED_INT:m.UNSIGNED_SHORT,d.wireframe?(Q(d.wireframeLinewidth),a&&m.bindBuffer(m.ELEMENT_ARRAY_BUFFER,
-e.__webglLineBuffer),m.drawElements(m.LINES,e.__webglLineCount,k,0)):(a&&m.bindBuffer(m.ELEMENT_ARRAY_BUFFER,e.__webglFaceBuffer),m.drawElements(m.TRIANGLES,e.__webglFaceCount,k,0)),H.info.render.calls++,H.info.render.vertices+=e.__webglFaceCount,H.info.render.faces+=e.__webglFaceCount/3):k instanceof THREE.Line?(k=k.type===THREE.LineStrip?m.LINE_STRIP:m.LINES,Q(d.linewidth),m.drawArrays(k,0,e.__webglLineCount),H.info.render.calls++):k instanceof THREE.PointCloud&&(m.drawArrays(m.POINTS,0,e.__webglParticleCount),
-H.info.render.calls++,H.info.render.points+=e.__webglParticleCount)}};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=a.fog;Bb=-1;Yb=null;gc=!0;!0===a.autoUpdate&&a.updateMatrixWorld();void 0===b.parent&&b.updateMatrixWorld();a.traverse(function(a){a instanceof THREE.SkinnedMesh&&a.skeleton.update()});b.matrixWorldInverse.getInverse(b.matrixWorld);xc.multiplyMatrices(b.projectionMatrix,
-b.matrixWorldInverse);Bc.setFromMatrix(xc);Za.length=0;Kb.length=0;pb.length=0;l(a,a);!0===H.sortObjects&&(Kb.sort(k),pb.sort(n));r(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);d=0;for(e=lb.length;d<e;d++)f=lb[d],g=f.object,g.visible&&(B(g,b),s(f));a.overrideMaterial?(d=a.overrideMaterial,this.setBlending(d.blending,
-d.blendEquation,d.blendSrc,d.blendDst),this.setDepthTest(d.depthTest),this.setDepthWrite(d.depthWrite),F(d.polygonOffset,d.polygonOffsetFactor,d.polygonOffsetUnits),q(Kb,b,Za,h,!0,d),q(pb,b,Za,h,!0,d),t(lb,"",b,Za,h,!1,d)):(d=null,this.setBlending(THREE.NoBlending),q(Kb,b,Za,h,!1,d),t(lb,"opaque",b,Za,h,!1,d),q(pb,b,Za,h,!0,d),t(lb,"transparent",b,Za,h,!0,d));r(this.renderPluginsPost,a,b);c&&c.generateMipmaps&&c.minFilter!==THREE.NearestFilter&&c.minFilter!==THREE.LinearFilter&&T(c);this.setDepthTest(!0);
-this.setDepthWrite(!0)}};this.renderImmediateObject=function(a,b,c,d,e){var f=x(a,b,c,d,e);Ja=-1;H.setMaterialFaces(d);e.immediateRenderCallback?e.immediateRenderCallback(f,m,Bc):e.render(function(a){H.renderBufferImmediate(a,f,d)})};var sb={},rc=0;this.initMaterial=function(){console.warn("THREE.WebGLRenderer: .initMaterial() has been removed.")};this.setFaceCulling=function(a,b){a===THREE.CullFaceNone?m.disable(m.CULL_FACE):(b===THREE.FrontFaceDirectionCW?m.frontFace(m.CW):m.frontFace(m.CCW),a===
-THREE.CullFaceBack?m.cullFace(m.BACK):a===THREE.CullFaceFront?m.cullFace(m.FRONT):m.cullFace(m.FRONT_AND_BACK),m.enable(m.CULL_FACE))};this.setMaterialFaces=function(a){var b=a.side===THREE.DoubleSide;a=a.side===THREE.BackSide;Mb!==b&&(b?m.disable(m.CULL_FACE):m.enable(m.CULL_FACE),Mb=b);Nb!==a&&(a?m.frontFace(m.CW):m.frontFace(m.CCW),Nb=a)};this.setDepthTest=function(a){Qb!==a&&(a?m.enable(m.DEPTH_TEST):m.disable(m.DEPTH_TEST),Qb=a)};this.setDepthWrite=function(a){Zb!==a&&(m.depthMask(a),Zb=a)};
-this.setBlending=function(a,b,c,d){a!==Ob&&(a===THREE.NoBlending?m.disable(m.BLEND):a===THREE.AdditiveBlending?(m.enable(m.BLEND),m.blendEquation(m.FUNC_ADD),m.blendFunc(m.SRC_ALPHA,m.ONE)):a===THREE.SubtractiveBlending?(m.enable(m.BLEND),m.blendEquation(m.FUNC_ADD),m.blendFunc(m.ZERO,m.ONE_MINUS_SRC_COLOR)):a===THREE.MultiplyBlending?(m.enable(m.BLEND),m.blendEquation(m.FUNC_ADD),m.blendFunc(m.ZERO,m.SRC_COLOR)):a===THREE.CustomBlending?m.enable(m.BLEND):(m.enable(m.BLEND),m.blendEquationSeparate(m.FUNC_ADD,
-m.FUNC_ADD),m.blendFuncSeparate(m.SRC_ALPHA,m.ONE_MINUS_SRC_ALPHA,m.ONE,m.ONE_MINUS_SRC_ALPHA)),Ob=a);if(a===THREE.CustomBlending){if(b!==tb&&(m.blendEquation(I(b)),tb=b),c!==Pb||d!==rb)m.blendFunc(I(c),I(d)),Pb=c,rb=d}else rb=Pb=tb=null};this.uploadTexture=function(a){void 0===a.__webglInit&&(a.__webglInit=!0,a.addEventListener("dispose",jc),a.__webglTexture=m.createTexture(),H.info.memory.textures++);m.bindTexture(m.TEXTURE_2D,a.__webglTexture);m.pixelStorei(m.UNPACK_FLIP_Y_WEBGL,a.flipY);m.pixelStorei(m.UNPACK_PREMULTIPLY_ALPHA_WEBGL,
-a.premultiplyAlpha);m.pixelStorei(m.UNPACK_ALIGNMENT,a.unpackAlignment);a.image=M(a.image,Xc);var b=a.image,c=THREE.Math.isPowerOfTwo(b.width)&&THREE.Math.isPowerOfTwo(b.height),d=I(a.format),e=I(a.type);K(m.TEXTURE_2D,a,c);var f=a.mipmaps;if(a instanceof THREE.DataTexture)if(0<f.length&&c){for(var g=0,h=f.length;g<h;g++)b=f[g],m.texImage2D(m.TEXTURE_2D,g,d,b.width,b.height,0,d,e,b.data);a.generateMipmaps=!1}else m.texImage2D(m.TEXTURE_2D,0,d,b.width,b.height,0,d,e,b.data);else if(a instanceof THREE.CompressedTexture)for(g=
+d.array.length/3),H.info.render.calls++,H.info.render.points+=d.array.length/3};this.renderBuffer=function(a,b,c,d,e,k){if(!1!==d.visible){c=x(a,b,c,d,k);b=c.attributes;a=!1;c=16777215*e.id+2*c.id+(d.wireframe?1:0);c!==Ja&&(Ja=c,a=!0);a&&g();if(!d.morphTargets&&0<=b.position)a&&(m.bindBuffer(m.ARRAY_BUFFER,e.__webglVertexBuffer),f(b.position),m.vertexAttribPointer(b.position,3,m.FLOAT,!1,0,0));else if(k.morphTargetBase){c=d.program.attributes;-1!==k.morphTargetBase&&0<=c.position?(m.bindBuffer(m.ARRAY_BUFFER,
+e.__webglMorphTargetsBuffers[k.morphTargetBase]),f(c.position),m.vertexAttribPointer(c.position,3,m.FLOAT,!1,0,0)):0<=c.position&&(m.bindBuffer(m.ARRAY_BUFFER,e.__webglVertexBuffer),f(c.position),m.vertexAttribPointer(c.position,3,m.FLOAT,!1,0,0));if(k.morphTargetForcedOrder.length)for(var l=0,n=k.morphTargetForcedOrder,q=k.morphTargetInfluences;l<d.numSupportedMorphTargets&&l<n.length;)0<=c["morphTarget"+l]&&(m.bindBuffer(m.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[n[l]]),f(c["morphTarget"+l]),m.vertexAttribPointer(c["morphTarget"+
+l],3,m.FLOAT,!1,0,0)),0<=c["morphNormal"+l]&&d.morphNormals&&(m.bindBuffer(m.ARRAY_BUFFER,e.__webglMorphNormalsBuffers[n[l]]),f(c["morphNormal"+l]),m.vertexAttribPointer(c["morphNormal"+l],3,m.FLOAT,!1,0,0)),k.__webglMorphTargetInfluences[l]=q[n[l]],l++;else{var n=[],q=k.morphTargetInfluences,r,t=q.length;for(r=0;r<t;r++)l=q[r],0<l&&n.push([l,r]);n.length>d.numSupportedMorphTargets?(n.sort(p),n.length=d.numSupportedMorphTargets):n.length>d.numSupportedMorphNormals?n.sort(p):0===n.length&&n.push([0,
+0]);for(l=0;l<d.numSupportedMorphTargets;)n[l]?(r=n[l][1],0<=c["morphTarget"+l]&&(m.bindBuffer(m.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[r]),f(c["morphTarget"+l]),m.vertexAttribPointer(c["morphTarget"+l],3,m.FLOAT,!1,0,0)),0<=c["morphNormal"+l]&&d.morphNormals&&(m.bindBuffer(m.ARRAY_BUFFER,e.__webglMorphNormalsBuffers[r]),f(c["morphNormal"+l]),m.vertexAttribPointer(c["morphNormal"+l],3,m.FLOAT,!1,0,0)),k.__webglMorphTargetInfluences[l]=q[r]):k.__webglMorphTargetInfluences[l]=0,l++}null!==d.program.uniforms.morphTargetInfluences&&
+m.uniform1fv(d.program.uniforms.morphTargetInfluences,k.__webglMorphTargetInfluences)}if(a){if(e.__webglCustomAttributesList)for(c=0,q=e.__webglCustomAttributesList.length;c<q;c++)n=e.__webglCustomAttributesList[c],0<=b[n.buffer.belongsToAttribute]&&(m.bindBuffer(m.ARRAY_BUFFER,n.buffer),f(b[n.buffer.belongsToAttribute]),m.vertexAttribPointer(b[n.buffer.belongsToAttribute],n.size,m.FLOAT,!1,0,0));0<=b.color&&(0<k.geometry.colors.length||0<k.geometry.faces.length?(m.bindBuffer(m.ARRAY_BUFFER,e.__webglColorBuffer),
+f(b.color),m.vertexAttribPointer(b.color,3,m.FLOAT,!1,0,0)):void 0!==d.defaultAttributeValues&&m.vertexAttrib3fv(b.color,d.defaultAttributeValues.color));0<=b.normal&&(m.bindBuffer(m.ARRAY_BUFFER,e.__webglNormalBuffer),f(b.normal),m.vertexAttribPointer(b.normal,3,m.FLOAT,!1,0,0));0<=b.tangent&&(m.bindBuffer(m.ARRAY_BUFFER,e.__webglTangentBuffer),f(b.tangent),m.vertexAttribPointer(b.tangent,4,m.FLOAT,!1,0,0));0<=b.uv&&(k.geometry.faceVertexUvs[0]?(m.bindBuffer(m.ARRAY_BUFFER,e.__webglUVBuffer),f(b.uv),
+m.vertexAttribPointer(b.uv,2,m.FLOAT,!1,0,0)):void 0!==d.defaultAttributeValues&&m.vertexAttrib2fv(b.uv,d.defaultAttributeValues.uv));0<=b.uv2&&(k.geometry.faceVertexUvs[1]?(m.bindBuffer(m.ARRAY_BUFFER,e.__webglUV2Buffer),f(b.uv2),m.vertexAttribPointer(b.uv2,2,m.FLOAT,!1,0,0)):void 0!==d.defaultAttributeValues&&m.vertexAttrib2fv(b.uv2,d.defaultAttributeValues.uv2));d.skinning&&0<=b.skinIndex&&0<=b.skinWeight&&(m.bindBuffer(m.ARRAY_BUFFER,e.__webglSkinIndicesBuffer),f(b.skinIndex),m.vertexAttribPointer(b.skinIndex,
+4,m.FLOAT,!1,0,0),m.bindBuffer(m.ARRAY_BUFFER,e.__webglSkinWeightsBuffer),f(b.skinWeight),m.vertexAttribPointer(b.skinWeight,4,m.FLOAT,!1,0,0));0<=b.lineDistance&&(m.bindBuffer(m.ARRAY_BUFFER,e.__webglLineDistanceBuffer),f(b.lineDistance),m.vertexAttribPointer(b.lineDistance,1,m.FLOAT,!1,0,0))}h();k instanceof THREE.Mesh?(k=e.__typeArray===Uint32Array?m.UNSIGNED_INT:m.UNSIGNED_SHORT,d.wireframe?(Q(d.wireframeLinewidth),a&&m.bindBuffer(m.ELEMENT_ARRAY_BUFFER,e.__webglLineBuffer),m.drawElements(m.LINES,
+e.__webglLineCount,k,0)):(a&&m.bindBuffer(m.ELEMENT_ARRAY_BUFFER,e.__webglFaceBuffer),m.drawElements(m.TRIANGLES,e.__webglFaceCount,k,0)),H.info.render.calls++,H.info.render.vertices+=e.__webglFaceCount,H.info.render.faces+=e.__webglFaceCount/3):k instanceof THREE.Line?(k=k.type===THREE.LineStrip?m.LINE_STRIP:m.LINES,Q(d.linewidth),m.drawArrays(k,0,e.__webglLineCount),H.info.render.calls++):k instanceof THREE.PointCloud&&(m.drawArrays(m.POINTS,0,e.__webglParticleCount),H.info.render.calls++,H.info.render.points+=
+e.__webglParticleCount)}};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=a.fog;Bb=-1;Yb=null;gc=!0;!0===a.autoUpdate&&a.updateMatrixWorld();void 0===b.parent&&b.updateMatrixWorld();a.traverse(function(a){a instanceof THREE.SkinnedMesh&&a.skeleton.update()});b.matrixWorldInverse.getInverse(b.matrixWorld);xc.multiplyMatrices(b.projectionMatrix,b.matrixWorldInverse);Bc.setFromMatrix(xc);
+Za.length=0;Kb.length=0;pb.length=0;l(a,a);!0===H.sortObjects&&(Kb.sort(k),pb.sort(n));r(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);d=0;for(var f=lb.length;d<f;d++){var g=lb[d],h=g.object;h.visible&&(B(h,b),s(g))}a.overrideMaterial?(d=a.overrideMaterial,this.setBlending(d.blending,d.blendEquation,d.blendSrc,
+d.blendDst),this.setDepthTest(d.depthTest),this.setDepthWrite(d.depthWrite),F(d.polygonOffset,d.polygonOffsetFactor,d.polygonOffsetUnits),q(Kb,b,Za,e,!0,d),q(pb,b,Za,e,!0,d),t(lb,"",b,Za,e,!1,d)):(d=null,this.setBlending(THREE.NoBlending),q(Kb,b,Za,e,!1,d),t(lb,"opaque",b,Za,e,!1,d),q(pb,b,Za,e,!0,d),t(lb,"transparent",b,Za,e,!0,d));r(this.renderPluginsPost,a,b);c&&c.generateMipmaps&&c.minFilter!==THREE.NearestFilter&&c.minFilter!==THREE.LinearFilter&&T(c);this.setDepthTest(!0);this.setDepthWrite(!0)}};
+this.renderImmediateObject=function(a,b,c,d,e){var f=x(a,b,c,d,e);Ja=-1;H.setMaterialFaces(d);e.immediateRenderCallback?e.immediateRenderCallback(f,m,Bc):e.render(function(a){H.renderBufferImmediate(a,f,d)})};var sb={},rc=0;this.initMaterial=function(){console.warn("THREE.WebGLRenderer: .initMaterial() has been removed.")};this.setFaceCulling=function(a,b){a===THREE.CullFaceNone?m.disable(m.CULL_FACE):(b===THREE.FrontFaceDirectionCW?m.frontFace(m.CW):m.frontFace(m.CCW),a===THREE.CullFaceBack?m.cullFace(m.BACK):
+a===THREE.CullFaceFront?m.cullFace(m.FRONT):m.cullFace(m.FRONT_AND_BACK),m.enable(m.CULL_FACE))};this.setMaterialFaces=function(a){var b=a.side===THREE.DoubleSide;a=a.side===THREE.BackSide;Mb!==b&&(b?m.disable(m.CULL_FACE):m.enable(m.CULL_FACE),Mb=b);Nb!==a&&(a?m.frontFace(m.CW):m.frontFace(m.CCW),Nb=a)};this.setDepthTest=function(a){Qb!==a&&(a?m.enable(m.DEPTH_TEST):m.disable(m.DEPTH_TEST),Qb=a)};this.setDepthWrite=function(a){Zb!==a&&(m.depthMask(a),Zb=a)};this.setBlending=function(a,b,c,d){a!==
+Ob&&(a===THREE.NoBlending?m.disable(m.BLEND):a===THREE.AdditiveBlending?(m.enable(m.BLEND),m.blendEquation(m.FUNC_ADD),m.blendFunc(m.SRC_ALPHA,m.ONE)):a===THREE.SubtractiveBlending?(m.enable(m.BLEND),m.blendEquation(m.FUNC_ADD),m.blendFunc(m.ZERO,m.ONE_MINUS_SRC_COLOR)):a===THREE.MultiplyBlending?(m.enable(m.BLEND),m.blendEquation(m.FUNC_ADD),m.blendFunc(m.ZERO,m.SRC_COLOR)):a===THREE.CustomBlending?m.enable(m.BLEND):(m.enable(m.BLEND),m.blendEquationSeparate(m.FUNC_ADD,m.FUNC_ADD),m.blendFuncSeparate(m.SRC_ALPHA,
+m.ONE_MINUS_SRC_ALPHA,m.ONE,m.ONE_MINUS_SRC_ALPHA)),Ob=a);if(a===THREE.CustomBlending){if(b!==tb&&(m.blendEquation(I(b)),tb=b),c!==Pb||d!==rb)m.blendFunc(I(c),I(d)),Pb=c,rb=d}else rb=Pb=tb=null};this.uploadTexture=function(a){void 0===a.__webglInit&&(a.__webglInit=!0,a.addEventListener("dispose",jc),a.__webglTexture=m.createTexture(),H.info.memory.textures++);m.bindTexture(m.TEXTURE_2D,a.__webglTexture);m.pixelStorei(m.UNPACK_FLIP_Y_WEBGL,a.flipY);m.pixelStorei(m.UNPACK_PREMULTIPLY_ALPHA_WEBGL,a.premultiplyAlpha);
+m.pixelStorei(m.UNPACK_ALIGNMENT,a.unpackAlignment);a.image=M(a.image,Xc);var b=a.image,c=THREE.Math.isPowerOfTwo(b.width)&&THREE.Math.isPowerOfTwo(b.height),d=I(a.format),e=I(a.type);K(m.TEXTURE_2D,a,c);var f=a.mipmaps;if(a instanceof THREE.DataTexture)if(0<f.length&&c){for(var g=0,h=f.length;g<h;g++)b=f[g],m.texImage2D(m.TEXTURE_2D,g,d,b.width,b.height,0,d,e,b.data);a.generateMipmaps=!1}else m.texImage2D(m.TEXTURE_2D,0,d,b.width,b.height,0,d,e,b.data);else if(a instanceof THREE.CompressedTexture)for(g=
 0,h=f.length;g<h;g++)b=f[g],a.format!==THREE.RGBAFormat&&a.format!==THREE.RGBFormat?-1<Kc().indexOf(d)?m.compressedTexImage2D(m.TEXTURE_2D,g,d,b.width,b.height,0,b.data):console.warn("Attempt to load unsupported compressed texture format"):m.texImage2D(m.TEXTURE_2D,g,d,b.width,b.height,0,d,e,b.data);else if(0<f.length&&c){g=0;for(h=f.length;g<h;g++)b=f[g],m.texImage2D(m.TEXTURE_2D,g,d,d,e,b);a.generateMipmaps=!1}else m.texImage2D(m.TEXTURE_2D,0,d,d,e,a.image);a.generateMipmaps&&c&&m.generateMipmap(m.TEXTURE_2D);
 a.needsUpdate=!1;if(a.onUpdate)a.onUpdate()};this.setTexture=function(a,b){m.activeTexture(m.TEXTURE0+b);a.needsUpdate?H.uploadTexture(a):m.bindTexture(m.TEXTURE_2D,a.__webglTexture)};this.setRenderTarget=function(a){var b=a instanceof THREE.WebGLRenderTargetCube;if(a&&void 0===a.__webglFramebuffer){void 0===a.depthBuffer&&(a.depthBuffer=!0);void 0===a.stencilBuffer&&(a.stencilBuffer=!0);a.addEventListener("dispose",Tc);a.__webglTexture=m.createTexture();H.info.memory.textures++;var c=THREE.Math.isPowerOfTwo(a.width)&&
 THREE.Math.isPowerOfTwo(a.height),d=I(a.format),e=I(a.type);if(b){a.__webglFramebuffer=[];a.__webglRenderbuffer=[];m.bindTexture(m.TEXTURE_CUBE_MAP,a.__webglTexture);K(m.TEXTURE_CUBE_MAP,a,c);for(var f=0;6>f;f++){a.__webglFramebuffer[f]=m.createFramebuffer();a.__webglRenderbuffer[f]=m.createRenderbuffer();m.texImage2D(m.TEXTURE_CUBE_MAP_POSITIVE_X+f,0,d,a.width,a.height,0,d,e,null);var g=a,h=m.TEXTURE_CUBE_MAP_POSITIVE_X+f;m.bindFramebuffer(m.FRAMEBUFFER,a.__webglFramebuffer[f]);m.framebufferTexture2D(m.FRAMEBUFFER,