|
@@ -17,7 +17,7 @@ THREE.BufferGeometryUtils = {
|
|
|
attributes.normal === undefined ||
|
|
|
attributes.uv === undefined ) {
|
|
|
|
|
|
- console.warn( 'THREE.BufferGeometry: Missing required attributes (index, position, normal or uv) in BufferGeometry.computeTangents()' );
|
|
|
+ console.error( 'THREE.BufferGeometryUtils: .computeTangents() failed. Missing required attributes (index, position, normal or uv)' );
|
|
|
return;
|
|
|
|
|
|
}
|
|
@@ -197,13 +197,23 @@ THREE.BufferGeometryUtils = {
|
|
|
|
|
|
// ensure that all geometries are indexed, or none
|
|
|
|
|
|
- if ( isIndexed !== ( geometry.index !== null ) ) return null;
|
|
|
+ if ( isIndexed !== ( geometry.index !== null ) ) {
|
|
|
+
|
|
|
+ console.error( 'THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index ' + i + '. All geometries must have compatible attributes; make sure index attribute exists among all geometries, or in none of them.' );
|
|
|
+ return null;
|
|
|
+
|
|
|
+ }
|
|
|
|
|
|
// gather attributes, exit early if they're different
|
|
|
|
|
|
for ( var name in geometry.attributes ) {
|
|
|
|
|
|
- if ( ! attributesUsed.has( name ) ) return null;
|
|
|
+ if ( ! attributesUsed.has( name ) ) {
|
|
|
+
|
|
|
+ console.error( 'THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index ' + i + '. All geometries must have compatible attributes; make sure "' + name + '" attribute exists among all geometries, or in none of them.' );
|
|
|
+ return null;
|
|
|
+
|
|
|
+ }
|
|
|
|
|
|
if ( attributes[ name ] === undefined ) attributes[ name ] = [];
|
|
|
|
|
@@ -213,11 +223,21 @@ THREE.BufferGeometryUtils = {
|
|
|
|
|
|
// gather morph attributes, exit early if they're different
|
|
|
|
|
|
- if ( morphTargetsRelative !== geometry.morphTargetsRelative ) return null;
|
|
|
+ if ( morphTargetsRelative !== geometry.morphTargetsRelative ) {
|
|
|
+
|
|
|
+ console.error( 'THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index ' + i + '. .morphTargetsRelative must be consistent throughout all geometries.' );
|
|
|
+ return null;
|
|
|
+
|
|
|
+ }
|
|
|
|
|
|
for ( var name in geometry.morphAttributes ) {
|
|
|
|
|
|
- if ( ! morphAttributesUsed.has( name ) ) return null;
|
|
|
+ if ( ! morphAttributesUsed.has( name ) ) {
|
|
|
+
|
|
|
+ console.error( 'THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index ' + i + '. .morphAttributes must be consistent throughout all geometries.' );
|
|
|
+ return null;
|
|
|
+
|
|
|
+ }
|
|
|
|
|
|
if ( morphAttributes[ name ] === undefined ) morphAttributes[ name ] = [];
|
|
|
|
|
@@ -244,6 +264,7 @@ THREE.BufferGeometryUtils = {
|
|
|
|
|
|
} else {
|
|
|
|
|
|
+ console.error( 'THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index ' + i + '. The geometry must have either an index or a position attribute' );
|
|
|
return null;
|
|
|
|
|
|
}
|
|
@@ -287,7 +308,12 @@ THREE.BufferGeometryUtils = {
|
|
|
|
|
|
var mergedAttribute = this.mergeBufferAttributes( attributes[ name ] );
|
|
|
|
|
|
- if ( ! mergedAttribute ) return null;
|
|
|
+ if ( ! mergedAttribute ) {
|
|
|
+
|
|
|
+ console.error( 'THREE.BufferGeometryUtils: .mergeBufferGeometries() failed while trying to merge the ' + name + ' attribute.' );
|
|
|
+ return null;
|
|
|
+
|
|
|
+ }
|
|
|
|
|
|
mergedGeometry.setAttribute( name, mergedAttribute );
|
|
|
|
|
@@ -316,7 +342,12 @@ THREE.BufferGeometryUtils = {
|
|
|
|
|
|
var mergedMorphAttribute = this.mergeBufferAttributes( morphAttributesToMerge );
|
|
|
|
|
|
- if ( ! mergedMorphAttribute ) return null;
|
|
|
+ if ( ! mergedMorphAttribute ) {
|
|
|
+
|
|
|
+ console.error( 'THREE.BufferGeometryUtils: .mergeBufferGeometries() failed while trying to merge the ' + name + ' morphAttribute.' );
|
|
|
+ return null;
|
|
|
+
|
|
|
+ }
|
|
|
|
|
|
mergedGeometry.morphAttributes[ name ].push( mergedMorphAttribute );
|
|
|
|
|
@@ -343,16 +374,36 @@ THREE.BufferGeometryUtils = {
|
|
|
|
|
|
var attribute = attributes[ i ];
|
|
|
|
|
|
- if ( attribute.isInterleavedBufferAttribute ) return null;
|
|
|
+ if ( attribute.isInterleavedBufferAttribute ) {
|
|
|
+
|
|
|
+ console.error( 'THREE.BufferGeometryUtils: .mergeBufferAttributes() failed. InterleavedBufferAttributes are not supported.' );
|
|
|
+ return null;
|
|
|
+
|
|
|
+ }
|
|
|
|
|
|
if ( TypedArray === undefined ) TypedArray = attribute.array.constructor;
|
|
|
- if ( TypedArray !== attribute.array.constructor ) return null;
|
|
|
+ if ( TypedArray !== attribute.array.constructor ) {
|
|
|
+
|
|
|
+ console.error( 'THREE.BufferGeometryUtils: .mergeBufferAttributes() failed. BufferAttribute.array must be of consistent array types across matching attributes.' );
|
|
|
+ return null;
|
|
|
+
|
|
|
+ }
|
|
|
|
|
|
if ( itemSize === undefined ) itemSize = attribute.itemSize;
|
|
|
- if ( itemSize !== attribute.itemSize ) return null;
|
|
|
+ if ( itemSize !== attribute.itemSize ) {
|
|
|
+
|
|
|
+ console.error( 'THREE.BufferGeometryUtils: .mergeBufferAttributes() failed. BufferAttribute.itemSize must be consistent across matching attributes.' );
|
|
|
+ return null;
|
|
|
+
|
|
|
+ }
|
|
|
|
|
|
if ( normalized === undefined ) normalized = attribute.normalized;
|
|
|
- if ( normalized !== attribute.normalized ) return null;
|
|
|
+ if ( normalized !== attribute.normalized ) {
|
|
|
+
|
|
|
+ console.error( 'THREE.BufferGeometryUtils: .mergeBufferAttributes() failed. BufferAttribute.normalized must be consistent across matching attributes.' );
|
|
|
+ return null;
|
|
|
+
|
|
|
+ }
|
|
|
|
|
|
arrayLength += attribute.array.length;
|
|
|
|
|
@@ -393,7 +444,7 @@ THREE.BufferGeometryUtils = {
|
|
|
if ( TypedArray === undefined ) TypedArray = attribute.array.constructor;
|
|
|
if ( TypedArray !== attribute.array.constructor ) {
|
|
|
|
|
|
- console.warn( 'AttributeBuffers of different types cannot be interleaved' );
|
|
|
+ console.error( 'AttributeBuffers of different types cannot be interleaved' );
|
|
|
return null;
|
|
|
|
|
|
}
|