Skip to content

Commit

Permalink
Respect renderer.outputEncoding for background and clear color
Browse files Browse the repository at this point in the history
- Applies only when ColorManagement.legacyMode = false
  • Loading branch information
donmccurdy committed Apr 23, 2022
1 parent f9331aa commit 83d2135
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 4 deletions.
19 changes: 17 additions & 2 deletions src/renderers/WebGLRenderer.js
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,22 @@ function WebGLRenderer( parameters = {} ) {

// physically based shading

this.outputEncoding = LinearEncoding;
let _outputEncoding = LinearEncoding;

Object.defineProperty( this, 'outputEncoding', {

get: () => _outputEncoding,

set: ( encoding ) => {

_outputEncoding = encoding;

// Reapply color space conversion.
background.setClearColor( background.getClearColor() );

},

} );

// physical lights

Expand Down Expand Up @@ -1437,7 +1452,7 @@ function WebGLRenderer( parameters = {} ) {

const fog = scene.fog;
const environment = material.isMeshStandardMaterial ? scene.environment : null;
const encoding = ( _currentRenderTarget === null ) ? _this.outputEncoding : ( _currentRenderTarget.isXRRenderTarget === true ? _currentRenderTarget.texture.encoding : LinearEncoding );
const encoding = ( _currentRenderTarget === null ) ? _outputEncoding : ( _currentRenderTarget.isXRRenderTarget === true ? _currentRenderTarget.texture.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;
Expand Down
12 changes: 10 additions & 2 deletions src/renderers/webgl/WebGLBackground.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { BackSide, FrontSide, CubeUVReflectionMapping } from '../../constants.js';
import { BackSide, FrontSide, CubeUVReflectionMapping, LinearEncoding, sRGBEncoding, LinearSRGBColorSpace, SRGBColorSpace } from '../../constants.js';
import { BoxGeometry } from '../../geometries/BoxGeometry.js';
import { PlaneGeometry } from '../../geometries/PlaneGeometry.js';
import { ShaderMaterial } from '../../materials/ShaderMaterial.js';
Expand All @@ -7,6 +7,8 @@ import { Mesh } from '../../objects/Mesh.js';
import { ShaderLib } from '../shaders/ShaderLib.js';
import { cloneUniforms } from '../shaders/UniformsUtils.js';

const _rgb = { r: 0, b: 0, g: 0 };

function WebGLBackground( renderer, cubemaps, state, objects, alpha, premultipliedAlpha ) {

const clearColor = new Color( 0x000000 );
Expand Down Expand Up @@ -189,7 +191,13 @@ function WebGLBackground( renderer, cubemaps, state, objects, alpha, premultipli

function setClear( color, alpha ) {

state.buffers.color.setClear( color.r, color.g, color.b, alpha, premultipliedAlpha );
const outputColorSpace = renderer.outputEncoding === sRGBEncoding
? SRGBColorSpace
: LinearSRGBColorSpace;

color.getRGB( _rgb, outputColorSpace );

state.buffers.color.setClear( _rgb.r, _rgb.g, _rgb.b, alpha, premultipliedAlpha );

}

Expand Down

0 comments on commit 83d2135

Please sign in to comment.