|
1 | | -import { LinearMipmapLinearFilter, Uniform, WebGLRenderTarget } from "three"; |
| 1 | +import { LinearMipmapLinearFilter, REVISION, Uniform, WebGLRenderTarget } from "three"; |
2 | 2 | import { AdaptiveLuminancePass } from "../passes/AdaptiveLuminancePass.js"; |
3 | 3 | import { LuminancePass } from "../passes/LuminancePass.js"; |
4 | 4 | import { BlendFunction } from "../enums/BlendFunction.js"; |
@@ -120,53 +120,55 @@ export class ToneMappingEffect extends Effect { |
120 | 120 |
|
121 | 121 | set mode(value) { |
122 | 122 |
|
123 | | - if(this.mode !== value) { |
| 123 | + if(this.mode === value) { |
124 | 124 |
|
125 | | - this.defines.clear(); |
126 | | - this.defines.set("TONE_MAPPING_MODE", value.toFixed(0)); |
| 125 | + return; |
127 | 126 |
|
128 | | - // Use one of the built-in tone mapping operators. |
129 | | - switch(value) { |
| 127 | + } |
130 | 128 |
|
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)"; |
134 | 131 |
|
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)); |
138 | 134 |
|
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) { |
142 | 137 |
|
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; |
146 | 141 |
|
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; |
150 | 145 |
|
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; |
154 | 150 |
|
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; |
158 | 154 |
|
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; |
162 | 158 |
|
163 | | - } |
| 159 | + case ToneMappingMode.NEUTRAL: |
| 160 | + this.defines.set("toneMapping(texel)", "NeutralToneMapping(texel)"); |
| 161 | + break; |
164 | 162 |
|
165 | | - this.adaptiveLuminancePass.enabled = (value === ToneMappingMode.REINHARD2_ADAPTIVE); |
166 | | - this.setChanged(); |
| 163 | + default: |
| 164 | + this.defines.set("toneMapping(texel)", "texel"); |
| 165 | + break; |
167 | 166 |
|
168 | 167 | } |
169 | 168 |
|
| 169 | + this.adaptiveLuminancePass.enabled = (value === ToneMappingMode.REINHARD2_ADAPTIVE); |
| 170 | + this.setChanged(); |
| 171 | + |
170 | 172 | } |
171 | 173 |
|
172 | 174 | /** |
|
0 commit comments