Browse Source

PMREMGenerator: Correctly restore render target. (#27013)

Michael Herzog 1 year ago
parent
commit
8428bb6ca8
1 changed files with 7 additions and 1 deletions
  1. 7 1
      src/extras/PMREMGenerator.js

+ 7 - 1
src/extras/PMREMGenerator.js

@@ -38,6 +38,8 @@ const MAX_SAMPLES = 20;
 const _flatCamera = /*@__PURE__*/ new OrthographicCamera();
 const _flatCamera = /*@__PURE__*/ new OrthographicCamera();
 const _clearColor = /*@__PURE__*/ new Color();
 const _clearColor = /*@__PURE__*/ new Color();
 let _oldTarget = null;
 let _oldTarget = null;
+let _oldActiveCubeFace = 0;
+let _oldActiveMipmapLevel = 0;
 
 
 // Golden Ratio
 // Golden Ratio
 const PHI = ( 1 + Math.sqrt( 5 ) ) / 2;
 const PHI = ( 1 + Math.sqrt( 5 ) ) / 2;
@@ -103,6 +105,8 @@ class PMREMGenerator {
 	fromScene( scene, sigma = 0, near = 0.1, far = 100 ) {
 	fromScene( scene, sigma = 0, near = 0.1, far = 100 ) {
 
 
 		_oldTarget = this._renderer.getRenderTarget();
 		_oldTarget = this._renderer.getRenderTarget();
+		_oldActiveCubeFace = this._renderer.getActiveCubeFace();
+		_oldActiveMipmapLevel = this._renderer.getActiveMipmapLevel();
 
 
 		this._setSize( 256 );
 		this._setSize( 256 );
 
 
@@ -215,7 +219,7 @@ class PMREMGenerator {
 
 
 	_cleanup( outputTarget ) {
 	_cleanup( outputTarget ) {
 
 
-		this._renderer.setRenderTarget( _oldTarget );
+		this._renderer.setRenderTarget( _oldTarget, _oldActiveCubeFace, _oldActiveMipmapLevel );
 		outputTarget.scissorTest = false;
 		outputTarget.scissorTest = false;
 		_setViewport( outputTarget, 0, 0, outputTarget.width, outputTarget.height );
 		_setViewport( outputTarget, 0, 0, outputTarget.width, outputTarget.height );
 
 
@@ -234,6 +238,8 @@ class PMREMGenerator {
 		}
 		}
 
 
 		_oldTarget = this._renderer.getRenderTarget();
 		_oldTarget = this._renderer.getRenderTarget();
+		_oldActiveCubeFace = this._renderer.getActiveCubeFace();
+		_oldActiveMipmapLevel = this._renderer.getActiveMipmapLevel();
 
 
 		const cubeUVRenderTarget = renderTarget || this._allocateTargets();
 		const cubeUVRenderTarget = renderTarget || this._allocateTargets();
 		this._textureToCubeUV( texture, cubeUVRenderTarget );
 		this._textureToCubeUV( texture, cubeUVRenderTarget );