Browse Source

WebGLRenderer: Add temporary sRGB encoding fix for WebXR. (#23288)

Michael Herzog 3 years ago
parent
commit
b83bab0b21

+ 1 - 1
src/renderers/WebGLRenderer.js

@@ -1415,7 +1415,7 @@ function WebGLRenderer( parameters = {} ) {
 
 		const fog = scene.fog;
 		const environment = material.isMeshStandardMaterial ? scene.environment : null;
-		const encoding = ( _currentRenderTarget === null ) ? _this.outputEncoding : LinearEncoding;
+		const encoding = ( _currentRenderTarget === null ) ? _this.outputEncoding : ( _currentRenderTarget.isXRRenderTarget === true ? _currentRenderTarget.encoding : LinearEncoding );
 		const envMap = ( material.isMeshStandardMaterial ? cubeuvmaps : cubemaps ).get( material.envMap || environment );
 		const vertexAlphas = material.vertexColors === true && !! geometry.attributes.color && geometry.attributes.color.itemSize === 4;
 		const vertexTangents = !! material.normalMap && !! geometry.attributes.tangent;

+ 1 - 1
src/renderers/webgl/WebGLPrograms.js

@@ -148,7 +148,7 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
 			instancingColor: object.isInstancedMesh === true && object.instanceColor !== null,
 
 			supportsVertexTextures: vertexTextures,
-			outputEncoding: ( currentRenderTarget === null ) ? renderer.outputEncoding : LinearEncoding,
+			outputEncoding: ( currentRenderTarget === null ) ? renderer.outputEncoding : ( currentRenderTarget.isXRRenderTarget === true ? currentRenderTarget.encoding : LinearEncoding ),
 			map: !! material.map,
 			matcap: !! material.matcap,
 			envMap: !! envMap,

+ 2 - 0
src/renderers/webxr/WebXRManager.js

@@ -325,6 +325,8 @@ class WebXRManager extends EventDispatcher {
 
 				}
 
+				newRenderTarget.isXRRenderTarget = true; // TODO Remove this when possible, see #23278
+
 				// Set foveation to maximum.
 				this.setFoveation( 1.0 );