Procházet zdrojové kódy

VideoTexture: Cancel rVFC on Dispose (#31375)

* fix

* lint

* 0

* lint
ycw před 10 měsíci
rodič
revize
348c91b0ea
1 změnil soubory, kde provedl 27 přidání a 2 odebrání
  1. 27 2
      src/textures/VideoTexture.js

+ 27 - 2
src/textures/VideoTexture.js

@@ -53,18 +53,28 @@ class VideoTexture extends Texture {
 		 */
 		this.generateMipmaps = false;
 
+		/**
+		 * The video frame request callback identifier, which is a positive integer.
+		 *
+		 * Value of 0 represents no scheduled rVFC.
+		 *
+		 * @private
+		 * @type {number}
+		 */
+		this._requestVideoFrameCallbackId = 0;
+
 		const scope = this;
 
 		function updateVideo() {
 
 			scope.needsUpdate = true;
-			video.requestVideoFrameCallback( updateVideo );
+			scope._requestVideoFrameCallbackId = video.requestVideoFrameCallback( updateVideo );
 
 		}
 
 		if ( 'requestVideoFrameCallback' in video ) {
 
-			video.requestVideoFrameCallback( updateVideo );
+			this._requestVideoFrameCallbackId = video.requestVideoFrameCallback( updateVideo );
 
 		}
 
@@ -95,6 +105,21 @@ class VideoTexture extends Texture {
 
 	}
 
+	/**
+	 * @override
+	 */
+	dispose() {
+
+		if ( this._requestVideoFrameCallbackId !== 0 ) {
+
+			this.source.data.cancelVideoFrameCallback( this._requestVideoFrameCallbackId );
+
+		}
+
+		super.dispose();
+
+	}
+
 }
 
 export { VideoTexture };

粤ICP备19079148号