Просмотр исходного кода

PMREMGenerator: Add `fromSceneAsync()` (#29951)

* Add `fromSceneAsync`

* move _hasInitialized to private
sunag 1 год назад
Родитель
Сommit
34ba5129de
1 измененных файлов с 54 добавлено и 0 удалено
  1. 54 0
      src/renderers/common/extras/PMREMGenerator.js

+ 54 - 0
src/renderers/common/extras/PMREMGenerator.js

@@ -116,6 +116,12 @@ class PMREMGenerator {
 
 	}
 
+	get _hasInitialized() {
+
+		return this._renderer.hasInitialized();
+
+	}
+
 	/**
 	 * Generates a PMREM from a supplied Scene, which can be faster than using an
 	 * image if networking bandwidth is low. Optional sigma specifies a blur radius
@@ -125,6 +131,14 @@ class PMREMGenerator {
 	 */
 	fromScene( scene, sigma = 0, near = 0.1, far = 100 ) {
 
+		if ( this._hasInitialized === false ) {
+
+			console.warn( 'THREE.PMREMGenerator: .fromScene() called before the backend is initialized. Try using .fromSceneAsync() instead.' );
+
+			return this.fromSceneAsync( scene, sigma, near, far );
+
+		}
+
 		_oldTarget = this._renderer.getRenderTarget();
 		_oldActiveCubeFace = this._renderer.getActiveCubeFace();
 		_oldActiveMipmapLevel = this._renderer.getActiveMipmapLevel();
@@ -150,6 +164,14 @@ class PMREMGenerator {
 
 	}
 
+	async fromSceneAsync( scene, sigma = 0, near = 0.1, far = 100 ) {
+
+		if ( this._hasInitialized === false ) await this._renderer.init();
+
+		return this.fromScene( scene, sigma, near, far );
+
+	}
+
 	/**
 	 * Generates a PMREM from an equirectangular texture, which can be either LDR
 	 * or HDR. The ideal input image size is 1k (1024 x 512),
@@ -157,6 +179,22 @@ class PMREMGenerator {
 	 */
 	fromEquirectangular( equirectangular, renderTarget = null ) {
 
+		if ( this._hasInitialized === false ) {
+
+			console.warn( 'THREE.PMREMGenerator: .fromEquirectangular() called before the backend is initialized. Try using .fromEquirectangularAsync() instead.' );
+
+			return this.fromEquirectangularAsync( equirectangular, renderTarget );
+
+		}
+
+		return this._fromTexture( equirectangular, renderTarget );
+
+	}
+
+	async fromEquirectangularAsync( equirectangular, renderTarget = null ) {
+
+		if ( this._hasInitialized === false ) await this._renderer.init();
+
 		return this._fromTexture( equirectangular, renderTarget );
 
 	}
@@ -168,6 +206,22 @@ class PMREMGenerator {
 	 */
 	fromCubemap( cubemap, renderTarget = null ) {
 
+		if ( this._hasInitialized === false ) {
+
+			console.warn( 'THREE.PMREMGenerator: .fromCubemap() called before the backend is initialized. Try using .fromCubemapAsync() instead.' );
+
+			return this.fromCubemapAsync( cubemap, renderTarget );
+
+		}
+
+		return this._fromTexture( cubemap, renderTarget );
+
+	}
+
+	async fromCubemapAsync( cubemap, renderTarget = null ) {
+
+		if ( this._hasInitialized === false ) await this._renderer.init();
+
 		return this._fromTexture( cubemap, renderTarget );
 
 	}

粤ICP备19079148号