Browse Source

BufferGeometry and WebGLRenderer robustness.

Mr.doob 10 years ago
parent
commit
3b4bacdcb6
2 changed files with 47 additions and 23 deletions
  1. 39 19
      src/core/BufferGeometry.js
  2. 8 4
      src/renderers/WebGLRenderer.js

+ 39 - 19
src/core/BufferGeometry.js

@@ -265,7 +265,7 @@ THREE.BufferGeometry.prototype = {
 		var faceVertexUvs = geometry.faceVertexUvs;
 		var faceVertexUvs = geometry.faceVertexUvs;
 		var vertexColors = material.vertexColors;
 		var vertexColors = material.vertexColors;
 
 
-		var hasFaceVertexUv = faceVertexUvs[ 0 ].length > 0;
+		var hasFaceVertexUv = faceVertexUvs[ 0 ] && faceVertexUvs[ 0 ].length > 0;
 		var hasFaceVertexUv2 = faceVertexUvs[ 1 ] && faceVertexUvs[ 1 ].length > 0;
 		var hasFaceVertexUv2 = faceVertexUvs[ 1 ] && faceVertexUvs[ 1 ].length > 0;
 
 
 		var hasFaceVertexNormals = faces[ 0 ] && faces[ 0 ].vertexNormals.length == 3;
 		var hasFaceVertexNormals = faces[ 0 ] && faces[ 0 ].vertexNormals.length == 3;
@@ -391,35 +391,55 @@ THREE.BufferGeometry.prototype = {
 
 
 			if ( hasFaceVertexUv === true ) {
 			if ( hasFaceVertexUv === true ) {
 
 
-				var uva = faceVertexUvs[ 0 ][ i ][ 0 ];
-				var uvb = faceVertexUvs[ 0 ][ i ][ 1 ];
-				var uvc = faceVertexUvs[ 0 ][ i ][ 2 ];
+				var vertexUvs = faceVertexUvs[ 0 ][ i ];
 
 
-				uvs[ i2     ] = uva.x;
-				uvs[ i2 + 1 ] = uva.y;
+				if ( vertexUvs !== undefined ) {
 
 
-				uvs[ i2 + 2 ] = uvb.x;
-				uvs[ i2 + 3 ] = uvb.y;
+					var uva = vertexUvs[ 0 ];
+					var uvb = vertexUvs[ 1 ];
+					var uvc = vertexUvs[ 2 ];
 
 
-				uvs[ i2 + 4 ] = uvc.x;
-				uvs[ i2 + 5 ] = uvc.y;
+					uvs[ i2     ] = uva.x;
+					uvs[ i2 + 1 ] = uva.y;
+
+					uvs[ i2 + 2 ] = uvb.x;
+					uvs[ i2 + 3 ] = uvb.y;
+
+					uvs[ i2 + 4 ] = uvc.x;
+					uvs[ i2 + 5 ] = uvc.y;
+
+				} else {
+
+					THREE.warn( 'THREE.BufferGeometry.fromGeometry(): Undefined vertexUv', i )
+
+				}
 
 
 			}
 			}
 
 
 			if ( hasFaceVertexUv2 === true ) {
 			if ( hasFaceVertexUv2 === true ) {
 
 
-				var uva = faceVertexUvs[ 1 ][ i ][ 0 ];
-				var uvb = faceVertexUvs[ 1 ][ i ][ 1 ];
-				var uvc = faceVertexUvs[ 1 ][ i ][ 2 ];
+				var vertexUvs = faceVertexUvs[ 1 ][ i ];
 
 
-				uvs2[ i2     ] = uva.x;
-				uvs2[ i2 + 1 ] = uva.y;
+				if ( vertexUvs !== undefined ) {
 
 
-				uvs2[ i2 + 2 ] = uvb.x;
-				uvs2[ i2 + 3 ] = uvb.y;
+					var uva = vertexUvs[ 0 ];
+					var uvb = vertexUvs[ 1 ];
+					var uvc = vertexUvs[ 2 ];
 
 
-				uvs2[ i2 + 4 ] = uvc.x;
-				uvs2[ i2 + 5 ] = uvc.y;
+					uvs2[ i2     ] = uva.x;
+					uvs2[ i2 + 1 ] = uva.y;
+
+					uvs2[ i2 + 2 ] = uvb.x;
+					uvs2[ i2 + 3 ] = uvb.y;
+
+					uvs2[ i2 + 4 ] = uvc.x;
+					uvs2[ i2 + 5 ] = uvc.y;
+
+				} else {
+
+					THREE.warn( 'THREE.BufferGeometry.fromGeometry(): Undefined vertexUv2', i )
+
+				}
 
 
 			}
 			}
 
 

+ 8 - 4
src/renderers/WebGLRenderer.js

@@ -963,13 +963,17 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 
 				} else if ( material.defaultAttributeValues !== undefined ) {
 				} else if ( material.defaultAttributeValues !== undefined ) {
 
 
-					if ( material.defaultAttributeValues[ key ].length === 2 ) {
+					if ( material.defaultAttributeValues[ key ] !== undefined ) {
 
 
-						_gl.vertexAttrib2fv( programAttribute, material.defaultAttributeValues[ key ] );
+						if ( material.defaultAttributeValues[ key ].length === 2 ) {
 
 
-					} else if ( material.defaultAttributeValues[ key ].length === 3 ) {
+							_gl.vertexAttrib2fv( programAttribute, material.defaultAttributeValues[ key ] );
 
 
-						_gl.vertexAttrib3fv( programAttribute, material.defaultAttributeValues[ key ] );
+						} else if ( material.defaultAttributeValues[ key ].length === 3 ) {
+
+							_gl.vertexAttrib3fv( programAttribute, material.defaultAttributeValues[ key ] );
+
+						}
 
 
 					}
 					}