Browse Source

Address MrDoob's other comment

Rik Cabanier 3 years ago
parent
commit
d16a6085ad
2 changed files with 45 additions and 41 deletions
  1. 38 28
      src/renderers/WebGLRenderer.js
  2. 7 13
      src/renderers/webxr/WebXRManager.js

+ 38 - 28
src/renderers/WebGLRenderer.js

@@ -1762,59 +1762,69 @@ function WebGLRenderer( parameters = {} ) {
 
 	};
 
-	this.setRenderTarget = function ( renderTarget, activeCubeFace = 0, activeMipmapLevel = 0, defaultFramebuffer = undefined, options = {} ) {
+	this.setRenderTargetTextures = function ( renderTarget, colorTexture, depthTexture ) {
 
-		_currentRenderTarget = renderTarget;
-		_currentActiveCubeFace = activeCubeFace;
-		_currentActiveMipmapLevel = activeMipmapLevel;
-		const useDefaultFramebuffer = defaultFramebuffer === undefined;
+		properties.get( renderTarget.texture ).__webglTexture = colorTexture;
+		properties.get( renderTarget.depthTexture ).__webglTexture = depthTexture;
 
-		if ( renderTarget ) {
+		const renderTargetProperties = properties.get( renderTarget );
+		renderTargetProperties.__hasExternalTextures = true;
 
-			const renderTargetProperties = properties.get( renderTarget );
-			let hasNewExternalTextures = false;
+		if ( renderTargetProperties.__hasExternalTextures ) {
 
-			if ( options.colorTexture !== undefined ) {
+			renderTargetProperties.__autoAllocateDepthBuffer = depthTexture === undefined;
 
-				hasNewExternalTextures = true;
-				properties.get( renderTarget.texture ).__webglTexture = options.colorTexture;
+			if ( ! renderTargetProperties.__autoAllocateDepthBuffer ) {
 
-				renderTargetProperties.__autoAllocateDepthBuffer = options.depthTexture === undefined;
+				// The multisample_render_to_texture extension doesn't work properly if there
+				// are midframe flushes and an external depth buffer. Disable use of the extension.
+				if ( renderTarget.useRenderToTexture ) {
 
-				if ( ! renderTargetProperties.__autoAllocateDepthBuffer ) {
+					console.warn( 'render-to-texture extension was disabled because an external texture was provided' );
+					renderTarget.useRenderToTexture = false;
+					renderTarget.useRenderbuffer = true;
 
-					properties.get( renderTarget.depthTexture ).__webglTexture = options.depthTexture;
+				}
 
-					// The multisample_render_to_texture extension doesn't work properly if there
-					// are midframe flushes and an external depth buffer. Disable use of the extension.
-					if ( renderTarget.useRenderToTexture ) {
+			}
 
-						console.warn( 'render-to-texture extension was disabled because an external texture was provided' );
-						renderTarget.useRenderToTexture = false;
-						renderTarget.useRenderbuffer = true;
+		}
 
-					}
+	};
 
-				}
+	this.setRenderTargetFramebuffer = function ( renderTarget, defaultFramebuffer ) {
 
-				renderTargetProperties.__hasExternalTextures = true;
+		const renderTargetProperties = properties.get( renderTarget );
+		renderTargetProperties.__webglFramebuffer = defaultFramebuffer;
+		renderTargetProperties.__useDefaultFramebuffer = defaultFramebuffer === undefined;
 
-			}
+	};
+
+	this.setRenderTarget = function ( renderTarget, activeCubeFace = 0, activeMipmapLevel = 0 ) {
+
+		_currentRenderTarget = renderTarget;
+		_currentActiveCubeFace = activeCubeFace;
+		_currentActiveMipmapLevel = activeMipmapLevel;
+		let useDefaultFramebuffer = true;
+
+		if ( renderTarget ) {
+
+			const renderTargetProperties = properties.get( renderTarget );
 
-			if ( ! useDefaultFramebuffer ) {
+			if ( renderTargetProperties.__useDefaultFramebuffer !== undefined ) {
 
 				// We need to make sure to rebind the framebuffer.
 				state.bindFramebuffer( _gl.FRAMEBUFFER, null );
-				renderTargetProperties.__webglFramebuffer = defaultFramebuffer;
+				useDefaultFramebuffer = false;
 
 			} else if ( renderTargetProperties.__webglFramebuffer === undefined ) {
 
 				textures.setupRenderTarget( renderTarget );
 
-			} else if ( hasNewExternalTextures ) {
+			} else if ( renderTargetProperties.__hasExternalTextures ) {
 
 				// Color and depth texture must be rebound in order for the swapchain to update.
-				textures.rebindTextures( renderTarget, options.colorTexture, options.depthTexture );
+				textures.rebindTextures( renderTarget, properties.get( renderTarget.texture ).__webglTexture, properties.get( renderTarget.depthTexture ).__webglTexture );
 
 			}
 

+ 7 - 13
src/renderers/webxr/WebXRManager.js

@@ -579,11 +579,8 @@ class WebXRManager extends EventDispatcher {
 
 				if ( glBaseLayer !== null ) {
 
-					renderer.setRenderTarget(
-						newRenderTarget,
-						0,
-						0,
-						glBaseLayer.framebuffer );
+					renderer.setRenderTargetFramebuffer( newRenderTarget, glBaseLayer.framebuffer );
+					renderer.setRenderTarget( newRenderTarget );
 
 				}
 
@@ -616,15 +613,12 @@ class WebXRManager extends EventDispatcher {
 						// For side-by-side projection, we only produce a single texture for both eyes.
 						if ( i === 0 ) {
 
-							renderer.setRenderTarget(
+							renderer.setRenderTargetTextures(
 								newRenderTarget,
-								0,
-								0,
-								undefined,
-								{
-									colorTexture: glSubImage.colorTexture,
-									depthTexture: glProjLayer.ignoreDepthValues ? undefined : glSubImage.depthStencilTexture
-								} );
+								glSubImage.colorTexture,
+								glProjLayer.ignoreDepthValues ? undefined : glSubImage.depthStencilTexture );
+
+							renderer.setRenderTarget( newRenderTarget );
 
 						}