package Ġorg . open rnd r . po isson fill Ċ Ċ import Ġorg . open rnd r . draw .* Ċ import Ġorg . open rnd r . extra . fx . blend . Pas sthrough Ċ import Ġorg . open rnd r . extra . fx . blend . Subtract Ċ import Ġorg . open rnd r . resource Url Ċ Ċ internal Ġclass ĠBlend Boundary Ġ: ĠFilter ( filter Shader From Url ( resource Url ("/ shaders / gl 3 / po isson / blend - boundary . frag "))) Ċ class ĠAlpha To Bitmap Ġ: ĠFilter ( filter Shader From Url ( resource Url ("/ shaders / gl 3 / po isson / alpha - to - bitmap . frag "))) Ċ Ċ internal Ġclass ĠBlend Combine Ġ: ĠFilter ( filter Shader From Url ( resource Url ("/ shaders / gl 3 / po isson / blend - combine . frag "))) Ġ{ ĊĠĠĠ Ġvar Ġsoft Mask Gain : ĠDouble Ġby Ġparameters ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġsoft Mask Gain Ġ= Ġ 1 . 0 ĊĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġclass ĠCl amp Ġ: ĠFilter ( filter Shader From Url ( resource Url ("/ shaders / gl 3 / po isson / clamp . frag "))) Ġ{ ĊĠĠĠ Ġvar Ġmin Value : ĠDouble Ġby Ġparameters ĊĠĠĠ Ġvar ĠmaxValue : ĠDouble Ġby Ġparameters Ċ } Ċ Ċ private Ġval Ġpas sthrough Ġby Ġlazy Ġ{ ĠPas sthrough () Ġ} Ċ private Ġval Ġsubtract Ġby Ġlazy Ġ{ ĠSubtract () Ġ} Ċ Ċ class ĠPo isson Bl ender ( width : ĠInt , Ġheight : ĠInt , Ġtype : ĠColor Type Ġ= ĠColor Type . FLOAT 3 2 ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġpy ramid Ġ= ĠConvolution Py ramid ( width , Ġheight , Ġ 0 , Ġtype Ġ= Ġtype ) ĊĠĠĠ Ġprivate Ġval Ġpreprocess Ġ= Ġcolor Buffer ( width , Ġheight , Ġtype Ġ= Ġtype ) ĊĠĠĠ Ġprivate Ġval Ġcombined Ġ= Ġcolor Buffer ( width , Ġheight , Ġtype Ġ= Ġtype ) ĊĊĠĠĠ Ġprivate Ġval Ġfill Boundary Ġ= ĠBlend Boundary () ĊĠĠĠ Ġprivate Ġval Ġfill Combine Ġ= ĠBlend Combine () ĊĊĠĠĠ Ġprivate Ġval Ġdifference Ġ= Ġcolor Buffer ( width , Ġheight , Ġtype Ġ= Ġtype ) ĊĊĠĠĠ Ġprivate Ġval Ġh 1 Ġ= Ġfloat ArrayOf ( 0 . 1 5 0 7 1 4 6 f , Ġ 0 . 6 8 3 5 7 8 5 f , Ġ 1 . 0 3 3 4 1 9 1 f , Ġ 0 . 6 8 3 6 f , Ġ 0 . 1 5 0 7 f ) ĊĠĠĠ Ġprivate Ġval Ġh 2 Ġ= Ġ 0 . 0 2 6 9 5 4 6 f ĊĠĠĠ Ġprivate Ġval Ġg Ġ= Ġfloat ArrayOf ( 0 . 0 3 1 1 8 4 9 f , Ġ 0 . 7 7 5 2 8 5 4 f , Ġ 0 . 0 3 1 1 8 4 9 f ) ĊĊĠĠĠ Ġprivate Ġval Ġclamp Ġ= ĠCl amp () ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġpy ramid . h 1 Ġ= Ġh 1 ĊĠĠĠĠĠĠĠ Ġpy ramid . g Ġ= Ġg ĊĠĠĠĠĠĠĠ Ġpy ramid . h 2 Ġ= Ġh 2 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġprocess ( target : ĠColor Buffer , Ġsource : ĠColor Buffer , Ġmask : ĠColor Buffer , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsoft Mask : ĠColor Buffer Ġ= Ġmask , Ġsoft Mask Gain : ĠDouble Ġ= Ġ 1 . 0 ): ĠColor Buffer Ġ{ ĊĠĠĠĠĠĠĠ Ġsubtract . apply ( array Of ( target , Ġsource ), Ġdifference ) ĊĠĠĠĠĠĠĠ Ġclamp . min Value Ġ= Ġ- 0 . 5 0 ĊĠĠĠĠĠĠĠ Ġclamp . max Value Ġ= Ġ 0 . 5 0 ĊĠĠĠĠĠĠĠ Ġfill Boundary . apply ( array Of ( difference , Ġmask ), Ġpreprocess ) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġpy ramid . process ( preprocess ) ĊĠĠĠĠĠĠĠ Ġfill Combine . soft Mask Gain Ġ= Ġsoft Mask Gain ĊĠĠĠĠĠĠĠ Ġfill Combine . apply ( array Of ( result , Ġtarget , Ġsource , Ġmask , Ġsoft Mask ), ĠarrayOf ( combined )) ĊĠĠĠĠĠĠĠ Ġreturn Ġcombined ĊĠĠĠ Ġ} Ċ }