|
@@ -1,9 +1,11 @@
|
|
|
import DataMap from '../DataMap.js';
|
|
|
import ChainMap from '../ChainMap.js';
|
|
|
import NodeBuilderState from './NodeBuilderState.js';
|
|
|
-import { NodeFrame, vec4, objectGroup, renderGroup, frameGroup, cubeTexture, texture, rangeFog, densityFog, reference, viewportBottomLeft, normalWorld, pmremTexture, viewportTopLeft } from '../../../nodes/Nodes.js';
|
|
|
+import { NodeFrame, objectGroup, renderGroup, frameGroup, cubeTexture, texture, rangeFog, densityFog, reference, viewportBottomLeft, normalWorld, pmremTexture, viewportTopLeft } from '../../../nodes/Nodes.js';
|
|
|
|
|
|
-import { EquirectangularReflectionMapping, EquirectangularRefractionMapping, NoToneMapping, SRGBColorSpace } from '../../../constants.js';
|
|
|
+import { EquirectangularReflectionMapping, EquirectangularRefractionMapping } from '../../../constants.js';
|
|
|
+
|
|
|
+const outputNodeMap = new WeakMap();
|
|
|
|
|
|
class Nodes extends DataMap {
|
|
|
|
|
@@ -391,29 +393,30 @@ class Nodes extends DataMap {
|
|
|
|
|
|
}
|
|
|
|
|
|
- getOutputNode( outputTexture ) {
|
|
|
+ getOutputCacheKey() {
|
|
|
|
|
|
- let output = texture( outputTexture, viewportTopLeft );
|
|
|
+ const renderer = this.renderer;
|
|
|
|
|
|
- if ( this.isToneMappingState ) {
|
|
|
+ return renderer.toneMapping + ',' + renderer.currentColorSpace;
|
|
|
|
|
|
- if ( this.renderer.toneMappingNode ) {
|
|
|
+ }
|
|
|
|
|
|
- output = vec4( this.renderer.toneMappingNode.context( { color: output.rgb } ), output.a );
|
|
|
+ hasOutputChange( outputTarget ) {
|
|
|
|
|
|
- } else if ( this.renderer.toneMapping !== NoToneMapping ) {
|
|
|
+ const cacheKey = outputNodeMap.get( outputTarget );
|
|
|
|
|
|
- output = output.toneMapping( this.renderer.toneMapping );
|
|
|
+ return cacheKey !== this.getOutputCacheKey();
|
|
|
|
|
|
- }
|
|
|
+ }
|
|
|
|
|
|
- }
|
|
|
+ getOutputNode( outputTexture ) {
|
|
|
|
|
|
- if ( this.renderer.currentColorSpace === SRGBColorSpace ) {
|
|
|
+ const renderer = this.renderer;
|
|
|
+ const cacheKey = this.getOutputCacheKey();
|
|
|
|
|
|
- output = output.linearToColorSpace( this.renderer.currentColorSpace );
|
|
|
+ const output = texture( outputTexture, viewportTopLeft ).renderOutput( renderer.toneMapping, renderer.currentColorSpace );
|
|
|
|
|
|
- }
|
|
|
+ outputNodeMap.set( outputTexture, cacheKey );
|
|
|
|
|
|
return output;
|
|
|
|