framefields 2.4.2 → 2.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/audio/index.d.mts +4 -4
- package/dist/audio/index.mjs +10 -10
- package/dist/{audio-DHuEMOtQ.d.mts → audio-BymXfAvH.d.mts} +3 -3
- package/dist/{audio-DHuEMOtQ.d.mts.map → audio-BymXfAvH.d.mts.map} +1 -1
- package/dist/{audio-Bb31xJuX.mjs → audio-BzHHpImj.mjs} +4 -4
- package/dist/{audio-Bb31xJuX.mjs.map → audio-BzHHpImj.mjs.map} +1 -1
- package/dist/{dist-SB9qfAko.mjs → dist-Bo2_zeCn.mjs} +2 -2
- package/dist/{dist-SB9qfAko.mjs.map → dist-Bo2_zeCn.mjs.map} +1 -1
- package/dist/{dist-CxGfrigI.mjs → dist-DMa2BbYs.mjs} +3 -3
- package/dist/{dist-CxGfrigI.mjs.map → dist-DMa2BbYs.mjs.map} +1 -1
- package/dist/{dist-ClyC_d66.mjs → dist-TrtLGPvc.mjs} +117 -40
- package/dist/dist-TrtLGPvc.mjs.map +1 -0
- package/dist/{dist-CspOG4V1.mjs → dist-hmWTJPik.mjs} +2 -2
- package/dist/{dist-CspOG4V1.mjs.map → dist-hmWTJPik.mjs.map} +1 -1
- package/dist/effects/index.d.mts +5 -5
- package/dist/effects/index.mjs +35 -35
- package/dist/{effects-BOk_2kzM.mjs → effects-CiZjSwIh.mjs} +71 -3
- package/dist/effects-CiZjSwIh.mjs.map +1 -0
- package/dist/fonts/index.mjs +2 -2
- package/dist/{fonts-CsMDfqv9.mjs → fonts-Da1JDKpc.mjs} +2 -2
- package/dist/{fonts-CsMDfqv9.mjs.map → fonts-Da1JDKpc.mjs.map} +1 -1
- package/dist/{gpu-DtT5I4ME.mjs → gpu-CHIgM_YH.mjs} +2 -2
- package/dist/{gpu-DtT5I4ME.mjs.map → gpu-CHIgM_YH.mjs.map} +1 -1
- package/dist/{index-B1XcyMm8.d.mts → index-B0BZMhtw.d.mts} +7 -7
- package/dist/index-B0BZMhtw.d.mts.map +1 -0
- package/dist/{index-B2Xesdug.d.mts → index-CJkihekp.d.mts} +293 -143
- package/dist/index-CJkihekp.d.mts.map +1 -0
- package/dist/{index-DujpgUUq.d.mts → index-DGe83M-p.d.mts} +240 -152
- package/dist/index-DGe83M-p.d.mts.map +1 -0
- package/dist/{index-BTPLbjt4.d.mts → index-DIvWBm-q.d.mts} +2 -2
- package/dist/{index-BTPLbjt4.d.mts.map → index-DIvWBm-q.d.mts.map} +1 -1
- package/dist/{index-B3-gwjK6.d.mts → index-Dwf76Qep.d.mts} +3 -3
- package/dist/{index-B3-gwjK6.d.mts.map → index-Dwf76Qep.d.mts.map} +1 -1
- package/dist/{index-D-l-yCv6.d.mts → index-WMofVN02.d.mts} +3 -3
- package/dist/{index-D-l-yCv6.d.mts.map → index-WMofVN02.d.mts.map} +1 -1
- package/dist/index.d.mts +138 -72
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +165 -165
- package/dist/index.mjs.map +1 -1
- package/dist/preview/index.d.mts +2 -2
- package/dist/preview/index.mjs +10 -10
- package/dist/{preview-DyGw2b3_.mjs → preview-5E4B96RD.mjs} +2 -2
- package/dist/{preview-DyGw2b3_.mjs.map → preview-5E4B96RD.mjs.map} +1 -1
- package/dist/preview-engine/audio.mjs +1 -1
- package/dist/preview-engine/{chunk-3ACCCPBN.mjs → chunk-37P2KIFE.mjs} +1 -1
- package/dist/preview-engine/{chunk-GNG4YH2W.mjs → chunk-3SOD7OTO.mjs} +1 -1
- package/dist/preview-engine/{chunk-DOCSX45C.mjs → chunk-54HE34HO.mjs} +1 -1
- package/dist/preview-engine/{chunk-WJJIISQJ.mjs → chunk-5CWQHYQP.mjs} +1 -1
- package/dist/preview-engine/{chunk-Z6UKUHPU.mjs → chunk-5EVEGKWT.mjs} +1 -1
- package/dist/preview-engine/{chunk-VONDRBA2.mjs → chunk-5JSSXOBB.mjs} +1 -1
- package/dist/preview-engine/chunk-5SVJIGPK.mjs +1 -0
- package/dist/preview-engine/{chunk-5RQHNB6Y.mjs → chunk-6MBYREBG.mjs} +1 -1
- package/dist/preview-engine/{chunk-WACWOKEP.mjs → chunk-6TGNQ5FD.mjs} +1 -1
- package/dist/preview-engine/{chunk-HUKAC5MJ.mjs → chunk-6WKWYUOM.mjs} +1 -1
- package/dist/preview-engine/{chunk-SWXVITCQ.mjs → chunk-7J4OK4VE.mjs} +1 -1
- package/dist/preview-engine/{chunk-O6NRIXS5.mjs → chunk-7QE6II7R.mjs} +1 -1
- package/dist/preview-engine/{chunk-34ACEGNW.mjs → chunk-A2775RSO.mjs} +1 -1
- package/dist/preview-engine/{chunk-FFGBUS76.mjs → chunk-AKYUVDKM.mjs} +1 -1
- package/dist/preview-engine/{chunk-6K7US2WD.mjs → chunk-AWX4YGC5.mjs} +1 -1
- package/dist/preview-engine/{chunk-QJZKIY4H.mjs → chunk-AY2ZIXST.mjs} +1 -1
- package/dist/preview-engine/{chunk-LK3T65RB.mjs → chunk-BIS3W4Z5.mjs} +1 -1
- package/dist/preview-engine/{chunk-7QJUC6YY.mjs → chunk-C45ROXI6.mjs} +14 -14
- package/dist/preview-engine/{chunk-GMGGDADT.mjs → chunk-CEIOI4HO.mjs} +1 -1
- package/dist/preview-engine/{chunk-RHRMEBNK.mjs → chunk-E7DH7EPX.mjs} +1 -1
- package/dist/preview-engine/{chunk-NNQUIVTE.mjs → chunk-EEOUHDUD.mjs} +1 -1
- package/dist/preview-engine/{chunk-ZKPQGQE3.mjs → chunk-FDNR4PRC.mjs} +1 -1
- package/dist/preview-engine/chunk-FSAELHVT.mjs +1 -0
- package/dist/preview-engine/{chunk-C6Z7H2RZ.mjs → chunk-GIH5QURF.mjs} +1 -1
- package/dist/preview-engine/{chunk-RDP6QROU.mjs → chunk-GQN35VLT.mjs} +1 -1
- package/dist/preview-engine/{chunk-PZF6T7DM.mjs → chunk-ILBZQLUF.mjs} +1 -1
- package/dist/preview-engine/{chunk-2DDBSI75.mjs → chunk-JJA4G3OU.mjs} +1 -1
- package/dist/preview-engine/{chunk-KAQUNOVB.mjs → chunk-JJYNYYPA.mjs} +1 -1
- package/dist/preview-engine/{chunk-NRAZV5OA.mjs → chunk-JTUK7ZXK.mjs} +1 -1
- package/dist/preview-engine/{chunk-HDGFNBYK.mjs → chunk-KJ2DTA77.mjs} +1 -1
- package/dist/preview-engine/{chunk-7LVOSEGN.mjs → chunk-LMZHCWXP.mjs} +1 -1
- package/dist/preview-engine/{chunk-A5OVKZ52.mjs → chunk-LSBCFJZM.mjs} +1 -1
- package/dist/preview-engine/{chunk-FLPSWDX4.mjs → chunk-MJN3LOZ7.mjs} +1 -1
- package/dist/preview-engine/{chunk-WCZ5DKZ4.mjs → chunk-N3PRZLZJ.mjs} +1 -1
- package/dist/preview-engine/{chunk-XOEEGC4Z.mjs → chunk-NVTPJUNG.mjs} +1 -1
- package/dist/preview-engine/{chunk-67SSYK7D.mjs → chunk-O3NOB5IB.mjs} +1 -1
- package/dist/preview-engine/{chunk-LIQA5OOU.mjs → chunk-O5LA63CK.mjs} +1 -1
- package/dist/preview-engine/chunk-OLLY3Q7M.mjs +1 -0
- package/dist/preview-engine/{chunk-FFMPC7QA.mjs → chunk-OZDZQMTB.mjs} +1 -1
- package/dist/preview-engine/chunk-PCWWKYFO.mjs +1 -0
- package/dist/preview-engine/{chunk-G4J662EL.mjs → chunk-S7NG26UG.mjs} +1 -1
- package/dist/preview-engine/{chunk-FHKBALVI.mjs → chunk-TFFG5YFI.mjs} +1 -1
- package/dist/preview-engine/{chunk-HNNIVJ2K.mjs → chunk-U4SQUTDV.mjs} +1 -1
- package/dist/preview-engine/{chunk-JX22B2FS.mjs → chunk-UDDK5QZF.mjs} +1 -1
- package/dist/preview-engine/{chunk-KT35IPCF.mjs → chunk-UMF7NNUA.mjs} +1 -1
- package/dist/preview-engine/{chunk-GQLZXCW3.mjs → chunk-UVWGZUKZ.mjs} +1 -1
- package/dist/preview-engine/{chunk-NQZKBFC6.mjs → chunk-V6DAD4S4.mjs} +14 -14
- package/dist/preview-engine/{chunk-R26SY5D4.mjs → chunk-V6LCSK6Q.mjs} +1 -1
- package/dist/preview-engine/{chunk-2GIWWDE4.mjs → chunk-W3QGP5XF.mjs} +1 -1
- package/dist/preview-engine/{chunk-RKVB47IA.mjs → chunk-XTPEGKOZ.mjs} +1 -1
- package/dist/preview-engine/chunk-YJ6GWVL4.mjs +174 -0
- package/dist/preview-engine/{chunk-LLDIDE5Q.mjs → chunk-YQYLBXOX.mjs} +1 -1
- package/dist/preview-engine/effects.mjs +1 -1
- package/dist/preview-engine/framefields.mjs +17 -17
- package/dist/preview-engine/player.mjs +1 -1
- package/dist/preview-engine/{renderers-WR6MKT5S.mjs → renderers-2A7YDJMJ.mjs} +1 -1
- package/dist/preview-engine/renderers-2AD6AHAO.mjs +1 -0
- package/dist/preview-engine/{renderers-K7B5PQBT.mjs → renderers-2GE5HE56.mjs} +1 -1
- package/dist/preview-engine/{renderers-SW7FIEKO.mjs → renderers-35G4KCQ2.mjs} +1 -1
- package/dist/preview-engine/renderers-37UYW266.mjs +1 -0
- package/dist/preview-engine/renderers-3YHETAPE.mjs +1 -0
- package/dist/preview-engine/renderers-43LBWRY2.mjs +1 -0
- package/dist/preview-engine/{renderers-TY7DVI7E.mjs → renderers-4H34AFW2.mjs} +1 -1
- package/dist/preview-engine/renderers-4I4UDLDR.mjs +1 -0
- package/dist/preview-engine/renderers-5EITT2FW.mjs +1 -0
- package/dist/preview-engine/{renderers-AZYJFJLO.mjs → renderers-5OGAF66H.mjs} +1 -1
- package/dist/preview-engine/{renderers-UMPOVFRA.mjs → renderers-6GYRMHGQ.mjs} +1 -1
- package/dist/preview-engine/{renderers-RKZGYWDG.mjs → renderers-7M3YOI7E.mjs} +1 -1
- package/dist/preview-engine/renderers-7UKFQ75V.mjs +1 -0
- package/dist/preview-engine/renderers-AIRDDXRB.mjs +1 -0
- package/dist/preview-engine/{renderers-MBSOKWKB.mjs → renderers-ATL5ARUV.mjs} +1 -1
- package/dist/preview-engine/renderers-BUOGMWAA.mjs +1 -0
- package/dist/preview-engine/renderers-C4XIAG3F.mjs +1 -0
- package/dist/preview-engine/{renderers-4AJWVIJG.mjs → renderers-DFJDEPCU.mjs} +1 -1
- package/dist/preview-engine/{renderers-6JZ4HYIU.mjs → renderers-DKOWLKDE.mjs} +1 -1
- package/dist/preview-engine/renderers-ELARGDRC.mjs +1 -0
- package/dist/preview-engine/renderers-EU5VM2S2.mjs +1 -0
- package/dist/preview-engine/{renderers-NJLGPPX7.mjs → renderers-FNPXT2EH.mjs} +1 -1
- package/dist/preview-engine/renderers-GEPP3YKK.mjs +1 -0
- package/dist/preview-engine/renderers-IQNZQWYU.mjs +1 -0
- package/dist/preview-engine/renderers-J6DEIWTU.mjs +1 -0
- package/dist/preview-engine/{renderers-EI6MQ2EL.mjs → renderers-JQ7AI473.mjs} +1 -1
- package/dist/preview-engine/renderers-JTVCE5PV.mjs +1 -0
- package/dist/preview-engine/{renderers-CK3ZL3GM.mjs → renderers-K23EAM2J.mjs} +1 -1
- package/dist/preview-engine/renderers-KCNUETAD.mjs +1 -0
- package/dist/preview-engine/renderers-KKBHXAWS.mjs +1 -0
- package/dist/preview-engine/{renderers-UDOBX433.mjs → renderers-KW75FYFG.mjs} +1 -1
- package/dist/preview-engine/renderers-LER7SUT2.mjs +1 -0
- package/dist/preview-engine/{renderers-GAIUTII6.mjs → renderers-LF6W5P2I.mjs} +1 -1
- package/dist/preview-engine/{renderers-FM6A5YR4.mjs → renderers-MHDLRY3S.mjs} +1 -1
- package/dist/preview-engine/renderers-MOERLDWF.mjs +1 -0
- package/dist/preview-engine/{renderers-XKHNBARD.mjs → renderers-NJAKGI25.mjs} +1 -1
- package/dist/preview-engine/renderers-NPKRNXAT.mjs +1 -0
- package/dist/preview-engine/renderers-O57YIIAO.mjs +1 -0
- package/dist/preview-engine/renderers-OPUIAD7I.mjs +1 -0
- package/dist/preview-engine/renderers-PENUAXDD.mjs +1 -0
- package/dist/preview-engine/renderers-PFCI7ZFW.mjs +1 -0
- package/dist/preview-engine/{renderers-HZHEGONW.mjs → renderers-PM4Q5QOW.mjs} +1 -1
- package/dist/preview-engine/renderers-Q4HDP2IE.mjs +1 -0
- package/dist/preview-engine/{renderers-GUPEJK3O.mjs → renderers-Q6AO5M54.mjs} +1 -1
- package/dist/preview-engine/{renderers-75TL7RLS.mjs → renderers-QJNGN722.mjs} +1 -1
- package/dist/preview-engine/renderers-QMHUOKMM.mjs +1 -0
- package/dist/preview-engine/renderers-R26YPECG.mjs +1 -0
- package/dist/preview-engine/renderers-TAFDMFEA.mjs +1 -0
- package/dist/preview-engine/{renderers-IHRFEZNP.mjs → renderers-TFEDHXPY.mjs} +1 -1
- package/dist/preview-engine/renderers-TMZLWQP2.mjs +1 -0
- package/dist/preview-engine/renderers-TP6ZMGU4.mjs +1 -0
- package/dist/preview-engine/renderers-TY63VTZB.mjs +1 -0
- package/dist/preview-engine/{renderers-IJDQJEE5.mjs → renderers-U2ZWRL25.mjs} +1 -1
- package/dist/preview-engine/renderers-UBO4ZNE6.mjs +1 -0
- package/dist/preview-engine/renderers-UCNQ536S.mjs +1 -0
- package/dist/preview-engine/{renderers-TCNPEANL.mjs → renderers-VD5GHHK6.mjs} +1 -1
- package/dist/preview-engine/{renderers-BDWVXYTW.mjs → renderers-WNMRLGZS.mjs} +1 -1
- package/dist/preview-engine/{renderers-FKH5S64C.mjs → renderers-WOLTH5VI.mjs} +1 -1
- package/dist/preview-engine/renderers-WOZQDE4A.mjs +1 -0
- package/dist/preview-engine/renderers-X2XGDF3R.mjs +1 -0
- package/dist/preview-engine/renderers-XG3BDROH.mjs +1 -0
- package/dist/preview-engine/{renderers-R4WMM6IX.mjs → renderers-XPO2WQNF.mjs} +1 -1
- package/dist/preview-engine/renderers-XS4CFZWR.mjs +1 -0
- package/dist/preview-engine/{renderers-FADYGSLK.mjs → renderers-XTCBHTHC.mjs} +1 -1
- package/dist/preview-engine/{renderers-LVLVJHOL.mjs → renderers-XTRFEQO4.mjs} +1 -1
- package/dist/preview-engine/renderers-ZQDMRWN7.mjs +1 -0
- package/dist/preview-engine/{renderers-7CPYTCNW.mjs → renderers-ZRR7BLB7.mjs} +1 -1
- package/dist/preview-engine/signals.mjs +1 -1
- package/dist/{program-C2cJayA1.mjs → program-KwDdbC0-.mjs} +78 -38
- package/dist/program-KwDdbC0-.mjs.map +1 -0
- package/dist/renderer/index.d.mts +2 -2
- package/dist/renderer/index.mjs +2 -2
- package/dist/{renderer-C1E5Rt5q.mjs → renderer-1P3yS8YM.mjs} +3 -3
- package/dist/{renderer-C1E5Rt5q.mjs.map → renderer-1P3yS8YM.mjs.map} +1 -1
- package/dist/renderer-5C41E6gT.mjs +5 -0
- package/dist/renderer-6SXF9Ykm.mjs +5 -0
- package/dist/renderer-B2C2w3Wr.mjs +5 -0
- package/dist/renderer-B2QSfPYZ.mjs +5 -0
- package/dist/{renderer-Bkrk0M0r.mjs → renderer-B4jxP8vF.mjs} +3 -3
- package/dist/{renderer-Bkrk0M0r.mjs.map → renderer-B4jxP8vF.mjs.map} +1 -1
- package/dist/{renderer-Csss5GFQ.mjs → renderer-B4ydDdo6.mjs} +2 -2
- package/dist/{renderer-Csss5GFQ.mjs.map → renderer-B4ydDdo6.mjs.map} +1 -1
- package/dist/renderer-B5cQcMl1.mjs +5 -0
- package/dist/{renderer-B3e4LSE6.mjs → renderer-B9ssmkbx.mjs} +3 -3
- package/dist/{renderer-B3e4LSE6.mjs.map → renderer-B9ssmkbx.mjs.map} +1 -1
- package/dist/{renderer-UcdqCarR.mjs → renderer-BAoKytKL.mjs} +3 -3
- package/dist/{renderer-UcdqCarR.mjs.map → renderer-BAoKytKL.mjs.map} +1 -1
- package/dist/{renderer-Cw6Sagih.mjs → renderer-BCLmYH4S.mjs} +3 -3
- package/dist/{renderer-Cw6Sagih.mjs.map → renderer-BCLmYH4S.mjs.map} +1 -1
- package/dist/renderer-BDhD8Yab.mjs +3 -0
- package/dist/{renderer-Za4D9hej.mjs → renderer-BHLYKy8b.mjs} +3 -3
- package/dist/{renderer-Za4D9hej.mjs.map → renderer-BHLYKy8b.mjs.map} +1 -1
- package/dist/{renderer-apeDrNXM.mjs → renderer-BI8QhEj9.mjs} +3 -3
- package/dist/{renderer-apeDrNXM.mjs.map → renderer-BI8QhEj9.mjs.map} +1 -1
- package/dist/{renderer-CCGzT6bX.mjs → renderer-BMLJgnbU.mjs} +2 -2
- package/dist/renderer-BSDdTHDh.mjs +5 -0
- package/dist/{renderer-CcoUNzlQ.mjs → renderer-BT0x6KPK.mjs} +3 -3
- package/dist/{renderer-CcoUNzlQ.mjs.map → renderer-BT0x6KPK.mjs.map} +1 -1
- package/dist/renderer-BTUjk8uY.mjs +5 -0
- package/dist/{renderer-RDCax5CK.mjs → renderer-BUwHWIf7.mjs} +3 -3
- package/dist/{renderer-RDCax5CK.mjs.map → renderer-BUwHWIf7.mjs.map} +1 -1
- package/dist/{renderer-DTw-W0Yz.mjs → renderer-B_b8-ztW.mjs} +3 -3
- package/dist/{renderer-DTw-W0Yz.mjs.map → renderer-B_b8-ztW.mjs.map} +1 -1
- package/dist/{renderer-DwVOxdzC.mjs → renderer-BaJQx0Bp.mjs} +3 -3
- package/dist/{renderer-DwVOxdzC.mjs.map → renderer-BaJQx0Bp.mjs.map} +1 -1
- package/dist/renderer-Bcey5Gvk.mjs +5 -0
- package/dist/renderer-Bd2MuOeJ.mjs +5 -0
- package/dist/renderer-Bd5A0zer.mjs +5 -0
- package/dist/{renderer-Dwu_zfdL.mjs → renderer-Bhfl-WFX.mjs} +3 -3
- package/dist/{renderer-Dwu_zfdL.mjs.map → renderer-Bhfl-WFX.mjs.map} +1 -1
- package/dist/{renderer-BjCHW9Jp.mjs → renderer-Bkq1PT0g.mjs} +2 -2
- package/dist/{renderer-DjwITRvg.mjs → renderer-Blm4Dv_h.mjs} +2 -2
- package/dist/{renderer-BTd2sWDC.mjs → renderer-BtWWpFvl.mjs} +3 -3
- package/dist/{renderer-BTd2sWDC.mjs.map → renderer-BtWWpFvl.mjs.map} +1 -1
- package/dist/{renderer-92eLJg24.mjs → renderer-C-z6bxj9.mjs} +4 -4
- package/dist/{renderer-92eLJg24.mjs.map → renderer-C-z6bxj9.mjs.map} +1 -1
- package/dist/{renderer-EZp_IIPK.mjs → renderer-C0ds-UfM.mjs} +3 -3
- package/dist/{renderer-EZp_IIPK.mjs.map → renderer-C0ds-UfM.mjs.map} +1 -1
- package/dist/{renderer-B4RpSd4A.mjs → renderer-C1U85w9f.mjs} +2 -2
- package/dist/{renderer-B4RpSd4A.mjs.map → renderer-C1U85w9f.mjs.map} +1 -1
- package/dist/{renderer-X0eKSD7v.mjs → renderer-C4vHq0X8.mjs} +3 -3
- package/dist/{renderer-X0eKSD7v.mjs.map → renderer-C4vHq0X8.mjs.map} +1 -1
- package/dist/{renderer--ruTGlPo.mjs → renderer-C4xvz_Ft.mjs} +3 -3
- package/dist/{renderer--ruTGlPo.mjs.map → renderer-C4xvz_Ft.mjs.map} +1 -1
- package/dist/{renderer-ByCX4JYg.mjs → renderer-C5WkQZGR.mjs} +3 -3
- package/dist/{renderer-ByCX4JYg.mjs.map → renderer-C5WkQZGR.mjs.map} +1 -1
- package/dist/{renderer-CqtIbe5n.mjs → renderer-CAi-lhR2.mjs} +2 -2
- package/dist/{renderer-CqtIbe5n.mjs.map → renderer-CAi-lhR2.mjs.map} +1 -1
- package/dist/renderer-CC-WlYa2.mjs +5 -0
- package/dist/{renderer-DZJJHCtm.mjs → renderer-CDky5Gva.mjs} +3 -3
- package/dist/{renderer-DZJJHCtm.mjs.map → renderer-CDky5Gva.mjs.map} +1 -1
- package/dist/{renderer-yyUpCeWb.mjs → renderer-CE83KHgr.mjs} +2 -2
- package/dist/{renderer-yyUpCeWb.mjs.map → renderer-CE83KHgr.mjs.map} +1 -1
- package/dist/{renderer-CoWfz-9p.mjs → renderer-CLxQ4rU6.mjs} +71 -71
- package/dist/{renderer-CoWfz-9p.mjs.map → renderer-CLxQ4rU6.mjs.map} +1 -1
- package/dist/{renderer-BBAbZfBl.mjs → renderer-CPLfsRe1.mjs} +4 -4
- package/dist/{renderer-BBAbZfBl.mjs.map → renderer-CPLfsRe1.mjs.map} +1 -1
- package/dist/{renderer-CDOobs18.mjs → renderer-CS8VMTp1.mjs} +3 -3
- package/dist/{renderer-CDOobs18.mjs.map → renderer-CS8VMTp1.mjs.map} +1 -1
- package/dist/{renderer-D0vom99O.mjs → renderer-CTYKUnDq.mjs} +2 -2
- package/dist/{renderer-D0vom99O.mjs.map → renderer-CTYKUnDq.mjs.map} +1 -1
- package/dist/{renderer-DILUmb-e.mjs → renderer-CUPWHfEY.mjs} +3 -3
- package/dist/{renderer-DILUmb-e.mjs.map → renderer-CUPWHfEY.mjs.map} +1 -1
- package/dist/renderer-Cb0qf1UG.mjs +5 -0
- package/dist/renderer-CfX13dgQ.mjs +5 -0
- package/dist/renderer-ChFkRLrv.mjs +5 -0
- package/dist/{renderer-CDUxAtsk.mjs → renderer-Ci6YMa4u.mjs} +4 -4
- package/dist/{renderer-CDUxAtsk.mjs.map → renderer-Ci6YMa4u.mjs.map} +1 -1
- package/dist/{renderer-DKfwlE4e.mjs → renderer-CjQAYeYz.mjs} +3 -3
- package/dist/{renderer-DKfwlE4e.mjs.map → renderer-CjQAYeYz.mjs.map} +1 -1
- package/dist/renderer-CjkfJj5R.mjs +5 -0
- package/dist/renderer-Ck7Lu6c9.mjs +5 -0
- package/dist/{renderer-CJ4bxCld.mjs → renderer-CrwYWVsV.mjs} +2 -2
- package/dist/renderer-CuquqG_c.mjs +5 -0
- package/dist/{renderer-CzRqzp8P.mjs → renderer-CwO8T8l8.mjs} +3 -3
- package/dist/{renderer-CzRqzp8P.mjs.map → renderer-CwO8T8l8.mjs.map} +1 -1
- package/dist/renderer-Cwz2E4QD.mjs +5 -0
- package/dist/{renderer-BjvNEbML.mjs → renderer-Cy4a31rZ.mjs} +2 -2
- package/dist/{renderer-BjvNEbML.mjs.map → renderer-Cy4a31rZ.mjs.map} +1 -1
- package/dist/{renderer-If8JOkBi.mjs → renderer-CzgDJcot.mjs} +2 -2
- package/dist/{renderer-If8JOkBi.mjs.map → renderer-CzgDJcot.mjs.map} +1 -1
- package/dist/renderer-Czkt9YYp.mjs +5 -0
- package/dist/{renderer-D2-V9nQq.mjs → renderer-D4No_jA4.mjs} +3 -3
- package/dist/{renderer-D2-V9nQq.mjs.map → renderer-D4No_jA4.mjs.map} +1 -1
- package/dist/{renderer-DaSxr9fM.mjs → renderer-D96Pu8yX.mjs} +3 -3
- package/dist/{renderer-DaSxr9fM.mjs.map → renderer-D96Pu8yX.mjs.map} +1 -1
- package/dist/{renderer-B0gPTXhe.mjs → renderer-DBKyuPl1.mjs} +3 -3
- package/dist/{renderer-B0gPTXhe.mjs.map → renderer-DBKyuPl1.mjs.map} +1 -1
- package/dist/{renderer-CxqPeATd.d.mts → renderer-DBtt-7wt.d.mts} +2 -2
- package/dist/{renderer-CxqPeATd.d.mts.map → renderer-DBtt-7wt.d.mts.map} +1 -1
- package/dist/{renderer-DcBGYN3V.mjs → renderer-DCsTCvdo.mjs} +3 -3
- package/dist/{renderer-DcBGYN3V.mjs.map → renderer-DCsTCvdo.mjs.map} +1 -1
- package/dist/renderer-DFTIhSdJ.mjs +5 -0
- package/dist/renderer-DFaa-Ats.mjs +5 -0
- package/dist/{renderer-DzSMeQBC.mjs → renderer-DGT141pN.mjs} +3 -3
- package/dist/{renderer-DzSMeQBC.mjs.map → renderer-DGT141pN.mjs.map} +1 -1
- package/dist/{renderer-JvcR1vYI.mjs → renderer-DHUlVqST.mjs} +2 -2
- package/dist/{renderer-JvcR1vYI.mjs.map → renderer-DHUlVqST.mjs.map} +1 -1
- package/dist/renderer-DIHXKvPl.mjs +5 -0
- package/dist/{renderer-Cv4lchUP.mjs → renderer-DK9etIAz.mjs} +3 -3
- package/dist/{renderer-Cv4lchUP.mjs.map → renderer-DK9etIAz.mjs.map} +1 -1
- package/dist/renderer-DMzOqVM3.mjs +5 -0
- package/dist/renderer-DOId5U8x.mjs +5 -0
- package/dist/{renderer-BkWd4-YO.mjs → renderer-DOvzHN60.mjs} +2 -2
- package/dist/{renderer-BkWd4-YO.mjs.map → renderer-DOvzHN60.mjs.map} +1 -1
- package/dist/{renderer-B1QREs7J.mjs → renderer-DOxmmN6Q.mjs} +3 -3
- package/dist/{renderer-B1QREs7J.mjs.map → renderer-DOxmmN6Q.mjs.map} +1 -1
- package/dist/{renderer-V5uEyDFz.mjs → renderer-DP_In2uT.mjs} +3 -3
- package/dist/{renderer-V5uEyDFz.mjs.map → renderer-DP_In2uT.mjs.map} +1 -1
- package/dist/renderer-DQXFOup8.mjs +5 -0
- package/dist/{renderer-ut1GqW89.mjs → renderer-DQeUc1yY.mjs} +3 -3
- package/dist/{renderer-ut1GqW89.mjs.map → renderer-DQeUc1yY.mjs.map} +1 -1
- package/dist/renderer-DRt3BSTj.mjs +5 -0
- package/dist/{renderer-DFJQ6v0F.mjs → renderer-DSbRWfgl.mjs} +2 -2
- package/dist/{renderer-DFJQ6v0F.mjs.map → renderer-DSbRWfgl.mjs.map} +1 -1
- package/dist/{renderer-DaqWTx7s.mjs → renderer-DVFFVy9v.mjs} +3 -3
- package/dist/{renderer-DaqWTx7s.mjs.map → renderer-DVFFVy9v.mjs.map} +1 -1
- package/dist/{renderer-BPixWnmY.mjs → renderer-DWG4Podv.mjs} +3 -3
- package/dist/{renderer-BPixWnmY.mjs.map → renderer-DWG4Podv.mjs.map} +1 -1
- package/dist/{renderer-BljMOvry.mjs → renderer-DXSIstnn.mjs} +3 -3
- package/dist/{renderer-BljMOvry.mjs.map → renderer-DXSIstnn.mjs.map} +1 -1
- package/dist/{renderer-DjBCWxYy.mjs → renderer-DYbgd6Ye.mjs} +3 -3
- package/dist/{renderer-DjBCWxYy.mjs.map → renderer-DYbgd6Ye.mjs.map} +1 -1
- package/dist/{renderer-BDCy8NgT.mjs → renderer-DZhIe8Gj.mjs} +3 -3
- package/dist/{renderer-BDCy8NgT.mjs.map → renderer-DZhIe8Gj.mjs.map} +1 -1
- package/dist/{renderer-BMKFzfSQ.mjs → renderer-DcOT5c0t.mjs} +3 -3
- package/dist/{renderer-BMKFzfSQ.mjs.map → renderer-DcOT5c0t.mjs.map} +1 -1
- package/dist/renderer-Di_5vQ81.mjs +6 -0
- package/dist/renderer-DkmpsPIa.mjs +5 -0
- package/dist/renderer-Ds6wd9Gk.mjs +5 -0
- package/dist/{renderer-BTigwMQp.mjs → renderer-Du8eOWWU.mjs} +3 -3
- package/dist/{renderer-BTigwMQp.mjs.map → renderer-Du8eOWWU.mjs.map} +1 -1
- package/dist/renderer-Dv4p0lp9.mjs +5 -0
- package/dist/renderer-DzWoOlVc.mjs +5 -0
- package/dist/{renderer-7y5Cj8rV.mjs → renderer-GapR_An3.mjs} +3 -3
- package/dist/{renderer-7y5Cj8rV.mjs.map → renderer-GapR_An3.mjs.map} +1 -1
- package/dist/{renderer-BV48PFjX.mjs → renderer-GbVNyv-E.mjs} +6 -6
- package/dist/{renderer-BV48PFjX.mjs.map → renderer-GbVNyv-E.mjs.map} +1 -1
- package/dist/{renderer-NizuhHsH.mjs → renderer-I3Wxk1tL.mjs} +3 -3
- package/dist/{renderer-NizuhHsH.mjs.map → renderer-I3Wxk1tL.mjs.map} +1 -1
- package/dist/renderer-IOz63OWg.mjs +5 -0
- package/dist/renderer-JkSrsUa5.mjs +5 -0
- package/dist/{renderer-gRMkQabv.mjs → renderer-OEpwc9Zk.mjs} +3 -3
- package/dist/{renderer-gRMkQabv.mjs.map → renderer-OEpwc9Zk.mjs.map} +1 -1
- package/dist/renderer-Ocs1Djwu.mjs +5 -0
- package/dist/{renderer-rXgqgAjw.mjs → renderer-OsA-Lg4d.mjs} +3 -3
- package/dist/{renderer-rXgqgAjw.mjs.map → renderer-OsA-Lg4d.mjs.map} +1 -1
- package/dist/{renderer-Bi6W4RSn.mjs → renderer-P4OPsD82.mjs} +2 -2
- package/dist/{renderer-Bi6W4RSn.mjs.map → renderer-P4OPsD82.mjs.map} +1 -1
- package/dist/{renderer-BwpgDLYO.mjs → renderer-PuN2_AL_.mjs} +3 -3
- package/dist/{renderer-BwpgDLYO.mjs.map → renderer-PuN2_AL_.mjs.map} +1 -1
- package/dist/{renderer-CNuVJ4nG.mjs → renderer-QaN-aejD.mjs} +2 -2
- package/dist/{renderer-CNuVJ4nG.mjs.map → renderer-QaN-aejD.mjs.map} +1 -1
- package/dist/renderer-Wdn7m_uN.mjs +5 -0
- package/dist/{renderer-BwwZB2mt.mjs → renderer-f7A01ArI.mjs} +4 -4
- package/dist/{renderer-BwwZB2mt.mjs.map → renderer-f7A01ArI.mjs.map} +1 -1
- package/dist/{renderer-G1pMJH5C.mjs → renderer-gm0zoV4t.mjs} +2 -2
- package/dist/{renderer-G1pMJH5C.mjs.map → renderer-gm0zoV4t.mjs.map} +1 -1
- package/dist/{renderer-DScyMHpJ.mjs → renderer-kNjMhwiZ.mjs} +2 -2
- package/dist/{renderer-DScyMHpJ.mjs.map → renderer-kNjMhwiZ.mjs.map} +1 -1
- package/dist/renderer-mKpjaoE3.mjs +5 -0
- package/dist/{renderer-Cbsnj9vV.mjs → renderer-mqUBkx-a.mjs} +3 -3
- package/dist/{renderer-Cbsnj9vV.mjs.map → renderer-mqUBkx-a.mjs.map} +1 -1
- package/dist/{renderer-DyyIXLQK.mjs → renderer-plx7_lUQ.mjs} +3 -3
- package/dist/{renderer-DyyIXLQK.mjs.map → renderer-plx7_lUQ.mjs.map} +1 -1
- package/dist/{renderer-D6BXR7P4.mjs → renderer-qYhNf6iB.mjs} +2 -2
- package/dist/{renderer-D6BXR7P4.mjs.map → renderer-qYhNf6iB.mjs.map} +1 -1
- package/dist/{renderer-CeiCJCg4.mjs → renderer-y6k54AM6.mjs} +3 -3
- package/dist/{renderer-CeiCJCg4.mjs.map → renderer-y6k54AM6.mjs.map} +1 -1
- package/dist/{renderers-CP8CFWDs-DzGXDs5p.mjs → renderers-CP8CFWDs-D1FHpA7I.mjs} +3 -3
- package/dist/{renderers-CP8CFWDs-DzGXDs5p.mjs.map → renderers-CP8CFWDs-D1FHpA7I.mjs.map} +1 -1
- package/dist/signals/index.d.mts +5 -5
- package/dist/signals/index.mjs +6 -6
- package/dist/{signals-C5nOrRmn.mjs → signals-BwdVfK3p.mjs} +3 -3
- package/dist/{signals-C5nOrRmn.mjs.map → signals-BwdVfK3p.mjs.map} +1 -1
- package/package.json +57 -57
- package/dist/dist-ClyC_d66.mjs.map +0 -1
- package/dist/effects-BOk_2kzM.mjs.map +0 -1
- package/dist/index-B1XcyMm8.d.mts.map +0 -1
- package/dist/index-B2Xesdug.d.mts.map +0 -1
- package/dist/index-DujpgUUq.d.mts.map +0 -1
- package/dist/preview-engine/chunk-AQNTIWTK.mjs +0 -1
- package/dist/preview-engine/chunk-CPFPY35C.mjs +0 -1
- package/dist/preview-engine/chunk-UZBVCYRY.mjs +0 -174
- package/dist/preview-engine/chunk-XDMZP3E2.mjs +0 -1
- package/dist/preview-engine/chunk-YKMBRUAE.mjs +0 -1
- package/dist/preview-engine/renderers-3CXFGRE7.mjs +0 -1
- package/dist/preview-engine/renderers-3FC3WCJN.mjs +0 -1
- package/dist/preview-engine/renderers-3S2FM33K.mjs +0 -1
- package/dist/preview-engine/renderers-53ZTBI3C.mjs +0 -1
- package/dist/preview-engine/renderers-5USBVCMQ.mjs +0 -1
- package/dist/preview-engine/renderers-65G6BLEA.mjs +0 -1
- package/dist/preview-engine/renderers-7XU7BXE7.mjs +0 -1
- package/dist/preview-engine/renderers-BFXM32BC.mjs +0 -1
- package/dist/preview-engine/renderers-CDXHCWWK.mjs +0 -1
- package/dist/preview-engine/renderers-CLUN7WU6.mjs +0 -1
- package/dist/preview-engine/renderers-DTB4HEXU.mjs +0 -1
- package/dist/preview-engine/renderers-EFKNRLYF.mjs +0 -1
- package/dist/preview-engine/renderers-G2K7ZA5O.mjs +0 -1
- package/dist/preview-engine/renderers-GTUO5LIV.mjs +0 -1
- package/dist/preview-engine/renderers-HSJIVP57.mjs +0 -1
- package/dist/preview-engine/renderers-IHACBWXI.mjs +0 -1
- package/dist/preview-engine/renderers-IO3BVVJ7.mjs +0 -1
- package/dist/preview-engine/renderers-IR772VSN.mjs +0 -1
- package/dist/preview-engine/renderers-L6TRJOXA.mjs +0 -1
- package/dist/preview-engine/renderers-N6H6RSF2.mjs +0 -1
- package/dist/preview-engine/renderers-O5NFQYRQ.mjs +0 -1
- package/dist/preview-engine/renderers-O6V3OEKX.mjs +0 -1
- package/dist/preview-engine/renderers-OODA27UH.mjs +0 -1
- package/dist/preview-engine/renderers-RIGW33ZI.mjs +0 -1
- package/dist/preview-engine/renderers-RUZRBQ4K.mjs +0 -1
- package/dist/preview-engine/renderers-SKB2GGKS.mjs +0 -1
- package/dist/preview-engine/renderers-T4D2TASM.mjs +0 -1
- package/dist/preview-engine/renderers-T74XV36Q.mjs +0 -1
- package/dist/preview-engine/renderers-TOPW2UM3.mjs +0 -1
- package/dist/preview-engine/renderers-UO5G3Y2G.mjs +0 -1
- package/dist/preview-engine/renderers-UOV7VOJJ.mjs +0 -1
- package/dist/preview-engine/renderers-UWKSTSTA.mjs +0 -1
- package/dist/preview-engine/renderers-VHPAOUTA.mjs +0 -1
- package/dist/preview-engine/renderers-YEQRQJFC.mjs +0 -1
- package/dist/preview-engine/renderers-YRZ3WODX.mjs +0 -1
- package/dist/preview-engine/renderers-YUTFGVRY.mjs +0 -1
- package/dist/preview-engine/renderers-YXOTRKPA.mjs +0 -1
- package/dist/preview-engine/renderers-ZOU5ARVD.mjs +0 -1
- package/dist/preview-engine/renderers-ZW75LQTR.mjs +0 -1
- package/dist/program-C2cJayA1.mjs.map +0 -1
- package/dist/renderer-BAhZeUUn.mjs +0 -5
- package/dist/renderer-BHAE_dKq.mjs +0 -5
- package/dist/renderer-BNYZY3FE.mjs +0 -5
- package/dist/renderer-BSvubMvI.mjs +0 -5
- package/dist/renderer-B_M_yhTc.mjs +0 -5
- package/dist/renderer-B_xSsTuy.mjs +0 -5
- package/dist/renderer-BePHurAU.mjs +0 -5
- package/dist/renderer-BfZquJrW.mjs +0 -5
- package/dist/renderer-BuY5ypB2.mjs +0 -5
- package/dist/renderer-BvOQgFHo.mjs +0 -5
- package/dist/renderer-C7NkSvUz.mjs +0 -5
- package/dist/renderer-CIuxV2q1.mjs +0 -5
- package/dist/renderer-CKp97tSQ.mjs +0 -5
- package/dist/renderer-CY89dTFR.mjs +0 -5
- package/dist/renderer-C_B_4Bl0.mjs +0 -5
- package/dist/renderer-Cd87JOjP.mjs +0 -5
- package/dist/renderer-Cev6orIK.mjs +0 -6
- package/dist/renderer-Cewf6UPh.mjs +0 -5
- package/dist/renderer-CnHsMLIv.mjs +0 -5
- package/dist/renderer-CoxuAr7b.mjs +0 -5
- package/dist/renderer-CrdG7trA.mjs +0 -5
- package/dist/renderer-Cu5MFgbk.mjs +0 -5
- package/dist/renderer-CuOjhtoo.mjs +0 -5
- package/dist/renderer-D2_0g6Oi.mjs +0 -5
- package/dist/renderer-D62FwolD.mjs +0 -5
- package/dist/renderer-DDNY9N7I.mjs +0 -5
- package/dist/renderer-DF_ONJ3v.mjs +0 -5
- package/dist/renderer-DbzrVHEE.mjs +0 -5
- package/dist/renderer-DlYchp1v.mjs +0 -5
- package/dist/renderer-DqcUNP8J.mjs +0 -5
- package/dist/renderer-DqvFhEQj.mjs +0 -5
- package/dist/renderer-DxBav2bE.mjs +0 -5
- package/dist/renderer-GvSRoQje.mjs +0 -5
- package/dist/renderer-KP7Ita9g.mjs +0 -5
- package/dist/renderer-Pc8dyNXt.mjs +0 -5
- package/dist/renderer-ezRCmU09.mjs +0 -3
- package/dist/renderer-h6ev1ogx.mjs +0 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-G1pMJH5C.mjs","names":[],"sources":["../../../nodes/node-crop/dist/renderers-BE15Jhmk.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, drawChildToTexture } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst maskWgsl = `\nstruct MaskUniforms {\n\trect : vec4<f32>,\n\troundness : f32,\n\tmode : f32,\n\tnumPoints : f32,\n\tpadding : f32,\n\tpoints : array<vec2<f32>, 64>,\n};\n\n@group(0) @binding(0) var<uniform> u : MaskUniforms;\n${FULLSCREEN_QUAD_WGSL}\n\nfn sdRoundedRect(p: vec2<f32>, b: vec2<f32>, r: f32) -> f32 {\n\tlet q = abs(p) - b + r;\n\treturn min(max(q.x, q.y), 0.0) + length(max(q, vec2<f32>(0.0))) - r;\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet p = in.pos.xy;\n\t\n\tif (u.mode > 0.5) { // Path\n\t\tvar inside = false;\n\t\tlet count = u32(u.numPoints);\n\t\tfor (var i = 0u; i < count; i = i + 1u) {\n\t\t\tlet j = (i + 1u) % count;\n\t\t\tlet pi = u.points[i];\n\t\t\tlet pj = u.points[j];\n\t\t\tif (((pi.y > p.y) != (pj.y > p.y)) &&\n\t\t\t\t(p.x < (pj.x - pi.x) * (p.y - pi.y) / (pj.y - pi.y) + pi.x)) {\n\t\t\t\tinside = !inside;\n\t\t\t}\n\t\t}\n\t\treturn select(vec4<f32>(0.0), vec4<f32>(1.0), inside);\n\t} else { // RRect\n\t\tlet center = u.rect.xy + u.rect.zw * 0.5;\n\t\tlet size = u.rect.zw * 0.5;\n\t\tlet d = sdRoundedRect(p - center, size, u.roundness);\n\t\tlet alpha = 1.0 - smoothstep(0.0, 1.5, d);\n\t\treturn vec4<f32>(1.0, 1.0, 1.0, alpha);\n\t}\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nfunction getMaskPipeline(device, format) {\n\tlet pipeline = deviceResourceCache.get(device);\n\tif (!pipeline) {\n\t\tpipeline = device.createRenderPipeline({\n\t\t\tlabel: \"CropMaskPipeline\",\n\t\t\tlayout: \"auto\",\n\t\t\tvertex: {\n\t\t\t\tmodule: device.createShaderModule({ code: maskWgsl }),\n\t\t\t\tentryPoint: \"vs\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule: device.createShaderModule({ code: maskWgsl }),\n\t\t\t\tentryPoint: \"fs\",\n\t\t\t\ttargets: [{ format }]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t});\n\t\tdeviceResourceCache.set(device, pipeline);\n\t}\n\treturn pipeline;\n}\nconst CropWebGPURenderer = async (args) => {\n\tconst { ctx, props, targetTexture, targetView, targetWidth, targetHeight, encoder } = args;\n\tconst { virtualMedia, containerWidth: propsContainerWidth, containerHeight: propsContainerHeight, opacity = 1 } = props;\n\tconst op = virtualMedia?.operation;\n\tif (!op || op.op !== \"Crop\") return;\n\tconst childMedia = virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tconst containerWidth = propsContainerWidth ?? ctx.surface.width;\n\tconst containerHeight = propsContainerHeight ?? ctx.surface.height;\n\tconst isRest = op.mode === \"rest\";\n\tconst isPath = op.cropType === \"path\";\n\tconst pathPoints = op.pathPoints || [];\n\tconst roundness = Number(op.roundness) || 0;\n\tlet finalLp = Number(op.leftPercentage) || 0;\n\tlet finalTp = Number(op.topPercentage) || 0;\n\tlet finalWp = Math.max(.01, Number(op.widthPercentage) || 100);\n\tlet finalHp = Math.max(.01, Number(op.heightPercentage) || 100);\n\tif (isPath && pathPoints.length > 0) {\n\t\tconst xs = pathPoints.map((p) => p.x);\n\t\tconst ys = pathPoints.map((p) => p.y);\n\t\tfinalLp = Math.min(...xs);\n\t\tfinalTp = Math.min(...ys);\n\t\tfinalWp = Math.max(.01, Math.max(...xs) - finalLp);\n\t\tfinalHp = Math.max(.01, Math.max(...ys) - finalTp);\n\t}\n\tconst sourceWidth = op.originalWidth ?? childMedia.metadata?.width ?? props.containerWidth ?? targetWidth;\n\tconst sourceHeight = op.originalHeight ?? childMedia.metadata?.height ?? props.containerHeight ?? targetHeight;\n\tconst srcRect = {\n\t\tx: finalLp / 100 * sourceWidth,\n\t\ty: finalTp / 100 * sourceHeight,\n\t\twidth: finalWp / 100 * sourceWidth,\n\t\theight: finalHp / 100 * sourceHeight\n\t};\n\tconst dstRect = {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: containerWidth,\n\t\theight: containerHeight\n\t};\n\targs.pass.end();\n\tconst { texture: childTex } = await drawChildToTexture(args, childMedia, {\n\t\twidth: sourceWidth,\n\t\theight: sourceHeight,\n\t\tprops: {\n\t\t\t...props,\n\t\t\tcontainerWidth: sourceWidth,\n\t\t\tcontainerHeight: sourceHeight\n\t\t}\n\t});\n\tif (!(roundness > 0 || isPath || isRest) && !isRest) {\n\t\tconst outPass = ctx.renderer.beginFrame(encoder, targetView, {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}, targetWidth, targetHeight, \"load\");\n\t\tctx.renderer.drawTextureRegion(outPass, childTex, srcRect, dstRect, { opacity });\n\t\targs.pass = outPass;\n\t\treturn;\n\t}\n\tlet maskedSourceTex = childTex;\n\tif (!isRest) {\n\t\tconst upscaledTex = ctx.renderer.getTemporaryTexture(containerWidth, containerHeight, [\n\t\t\tchildTex,\n\t\t\ttargetTexture,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tconst upscaledView = upscaledTex.createView();\n\t\tconst upscaledPass = ctx.renderer.beginFrame(encoder, upscaledView, {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}, containerWidth, containerHeight, \"clear\");\n\t\tctx.renderer.drawTextureRegion(upscaledPass, childTex, srcRect, dstRect);\n\t\tupscaledPass.end();\n\t\tmaskedSourceTex = upscaledTex;\n\t} else if (sourceWidth !== containerWidth || sourceHeight !== containerHeight) {\n\t\tconst upscaledTex = ctx.renderer.getTemporaryTexture(containerWidth, containerHeight, [\n\t\t\tchildTex,\n\t\t\ttargetTexture,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tconst upscaledView = upscaledTex.createView();\n\t\tconst upscaledPass = ctx.renderer.beginFrame(encoder, upscaledView, {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}, containerWidth, containerHeight, \"clear\");\n\t\tctx.renderer.drawTexture(upscaledPass, childTex, {\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t\twidth: containerWidth,\n\t\t\theight: containerHeight\n\t\t});\n\t\tupscaledPass.end();\n\t\tmaskedSourceTex = upscaledTex;\n\t}\n\tconst maskTex = ctx.renderer.getTemporaryTexture(containerWidth, containerHeight, [\n\t\tmaskedSourceTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst maskView = maskTex.createView();\n\tconst maskPass = ctx.renderer.beginFrame(encoder, maskView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, containerWidth, containerHeight, \"clear\");\n\tconst maskPipeline = getMaskPipeline(ctx.device, ctx.renderer.format);\n\tconst maskData = new Float32Array(136);\n\tconst rectX = isRest ? finalLp / 100 * containerWidth : 0;\n\tconst rectY = isRest ? finalTp / 100 * containerHeight : 0;\n\tconst rectW = isRest ? finalWp / 100 * containerWidth : containerWidth;\n\tconst rectH = isRest ? finalHp / 100 * containerHeight : containerHeight;\n\tconst pixelRoundness = roundness / 100 * (Math.min(rectW, rectH) / 2);\n\tmaskData[0] = rectX;\n\tmaskData[1] = rectY;\n\tmaskData[2] = rectW;\n\tmaskData[3] = rectH;\n\tmaskData[4] = pixelRoundness;\n\tmaskData[5] = isPath ? 1 : 0;\n\tmaskData[6] = pathPoints.length;\n\tif (isPath) for (let i = 0; i < Math.min(pathPoints.length, 64); i++) {\n\t\tlet px = pathPoints[i].x / 100 * containerWidth;\n\t\tlet py = pathPoints[i].y / 100 * containerHeight;\n\t\tif (!isRest) {\n\t\t\tpx = (pathPoints[i].x - finalLp) / finalWp * containerWidth;\n\t\t\tpy = (pathPoints[i].y - finalTp) / finalHp * containerHeight;\n\t\t}\n\t\tmaskData[8 + i * 2] = px;\n\t\tmaskData[8 + i * 2 + 1] = py;\n\t}\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(maskData);\n\tconst bindGroup = ctx.device.createBindGroup({\n\t\tlayout: maskPipeline.getBindGroupLayout(0),\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: uniformBuffer }\n\t\t}]\n\t});\n\tmaskPass.setPipeline(maskPipeline);\n\tmaskPass.setBindGroup(0, bindGroup);\n\tmaskPass.draw(4);\n\tmaskPass.end();\n\tconst resultTex = ctx.renderer.composite(encoder, maskedSourceTex, maskTex, isRest ? \"mask-out\" : \"mask-in\", [\n\t\tmaskedSourceTex,\n\t\tmaskTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst finalPass = ctx.renderer.beginFrame(encoder, targetView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, targetWidth, targetHeight, \"load\");\n\tctx.renderer.drawTexture(finalPass, resultTex, {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: containerWidth,\n\t\theight: containerHeight\n\t}, { opacity });\n\targs.pass = finalPass;\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: CropWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-BE15Jhmk.mjs.map"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"renderer-gm0zoV4t.mjs","names":[],"sources":["../../../nodes/node-crop/dist/renderers-BE15Jhmk.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, drawChildToTexture } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst maskWgsl = `\nstruct MaskUniforms {\n\trect : vec4<f32>,\n\troundness : f32,\n\tmode : f32,\n\tnumPoints : f32,\n\tpadding : f32,\n\tpoints : array<vec2<f32>, 64>,\n};\n\n@group(0) @binding(0) var<uniform> u : MaskUniforms;\n${FULLSCREEN_QUAD_WGSL}\n\nfn sdRoundedRect(p: vec2<f32>, b: vec2<f32>, r: f32) -> f32 {\n\tlet q = abs(p) - b + r;\n\treturn min(max(q.x, q.y), 0.0) + length(max(q, vec2<f32>(0.0))) - r;\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet p = in.pos.xy;\n\t\n\tif (u.mode > 0.5) { // Path\n\t\tvar inside = false;\n\t\tlet count = u32(u.numPoints);\n\t\tfor (var i = 0u; i < count; i = i + 1u) {\n\t\t\tlet j = (i + 1u) % count;\n\t\t\tlet pi = u.points[i];\n\t\t\tlet pj = u.points[j];\n\t\t\tif (((pi.y > p.y) != (pj.y > p.y)) &&\n\t\t\t\t(p.x < (pj.x - pi.x) * (p.y - pi.y) / (pj.y - pi.y) + pi.x)) {\n\t\t\t\tinside = !inside;\n\t\t\t}\n\t\t}\n\t\treturn select(vec4<f32>(0.0), vec4<f32>(1.0), inside);\n\t} else { // RRect\n\t\tlet center = u.rect.xy + u.rect.zw * 0.5;\n\t\tlet size = u.rect.zw * 0.5;\n\t\tlet d = sdRoundedRect(p - center, size, u.roundness);\n\t\tlet alpha = 1.0 - smoothstep(0.0, 1.5, d);\n\t\treturn vec4<f32>(1.0, 1.0, 1.0, alpha);\n\t}\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nfunction getMaskPipeline(device, format) {\n\tlet pipeline = deviceResourceCache.get(device);\n\tif (!pipeline) {\n\t\tpipeline = device.createRenderPipeline({\n\t\t\tlabel: \"CropMaskPipeline\",\n\t\t\tlayout: \"auto\",\n\t\t\tvertex: {\n\t\t\t\tmodule: device.createShaderModule({ code: maskWgsl }),\n\t\t\t\tentryPoint: \"vs\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule: device.createShaderModule({ code: maskWgsl }),\n\t\t\t\tentryPoint: \"fs\",\n\t\t\t\ttargets: [{ format }]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t});\n\t\tdeviceResourceCache.set(device, pipeline);\n\t}\n\treturn pipeline;\n}\nconst CropWebGPURenderer = async (args) => {\n\tconst { ctx, props, targetTexture, targetView, targetWidth, targetHeight, encoder } = args;\n\tconst { virtualMedia, containerWidth: propsContainerWidth, containerHeight: propsContainerHeight, opacity = 1 } = props;\n\tconst op = virtualMedia?.operation;\n\tif (!op || op.op !== \"Crop\") return;\n\tconst childMedia = virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tconst containerWidth = propsContainerWidth ?? ctx.surface.width;\n\tconst containerHeight = propsContainerHeight ?? ctx.surface.height;\n\tconst isRest = op.mode === \"rest\";\n\tconst isPath = op.cropType === \"path\";\n\tconst pathPoints = op.pathPoints || [];\n\tconst roundness = Number(op.roundness) || 0;\n\tlet finalLp = Number(op.leftPercentage) || 0;\n\tlet finalTp = Number(op.topPercentage) || 0;\n\tlet finalWp = Math.max(.01, Number(op.widthPercentage) || 100);\n\tlet finalHp = Math.max(.01, Number(op.heightPercentage) || 100);\n\tif (isPath && pathPoints.length > 0) {\n\t\tconst xs = pathPoints.map((p) => p.x);\n\t\tconst ys = pathPoints.map((p) => p.y);\n\t\tfinalLp = Math.min(...xs);\n\t\tfinalTp = Math.min(...ys);\n\t\tfinalWp = Math.max(.01, Math.max(...xs) - finalLp);\n\t\tfinalHp = Math.max(.01, Math.max(...ys) - finalTp);\n\t}\n\tconst sourceWidth = op.originalWidth ?? childMedia.metadata?.width ?? props.containerWidth ?? targetWidth;\n\tconst sourceHeight = op.originalHeight ?? childMedia.metadata?.height ?? props.containerHeight ?? targetHeight;\n\tconst srcRect = {\n\t\tx: finalLp / 100 * sourceWidth,\n\t\ty: finalTp / 100 * sourceHeight,\n\t\twidth: finalWp / 100 * sourceWidth,\n\t\theight: finalHp / 100 * sourceHeight\n\t};\n\tconst dstRect = {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: containerWidth,\n\t\theight: containerHeight\n\t};\n\targs.pass.end();\n\tconst { texture: childTex } = await drawChildToTexture(args, childMedia, {\n\t\twidth: sourceWidth,\n\t\theight: sourceHeight,\n\t\tprops: {\n\t\t\t...props,\n\t\t\tcontainerWidth: sourceWidth,\n\t\t\tcontainerHeight: sourceHeight\n\t\t}\n\t});\n\tif (!(roundness > 0 || isPath || isRest) && !isRest) {\n\t\tconst outPass = ctx.renderer.beginFrame(encoder, targetView, {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}, targetWidth, targetHeight, \"load\");\n\t\tctx.renderer.drawTextureRegion(outPass, childTex, srcRect, dstRect, { opacity });\n\t\targs.pass = outPass;\n\t\treturn;\n\t}\n\tlet maskedSourceTex = childTex;\n\tif (!isRest) {\n\t\tconst upscaledTex = ctx.renderer.getTemporaryTexture(containerWidth, containerHeight, [\n\t\t\tchildTex,\n\t\t\ttargetTexture,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tconst upscaledView = upscaledTex.createView();\n\t\tconst upscaledPass = ctx.renderer.beginFrame(encoder, upscaledView, {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}, containerWidth, containerHeight, \"clear\");\n\t\tctx.renderer.drawTextureRegion(upscaledPass, childTex, srcRect, dstRect);\n\t\tupscaledPass.end();\n\t\tmaskedSourceTex = upscaledTex;\n\t} else if (sourceWidth !== containerWidth || sourceHeight !== containerHeight) {\n\t\tconst upscaledTex = ctx.renderer.getTemporaryTexture(containerWidth, containerHeight, [\n\t\t\tchildTex,\n\t\t\ttargetTexture,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tconst upscaledView = upscaledTex.createView();\n\t\tconst upscaledPass = ctx.renderer.beginFrame(encoder, upscaledView, {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}, containerWidth, containerHeight, \"clear\");\n\t\tctx.renderer.drawTexture(upscaledPass, childTex, {\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t\twidth: containerWidth,\n\t\t\theight: containerHeight\n\t\t});\n\t\tupscaledPass.end();\n\t\tmaskedSourceTex = upscaledTex;\n\t}\n\tconst maskTex = ctx.renderer.getTemporaryTexture(containerWidth, containerHeight, [\n\t\tmaskedSourceTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst maskView = maskTex.createView();\n\tconst maskPass = ctx.renderer.beginFrame(encoder, maskView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, containerWidth, containerHeight, \"clear\");\n\tconst maskPipeline = getMaskPipeline(ctx.device, ctx.renderer.format);\n\tconst maskData = new Float32Array(136);\n\tconst rectX = isRest ? finalLp / 100 * containerWidth : 0;\n\tconst rectY = isRest ? finalTp / 100 * containerHeight : 0;\n\tconst rectW = isRest ? finalWp / 100 * containerWidth : containerWidth;\n\tconst rectH = isRest ? finalHp / 100 * containerHeight : containerHeight;\n\tconst pixelRoundness = roundness / 100 * (Math.min(rectW, rectH) / 2);\n\tmaskData[0] = rectX;\n\tmaskData[1] = rectY;\n\tmaskData[2] = rectW;\n\tmaskData[3] = rectH;\n\tmaskData[4] = pixelRoundness;\n\tmaskData[5] = isPath ? 1 : 0;\n\tmaskData[6] = pathPoints.length;\n\tif (isPath) for (let i = 0; i < Math.min(pathPoints.length, 64); i++) {\n\t\tlet px = pathPoints[i].x / 100 * containerWidth;\n\t\tlet py = pathPoints[i].y / 100 * containerHeight;\n\t\tif (!isRest) {\n\t\t\tpx = (pathPoints[i].x - finalLp) / finalWp * containerWidth;\n\t\t\tpy = (pathPoints[i].y - finalTp) / finalHp * containerHeight;\n\t\t}\n\t\tmaskData[8 + i * 2] = px;\n\t\tmaskData[8 + i * 2 + 1] = py;\n\t}\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(maskData);\n\tconst bindGroup = ctx.device.createBindGroup({\n\t\tlayout: maskPipeline.getBindGroupLayout(0),\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: uniformBuffer }\n\t\t}]\n\t});\n\tmaskPass.setPipeline(maskPipeline);\n\tmaskPass.setBindGroup(0, bindGroup);\n\tmaskPass.draw(4);\n\tmaskPass.end();\n\tconst resultTex = ctx.renderer.composite(encoder, maskedSourceTex, maskTex, isRest ? \"mask-out\" : \"mask-in\", [\n\t\tmaskedSourceTex,\n\t\tmaskTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst finalPass = ctx.renderer.beginFrame(encoder, targetView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, targetWidth, targetHeight, \"load\");\n\tctx.renderer.drawTexture(finalPass, resultTex, {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: containerWidth,\n\t\theight: containerHeight\n\t}, { opacity });\n\targs.pass = finalPass;\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: CropWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-BE15Jhmk.mjs.map"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { n as defineRenderer } from "./renderer-BSitV56h.mjs";
|
|
2
|
-
import { a as createFullscreenPipeline, c as drawTextureToTarget, l as fragmentBindGroupLayout, o as drawChildToTexture, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL } from "./gpu-
|
|
2
|
+
import { a as createFullscreenPipeline, c as drawTextureToTarget, l as fragmentBindGroupLayout, o as drawChildToTexture, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL } from "./gpu-CHIgM_YH.mjs";
|
|
3
3
|
|
|
4
4
|
//#region ../../nodes/node-selective-color/dist/renderers-BZ3S3Cgo.mjs
|
|
5
5
|
const deviceResourceCache = /* @__PURE__ */ new WeakMap();
|
|
@@ -166,4 +166,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: SelectiveColorWebGPURen
|
|
|
166
166
|
|
|
167
167
|
//#endregion
|
|
168
168
|
export { renderers_default as t };
|
|
169
|
-
//# sourceMappingURL=renderer-
|
|
169
|
+
//# sourceMappingURL=renderer-kNjMhwiZ.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-
|
|
1
|
+
{"version":3,"file":"renderer-kNjMhwiZ.mjs","names":[],"sources":["../../../nodes/node-selective-color/dist/renderers-BZ3S3Cgo.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nconst WGSL_SELECTIVE_COLOR_SHADER = `\nstruct SelectiveColorUniforms {\n\treds : vec4<f32>,\n\tyellows : vec4<f32>,\n\tgreens : vec4<f32>,\n\tcyans : vec4<f32>,\n\tblues : vec4<f32>,\n\tmagentas : vec4<f32>,\n\twhites : vec4<f32>,\n\tneutrals : vec4<f32>,\n\tblacks : vec4<f32>,\n\tmethod : f32,\n\tpad0 : f32,\n\tpad1 : f32,\n\tpad2 : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : SelectiveColorUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn calcAdjustment(cmy: vec3<f32>, adj: vec4<f32>, weight: f32, isAbsolute: bool) -> vec3<f32> {\n\tif (weight <= 0.00001) {\n\t\treturn vec3<f32>(0.0);\n\t}\n\tlet adjC = adj.x;\n\tlet adjM = adj.y;\n\tlet adjY = adj.z;\n\tlet adjK = adj.w;\n\n\tif (isAbsolute) {\n\t\tlet cDelta = adjC + adjK * (1.0 + adjC);\n\t\tlet mDelta = adjM + adjK * (1.0 + adjM);\n\t\tlet yDelta = adjY + adjK * (1.0 + adjY);\n\t\treturn vec3<f32>(cDelta, mDelta, yDelta) * weight;\n\t} else {\n\t\tlet cDelta = ((1.0 + adjK) * (1.0 + adjC) - 1.0) * cmy.x;\n\t\tlet mDelta = ((1.0 + adjK) * (1.0 + adjM) - 1.0) * cmy.y;\n\t\tlet yDelta = ((1.0 + adjK) * (1.0 + adjY) - 1.0) * cmy.z;\n\t\treturn vec3<f32>(cDelta, mDelta, yDelta) * weight;\n\t}\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet color = textureSampleLevel(tex, samp, in.uv, 0.0);\n\tif (color.a <= 0.00001) {\n\t\treturn color;\n\t}\n\n\tlet rgb = clamp(color.rgb / max(color.a, 0.00001), vec3<f32>(0.0), vec3<f32>(1.0));\n\tlet r = rgb.r;\n\tlet g = rgb.g;\n\tlet b = rgb.b;\n\n\tlet maxVal = max(r, max(g, b));\n\tlet minVal = min(r, min(g, b));\n\n\t// Chromatic weights\n\tlet wRed = max(0.0, r - max(g, b));\n\tlet wYellow = max(0.0, min(r, g) - b);\n\tlet wGreen = max(0.0, g - max(r, b));\n\tlet wCyan = max(0.0, min(g, b) - r);\n\tlet wBlue = max(0.0, b - max(r, g));\n\tlet wMagenta = max(0.0, min(r, b) - g);\n\n\t// Achromatic weights (Whites, Blacks, and true Midtone Neutrals)\n\tlet wWhite = max(0.0, (minVal - 0.5) * 2.0);\n\tlet wBlack = max(0.0, (0.5 - maxVal) * 2.0);\n\tlet wNeutral = max(0.0, 1.0 - (wRed + wYellow + wGreen + wCyan + wBlue + wMagenta + wWhite + wBlack));\n\n\tlet cmy = vec3<f32>(1.0 - r, 1.0 - g, 1.0 - b);\n\tlet isAbs = u.method > 0.5;\n\n\tvar totalDelta = vec3<f32>(0.0);\n\ttotalDelta += calcAdjustment(cmy, u.reds, wRed, isAbs);\n\ttotalDelta += calcAdjustment(cmy, u.yellows, wYellow, isAbs);\n\ttotalDelta += calcAdjustment(cmy, u.greens, wGreen, isAbs);\n\ttotalDelta += calcAdjustment(cmy, u.cyans, wCyan, isAbs);\n\ttotalDelta += calcAdjustment(cmy, u.blues, wBlue, isAbs);\n\ttotalDelta += calcAdjustment(cmy, u.magentas, wMagenta, isAbs);\n\ttotalDelta += calcAdjustment(cmy, u.whites, wWhite, isAbs);\n\ttotalDelta += calcAdjustment(cmy, u.neutrals, wNeutral, isAbs);\n\ttotalDelta += calcAdjustment(cmy, u.blacks, wBlack, isAbs);\n\n\tlet finalCMY = clamp(cmy + totalDelta, vec3<f32>(0.0), vec3<f32>(1.0));\n\tlet finalRGB = vec3<f32>(1.0 - finalCMY.x, 1.0 - finalCMY.y, 1.0 - finalCMY.z);\n\n\treturn vec4<f32>(finalRGB * color.a, color.a);\n}\n`;\nfunction getSelectiveColorResources(device, format) {\n\tlet res = deviceResourceCache.get(device);\n\tif (!res) {\n\t\tconst uniformLayout = fragmentBindGroupLayout(device, [\"uniform\"]);\n\t\tconst textureLayout = fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]);\n\t\tres = {\n\t\t\tpipeline: createFullscreenPipeline(device, {\n\t\t\t\tlabel: \"SelectiveColorPipeline\",\n\t\t\t\tmodule: device.createShaderModule({\n\t\t\t\t\tlabel: \"selective-color.wgsl\",\n\t\t\t\t\tcode: WGSL_SELECTIVE_COLOR_SHADER\n\t\t\t\t}),\n\t\t\t\tlayouts: [uniformLayout, textureLayout],\n\t\t\t\tformat\n\t\t\t}),\n\t\t\tuniformLayout,\n\t\t\ttextureLayout\n\t\t};\n\t\tdeviceResourceCache.set(device, res);\n\t}\n\treturn res;\n}\nfunction packAdjustment(data, offset, adj) {\n\tdata[offset + 0] = (adj?.cyan ?? 0) / 100;\n\tdata[offset + 1] = (adj?.magenta ?? 0) / 100;\n\tdata[offset + 2] = (adj?.yellow ?? 0) / 100;\n\tdata[offset + 3] = (adj?.black ?? 0) / 100;\n}\nconst uniformBufferData = new Float32Array(40);\nconst SelectiveColorWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"SelectiveColor\" || !props.virtualMedia?.children?.[0]) return;\n\tpass.end();\n\tconst childMedia = props.virtualMedia.children[0];\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst { texture: tmpTex } = await drawChildToTexture(args, childMedia);\n\tpackAdjustment(uniformBufferData, 0, op.reds);\n\tpackAdjustment(uniformBufferData, 4, op.yellows);\n\tpackAdjustment(uniformBufferData, 8, op.greens);\n\tpackAdjustment(uniformBufferData, 12, op.cyans);\n\tpackAdjustment(uniformBufferData, 16, op.blues);\n\tpackAdjustment(uniformBufferData, 20, op.magentas);\n\tpackAdjustment(uniformBufferData, 24, op.whites);\n\tpackAdjustment(uniformBufferData, 28, op.neutrals);\n\tpackAdjustment(uniformBufferData, 32, op.blacks);\n\tuniformBufferData[36] = op.method === \"Absolute\" ? 1 : 0;\n\tuniformBufferData[37] = 0;\n\tuniformBufferData[38] = 0;\n\tuniformBufferData[39] = 0;\n\tconst { pipeline, uniformLayout, textureLayout } = getSelectiveColorResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst buffer = ctx.renderer.getTemporaryBuffer(uniformBufferData);\n\tconst outTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tdrawFullscreenPass(encoder, outTex.createView(), pipeline, [ctx.device.createBindGroup({\n\t\tlayout: uniformLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer }\n\t\t}]\n\t}), ctx.renderer.bindGroupCache.getBindGroup(ctx.device, textureLayout, tmpTex, sampler)]);\n\tdrawTextureToTarget(args, outTex, props.opacity ?? 1);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: SelectiveColorWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-BZ3S3Cgo.mjs.map"],"mappings":";;;;AAIA,MAAM,sCAAsC,IAAI,SAAS;AACzD,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;EAoBlC,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuEvB,SAAS,2BAA2B,QAAQ,QAAQ;CACnD,IAAI,MAAM,oBAAoB,IAAI,OAAO;AACzC,KAAI,CAAC,KAAK;EACT,MAAM,gBAAgB,wBAAwB,QAAQ,CAAC,UAAU,CAAC;EAClE,MAAM,gBAAgB,wBAAwB,QAAQ,CAAC,WAAW,UAAU,CAAC;AAC7E,QAAM;GACL,UAAU,yBAAyB,QAAQ;IAC1C,OAAO;IACP,QAAQ,OAAO,mBAAmB;KACjC,OAAO;KACP,MAAM;KACN,CAAC;IACF,SAAS,CAAC,eAAe,cAAc;IACvC;IACA,CAAC;GACF;GACA;GACA;AACD,sBAAoB,IAAI,QAAQ,IAAI;;AAErC,QAAO;;AAER,SAAS,eAAe,MAAM,QAAQ,KAAK;AAC1C,MAAK,SAAS,MAAM,KAAK,QAAQ,KAAK;AACtC,MAAK,SAAS,MAAM,KAAK,WAAW,KAAK;AACzC,MAAK,SAAS,MAAM,KAAK,UAAU,KAAK;AACxC,MAAK,SAAS,MAAM,KAAK,SAAS,KAAK;;AAExC,MAAM,oBAAoB,IAAI,aAAa,GAAG;AAC9C,MAAM,+BAA+B,OAAO,SAAS;CACpD,MAAM,EAAE,KAAK,SAAS,MAAM,eAAe,aAAa,cAAc,UAAU;CAChF,MAAM,KAAK,MAAM,cAAc;AAC/B,KAAI,IAAI,OAAO,oBAAoB,CAAC,MAAM,cAAc,WAAW,GAAI;AACvE,MAAK,KAAK;CACV,MAAM,aAAa,MAAM,aAAa,SAAS;CAC/C,MAAM,QAAQ;CACd,MAAM,SAAS;CACf,MAAM,EAAE,SAAS,WAAW,MAAM,mBAAmB,MAAM,WAAW;AACtE,gBAAe,mBAAmB,GAAG,GAAG,KAAK;AAC7C,gBAAe,mBAAmB,GAAG,GAAG,QAAQ;AAChD,gBAAe,mBAAmB,GAAG,GAAG,OAAO;AAC/C,gBAAe,mBAAmB,IAAI,GAAG,MAAM;AAC/C,gBAAe,mBAAmB,IAAI,GAAG,MAAM;AAC/C,gBAAe,mBAAmB,IAAI,GAAG,SAAS;AAClD,gBAAe,mBAAmB,IAAI,GAAG,OAAO;AAChD,gBAAe,mBAAmB,IAAI,GAAG,SAAS;AAClD,gBAAe,mBAAmB,IAAI,GAAG,OAAO;AAChD,mBAAkB,MAAM,GAAG,WAAW,aAAa,IAAI;AACvD,mBAAkB,MAAM;AACxB,mBAAkB,MAAM;AACxB,mBAAkB,MAAM;CACxB,MAAM,EAAE,UAAU,eAAe,kBAAkB,2BAA2B,IAAI,QAAQ,IAAI,SAAS,OAAO;CAC9G,MAAM,UAAU,IAAI,SAAS,aAAa,WAAW,IAAI,OAAO;CAChE,MAAM,SAAS,IAAI,SAAS,mBAAmB,kBAAkB;CACjE,MAAM,SAAS,IAAI,SAAS,oBAAoB,OAAO,QAAQ;EAC9D;EACA;EACA,GAAG,MAAM,mBAAmB,EAAE;EAC9B,CAAC;AACF,oBAAmB,SAAS,OAAO,YAAY,EAAE,UAAU,CAAC,IAAI,OAAO,gBAAgB;EACtF,QAAQ;EACR,SAAS,CAAC;GACT,SAAS;GACT,UAAU,EAAE,QAAQ;GACpB,CAAC;EACF,CAAC,EAAE,IAAI,SAAS,eAAe,aAAa,IAAI,QAAQ,eAAe,QAAQ,QAAQ,CAAC,CAAC;AAC1F,qBAAoB,MAAM,QAAQ,MAAM,WAAW,EAAE;;AAKtD,IAAI,oBAAoB,eAAe,EAAE,gBAAgB,8BAA8B,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { l as unwrapFrameParam, n as defineRenderer } from "./renderer-BSitV56h.mjs";
|
|
2
|
-
import { a as configBuilder, i as VideoResultSchema, n as ImageResultSchema } from "./dist-
|
|
3
|
-
import { a as createFullscreenPipeline, c as drawTextureToTarget, d as signalTextureView, f as signalTiming, l as fragmentBindGroupLayout, o as drawChildToTexture, p as texturesLayout, s as drawFullscreenPass } from "./gpu-
|
|
2
|
+
import { a as configBuilder, i as VideoResultSchema, n as ImageResultSchema } from "./dist-Bo2_zeCn.mjs";
|
|
3
|
+
import { a as createFullscreenPipeline, c as drawTextureToTarget, d as signalTextureView, f as signalTiming, l as fragmentBindGroupLayout, o as drawChildToTexture, p as texturesLayout, s as drawFullscreenPass } from "./gpu-CHIgM_YH.mjs";
|
|
4
4
|
import { z } from "zod";
|
|
5
5
|
|
|
6
6
|
//#region ../../nodes/node-patch-heal/dist/renderers-i-B6z1sf.mjs
|
|
@@ -561,4 +561,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: PatchHealWebGPURenderer
|
|
|
561
561
|
|
|
562
562
|
//#endregion
|
|
563
563
|
export { renderers_default as n, PatchHealWebGPURenderer as t };
|
|
564
|
-
//# sourceMappingURL=renderer-
|
|
564
|
+
//# sourceMappingURL=renderer-mqUBkx-a.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-Cbsnj9vV.mjs","names":[],"sources":["../../../nodes/node-patch-heal/dist/renderers-i-B6z1sf.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { ImageResultSchema, VideoResultSchema, configBuilder, unwrapFrameParam } from \"@framefields/node-sdk\";\nimport { createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, signalTextureView, signalTiming, texturesLayout } from \"@framefields/node-sdk/gpu\";\nimport { z } from \"zod\";\n\n//#region src/shared/config.ts\nconst MAX_RADIUS = 500;\nconst MAX_FEATHER = 100;\nconst MAX_OFFSET = 4096;\nconst PatchItemSchema = z.object({\n\tid: z.string().default(\"patch\"),\n\tcenterX: z.number().min(0).max(1).default(.5),\n\tcenterY: z.number().min(0).max(1).default(.5),\n\toffsetX: z.number().min(-MAX_OFFSET).max(MAX_OFFSET).default(50),\n\toffsetY: z.number().min(-MAX_OFFSET).max(MAX_OFFSET).default(0),\n\tradius: z.number().min(1).max(MAX_RADIUS).default(25),\n\tsourceRadius: z.number().min(1).max(MAX_RADIUS).default(25),\n\tfeather: z.number().min(0).max(MAX_FEATHER).default(50),\n\topacity: z.number().min(0).max(1).default(1),\n\tmode: z.enum([\n\t\t\"Clone\",\n\t\t\"SeamlessHeal\",\n\t\t\"TextureTransfer\"\n\t]).default(\"SeamlessHeal\")\n});\nconst patchHealConfig = configBuilder().field(\"patches\", z.array(PatchItemSchema).optional(), {\n\tlabel: \"Patches\",\n\tdescription: \"List of patch healing operations applied sequentially.\"\n}).field(\"centerX\", z.number().min(0).max(1).default(.5), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Center X Signal\",\n\tdescription: \"Horizontal normalized position of destination patch (0.0 to 1.0).\"\n}).field(\"centerY\", z.number().min(0).max(1).default(.5), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Center Y Signal\",\n\tdescription: \"Vertical normalized position of destination patch (0.0 to 1.0).\"\n}).field(\"offsetX\", z.number().min(-MAX_OFFSET).max(MAX_OFFSET).default(50), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Source Offset X Signal\",\n\tdescription: \"Horizontal pixel distance from destination to sample source patch.\"\n}).field(\"offsetY\", z.number().min(-MAX_OFFSET).max(MAX_OFFSET).default(0), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Source Offset Y Signal\",\n\tdescription: \"Vertical pixel distance from destination to sample source patch.\"\n}).field(\"radius\", z.number().min(1).max(MAX_RADIUS).default(25), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Target Radius Signal\",\n\tdescription: \"Radius of the destination circular patch in pixels (used when no explicit Mask input is connected).\"\n}).field(\"sourceRadius\", z.number().min(1).max(MAX_RADIUS).default(25), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Source Radius Signal\",\n\tdescription: \"Radius of the source sample circular patch in pixels.\"\n}).field(\"feather\", z.number().min(0).max(MAX_FEATHER).default(50), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Feather Signal\",\n\tdescription: \"Softness edge falloff percentage (0–100%).\"\n}).field(\"opacity\", z.number().min(0).max(1).default(1), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Opacity Signal\",\n\tdescription: \"Blending opacity of the healed patch (0.0–1.0).\"\n}).field(\"mode\", z.enum([\n\t\"Clone\",\n\t\"SeamlessHeal\",\n\t\"TextureTransfer\"\n]).default(\"SeamlessHeal\"), {\n\tlabel: \"Healing Mode\",\n\tdescription: \"Healing algorithm: Clone (direct stamp), SeamlessHeal (Poisson color/lighting blend), TextureTransfer (luminance structure matching).\"\n}).build();\nconst PatchHealNodeConfigSchema = patchHealConfig.schema;\nfunction normalizePatches(config) {\n\tif (config?.patches && config.patches.length > 0) return config.patches.map((p, idx) => ({\n\t\tid: p.id || `patch-${idx + 1}`,\n\t\tcenterX: p.centerX ?? .5,\n\t\tcenterY: p.centerY ?? .5,\n\t\toffsetX: p.offsetX ?? 50,\n\t\toffsetY: p.offsetY ?? 0,\n\t\tradius: p.radius ?? 25,\n\t\tsourceRadius: p.sourceRadius ?? p.radius ?? 25,\n\t\tfeather: p.feather ?? 50,\n\t\topacity: p.opacity ?? 1,\n\t\tmode: p.mode ?? \"SeamlessHeal\"\n\t}));\n\tconst fallbackRadius = config?.radius ?? 25;\n\treturn [{\n\t\tid: \"patch-1\",\n\t\tcenterX: config?.centerX ?? .5,\n\t\tcenterY: config?.centerY ?? .5,\n\t\toffsetX: config?.offsetX ?? 50,\n\t\toffsetY: config?.offsetY ?? 0,\n\t\tradius: fallbackRadius,\n\t\tsourceRadius: config?.sourceRadius ?? fallbackRadius,\n\t\tfeather: config?.feather ?? 50,\n\t\topacity: config?.opacity ?? 1,\n\t\tmode: config?.mode ?? \"SeamlessHeal\"\n\t}];\n}\nconst PatchHealResultSchema = z.union([ImageResultSchema, VideoResultSchema]);\nconst PATCH_HEAL_OUTPUT_TYPE_MAP = {\n\tVideo: \"Video\",\n\tLottie: \"Video\",\n\tGIF: \"GIF\",\n\tImage: \"Image\",\n\tSVG: \"Image\"\n};\n\n//#endregion\n//#region src/renderers/webgpu-renderer.ts\nconst WGSL_FULLSCREEN_VS = `\nstruct VertexOutput {\n @builtin(position) position : vec4<f32>,\n @location(0) uv : vec2<f32>,\n};\n\n@vertex\nfn vs_main(@builtin(vertex_index) vertexIndex : u32) -> VertexOutput {\n var pos = array<vec2<f32>, 4>(\n vec2<f32>(-1.0, 1.0),\n vec2<f32>( 1.0, 1.0),\n vec2<f32>(-1.0, -1.0),\n vec2<f32>( 1.0, -1.0)\n );\n var uvs = array<vec2<f32>, 4>(\n vec2<f32>(0.0, 0.0),\n vec2<f32>(1.0, 0.0),\n vec2<f32>(0.0, 1.0),\n vec2<f32>(1.0, 1.0)\n );\n var output : VertexOutput;\n output.position = vec4<f32>(pos[vertexIndex], 0.0, 1.0);\n output.uv = uvs[vertexIndex];\n return output;\n}\n`;\nconst WGSL_PATCHHEAL_FS = `\n\nstruct PatchHealUniforms {\n offsetX : f32,\n offsetY : f32,\n centerX : f32,\n centerY : f32,\n\n radius : f32,\n sourceRadius : f32,\n feather : f32,\n opacity : f32,\n\n mode : f32,\n hasMask : f32,\n hasOffsetXSig : f32,\n hasOffsetYSig : f32,\n\n hasCenterXSig : f32,\n hasCenterYSig : f32,\n hasRadiusSig : f32,\n hasSourceRadSig : f32,\n\n hasFeatherSig : f32,\n hasOpacitySig : f32,\n pad0 : f32,\n pad1 : f32,\n};\n\n\n@group(0) @binding(0) var<uniform> u : PatchHealUniforms;\n\n@group(1) @binding(0) var srcTex : texture_2d<f32>;\n@group(1) @binding(1) var maskTex : texture_2d<f32>;\n@group(1) @binding(2) var samp : sampler;\n\n@group(2) @binding(0) var offsetXSigTex : texture_2d<f32>;\n@group(2) @binding(1) var offsetYSigTex : texture_2d<f32>;\n@group(2) @binding(2) var centerXSigTex : texture_2d<f32>;\n@group(2) @binding(3) var centerYSigTex : texture_2d<f32>;\n@group(2) @binding(4) var radiusSigTex : texture_2d<f32>;\n@group(2) @binding(5) var sourceRadSigTex : texture_2d<f32>;\n@group(2) @binding(6) var featherSigTex : texture_2d<f32>;\n@group(2) @binding(7) var opacitySigTex : texture_2d<f32>;\n@group(2) @binding(8) var signalSamp : sampler;\n\nfn getLuminance(c : vec3<f32>) -> f32 {\n return dot(c, vec3<f32>(0.2126, 0.7152, 0.0722));\n}\n\nfn sampleBoxBlur(tex : texture_2d<f32>, smp : sampler, centerUv : vec2<f32>, blurPx : f32, dims : vec2<f32>) -> vec4<f32> {\n let texel = 1.0 / dims;\n let stepSize = max(1.0, blurPx / 3.0);\n var accum = vec4<f32>(0.0);\n var count = 0.0;\n\n for (var y = -2; y <= 2; y++) {\n for (var x = -2; x <= 2; x++) {\n let offset = vec2<f32>(f32(x) * stepSize, f32(y) * stepSize) * texel;\n let sampleUv = clamp(centerUv + offset, vec2<f32>(0.0), vec2<f32>(1.0));\n accum += textureSampleLevel(tex, smp, sampleUv, 0.0);\n count += 1.0;\n }\n }\n return accum / count;\n}\n\n@fragment\nfn fs_main(in : VertexOutput) -> @location(0) vec4<f32> {\n let dimensions = vec2<f32>(textureDimensions(srcTex));\n\n var offsetX = u.offsetX;\n if (u.hasOffsetXSig > 0.5) {\n offsetX = textureSampleLevel(offsetXSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n var offsetY = u.offsetY;\n if (u.hasOffsetYSig > 0.5) {\n offsetY = textureSampleLevel(offsetYSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n var centerX = u.centerX;\n if (u.hasCenterXSig > 0.5) {\n centerX = textureSampleLevel(centerXSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n var centerY = u.centerY;\n if (u.hasCenterYSig > 0.5) {\n centerY = textureSampleLevel(centerYSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n var radius = u.radius;\n if (u.hasRadiusSig > 0.5) {\n radius = textureSampleLevel(radiusSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n var sourceRadius = u.sourceRadius;\n if (u.hasSourceRadSig > 0.5) {\n sourceRadius = textureSampleLevel(sourceRadSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n var feather = u.feather;\n if (u.hasFeatherSig > 0.5) {\n feather = textureSampleLevel(featherSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n var opacity = u.opacity;\n if (u.hasOpacitySig > 0.5) {\n opacity = textureSampleLevel(opacitySigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n let dstCol = textureSampleLevel(srcTex, samp, in.uv, 0.0);\n\n // Calculate mask weight (either from explicit mask or procedural circular patch)\n var maskWeight = 0.0;\n let targetCenterUV = vec2<f32>(centerX, centerY);\n\n if (u.hasMask > 0.5) {\n let maskCol = textureSampleLevel(maskTex, samp, in.uv, 0.0);\n maskWeight = max(maskCol.a, max(maskCol.r, max(maskCol.g, maskCol.b)));\n } else {\n let distPx = length((in.uv - targetCenterUV) * dimensions);\n let innerRadius = radius * max(0.0, 1.0 - feather / 100.0);\n maskWeight = 1.0 - smoothstep(innerRadius, max(innerRadius + 0.001, radius), distPx);\n }\n\n let blendWeight = clamp(maskWeight * opacity, 0.0, 1.0);\n if (blendWeight < 1e-4) {\n return dstCol;\n }\n\n // Compute source sample coordinate (scaling from sourceRadius to target radius if different)\n let sourceCenterUV = targetCenterUV + vec2<f32>(offsetX, offsetY) / dimensions;\n let srcScale = max(1.0, sourceRadius) / max(1.0, radius);\n let uvFromTargetCenter = in.uv - targetCenterUV;\n let srcUV = clamp(sourceCenterUV + uvFromTargetCenter * srcScale, vec2<f32>(0.0), vec2<f32>(1.0));\n let srcCol = textureSampleLevel(srcTex, samp, srcUV, 0.0);\n\n var healedCol = srcCol;\n\n if (u.mode > 0.5 && u.mode < 1.5) {\n // Mode 1: Seamless Heal (Poisson gradient / local illumination matching)\n let blurRadius = max(4.0, radius * 0.4);\n let srcBlur = sampleBoxBlur(srcTex, samp, srcUV, blurRadius, dimensions);\n let dstBlur = sampleBoxBlur(srcTex, samp, in.uv, blurRadius, dimensions);\n\n let srcDetail = srcCol.rgb - srcBlur.rgb;\n let healedRgb = dstBlur.rgb + srcDetail;\n let clampedRgb = clamp(healedRgb, vec3<f32>(0.0), vec3<f32>(srcCol.a));\n healedCol = vec4<f32>(clampedRgb, srcCol.a);\n } else if (u.mode >= 1.5) {\n // Mode 2: Texture Transfer (Luminance structure matching)\n let blurRadius = max(4.0, radius * 0.4);\n let srcBlur = sampleBoxBlur(srcTex, samp, srcUV, blurRadius, dimensions);\n\n let lumaSrc = getLuminance(srcCol.rgb);\n let lumaSrcBlur = getLuminance(srcBlur.rgb);\n let lumaDelta = lumaSrc - lumaSrcBlur;\n\n let healedRgb = dstCol.rgb + vec3<f32>(lumaDelta);\n let clampedRgb = clamp(healedRgb, vec3<f32>(0.0), vec3<f32>(dstCol.a));\n healedCol = vec4<f32>(clampedRgb, dstCol.a);\n }\n\n return mix(dstCol, healedCol, blendWeight);\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nfunction getDeviceResources(device, format) {\n\tlet res = deviceResourceCache.get(device);\n\tif (res) return res;\n\tconst uniformLayout = fragmentBindGroupLayout(device, [\"uniform\"]);\n\tconst textureLayout = texturesLayout(device, 2);\n\tconst signalTextureLayout = texturesLayout(device, 8);\n\tres = {\n\t\tuniformLayout,\n\t\ttextureLayout,\n\t\tsignalTextureLayout,\n\t\tpipeline: createFullscreenPipeline(device, {\n\t\t\tmodule: device.createShaderModule({ code: `${WGSL_FULLSCREEN_VS}\\n${WGSL_PATCHHEAL_FS}` }),\n\t\t\tlayouts: device.createPipelineLayout({ bindGroupLayouts: [\n\t\t\t\tuniformLayout,\n\t\t\t\ttextureLayout,\n\t\t\t\tsignalTextureLayout\n\t\t\t] }),\n\t\t\tformat,\n\t\t\tblend: {\n\t\t\t\tcolor: {\n\t\t\t\t\tsrcFactor: \"one\",\n\t\t\t\t\tdstFactor: \"zero\",\n\t\t\t\t\toperation: \"add\"\n\t\t\t\t},\n\t\t\t\talpha: {\n\t\t\t\t\tsrcFactor: \"one\",\n\t\t\t\t\tdstFactor: \"zero\",\n\t\t\t\t\toperation: \"add\"\n\t\t\t\t}\n\t\t\t},\n\t\t\tvertexEntryPoint: \"vs_main\",\n\t\t\tfragmentEntryPoint: \"fs_main\"\n\t\t})\n\t};\n\tdeviceResourceCache.set(device, res);\n\treturn res;\n}\nconst PatchHealWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"PatchHeal\" || !op) return;\n\tconst childMedia = props.virtualMedia?.children?.[0];\n\tif (!childMedia) return;\n\tpass.end();\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst frame = props.frame ?? 0;\n\tconst compositionFrame = props.compositionFrame ?? frame;\n\tconst fps = props.fps || 30;\n\tconst nodeId = op.inputs ? Object.keys(op.inputs)[0] : \"patch_heal_node\";\n\tconst { texture: tmpSrcTex, view: tmpSrcView } = await drawChildToTexture(args, childMedia, { props: {\n\t\t...props,\n\t\tvirtualMedia: childMedia,\n\t\trenderId: `${props.renderId}-src`\n\t} });\n\tlet maskTex = null;\n\tif (op.maskMedia) ({texture: maskTex} = await drawChildToTexture(args, op.maskMedia, {\n\t\tprops: {\n\t\t\t...props,\n\t\t\tvirtualMedia: op.maskMedia,\n\t\t\trenderId: `${props.renderId}-mask`,\n\t\t\texcludeTextures: [...props.excludeTextures || [], tmpSrcTex]\n\t\t},\n\t\texclude: [tmpSrcTex]\n\t}));\n\tconst { pipeline, uniformLayout: uLayout, textureLayout: tLayout, signalTextureLayout: sigLayout } = getDeviceResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst { elapsedSeconds, durationSeconds } = signalTiming(props, frame, fps);\n\tconst patches = normalizePatches(op);\n\tconst resolveBindable = (configKey, fallbackVal, minVal, maxVal) => {\n\t\tconst handleId = op[`${configKey}HandleId`];\n\t\tconst input = handleId ? op.inputs?.[handleId] : null;\n\t\tconst hasSignal = !!(input?.connectionValid && (input.outputItem?.type === \"Signal\" || input.outputItem?.type === \"Numeric\"));\n\t\tconst sd = hasSignal && input?.outputItem?.data ? input.outputItem.data : null;\n\t\tlet val = fallbackVal;\n\t\tlet hasStaticSig = false;\n\t\tif (!hasSignal) if (input?.connectionValid && input.outputItem?.type === \"Number\") {\n\t\t\tconst numVal = typeof input.outputItem.data === \"number\" ? input.outputItem.data : input.outputItem.data?.value ?? fallbackVal;\n\t\t\tval = Math.max(minVal, Math.min(maxVal, Number(numVal)));\n\t\t} else {\n\t\t\tconst rawVal = unwrapFrameParam(fallbackVal, compositionFrame, fps).value;\n\t\t\tconst numVal = Number(rawVal ?? fallbackVal);\n\t\t\tval = Math.max(minVal, Math.min(maxVal, isNaN(numVal) ? fallbackVal : numVal));\n\t\t}\n\t\telse if (sd) {\n\t\t\tval = Math.max(minVal, Math.min(maxVal, Number(sd.offset ?? 0)));\n\t\t\thasStaticSig = true;\n\t\t}\n\t\treturn {\n\t\t\tval,\n\t\t\thasStaticSig,\n\t\t\tsd\n\t\t};\n\t};\n\tconst dummyMaskView = maskTex ? maskTex.createView() : tmpSrcView;\n\tlet currentInputTex = tmpSrcTex;\n\tconst pingTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpSrcTex,\n\t\t...maskTex ? [maskTex] : [],\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst pongTex = patches.length > 1 ? ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpSrcTex,\n\t\tpingTex,\n\t\t...maskTex ? [maskTex] : [],\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]) : pingTex;\n\tfor (let i = 0; i < patches.length; i++) {\n\t\tconst patch = patches[i];\n\t\tconst isFirstPatch = i === 0;\n\t\tconst centerXRes = isFirstPatch ? resolveBindable(\"centerX\", patch.centerX, 0, 1) : {\n\t\t\tval: patch.centerX,\n\t\t\thasStaticSig: false,\n\t\t\tsd: null\n\t\t};\n\t\tconst centerYRes = isFirstPatch ? resolveBindable(\"centerY\", patch.centerY, 0, 1) : {\n\t\t\tval: patch.centerY,\n\t\t\thasStaticSig: false,\n\t\t\tsd: null\n\t\t};\n\t\tconst offsetXRes = isFirstPatch ? resolveBindable(\"offsetX\", patch.offsetX, -MAX_OFFSET, MAX_OFFSET) : {\n\t\t\tval: patch.offsetX,\n\t\t\thasStaticSig: false,\n\t\t\tsd: null\n\t\t};\n\t\tconst offsetYRes = isFirstPatch ? resolveBindable(\"offsetY\", patch.offsetY, -MAX_OFFSET, MAX_OFFSET) : {\n\t\t\tval: patch.offsetY,\n\t\t\thasStaticSig: false,\n\t\t\tsd: null\n\t\t};\n\t\tconst radiusRes = isFirstPatch ? resolveBindable(\"radius\", patch.radius, 1, MAX_RADIUS) : {\n\t\t\tval: patch.radius,\n\t\t\thasStaticSig: false,\n\t\t\tsd: null\n\t\t};\n\t\tconst sourceRadiusRes = isFirstPatch ? resolveBindable(\"sourceRadius\", patch.sourceRadius ?? patch.radius, 1, MAX_RADIUS) : {\n\t\t\tval: patch.sourceRadius ?? patch.radius,\n\t\t\thasStaticSig: false,\n\t\t\tsd: null\n\t\t};\n\t\tconst featherRes = isFirstPatch ? resolveBindable(\"feather\", patch.feather, 0, MAX_FEATHER) : {\n\t\t\tval: patch.feather,\n\t\t\thasStaticSig: false,\n\t\t\tsd: null\n\t\t};\n\t\tconst opacityRes = isFirstPatch ? resolveBindable(\"opacity\", patch.opacity, 0, 1) : {\n\t\t\tval: patch.opacity,\n\t\t\thasStaticSig: false,\n\t\t\tsd: null\n\t\t};\n\t\tconst signalContext = {\n\t\t\targs,\n\t\t\twidth,\n\t\t\theight,\n\t\t\tframe,\n\t\t\tfps,\n\t\t\telapsedSeconds,\n\t\t\tdurationSeconds\n\t\t};\n\t\tconst getSignalView = (res, suffix) => signalTextureView(signalContext, res, `${nodeId}_${suffix}`);\n\t\tconst offsetXView = getSignalView(offsetXRes, \"offsetX_sig\");\n\t\tconst offsetYView = getSignalView(offsetYRes, \"offsetY_sig\");\n\t\tconst centerXView = getSignalView(centerXRes, \"centerX_sig\");\n\t\tconst centerYView = getSignalView(centerYRes, \"centerY_sig\");\n\t\tconst radiusView = getSignalView(radiusRes, \"radius_sig\");\n\t\tconst sourceRadiusView = getSignalView(sourceRadiusRes, \"sourceRadius_sig\");\n\t\tconst featherView = getSignalView(featherRes, \"feather_sig\");\n\t\tconst opacityView = getSignalView(opacityRes, \"opacity_sig\");\n\t\tconst modeNum = patch.mode === \"Clone\" ? 0 : patch.mode === \"TextureTransfer\" ? 2 : 1;\n\t\tconst patchData = new Float32Array(20);\n\t\tpatchData[0] = offsetXRes.val;\n\t\tpatchData[1] = offsetYRes.val;\n\t\tpatchData[2] = centerXRes.val;\n\t\tpatchData[3] = centerYRes.val;\n\t\tpatchData[4] = radiusRes.val;\n\t\tpatchData[5] = sourceRadiusRes.val;\n\t\tpatchData[6] = featherRes.val;\n\t\tpatchData[7] = opacityRes.val;\n\t\tpatchData[8] = modeNum;\n\t\tpatchData[9] = maskTex ? 1 : 0;\n\t\tpatchData[10] = offsetXRes.hasStaticSig ? 1 : 0;\n\t\tpatchData[11] = offsetYRes.hasStaticSig ? 1 : 0;\n\t\tpatchData[12] = centerXRes.hasStaticSig ? 1 : 0;\n\t\tpatchData[13] = centerYRes.hasStaticSig ? 1 : 0;\n\t\tpatchData[14] = radiusRes.hasStaticSig ? 1 : 0;\n\t\tpatchData[15] = sourceRadiusRes.hasStaticSig ? 1 : 0;\n\t\tpatchData[16] = featherRes.hasStaticSig ? 1 : 0;\n\t\tpatchData[17] = opacityRes.hasStaticSig ? 1 : 0;\n\t\tpatchData[18] = 0;\n\t\tpatchData[19] = 0;\n\t\tconst uBuffer = ctx.renderer.getTemporaryBuffer(patchData);\n\t\tconst destinationTex = i % 2 === 0 ? pingTex : pongTex;\n\t\tconst texBindGroup = ctx.device.createBindGroup({\n\t\t\tlayout: tLayout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: currentInputTex.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: dummyMaskView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: sampler\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst sigBindGroup = ctx.device.createBindGroup({\n\t\t\tlayout: sigLayout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: offsetXView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: offsetYView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: centerXView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: centerYView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 4,\n\t\t\t\t\tresource: radiusView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 5,\n\t\t\t\t\tresource: sourceRadiusView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 6,\n\t\t\t\t\tresource: featherView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 7,\n\t\t\t\t\tresource: opacityView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 8,\n\t\t\t\t\tresource: sampler\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tdrawFullscreenPass(encoder, destinationTex.createView(), pipeline, [\n\t\t\tctx.device.createBindGroup({\n\t\t\t\tlayout: uLayout,\n\t\t\t\tentries: [{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: uBuffer }\n\t\t\t\t}]\n\t\t\t}),\n\t\t\ttexBindGroup,\n\t\t\tsigBindGroup\n\t\t]);\n\t\tcurrentInputTex = destinationTex;\n\t}\n\tdrawTextureToTarget(args, currentInputTex);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: PatchHealWebGPURenderer });\n\n//#endregion\nexport { MAX_RADIUS as a, PatchHealResultSchema as c, patchHealConfig as d, MAX_OFFSET as i, PatchItemSchema as l, PatchHealWebGPURenderer as n, PATCH_HEAL_OUTPUT_TYPE_MAP as o, MAX_FEATHER as r, PatchHealNodeConfigSchema as s, renderers_default as t, normalizePatches as u };\n//# sourceMappingURL=renderers-i-B6z1sf.mjs.map"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"renderer-mqUBkx-a.mjs","names":[],"sources":["../../../nodes/node-patch-heal/dist/renderers-i-B6z1sf.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { ImageResultSchema, VideoResultSchema, configBuilder, unwrapFrameParam } from \"@framefields/node-sdk\";\nimport { createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, signalTextureView, signalTiming, texturesLayout } from \"@framefields/node-sdk/gpu\";\nimport { z } from \"zod\";\n\n//#region src/shared/config.ts\nconst MAX_RADIUS = 500;\nconst MAX_FEATHER = 100;\nconst MAX_OFFSET = 4096;\nconst PatchItemSchema = z.object({\n\tid: z.string().default(\"patch\"),\n\tcenterX: z.number().min(0).max(1).default(.5),\n\tcenterY: z.number().min(0).max(1).default(.5),\n\toffsetX: z.number().min(-MAX_OFFSET).max(MAX_OFFSET).default(50),\n\toffsetY: z.number().min(-MAX_OFFSET).max(MAX_OFFSET).default(0),\n\tradius: z.number().min(1).max(MAX_RADIUS).default(25),\n\tsourceRadius: z.number().min(1).max(MAX_RADIUS).default(25),\n\tfeather: z.number().min(0).max(MAX_FEATHER).default(50),\n\topacity: z.number().min(0).max(1).default(1),\n\tmode: z.enum([\n\t\t\"Clone\",\n\t\t\"SeamlessHeal\",\n\t\t\"TextureTransfer\"\n\t]).default(\"SeamlessHeal\")\n});\nconst patchHealConfig = configBuilder().field(\"patches\", z.array(PatchItemSchema).optional(), {\n\tlabel: \"Patches\",\n\tdescription: \"List of patch healing operations applied sequentially.\"\n}).field(\"centerX\", z.number().min(0).max(1).default(.5), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Center X Signal\",\n\tdescription: \"Horizontal normalized position of destination patch (0.0 to 1.0).\"\n}).field(\"centerY\", z.number().min(0).max(1).default(.5), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Center Y Signal\",\n\tdescription: \"Vertical normalized position of destination patch (0.0 to 1.0).\"\n}).field(\"offsetX\", z.number().min(-MAX_OFFSET).max(MAX_OFFSET).default(50), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Source Offset X Signal\",\n\tdescription: \"Horizontal pixel distance from destination to sample source patch.\"\n}).field(\"offsetY\", z.number().min(-MAX_OFFSET).max(MAX_OFFSET).default(0), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Source Offset Y Signal\",\n\tdescription: \"Vertical pixel distance from destination to sample source patch.\"\n}).field(\"radius\", z.number().min(1).max(MAX_RADIUS).default(25), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Target Radius Signal\",\n\tdescription: \"Radius of the destination circular patch in pixels (used when no explicit Mask input is connected).\"\n}).field(\"sourceRadius\", z.number().min(1).max(MAX_RADIUS).default(25), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Source Radius Signal\",\n\tdescription: \"Radius of the source sample circular patch in pixels.\"\n}).field(\"feather\", z.number().min(0).max(MAX_FEATHER).default(50), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Feather Signal\",\n\tdescription: \"Softness edge falloff percentage (0–100%).\"\n}).field(\"opacity\", z.number().min(0).max(1).default(1), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Opacity Signal\",\n\tdescription: \"Blending opacity of the healed patch (0.0–1.0).\"\n}).field(\"mode\", z.enum([\n\t\"Clone\",\n\t\"SeamlessHeal\",\n\t\"TextureTransfer\"\n]).default(\"SeamlessHeal\"), {\n\tlabel: \"Healing Mode\",\n\tdescription: \"Healing algorithm: Clone (direct stamp), SeamlessHeal (Poisson color/lighting blend), TextureTransfer (luminance structure matching).\"\n}).build();\nconst PatchHealNodeConfigSchema = patchHealConfig.schema;\nfunction normalizePatches(config) {\n\tif (config?.patches && config.patches.length > 0) return config.patches.map((p, idx) => ({\n\t\tid: p.id || `patch-${idx + 1}`,\n\t\tcenterX: p.centerX ?? .5,\n\t\tcenterY: p.centerY ?? .5,\n\t\toffsetX: p.offsetX ?? 50,\n\t\toffsetY: p.offsetY ?? 0,\n\t\tradius: p.radius ?? 25,\n\t\tsourceRadius: p.sourceRadius ?? p.radius ?? 25,\n\t\tfeather: p.feather ?? 50,\n\t\topacity: p.opacity ?? 1,\n\t\tmode: p.mode ?? \"SeamlessHeal\"\n\t}));\n\tconst fallbackRadius = config?.radius ?? 25;\n\treturn [{\n\t\tid: \"patch-1\",\n\t\tcenterX: config?.centerX ?? .5,\n\t\tcenterY: config?.centerY ?? .5,\n\t\toffsetX: config?.offsetX ?? 50,\n\t\toffsetY: config?.offsetY ?? 0,\n\t\tradius: fallbackRadius,\n\t\tsourceRadius: config?.sourceRadius ?? fallbackRadius,\n\t\tfeather: config?.feather ?? 50,\n\t\topacity: config?.opacity ?? 1,\n\t\tmode: config?.mode ?? \"SeamlessHeal\"\n\t}];\n}\nconst PatchHealResultSchema = z.union([ImageResultSchema, VideoResultSchema]);\nconst PATCH_HEAL_OUTPUT_TYPE_MAP = {\n\tVideo: \"Video\",\n\tLottie: \"Video\",\n\tGIF: \"GIF\",\n\tImage: \"Image\",\n\tSVG: \"Image\"\n};\n\n//#endregion\n//#region src/renderers/webgpu-renderer.ts\nconst WGSL_FULLSCREEN_VS = `\nstruct VertexOutput {\n @builtin(position) position : vec4<f32>,\n @location(0) uv : vec2<f32>,\n};\n\n@vertex\nfn vs_main(@builtin(vertex_index) vertexIndex : u32) -> VertexOutput {\n var pos = array<vec2<f32>, 4>(\n vec2<f32>(-1.0, 1.0),\n vec2<f32>( 1.0, 1.0),\n vec2<f32>(-1.0, -1.0),\n vec2<f32>( 1.0, -1.0)\n );\n var uvs = array<vec2<f32>, 4>(\n vec2<f32>(0.0, 0.0),\n vec2<f32>(1.0, 0.0),\n vec2<f32>(0.0, 1.0),\n vec2<f32>(1.0, 1.0)\n );\n var output : VertexOutput;\n output.position = vec4<f32>(pos[vertexIndex], 0.0, 1.0);\n output.uv = uvs[vertexIndex];\n return output;\n}\n`;\nconst WGSL_PATCHHEAL_FS = `\n\nstruct PatchHealUniforms {\n offsetX : f32,\n offsetY : f32,\n centerX : f32,\n centerY : f32,\n\n radius : f32,\n sourceRadius : f32,\n feather : f32,\n opacity : f32,\n\n mode : f32,\n hasMask : f32,\n hasOffsetXSig : f32,\n hasOffsetYSig : f32,\n\n hasCenterXSig : f32,\n hasCenterYSig : f32,\n hasRadiusSig : f32,\n hasSourceRadSig : f32,\n\n hasFeatherSig : f32,\n hasOpacitySig : f32,\n pad0 : f32,\n pad1 : f32,\n};\n\n\n@group(0) @binding(0) var<uniform> u : PatchHealUniforms;\n\n@group(1) @binding(0) var srcTex : texture_2d<f32>;\n@group(1) @binding(1) var maskTex : texture_2d<f32>;\n@group(1) @binding(2) var samp : sampler;\n\n@group(2) @binding(0) var offsetXSigTex : texture_2d<f32>;\n@group(2) @binding(1) var offsetYSigTex : texture_2d<f32>;\n@group(2) @binding(2) var centerXSigTex : texture_2d<f32>;\n@group(2) @binding(3) var centerYSigTex : texture_2d<f32>;\n@group(2) @binding(4) var radiusSigTex : texture_2d<f32>;\n@group(2) @binding(5) var sourceRadSigTex : texture_2d<f32>;\n@group(2) @binding(6) var featherSigTex : texture_2d<f32>;\n@group(2) @binding(7) var opacitySigTex : texture_2d<f32>;\n@group(2) @binding(8) var signalSamp : sampler;\n\nfn getLuminance(c : vec3<f32>) -> f32 {\n return dot(c, vec3<f32>(0.2126, 0.7152, 0.0722));\n}\n\nfn sampleBoxBlur(tex : texture_2d<f32>, smp : sampler, centerUv : vec2<f32>, blurPx : f32, dims : vec2<f32>) -> vec4<f32> {\n let texel = 1.0 / dims;\n let stepSize = max(1.0, blurPx / 3.0);\n var accum = vec4<f32>(0.0);\n var count = 0.0;\n\n for (var y = -2; y <= 2; y++) {\n for (var x = -2; x <= 2; x++) {\n let offset = vec2<f32>(f32(x) * stepSize, f32(y) * stepSize) * texel;\n let sampleUv = clamp(centerUv + offset, vec2<f32>(0.0), vec2<f32>(1.0));\n accum += textureSampleLevel(tex, smp, sampleUv, 0.0);\n count += 1.0;\n }\n }\n return accum / count;\n}\n\n@fragment\nfn fs_main(in : VertexOutput) -> @location(0) vec4<f32> {\n let dimensions = vec2<f32>(textureDimensions(srcTex));\n\n var offsetX = u.offsetX;\n if (u.hasOffsetXSig > 0.5) {\n offsetX = textureSampleLevel(offsetXSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n var offsetY = u.offsetY;\n if (u.hasOffsetYSig > 0.5) {\n offsetY = textureSampleLevel(offsetYSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n var centerX = u.centerX;\n if (u.hasCenterXSig > 0.5) {\n centerX = textureSampleLevel(centerXSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n var centerY = u.centerY;\n if (u.hasCenterYSig > 0.5) {\n centerY = textureSampleLevel(centerYSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n var radius = u.radius;\n if (u.hasRadiusSig > 0.5) {\n radius = textureSampleLevel(radiusSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n var sourceRadius = u.sourceRadius;\n if (u.hasSourceRadSig > 0.5) {\n sourceRadius = textureSampleLevel(sourceRadSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n var feather = u.feather;\n if (u.hasFeatherSig > 0.5) {\n feather = textureSampleLevel(featherSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n var opacity = u.opacity;\n if (u.hasOpacitySig > 0.5) {\n opacity = textureSampleLevel(opacitySigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n let dstCol = textureSampleLevel(srcTex, samp, in.uv, 0.0);\n\n // Calculate mask weight (either from explicit mask or procedural circular patch)\n var maskWeight = 0.0;\n let targetCenterUV = vec2<f32>(centerX, centerY);\n\n if (u.hasMask > 0.5) {\n let maskCol = textureSampleLevel(maskTex, samp, in.uv, 0.0);\n maskWeight = max(maskCol.a, max(maskCol.r, max(maskCol.g, maskCol.b)));\n } else {\n let distPx = length((in.uv - targetCenterUV) * dimensions);\n let innerRadius = radius * max(0.0, 1.0 - feather / 100.0);\n maskWeight = 1.0 - smoothstep(innerRadius, max(innerRadius + 0.001, radius), distPx);\n }\n\n let blendWeight = clamp(maskWeight * opacity, 0.0, 1.0);\n if (blendWeight < 1e-4) {\n return dstCol;\n }\n\n // Compute source sample coordinate (scaling from sourceRadius to target radius if different)\n let sourceCenterUV = targetCenterUV + vec2<f32>(offsetX, offsetY) / dimensions;\n let srcScale = max(1.0, sourceRadius) / max(1.0, radius);\n let uvFromTargetCenter = in.uv - targetCenterUV;\n let srcUV = clamp(sourceCenterUV + uvFromTargetCenter * srcScale, vec2<f32>(0.0), vec2<f32>(1.0));\n let srcCol = textureSampleLevel(srcTex, samp, srcUV, 0.0);\n\n var healedCol = srcCol;\n\n if (u.mode > 0.5 && u.mode < 1.5) {\n // Mode 1: Seamless Heal (Poisson gradient / local illumination matching)\n let blurRadius = max(4.0, radius * 0.4);\n let srcBlur = sampleBoxBlur(srcTex, samp, srcUV, blurRadius, dimensions);\n let dstBlur = sampleBoxBlur(srcTex, samp, in.uv, blurRadius, dimensions);\n\n let srcDetail = srcCol.rgb - srcBlur.rgb;\n let healedRgb = dstBlur.rgb + srcDetail;\n let clampedRgb = clamp(healedRgb, vec3<f32>(0.0), vec3<f32>(srcCol.a));\n healedCol = vec4<f32>(clampedRgb, srcCol.a);\n } else if (u.mode >= 1.5) {\n // Mode 2: Texture Transfer (Luminance structure matching)\n let blurRadius = max(4.0, radius * 0.4);\n let srcBlur = sampleBoxBlur(srcTex, samp, srcUV, blurRadius, dimensions);\n\n let lumaSrc = getLuminance(srcCol.rgb);\n let lumaSrcBlur = getLuminance(srcBlur.rgb);\n let lumaDelta = lumaSrc - lumaSrcBlur;\n\n let healedRgb = dstCol.rgb + vec3<f32>(lumaDelta);\n let clampedRgb = clamp(healedRgb, vec3<f32>(0.0), vec3<f32>(dstCol.a));\n healedCol = vec4<f32>(clampedRgb, dstCol.a);\n }\n\n return mix(dstCol, healedCol, blendWeight);\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nfunction getDeviceResources(device, format) {\n\tlet res = deviceResourceCache.get(device);\n\tif (res) return res;\n\tconst uniformLayout = fragmentBindGroupLayout(device, [\"uniform\"]);\n\tconst textureLayout = texturesLayout(device, 2);\n\tconst signalTextureLayout = texturesLayout(device, 8);\n\tres = {\n\t\tuniformLayout,\n\t\ttextureLayout,\n\t\tsignalTextureLayout,\n\t\tpipeline: createFullscreenPipeline(device, {\n\t\t\tmodule: device.createShaderModule({ code: `${WGSL_FULLSCREEN_VS}\\n${WGSL_PATCHHEAL_FS}` }),\n\t\t\tlayouts: device.createPipelineLayout({ bindGroupLayouts: [\n\t\t\t\tuniformLayout,\n\t\t\t\ttextureLayout,\n\t\t\t\tsignalTextureLayout\n\t\t\t] }),\n\t\t\tformat,\n\t\t\tblend: {\n\t\t\t\tcolor: {\n\t\t\t\t\tsrcFactor: \"one\",\n\t\t\t\t\tdstFactor: \"zero\",\n\t\t\t\t\toperation: \"add\"\n\t\t\t\t},\n\t\t\t\talpha: {\n\t\t\t\t\tsrcFactor: \"one\",\n\t\t\t\t\tdstFactor: \"zero\",\n\t\t\t\t\toperation: \"add\"\n\t\t\t\t}\n\t\t\t},\n\t\t\tvertexEntryPoint: \"vs_main\",\n\t\t\tfragmentEntryPoint: \"fs_main\"\n\t\t})\n\t};\n\tdeviceResourceCache.set(device, res);\n\treturn res;\n}\nconst PatchHealWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"PatchHeal\" || !op) return;\n\tconst childMedia = props.virtualMedia?.children?.[0];\n\tif (!childMedia) return;\n\tpass.end();\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst frame = props.frame ?? 0;\n\tconst compositionFrame = props.compositionFrame ?? frame;\n\tconst fps = props.fps || 30;\n\tconst nodeId = op.inputs ? Object.keys(op.inputs)[0] : \"patch_heal_node\";\n\tconst { texture: tmpSrcTex, view: tmpSrcView } = await drawChildToTexture(args, childMedia, { props: {\n\t\t...props,\n\t\tvirtualMedia: childMedia,\n\t\trenderId: `${props.renderId}-src`\n\t} });\n\tlet maskTex = null;\n\tif (op.maskMedia) ({texture: maskTex} = await drawChildToTexture(args, op.maskMedia, {\n\t\tprops: {\n\t\t\t...props,\n\t\t\tvirtualMedia: op.maskMedia,\n\t\t\trenderId: `${props.renderId}-mask`,\n\t\t\texcludeTextures: [...props.excludeTextures || [], tmpSrcTex]\n\t\t},\n\t\texclude: [tmpSrcTex]\n\t}));\n\tconst { pipeline, uniformLayout: uLayout, textureLayout: tLayout, signalTextureLayout: sigLayout } = getDeviceResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst { elapsedSeconds, durationSeconds } = signalTiming(props, frame, fps);\n\tconst patches = normalizePatches(op);\n\tconst resolveBindable = (configKey, fallbackVal, minVal, maxVal) => {\n\t\tconst handleId = op[`${configKey}HandleId`];\n\t\tconst input = handleId ? op.inputs?.[handleId] : null;\n\t\tconst hasSignal = !!(input?.connectionValid && (input.outputItem?.type === \"Signal\" || input.outputItem?.type === \"Numeric\"));\n\t\tconst sd = hasSignal && input?.outputItem?.data ? input.outputItem.data : null;\n\t\tlet val = fallbackVal;\n\t\tlet hasStaticSig = false;\n\t\tif (!hasSignal) if (input?.connectionValid && input.outputItem?.type === \"Number\") {\n\t\t\tconst numVal = typeof input.outputItem.data === \"number\" ? input.outputItem.data : input.outputItem.data?.value ?? fallbackVal;\n\t\t\tval = Math.max(minVal, Math.min(maxVal, Number(numVal)));\n\t\t} else {\n\t\t\tconst rawVal = unwrapFrameParam(fallbackVal, compositionFrame, fps).value;\n\t\t\tconst numVal = Number(rawVal ?? fallbackVal);\n\t\t\tval = Math.max(minVal, Math.min(maxVal, isNaN(numVal) ? fallbackVal : numVal));\n\t\t}\n\t\telse if (sd) {\n\t\t\tval = Math.max(minVal, Math.min(maxVal, Number(sd.offset ?? 0)));\n\t\t\thasStaticSig = true;\n\t\t}\n\t\treturn {\n\t\t\tval,\n\t\t\thasStaticSig,\n\t\t\tsd\n\t\t};\n\t};\n\tconst dummyMaskView = maskTex ? maskTex.createView() : tmpSrcView;\n\tlet currentInputTex = tmpSrcTex;\n\tconst pingTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpSrcTex,\n\t\t...maskTex ? [maskTex] : [],\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst pongTex = patches.length > 1 ? ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpSrcTex,\n\t\tpingTex,\n\t\t...maskTex ? [maskTex] : [],\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]) : pingTex;\n\tfor (let i = 0; i < patches.length; i++) {\n\t\tconst patch = patches[i];\n\t\tconst isFirstPatch = i === 0;\n\t\tconst centerXRes = isFirstPatch ? resolveBindable(\"centerX\", patch.centerX, 0, 1) : {\n\t\t\tval: patch.centerX,\n\t\t\thasStaticSig: false,\n\t\t\tsd: null\n\t\t};\n\t\tconst centerYRes = isFirstPatch ? resolveBindable(\"centerY\", patch.centerY, 0, 1) : {\n\t\t\tval: patch.centerY,\n\t\t\thasStaticSig: false,\n\t\t\tsd: null\n\t\t};\n\t\tconst offsetXRes = isFirstPatch ? resolveBindable(\"offsetX\", patch.offsetX, -MAX_OFFSET, MAX_OFFSET) : {\n\t\t\tval: patch.offsetX,\n\t\t\thasStaticSig: false,\n\t\t\tsd: null\n\t\t};\n\t\tconst offsetYRes = isFirstPatch ? resolveBindable(\"offsetY\", patch.offsetY, -MAX_OFFSET, MAX_OFFSET) : {\n\t\t\tval: patch.offsetY,\n\t\t\thasStaticSig: false,\n\t\t\tsd: null\n\t\t};\n\t\tconst radiusRes = isFirstPatch ? resolveBindable(\"radius\", patch.radius, 1, MAX_RADIUS) : {\n\t\t\tval: patch.radius,\n\t\t\thasStaticSig: false,\n\t\t\tsd: null\n\t\t};\n\t\tconst sourceRadiusRes = isFirstPatch ? resolveBindable(\"sourceRadius\", patch.sourceRadius ?? patch.radius, 1, MAX_RADIUS) : {\n\t\t\tval: patch.sourceRadius ?? patch.radius,\n\t\t\thasStaticSig: false,\n\t\t\tsd: null\n\t\t};\n\t\tconst featherRes = isFirstPatch ? resolveBindable(\"feather\", patch.feather, 0, MAX_FEATHER) : {\n\t\t\tval: patch.feather,\n\t\t\thasStaticSig: false,\n\t\t\tsd: null\n\t\t};\n\t\tconst opacityRes = isFirstPatch ? resolveBindable(\"opacity\", patch.opacity, 0, 1) : {\n\t\t\tval: patch.opacity,\n\t\t\thasStaticSig: false,\n\t\t\tsd: null\n\t\t};\n\t\tconst signalContext = {\n\t\t\targs,\n\t\t\twidth,\n\t\t\theight,\n\t\t\tframe,\n\t\t\tfps,\n\t\t\telapsedSeconds,\n\t\t\tdurationSeconds\n\t\t};\n\t\tconst getSignalView = (res, suffix) => signalTextureView(signalContext, res, `${nodeId}_${suffix}`);\n\t\tconst offsetXView = getSignalView(offsetXRes, \"offsetX_sig\");\n\t\tconst offsetYView = getSignalView(offsetYRes, \"offsetY_sig\");\n\t\tconst centerXView = getSignalView(centerXRes, \"centerX_sig\");\n\t\tconst centerYView = getSignalView(centerYRes, \"centerY_sig\");\n\t\tconst radiusView = getSignalView(radiusRes, \"radius_sig\");\n\t\tconst sourceRadiusView = getSignalView(sourceRadiusRes, \"sourceRadius_sig\");\n\t\tconst featherView = getSignalView(featherRes, \"feather_sig\");\n\t\tconst opacityView = getSignalView(opacityRes, \"opacity_sig\");\n\t\tconst modeNum = patch.mode === \"Clone\" ? 0 : patch.mode === \"TextureTransfer\" ? 2 : 1;\n\t\tconst patchData = new Float32Array(20);\n\t\tpatchData[0] = offsetXRes.val;\n\t\tpatchData[1] = offsetYRes.val;\n\t\tpatchData[2] = centerXRes.val;\n\t\tpatchData[3] = centerYRes.val;\n\t\tpatchData[4] = radiusRes.val;\n\t\tpatchData[5] = sourceRadiusRes.val;\n\t\tpatchData[6] = featherRes.val;\n\t\tpatchData[7] = opacityRes.val;\n\t\tpatchData[8] = modeNum;\n\t\tpatchData[9] = maskTex ? 1 : 0;\n\t\tpatchData[10] = offsetXRes.hasStaticSig ? 1 : 0;\n\t\tpatchData[11] = offsetYRes.hasStaticSig ? 1 : 0;\n\t\tpatchData[12] = centerXRes.hasStaticSig ? 1 : 0;\n\t\tpatchData[13] = centerYRes.hasStaticSig ? 1 : 0;\n\t\tpatchData[14] = radiusRes.hasStaticSig ? 1 : 0;\n\t\tpatchData[15] = sourceRadiusRes.hasStaticSig ? 1 : 0;\n\t\tpatchData[16] = featherRes.hasStaticSig ? 1 : 0;\n\t\tpatchData[17] = opacityRes.hasStaticSig ? 1 : 0;\n\t\tpatchData[18] = 0;\n\t\tpatchData[19] = 0;\n\t\tconst uBuffer = ctx.renderer.getTemporaryBuffer(patchData);\n\t\tconst destinationTex = i % 2 === 0 ? pingTex : pongTex;\n\t\tconst texBindGroup = ctx.device.createBindGroup({\n\t\t\tlayout: tLayout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: currentInputTex.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: dummyMaskView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: sampler\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tconst sigBindGroup = ctx.device.createBindGroup({\n\t\t\tlayout: sigLayout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: offsetXView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: offsetYView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: centerXView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: centerYView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 4,\n\t\t\t\t\tresource: radiusView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 5,\n\t\t\t\t\tresource: sourceRadiusView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 6,\n\t\t\t\t\tresource: featherView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 7,\n\t\t\t\t\tresource: opacityView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 8,\n\t\t\t\t\tresource: sampler\n\t\t\t\t}\n\t\t\t]\n\t\t});\n\t\tdrawFullscreenPass(encoder, destinationTex.createView(), pipeline, [\n\t\t\tctx.device.createBindGroup({\n\t\t\t\tlayout: uLayout,\n\t\t\t\tentries: [{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: uBuffer }\n\t\t\t\t}]\n\t\t\t}),\n\t\t\ttexBindGroup,\n\t\t\tsigBindGroup\n\t\t]);\n\t\tcurrentInputTex = destinationTex;\n\t}\n\tdrawTextureToTarget(args, currentInputTex);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: PatchHealWebGPURenderer });\n\n//#endregion\nexport { MAX_RADIUS as a, PatchHealResultSchema as c, patchHealConfig as d, MAX_OFFSET as i, PatchItemSchema as l, PatchHealWebGPURenderer as n, PATCH_HEAL_OUTPUT_TYPE_MAP as o, MAX_FEATHER as r, PatchHealNodeConfigSchema as s, renderers_default as t, normalizePatches as u };\n//# sourceMappingURL=renderers-i-B6z1sf.mjs.map"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import "./chunk-GBe2k3y8.mjs";
|
|
2
2
|
import { n as defineRenderer } from "./renderer-BSitV56h.mjs";
|
|
3
|
-
import "./dist-
|
|
4
|
-
import { c as drawTextureToTarget, l as fragmentBindGroupLayout, o as drawChildToTexture, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL, u as perDevice } from "./gpu-
|
|
3
|
+
import "./dist-hmWTJPik.mjs";
|
|
4
|
+
import { c as drawTextureToTarget, l as fragmentBindGroupLayout, o as drawChildToTexture, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL, u as perDevice } from "./gpu-CHIgM_YH.mjs";
|
|
5
5
|
|
|
6
6
|
//#region ../../nodes/node-crt/dist/renderers-RZlSUb1G.mjs
|
|
7
7
|
const OP = "CRT";
|
|
@@ -221,4 +221,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: CRTWebGPURenderer });
|
|
|
221
221
|
|
|
222
222
|
//#endregion
|
|
223
223
|
export { CRTWebGPURenderer, renderers_default as default };
|
|
224
|
-
//# sourceMappingURL=renderer-
|
|
224
|
+
//# sourceMappingURL=renderer-plx7_lUQ.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-DyyIXLQK.mjs","names":[],"sources":["../../../nodes/node-crt/dist/renderers-RZlSUb1G.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst OP = \"CRT\";\nconst UNIFORM_FLOATS = 16;\n/** One fragment shader per pass; pass 0 reads the layer, later passes read the previous pass. */\nconst PASSES = [`struct U { v : array<vec4<f32>, 4> };\n@group(0) @binding(0) var<uniform> u : U;\n@group(0) @binding(1) var src : texture_2d<f32>;\n@group(0) @binding(2) var prev : texture_2d<f32>;\n@group(0) @binding(3) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn straight(c : vec4<f32>) -> vec4<f32> {\n\tif (c.a <= 0.0001) { return vec4<f32>(0.0); }\n\treturn vec4<f32>(c.rgb / c.a, c.a);\n}\nfn premul(c : vec4<f32>) -> vec4<f32> { return vec4<f32>(c.rgb * c.a, c.a); }\nfn res() -> vec2<f32> { return vec2<f32>(textureDimensions(src)); }\n/** Straight-alpha color of the layer at a uv (filtered). */\nfn sampleS(uv : vec2<f32>) -> vec4<f32> { return straight(textureSampleLevel(src, samp, uv, 0.0)); }\n/** Premultiplied color of the layer at a uv (filtered). */\nfn sampleP(uv : vec2<f32>) -> vec4<f32> { return textureSampleLevel(src, samp, uv, 0.0); }\n/** Straight-alpha color of the layer's texel at a pixel position (nearest). */\nfn texelS(p : vec2<f32>) -> vec4<f32> {\n\tlet d = vec2<i32>(textureDimensions(src));\n\tlet q = clamp(vec2<i32>(floor(p)), vec2<i32>(0), d - vec2<i32>(1));\n\treturn straight(textureLoad(src, q, 0));\n}\nfn luma(c : vec3<f32>) -> f32 { return dot(c, vec3<f32>(0.2126, 0.7152, 0.0722)); }\nfn hash12(p : vec2<f32>) -> f32 {\n\tvar p3 = fract(vec3<f32>(p.xyx) * 0.1031);\n\tp3 += dot(p3, p3.yzx + 33.33);\n\treturn fract((p3.x + p3.y) * p3.z);\n}\nfn vnoise(p : vec2<f32>) -> f32 {\n\tlet i = floor(p);\n\tlet f = fract(p);\n\tlet u = f * f * (3.0 - 2.0 * f);\n\treturn mix(mix(hash12(i), hash12(i + vec2<f32>(1.0, 0.0)), u.x),\n\t\tmix(hash12(i + vec2<f32>(0.0, 1.0)), hash12(i + vec2<f32>(1.0, 1.0)), u.x), u.y);\n}\n/** 8x8 ordered-dither threshold, 0..1. */\nfn bayer8(p : vec2<f32>) -> f32 {\n\tlet x = u32(p.x) & 7u;\n\tlet y = u32(p.y) & 7u;\n\tvar v = 0u;\n\tfor (var k = 0u; k < 3u; k++) {\n\t\tlet bx = (x >> k) & 1u;\n\t\tlet by = (y >> k) & 1u;\n\t\tlet m = ((bx ^ by) << 1u) | by;\n\t\tv += m * (1u << (2u * (2u - k)));\n\t}\n\treturn (f32(v) + 0.5) / 64.0;\n}\nfn rot2(a : f32) -> mat2x2<f32> { let c = cos(a); let s = sin(a); return mat2x2<f32>(c, s, -s, c); }\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet time = u.v[0].x;\n\tlet frame = u.v[0].y;\n\tlet scanlines = u.v[1].x;\n\tlet lineCount = u.v[1].y;\n\tlet curvature = u.v[1].z;\n\tlet mask = u.v[1].w;\n\tlet vignette = u.v[2].x;\n\tlet noise = u.v[2].y;\n\tlet flicker = u.v[2].z;\n\tlet tracking = u.v[2].w;\n\tlet chroma = u.v[3].x;\n\n\tlet R = res();\n\tlet t = time;\n\tlet cc = in.uv * 2.0 - 1.0;\n\tvar uv = (cc * (1.0 + curvature * 0.25 * dot(cc, cc))) * 0.5 + 0.5;\n\tif (uv.x < 0.0 || uv.y < 0.0 || uv.x > 1.0 || uv.y > 1.0) { return vec4<f32>(0.0, 0.0, 0.0, 1.0); }\n\tlet line = floor(uv.y * lineCount);\n\tlet jitter = (hash12(vec2<f32>(line, floor(t * 30.0))) - 0.5) * tracking * 0.006;\n\tlet bandY = fract(t * 0.13);\n\tlet band = smoothstep(0.07, 0.0, abs(uv.y - bandY)) * tracking;\n\tuv.x += jitter + band * 0.015 * sin(uv.y * 400.0 + t * 20.0);\n\tlet base = sampleS(uv);\n\tvar rgb = base.rgb;\n\tif (chroma > 0.0) {\n\t\tlet off = chroma / R.x;\n\t\tlet avg = (sampleS(uv - vec2<f32>(off, 0.0)).rgb + base.rgb + sampleS(uv + vec2<f32>(off * 2.0, 0.0)).rgb) / 3.0;\n\t\tlet y = luma(base.rgb);\n\t\trgb = vec3<f32>(y) + (avg - vec3<f32>(luma(avg)));\n\t}\n\tlet sl = 0.5 + 0.5 * cos(uv.y * lineCount * 6.2831853);\n\trgb *= 1.0 - scanlines * (1.0 - sl) * 0.7;\n\tlet tri = u32(floor(in.uv.x * R.x)) % 3u;\n\tvar m = vec3<f32>(0.75);\n\tif (tri == 0u) { m.r = 1.25; } else if (tri == 1u) { m.g = 1.25; } else { m.b = 1.25; }\n\trgb *= mix(vec3<f32>(1.0), m, mask);\n\trgb += (hash12(in.uv * R + vec2<f32>(t * 61.0, t * 17.0)) - 0.5) * noise * 0.3;\n\trgb *= 1.0 - flicker * hash12(vec2<f32>(floor(t * 24.0), 3.0));\n\trgb *= 1.0 - vignette * dot(cc, cc) * 0.35;\n\trgb += band * 0.12;\n\treturn vec4<f32>(clamp(rgb, vec3<f32>(0.0), vec3<f32>(1.0)), 1.0);\n}\n`];\nconst resources = perDevice((device) => ({\n\tlayout: fragmentBindGroupLayout(device, [\n\t\t\"uniform\",\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"sampler\"\n\t], `${OP}_layout`),\n\tpipelines: /* @__PURE__ */ new Map(),\n\tsampler: device.createSampler({\n\t\tmagFilter: \"linear\",\n\t\tminFilter: \"linear\",\n\t\taddressModeU: \"clamp-to-edge\",\n\t\taddressModeV: \"clamp-to-edge\"\n\t})\n}));\nfunction pipelinesFor(device, format) {\n\tconst r = resources(device);\n\tlet list = r.pipelines.get(format);\n\tif (!list) {\n\t\tlist = PASSES.map((code, i) => {\n\t\t\tconst module = device.createShaderModule({\n\t\t\t\tcode,\n\t\t\t\tlabel: `${OP}_${i}.wgsl`\n\t\t\t});\n\t\t\treturn device.createRenderPipeline({\n\t\t\t\tlabel: `${OP}_${i}`,\n\t\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [r.layout] }),\n\t\t\t\tvertex: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"vs\"\n\t\t\t\t},\n\t\t\t\tfragment: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"fs\",\n\t\t\t\t\ttargets: [{ format }]\n\t\t\t\t},\n\t\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t\t});\n\t\t});\n\t\tr.pipelines.set(format, list);\n\t}\n\treturn list;\n}\nfunction num(v, fallback) {\n\tconst n = typeof v === \"number\" ? v : Number(v);\n\treturn Number.isFinite(n) ? n : fallback;\n}\n/** Packs the effect's resolved props into the uniform block the shaders read. */\nfunction pack(raw, data, time, frame) {\n\tdata.fill(0);\n\tdata[0] = time;\n\tdata[1] = frame;\n\tdata[4] = num(raw.scanlines, .45);\n\tdata[5] = num(raw.lineCount, 540);\n\tdata[6] = num(raw.curvature, .12);\n\tdata[7] = num(raw.mask, .25);\n\tdata[8] = num(raw.vignette, .35);\n\tdata[9] = num(raw.noise, .08);\n\tdata[10] = num(raw.flicker, .03);\n\tdata[11] = num(raw.tracking, 0);\n\tdata[12] = num(raw.chroma, 0);\n}\nconst CRTWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== OP) return;\n\tconst child = props.virtualMedia?.children?.[0];\n\tif (!child) return;\n\tpass.end();\n\tconst fps = props.fps || 30;\n\tconst frame = Math.round(props.compositionFrame ?? props.frame ?? 0);\n\tconst raw = op.effect?.resolveUniforms ? op.effect.resolveUniforms({\n\t\tframe,\n\t\tfps,\n\t\ttime: frame / fps\n\t}) : op;\n\tconst data = new Float32Array(UNIFORM_FLOATS);\n\tpack(raw, data, frame / fps, frame);\n\tconst { texture: childTex } = await drawChildToTexture(args, child);\n\tconst device = ctx.device;\n\tconst r = resources(device);\n\tconst pipelines = pipelinesFor(device, ctx.renderer.format);\n\tconst ubo = ctx.renderer.getTemporaryBuffer(data);\n\tlet prev = childTex;\n\tfor (const pipeline of pipelines) {\n\t\tconst out = ctx.renderer.getTemporaryTexture(targetWidth, targetHeight, [\n\t\t\tchildTex,\n\t\t\tprev,\n\t\t\ttargetTexture,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tdrawFullscreenPass(encoder, out.createView(), pipeline, [device.createBindGroup({\n\t\t\tlayout: r.layout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: ubo }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: childTex.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: prev.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: r.sampler\n\t\t\t\t}\n\t\t\t]\n\t\t})]);\n\t\tprev = out;\n\t}\n\tdrawTextureToTarget(args, prev);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: CRTWebGPURenderer });\n\n//#endregion\nexport { CRTWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-RZlSUb1G.mjs.map"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"renderer-plx7_lUQ.mjs","names":[],"sources":["../../../nodes/node-crt/dist/renderers-RZlSUb1G.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst OP = \"CRT\";\nconst UNIFORM_FLOATS = 16;\n/** One fragment shader per pass; pass 0 reads the layer, later passes read the previous pass. */\nconst PASSES = [`struct U { v : array<vec4<f32>, 4> };\n@group(0) @binding(0) var<uniform> u : U;\n@group(0) @binding(1) var src : texture_2d<f32>;\n@group(0) @binding(2) var prev : texture_2d<f32>;\n@group(0) @binding(3) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn straight(c : vec4<f32>) -> vec4<f32> {\n\tif (c.a <= 0.0001) { return vec4<f32>(0.0); }\n\treturn vec4<f32>(c.rgb / c.a, c.a);\n}\nfn premul(c : vec4<f32>) -> vec4<f32> { return vec4<f32>(c.rgb * c.a, c.a); }\nfn res() -> vec2<f32> { return vec2<f32>(textureDimensions(src)); }\n/** Straight-alpha color of the layer at a uv (filtered). */\nfn sampleS(uv : vec2<f32>) -> vec4<f32> { return straight(textureSampleLevel(src, samp, uv, 0.0)); }\n/** Premultiplied color of the layer at a uv (filtered). */\nfn sampleP(uv : vec2<f32>) -> vec4<f32> { return textureSampleLevel(src, samp, uv, 0.0); }\n/** Straight-alpha color of the layer's texel at a pixel position (nearest). */\nfn texelS(p : vec2<f32>) -> vec4<f32> {\n\tlet d = vec2<i32>(textureDimensions(src));\n\tlet q = clamp(vec2<i32>(floor(p)), vec2<i32>(0), d - vec2<i32>(1));\n\treturn straight(textureLoad(src, q, 0));\n}\nfn luma(c : vec3<f32>) -> f32 { return dot(c, vec3<f32>(0.2126, 0.7152, 0.0722)); }\nfn hash12(p : vec2<f32>) -> f32 {\n\tvar p3 = fract(vec3<f32>(p.xyx) * 0.1031);\n\tp3 += dot(p3, p3.yzx + 33.33);\n\treturn fract((p3.x + p3.y) * p3.z);\n}\nfn vnoise(p : vec2<f32>) -> f32 {\n\tlet i = floor(p);\n\tlet f = fract(p);\n\tlet u = f * f * (3.0 - 2.0 * f);\n\treturn mix(mix(hash12(i), hash12(i + vec2<f32>(1.0, 0.0)), u.x),\n\t\tmix(hash12(i + vec2<f32>(0.0, 1.0)), hash12(i + vec2<f32>(1.0, 1.0)), u.x), u.y);\n}\n/** 8x8 ordered-dither threshold, 0..1. */\nfn bayer8(p : vec2<f32>) -> f32 {\n\tlet x = u32(p.x) & 7u;\n\tlet y = u32(p.y) & 7u;\n\tvar v = 0u;\n\tfor (var k = 0u; k < 3u; k++) {\n\t\tlet bx = (x >> k) & 1u;\n\t\tlet by = (y >> k) & 1u;\n\t\tlet m = ((bx ^ by) << 1u) | by;\n\t\tv += m * (1u << (2u * (2u - k)));\n\t}\n\treturn (f32(v) + 0.5) / 64.0;\n}\nfn rot2(a : f32) -> mat2x2<f32> { let c = cos(a); let s = sin(a); return mat2x2<f32>(c, s, -s, c); }\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet time = u.v[0].x;\n\tlet frame = u.v[0].y;\n\tlet scanlines = u.v[1].x;\n\tlet lineCount = u.v[1].y;\n\tlet curvature = u.v[1].z;\n\tlet mask = u.v[1].w;\n\tlet vignette = u.v[2].x;\n\tlet noise = u.v[2].y;\n\tlet flicker = u.v[2].z;\n\tlet tracking = u.v[2].w;\n\tlet chroma = u.v[3].x;\n\n\tlet R = res();\n\tlet t = time;\n\tlet cc = in.uv * 2.0 - 1.0;\n\tvar uv = (cc * (1.0 + curvature * 0.25 * dot(cc, cc))) * 0.5 + 0.5;\n\tif (uv.x < 0.0 || uv.y < 0.0 || uv.x > 1.0 || uv.y > 1.0) { return vec4<f32>(0.0, 0.0, 0.0, 1.0); }\n\tlet line = floor(uv.y * lineCount);\n\tlet jitter = (hash12(vec2<f32>(line, floor(t * 30.0))) - 0.5) * tracking * 0.006;\n\tlet bandY = fract(t * 0.13);\n\tlet band = smoothstep(0.07, 0.0, abs(uv.y - bandY)) * tracking;\n\tuv.x += jitter + band * 0.015 * sin(uv.y * 400.0 + t * 20.0);\n\tlet base = sampleS(uv);\n\tvar rgb = base.rgb;\n\tif (chroma > 0.0) {\n\t\tlet off = chroma / R.x;\n\t\tlet avg = (sampleS(uv - vec2<f32>(off, 0.0)).rgb + base.rgb + sampleS(uv + vec2<f32>(off * 2.0, 0.0)).rgb) / 3.0;\n\t\tlet y = luma(base.rgb);\n\t\trgb = vec3<f32>(y) + (avg - vec3<f32>(luma(avg)));\n\t}\n\tlet sl = 0.5 + 0.5 * cos(uv.y * lineCount * 6.2831853);\n\trgb *= 1.0 - scanlines * (1.0 - sl) * 0.7;\n\tlet tri = u32(floor(in.uv.x * R.x)) % 3u;\n\tvar m = vec3<f32>(0.75);\n\tif (tri == 0u) { m.r = 1.25; } else if (tri == 1u) { m.g = 1.25; } else { m.b = 1.25; }\n\trgb *= mix(vec3<f32>(1.0), m, mask);\n\trgb += (hash12(in.uv * R + vec2<f32>(t * 61.0, t * 17.0)) - 0.5) * noise * 0.3;\n\trgb *= 1.0 - flicker * hash12(vec2<f32>(floor(t * 24.0), 3.0));\n\trgb *= 1.0 - vignette * dot(cc, cc) * 0.35;\n\trgb += band * 0.12;\n\treturn vec4<f32>(clamp(rgb, vec3<f32>(0.0), vec3<f32>(1.0)), 1.0);\n}\n`];\nconst resources = perDevice((device) => ({\n\tlayout: fragmentBindGroupLayout(device, [\n\t\t\"uniform\",\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"sampler\"\n\t], `${OP}_layout`),\n\tpipelines: /* @__PURE__ */ new Map(),\n\tsampler: device.createSampler({\n\t\tmagFilter: \"linear\",\n\t\tminFilter: \"linear\",\n\t\taddressModeU: \"clamp-to-edge\",\n\t\taddressModeV: \"clamp-to-edge\"\n\t})\n}));\nfunction pipelinesFor(device, format) {\n\tconst r = resources(device);\n\tlet list = r.pipelines.get(format);\n\tif (!list) {\n\t\tlist = PASSES.map((code, i) => {\n\t\t\tconst module = device.createShaderModule({\n\t\t\t\tcode,\n\t\t\t\tlabel: `${OP}_${i}.wgsl`\n\t\t\t});\n\t\t\treturn device.createRenderPipeline({\n\t\t\t\tlabel: `${OP}_${i}`,\n\t\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [r.layout] }),\n\t\t\t\tvertex: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"vs\"\n\t\t\t\t},\n\t\t\t\tfragment: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"fs\",\n\t\t\t\t\ttargets: [{ format }]\n\t\t\t\t},\n\t\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t\t});\n\t\t});\n\t\tr.pipelines.set(format, list);\n\t}\n\treturn list;\n}\nfunction num(v, fallback) {\n\tconst n = typeof v === \"number\" ? v : Number(v);\n\treturn Number.isFinite(n) ? n : fallback;\n}\n/** Packs the effect's resolved props into the uniform block the shaders read. */\nfunction pack(raw, data, time, frame) {\n\tdata.fill(0);\n\tdata[0] = time;\n\tdata[1] = frame;\n\tdata[4] = num(raw.scanlines, .45);\n\tdata[5] = num(raw.lineCount, 540);\n\tdata[6] = num(raw.curvature, .12);\n\tdata[7] = num(raw.mask, .25);\n\tdata[8] = num(raw.vignette, .35);\n\tdata[9] = num(raw.noise, .08);\n\tdata[10] = num(raw.flicker, .03);\n\tdata[11] = num(raw.tracking, 0);\n\tdata[12] = num(raw.chroma, 0);\n}\nconst CRTWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== OP) return;\n\tconst child = props.virtualMedia?.children?.[0];\n\tif (!child) return;\n\tpass.end();\n\tconst fps = props.fps || 30;\n\tconst frame = Math.round(props.compositionFrame ?? props.frame ?? 0);\n\tconst raw = op.effect?.resolveUniforms ? op.effect.resolveUniforms({\n\t\tframe,\n\t\tfps,\n\t\ttime: frame / fps\n\t}) : op;\n\tconst data = new Float32Array(UNIFORM_FLOATS);\n\tpack(raw, data, frame / fps, frame);\n\tconst { texture: childTex } = await drawChildToTexture(args, child);\n\tconst device = ctx.device;\n\tconst r = resources(device);\n\tconst pipelines = pipelinesFor(device, ctx.renderer.format);\n\tconst ubo = ctx.renderer.getTemporaryBuffer(data);\n\tlet prev = childTex;\n\tfor (const pipeline of pipelines) {\n\t\tconst out = ctx.renderer.getTemporaryTexture(targetWidth, targetHeight, [\n\t\t\tchildTex,\n\t\t\tprev,\n\t\t\ttargetTexture,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tdrawFullscreenPass(encoder, out.createView(), pipeline, [device.createBindGroup({\n\t\t\tlayout: r.layout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: ubo }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: childTex.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: prev.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: r.sampler\n\t\t\t\t}\n\t\t\t]\n\t\t})]);\n\t\tprev = out;\n\t}\n\tdrawTextureToTarget(args, prev);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: CRTWebGPURenderer });\n\n//#endregion\nexport { CRTWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-RZlSUb1G.mjs.map"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { o as resolveHandleParam } from "./renderer-BSitV56h.mjs";
|
|
2
|
-
import { a as createFullscreenPipeline, c as drawTextureToTarget, d as signalTextureView, f as signalTiming, l as fragmentBindGroupLayout, o as drawChildToTexture, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL } from "./gpu-
|
|
2
|
+
import { a as createFullscreenPipeline, c as drawTextureToTarget, d as signalTextureView, f as signalTiming, l as fragmentBindGroupLayout, o as drawChildToTexture, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL } from "./gpu-CHIgM_YH.mjs";
|
|
3
3
|
|
|
4
4
|
//#region ../../nodes/node-color-balance/dist/renderers-BaZtHi33.mjs
|
|
5
5
|
const deviceResourceCache = /* @__PURE__ */ new WeakMap();
|
|
@@ -307,4 +307,4 @@ var renderers_default = { WebGPURenderer: ColorBalanceWebGPURenderer };
|
|
|
307
307
|
|
|
308
308
|
//#endregion
|
|
309
309
|
export { renderers_default as n, ColorBalanceWebGPURenderer as t };
|
|
310
|
-
//# sourceMappingURL=renderer-
|
|
310
|
+
//# sourceMappingURL=renderer-qYhNf6iB.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-D6BXR7P4.mjs","names":[],"sources":["../../../nodes/node-color-balance/dist/renderers-BaZtHi33.mjs"],"sourcesContent":["import { resolveHandleParam } from \"@framefields/node-sdk\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, signalTextureView, signalTiming } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nconst WGSL_COLOR_BALANCE_SHADER = `\nstruct ColorBalanceUniforms {\n\tshadows : vec4<f32>,\n\tmidtones : vec4<f32>,\n\thighlights : vec4<f32>,\n\tpreserveLuminosity : f32,\n\thasShadowsCyanRedSig : f32,\n\thasShadowsMagentaGreenSig : f32,\n\thasShadowsYellowBlueSig : f32,\n\n\thasMidtonesCyanRedSig : f32,\n\thasMidtonesMagentaGreenSig : f32,\n\thasMidtonesYellowBlueSig : f32,\n\thasHighlightsCyanRedSig : f32,\n\n\thasHighlightsMagentaGreenSig : f32,\n\thasHighlightsYellowBlueSig : f32,\n\t_pad0 : f32,\n\t_pad1 : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : ColorBalanceUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n\n@group(2) @binding(0) var shadowsCyanRedSigTex : texture_2d<f32>;\n@group(2) @binding(1) var shadowsMagentaGreenSigTex : texture_2d<f32>;\n@group(2) @binding(2) var shadowsYellowBlueSigTex : texture_2d<f32>;\n@group(2) @binding(3) var midtonesCyanRedSigTex : texture_2d<f32>;\n@group(2) @binding(4) var midtonesMagentaGreenSigTex: texture_2d<f32>;\n@group(2) @binding(5) var midtonesYellowBlueSigTex : texture_2d<f32>;\n@group(2) @binding(6) var highlightsCyanRedSigTex : texture_2d<f32>;\n@group(2) @binding(7) var highlightsMagentaGreenSigTex: texture_2d<f32>;\n@group(2) @binding(8) var highlightsYellowBlueSigTex: texture_2d<f32>;\n@group(2) @binding(9) var signalSamp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn get_luminance(c: vec3<f32>) -> f32 {\n\treturn dot(c, vec3<f32>(0.2126, 0.7152, 0.0722));\n}\n\nfn set_luminance(c: vec3<f32>, l: f32) -> vec3<f32> {\n\tlet d = l - get_luminance(c);\n\tvar res = c + vec3<f32>(d);\n\tlet min_c = min(res.r, min(res.g, res.b));\n\tlet max_c = max(res.r, max(res.g, res.b));\n\tif (min_c < 0.0) {\n\t\tres = l + ((res - vec3<f32>(l)) * l) / max(l - min_c, 1e-5);\n\t}\n\tif (max_c > 1.0) {\n\t\tres = l + ((res - vec3<f32>(l)) * (1.0 - l)) / max(max_c - l, 1e-5);\n\t}\n\treturn clamp(res, vec3<f32>(0.0), vec3<f32>(1.0));\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet color = textureSampleLevel(tex, samp, in.uv, 0.0);\n\tif (color.a <= 0.00001) {\n\t\treturn color;\n\t}\n\n\tlet alpha = color.a;\n\tlet rgb = color.rgb / max(alpha, 0.0001);\n\n\tvar sShift = u.shadows.rgb;\n\tif (u.hasShadowsCyanRedSig > 0.5) {\n\t\tsShift.r = clamp(textureSampleLevel(shadowsCyanRedSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, -100.0, 100.0) / 100.0;\n\t}\n\tif (u.hasShadowsMagentaGreenSig > 0.5) {\n\t\tsShift.g = clamp(textureSampleLevel(shadowsMagentaGreenSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, -100.0, 100.0) / 100.0;\n\t}\n\tif (u.hasShadowsYellowBlueSig > 0.5) {\n\t\tsShift.b = clamp(textureSampleLevel(shadowsYellowBlueSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, -100.0, 100.0) / 100.0;\n\t}\n\n\tvar mShift = u.midtones.rgb;\n\tif (u.hasMidtonesCyanRedSig > 0.5) {\n\t\tmShift.r = clamp(textureSampleLevel(midtonesCyanRedSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, -100.0, 100.0) / 100.0;\n\t}\n\tif (u.hasMidtonesMagentaGreenSig > 0.5) {\n\t\tmShift.g = clamp(textureSampleLevel(midtonesMagentaGreenSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, -100.0, 100.0) / 100.0;\n\t}\n\tif (u.hasMidtonesYellowBlueSig > 0.5) {\n\t\tmShift.b = clamp(textureSampleLevel(midtonesYellowBlueSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, -100.0, 100.0) / 100.0;\n\t}\n\n\tvar hShift = u.highlights.rgb;\n\tif (u.hasHighlightsCyanRedSig > 0.5) {\n\t\thShift.r = clamp(textureSampleLevel(highlightsCyanRedSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, -100.0, 100.0) / 100.0;\n\t}\n\tif (u.hasHighlightsMagentaGreenSig > 0.5) {\n\t\thShift.g = clamp(textureSampleLevel(highlightsMagentaGreenSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, -100.0, 100.0) / 100.0;\n\t}\n\tif (u.hasHighlightsYellowBlueSig > 0.5) {\n\t\thShift.b = clamp(textureSampleLevel(highlightsYellowBlueSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, -100.0, 100.0) / 100.0;\n\t}\n\n\tlet origLum = get_luminance(rgb);\n\n\t// Tonal range weighting curves\n\tlet wShadows = clamp((1.0 - origLum) * (1.0 - origLum * 1.5), 0.0, 1.0);\n\tlet wMidtones = clamp(1.0 - 4.0 * (origLum - 0.5) * (origLum - 0.5), 0.0, 1.0);\n\tlet wHighlights = clamp(origLum * (origLum * 1.5 - 0.5), 0.0, 1.0);\n\n\tlet delta = wShadows * sShift + wMidtones * mShift + wHighlights * hShift;\n\tvar adjustedRgb = clamp(rgb + delta, vec3<f32>(0.0), vec3<f32>(1.0));\n\n\tif (u.preserveLuminosity > 0.5) {\n\t\tadjustedRgb = set_luminance(adjustedRgb, origLum);\n\t}\n\n\treturn vec4<f32>(adjustedRgb * alpha, alpha);\n}\n`;\nfunction getColorBalanceResources(device, format) {\n\tlet res = deviceResourceCache.get(device);\n\tif (res) return res;\n\tconst uniformLayout = fragmentBindGroupLayout(device, [\"uniform\"], \"ColorBalanceUniformLayout\");\n\tconst textureLayout = fragmentBindGroupLayout(device, [\"texture\", \"sampler\"], \"ColorBalanceTextureLayout\");\n\tconst signalTextureLayout = fragmentBindGroupLayout(device, [\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"sampler\"\n\t], \"ColorBalanceSignalTextureLayout\");\n\tres = {\n\t\tpipeline: createFullscreenPipeline(device, {\n\t\t\tlabel: \"ColorBalancePipeline\",\n\t\t\tmodule: device.createShaderModule({\n\t\t\t\tlabel: \"ColorBalanceShaderModule\",\n\t\t\t\tcode: WGSL_COLOR_BALANCE_SHADER\n\t\t\t}),\n\t\t\tlayouts: [\n\t\t\t\tuniformLayout,\n\t\t\t\ttextureLayout,\n\t\t\t\tsignalTextureLayout\n\t\t\t],\n\t\t\tformat\n\t\t}),\n\t\tuniformLayout,\n\t\ttextureLayout,\n\t\tsignalTextureLayout\n\t};\n\tdeviceResourceCache.set(device, res);\n\treturn res;\n}\nconst uniformBufferData = new Float32Array(24);\nconst ColorBalanceWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"ColorBalance\" || !props.virtualMedia?.children?.[0]) return;\n\tpass.end();\n\tconst frame = props.frame ?? 0;\n\tconst compositionFrame = props.compositionFrame ?? frame;\n\tconst fps = props.fps || 30;\n\tconst childMedia = props.virtualMedia.children[0];\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst nodeId = (props.virtualMedia?.metadata)?.id || (op.inputs ? Object.keys(op.inputs)[0] : null) || props.renderId || \"colorbalance_node\";\n\tconst resolveField = (handleId, fallbackVal, clampMin = -100, clampMax = 100) => resolveHandleParam(op.inputs, handleId, fallbackVal, clampMin, clampMax);\n\tconst resolveVal = (val) => {\n\t\tif (val !== void 0 && val !== null) {\n\t\t\tif (typeof val === \"object\" && val !== null) {\n\t\t\t\tif (\"get\" in val && typeof val.get === \"function\") val = val.get({\n\t\t\t\t\tframe: compositionFrame,\n\t\t\t\t\tfps\n\t\t\t\t});\n\t\t\t\telse if (\"value\" in val) val = val.value;\n\t\t\t} else if (typeof val === \"function\") val = val(compositionFrame, fps);\n\t\t}\n\t\tconst n = Number(val ?? 0);\n\t\treturn isNaN(n) ? 0 : n;\n\t};\n\tconst sCR = resolveField(op.shadows_cyanRedHandleId, resolveVal(op.shadows?.cyanRed));\n\tconst sMG = resolveField(op.shadows_magentaGreenHandleId, resolveVal(op.shadows?.magentaGreen));\n\tconst sYB = resolveField(op.shadows_yellowBlueHandleId, resolveVal(op.shadows?.yellowBlue));\n\tconst mCR = resolveField(op.midtones_cyanRedHandleId, resolveVal(op.midtones?.cyanRed));\n\tconst mMG = resolveField(op.midtones_magentaGreenHandleId, resolveVal(op.midtones?.magentaGreen));\n\tconst mYB = resolveField(op.midtones_yellowBlueHandleId, resolveVal(op.midtones?.yellowBlue));\n\tconst hCR = resolveField(op.highlights_cyanRedHandleId, resolveVal(op.highlights?.cyanRed));\n\tconst hMG = resolveField(op.highlights_magentaGreenHandleId, resolveVal(op.highlights?.magentaGreen));\n\tconst hYB = resolveField(op.highlights_yellowBlueHandleId, resolveVal(op.highlights?.yellowBlue));\n\tconst { texture: tmpTex } = await drawChildToTexture(args, childMedia);\n\tconst { pipeline, uniformLayout, textureLayout, signalTextureLayout } = getColorBalanceResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst { elapsedSeconds, durationSeconds } = signalTiming(props, frame, fps);\n\tconst signalContext = {\n\t\targs,\n\t\twidth,\n\t\theight,\n\t\tframe,\n\t\tfps,\n\t\telapsedSeconds,\n\t\tdurationSeconds\n\t};\n\tconst getSignalView = (res, suffix) => signalTextureView(signalContext, res, `${nodeId}_${suffix}`);\n\tconst sCRView = getSignalView(sCR, \"shadows_cyanRed_sig\");\n\tconst sMGView = getSignalView(sMG, \"shadows_magentaGreen_sig\");\n\tconst sYBView = getSignalView(sYB, \"shadows_yellowBlue_sig\");\n\tconst mCRView = getSignalView(mCR, \"midtones_cyanRed_sig\");\n\tconst mMGView = getSignalView(mMG, \"midtones_magentaGreen_sig\");\n\tconst mYBView = getSignalView(mYB, \"midtones_yellowBlue_sig\");\n\tconst hCRView = getSignalView(hCR, \"highlights_cyanRed_sig\");\n\tconst hMGView = getSignalView(hMG, \"highlights_magentaGreen_sig\");\n\tconst hYBView = getSignalView(hYB, \"highlights_yellowBlue_sig\");\n\tconst preserveLum = op.preserveLuminosity === false ? 0 : 1;\n\tuniformBufferData[0] = sCR.val / 100;\n\tuniformBufferData[1] = sMG.val / 100;\n\tuniformBufferData[2] = sYB.val / 100;\n\tuniformBufferData[3] = 0;\n\tuniformBufferData[4] = mCR.val / 100;\n\tuniformBufferData[5] = mMG.val / 100;\n\tuniformBufferData[6] = mYB.val / 100;\n\tuniformBufferData[7] = 0;\n\tuniformBufferData[8] = hCR.val / 100;\n\tuniformBufferData[9] = hMG.val / 100;\n\tuniformBufferData[10] = hYB.val / 100;\n\tuniformBufferData[11] = 0;\n\tuniformBufferData[12] = preserveLum;\n\tuniformBufferData[13] = sCR.hasStaticSig ? 1 : 0;\n\tuniformBufferData[14] = sMG.hasStaticSig ? 1 : 0;\n\tuniformBufferData[15] = sYB.hasStaticSig ? 1 : 0;\n\tuniformBufferData[16] = mCR.hasStaticSig ? 1 : 0;\n\tuniformBufferData[17] = mMG.hasStaticSig ? 1 : 0;\n\tuniformBufferData[18] = mYB.hasStaticSig ? 1 : 0;\n\tuniformBufferData[19] = hCR.hasStaticSig ? 1 : 0;\n\tuniformBufferData[20] = hMG.hasStaticSig ? 1 : 0;\n\tuniformBufferData[21] = hYB.hasStaticSig ? 1 : 0;\n\tuniformBufferData[22] = 0;\n\tuniformBufferData[23] = 0;\n\tconst buffer = ctx.renderer.getTemporaryBuffer(uniformBufferData);\n\tconst outTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst sigBindGroup = ctx.device.createBindGroup({\n\t\tlayout: signalTextureLayout,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: sCRView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: sMGView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: sYBView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tresource: mCRView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 4,\n\t\t\t\tresource: mMGView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 5,\n\t\t\t\tresource: mYBView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 6,\n\t\t\t\tresource: hCRView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 7,\n\t\t\t\tresource: hMGView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 8,\n\t\t\t\tresource: hYBView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 9,\n\t\t\t\tresource: sampler\n\t\t\t}\n\t\t]\n\t});\n\tdrawFullscreenPass(encoder, outTex.createView(), pipeline, [\n\t\tctx.device.createBindGroup({\n\t\t\tlayout: uniformLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer }\n\t\t\t}]\n\t\t}),\n\t\tctx.renderer.bindGroupCache.getBindGroup(ctx.device, textureLayout, tmpTex, sampler),\n\t\tsigBindGroup\n\t]);\n\tdrawTextureToTarget(args, outTex, props.opacity ?? 1);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = { WebGPURenderer: ColorBalanceWebGPURenderer };\n\n//#endregion\nexport { ColorBalanceWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-BaZtHi33.mjs.map"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"renderer-qYhNf6iB.mjs","names":[],"sources":["../../../nodes/node-color-balance/dist/renderers-BaZtHi33.mjs"],"sourcesContent":["import { resolveHandleParam } from \"@framefields/node-sdk\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, signalTextureView, signalTiming } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nconst WGSL_COLOR_BALANCE_SHADER = `\nstruct ColorBalanceUniforms {\n\tshadows : vec4<f32>,\n\tmidtones : vec4<f32>,\n\thighlights : vec4<f32>,\n\tpreserveLuminosity : f32,\n\thasShadowsCyanRedSig : f32,\n\thasShadowsMagentaGreenSig : f32,\n\thasShadowsYellowBlueSig : f32,\n\n\thasMidtonesCyanRedSig : f32,\n\thasMidtonesMagentaGreenSig : f32,\n\thasMidtonesYellowBlueSig : f32,\n\thasHighlightsCyanRedSig : f32,\n\n\thasHighlightsMagentaGreenSig : f32,\n\thasHighlightsYellowBlueSig : f32,\n\t_pad0 : f32,\n\t_pad1 : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : ColorBalanceUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n\n@group(2) @binding(0) var shadowsCyanRedSigTex : texture_2d<f32>;\n@group(2) @binding(1) var shadowsMagentaGreenSigTex : texture_2d<f32>;\n@group(2) @binding(2) var shadowsYellowBlueSigTex : texture_2d<f32>;\n@group(2) @binding(3) var midtonesCyanRedSigTex : texture_2d<f32>;\n@group(2) @binding(4) var midtonesMagentaGreenSigTex: texture_2d<f32>;\n@group(2) @binding(5) var midtonesYellowBlueSigTex : texture_2d<f32>;\n@group(2) @binding(6) var highlightsCyanRedSigTex : texture_2d<f32>;\n@group(2) @binding(7) var highlightsMagentaGreenSigTex: texture_2d<f32>;\n@group(2) @binding(8) var highlightsYellowBlueSigTex: texture_2d<f32>;\n@group(2) @binding(9) var signalSamp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn get_luminance(c: vec3<f32>) -> f32 {\n\treturn dot(c, vec3<f32>(0.2126, 0.7152, 0.0722));\n}\n\nfn set_luminance(c: vec3<f32>, l: f32) -> vec3<f32> {\n\tlet d = l - get_luminance(c);\n\tvar res = c + vec3<f32>(d);\n\tlet min_c = min(res.r, min(res.g, res.b));\n\tlet max_c = max(res.r, max(res.g, res.b));\n\tif (min_c < 0.0) {\n\t\tres = l + ((res - vec3<f32>(l)) * l) / max(l - min_c, 1e-5);\n\t}\n\tif (max_c > 1.0) {\n\t\tres = l + ((res - vec3<f32>(l)) * (1.0 - l)) / max(max_c - l, 1e-5);\n\t}\n\treturn clamp(res, vec3<f32>(0.0), vec3<f32>(1.0));\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet color = textureSampleLevel(tex, samp, in.uv, 0.0);\n\tif (color.a <= 0.00001) {\n\t\treturn color;\n\t}\n\n\tlet alpha = color.a;\n\tlet rgb = color.rgb / max(alpha, 0.0001);\n\n\tvar sShift = u.shadows.rgb;\n\tif (u.hasShadowsCyanRedSig > 0.5) {\n\t\tsShift.r = clamp(textureSampleLevel(shadowsCyanRedSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, -100.0, 100.0) / 100.0;\n\t}\n\tif (u.hasShadowsMagentaGreenSig > 0.5) {\n\t\tsShift.g = clamp(textureSampleLevel(shadowsMagentaGreenSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, -100.0, 100.0) / 100.0;\n\t}\n\tif (u.hasShadowsYellowBlueSig > 0.5) {\n\t\tsShift.b = clamp(textureSampleLevel(shadowsYellowBlueSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, -100.0, 100.0) / 100.0;\n\t}\n\n\tvar mShift = u.midtones.rgb;\n\tif (u.hasMidtonesCyanRedSig > 0.5) {\n\t\tmShift.r = clamp(textureSampleLevel(midtonesCyanRedSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, -100.0, 100.0) / 100.0;\n\t}\n\tif (u.hasMidtonesMagentaGreenSig > 0.5) {\n\t\tmShift.g = clamp(textureSampleLevel(midtonesMagentaGreenSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, -100.0, 100.0) / 100.0;\n\t}\n\tif (u.hasMidtonesYellowBlueSig > 0.5) {\n\t\tmShift.b = clamp(textureSampleLevel(midtonesYellowBlueSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, -100.0, 100.0) / 100.0;\n\t}\n\n\tvar hShift = u.highlights.rgb;\n\tif (u.hasHighlightsCyanRedSig > 0.5) {\n\t\thShift.r = clamp(textureSampleLevel(highlightsCyanRedSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, -100.0, 100.0) / 100.0;\n\t}\n\tif (u.hasHighlightsMagentaGreenSig > 0.5) {\n\t\thShift.g = clamp(textureSampleLevel(highlightsMagentaGreenSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, -100.0, 100.0) / 100.0;\n\t}\n\tif (u.hasHighlightsYellowBlueSig > 0.5) {\n\t\thShift.b = clamp(textureSampleLevel(highlightsYellowBlueSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, -100.0, 100.0) / 100.0;\n\t}\n\n\tlet origLum = get_luminance(rgb);\n\n\t// Tonal range weighting curves\n\tlet wShadows = clamp((1.0 - origLum) * (1.0 - origLum * 1.5), 0.0, 1.0);\n\tlet wMidtones = clamp(1.0 - 4.0 * (origLum - 0.5) * (origLum - 0.5), 0.0, 1.0);\n\tlet wHighlights = clamp(origLum * (origLum * 1.5 - 0.5), 0.0, 1.0);\n\n\tlet delta = wShadows * sShift + wMidtones * mShift + wHighlights * hShift;\n\tvar adjustedRgb = clamp(rgb + delta, vec3<f32>(0.0), vec3<f32>(1.0));\n\n\tif (u.preserveLuminosity > 0.5) {\n\t\tadjustedRgb = set_luminance(adjustedRgb, origLum);\n\t}\n\n\treturn vec4<f32>(adjustedRgb * alpha, alpha);\n}\n`;\nfunction getColorBalanceResources(device, format) {\n\tlet res = deviceResourceCache.get(device);\n\tif (res) return res;\n\tconst uniformLayout = fragmentBindGroupLayout(device, [\"uniform\"], \"ColorBalanceUniformLayout\");\n\tconst textureLayout = fragmentBindGroupLayout(device, [\"texture\", \"sampler\"], \"ColorBalanceTextureLayout\");\n\tconst signalTextureLayout = fragmentBindGroupLayout(device, [\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"sampler\"\n\t], \"ColorBalanceSignalTextureLayout\");\n\tres = {\n\t\tpipeline: createFullscreenPipeline(device, {\n\t\t\tlabel: \"ColorBalancePipeline\",\n\t\t\tmodule: device.createShaderModule({\n\t\t\t\tlabel: \"ColorBalanceShaderModule\",\n\t\t\t\tcode: WGSL_COLOR_BALANCE_SHADER\n\t\t\t}),\n\t\t\tlayouts: [\n\t\t\t\tuniformLayout,\n\t\t\t\ttextureLayout,\n\t\t\t\tsignalTextureLayout\n\t\t\t],\n\t\t\tformat\n\t\t}),\n\t\tuniformLayout,\n\t\ttextureLayout,\n\t\tsignalTextureLayout\n\t};\n\tdeviceResourceCache.set(device, res);\n\treturn res;\n}\nconst uniformBufferData = new Float32Array(24);\nconst ColorBalanceWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"ColorBalance\" || !props.virtualMedia?.children?.[0]) return;\n\tpass.end();\n\tconst frame = props.frame ?? 0;\n\tconst compositionFrame = props.compositionFrame ?? frame;\n\tconst fps = props.fps || 30;\n\tconst childMedia = props.virtualMedia.children[0];\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst nodeId = (props.virtualMedia?.metadata)?.id || (op.inputs ? Object.keys(op.inputs)[0] : null) || props.renderId || \"colorbalance_node\";\n\tconst resolveField = (handleId, fallbackVal, clampMin = -100, clampMax = 100) => resolveHandleParam(op.inputs, handleId, fallbackVal, clampMin, clampMax);\n\tconst resolveVal = (val) => {\n\t\tif (val !== void 0 && val !== null) {\n\t\t\tif (typeof val === \"object\" && val !== null) {\n\t\t\t\tif (\"get\" in val && typeof val.get === \"function\") val = val.get({\n\t\t\t\t\tframe: compositionFrame,\n\t\t\t\t\tfps\n\t\t\t\t});\n\t\t\t\telse if (\"value\" in val) val = val.value;\n\t\t\t} else if (typeof val === \"function\") val = val(compositionFrame, fps);\n\t\t}\n\t\tconst n = Number(val ?? 0);\n\t\treturn isNaN(n) ? 0 : n;\n\t};\n\tconst sCR = resolveField(op.shadows_cyanRedHandleId, resolveVal(op.shadows?.cyanRed));\n\tconst sMG = resolveField(op.shadows_magentaGreenHandleId, resolveVal(op.shadows?.magentaGreen));\n\tconst sYB = resolveField(op.shadows_yellowBlueHandleId, resolveVal(op.shadows?.yellowBlue));\n\tconst mCR = resolveField(op.midtones_cyanRedHandleId, resolveVal(op.midtones?.cyanRed));\n\tconst mMG = resolveField(op.midtones_magentaGreenHandleId, resolveVal(op.midtones?.magentaGreen));\n\tconst mYB = resolveField(op.midtones_yellowBlueHandleId, resolveVal(op.midtones?.yellowBlue));\n\tconst hCR = resolveField(op.highlights_cyanRedHandleId, resolveVal(op.highlights?.cyanRed));\n\tconst hMG = resolveField(op.highlights_magentaGreenHandleId, resolveVal(op.highlights?.magentaGreen));\n\tconst hYB = resolveField(op.highlights_yellowBlueHandleId, resolveVal(op.highlights?.yellowBlue));\n\tconst { texture: tmpTex } = await drawChildToTexture(args, childMedia);\n\tconst { pipeline, uniformLayout, textureLayout, signalTextureLayout } = getColorBalanceResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst { elapsedSeconds, durationSeconds } = signalTiming(props, frame, fps);\n\tconst signalContext = {\n\t\targs,\n\t\twidth,\n\t\theight,\n\t\tframe,\n\t\tfps,\n\t\telapsedSeconds,\n\t\tdurationSeconds\n\t};\n\tconst getSignalView = (res, suffix) => signalTextureView(signalContext, res, `${nodeId}_${suffix}`);\n\tconst sCRView = getSignalView(sCR, \"shadows_cyanRed_sig\");\n\tconst sMGView = getSignalView(sMG, \"shadows_magentaGreen_sig\");\n\tconst sYBView = getSignalView(sYB, \"shadows_yellowBlue_sig\");\n\tconst mCRView = getSignalView(mCR, \"midtones_cyanRed_sig\");\n\tconst mMGView = getSignalView(mMG, \"midtones_magentaGreen_sig\");\n\tconst mYBView = getSignalView(mYB, \"midtones_yellowBlue_sig\");\n\tconst hCRView = getSignalView(hCR, \"highlights_cyanRed_sig\");\n\tconst hMGView = getSignalView(hMG, \"highlights_magentaGreen_sig\");\n\tconst hYBView = getSignalView(hYB, \"highlights_yellowBlue_sig\");\n\tconst preserveLum = op.preserveLuminosity === false ? 0 : 1;\n\tuniformBufferData[0] = sCR.val / 100;\n\tuniformBufferData[1] = sMG.val / 100;\n\tuniformBufferData[2] = sYB.val / 100;\n\tuniformBufferData[3] = 0;\n\tuniformBufferData[4] = mCR.val / 100;\n\tuniformBufferData[5] = mMG.val / 100;\n\tuniformBufferData[6] = mYB.val / 100;\n\tuniformBufferData[7] = 0;\n\tuniformBufferData[8] = hCR.val / 100;\n\tuniformBufferData[9] = hMG.val / 100;\n\tuniformBufferData[10] = hYB.val / 100;\n\tuniformBufferData[11] = 0;\n\tuniformBufferData[12] = preserveLum;\n\tuniformBufferData[13] = sCR.hasStaticSig ? 1 : 0;\n\tuniformBufferData[14] = sMG.hasStaticSig ? 1 : 0;\n\tuniformBufferData[15] = sYB.hasStaticSig ? 1 : 0;\n\tuniformBufferData[16] = mCR.hasStaticSig ? 1 : 0;\n\tuniformBufferData[17] = mMG.hasStaticSig ? 1 : 0;\n\tuniformBufferData[18] = mYB.hasStaticSig ? 1 : 0;\n\tuniformBufferData[19] = hCR.hasStaticSig ? 1 : 0;\n\tuniformBufferData[20] = hMG.hasStaticSig ? 1 : 0;\n\tuniformBufferData[21] = hYB.hasStaticSig ? 1 : 0;\n\tuniformBufferData[22] = 0;\n\tuniformBufferData[23] = 0;\n\tconst buffer = ctx.renderer.getTemporaryBuffer(uniformBufferData);\n\tconst outTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst sigBindGroup = ctx.device.createBindGroup({\n\t\tlayout: signalTextureLayout,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: sCRView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: sMGView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: sYBView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tresource: mCRView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 4,\n\t\t\t\tresource: mMGView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 5,\n\t\t\t\tresource: mYBView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 6,\n\t\t\t\tresource: hCRView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 7,\n\t\t\t\tresource: hMGView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 8,\n\t\t\t\tresource: hYBView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 9,\n\t\t\t\tresource: sampler\n\t\t\t}\n\t\t]\n\t});\n\tdrawFullscreenPass(encoder, outTex.createView(), pipeline, [\n\t\tctx.device.createBindGroup({\n\t\t\tlayout: uniformLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer }\n\t\t\t}]\n\t\t}),\n\t\tctx.renderer.bindGroupCache.getBindGroup(ctx.device, textureLayout, tmpTex, sampler),\n\t\tsigBindGroup\n\t]);\n\tdrawTextureToTarget(args, outTex, props.opacity ?? 1);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = { WebGPURenderer: ColorBalanceWebGPURenderer };\n\n//#endregion\nexport { ColorBalanceWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-BaZtHi33.mjs.map"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { n as defineRenderer } from "./renderer-BSitV56h.mjs";
|
|
2
|
-
import { Nn as signalRegistry } from "./dist-
|
|
3
|
-
import { a as createFullscreenPipeline, c as drawTextureToTarget, f as signalTiming, l as fragmentBindGroupLayout, o as drawChildToTexture, p as texturesLayout, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL, u as perDevice } from "./gpu-
|
|
2
|
+
import { Nn as signalRegistry } from "./dist-hmWTJPik.mjs";
|
|
3
|
+
import { a as createFullscreenPipeline, c as drawTextureToTarget, f as signalTiming, l as fragmentBindGroupLayout, o as drawChildToTexture, p as texturesLayout, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL, u as perDevice } from "./gpu-CHIgM_YH.mjs";
|
|
4
4
|
|
|
5
5
|
//#region ../../nodes/node-modulate/dist/renderers-B9q42xr2.mjs
|
|
6
6
|
function resolveVal(val, fallback, frame, fps) {
|
|
@@ -370,4 +370,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: ModulateWebGPURenderer
|
|
|
370
370
|
|
|
371
371
|
//#endregion
|
|
372
372
|
export { renderers_default as t };
|
|
373
|
-
//# sourceMappingURL=renderer-
|
|
373
|
+
//# sourceMappingURL=renderer-y6k54AM6.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-CeiCJCg4.mjs","names":[],"sources":["../../../nodes/node-modulate/dist/renderers-B9q42xr2.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice, signalTiming, texturesLayout } from \"@framefields/node-sdk/gpu\";\nimport { signalRegistry } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/webgpu-renderer.ts\nfunction resolveVal(val, fallback, frame, fps) {\n\tif (val === void 0 || val === null) return fallback;\n\tif (typeof val === \"object\" && val !== null) {\n\t\tif (\"get\" in val && typeof val.get === \"function\") try {\n\t\t\tconst res = val.get({\n\t\t\t\tframe,\n\t\t\t\tfps,\n\t\t\t\ttime: fps > 0 ? frame / fps : 0,\n\t\t\t\tduration: 0,\n\t\t\t\tdurationMs: 0,\n\t\t\t\tprogress: 0,\n\t\t\t\tdeltaTime: fps > 0 ? 1 / fps : 0\n\t\t\t});\n\t\t\tconst n$1 = Number(res);\n\t\t\tif (Number.isFinite(n$1)) return n$1;\n\t\t} catch {}\n\t\tif (\"value\" in val) {\n\t\t\tconst n$1 = Number(val.value);\n\t\t\tif (Number.isFinite(n$1)) return n$1;\n\t\t}\n\t} else if (typeof val === \"function\") try {\n\t\tconst res = val(frame, fps);\n\t\tconst n$1 = Number(res);\n\t\tif (Number.isFinite(n$1)) return n$1;\n\t} catch {}\n\tconst n = Number(val);\n\treturn Number.isFinite(n) ? n : fallback;\n}\nfunction resolveModulateField(op, fieldName, defaultValue, minVal, maxVal, frame = 0, fps = 30) {\n\tconst handleId = op[`${fieldName}HandleId`];\n\tconst signalInput = handleId ? op.inputs?.[handleId] : null;\n\tconst hasSignal = !!(signalInput?.connectionValid && signalInput.outputItem?.type === \"Signal\");\n\tconst sd = hasSignal ? signalInput?.outputItem?.data : null;\n\tlet value = defaultValue;\n\tif (!hasSignal) if (signalInput?.connectionValid && signalInput.outputItem?.type === \"Number\") value = Number(signalInput.outputItem.data ?? defaultValue);\n\telse value = resolveVal(op[fieldName] ?? op.signals?.[fieldName], defaultValue, frame, fps);\n\telse if (sd && typeof sd === \"object\" && \"offset\" in sd) value = Number(sd.offset ?? defaultValue);\n\tvalue = Math.max(minVal, Math.min(maxVal, value));\n\treturn {\n\t\thasSignal,\n\t\tsd,\n\t\tvalue\n\t};\n}\nconst STATIC_MODULATE_SHADER = `\nstruct ModulateUniforms {\n\thue : f32,\n\tbrightness : f32,\n\tcontrast : f32,\n\texposure : f32,\n\tsaturation : f32,\n\tsepia : f32,\n\n\thasSignal_hue : f32,\n\thasSignal_brightness : f32,\n\thasSignal_contrast : f32,\n\thasSignal_exposure : f32,\n\thasSignal_saturation : f32,\n\thasSignal_sepia : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : ModulateUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n\n@group(2) @binding(0) var hueTex : texture_2d<f32>;\n@group(2) @binding(1) var brightnessTex : texture_2d<f32>;\n@group(2) @binding(2) var contrastTex : texture_2d<f32>;\n@group(2) @binding(3) var exposureTex : texture_2d<f32>;\n@group(2) @binding(4) var saturationTex : texture_2d<f32>;\n@group(2) @binding(5) var sepiaTex : texture_2d<f32>;\n@group(2) @binding(6) var sigSamp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn apply_exposure(c: vec4<f32>, exposure: f32) -> vec4<f32> {\n\tlet scale = pow(2.0, exposure);\n\tvar unpremult = c;\n\tif (unpremult.a > 0.0) { unpremult = vec4<f32>(unpremult.rgb / unpremult.a, unpremult.a); }\n\tlet r = scale * unpremult.r;\n\tlet g = scale * unpremult.g;\n\tlet b = scale * unpremult.b;\n\tlet outAlpha = clamp(unpremult.a, 0.0, 1.0);\n\tlet outRgb = clamp(vec3<f32>(r, g, b), vec3<f32>(0.0), vec3<f32>(1.0)) * outAlpha;\n\treturn vec4<f32>(outRgb, outAlpha);\n}\n\nfn apply_hue(c: vec4<f32>, degrees: f32) -> vec4<f32> {\n\tlet rad = (degrees * 3.1415926535) / 180.0;\n\tlet cosVal = cos(rad);\n\tlet sinVal = sin(rad);\n\n\tlet row0 = vec4<f32>(0.213 + cosVal * 0.787 - sinVal * 0.213, 0.715 - cosVal * 0.715 - sinVal * 0.715, 0.072 - cosVal * 0.072 + sinVal * 0.928, 0.0);\n\tlet row1 = vec4<f32>(0.213 - cosVal * 0.213 + sinVal * 0.143, 0.715 + cosVal * 0.285 + sinVal * 0.14, 0.072 - cosVal * 0.072 - sinVal * 0.283, 0.0);\n\tlet row2 = vec4<f32>(0.213 - cosVal * 0.213 - sinVal * 0.787, 0.715 - cosVal * 0.715 + sinVal * 0.715, 0.072 + cosVal * 0.928 + sinVal * 0.072, 0.0);\n\t\n\tvar unpremult = c;\n\tif (unpremult.a > 0.0) { unpremult = vec4<f32>(unpremult.rgb / unpremult.a, unpremult.a); }\n\tlet r = dot(row0, unpremult);\n\tlet g = dot(row1, unpremult);\n\tlet b = dot(row2, unpremult);\n\tlet outAlpha = clamp(unpremult.a, 0.0, 1.0);\n\tlet outRgb = clamp(vec3<f32>(r, g, b), vec3<f32>(0.0), vec3<f32>(1.0)) * outAlpha;\n\treturn vec4<f32>(outRgb, outAlpha);\n}\n\nfn apply_saturation(c: vec4<f32>, sat: f32) -> vec4<f32> {\n\tlet row0 = vec4<f32>(0.213 + sat * 0.787, 0.715 * (1.0 - sat), 0.072 * (1.0 - sat), 0.0);\n\tlet row1 = vec4<f32>(0.213 * (1.0 - sat), 0.715 + sat * 0.285, 0.072 * (1.0 - sat), 0.0);\n\tlet row2 = vec4<f32>(0.213 * (1.0 - sat), 0.715 * (1.0 - sat), 0.072 + sat * 0.928, 0.0);\n\n\tvar unpremult = c;\n\tif (unpremult.a > 0.0) { unpremult = vec4<f32>(unpremult.rgb / unpremult.a, unpremult.a); }\n\tlet r = dot(row0, unpremult);\n\tlet g = dot(row1, unpremult);\n\tlet b = dot(row2, unpremult);\n\tlet outAlpha = clamp(unpremult.a, 0.0, 1.0);\n\tlet outRgb = clamp(vec3<f32>(r, g, b), vec3<f32>(0.0), vec3<f32>(1.0)) * outAlpha;\n\treturn vec4<f32>(outRgb, outAlpha);\n}\n\nfn apply_contrast(c: vec4<f32>, contrast: f32) -> vec4<f32> {\n\tlet offset = 0.5 * (1.0 - contrast);\n\t\n\tvar unpremult = c;\n\tif (unpremult.a > 0.0) { unpremult = vec4<f32>(unpremult.rgb / unpremult.a, unpremult.a); }\n\tlet r = contrast * unpremult.r + offset;\n\tlet g = contrast * unpremult.g + offset;\n\tlet b = contrast * unpremult.b + offset;\n\tlet outAlpha = clamp(unpremult.a, 0.0, 1.0);\n\tlet outRgb = clamp(vec3<f32>(r, g, b), vec3<f32>(0.0), vec3<f32>(1.0)) * outAlpha;\n\treturn vec4<f32>(outRgb, outAlpha);\n}\n\nfn apply_brightness(c: vec4<f32>, bright: f32) -> vec4<f32> {\n\tvar unpremult = c;\n\tif (unpremult.a > 0.0) { unpremult = vec4<f32>(unpremult.rgb / unpremult.a, unpremult.a); }\n\tlet r = bright * unpremult.r;\n\tlet g = bright * unpremult.g;\n\tlet b = bright * unpremult.b;\n\tlet outAlpha = clamp(unpremult.a, 0.0, 1.0);\n\tlet outRgb = clamp(vec3<f32>(r, g, b), vec3<f32>(0.0), vec3<f32>(1.0)) * outAlpha;\n\treturn vec4<f32>(outRgb, outAlpha);\n}\n\nfn apply_sepia(c: vec4<f32>, s: f32) -> vec4<f32> {\n\tlet row0 = vec4<f32>(1.0 - 0.607 * s, 0.769 * s, 0.189 * s, 0.0);\n\tlet row1 = vec4<f32>(0.349 * s, 1.0 - 0.314 * s, 0.168 * s, 0.0);\n\tlet row2 = vec4<f32>(0.272 * s, 0.534 * s, 1.0 - 0.869 * s, 0.0);\n\n\tvar unpremult = c;\n\tif (unpremult.a > 0.0) { unpremult = vec4<f32>(unpremult.rgb / unpremult.a, unpremult.a); }\n\tlet r = dot(row0, unpremult);\n\tlet g = dot(row1, unpremult);\n\tlet b = dot(row2, unpremult);\n\tlet outAlpha = clamp(unpremult.a, 0.0, 1.0);\n\tlet outRgb = clamp(vec3<f32>(r, g, b), vec3<f32>(0.0), vec3<f32>(1.0)) * outAlpha;\n\treturn vec4<f32>(outRgb, outAlpha);\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet original = textureSample(tex, samp, in.uv);\n\tvar color = original;\n\n\t// 1. Exposure\n\tvar exposure = u.exposure;\n\tif (u.hasSignal_exposure > 0.5) {\n\t\texposure = textureSampleLevel(exposureTex, sigSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tcolor = apply_exposure(color, exposure);\n\n\t// 2. Hue\n\tvar hue = u.hue;\n\tif (u.hasSignal_hue > 0.5) {\n\t\thue = textureSampleLevel(hueTex, sigSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tcolor = apply_hue(color, hue);\n\n\t// 3. Saturation\n\tvar saturation = u.saturation;\n\tif (u.hasSignal_saturation > 0.5) {\n\t\tsaturation = textureSampleLevel(saturationTex, sigSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tcolor = apply_saturation(color, saturation);\n\n\t// 4. Contrast\n\tvar contrast = u.contrast;\n\tif (u.hasSignal_contrast > 0.5) {\n\t\tcontrast = textureSampleLevel(contrastTex, sigSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tcolor = apply_contrast(color, contrast);\n\n\t// 5. Brightness\n\tvar brightness = u.brightness;\n\tif (u.hasSignal_brightness > 0.5) {\n\t\tbrightness = textureSampleLevel(brightnessTex, sigSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tcolor = apply_brightness(color, brightness);\n\n\t// 6. Sepia\n\tvar sepia = u.sepia;\n\tif (u.hasSignal_sepia > 0.5) {\n\t\tsepia = textureSampleLevel(sepiaTex, sigSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tcolor = apply_sepia(color, sepia);\n\n\treturn color;\n}\n`;\nconst modulateData = new Float32Array(12);\nconst getDeviceLayouts = perDevice((device) => ({\n\tmodulateUniformLayout: fragmentBindGroupLayout(device, [\"uniform\"]),\n\tsingleTextureLayout: fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]),\n\tmodulateSignalsLayout: texturesLayout(device, 6),\n\tpipelineCache: /* @__PURE__ */ new Map()\n}));\nfunction getModulateResources(device, format) {\n\tconst layouts = getDeviceLayouts(device);\n\tconst cacheKey = `modulate_${format}`;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst modulateModule = device.createShaderModule({\n\t\t\tlabel: `modulate_static_${format}.wgsl`,\n\t\t\tcode: STATIC_MODULATE_SHADER\n\t\t});\n\t\tpipeline = createFullscreenPipeline(device, {\n\t\t\tlabel: `ModulatePipeline_static_${format}`,\n\t\t\tmodule: modulateModule,\n\t\t\tlayouts: [\n\t\t\t\tlayouts.modulateUniformLayout,\n\t\t\t\tlayouts.singleTextureLayout,\n\t\t\t\tlayouts.modulateSignalsLayout\n\t\t\t],\n\t\t\tformat\n\t\t});\n\t\tlayouts.pipelineCache.set(cacheKey, pipeline);\n\t}\n\treturn {\n\t\tmodulatePipeline: pipeline,\n\t\tmodulateUniformLayout: layouts.modulateUniformLayout,\n\t\tsingleTextureLayout: layouts.singleTextureLayout,\n\t\tmodulateSignalsLayout: layouts.modulateSignalsLayout\n\t};\n}\nconst ModulateWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst frame = props.frame ?? 0;\n\tconst compositionFrame = props.compositionFrame ?? frame;\n\tconst fps = props.fps || 30;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"Modulate\" || !op) return;\n\tconst childMedia = props.virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tpass.end();\n\tconst hueInfo = resolveModulateField(op, \"hue\", 0, 0, 360, compositionFrame, fps);\n\tconst brightnessInfo = resolveModulateField(op, \"brightness\", 1, 0, 2, compositionFrame, fps);\n\tconst contrastInfo = resolveModulateField(op, \"contrast\", 1, 0, 2, compositionFrame, fps);\n\tconst exposureInfo = resolveModulateField(op, \"exposure\", 0, -2, 2, compositionFrame, fps);\n\tconst saturationInfo = resolveModulateField(op, \"saturation\", 1, 0, 2, compositionFrame, fps);\n\tconst sepiaInfo = resolveModulateField(op, \"sepia\", 0, 0, 1, compositionFrame, fps);\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst { texture: tmpTex } = await drawChildToTexture(args, childMedia);\n\tconst { modulatePipeline: pipeline, modulateUniformLayout: uLayout, singleTextureLayout: tLayout, modulateSignalsLayout: sigLayout } = getModulateResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst outTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tmodulateData[0] = hueInfo.value;\n\tmodulateData[1] = brightnessInfo.value;\n\tmodulateData[2] = contrastInfo.value;\n\tmodulateData[3] = exposureInfo.value;\n\tmodulateData[4] = saturationInfo.value;\n\tmodulateData[5] = sepiaInfo.value;\n\tconst fields = [\n\t\t{\n\t\t\tname: \"hue\",\n\t\t\tinfo: hueInfo,\n\t\t\tidx: 6\n\t\t},\n\t\t{\n\t\t\tname: \"brightness\",\n\t\t\tinfo: brightnessInfo,\n\t\t\tidx: 7\n\t\t},\n\t\t{\n\t\t\tname: \"contrast\",\n\t\t\tinfo: contrastInfo,\n\t\t\tidx: 8\n\t\t},\n\t\t{\n\t\t\tname: \"exposure\",\n\t\t\tinfo: exposureInfo,\n\t\t\tidx: 9\n\t\t},\n\t\t{\n\t\t\tname: \"saturation\",\n\t\t\tinfo: saturationInfo,\n\t\t\tidx: 10\n\t\t},\n\t\t{\n\t\t\tname: \"sepia\",\n\t\t\tinfo: sepiaInfo,\n\t\t\tidx: 11\n\t\t}\n\t];\n\tconst signalViews = [];\n\tconst { elapsedSeconds, durationSeconds } = signalTiming(props, frame, fps);\n\tfor (const f of fields) {\n\t\tconst isGenerator = !!(f.info.hasSignal && f.info.sd);\n\t\tmodulateData[f.idx] = isGenerator ? 1 : 0;\n\t\tif (isGenerator) {\n\t\t\tconst view = signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, f.info.sd.nodeId ?? `modulate_${f.name}_sig`, elapsedSeconds, durationSeconds, f.info.sd, width, height, props.renderId, frame, fps);\n\t\t\tsignalViews.push(view);\n\t\t} else signalViews.push(signalRegistry.getDummy1x1TextureView(ctx.device));\n\t}\n\tconst buffer = ctx.renderer.getTemporaryBuffer(modulateData);\n\tdrawFullscreenPass(encoder, outTex.createView(), pipeline, [\n\t\tctx.device.createBindGroup({\n\t\t\tlayout: uLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer }\n\t\t\t}]\n\t\t}),\n\t\tctx.renderer.bindGroupCache.getBindGroup(ctx.device, tLayout, tmpTex, sampler),\n\t\tctx.device.createBindGroup({\n\t\t\tlayout: sigLayout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: signalViews[0]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: signalViews[1]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: signalViews[2]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: signalViews[3]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 4,\n\t\t\t\t\tresource: signalViews[4]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 5,\n\t\t\t\t\tresource: signalViews[5]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 6,\n\t\t\t\t\tresource: sampler\n\t\t\t\t}\n\t\t\t]\n\t\t})\n\t]);\n\tdrawTextureToTarget(args, outTex, op.opacity ?? 1);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: ModulateWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-B9q42xr2.mjs.map"],"mappings":";;;;;AAKA,SAAS,WAAW,KAAK,UAAU,OAAO,KAAK;AAC9C,KAAI,QAAQ,KAAK,KAAK,QAAQ,KAAM,QAAO;AAC3C,KAAI,OAAO,QAAQ,YAAY,QAAQ,MAAM;AAC5C,MAAI,SAAS,OAAO,OAAO,IAAI,QAAQ,WAAY,KAAI;GACtD,MAAM,MAAM,IAAI,IAAI;IACnB;IACA;IACA,MAAM,MAAM,IAAI,QAAQ,MAAM;IAC9B,UAAU;IACV,YAAY;IACZ,UAAU;IACV,WAAW,MAAM,IAAI,IAAI,MAAM;IAC/B,CAAC;GACF,MAAM,MAAM,OAAO,IAAI;AACvB,OAAI,OAAO,SAAS,IAAI,CAAE,QAAO;UAC1B;AACR,MAAI,WAAW,KAAK;GACnB,MAAM,MAAM,OAAO,IAAI,MAAM;AAC7B,OAAI,OAAO,SAAS,IAAI,CAAE,QAAO;;YAExB,OAAO,QAAQ,WAAY,KAAI;EACzC,MAAM,MAAM,IAAI,OAAO,IAAI;EAC3B,MAAM,MAAM,OAAO,IAAI;AACvB,MAAI,OAAO,SAAS,IAAI,CAAE,QAAO;SAC1B;CACR,MAAM,IAAI,OAAO,IAAI;AACrB,QAAO,OAAO,SAAS,EAAE,GAAG,IAAI;;AAEjC,SAAS,qBAAqB,IAAI,WAAW,cAAc,QAAQ,QAAQ,QAAQ,GAAG,MAAM,IAAI;CAC/F,MAAM,WAAW,GAAG,GAAG,UAAU;CACjC,MAAM,cAAc,WAAW,GAAG,SAAS,YAAY;CACvD,MAAM,YAAY,CAAC,EAAE,aAAa,mBAAmB,YAAY,YAAY,SAAS;CACtF,MAAM,KAAK,YAAY,aAAa,YAAY,OAAO;CACvD,IAAI,QAAQ;AACZ,KAAI,CAAC,UAAW,KAAI,aAAa,mBAAmB,YAAY,YAAY,SAAS,SAAU,SAAQ,OAAO,YAAY,WAAW,QAAQ,aAAa;KACrJ,SAAQ,WAAW,GAAG,cAAc,GAAG,UAAU,YAAY,cAAc,OAAO,IAAI;UAClF,MAAM,OAAO,OAAO,YAAY,YAAY,GAAI,SAAQ,OAAO,GAAG,UAAU,aAAa;AAClG,SAAQ,KAAK,IAAI,QAAQ,KAAK,IAAI,QAAQ,MAAM,CAAC;AACjD,QAAO;EACN;EACA;EACA;EACA;;AAEF,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4B7B,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwIvB,MAAM,eAAe,IAAI,aAAa,GAAG;AACzC,MAAM,mBAAmB,WAAW,YAAY;CAC/C,uBAAuB,wBAAwB,QAAQ,CAAC,UAAU,CAAC;CACnE,qBAAqB,wBAAwB,QAAQ,CAAC,WAAW,UAAU,CAAC;CAC5E,uBAAuB,eAAe,QAAQ,EAAE;CAChD,+BAA+B,IAAI,KAAK;CACxC,EAAE;AACH,SAAS,qBAAqB,QAAQ,QAAQ;CAC7C,MAAM,UAAU,iBAAiB,OAAO;CACxC,MAAM,WAAW,YAAY;CAC7B,IAAI,WAAW,QAAQ,cAAc,IAAI,SAAS;AAClD,KAAI,CAAC,UAAU;EACd,MAAM,iBAAiB,OAAO,mBAAmB;GAChD,OAAO,mBAAmB,OAAO;GACjC,MAAM;GACN,CAAC;AACF,aAAW,yBAAyB,QAAQ;GAC3C,OAAO,2BAA2B;GAClC,QAAQ;GACR,SAAS;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR;GACD;GACA,CAAC;AACF,UAAQ,cAAc,IAAI,UAAU,SAAS;;AAE9C,QAAO;EACN,kBAAkB;EAClB,uBAAuB,QAAQ;EAC/B,qBAAqB,QAAQ;EAC7B,uBAAuB,QAAQ;EAC/B;;AAEF,MAAM,yBAAyB,OAAO,SAAS;CAC9C,MAAM,EAAE,KAAK,SAAS,MAAM,eAAe,aAAa,cAAc,UAAU;CAChF,MAAM,QAAQ,MAAM,SAAS;CAC7B,MAAM,mBAAmB,MAAM,oBAAoB;CACnD,MAAM,MAAM,MAAM,OAAO;CACzB,MAAM,KAAK,MAAM,cAAc;AAC/B,KAAI,IAAI,OAAO,cAAc,CAAC,GAAI;CAClC,MAAM,aAAa,MAAM,aAAa,WAAW;AACjD,KAAI,CAAC,WAAY;AACjB,MAAK,KAAK;CACV,MAAM,UAAU,qBAAqB,IAAI,OAAO,GAAG,GAAG,KAAK,kBAAkB,IAAI;CACjF,MAAM,iBAAiB,qBAAqB,IAAI,cAAc,GAAG,GAAG,GAAG,kBAAkB,IAAI;CAC7F,MAAM,eAAe,qBAAqB,IAAI,YAAY,GAAG,GAAG,GAAG,kBAAkB,IAAI;CACzF,MAAM,eAAe,qBAAqB,IAAI,YAAY,GAAG,IAAI,GAAG,kBAAkB,IAAI;CAC1F,MAAM,iBAAiB,qBAAqB,IAAI,cAAc,GAAG,GAAG,GAAG,kBAAkB,IAAI;CAC7F,MAAM,YAAY,qBAAqB,IAAI,SAAS,GAAG,GAAG,GAAG,kBAAkB,IAAI;CACnF,MAAM,QAAQ;CACd,MAAM,SAAS;CACf,MAAM,EAAE,SAAS,WAAW,MAAM,mBAAmB,MAAM,WAAW;CACtE,MAAM,EAAE,kBAAkB,UAAU,uBAAuB,SAAS,qBAAqB,SAAS,uBAAuB,cAAc,qBAAqB,IAAI,QAAQ,IAAI,SAAS,OAAO;CAC5L,MAAM,UAAU,IAAI,SAAS,aAAa,WAAW,IAAI,OAAO;CAChE,MAAM,SAAS,IAAI,SAAS,oBAAoB,OAAO,QAAQ;EAC9D;EACA;EACA,GAAG,MAAM,mBAAmB,EAAE;EAC9B,CAAC;AACF,cAAa,KAAK,QAAQ;AAC1B,cAAa,KAAK,eAAe;AACjC,cAAa,KAAK,aAAa;AAC/B,cAAa,KAAK,aAAa;AAC/B,cAAa,KAAK,eAAe;AACjC,cAAa,KAAK,UAAU;CAC5B,MAAM,SAAS;EACd;GACC,MAAM;GACN,MAAM;GACN,KAAK;GACL;EACD;GACC,MAAM;GACN,MAAM;GACN,KAAK;GACL;EACD;GACC,MAAM;GACN,MAAM;GACN,KAAK;GACL;EACD;GACC,MAAM;GACN,MAAM;GACN,KAAK;GACL;EACD;GACC,MAAM;GACN,MAAM;GACN,KAAK;GACL;EACD;GACC,MAAM;GACN,MAAM;GACN,KAAK;GACL;EACD;CACD,MAAM,cAAc,EAAE;CACtB,MAAM,EAAE,gBAAgB,oBAAoB,aAAa,OAAO,OAAO,IAAI;AAC3E,MAAK,MAAM,KAAK,QAAQ;EACvB,MAAM,cAAc,CAAC,EAAE,EAAE,KAAK,aAAa,EAAE,KAAK;AAClD,eAAa,EAAE,OAAO,cAAc,IAAI;AACxC,MAAI,aAAa;GAChB,MAAM,OAAO,eAAe,yBAAyB,IAAI,QAAQ,SAAS,EAAE,KAAK,GAAG,UAAU,YAAY,EAAE,KAAK,OAAO,gBAAgB,iBAAiB,EAAE,KAAK,IAAI,OAAO,QAAQ,MAAM,UAAU,OAAO,IAAI;AAC9M,eAAY,KAAK,KAAK;QAChB,aAAY,KAAK,eAAe,uBAAuB,IAAI,OAAO,CAAC;;CAE3E,MAAM,SAAS,IAAI,SAAS,mBAAmB,aAAa;AAC5D,oBAAmB,SAAS,OAAO,YAAY,EAAE,UAAU;EAC1D,IAAI,OAAO,gBAAgB;GAC1B,QAAQ;GACR,SAAS,CAAC;IACT,SAAS;IACT,UAAU,EAAE,QAAQ;IACpB,CAAC;GACF,CAAC;EACF,IAAI,SAAS,eAAe,aAAa,IAAI,QAAQ,SAAS,QAAQ,QAAQ;EAC9E,IAAI,OAAO,gBAAgB;GAC1B,QAAQ;GACR,SAAS;IACR;KACC,SAAS;KACT,UAAU,YAAY;KACtB;IACD;KACC,SAAS;KACT,UAAU,YAAY;KACtB;IACD;KACC,SAAS;KACT,UAAU,YAAY;KACtB;IACD;KACC,SAAS;KACT,UAAU,YAAY;KACtB;IACD;KACC,SAAS;KACT,UAAU,YAAY;KACtB;IACD;KACC,SAAS;KACT,UAAU,YAAY;KACtB;IACD;KACC,SAAS;KACT,UAAU;KACV;IACD;GACD,CAAC;EACF,CAAC;AACF,qBAAoB,MAAM,QAAQ,GAAG,WAAW,EAAE;;AAKnD,IAAI,oBAAoB,eAAe,EAAE,gBAAgB,wBAAwB,CAAC"}
|
|
1
|
+
{"version":3,"file":"renderer-y6k54AM6.mjs","names":[],"sources":["../../../nodes/node-modulate/dist/renderers-B9q42xr2.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice, signalTiming, texturesLayout } from \"@framefields/node-sdk/gpu\";\nimport { signalRegistry } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/webgpu-renderer.ts\nfunction resolveVal(val, fallback, frame, fps) {\n\tif (val === void 0 || val === null) return fallback;\n\tif (typeof val === \"object\" && val !== null) {\n\t\tif (\"get\" in val && typeof val.get === \"function\") try {\n\t\t\tconst res = val.get({\n\t\t\t\tframe,\n\t\t\t\tfps,\n\t\t\t\ttime: fps > 0 ? frame / fps : 0,\n\t\t\t\tduration: 0,\n\t\t\t\tdurationMs: 0,\n\t\t\t\tprogress: 0,\n\t\t\t\tdeltaTime: fps > 0 ? 1 / fps : 0\n\t\t\t});\n\t\t\tconst n$1 = Number(res);\n\t\t\tif (Number.isFinite(n$1)) return n$1;\n\t\t} catch {}\n\t\tif (\"value\" in val) {\n\t\t\tconst n$1 = Number(val.value);\n\t\t\tif (Number.isFinite(n$1)) return n$1;\n\t\t}\n\t} else if (typeof val === \"function\") try {\n\t\tconst res = val(frame, fps);\n\t\tconst n$1 = Number(res);\n\t\tif (Number.isFinite(n$1)) return n$1;\n\t} catch {}\n\tconst n = Number(val);\n\treturn Number.isFinite(n) ? n : fallback;\n}\nfunction resolveModulateField(op, fieldName, defaultValue, minVal, maxVal, frame = 0, fps = 30) {\n\tconst handleId = op[`${fieldName}HandleId`];\n\tconst signalInput = handleId ? op.inputs?.[handleId] : null;\n\tconst hasSignal = !!(signalInput?.connectionValid && signalInput.outputItem?.type === \"Signal\");\n\tconst sd = hasSignal ? signalInput?.outputItem?.data : null;\n\tlet value = defaultValue;\n\tif (!hasSignal) if (signalInput?.connectionValid && signalInput.outputItem?.type === \"Number\") value = Number(signalInput.outputItem.data ?? defaultValue);\n\telse value = resolveVal(op[fieldName] ?? op.signals?.[fieldName], defaultValue, frame, fps);\n\telse if (sd && typeof sd === \"object\" && \"offset\" in sd) value = Number(sd.offset ?? defaultValue);\n\tvalue = Math.max(minVal, Math.min(maxVal, value));\n\treturn {\n\t\thasSignal,\n\t\tsd,\n\t\tvalue\n\t};\n}\nconst STATIC_MODULATE_SHADER = `\nstruct ModulateUniforms {\n\thue : f32,\n\tbrightness : f32,\n\tcontrast : f32,\n\texposure : f32,\n\tsaturation : f32,\n\tsepia : f32,\n\n\thasSignal_hue : f32,\n\thasSignal_brightness : f32,\n\thasSignal_contrast : f32,\n\thasSignal_exposure : f32,\n\thasSignal_saturation : f32,\n\thasSignal_sepia : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : ModulateUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n\n@group(2) @binding(0) var hueTex : texture_2d<f32>;\n@group(2) @binding(1) var brightnessTex : texture_2d<f32>;\n@group(2) @binding(2) var contrastTex : texture_2d<f32>;\n@group(2) @binding(3) var exposureTex : texture_2d<f32>;\n@group(2) @binding(4) var saturationTex : texture_2d<f32>;\n@group(2) @binding(5) var sepiaTex : texture_2d<f32>;\n@group(2) @binding(6) var sigSamp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn apply_exposure(c: vec4<f32>, exposure: f32) -> vec4<f32> {\n\tlet scale = pow(2.0, exposure);\n\tvar unpremult = c;\n\tif (unpremult.a > 0.0) { unpremult = vec4<f32>(unpremult.rgb / unpremult.a, unpremult.a); }\n\tlet r = scale * unpremult.r;\n\tlet g = scale * unpremult.g;\n\tlet b = scale * unpremult.b;\n\tlet outAlpha = clamp(unpremult.a, 0.0, 1.0);\n\tlet outRgb = clamp(vec3<f32>(r, g, b), vec3<f32>(0.0), vec3<f32>(1.0)) * outAlpha;\n\treturn vec4<f32>(outRgb, outAlpha);\n}\n\nfn apply_hue(c: vec4<f32>, degrees: f32) -> vec4<f32> {\n\tlet rad = (degrees * 3.1415926535) / 180.0;\n\tlet cosVal = cos(rad);\n\tlet sinVal = sin(rad);\n\n\tlet row0 = vec4<f32>(0.213 + cosVal * 0.787 - sinVal * 0.213, 0.715 - cosVal * 0.715 - sinVal * 0.715, 0.072 - cosVal * 0.072 + sinVal * 0.928, 0.0);\n\tlet row1 = vec4<f32>(0.213 - cosVal * 0.213 + sinVal * 0.143, 0.715 + cosVal * 0.285 + sinVal * 0.14, 0.072 - cosVal * 0.072 - sinVal * 0.283, 0.0);\n\tlet row2 = vec4<f32>(0.213 - cosVal * 0.213 - sinVal * 0.787, 0.715 - cosVal * 0.715 + sinVal * 0.715, 0.072 + cosVal * 0.928 + sinVal * 0.072, 0.0);\n\t\n\tvar unpremult = c;\n\tif (unpremult.a > 0.0) { unpremult = vec4<f32>(unpremult.rgb / unpremult.a, unpremult.a); }\n\tlet r = dot(row0, unpremult);\n\tlet g = dot(row1, unpremult);\n\tlet b = dot(row2, unpremult);\n\tlet outAlpha = clamp(unpremult.a, 0.0, 1.0);\n\tlet outRgb = clamp(vec3<f32>(r, g, b), vec3<f32>(0.0), vec3<f32>(1.0)) * outAlpha;\n\treturn vec4<f32>(outRgb, outAlpha);\n}\n\nfn apply_saturation(c: vec4<f32>, sat: f32) -> vec4<f32> {\n\tlet row0 = vec4<f32>(0.213 + sat * 0.787, 0.715 * (1.0 - sat), 0.072 * (1.0 - sat), 0.0);\n\tlet row1 = vec4<f32>(0.213 * (1.0 - sat), 0.715 + sat * 0.285, 0.072 * (1.0 - sat), 0.0);\n\tlet row2 = vec4<f32>(0.213 * (1.0 - sat), 0.715 * (1.0 - sat), 0.072 + sat * 0.928, 0.0);\n\n\tvar unpremult = c;\n\tif (unpremult.a > 0.0) { unpremult = vec4<f32>(unpremult.rgb / unpremult.a, unpremult.a); }\n\tlet r = dot(row0, unpremult);\n\tlet g = dot(row1, unpremult);\n\tlet b = dot(row2, unpremult);\n\tlet outAlpha = clamp(unpremult.a, 0.0, 1.0);\n\tlet outRgb = clamp(vec3<f32>(r, g, b), vec3<f32>(0.0), vec3<f32>(1.0)) * outAlpha;\n\treturn vec4<f32>(outRgb, outAlpha);\n}\n\nfn apply_contrast(c: vec4<f32>, contrast: f32) -> vec4<f32> {\n\tlet offset = 0.5 * (1.0 - contrast);\n\t\n\tvar unpremult = c;\n\tif (unpremult.a > 0.0) { unpremult = vec4<f32>(unpremult.rgb / unpremult.a, unpremult.a); }\n\tlet r = contrast * unpremult.r + offset;\n\tlet g = contrast * unpremult.g + offset;\n\tlet b = contrast * unpremult.b + offset;\n\tlet outAlpha = clamp(unpremult.a, 0.0, 1.0);\n\tlet outRgb = clamp(vec3<f32>(r, g, b), vec3<f32>(0.0), vec3<f32>(1.0)) * outAlpha;\n\treturn vec4<f32>(outRgb, outAlpha);\n}\n\nfn apply_brightness(c: vec4<f32>, bright: f32) -> vec4<f32> {\n\tvar unpremult = c;\n\tif (unpremult.a > 0.0) { unpremult = vec4<f32>(unpremult.rgb / unpremult.a, unpremult.a); }\n\tlet r = bright * unpremult.r;\n\tlet g = bright * unpremult.g;\n\tlet b = bright * unpremult.b;\n\tlet outAlpha = clamp(unpremult.a, 0.0, 1.0);\n\tlet outRgb = clamp(vec3<f32>(r, g, b), vec3<f32>(0.0), vec3<f32>(1.0)) * outAlpha;\n\treturn vec4<f32>(outRgb, outAlpha);\n}\n\nfn apply_sepia(c: vec4<f32>, s: f32) -> vec4<f32> {\n\tlet row0 = vec4<f32>(1.0 - 0.607 * s, 0.769 * s, 0.189 * s, 0.0);\n\tlet row1 = vec4<f32>(0.349 * s, 1.0 - 0.314 * s, 0.168 * s, 0.0);\n\tlet row2 = vec4<f32>(0.272 * s, 0.534 * s, 1.0 - 0.869 * s, 0.0);\n\n\tvar unpremult = c;\n\tif (unpremult.a > 0.0) { unpremult = vec4<f32>(unpremult.rgb / unpremult.a, unpremult.a); }\n\tlet r = dot(row0, unpremult);\n\tlet g = dot(row1, unpremult);\n\tlet b = dot(row2, unpremult);\n\tlet outAlpha = clamp(unpremult.a, 0.0, 1.0);\n\tlet outRgb = clamp(vec3<f32>(r, g, b), vec3<f32>(0.0), vec3<f32>(1.0)) * outAlpha;\n\treturn vec4<f32>(outRgb, outAlpha);\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet original = textureSample(tex, samp, in.uv);\n\tvar color = original;\n\n\t// 1. Exposure\n\tvar exposure = u.exposure;\n\tif (u.hasSignal_exposure > 0.5) {\n\t\texposure = textureSampleLevel(exposureTex, sigSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tcolor = apply_exposure(color, exposure);\n\n\t// 2. Hue\n\tvar hue = u.hue;\n\tif (u.hasSignal_hue > 0.5) {\n\t\thue = textureSampleLevel(hueTex, sigSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tcolor = apply_hue(color, hue);\n\n\t// 3. Saturation\n\tvar saturation = u.saturation;\n\tif (u.hasSignal_saturation > 0.5) {\n\t\tsaturation = textureSampleLevel(saturationTex, sigSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tcolor = apply_saturation(color, saturation);\n\n\t// 4. Contrast\n\tvar contrast = u.contrast;\n\tif (u.hasSignal_contrast > 0.5) {\n\t\tcontrast = textureSampleLevel(contrastTex, sigSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tcolor = apply_contrast(color, contrast);\n\n\t// 5. Brightness\n\tvar brightness = u.brightness;\n\tif (u.hasSignal_brightness > 0.5) {\n\t\tbrightness = textureSampleLevel(brightnessTex, sigSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tcolor = apply_brightness(color, brightness);\n\n\t// 6. Sepia\n\tvar sepia = u.sepia;\n\tif (u.hasSignal_sepia > 0.5) {\n\t\tsepia = textureSampleLevel(sepiaTex, sigSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tcolor = apply_sepia(color, sepia);\n\n\treturn color;\n}\n`;\nconst modulateData = new Float32Array(12);\nconst getDeviceLayouts = perDevice((device) => ({\n\tmodulateUniformLayout: fragmentBindGroupLayout(device, [\"uniform\"]),\n\tsingleTextureLayout: fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]),\n\tmodulateSignalsLayout: texturesLayout(device, 6),\n\tpipelineCache: /* @__PURE__ */ new Map()\n}));\nfunction getModulateResources(device, format) {\n\tconst layouts = getDeviceLayouts(device);\n\tconst cacheKey = `modulate_${format}`;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst modulateModule = device.createShaderModule({\n\t\t\tlabel: `modulate_static_${format}.wgsl`,\n\t\t\tcode: STATIC_MODULATE_SHADER\n\t\t});\n\t\tpipeline = createFullscreenPipeline(device, {\n\t\t\tlabel: `ModulatePipeline_static_${format}`,\n\t\t\tmodule: modulateModule,\n\t\t\tlayouts: [\n\t\t\t\tlayouts.modulateUniformLayout,\n\t\t\t\tlayouts.singleTextureLayout,\n\t\t\t\tlayouts.modulateSignalsLayout\n\t\t\t],\n\t\t\tformat\n\t\t});\n\t\tlayouts.pipelineCache.set(cacheKey, pipeline);\n\t}\n\treturn {\n\t\tmodulatePipeline: pipeline,\n\t\tmodulateUniformLayout: layouts.modulateUniformLayout,\n\t\tsingleTextureLayout: layouts.singleTextureLayout,\n\t\tmodulateSignalsLayout: layouts.modulateSignalsLayout\n\t};\n}\nconst ModulateWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst frame = props.frame ?? 0;\n\tconst compositionFrame = props.compositionFrame ?? frame;\n\tconst fps = props.fps || 30;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"Modulate\" || !op) return;\n\tconst childMedia = props.virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tpass.end();\n\tconst hueInfo = resolveModulateField(op, \"hue\", 0, 0, 360, compositionFrame, fps);\n\tconst brightnessInfo = resolveModulateField(op, \"brightness\", 1, 0, 2, compositionFrame, fps);\n\tconst contrastInfo = resolveModulateField(op, \"contrast\", 1, 0, 2, compositionFrame, fps);\n\tconst exposureInfo = resolveModulateField(op, \"exposure\", 0, -2, 2, compositionFrame, fps);\n\tconst saturationInfo = resolveModulateField(op, \"saturation\", 1, 0, 2, compositionFrame, fps);\n\tconst sepiaInfo = resolveModulateField(op, \"sepia\", 0, 0, 1, compositionFrame, fps);\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst { texture: tmpTex } = await drawChildToTexture(args, childMedia);\n\tconst { modulatePipeline: pipeline, modulateUniformLayout: uLayout, singleTextureLayout: tLayout, modulateSignalsLayout: sigLayout } = getModulateResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst outTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tmodulateData[0] = hueInfo.value;\n\tmodulateData[1] = brightnessInfo.value;\n\tmodulateData[2] = contrastInfo.value;\n\tmodulateData[3] = exposureInfo.value;\n\tmodulateData[4] = saturationInfo.value;\n\tmodulateData[5] = sepiaInfo.value;\n\tconst fields = [\n\t\t{\n\t\t\tname: \"hue\",\n\t\t\tinfo: hueInfo,\n\t\t\tidx: 6\n\t\t},\n\t\t{\n\t\t\tname: \"brightness\",\n\t\t\tinfo: brightnessInfo,\n\t\t\tidx: 7\n\t\t},\n\t\t{\n\t\t\tname: \"contrast\",\n\t\t\tinfo: contrastInfo,\n\t\t\tidx: 8\n\t\t},\n\t\t{\n\t\t\tname: \"exposure\",\n\t\t\tinfo: exposureInfo,\n\t\t\tidx: 9\n\t\t},\n\t\t{\n\t\t\tname: \"saturation\",\n\t\t\tinfo: saturationInfo,\n\t\t\tidx: 10\n\t\t},\n\t\t{\n\t\t\tname: \"sepia\",\n\t\t\tinfo: sepiaInfo,\n\t\t\tidx: 11\n\t\t}\n\t];\n\tconst signalViews = [];\n\tconst { elapsedSeconds, durationSeconds } = signalTiming(props, frame, fps);\n\tfor (const f of fields) {\n\t\tconst isGenerator = !!(f.info.hasSignal && f.info.sd);\n\t\tmodulateData[f.idx] = isGenerator ? 1 : 0;\n\t\tif (isGenerator) {\n\t\t\tconst view = signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, f.info.sd.nodeId ?? `modulate_${f.name}_sig`, elapsedSeconds, durationSeconds, f.info.sd, width, height, props.renderId, frame, fps);\n\t\t\tsignalViews.push(view);\n\t\t} else signalViews.push(signalRegistry.getDummy1x1TextureView(ctx.device));\n\t}\n\tconst buffer = ctx.renderer.getTemporaryBuffer(modulateData);\n\tdrawFullscreenPass(encoder, outTex.createView(), pipeline, [\n\t\tctx.device.createBindGroup({\n\t\t\tlayout: uLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer }\n\t\t\t}]\n\t\t}),\n\t\tctx.renderer.bindGroupCache.getBindGroup(ctx.device, tLayout, tmpTex, sampler),\n\t\tctx.device.createBindGroup({\n\t\t\tlayout: sigLayout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: signalViews[0]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: signalViews[1]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: signalViews[2]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: signalViews[3]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 4,\n\t\t\t\t\tresource: signalViews[4]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 5,\n\t\t\t\t\tresource: signalViews[5]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 6,\n\t\t\t\t\tresource: sampler\n\t\t\t\t}\n\t\t\t]\n\t\t})\n\t]);\n\tdrawTextureToTarget(args, outTex, op.opacity ?? 1);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: ModulateWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-B9q42xr2.mjs.map"],"mappings":"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"}
|