|
@@ -123,6 +123,23 @@ THREE.GLTFExporter.prototype = {
|
|
|
|
|
|
var cachedCanvas;
|
|
|
|
|
|
+ var uids = new Map();
|
|
|
+ var uid = 0;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Assign and return a temporal unique id for an object
|
|
|
+ * especially which doesn't have .uuid
|
|
|
+ * @param {Object} object
|
|
|
+ * @return {Integer}
|
|
|
+ */
|
|
|
+ function getUID( object ) {
|
|
|
+
|
|
|
+ if ( ! uids.has( object ) ) uids.set( object, uid ++ );
|
|
|
+
|
|
|
+ return uids.get( object );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* Compare two arrays
|
|
|
* @param {Array} array1 Array 1 to compare
|
|
@@ -1175,9 +1192,9 @@ THREE.GLTFExporter.prototype = {
|
|
|
|
|
|
}
|
|
|
|
|
|
- if ( cachedData.attributes.has( attribute ) ) {
|
|
|
+ if ( cachedData.attributes.has( getUID( attribute ) ) ) {
|
|
|
|
|
|
- attributes[ attributeName ] = cachedData.attributes.get( attribute );
|
|
|
+ attributes[ attributeName ] = cachedData.attributes.get( getUID( attribute ) );
|
|
|
continue;
|
|
|
|
|
|
}
|
|
@@ -1198,7 +1215,7 @@ THREE.GLTFExporter.prototype = {
|
|
|
if ( accessor !== null ) {
|
|
|
|
|
|
attributes[ attributeName ] = accessor;
|
|
|
- cachedData.attributes.set( attribute, accessor );
|
|
|
+ cachedData.attributes.set( getUID( attribute ), accessor );
|
|
|
|
|
|
}
|
|
|
|
|
@@ -1264,9 +1281,9 @@ THREE.GLTFExporter.prototype = {
|
|
|
|
|
|
var baseAttribute = geometry.attributes[ attributeName ];
|
|
|
|
|
|
- if ( cachedData.attributes.has( attribute ) ) {
|
|
|
+ if ( cachedData.attributes.has( getUID( attribute ) ) ) {
|
|
|
|
|
|
- target[ gltfAttributeName ] = cachedData.attributes.get( attribute );
|
|
|
+ target[ gltfAttributeName ] = cachedData.attributes.get( getUID( attribute ) );
|
|
|
continue;
|
|
|
|
|
|
}
|
|
@@ -1286,7 +1303,7 @@ THREE.GLTFExporter.prototype = {
|
|
|
}
|
|
|
|
|
|
target[ gltfAttributeName ] = processAccessor( relativeAttribute, geometry );
|
|
|
- cachedData.attributes.set( baseAttribute, target[ gltfAttributeName ] );
|
|
|
+ cachedData.attributes.set( getUID( baseAttribute ), target[ gltfAttributeName ] );
|
|
|
|
|
|
}
|
|
|
|
|
@@ -1355,7 +1372,13 @@ THREE.GLTFExporter.prototype = {
|
|
|
|
|
|
if ( geometry.index !== null ) {
|
|
|
|
|
|
- var cacheKey = geometry.uuid + ':' + groups[ i ].start + ':' + groups[ i ].count;
|
|
|
+ var cacheKey = getUID( geometry.index );
|
|
|
+
|
|
|
+ if ( groups[ i ].start !== undefined || groups[ i ].count !== undefined ) {
|
|
|
+
|
|
|
+ cacheKey += ':' + groups[ i ].start + ':' + groups[ i ].count;
|
|
|
+
|
|
|
+ }
|
|
|
|
|
|
if ( cachedData.attributes.has( cacheKey ) ) {
|
|
|
|