Browse Source

Fixed implied globals and added few missing semicolons

Szymon Nowak 14 years ago
parent
commit
5c8a089669

+ 2 - 2
src/core/Color.js

@@ -7,7 +7,7 @@ THREE.Color = function ( hex ) {
 	this.autoUpdate = true;
 	this.autoUpdate = true;
 	this.setHex( hex );
 	this.setHex( hex );
 
 
-}
+};
 
 
 THREE.Color.prototype = {
 THREE.Color.prototype = {
 
 
@@ -65,7 +65,7 @@ THREE.Color.prototype = {
 
 
 	},
 	},
 
 
-	
+
 	toString: function () {
 	toString: function () {
 
 
 		return 'THREE.Color ( r: ' + this.r + ', g: ' + this.g + ', b: ' + this.b + ', hex: ' + this.hex + ' )';
 		return 'THREE.Color ( r: ' + this.r + ', g: ' + this.g + ', b: ' + this.b + ', hex: ' + this.hex + ' )';

+ 3 - 3
src/core/Geometry.js

@@ -113,7 +113,7 @@ THREE.Geometry.prototype = {
 
 
 	computeVertexNormals: function () {
 	computeVertexNormals: function () {
 
 
-		var v, vertices = [],
+		var v, vl, vertices = [],
 		f, fl, face;
 		f, fl, face;
 
 
 		for ( v = 0, vl = this.vertices.length; v < vl; v ++ ) {
 		for ( v = 0, vl = this.vertices.length; v < vl; v ++ ) {
@@ -179,7 +179,7 @@ THREE.Geometry.prototype = {
 
 
 		var f, fl, v, vl, face, uv, vA, vB, vC, uvA, uvB, uvC,
 		var f, fl, v, vl, face, uv, vA, vB, vC, uvA, uvB, uvC,
 			x1, x2, y1, y2, z1, z2,
 			x1, x2, y1, y2, z1, z2,
-			s1, s2, t1, t2, r, t, n,
+			s1, s2, t1, t2, r, t, test,
 			tan1 = [], tan2 = [],
 			tan1 = [], tan2 = [],
 			sdir = new THREE.Vector3(), tdir = new THREE.Vector3(),
 			sdir = new THREE.Vector3(), tdir = new THREE.Vector3(),
 			tmp = new THREE.Vector3(), tmp2 = new THREE.Vector3(),
 			tmp = new THREE.Vector3(), tmp2 = new THREE.Vector3(),
@@ -355,7 +355,7 @@ THREE.Geometry.prototype = {
 		// which could then use vertex color attributes instead of each being
 		// which could then use vertex color attributes instead of each being
 		// in its separate VBO
 		// in its separate VBO
 
 
-		var i, l, f, fl, face, material, vertices, mhash, ghash, hash_map = {};
+		var i, l, f, fl, face, material, materials, vertices, mhash, ghash, hash_map = {};
 
 
 		function materialHash( material ) {
 		function materialHash( material ) {
 
 

+ 1 - 1
src/core/Matrix3.js

@@ -18,4 +18,4 @@ THREE.Matrix3.prototype = {
 
 
 	}
 	}
 
 
-}
+};

+ 1 - 1
src/core/UV.js

@@ -24,4 +24,4 @@ THREE.UV.prototype = {
 
 
 	}
 	}
 
 
-}
+};

+ 1 - 1
src/core/Vertex.js

@@ -16,7 +16,7 @@ THREE.Vertex = function ( position, normal ) {
 
 
 	this.__visible = true;
 	this.__visible = true;
 
 
-}
+};
 
 
 THREE.Vertex.prototype = {
 THREE.Vertex.prototype = {
 
 

+ 3 - 3
src/extras/GeometryUtils.js

@@ -28,7 +28,7 @@ var GeometryUtils = {
 
 
 		}
 		}
 
 
-		for ( var i = 0, il = faces2.length; i < il; i ++ ) {
+		for ( i = 0, il = faces2.length; i < il; i ++ ) {
 
 
 			var face = faces2[ i ], faceCopy, normal,
 			var face = faces2[ i ], faceCopy, normal,
 			faceVertexNormals = face.vertexNormals;
 			faceVertexNormals = face.vertexNormals;
@@ -59,7 +59,7 @@ var GeometryUtils = {
 
 
 		}
 		}
 
 
-		for ( var i = 0, il = uvs2.length; i < il; i ++ ) {
+		for ( i = 0, il = uvs2.length; i < il; i ++ ) {
 
 
 			var uv = uvs2[ i ], uvCopy = [];
 			var uv = uvs2[ i ], uvCopy = [];
 
 
@@ -75,4 +75,4 @@ var GeometryUtils = {
 
 
 	}
 	}
 
 
-}
+};

+ 2 - 2
src/extras/ImageUtils.js

@@ -20,7 +20,7 @@ var ImageUtils = {
 
 
 			images[ i ] = new Image();
 			images[ i ] = new Image();
 			images[ i ].loaded = 0;
 			images[ i ].loaded = 0;
-			images[ i ].onload = function () { images.loadCount += 1; this.loaded = true; }
+			images[ i ].onload = function () { images.loadCount += 1; this.loaded = true; };
 			images[ i ].src = array[ i ];
 			images[ i ].src = array[ i ];
 
 
 		}
 		}
@@ -29,4 +29,4 @@ var ImageUtils = {
 
 
 	}
 	}
 
 
-}
+};

+ 19 - 19
src/extras/SceneUtils.js

@@ -1,7 +1,7 @@
 var SceneUtils = {
 var SceneUtils = {
-	
+
 	addMesh: function ( scene, geometry, scale, x, y, z, rx, ry, rz, material ) {
 	addMesh: function ( scene, geometry, scale, x, y, z, rx, ry, rz, material ) {
-		
+
 		var mesh = new THREE.Mesh( geometry, material );
 		var mesh = new THREE.Mesh( geometry, material );
 		mesh.scale.x = mesh.scale.y = mesh.scale.z = scale;
 		mesh.scale.x = mesh.scale.y = mesh.scale.z = scale;
 		mesh.position.x = x;
 		mesh.position.x = x;
@@ -13,30 +13,30 @@ var SceneUtils = {
 		scene.addObject( mesh );
 		scene.addObject( mesh );
 
 
 		return mesh;
 		return mesh;
-		
-	},	
+
+	},
 
 
 	addPanoramaCubeWebGL: function ( scene, size, textureCube ) {
 	addPanoramaCubeWebGL: function ( scene, size, textureCube ) {
-		
+
 		var shader = ShaderUtils.lib["cube"];
 		var shader = ShaderUtils.lib["cube"];
 		shader.uniforms["tCube"].texture = textureCube;
 		shader.uniforms["tCube"].texture = textureCube;
-		
-		var material = new THREE.MeshShaderMaterial( { fragment_shader: shader.fragment_shader, 
-													   vertex_shader: shader.vertex_shader, 
+
+		var material = new THREE.MeshShaderMaterial( { fragment_shader: shader.fragment_shader,
+													   vertex_shader: shader.vertex_shader,
 													   uniforms: shader.uniforms
 													   uniforms: shader.uniforms
 													} ),
 													} ),
-													
+
 			mesh = new THREE.Mesh( new Cube( size, size, size, 1, 1, null, true ), material );
 			mesh = new THREE.Mesh( new Cube( size, size, size, 1, 1, null, true ), material );
-		
+
 		scene.addObject( mesh );
 		scene.addObject( mesh );
-		
+
 		return mesh;
 		return mesh;
-		
+
 	},
 	},
 
 
 	addPanoramaCube: function( scene, size, images ) {
 	addPanoramaCube: function( scene, size, images ) {
-	
-		var materials = [];
+
+		var materials = [], mesh;
 		materials.push( new THREE.MeshBasicMaterial( { map: new THREE.Texture( images[0] ) } ) );
 		materials.push( new THREE.MeshBasicMaterial( { map: new THREE.Texture( images[0] ) } ) );
 		materials.push( new THREE.MeshBasicMaterial( { map: new THREE.Texture( images[1] ) } ) );
 		materials.push( new THREE.MeshBasicMaterial( { map: new THREE.Texture( images[1] ) } ) );
 		materials.push( new THREE.MeshBasicMaterial( { map: new THREE.Texture( images[2] ) } ) );
 		materials.push( new THREE.MeshBasicMaterial( { map: new THREE.Texture( images[2] ) } ) );
@@ -46,14 +46,14 @@ var SceneUtils = {
 
 
 		mesh = new THREE.Mesh( new Cube( size, size, size, 1, 1, materials, true ), new THREE.MeshFaceMaterial() );
 		mesh = new THREE.Mesh( new Cube( size, size, size, 1, 1, materials, true ), new THREE.MeshFaceMaterial() );
 		scene.addObject( mesh );
 		scene.addObject( mesh );
-		
+
 		return mesh;
 		return mesh;
 
 
 	},
 	},
 
 
 	addPanoramaCubePlanes: function ( scene, size, images ) {
 	addPanoramaCubePlanes: function ( scene, size, images ) {
 
 
-		
+
 		var hsize = size/2, plane = new Plane( size, size ), pi2 = Math.PI/2, pi = Math.PI;
 		var hsize = size/2, plane = new Plane( size, size ), pi2 = Math.PI/2, pi = Math.PI;
 
 
 		SceneUtils.addMesh( scene, plane, 1,      0,     0,  -hsize,  0,      0,  0, new THREE.MeshBasicMaterial( { map: new THREE.Texture( images[5] ) } ) );
 		SceneUtils.addMesh( scene, plane, 1,      0,     0,  -hsize,  0,      0,  0, new THREE.MeshBasicMaterial( { map: new THREE.Texture( images[5] ) } ) );
@@ -61,7 +61,7 @@ var SceneUtils = {
 		SceneUtils.addMesh( scene, plane, 1,  hsize,     0,       0,  0,   -pi2,  0, new THREE.MeshBasicMaterial( { map: new THREE.Texture( images[1] ) } ) );
 		SceneUtils.addMesh( scene, plane, 1,  hsize,     0,       0,  0,   -pi2,  0, new THREE.MeshBasicMaterial( { map: new THREE.Texture( images[1] ) } ) );
 		SceneUtils.addMesh( scene, plane, 1,     0,  hsize,       0,  pi2,    0, pi, new THREE.MeshBasicMaterial( { map: new THREE.Texture( images[2] ) } ) );
 		SceneUtils.addMesh( scene, plane, 1,     0,  hsize,       0,  pi2,    0, pi, new THREE.MeshBasicMaterial( { map: new THREE.Texture( images[2] ) } ) );
 		SceneUtils.addMesh( scene, plane, 1,     0, -hsize,       0, -pi2,    0, pi, new THREE.MeshBasicMaterial( { map: new THREE.Texture( images[3] ) } ) );
 		SceneUtils.addMesh( scene, plane, 1,     0, -hsize,       0, -pi2,    0, pi, new THREE.MeshBasicMaterial( { map: new THREE.Texture( images[3] ) } ) );
-		
+
 	}
 	}
-	
-}
+
+};

+ 3 - 3
src/extras/primitives/Cube.js

@@ -64,7 +64,7 @@ var Cube = function ( width, height, depth, segments_width, segments_height, mat
 
 
 	function buildPlane( u, v, udir, vdir, width, height, depth, material ) {
 	function buildPlane( u, v, udir, vdir, width, height, depth, material ) {
 
 
-		var w,
+		var w, ix, iy,
 		gridX = segments_width || 1,
 		gridX = segments_width || 1,
 		gridY = segments_height || 1,
 		gridY = segments_height || 1,
 		gridX1 = gridX + 1,
 		gridX1 = gridX + 1,
@@ -160,7 +160,7 @@ var Cube = function ( width, height, depth, segments_width, segments_height, mat
 
 
 		}
 		}
 
 
-		for ( var i = 0, l = scope.faces.length; i < l; i ++ ) {
+		for ( i = 0, il = scope.faces.length; i < il; i ++ ) {
 
 
 			var face = scope.faces[ i ];
 			var face = scope.faces[ i ];
 
 
@@ -179,7 +179,7 @@ var Cube = function ( width, height, depth, segments_width, segments_height, mat
 	this.computeFaceNormals();
 	this.computeFaceNormals();
 	this.sortFacesByMaterial();
 	this.sortFacesByMaterial();
 
 
-}
+};
 
 
 Cube.prototype = new THREE.Geometry();
 Cube.prototype = new THREE.Geometry();
 Cube.prototype.constructor = Cube;
 Cube.prototype.constructor = Cube;

+ 1 - 1
src/extras/primitives/Cylinder.js

@@ -76,7 +76,7 @@ var Cylinder = function ( numSegs, topRad, botRad, height, topOffset, botOffset
 
 
 	}
 	}
 
 
-}
+};
 
 
 Cylinder.prototype = new THREE.Geometry();
 Cylinder.prototype = new THREE.Geometry();
 Cylinder.prototype.constructor = Cylinder;
 Cylinder.prototype.constructor = Cylinder;

+ 1 - 1
src/extras/primitives/Plane.js

@@ -56,7 +56,7 @@ var Plane = function ( width, height, segments_width, segments_height ) {
 	this.computeFaceNormals();
 	this.computeFaceNormals();
 	this.sortFacesByMaterial();
 	this.sortFacesByMaterial();
 
 
-}
+};
 
 
 Plane.prototype = new THREE.Geometry();
 Plane.prototype = new THREE.Geometry();
 Plane.prototype.constructor = Plane;
 Plane.prototype.constructor = Plane;

+ 1 - 1
src/extras/primitives/Sphere.js

@@ -110,7 +110,7 @@ var Sphere = function ( radius, segments_width, segments_height ) {
 
 
 	this.boundingSphere = { radius: radius };
 	this.boundingSphere = { radius: radius };
 
 
-}
+};
 
 
 Sphere.prototype = new THREE.Geometry();
 Sphere.prototype = new THREE.Geometry();
 Sphere.prototype.constructor = Sphere;
 Sphere.prototype.constructor = Sphere;

+ 18 - 18
src/materials/Uniforms.js

@@ -1,35 +1,35 @@
 var Uniforms = {
 var Uniforms = {
-	
+
 	clone: function( uniforms_src ) {
 	clone: function( uniforms_src ) {
-		
-		var u, p, parameter, uniforms_dst = {};
-		
+
+		var u, p, parameter, parameter_src, uniforms_dst = {};
+
 		for ( u in uniforms_src ) {
 		for ( u in uniforms_src ) {
-			
+
 			uniforms_dst[ u ] = {};
 			uniforms_dst[ u ] = {};
-			
+
 			for ( p in uniforms_src[ u ] ) {
 			for ( p in uniforms_src[ u ] ) {
-				
+
 				parameter_src = uniforms_src[ u ][ p ];
 				parameter_src = uniforms_src[ u ][ p ];
-				
+
 				if ( parameter_src instanceof THREE.Color ||
 				if ( parameter_src instanceof THREE.Color ||
 					 parameter_src instanceof THREE.Vector3 ||
 					 parameter_src instanceof THREE.Vector3 ||
 					 parameter_src instanceof THREE.Texture ) {
 					 parameter_src instanceof THREE.Texture ) {
-				
+
 					uniforms_dst[ u ][ p ] = parameter_src.clone();
 					uniforms_dst[ u ][ p ] = parameter_src.clone();
-					
+
 				} else {
 				} else {
-					
+
 					uniforms_dst[ u ][ p ] = parameter_src;
 					uniforms_dst[ u ][ p ] = parameter_src;
-					
+
 				}
 				}
-				
+
 			}
 			}
-			
+
 		}
 		}
-		
+
 		return uniforms_dst;
 		return uniforms_dst;
-		
+
 	}
 	}
-	
-}
+
+};

+ 3 - 3
src/materials/mappings/CubeReflectionMapping.js

@@ -1,9 +1,9 @@
 /**
 /**
  * @author mr.doob / http://mrdoob.com/
  * @author mr.doob / http://mrdoob.com/
  */
  */
- 
+
 THREE.CubeReflectionMapping = function () {
 THREE.CubeReflectionMapping = function () {
 
 
-	
 
 
-}
+
+};

+ 3 - 3
src/materials/mappings/CubeRefractionMapping.js

@@ -1,9 +1,9 @@
 /**
 /**
  * @author mr.doob / http://mrdoob.com/
  * @author mr.doob / http://mrdoob.com/
  */
  */
- 
+
 THREE.CubeRefractionMapping = function () {
 THREE.CubeRefractionMapping = function () {
 
 
-	
 
 
-}
+
+};

+ 3 - 3
src/materials/mappings/LatitudeReflectionMapping.js

@@ -1,9 +1,9 @@
 /**
 /**
  * @author mr.doob / http://mrdoob.com/
  * @author mr.doob / http://mrdoob.com/
  */
  */
- 
+
 THREE.LatitudeReflectionMapping = function () {
 THREE.LatitudeReflectionMapping = function () {
 
 
-	
 
 
-}
+
+};

+ 3 - 3
src/materials/mappings/LatitudeRefractionMapping.js

@@ -1,9 +1,9 @@
 /**
 /**
  * @author mr.doob / http://mrdoob.com/
  * @author mr.doob / http://mrdoob.com/
  */
  */
- 
+
 THREE.LatitudeRefractionMapping = function () {
 THREE.LatitudeRefractionMapping = function () {
 
 
-	
 
 
-}
+
+};

+ 3 - 3
src/materials/mappings/SphericalReflectionMapping.js

@@ -1,9 +1,9 @@
 /**
 /**
  * @author mr.doob / http://mrdoob.com/
  * @author mr.doob / http://mrdoob.com/
  */
  */
- 
+
 THREE.SphericalReflectionMapping = function () {
 THREE.SphericalReflectionMapping = function () {
 
 
-	
 
 
-}
+
+};

+ 3 - 3
src/materials/mappings/SphericalRefractionMapping.js

@@ -1,9 +1,9 @@
 /**
 /**
  * @author mr.doob / http://mrdoob.com/
  * @author mr.doob / http://mrdoob.com/
  */
  */
- 
+
 THREE.SphericalRefractionMapping = function () {
 THREE.SphericalRefractionMapping = function () {
 
 
-	
 
 
-}
+
+};

+ 3 - 3
src/materials/mappings/UVMapping.js

@@ -1,9 +1,9 @@
 /**
 /**
  * @author mr.doob / http://mrdoob.com/
  * @author mr.doob / http://mrdoob.com/
  */
  */
- 
+
 THREE.UVMapping = function () {
 THREE.UVMapping = function () {
 
 
-	
 
 
-}
+
+};

+ 81 - 80
src/renderers/WebGLRenderer.js

@@ -36,14 +36,14 @@ THREE.WebGLRenderer = function ( parameters ) {
 	// heuristics to create shader parameters according to lights in the scene
 	// heuristics to create shader parameters according to lights in the scene
 	// (not to blow over maxLights budget)
 	// (not to blow over maxLights budget)
 
 
-	maxLightCount = allocateLights( parameters.scene, 4 );
+	maxLightCount = allocateLights( parameters.scene, 4 ),
 	fog = parameters.scene ? parameters.scene.fog : null,
 	fog = parameters.scene ? parameters.scene.fog : null,
-	
+
 	antialias = parameters.antialias != undefined ? parameters.antialias : true,
 	antialias = parameters.antialias != undefined ? parameters.antialias : true,
-	
+
 	clearColor = parameters.clearColor ? new THREE.Color( parameters.clearColor ) : new THREE.Color( 0x000000 ),
 	clearColor = parameters.clearColor ? new THREE.Color( parameters.clearColor ) : new THREE.Color( 0x000000 ),
 	clearAlpha = parameters.clearAlpha ? parameters.clearAlpha : 0;
 	clearAlpha = parameters.clearAlpha ? parameters.clearAlpha : 0;
-	
+
 	this.domElement = _canvas;
 	this.domElement = _canvas;
 	this.autoClear = true;
 	this.autoClear = true;
 
 
@@ -63,12 +63,12 @@ THREE.WebGLRenderer = function ( parameters ) {
 	};
 	};
 
 
 	this.setClearColor = function( hex, alpha ) {
 	this.setClearColor = function( hex, alpha ) {
-		
+
 		var color = new THREE.Color( hex );
 		var color = new THREE.Color( hex );
 		_gl.clearColor( color.r, color.g, color.b, alpha );
 		_gl.clearColor( color.r, color.g, color.b, alpha );
-		
+
 	};
 	};
-	
+
 	this.clear = function () {
 	this.clear = function () {
 
 
 		_gl.clear( _gl.COLOR_BUFFER_BIT | _gl.DEPTH_BUFFER_BIT );
 		_gl.clear( _gl.COLOR_BUFFER_BIT | _gl.DEPTH_BUFFER_BIT );
@@ -172,7 +172,7 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 
 	this.createBuffers = function ( object, g ) {
 	this.createBuffers = function ( object, g ) {
 
 
-		var f, fl, fi, face, vertexNormals, normal, uv, v1, v2, v3, v4, t1, t2, t3, t4, m, ml, i,
+		var f, fl, fi, face, vertexNormals, faceNormal, normal, uv, v1, v2, v3, v4, t1, t2, t3, t4, m, ml, i,
 
 
 		faceArray = [],
 		faceArray = [],
 		lineArray = [],
 		lineArray = [],
@@ -371,7 +371,7 @@ THREE.WebGLRenderer = function ( parameters ) {
 		geometryChunk.__webGLLineCount = lineArray.length;
 		geometryChunk.__webGLLineCount = lineArray.length;
 
 
 	};
 	};
-	
+
 	function setMaterialShaders( material, shaders ) {
 	function setMaterialShaders( material, shaders ) {
 
 
 		material.fragment_shader = shaders.fragment_shader;
 		material.fragment_shader = shaders.fragment_shader;
@@ -381,36 +381,36 @@ THREE.WebGLRenderer = function ( parameters ) {
 	};
 	};
 
 
 	function refreshUniforms( material, fog ) {
 	function refreshUniforms( material, fog ) {
-		
+
 		material.uniforms.color.value.setHex( material.color.hex );
 		material.uniforms.color.value.setHex( material.color.hex );
 		material.uniforms.opacity.value = material.opacity;
 		material.uniforms.opacity.value = material.opacity;
 		material.uniforms.map.texture = material.map;
 		material.uniforms.map.texture = material.map;
-		
+
 		material.uniforms.env_map.texture = material.env_map;
 		material.uniforms.env_map.texture = material.env_map;
 		material.uniforms.reflectivity.value = material.reflectivity;
 		material.uniforms.reflectivity.value = material.reflectivity;
 		material.uniforms.refraction_ratio.value = material.refraction_ratio;
 		material.uniforms.refraction_ratio.value = material.refraction_ratio;
 		material.uniforms.combine.value = material.combine;
 		material.uniforms.combine.value = material.combine;
 		material.uniforms.useRefract.value = material.env_map && material.env_map.mapping instanceof THREE.CubeRefractionMapping;
 		material.uniforms.useRefract.value = material.env_map && material.env_map.mapping instanceof THREE.CubeRefractionMapping;
-		
+
 		if ( fog ) {
 		if ( fog ) {
 
 
 			material.uniforms.fogColor.value.setHex( fog.color.hex );
 			material.uniforms.fogColor.value.setHex( fog.color.hex );
-			
+
 			if ( fog instanceof THREE.Fog ) {
 			if ( fog instanceof THREE.Fog ) {
-				
+
 				material.uniforms.fogNear.value = fog.near;
 				material.uniforms.fogNear.value = fog.near;
 				material.uniforms.fogFar.value = fog.far;
 				material.uniforms.fogFar.value = fog.far;
-				
+
 			} else if ( fog instanceof THREE.FogExp2 ) {
 			} else if ( fog instanceof THREE.FogExp2 ) {
-				
+
 				material.uniforms.fogDensity.value = fog.density;
 				material.uniforms.fogDensity.value = fog.density;
-				
+
 			}
 			}
 
 
 		}
 		}
-		
+
 	};
 	};
-	
+
 	this.renderBuffer = function ( camera, lights, fog, material, geometryChunk ) {
 	this.renderBuffer = function ( camera, lights, fog, material, geometryChunk ) {
 
 
 		var mColor, mOpacity, mReflectivity,
 		var mColor, mOpacity, mReflectivity,
@@ -423,7 +423,7 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 
 		if ( material instanceof THREE.MeshShaderMaterial ||
 		if ( material instanceof THREE.MeshShaderMaterial ||
 			 material instanceof THREE.MeshDepthMaterial ||
 			 material instanceof THREE.MeshDepthMaterial ||
-			 material instanceof THREE.MeshNormalMaterial || 
+			 material instanceof THREE.MeshNormalMaterial ||
 			 material instanceof THREE.MeshBasicMaterial ) {
 			 material instanceof THREE.MeshBasicMaterial ) {
 
 
 			if ( !material.program ) {
 			if ( !material.program ) {
@@ -440,11 +440,11 @@ THREE.WebGLRenderer = function ( parameters ) {
 					setMaterialShaders( material, THREE.ShaderLib[ 'normal' ] );
 					setMaterialShaders( material, THREE.ShaderLib[ 'normal' ] );
 
 
 				} else if ( material instanceof THREE.MeshBasicMaterial ) {
 				} else if ( material instanceof THREE.MeshBasicMaterial ) {
-					
+
 					setMaterialShaders( material, THREE.ShaderLib[ 'basic' ] );
 					setMaterialShaders( material, THREE.ShaderLib[ 'basic' ] );
-					
+
 					refreshUniforms( material, fog );
 					refreshUniforms( material, fog );
-					
+
 				}
 				}
 
 
 				material.program = buildProgram( material.fragment_shader, material.vertex_shader, { fog: fog, map: material.map, env_map: material.env_map } );
 				material.program = buildProgram( material.fragment_shader, material.vertex_shader, { fog: fog, map: material.map, env_map: material.env_map } );
@@ -486,11 +486,11 @@ THREE.WebGLRenderer = function ( parameters ) {
 		this.loadMatrices( program );
 		this.loadMatrices( program );
 
 
 		if ( material instanceof THREE.MeshBasicMaterial ) {
 		if ( material instanceof THREE.MeshBasicMaterial ) {
-			
+
 			refreshUniforms( material, fog );
 			refreshUniforms( material, fog );
-		
+
 		}
 		}
-		
+
 		if ( material instanceof THREE.MeshShaderMaterial ||
 		if ( material instanceof THREE.MeshShaderMaterial ||
 		     material instanceof THREE.MeshDepthMaterial ||
 		     material instanceof THREE.MeshDepthMaterial ||
 			 material instanceof THREE.MeshNormalMaterial ||
 			 material instanceof THREE.MeshNormalMaterial ||
@@ -536,16 +536,16 @@ THREE.WebGLRenderer = function ( parameters ) {
 			if ( fog ) {
 			if ( fog ) {
 
 
 				_gl.uniform3f( program.uniforms.fogColor, fog.color.r, fog.color.g, fog.color.b );
 				_gl.uniform3f( program.uniforms.fogColor, fog.color.r, fog.color.g, fog.color.b );
-				
+
 				if ( fog instanceof THREE.Fog ) {
 				if ( fog instanceof THREE.Fog ) {
-				
+
 					_gl.uniform1f( program.uniforms.fogNear, fog.near );
 					_gl.uniform1f( program.uniforms.fogNear, fog.near );
 					_gl.uniform1f( program.uniforms.fogFar, fog.far );
 					_gl.uniform1f( program.uniforms.fogFar, fog.far );
-					
+
 				} else if ( fog instanceof THREE.FogExp2 ) {
 				} else if ( fog instanceof THREE.FogExp2 ) {
-					
+
 					_gl.uniform1f( program.uniforms.fogDensity, fog.density );
 					_gl.uniform1f( program.uniforms.fogDensity, fog.density );
-					
+
 				}
 				}
 
 
 			}
 			}
@@ -990,7 +990,7 @@ THREE.WebGLRenderer = function ( parameters ) {
 		_gl.clearColor( clearColor.r, clearColor.g, clearColor.b, clearAlpha );
 		_gl.clearColor( clearColor.r, clearColor.g, clearColor.b, clearAlpha );
 
 
 	};
 	};
-		
+
 	function generateFragmentShader( maxDirLights, maxPointLights ) {
 	function generateFragmentShader( maxDirLights, maxPointLights ) {
 
 
 		var chunks = [
 		var chunks = [
@@ -1016,7 +1016,7 @@ THREE.WebGLRenderer = function ( parameters ) {
 			"uniform float mShininess;",
 			"uniform float mShininess;",
 
 
 			THREE.Snippets[ "fog_uniforms" ],
 			THREE.Snippets[ "fog_uniforms" ],
-			
+
 			"uniform int pointLightNumber;",
 			"uniform int pointLightNumber;",
 			"uniform int directionalLightNumber;",
 			"uniform int directionalLightNumber;",
 
 
@@ -1158,7 +1158,7 @@ THREE.WebGLRenderer = function ( parameters ) {
 				"}",
 				"}",
 
 
 				THREE.Snippets[ "fog_fragment" ],
 				THREE.Snippets[ "fog_fragment" ],
-				
+
 			"}" ];
 			"}" ];
 
 
 		return chunks.join("\n");
 		return chunks.join("\n");
@@ -1273,7 +1273,7 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 
 			parameters.fog ? "#define USE_FOG" : "",
 			parameters.fog ? "#define USE_FOG" : "",
 			parameters.fog instanceof THREE.FogExp2 ? "#define FOG_EXP2" : "",
 			parameters.fog instanceof THREE.FogExp2 ? "#define FOG_EXP2" : "",
-		
+
 			parameters.map ? "#define USE_MAP" : "",
 			parameters.map ? "#define USE_MAP" : "",
 			parameters.env_map ? "#define USE_ENVMAP" : "",
 			parameters.env_map ? "#define USE_ENVMAP" : "",
 
 
@@ -1457,7 +1457,7 @@ THREE.WebGLRenderer = function ( parameters ) {
 	};
 	};
 
 
 	function initUbershader( maxDirLights, maxPointLights, fog ) {
 	function initUbershader( maxDirLights, maxPointLights, fog ) {
-		
+
 		var vertex_shader = generateVertexShader( maxDirLights, maxPointLights ),
 		var vertex_shader = generateVertexShader( maxDirLights, maxPointLights ),
 			fragment_shader = generateFragmentShader( maxDirLights, maxPointLights ),
 			fragment_shader = generateFragmentShader( maxDirLights, maxPointLights ),
 			program;
 			program;
@@ -1580,7 +1580,7 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 
 	function bufferNeedsSmoothNormals( geometryChunk, object ) {
 	function bufferNeedsSmoothNormals( geometryChunk, object ) {
 
 
-		var m, ml, i, l, needsSmoothNormals = false;
+		var m, ml, i, l, meshMaterial, needsSmoothNormals = false;
 
 
 		for ( m = 0, ml = object.materials.length; m < ml; m++ ) {
 		for ( m = 0, ml = object.materials.length; m < ml; m++ ) {
 
 
@@ -1622,7 +1622,8 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 
 		if ( scene ) {
 		if ( scene ) {
 
 
-			var l, ll, light, dirLights = pointLights = maxDirLights = maxPointLights = 0;
+			var l, ll, light, dirLights, pointLights, maxDirLights, maxPointLights;
+			dirLights = pointLights = maxDirLights = maxPointLights = 0;
 
 
 			for ( l = 0, ll = scene.lights.length; l < ll; l++ ) {
 			for ( l = 0, ll = scene.lights.length; l < ll; l++ ) {
 
 
@@ -1688,28 +1689,28 @@ THREE.WebGLRenderer = function ( parameters ) {
 };
 };
 
 
 THREE.Snippets = {
 THREE.Snippets = {
-	
+
 	fog_uniforms: [
 	fog_uniforms: [
 
 
 	"#ifdef USE_FOG",
 	"#ifdef USE_FOG",
-	
+
 		"uniform vec3 fogColor;",
 		"uniform vec3 fogColor;",
-		
+
 		"#ifdef FOG_EXP2",
 		"#ifdef FOG_EXP2",
 			"uniform float fogDensity;",
 			"uniform float fogDensity;",
 		"#else",
 		"#else",
 			"uniform float fogNear;",
 			"uniform float fogNear;",
 			"uniform float fogFar;",
 			"uniform float fogFar;",
 		"#endif",
 		"#endif",
-		
+
 	"#endif"
 	"#endif"
-	
+
 	].join("\n"),
 	].join("\n"),
 
 
 	fog_fragment: [
 	fog_fragment: [
 
 
 	"#ifdef USE_FOG",
 	"#ifdef USE_FOG",
-	
+
 		"float depth = gl_FragCoord.z / gl_FragCoord.w;",
 		"float depth = gl_FragCoord.z / gl_FragCoord.w;",
 
 
 		"#ifdef FOG_EXP2",
 		"#ifdef FOG_EXP2",
@@ -1719,13 +1720,13 @@ THREE.Snippets = {
 		"#else",
 		"#else",
 			"float fogFactor = smoothstep( fogNear, fogFar, depth );",
 			"float fogFactor = smoothstep( fogNear, fogFar, depth );",
 		"#endif",
 		"#endif",
-		
+
 		"gl_FragColor = mix( gl_FragColor, vec4( fogColor, 1.0 ), fogFactor );",
 		"gl_FragColor = mix( gl_FragColor, vec4( fogColor, 1.0 ), fogFactor );",
 
 
 	"#endif"
 	"#endif"
-	
+
 	].join("\n")
 	].join("\n")
-	
+
 };
 };
 
 
 THREE.ShaderLib = {
 THREE.ShaderLib = {
@@ -1794,9 +1795,9 @@ THREE.ShaderLib = {
 		].join("\n")
 		].join("\n")
 
 
 	},
 	},
-	
+
 	'basic': {
 	'basic': {
-		
+
 		uniforms: { "color"   : { type: "c", value: new THREE.Color( 0xeeeeee ) },
 		uniforms: { "color"   : { type: "c", value: new THREE.Color( 0xeeeeee ) },
 					"opacity" : { type: "f", value: 1 },
 					"opacity" : { type: "f", value: 1 },
 					"map"     : { type: "t", value: 0, texture: null },
 					"map"     : { type: "t", value: 0, texture: null },
@@ -1810,32 +1811,32 @@ THREE.ShaderLib = {
 					"fogFar"	: { type: "f", value: 2000 },
 					"fogFar"	: { type: "f", value: 2000 },
 					"fogColor"	: { type: "c", value: new THREE.Color( 0xffffff ) }
 					"fogColor"	: { type: "c", value: new THREE.Color( 0xffffff ) }
 				},
 				},
-		
+
 		fragment_shader: [
 		fragment_shader: [
-			
+
 			"uniform vec3 color;",
 			"uniform vec3 color;",
 			"uniform float opacity;",
 			"uniform float opacity;",
-			
+
 			"#ifdef USE_MAP",
 			"#ifdef USE_MAP",
-				
+
 				"varying vec2 vUv;",
 				"varying vec2 vUv;",
 				"uniform sampler2D map;",
 				"uniform sampler2D map;",
-				  
+
 			"#endif",
 			"#endif",
-			
+
 			"#ifdef USE_ENVMAP",
 			"#ifdef USE_ENVMAP",
-			
+
 				"varying vec3 vReflect;",
 				"varying vec3 vReflect;",
 				"uniform float reflectivity;",
 				"uniform float reflectivity;",
 				"uniform samplerCube env_map;",
 				"uniform samplerCube env_map;",
 				"uniform int combine;",
 				"uniform int combine;",
-				
+
 			"#endif",
 			"#endif",
 
 
 			THREE.Snippets[ "fog_uniforms" ],
 			THREE.Snippets[ "fog_uniforms" ],
-				
+
 			"void main() {",
 			"void main() {",
-					
+
 				"vec4 mColor = vec4( color, opacity );",
 				"vec4 mColor = vec4( color, opacity );",
 				"vec4 mapColor = vec4( 1.0, 1.0, 1.0, 1.0 );",
 				"vec4 mapColor = vec4( 1.0, 1.0, 1.0, 1.0 );",
 				"vec4 cubeColor = vec4( 1.0, 1.0, 1.0, 1.0 );",
 				"vec4 cubeColor = vec4( 1.0, 1.0, 1.0, 1.0 );",
@@ -1849,11 +1850,11 @@ THREE.ShaderLib = {
 				"#endif",
 				"#endif",
 
 
 				// environment map
 				// environment map
-				
+
 				"#ifdef USE_ENVMAP",
 				"#ifdef USE_ENVMAP",
 
 
 					"cubeColor = textureCube( env_map, vec3( -vReflect.x, vReflect.yz ) );",
 					"cubeColor = textureCube( env_map, vec3( -vReflect.x, vReflect.yz ) );",
-					
+
 					"if ( combine == 1 ) {",
 					"if ( combine == 1 ) {",
 
 
 						"gl_FragColor = mix( mColor * mapColor, cubeColor, reflectivity );",
 						"gl_FragColor = mix( mColor * mapColor, cubeColor, reflectivity );",
@@ -1863,48 +1864,48 @@ THREE.ShaderLib = {
 						"gl_FragColor = mColor * mapColor * cubeColor;",
 						"gl_FragColor = mColor * mapColor * cubeColor;",
 
 
 					"}",
 					"}",
-				
+
 				"#else",
 				"#else",
-				
+
 					"gl_FragColor = mColor * mapColor;",
 					"gl_FragColor = mColor * mapColor;",
 
 
 				"#endif",
 				"#endif",
-				
+
 				THREE.Snippets[ "fog_fragment" ],
 				THREE.Snippets[ "fog_fragment" ],
-				
+
 			"}"
 			"}"
 
 
 		].join("\n"),
 		].join("\n"),
-		
+
 		vertex_shader: [
 		vertex_shader: [
-		
+
 			"#ifdef USE_MAP",
 			"#ifdef USE_MAP",
-			
+
 				"varying vec2 vUv;",
 				"varying vec2 vUv;",
 
 
 			"#endif",
 			"#endif",
-			
+
 			"#ifdef USE_ENVMAP",
 			"#ifdef USE_ENVMAP",
-			
+
 				"varying vec3 vReflect;",
 				"varying vec3 vReflect;",
 				"uniform float refraction_ratio;",
 				"uniform float refraction_ratio;",
 				"uniform bool useRefract;",
 				"uniform bool useRefract;",
-				
+
 			"#endif",
 			"#endif",
-			
+
 			"void main() {",
 			"void main() {",
-		
+
 				"#ifdef USE_MAP",
 				"#ifdef USE_MAP",
-				
+
 					"vUv = uv;",
 					"vUv = uv;",
-					
+
 				"#endif",
 				"#endif",
 
 
 				"#ifdef USE_ENVMAP",
 				"#ifdef USE_ENVMAP",
-				
+
 					"vec4 mPosition = objectMatrix * vec4( position, 1.0 );",
 					"vec4 mPosition = objectMatrix * vec4( position, 1.0 );",
 					"vec3 nWorld = mat3( objectMatrix[0].xyz, objectMatrix[1].xyz, objectMatrix[2].xyz ) * normal;",
 					"vec3 nWorld = mat3( objectMatrix[0].xyz, objectMatrix[1].xyz, objectMatrix[2].xyz ) * normal;",
-				
+
 					"if ( useRefract ) {",
 					"if ( useRefract ) {",
 
 
 						"vReflect = refract( normalize( mPosition.xyz - cameraPosition ), normalize( nWorld.xyz ), refraction_ratio );",
 						"vReflect = refract( normalize( mPosition.xyz - cameraPosition ), normalize( nWorld.xyz ), refraction_ratio );",
@@ -1916,13 +1917,13 @@ THREE.ShaderLib = {
 					"}",
 					"}",
 
 
 				"#endif",
 				"#endif",
-				
+
 				"gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
 				"gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
 
 
 			"}"
 			"}"
 
 
 		].join("\n")
 		].join("\n")
-		
-	}		
+
+	}
 
 
 };
 };

+ 10 - 10
src/renderers/WebGLRenderer2.js

@@ -14,6 +14,7 @@ THREE.WebGLRenderer2 = function ( antialias ) {
 	_canvas = document.createElement( 'canvas' ),
 	_canvas = document.createElement( 'canvas' ),
 	_gl, _currentProgram,
 	_gl, _currentProgram,
 	_modelViewMatrix = new THREE.Matrix4(),
 	_modelViewMatrix = new THREE.Matrix4(),
+	_normalMatrix = new THREE.Matrix4(),
 	_viewMatrixArray = new Float32Array( 16 ),
 	_viewMatrixArray = new Float32Array( 16 ),
 	_modelViewMatrixArray = new Float32Array( 16 ),
 	_modelViewMatrixArray = new Float32Array( 16 ),
 	_projectionMatrixArray = new Float32Array( 16 ),
 	_projectionMatrixArray = new Float32Array( 16 ),
@@ -100,7 +101,7 @@ THREE.WebGLRenderer2 = function ( antialias ) {
 
 
 		function renderObject( object ) {
 		function renderObject( object ) {
 
 
-			var geometry, material, m, nl,
+			var geometry, material, m, ml,
 			program, uniforms, attributes;
 			program, uniforms, attributes;
 
 
 			object.autoUpdateMatrix && object.updateMatrix();
 			object.autoUpdateMatrix && object.updateMatrix();
@@ -268,11 +269,11 @@ THREE.WebGLRenderer2 = function ( antialias ) {
 
 
 			} else if ( object instanceof THREE.Line ) {
 			} else if ( object instanceof THREE.Line ) {
 
 
-				
+
 
 
 			} else if ( object instanceof THREE.Particle ) {
 			} else if ( object instanceof THREE.Particle ) {
 
 
-				
+
 
 
 			}
 			}
 
 
@@ -283,10 +284,9 @@ THREE.WebGLRenderer2 = function ( antialias ) {
 		function buildBuffers( geometry ) {
 		function buildBuffers( geometry ) {
 
 
 			var itemCount = 0, vertexIndex, group,
 			var itemCount = 0, vertexIndex, group,
-			f, fl, face, v1, v2, v3, vertexNormals, normal, uv,
+			f, fl, face, v1, v2, v3, v4, vertexNormals, faceNormal, normal, uv,
 			vertexGroups = [], faceGroups = [], lineGroups = [], normalGroups = [], uvGroups = [],
 			vertexGroups = [], faceGroups = [], lineGroups = [], normalGroups = [], uvGroups = [],
-			vertices, faces, lines, normals, uvs,
-			buffers = {};
+			vertices, faces, lines, normals, uvs;
 
 
 			for ( f = 0, fl = geometry.faces.length; f < fl; f++ ) {
 			for ( f = 0, fl = geometry.faces.length; f < fl; f++ ) {
 
 
@@ -544,9 +544,9 @@ THREE.WebGLRenderer2 = function ( antialias ) {
 
 
 				identifiers.push( 'mColor', 'mOpacity' );
 				identifiers.push( 'mColor', 'mOpacity' );
 
 
-				material.map ? identifiers.push( 'tMap' ) : null;
-				material.env_map ? identifiers.push( 'tSpherical' ) : null;
-				material.fog ? identifiers.push( 'fog', 'fogColor', 'fogNear', 'fogFar' ) : null;
+				if ( material.map ) identifiers.push( 'tMap' );
+				if ( material.env_map ) identifiers.push( 'tSpherical' );
+				if ( material.fog ) identifiers.push( 'fog', 'fogColor', 'fogNear', 'fogFar' );
 
 
 
 
 			} else if ( material instanceof THREE.MeshNormalMaterial ) {
 			} else if ( material instanceof THREE.MeshNormalMaterial ) {
@@ -622,7 +622,7 @@ THREE.WebGLRenderer2 = function ( antialias ) {
 
 
 		function compileProgram( vertex_shader, fragment_shader ) {
 		function compileProgram( vertex_shader, fragment_shader ) {
 
 
-			var program = _gl.createProgram(), shader
+			var program = _gl.createProgram(), shader, prefix_vertex, prefix_fragment;
 
 
 			prefix_vertex = [
 			prefix_vertex = [
 				maxVertexTextures() > 0 ? "#define VERTEX_TEXTURES" : "",
 				maxVertexTextures() > 0 ? "#define VERTEX_TEXTURES" : "",