11import TempNode from '../core/TempNode.js' ;
22import { default as TextureNode /*, texture*/ } from '../accessors/TextureNode.js' ;
33import { NodeUpdateType } from '../core/constants.js' ;
4- import { nodeObject } from '../tsl/TSLBase.js' ;
4+ import { nodeObject , context } from '../tsl/TSLBase.js' ;
55import { uniform } from '../core/UniformNode.js' ;
66import { viewZToOrthographicDepth , perspectiveDepthToViewZ } from './ViewportDepthNode.js' ;
77
@@ -248,6 +248,22 @@ class PassNode extends TempNode {
248248 */
249249 this . renderTarget = renderTarget ;
250250
251+ /**
252+ * An optional global context for the pass.
253+ *
254+ * @type {ContextNode|null }
255+ */
256+ this . contextNode = null ;
257+
258+ /**
259+ * A cache for the context node.
260+ *
261+ * @private
262+ * @type {?Object }
263+ * @default null
264+ */
265+ this . _contextNodeCache = null ;
266+
251267 /**
252268 * A dictionary holding the internal result textures.
253269 *
@@ -739,6 +755,7 @@ class PassNode extends TempNode {
739755 const currentMRT = renderer . getMRT ( ) ;
740756 const currentAutoClear = renderer . autoClear ;
741757 const currentMask = camera . layers . mask ;
758+ const currentContextNode = renderer . contextNode ;
742759
743760 this . _cameraNear . value = camera . near ;
744761 this . _cameraFar . value = camera . far ;
@@ -759,6 +776,21 @@ class PassNode extends TempNode {
759776 renderer . setMRT ( this . _mrt ) ;
760777 renderer . autoClear = true ;
761778
779+ if ( this . contextNode !== null ) {
780+
781+ if ( this . _contextNodeCache === null || this . _contextNodeCache . version !== this . version ) {
782+
783+ this . _contextNodeCache = {
784+ version : this . version ,
785+ context : context ( { ...renderer . contextNode . value , ...this . contextNode . getFlowContextData ( ) } )
786+ } ;
787+
788+ }
789+
790+ renderer . contextNode = this . _contextNodeCache . context ;
791+
792+ }
793+
762794 const currentSceneName = scene . name ;
763795
764796 scene . name = this . name ? this . name : scene . name ;
@@ -770,6 +802,7 @@ class PassNode extends TempNode {
770802 renderer . setRenderTarget ( currentRenderTarget ) ;
771803 renderer . setMRT ( currentMRT ) ;
772804 renderer . autoClear = currentAutoClear ;
805+ renderer . contextNode = currentContextNode ;
773806
774807 camera . layers . mask = currentMask ;
775808
0 commit comments