Bläddra i källkod

GTAOPass: Replace visibility cache Map with an array for improved performance (#31454)

* GTAOPass: Replace visibility cache Map with an array for improved performance

* GTAOPass: review comment https://github.com/mrdoob/three.js/pull/31453#discussion_r2217866581
Kirill Osipov 7 månader sedan
förälder
incheckning
8e3fd3c4fd
1 ändrade filer med 10 tillägg och 9 borttagningar
  1. 10 9
      examples/jsm/postprocessing/GTAOPass.js

+ 10 - 9
examples/jsm/postprocessing/GTAOPass.js

@@ -103,7 +103,7 @@ class GTAOPass extends Pass {
 		 */
 		 */
 		this.output = 0;
 		this.output = 0;
 		this._renderGBuffer = true;
 		this._renderGBuffer = true;
-		this._visibilityCache = new Map();
+		this._visibilityCache = [];
 
 
 		/**
 		/**
 		 * The AO blend intensity.
 		 * The AO blend intensity.
@@ -655,9 +655,12 @@ class GTAOPass extends Pass {
 
 
 		scene.traverse( function ( object ) {
 		scene.traverse( function ( object ) {
 
 
-			cache.set( object, object.visible );
+			if ( ( object.isPoints || object.isLine || object.isLine2 ) && object.visible ) {
 
 
-			if ( object.isPoints || object.isLine || object.isLine2 ) object.visible = false;
+				object.visible = false;
+				cache.push( object );
+
+			}
 
 
 		} );
 		} );
 
 
@@ -665,17 +668,15 @@ class GTAOPass extends Pass {
 
 
 	_restoreVisibility() {
 	_restoreVisibility() {
 
 
-		const scene = this.scene;
 		const cache = this._visibilityCache;
 		const cache = this._visibilityCache;
 
 
-		scene.traverse( function ( object ) {
+		for ( let i = 0; i < cache.length; i ++ ) {
 
 
-			const visible = cache.get( object );
-			object.visible = visible;
+			cache[ i ].visible = true;
 
 
-		} );
+		}
 
 
-		cache.clear();
+		cache.length = 0;
 
 
 	}
 	}
 
 

粤ICP备19079148号