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

WebGPURenderer: Fix runtime errors introduced by texture array refactor. (#31108)

* fix runtime errors introduced by texture array refactor

* add render pass for xr layers
Rik Cabanier 11 месяцев назад
Родитель
Сommit
a593f54a2e
3 измененных файлов с 13 добавлено и 12 удалено
  1. 1 6
      src/core/RenderTarget.js
  2. 6 0
      src/renderers/common/XRManager.js
  3. 6 6
      src/renderers/webgl-fallback/WebGLBackend.js

+ 1 - 6
src/core/RenderTarget.js

@@ -294,12 +294,7 @@ class RenderTarget extends EventDispatcher {
 				this.textures[ i ].image.width = width;
 				this.textures[ i ].image.width = width;
 				this.textures[ i ].image.height = height;
 				this.textures[ i ].image.height = height;
 				this.textures[ i ].image.depth = depth;
 				this.textures[ i ].image.depth = depth;
-
-				if ( this.textures[ i ].image.depth > 1 ) {
-
-					this.textures[ i ].isArrayTexture = true;
-
-				}
+				this.textures[ i ].isArrayTexture = this.textures[ i ].image.depth > 1;
 
 
 			}
 			}
 
 

+ 6 - 0
src/renderers/common/XRManager.js

@@ -786,6 +786,8 @@ class XRManager extends EventDispatcher {
 		const quaternionObject = new Quaternion();
 		const quaternionObject = new Quaternion();
 
 
 		const wasPresenting = this.isPresenting;
 		const wasPresenting = this.isPresenting;
+		const rendererOutputTarget = this._renderer.getOutputRenderTarget();
+		const rendererFramebufferTarget = this._renderer._frameBufferTarget;
 		this.isPresenting = false;
 		this.isPresenting = false;
 
 
 		for ( const layer of this._layers ) {
 		for ( const layer of this._layers ) {
@@ -804,6 +806,8 @@ class XRManager extends EventDispatcher {
 					glSubImage.colorTexture,
 					glSubImage.colorTexture,
 					glSubImage.depthStencilTexture );
 					glSubImage.depthStencilTexture );
 
 
+				this._renderer.setOutputRenderTarget( layer.renderTarget );
+
 			}
 			}
 
 
 			this._renderer.setRenderTarget( layer.renderTarget );
 			this._renderer.setRenderTarget( layer.renderTarget );
@@ -813,6 +817,8 @@ class XRManager extends EventDispatcher {
 
 
 		this.isPresenting = wasPresenting;
 		this.isPresenting = wasPresenting;
 		this._renderer.setRenderTarget( null );
 		this._renderer.setRenderTarget( null );
+		this._renderer.setOutputRenderTarget( rendererOutputTarget );
+		this._renderer._frameBufferTarget = rendererFramebufferTarget;
 
 
 	}
 	}
 
 

+ 6 - 6
src/renderers/webgl-fallback/WebGLBackend.js

@@ -2054,7 +2054,11 @@ class WebGLBackend extends Backend {
 
 
 						const attachment = gl.COLOR_ATTACHMENT0 + i;
 						const attachment = gl.COLOR_ATTACHMENT0 + i;
 
 
-						if ( isRenderTarget3D || isRenderTargetArray ) {
+						if ( renderTarget.multiview ) {
+
+							multiviewExt.framebufferTextureMultisampleMultiviewOVR( gl.FRAMEBUFFER, attachment, textureData.textureGPU, 0, samples, 0, 2 );
+
+						} else if ( isRenderTarget3D || isRenderTargetArray ) {
 
 
 							const layer = this.renderer._activeCubeFace;
 							const layer = this.renderer._activeCubeFace;
 
 
@@ -2062,11 +2066,7 @@ class WebGLBackend extends Backend {
 
 
 						} else {
 						} else {
 
 
-							if ( renderTarget.multiview ) {
-
-								multiviewExt.framebufferTextureMultisampleMultiviewOVR( gl.FRAMEBUFFER, attachment, textureData.textureGPU, 0, samples, 0, 2 );
-
-							} else if ( hasExternalTextures && useMultisampledRTT ) {
+							if ( hasExternalTextures && useMultisampledRTT ) {
 
 
 								multisampledRTTExt.framebufferTexture2DMultisampleEXT( gl.FRAMEBUFFER, attachment, gl.TEXTURE_2D, textureData.textureGPU, 0, samples );
 								multisampledRTTExt.framebufferTexture2DMultisampleEXT( gl.FRAMEBUFFER, attachment, gl.TEXTURE_2D, textureData.textureGPU, 0, samples );
 
 

粤ICP备19079148号