Parcourir la source

Added support for caching images to GLTFExporter.

Reduces output glb size considerably when the scene contains shared images and embedImages is enabled for the export.
Alan Chambers il y a 7 ans
Parent
commit
5e50c2138d
1 fichiers modifiés avec 10 ajouts et 3 suppressions
  1. 10 3
      examples/js/exporters/GLTFExporter.js

+ 10 - 3
examples/js/exporters/GLTFExporter.js

@@ -105,7 +105,8 @@ THREE.GLTFExporter.prototype = {
 
 			attributes: new Map(),
 			materials: new Map(),
-			textures: new Map()
+			textures: new Map(),
+			images: new Map()
 
 		};
 
@@ -603,7 +604,11 @@ THREE.GLTFExporter.prototype = {
 		 */
 		function processImage( map ) {
 
-			// @TODO Cache
+			if ( cachedData.images.has( map.image ) ) {
+
+				return cachedData.images.get( map.image );
+
+			}
 
 			if ( ! outputJSON.images ) {
 
@@ -673,8 +678,10 @@ THREE.GLTFExporter.prototype = {
 
 			outputJSON.images.push( gltfImage );
 
-			return outputJSON.images.length - 1;
+			var index = outputJSON.images.length - 1;
+			cachedData.images.set( map.image, index );
 
+			return index;
 		}
 
 		/**