Skip to content

Commit 49eb938

Browse files
committed
Fix Cineon tone mapping
Fixes #655
1 parent 3a1d4bd commit 49eb938

File tree

2 files changed

+39
-37
lines changed

2 files changed

+39
-37
lines changed

src/effects/ToneMappingEffect.js

Lines changed: 35 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { LinearMipmapLinearFilter, Uniform, WebGLRenderTarget } from "three";
1+
import { LinearMipmapLinearFilter, REVISION, Uniform, WebGLRenderTarget } from "three";
22
import { AdaptiveLuminancePass } from "../passes/AdaptiveLuminancePass.js";
33
import { LuminancePass } from "../passes/LuminancePass.js";
44
import { BlendFunction } from "../enums/BlendFunction.js";
@@ -120,53 +120,55 @@ export class ToneMappingEffect extends Effect {
120120

121121
set mode(value) {
122122

123-
if(this.mode !== value) {
123+
if(this.mode === value) {
124124

125-
this.defines.clear();
126-
this.defines.set("TONE_MAPPING_MODE", value.toFixed(0));
125+
return;
127126

128-
// Use one of the built-in tone mapping operators.
129-
switch(value) {
127+
}
130128

131-
case ToneMappingMode.LINEAR:
132-
this.defines.set("toneMapping(texel)", "LinearToneMapping(texel)");
133-
break;
129+
const revision = REVISION.replace(/\D+/g, "");
130+
const cineonToneMapping = (revision >= 168) ? "CineonToneMapping(texel)" : "OptimizedCineonToneMapping(texel)";
134131

135-
case ToneMappingMode.REINHARD:
136-
this.defines.set("toneMapping(texel)", "ReinhardToneMapping(texel)");
137-
break;
132+
this.defines.clear();
133+
this.defines.set("TONE_MAPPING_MODE", value.toFixed(0));
138134

139-
case ToneMappingMode.CINEON:
140-
this.defines.set("toneMapping(texel)", "CineonToneMapping(texel)");
141-
break;
135+
// Use one of the built-in tone mapping operators.
136+
switch(value) {
142137

143-
case ToneMappingMode.OPTIMIZED_CINEON:
144-
this.defines.set("toneMapping(texel)", "OptimizedCineonToneMapping(texel)");
145-
break;
138+
case ToneMappingMode.LINEAR:
139+
this.defines.set("toneMapping(texel)", "LinearToneMapping(texel)");
140+
break;
146141

147-
case ToneMappingMode.ACES_FILMIC:
148-
this.defines.set("toneMapping(texel)", "ACESFilmicToneMapping(texel)");
149-
break;
142+
case ToneMappingMode.REINHARD:
143+
this.defines.set("toneMapping(texel)", "ReinhardToneMapping(texel)");
144+
break;
150145

151-
case ToneMappingMode.AGX:
152-
this.defines.set("toneMapping(texel)", "AgXToneMapping(texel)");
153-
break;
146+
case ToneMappingMode.CINEON:
147+
case ToneMappingMode.OPTIMIZED_CINEON:
148+
this.defines.set("toneMapping(texel)", cineonToneMapping);
149+
break;
154150

155-
case ToneMappingMode.NEUTRAL:
156-
this.defines.set("toneMapping(texel)", "NeutralToneMapping(texel)");
157-
break;
151+
case ToneMappingMode.ACES_FILMIC:
152+
this.defines.set("toneMapping(texel)", "ACESFilmicToneMapping(texel)");
153+
break;
158154

159-
default:
160-
this.defines.set("toneMapping(texel)", "texel");
161-
break;
155+
case ToneMappingMode.AGX:
156+
this.defines.set("toneMapping(texel)", "AgXToneMapping(texel)");
157+
break;
162158

163-
}
159+
case ToneMappingMode.NEUTRAL:
160+
this.defines.set("toneMapping(texel)", "NeutralToneMapping(texel)");
161+
break;
164162

165-
this.adaptiveLuminancePass.enabled = (value === ToneMappingMode.REINHARD2_ADAPTIVE);
166-
this.setChanged();
163+
default:
164+
this.defines.set("toneMapping(texel)", "texel");
165+
break;
167166

168167
}
169168

169+
this.adaptiveLuminancePass.enabled = (value === ToneMappingMode.REINHARD2_ADAPTIVE);
170+
this.setChanged();
171+
170172
}
171173

172174
/**

src/enums/ToneMappingMode.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ export const ToneMappingMode = {
2121
REINHARD2_ADAPTIVE: 3,
2222
UNCHARTED2: 4,
2323
OPTIMIZED_CINEON: 5,
24-
CINEON: 6,
25-
ACES_FILMIC: 7,
26-
AGX: 8,
27-
NEUTRAL: 9
24+
CINEON: 5,
25+
ACES_FILMIC: 6,
26+
AGX: 7,
27+
NEUTRAL: 8
2828
};

0 commit comments

Comments
 (0)