package Ġb aa ah s . gl . patch Ċ Ċ import Ġb aa ah s . app . ui . editor . Link Option Ċ import Ġb aa ah s . app . ui . editor . Port Link Option Ċ import Ġb aa ah s . device . DeviceType Ċ import Ġb aa ah s . gl . Tool chain Ċ import Ġb aa ah s . gl . glsl . Link Exception Ċ import Ġb aa ah s . gl . open Shader Ċ import Ġb aa ah s . gl . shader . Input Port Ċ import Ġb aa ah s . gl . shader . Open Shader Ċ import Ġb aa ah s . plugin . Plugins Ċ import Ġb aa ah s . show . Shader Channel Ċ import Ġb aa ah s . show . live . Open Patch Ċ import Ġb aa ah s . show . live . Open Show Ċ import Ġb aa ah s . show . live . Open Show Visitor Ċ import Ġb aa ah s . show . mutable .* Ċ import Ġb aa ah s . util . Logger Ċ Ċ class ĠChannels Info Ġ{ ĊĠĠĠ Ġinternal Ġval Ġshader Channels : ĠMutable Map < ContentType , ĠMutable Set < Mutable Shader Channel >> ĊĠĠĠ Ġinternal Ġval Ġdevice Types : ĠCollection < DeviceType > ĊĊĠĠĠ Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġparent Show : ĠOpen Show ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġdevice Types : ĠCollection < DeviceType > ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġshader Channels Ġ= Ġshader Channels From Device Types ( device Types ) ĊĊĠĠĠĠĠĠĠ Ġparent Show ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠOpen Show Visitor () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Patch ( open Patch : ĠOpen Patch ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . visit Patch ( open Patch ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Patch . shader Instances . forEach Ġ{ Ġshader Instance Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠcontentType Ġ= Ġshader Instance . shader . output Port . contentType ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshader Channels . get Or Put ( contentType , Ġ:: mutable Set Of ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add ( shader Instance . shader Channel . to Mutable ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. visit Show ( parent Show ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġthis . shader Channels Ġ= Ġshader Channels ĊĠĠĠĠĠĠĠ Ġthis . device Types Ġ= Ġdevice Types ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġparent Mutable Show : ĠMutable Show ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġdevice Types : ĠCollection < DeviceType >, ĊĠĠĠĠĠĠĠ Ġtoolchain : ĠTool chain ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġshader Channels Ġ= Ġshader Channels From Device Types ( device Types ) ĊĊĠĠĠĠĠĠĠ Ġparent Mutable Show ?. accept ( object Ġ: ĠMutable Show Visitor Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit ( mutable Shader Instance : ĠMutable Shader Instance ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshader Ġ= Ġmutable Shader Instance . mutable Shader . build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠcontentType Ġ= Ġtoolchain . open Shader ( shader ). output Port . contentType ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshader Channels . get Or Put ( contentType , Ġ:: mutable Set Of ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add ( mutable Shader Instance . shader Channel ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIt 's Ġokay , Ġjust Ġignore Ġit . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġthis . shader Channels Ġ= Ġshader Channels ĊĠĠĠĠĠĠĠ Ġthis . device Types Ġ= Ġdevice Types ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshader Channels From Device Types ( device Types : ĠCollection < DeviceType >): ĠMutable Map < ContentType , ĠMutable Set < Mutable Shader Channel >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġshader Channels Ġ= Ġmutable Map Of < ContentType , ĠMutable Set < Mutable Shader Channel >>() ĊĊĠĠĠĠĠĠĠ Ġval Ġlikely Pipeline Artifact Types Ġ= Ġdevice Types . flatMap Ġ{ Ġit . likely P ipelines Ġ}. map Ġ{ Ġit . second Ġ} ĊĠĠĠĠĠĠĠ Ġlikely Pipeline Artifact Types . forEach Ġ{ ĠcontentType Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshader Channels . get Or Put ( contentType , Ġ:: mutable Set Of ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add ( Shader Channel . Main . to Mutable ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġshader Channels ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġget ( contentType : ĠContentType ): ĠSet < Mutable Shader Channel >? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġshader Channels [ contentType ] ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠShader Instance Options ( ĊĠĠĠ Ġshader : ĠOpen Shader , ĊĠĠĠ Ġval Ġshader Channel : ĠShader Channel Ġ= ĠShader Channel . Main , ĊĠĠĠ Ġchannels Info : ĠChannels Info , ĊĠĠĠ Ġdefault Ports : ĠMap < ContentType , ĠMutable Port > Ġ= Ġempty Map (), ĊĠĠĠ Ġcurrent Links : ĠMap < String , ĠMutable Port >, ĊĠĠĠ Ġprivate Ġval Ġplugins : ĠPlugins Ċ ) Ġ{ ĊĠĠĠ Ġval Ġshader Channels : ĠList < Mutable Shader Channel > ĊĠĠĠ Ġval Ġinput Port Link Options : ĠMap < String , ĠList < Link Option >> ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġsuggest Links For ( input Port : ĠInput Port ): ĠArrayList < Port Link Option > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoptions Ġ= Ġarray ListOf < Port Link Option >() ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexact ContentType Ġ= Ġinput Port . contentType ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpanded Content Types Ġ= Ġplugins . suggest Content Types ( input Port ) Ġ- Ġexact ContentType ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontent Types Ġ= ĠlistOf NotNull ( exact ContentType ) Ġ+ Ġexpanded Content Types ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Types . forEach Ġ{ ĠcontentType Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdefault Port Ġ= Ġdefault Ports [ contentType ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Exact ContentType Ġ= ĠcontentType Ġ== Ġexact ContentType Ġ|| Ġexact ContentType . is Unknown () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoptions . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( default Port Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPort Link Option ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Port , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Exact ContentType Ġ= Ġis Exact ContentType , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Local Shader Out Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Default Binding Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPort Link Option ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMutable Shader Channel ( shader Channel . id ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Exact ContentType Ġ= Ġis Exact ContentType , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Default Binding Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannels Info [ contentType ]?. forEach Ġ{ Ġmutable Shader Channel Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoptions . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPort Link Option ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġthis Ġis Ġd umb Ġand Ġbroken . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmutable Shader Channel , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Shader Channel Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Exact ContentType Ġ= Ġis Exact ContentType ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( contentType Ġ== Ġshader . output Port . contentType ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoptions . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPort Link Option ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshader Channel . to Mutable (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreates Filter Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Shader Channel Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Exact ContentType Ġ= Ġis Exact ContentType ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( input Port . has Plugin Ref ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠdataSource Ġ= Ġplugins . resolve DataSource ( input Port ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoptions . add ( Port Link Option ( Mutable DataSource Port ( dataSource ), Ġis Plugin Ref Ġ= Ġtrue )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠLink Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warn ( e ) Ġ{ Ġ" Incorrect Ġplugin Ġreference ." Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġplugins . suggest Data Sources ( input Port , Ġcontent Types . toSet ()). forEach Ġ{ Ġport Link Option Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoptions . add ( port Link Option ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġoptions ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġmap Ġ= Ġshader . input Ports . associate Ġ{ Ġinput Port Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Link Ġ= Ġcurrent Links [ input Port . id ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoptions Ġ= Ġsuggest Links For ( input Port ) Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf NotNull ( current Link ). map Ġ{ ĠPort Link Option ( it ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġalready Added Ġ= Ġmutable Set Of < Mutable Port ?> () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsorted Options Ġ= Ġoptions ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. sorted By Ġ{ Ġ 0 f Ġ- Ġit . priority Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġalready Added . add ( it . get Mutable Port ()) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput Port . id Ġto Ġsorted Options ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġthis . shader Channels Ġ= Ġchannels Info . shader Channels . values . flatten (). sorted By Ġ{ Ġit . title Ġ} ĊĠĠĠĠĠĠĠ Ġthis . input Port Link Options Ġ= Ġmap ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlogger Ġ= ĠLogger < Shader Instance Options >() ĊĠĠĠ Ġ} Ċ }