framefields 2.8.1 → 2.9.2
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/README.md +30 -1
- package/dist/audio/index.mjs +10 -10
- package/dist/{audio-vatRe308.mjs → audio-BfQg37MW.mjs} +3 -3
- package/dist/{audio-vatRe308.mjs.map → audio-BfQg37MW.mjs.map} +1 -1
- package/dist/cli/check-worker.mjs +44 -44
- package/dist/components/index.d.mts +2 -2
- package/dist/components/index.mjs +43 -43
- package/dist/{dist-CFe1fC9l.mjs → dist-C1cCW7Bt.mjs} +8 -1
- package/dist/{dist-CFe1fC9l.mjs.map → dist-C1cCW7Bt.mjs.map} +1 -1
- package/dist/{dist-BbwtlSZO.mjs → dist-C8Xq3zgx.mjs} +2 -2
- package/dist/{dist-BbwtlSZO.mjs.map → dist-C8Xq3zgx.mjs.map} +1 -1
- package/dist/effects/index.d.mts +1 -1
- package/dist/effects/index.mjs +35 -35
- package/dist/{effects-CCyfjbhZ.mjs → effects-CemgqEPv.mjs} +2 -2
- package/dist/{effects-CCyfjbhZ.mjs.map → effects-CemgqEPv.mjs.map} +1 -1
- package/dist/fonts/index.mjs +2 -2
- package/dist/{fonts-C1mgtkCa.mjs → fonts-BW0pPcvJ.mjs} +2 -2
- package/dist/{fonts-C1mgtkCa.mjs.map → fonts-BW0pPcvJ.mjs.map} +1 -1
- package/dist/{gpu-CU2tEKJJ.mjs → gpu-CMaa63nz.mjs} +2 -2
- package/dist/{gpu-CU2tEKJJ.mjs.map → gpu-CMaa63nz.mjs.map} +1 -1
- package/dist/{index-BwRrsP_V.d.mts → index-Bnh42ouE.d.mts} +71 -10
- package/dist/index-Bnh42ouE.d.mts.map +1 -0
- package/dist/index-CFoAmh7q.d.mts.map +1 -1
- package/dist/{index-UDDAfHAF.d.mts → index-CQ-bbZk3.d.mts} +64 -13
- package/dist/index-CQ-bbZk3.d.mts.map +1 -0
- package/dist/index-D5UDyVMb.d.mts.map +1 -1
- package/dist/index.d.mts +3 -3
- package/dist/index.mjs +50 -50
- package/dist/preview/index.mjs +10 -10
- package/dist/{preview-WXbsf6Dv.mjs → preview-DvP8AZuV.mjs} +2 -2
- package/dist/{preview-WXbsf6Dv.mjs.map → preview-DvP8AZuV.mjs.map} +1 -1
- package/dist/preview-engine/audio.mjs +1 -1
- package/dist/preview-engine/{chunk-JGDZQCNU.mjs → chunk-2B722GXM.mjs} +1 -1
- package/dist/preview-engine/{chunk-GFW3D464.mjs → chunk-2DWY7UBV.mjs} +1 -1
- package/dist/preview-engine/{chunk-72DYOIMP.mjs → chunk-2PYTDN2C.mjs} +1 -1
- package/dist/preview-engine/{chunk-PF3SXQNV.mjs → chunk-34DL53D5.mjs} +1 -1
- package/dist/preview-engine/{chunk-GLXJOXBE.mjs → chunk-34RJ7GAS.mjs} +1 -1
- package/dist/preview-engine/{chunk-6OY4YLTC.mjs → chunk-35HMRW4I.mjs} +1 -1
- package/dist/preview-engine/{chunk-W26U6BP2.mjs → chunk-4WYM72ZN.mjs} +1 -1
- package/dist/preview-engine/{chunk-EQ4VBUWM.mjs → chunk-5AWAOMBR.mjs} +1 -1
- package/dist/preview-engine/{chunk-J4SHMCTG.mjs → chunk-6R3UJBL5.mjs} +1 -1
- package/dist/preview-engine/{chunk-VHGC72XP.mjs → chunk-73CNXGAK.mjs} +1 -1
- package/dist/preview-engine/{chunk-KYOPOCO5.mjs → chunk-AHQCDTD6.mjs} +1 -1
- package/dist/preview-engine/{chunk-ADV2TIKA.mjs → chunk-BEYA25UZ.mjs} +1 -1
- package/dist/preview-engine/{chunk-RBDIRBEI.mjs → chunk-BJV2LBII.mjs} +1 -1
- package/dist/preview-engine/{chunk-LBJBBEKP.mjs → chunk-BVDWS3D2.mjs} +1 -1
- package/dist/preview-engine/chunk-BXPM5SJ3.mjs +1 -0
- package/dist/preview-engine/{chunk-NIPWL6Z5.mjs → chunk-C4M3B2Q2.mjs} +1 -1
- package/dist/preview-engine/{chunk-LLUFOFF4.mjs → chunk-CC4NNNIY.mjs} +1 -1
- package/dist/preview-engine/{chunk-NX66555S.mjs → chunk-CN2VLYLB.mjs} +1 -1
- package/dist/preview-engine/chunk-D73ZKPFN.mjs +138 -0
- package/dist/preview-engine/{chunk-SK7PUBTC.mjs → chunk-DMSZXG56.mjs} +1 -1
- package/dist/preview-engine/{chunk-WC257OBY.mjs → chunk-DVZITDQS.mjs} +1 -1
- package/dist/preview-engine/{chunk-LLB3AGBQ.mjs → chunk-EJJITH6U.mjs} +1 -1
- package/dist/preview-engine/{chunk-COZG35ZR.mjs → chunk-FTCEG3SF.mjs} +1 -1
- package/dist/preview-engine/{chunk-57LES7TL.mjs → chunk-GA4HNR44.mjs} +1 -1
- package/dist/preview-engine/{chunk-S4WNCEMO.mjs → chunk-GIICZZQI.mjs} +1 -1
- package/dist/preview-engine/{chunk-RTHU7REC.mjs → chunk-GRJJVSOV.mjs} +1 -1
- package/dist/preview-engine/{chunk-RGDM6PQ5.mjs → chunk-GZWA5QJS.mjs} +1 -1
- package/dist/preview-engine/{chunk-LZNNM5OB.mjs → chunk-H7BSN7V7.mjs} +1 -1
- package/dist/preview-engine/{chunk-JXUENEQO.mjs → chunk-HOV6DDBZ.mjs} +1 -1
- package/dist/preview-engine/{chunk-C6XLAJLL.mjs → chunk-JSYG6OWZ.mjs} +1 -1
- package/dist/preview-engine/{chunk-GZVPVOHB.mjs → chunk-K3C6GUQD.mjs} +1 -1
- package/dist/preview-engine/chunk-KOVN277Z.mjs +1 -0
- package/dist/preview-engine/chunk-KXLXP66K.mjs +1974 -0
- package/dist/preview-engine/{chunk-Y6TWMUJC.mjs → chunk-LVYVXVZO.mjs} +1 -1
- package/dist/preview-engine/{chunk-NKAVHU7H.mjs → chunk-MIEH74UH.mjs} +7 -7
- package/dist/preview-engine/{chunk-AVDHZNIZ.mjs → chunk-OH5W5EL6.mjs} +1 -1
- package/dist/preview-engine/{chunk-22F33PPP.mjs → chunk-P5FKRQFU.mjs} +1 -1
- package/dist/preview-engine/{chunk-7X2AUKTU.mjs → chunk-PM2W4VLT.mjs} +1 -1
- package/dist/preview-engine/{chunk-PYX6Q2EJ.mjs → chunk-QCSVT73T.mjs} +1 -1
- package/dist/preview-engine/{chunk-523CTDOC.mjs → chunk-RJIAES3X.mjs} +1 -1
- package/dist/preview-engine/{chunk-DPQN7WYQ.mjs → chunk-S2ABWY5G.mjs} +1 -1
- package/dist/preview-engine/{chunk-G7JJ6HVL.mjs → chunk-SF37HXAH.mjs} +1 -1
- package/dist/preview-engine/{chunk-OKLYIQ5F.mjs → chunk-SPJPM43P.mjs} +1 -1
- package/dist/preview-engine/{chunk-UOTMBWBJ.mjs → chunk-TNJEZKXM.mjs} +1 -1
- package/dist/preview-engine/chunk-ULOFDFHJ.mjs +1 -0
- package/dist/preview-engine/{chunk-DISKQ5MH.mjs → chunk-UXYM2G6J.mjs} +1 -1
- package/dist/preview-engine/{chunk-U5YNECNG.mjs → chunk-VN36PRVD.mjs} +1 -1
- package/dist/preview-engine/{chunk-PMOKPVSD.mjs → chunk-VVE2QHVG.mjs} +1 -1
- package/dist/preview-engine/chunk-XYGDTPO7.mjs +39 -0
- package/dist/preview-engine/{chunk-PEUQRSIM.mjs → chunk-Y5K5LVOR.mjs} +1 -1
- package/dist/preview-engine/chunk-YGKO4NIU.mjs +1 -0
- package/dist/preview-engine/{chunk-PSEMCJBH.mjs → chunk-ZJ5SWTCW.mjs} +1 -1
- package/dist/preview-engine/chunk-ZY47XIRK.mjs +5 -0
- package/dist/preview-engine/components.mjs +1 -1
- package/dist/preview-engine/effects.mjs +1 -1
- package/dist/preview-engine/framefields.mjs +1 -1
- package/dist/preview-engine/player.mjs +1 -1
- package/dist/preview-engine/renderers-3BOQOUEU.mjs +1 -0
- package/dist/preview-engine/renderers-3M2FESR2.mjs +1 -0
- package/dist/preview-engine/{renderers-FEEIDQF3.mjs → renderers-4F7WLQD5.mjs} +1 -1
- package/dist/preview-engine/{renderers-OP6MKYRM.mjs → renderers-5KANN7XF.mjs} +1 -1
- package/dist/preview-engine/{renderers-TVRR7PGN.mjs → renderers-5TO2SXFR.mjs} +1 -1
- package/dist/preview-engine/{renderers-DR7UZ3QR.mjs → renderers-5UZ3YFBD.mjs} +1 -1
- package/dist/preview-engine/renderers-6LHIWKMZ.mjs +1 -0
- package/dist/preview-engine/{renderers-7F2KF5RE.mjs → renderers-6Z7DWAPH.mjs} +1 -1
- package/dist/preview-engine/renderers-77PDUMYI.mjs +1 -0
- package/dist/preview-engine/{renderers-3J3NCOAI.mjs → renderers-7C5RA3R5.mjs} +1 -1
- package/dist/preview-engine/{renderers-KPCQGBIY.mjs → renderers-7XHO6M3B.mjs} +1 -1
- package/dist/preview-engine/{renderers-KJAOPYAU.mjs → renderers-A24KZK2Q.mjs} +1 -1
- package/dist/preview-engine/renderers-A43VCJ7X.mjs +1 -0
- package/dist/preview-engine/renderers-AKY464RY.mjs +1 -0
- package/dist/preview-engine/renderers-C5UO6PL5.mjs +1 -0
- package/dist/preview-engine/renderers-C64QSZO4.mjs +1 -0
- package/dist/preview-engine/renderers-CIRCR6NG.mjs +1 -0
- package/dist/preview-engine/renderers-CIWOPETY.mjs +1 -0
- package/dist/preview-engine/renderers-CUMVIVHI.mjs +1 -0
- package/dist/preview-engine/renderers-CZEZCELP.mjs +1 -0
- package/dist/preview-engine/{renderers-R3YVLWKV.mjs → renderers-ENMY4DKF.mjs} +1 -1
- package/dist/preview-engine/{renderers-AAENCA7X.mjs → renderers-FSI5KNGZ.mjs} +1 -1
- package/dist/preview-engine/renderers-FSQMWHQM.mjs +1 -0
- package/dist/preview-engine/renderers-FZEW5C23.mjs +1 -0
- package/dist/preview-engine/renderers-HCET2IML.mjs +1 -0
- package/dist/preview-engine/{renderers-LBX7GPDU.mjs → renderers-IHGAWLUF.mjs} +1 -1
- package/dist/preview-engine/renderers-IUOOC6K7.mjs +1 -0
- package/dist/preview-engine/{renderers-VXMR47WZ.mjs → renderers-KC6ZSKCW.mjs} +1 -1
- package/dist/preview-engine/renderers-KYYJLVIJ.mjs +1 -0
- package/dist/preview-engine/renderers-L4GE7WV3.mjs +1 -0
- package/dist/preview-engine/renderers-L6YDX6GS.mjs +1 -0
- package/dist/preview-engine/renderers-LRAFWKCO.mjs +1 -0
- package/dist/preview-engine/renderers-LU3XZWEB.mjs +1 -0
- package/dist/preview-engine/{renderers-4YYGKLDK.mjs → renderers-MD3PRFZL.mjs} +1 -1
- package/dist/preview-engine/renderers-MDHPQY6D.mjs +1 -0
- package/dist/preview-engine/renderers-MOEC2XZZ.mjs +1 -0
- package/dist/preview-engine/{renderers-RGDTRVZM.mjs → renderers-NCGH2WWJ.mjs} +1 -1
- package/dist/preview-engine/renderers-ND2WV4K3.mjs +1 -0
- package/dist/preview-engine/renderers-NJ5CWVVH.mjs +1 -0
- package/dist/preview-engine/renderers-NKXYPR3V.mjs +1 -0
- package/dist/preview-engine/{renderers-WVQQZQ6Y.mjs → renderers-NUAI4TO5.mjs} +1 -1
- package/dist/preview-engine/renderers-NWR66CGK.mjs +1 -0
- package/dist/preview-engine/renderers-O22WTBRM.mjs +1 -0
- package/dist/preview-engine/renderers-PBBA7LQB.mjs +1 -0
- package/dist/preview-engine/{renderers-BL7Z3FTF.mjs → renderers-PIIEUKFE.mjs} +1 -1
- package/dist/preview-engine/renderers-PPZK6VEW.mjs +1 -0
- package/dist/preview-engine/renderers-Q6LJRZ7R.mjs +1 -0
- package/dist/preview-engine/{renderers-7TNEKJZS.mjs → renderers-QA2HKUJJ.mjs} +1 -1
- package/dist/preview-engine/renderers-RMEACSRL.mjs +1 -0
- package/dist/preview-engine/{renderers-AWRIELVX.mjs → renderers-RN2MHIFK.mjs} +1 -1
- package/dist/preview-engine/renderers-SEIAUKJF.mjs +1 -0
- package/dist/preview-engine/renderers-SP42LCSI.mjs +1 -0
- package/dist/preview-engine/{renderers-OE55O27K.mjs → renderers-T74CQCEN.mjs} +1 -1
- package/dist/preview-engine/renderers-T7SZA3BX.mjs +1 -0
- package/dist/preview-engine/{renderers-ZUQ2ZBYY.mjs → renderers-TGJSOKDY.mjs} +1 -1
- package/dist/preview-engine/renderers-TSBV4KPE.mjs +1 -0
- package/dist/preview-engine/{renderers-2SE5BLLB.mjs → renderers-U4M7ZCV4.mjs} +1 -1
- package/dist/preview-engine/{renderers-YEI4K4W4.mjs → renderers-V3AQO7AR.mjs} +1 -1
- package/dist/preview-engine/renderers-VADTDAHD.mjs +1 -0
- package/dist/preview-engine/renderers-VNNWI5C3.mjs +1 -0
- package/dist/preview-engine/{renderers-YYMRKHAA.mjs → renderers-WEYAHOBK.mjs} +1 -1
- package/dist/preview-engine/renderers-WZ75MLP3.mjs +1 -0
- package/dist/preview-engine/renderers-XB5R4UQA.mjs +1 -0
- package/dist/preview-engine/{renderers-YIVPMPQS.mjs → renderers-Y22VSOXF.mjs} +1 -1
- package/dist/preview-engine/{renderers-Y53D5CQ7.mjs → renderers-YBIUZDGQ.mjs} +1 -1
- package/dist/preview-engine/renderers-YESJR4O7.mjs +1 -0
- package/dist/preview-engine/renderers-YKSRZRRT.mjs +1 -0
- package/dist/preview-engine/{renderers-V4VML5IG.mjs → renderers-ZACSHGNZ.mjs} +1 -1
- package/dist/preview-engine/signals.mjs +1 -1
- package/dist/preview-engine/src-4IUYUKIZ.mjs +8 -0
- package/dist/{program-Cq4gP9Dd.mjs → program-CKpKkllV.mjs} +2 -2
- package/dist/{program-Cq4gP9Dd.mjs.map → program-CKpKkllV.mjs.map} +1 -1
- package/dist/renderer/index.mjs +2 -2
- package/dist/renderer--Ac-dg4A.mjs +5 -0
- package/dist/renderer--N7TMqzU.mjs +5 -0
- package/dist/{renderer-CXWAdRqn.mjs → renderer--fkmiVjl.mjs} +2 -2
- package/dist/{renderer-CXWAdRqn.mjs.map → renderer--fkmiVjl.mjs.map} +1 -1
- package/dist/{renderer-CZyJ72JZ.mjs → renderer-1r-Uq-Ae.mjs} +2 -2
- package/dist/{renderer-CZyJ72JZ.mjs.map → renderer-1r-Uq-Ae.mjs.map} +1 -1
- package/dist/renderer-2ecmdOae.mjs +5 -0
- package/dist/{renderer-D8CMakyz.mjs → renderer-8QIwXh7O.mjs} +3 -3
- package/dist/{renderer-D8CMakyz.mjs.map → renderer-8QIwXh7O.mjs.map} +1 -1
- package/dist/{renderer-B4iCFvJh.mjs → renderer-B-ur0Ej8.mjs} +3 -3
- package/dist/{renderer-B4iCFvJh.mjs.map → renderer-B-ur0Ej8.mjs.map} +1 -1
- package/dist/{renderer-BD25uND8.mjs → renderer-B2P1vgb7.mjs} +418 -187
- package/dist/renderer-B2P1vgb7.mjs.map +1 -0
- package/dist/{renderer-BZKkT-6Q.mjs → renderer-B2jjxsjO.mjs} +2 -2
- package/dist/{renderer-BZKkT-6Q.mjs.map → renderer-B2jjxsjO.mjs.map} +1 -1
- package/dist/{renderer-DEcbSNQd.mjs → renderer-B39I6CQw.mjs} +3 -3
- package/dist/{renderer-DEcbSNQd.mjs.map → renderer-B39I6CQw.mjs.map} +1 -1
- package/dist/{renderer-DIPyUVX2.mjs → renderer-B522Dkdk.mjs} +3 -3
- package/dist/{renderer-DIPyUVX2.mjs.map → renderer-B522Dkdk.mjs.map} +1 -1
- package/dist/renderer-B5RJp5g-.mjs +5 -0
- package/dist/renderer-B7xyT1Vb.mjs +5 -0
- package/dist/{renderer-CeX7uUXB.mjs → renderer-BAYTI6jj.mjs} +2 -2
- package/dist/{renderer-CeX7uUXB.mjs.map → renderer-BAYTI6jj.mjs.map} +1 -1
- package/dist/{renderer-DoRazdp_.mjs → renderer-BAusZ6Vu.mjs} +2 -2
- package/dist/{renderer-DoRazdp_.mjs.map → renderer-BAusZ6Vu.mjs.map} +1 -1
- package/dist/renderer-BBeArN_x.mjs +5 -0
- package/dist/renderer-BCAZDu-r.mjs +5 -0
- package/dist/{renderer-D41gHat4.mjs → renderer-BF0hx_iJ.mjs} +3 -3
- package/dist/{renderer-D41gHat4.mjs.map → renderer-BF0hx_iJ.mjs.map} +1 -1
- package/dist/renderer-BJnhik7Y.mjs +5 -0
- package/dist/{renderer-BeQrWrOa.mjs → renderer-BPWDsufX.mjs} +2 -2
- package/dist/{renderer-BeQrWrOa.mjs.map → renderer-BPWDsufX.mjs.map} +1 -1
- package/dist/{renderer-CxEBV-w0.mjs → renderer-BXJXziIt.mjs} +2 -2
- package/dist/{renderer-CxEBV-w0.mjs.map → renderer-BXJXziIt.mjs.map} +1 -1
- package/dist/{renderer-Ce8VPaog.mjs → renderer-BdyopiLC.mjs} +2 -2
- package/dist/{renderer-Ce8VPaog.mjs.map → renderer-BdyopiLC.mjs.map} +1 -1
- package/dist/{renderer-Bkqg-U2F.mjs → renderer-Bfk6A7UO.mjs} +3 -3
- package/dist/{renderer-Bkqg-U2F.mjs.map → renderer-Bfk6A7UO.mjs.map} +1 -1
- package/dist/{renderer-CAagaRag.mjs → renderer-BgO6BA_z.mjs} +2 -2
- package/dist/{renderer-CAagaRag.mjs.map → renderer-BgO6BA_z.mjs.map} +1 -1
- package/dist/{renderer-DlZwbO-A.mjs → renderer-BlPqTEii.mjs} +2 -2
- package/dist/{renderer-DlZwbO-A.mjs.map → renderer-BlPqTEii.mjs.map} +1 -1
- package/dist/{renderer-BEuU7qlG.mjs → renderer-BlvGcyAN.mjs} +2 -2
- package/dist/{renderer-BEuU7qlG.mjs.map → renderer-BlvGcyAN.mjs.map} +1 -1
- package/dist/{renderer-BrWOcJ9Q.mjs → renderer-BpIF1QIE.mjs} +3 -3
- package/dist/{renderer-BrWOcJ9Q.mjs.map → renderer-BpIF1QIE.mjs.map} +1 -1
- package/dist/renderer-BxRW8MZO.mjs +5 -0
- package/dist/renderer-C-lfsEAN.mjs +5 -0
- package/dist/{renderer-eAVNsuX8.mjs → renderer-C41U1tK6.mjs} +5 -5
- package/dist/{renderer-eAVNsuX8.mjs.map → renderer-C41U1tK6.mjs.map} +1 -1
- package/dist/renderer-C6nOFN4-.mjs +5 -0
- package/dist/{renderer-CjklM-KD.mjs → renderer-C7L8Ceqr.mjs} +2 -2
- package/dist/{renderer-CjklM-KD.mjs.map → renderer-C7L8Ceqr.mjs.map} +1 -1
- package/dist/{renderer-xLQ_nkmy.mjs → renderer-C7eFJf0_.mjs} +3 -3
- package/dist/{renderer-xLQ_nkmy.mjs.map → renderer-C7eFJf0_.mjs.map} +1 -1
- package/dist/renderer-C84TSQmS.mjs +5 -0
- package/dist/renderer-C8_6YofT.mjs +5 -0
- package/dist/{renderer-DsAoxQ8O.mjs → renderer-CCycwCEB.mjs} +2 -2
- package/dist/{renderer-DsAoxQ8O.mjs.map → renderer-CCycwCEB.mjs.map} +1 -1
- package/dist/{renderer-Cjx3x7xM.mjs → renderer-CHr7MiYW.mjs} +3 -3
- package/dist/{renderer-Cjx3x7xM.mjs.map → renderer-CHr7MiYW.mjs.map} +1 -1
- package/dist/renderer-COb3tOPG.mjs +5 -0
- package/dist/{renderer-DSpTGqUU.mjs → renderer-CQvmbRQ5.mjs} +3 -3
- package/dist/{renderer-DSpTGqUU.mjs.map → renderer-CQvmbRQ5.mjs.map} +1 -1
- package/dist/renderer-CSCIzaLy.mjs +5 -0
- package/dist/{renderer-D7Kk7VxM.mjs → renderer-CYC32bDW.mjs} +3 -3
- package/dist/{renderer-D7Kk7VxM.mjs.map → renderer-CYC32bDW.mjs.map} +1 -1
- package/dist/{renderer-Ci9x2WUd.mjs → renderer-CcvvoKiZ.mjs} +3 -3
- package/dist/{renderer-Ci9x2WUd.mjs.map → renderer-CcvvoKiZ.mjs.map} +1 -1
- package/dist/{renderer-DTgO5LPf.mjs → renderer-CiQhD8Gg.mjs} +3 -3
- package/dist/{renderer-DTgO5LPf.mjs.map → renderer-CiQhD8Gg.mjs.map} +1 -1
- package/dist/renderer-CmI4c8MS.mjs +5 -0
- package/dist/{renderer-BlVmbzPs.mjs → renderer-CpUJBOfb.mjs} +2 -2
- package/dist/renderer-CqVltdX9.mjs +5 -0
- package/dist/{renderer-LY2MiIj0.mjs → renderer-CwFqqpWY.mjs} +3 -3
- package/dist/{renderer-LY2MiIj0.mjs.map → renderer-CwFqqpWY.mjs.map} +1 -1
- package/dist/renderer-D-FpMzLY.mjs +5 -0
- package/dist/renderer-D-Oyn9mG.mjs +5 -0
- package/dist/renderer-D2QrkA8_.mjs +5 -0
- package/dist/{renderer-D7Cu9OZx.mjs → renderer-D47AEJE_.mjs} +2 -2
- package/dist/{renderer-D7Cu9OZx.mjs.map → renderer-D47AEJE_.mjs.map} +1 -1
- package/dist/renderer-D5bjOx83.mjs +3 -0
- package/dist/{renderer-DPn2DhMU.mjs → renderer-D61B9bXF.mjs} +2 -2
- package/dist/{renderer-DPn2DhMU.mjs.map → renderer-D61B9bXF.mjs.map} +1 -1
- package/dist/renderer-D64r4iN-.mjs +5 -0
- package/dist/{renderer-CUq2qgyc.mjs → renderer-D7Al3_-5.mjs} +3 -3
- package/dist/{renderer-CUq2qgyc.mjs.map → renderer-D7Al3_-5.mjs.map} +1 -1
- package/dist/{renderer-CyWRvKUI.mjs → renderer-D7r6onRT.mjs} +2 -2
- package/dist/{renderer-CyWRvKUI.mjs.map → renderer-D7r6onRT.mjs.map} +1 -1
- package/dist/{renderer-DxHICEk3.mjs → renderer-D8bBHrWC.mjs} +3 -3
- package/dist/{renderer-DxHICEk3.mjs.map → renderer-D8bBHrWC.mjs.map} +1 -1
- package/dist/renderer-DCq6YkgP.mjs +5 -0
- package/dist/{renderer-Dk45W8Zd.mjs → renderer-DDEkFbVI.mjs} +3 -3
- package/dist/{renderer-Dk45W8Zd.mjs.map → renderer-DDEkFbVI.mjs.map} +1 -1
- package/dist/renderer-DDHG3GdR.mjs +5 -0
- package/dist/{renderer-BWlMAacF.mjs → renderer-DEmYyaqj.mjs} +2 -2
- package/dist/{renderer-BWlMAacF.mjs.map → renderer-DEmYyaqj.mjs.map} +1 -1
- package/dist/{renderer-DRGa6tlX.mjs → renderer-DF-yvIrV.mjs} +2 -2
- package/dist/{renderer-DRGa6tlX.mjs.map → renderer-DF-yvIrV.mjs.map} +1 -1
- package/dist/{renderer-C-5RNIeX.mjs → renderer-DFzI3yI_.mjs} +2 -2
- package/dist/{renderer-C-5RNIeX.mjs.map → renderer-DFzI3yI_.mjs.map} +1 -1
- package/dist/{renderer-AMBVtZ_G.mjs → renderer-DIw3UtEU.mjs} +3 -3
- package/dist/{renderer-AMBVtZ_G.mjs.map → renderer-DIw3UtEU.mjs.map} +1 -1
- package/dist/renderer-DMdNfcud.mjs +6 -0
- package/dist/{renderer-DnPzvIHK.mjs → renderer-DMvmf3T2.mjs} +2 -2
- package/dist/{renderer-Gw1ICOJ3.mjs → renderer-DNQvOrkY.mjs} +3 -3
- package/dist/{renderer-Gw1ICOJ3.mjs.map → renderer-DNQvOrkY.mjs.map} +1 -1
- package/dist/{renderer-CP2FOWyJ.mjs → renderer-DO-KbpYZ.mjs} +3 -3
- package/dist/{renderer-CP2FOWyJ.mjs.map → renderer-DO-KbpYZ.mjs.map} +1 -1
- package/dist/{renderer-BeFiQfzV.mjs → renderer-DPAD6fL1.mjs} +70 -70
- package/dist/{renderer-BeFiQfzV.mjs.map → renderer-DPAD6fL1.mjs.map} +1 -1
- package/dist/{renderer-cg06hb82.mjs → renderer-DTqDy2m9.mjs} +3 -3
- package/dist/{renderer-cg06hb82.mjs.map → renderer-DTqDy2m9.mjs.map} +1 -1
- package/dist/{renderer-BXAgUuAq.mjs → renderer-DVCJjVn7.mjs} +2 -2
- package/dist/{renderer-BXAgUuAq.mjs.map → renderer-DVCJjVn7.mjs.map} +1 -1
- package/dist/{renderer-D6X9vWkN.mjs → renderer-DX41niRU.mjs} +2 -2
- package/dist/{renderer-D6X9vWkN.mjs.map → renderer-DX41niRU.mjs.map} +1 -1
- package/dist/{renderer-D3K9FEQk.mjs → renderer-DXEWbnRF.mjs} +3 -3
- package/dist/{renderer-D3K9FEQk.mjs.map → renderer-DXEWbnRF.mjs.map} +1 -1
- package/dist/renderer-DZQXZ4lK.mjs +5 -0
- package/dist/{renderer-CiMIftlS.mjs → renderer-DbRZe0Re.mjs} +3 -3
- package/dist/{renderer-CiMIftlS.mjs.map → renderer-DbRZe0Re.mjs.map} +1 -1
- package/dist/renderer-DczJJLA1.mjs +5 -0
- package/dist/renderer-DfqJj9oe.mjs +5 -0
- package/dist/renderer-DgO9ihVJ.mjs +5 -0
- package/dist/renderer-DhgnQZYb.mjs +5 -0
- package/dist/{renderer-CrgfMDbh.mjs → renderer-DiY70S8S.mjs} +3 -3
- package/dist/{renderer-CrgfMDbh.mjs.map → renderer-DiY70S8S.mjs.map} +1 -1
- package/dist/renderer-DjxKjHMf.mjs +5 -0
- package/dist/{renderer-Br4UZvfL.mjs → renderer-DkRSZg5g.mjs} +3 -3
- package/dist/{renderer-Br4UZvfL.mjs.map → renderer-DkRSZg5g.mjs.map} +1 -1
- package/dist/{renderer-CCSzKnvs.mjs → renderer-DmkWrWAk.mjs} +2 -2
- package/dist/{renderer-CCSzKnvs.mjs.map → renderer-DmkWrWAk.mjs.map} +1 -1
- package/dist/{renderer-D2JOseb1.mjs → renderer-DpruWmZU.mjs} +2 -2
- package/dist/{renderer-D2JOseb1.mjs.map → renderer-DpruWmZU.mjs.map} +1 -1
- package/dist/renderer-DqLA5cdR.mjs +5 -0
- package/dist/{renderer-DxbFjINv.mjs → renderer-DqvoMLca.mjs} +3 -3
- package/dist/{renderer-DxbFjINv.mjs.map → renderer-DqvoMLca.mjs.map} +1 -1
- package/dist/renderer-Dudp6ZlH.mjs +5 -0
- package/dist/{renderer-COQc1jn6.mjs → renderer-EaLUCobW.mjs} +2 -2
- package/dist/{renderer-COQc1jn6.mjs.map → renderer-EaLUCobW.mjs.map} +1 -1
- package/dist/{renderer-BioUC9zE.mjs → renderer-GBmWjBvy.mjs} +2 -2
- package/dist/{renderer-BioUC9zE.mjs.map → renderer-GBmWjBvy.mjs.map} +1 -1
- package/dist/{renderer-BNzT34UV.mjs → renderer-Lth37j17.mjs} +2 -2
- package/dist/{renderer-D-17HVPb.mjs → renderer-SSBL4M1o.mjs} +3 -3
- package/dist/{renderer-D-17HVPb.mjs.map → renderer-SSBL4M1o.mjs.map} +1 -1
- package/dist/{renderer-C8rxyjaE.mjs → renderer-SWr3vbrV.mjs} +2 -2
- package/dist/{renderer-C8rxyjaE.mjs.map → renderer-SWr3vbrV.mjs.map} +1 -1
- package/dist/{renderer-LwrcnEtI.mjs → renderer-WCZu2Rf5.mjs} +3 -3
- package/dist/{renderer-LwrcnEtI.mjs.map → renderer-WCZu2Rf5.mjs.map} +1 -1
- package/dist/{renderer-BIGILDEA.mjs → renderer-Xv6GfNUI.mjs} +2 -2
- package/dist/{renderer-BIGILDEA.mjs.map → renderer-Xv6GfNUI.mjs.map} +1 -1
- package/dist/renderer-_jC5KIT1.mjs +5 -0
- package/dist/{renderer-DveQQCi8.mjs → renderer-bAKUeHF3.mjs} +3 -3
- package/dist/{renderer-DveQQCi8.mjs.map → renderer-bAKUeHF3.mjs.map} +1 -1
- package/dist/renderer-cTgAuVmJ.mjs +5 -0
- package/dist/{renderer-DGPaKIFf.mjs → renderer-cod5Ona9.mjs} +2 -2
- package/dist/{renderer-DgLt0TPo.mjs → renderer-g_vrrAQU.mjs} +2 -2
- package/dist/{renderer-DgLt0TPo.mjs.map → renderer-g_vrrAQU.mjs.map} +1 -1
- package/dist/{renderer-uorPCWdC.mjs → renderer-hSCfnvaK.mjs} +3 -3
- package/dist/{renderer-uorPCWdC.mjs.map → renderer-hSCfnvaK.mjs.map} +1 -1
- package/dist/{renderer-BGPnCRFI.mjs → renderer-ktWXVYka.mjs} +3 -3
- package/dist/{renderer-BGPnCRFI.mjs.map → renderer-ktWXVYka.mjs.map} +1 -1
- package/dist/renderer-nVKDvDLO.mjs +5 -0
- package/dist/{renderer-U-12BOhe.mjs → renderer-oKRF4A0M.mjs} +2 -2
- package/dist/{renderer-U-12BOhe.mjs.map → renderer-oKRF4A0M.mjs.map} +1 -1
- package/dist/{renderer-CsilJwL-.mjs → renderer-pHWEHDnM.mjs} +3 -3
- package/dist/{renderer-CsilJwL-.mjs.map → renderer-pHWEHDnM.mjs.map} +1 -1
- package/dist/renderer-pZ6_pUo1.mjs +5 -0
- package/dist/{renderer-BD00i68i.mjs → renderer-sCovEubT.mjs} +3 -3
- package/dist/{renderer-BD00i68i.mjs.map → renderer-sCovEubT.mjs.map} +1 -1
- package/dist/{renderer-BdbGTz7z.mjs → renderer-sYSkIUfo.mjs} +3 -3
- package/dist/{renderer-BdbGTz7z.mjs.map → renderer-sYSkIUfo.mjs.map} +1 -1
- package/dist/{renderer-BLU0PQTB.mjs → renderer-zXPVLRlD.mjs} +3 -3
- package/dist/{renderer-BLU0PQTB.mjs.map → renderer-zXPVLRlD.mjs.map} +1 -1
- package/dist/{renderers-CP8CFWDs-ywy4xljX.mjs → renderers-CP8CFWDs-DH2oktaC.mjs} +2 -2
- package/dist/{renderers-CP8CFWDs-ywy4xljX.mjs.map → renderers-CP8CFWDs-DH2oktaC.mjs.map} +1 -1
- package/dist/signals/index.mjs +4 -4
- package/dist/{src-B0KFNjj4.mjs → src-DFEqficI.mjs} +445 -35
- package/dist/src-DFEqficI.mjs.map +1 -0
- package/package.json +67 -58
- package/dist/index-BwRrsP_V.d.mts.map +0 -1
- package/dist/index-UDDAfHAF.d.mts.map +0 -1
- package/dist/preview-engine/chunk-3U2A3RW4.mjs +0 -5
- package/dist/preview-engine/chunk-6E3JSPJN.mjs +0 -1
- package/dist/preview-engine/chunk-F4F2UDRX.mjs +0 -1
- package/dist/preview-engine/chunk-KFNVUGNN.mjs +0 -1974
- package/dist/preview-engine/chunk-PYSBWKIJ.mjs +0 -1
- package/dist/preview-engine/chunk-U2IFQMS3.mjs +0 -174
- package/dist/preview-engine/renderers-2GMY2ZNK.mjs +0 -1
- package/dist/preview-engine/renderers-2QJNKL7Q.mjs +0 -1
- package/dist/preview-engine/renderers-3OYU6O6F.mjs +0 -1
- package/dist/preview-engine/renderers-433Y2PCK.mjs +0 -1
- package/dist/preview-engine/renderers-4AGPGEL4.mjs +0 -1
- package/dist/preview-engine/renderers-54DBHGUW.mjs +0 -1
- package/dist/preview-engine/renderers-5M2O55U3.mjs +0 -1
- package/dist/preview-engine/renderers-6FVMDEAY.mjs +0 -1
- package/dist/preview-engine/renderers-6R7ZJ7DU.mjs +0 -1
- package/dist/preview-engine/renderers-75GCMFOD.mjs +0 -1
- package/dist/preview-engine/renderers-7LWLUCVQ.mjs +0 -1
- package/dist/preview-engine/renderers-BLDENIEV.mjs +0 -1
- package/dist/preview-engine/renderers-CDB3YK3R.mjs +0 -1
- package/dist/preview-engine/renderers-D6D4XDFY.mjs +0 -1
- package/dist/preview-engine/renderers-DJVFQZYU.mjs +0 -1
- package/dist/preview-engine/renderers-DMXSV7VO.mjs +0 -1
- package/dist/preview-engine/renderers-EBMASIOE.mjs +0 -1
- package/dist/preview-engine/renderers-F262HDFS.mjs +0 -1
- package/dist/preview-engine/renderers-FMXKIF22.mjs +0 -1
- package/dist/preview-engine/renderers-GJKSZ6DR.mjs +0 -1
- package/dist/preview-engine/renderers-GR3RLYDZ.mjs +0 -1
- package/dist/preview-engine/renderers-GT3W2QIA.mjs +0 -1
- package/dist/preview-engine/renderers-IHC7HUK3.mjs +0 -1
- package/dist/preview-engine/renderers-J56ZGEVM.mjs +0 -1
- package/dist/preview-engine/renderers-KYM6352U.mjs +0 -1
- package/dist/preview-engine/renderers-LFXX6TWI.mjs +0 -1
- package/dist/preview-engine/renderers-NAHUPFPU.mjs +0 -1
- package/dist/preview-engine/renderers-NM3FZLHH.mjs +0 -1
- package/dist/preview-engine/renderers-NNB4BTJA.mjs +0 -1
- package/dist/preview-engine/renderers-OYVQW6QI.mjs +0 -1
- package/dist/preview-engine/renderers-P5RIFU3C.mjs +0 -1
- package/dist/preview-engine/renderers-QB7HJUTS.mjs +0 -1
- package/dist/preview-engine/renderers-QRQVOCDC.mjs +0 -1
- package/dist/preview-engine/renderers-QVFHJTZA.mjs +0 -1
- package/dist/preview-engine/renderers-R3WQIE4L.mjs +0 -1
- package/dist/preview-engine/renderers-SQBVOLG7.mjs +0 -1
- package/dist/preview-engine/renderers-TLXMYEDI.mjs +0 -1
- package/dist/preview-engine/renderers-X4S3WELJ.mjs +0 -1
- package/dist/preview-engine/renderers-XT7U25I7.mjs +0 -1
- package/dist/preview-engine/renderers-XVGLMBB3.mjs +0 -1
- package/dist/preview-engine/renderers-YUWU3TQZ.mjs +0 -1
- package/dist/preview-engine/renderers-ZNUD5OVO.mjs +0 -1
- package/dist/renderer-01zxT4CK.mjs +0 -5
- package/dist/renderer-35LHkj36.mjs +0 -5
- package/dist/renderer-B0OIdCGj.mjs +0 -5
- package/dist/renderer-B3IPtkK9.mjs +0 -5
- package/dist/renderer-BD25uND8.mjs.map +0 -1
- package/dist/renderer-BMC39abo.mjs +0 -5
- package/dist/renderer-BQj3nlAI.mjs +0 -5
- package/dist/renderer-BnBvSmp_.mjs +0 -5
- package/dist/renderer-BsDSpTpL.mjs +0 -5
- package/dist/renderer-BtW6_gvE.mjs +0 -5
- package/dist/renderer-By8U44Rt.mjs +0 -5
- package/dist/renderer-C3lDmxuX.mjs +0 -5
- package/dist/renderer-C6SZAE_x.mjs +0 -5
- package/dist/renderer-CA3IVeZj.mjs +0 -5
- package/dist/renderer-CFoCH_mO.mjs +0 -5
- package/dist/renderer-CLhZqJF8.mjs +0 -6
- package/dist/renderer-CYJXQS8E.mjs +0 -5
- package/dist/renderer-C_vj6_WJ.mjs +0 -5
- package/dist/renderer-CeqfC6OR.mjs +0 -5
- package/dist/renderer-CkZCGMAc.mjs +0 -5
- package/dist/renderer-Clxju1r9.mjs +0 -5
- package/dist/renderer-Cvz22ZSh.mjs +0 -3
- package/dist/renderer-CyWtKBF7.mjs +0 -5
- package/dist/renderer-D27STGoB.mjs +0 -5
- package/dist/renderer-D78Aq9YK.mjs +0 -5
- package/dist/renderer-DHEffABL.mjs +0 -5
- package/dist/renderer-DUuNCgzW.mjs +0 -5
- package/dist/renderer-DVD5pzRq.mjs +0 -5
- package/dist/renderer-Dsp6xDw5.mjs +0 -5
- package/dist/renderer-DuC-BFXR.mjs +0 -5
- package/dist/renderer-DuWs_Wsv.mjs +0 -5
- package/dist/renderer-OSgsiIrW.mjs +0 -5
- package/dist/renderer-OZaMFYtZ.mjs +0 -5
- package/dist/renderer-T79TmHET.mjs +0 -5
- package/dist/renderer-UhsC9oTU.mjs +0 -5
- package/dist/renderer-WYZV1jWf.mjs +0 -5
- package/dist/renderer-Y7evDjHH.mjs +0 -5
- package/dist/renderer-mcePkmUe.mjs +0 -5
- package/dist/src-B0KFNjj4.mjs.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import "./chunk-BcJoO4Nm.mjs";
|
|
2
|
-
import "./dist-
|
|
3
|
-
import { n as renderers_default, t as PatchHealWebGPURenderer } from "./renderer-
|
|
2
|
+
import "./dist-C1cCW7Bt.mjs";
|
|
3
|
+
import { n as renderers_default, t as PatchHealWebGPURenderer } from "./renderer-BlPqTEii.mjs";
|
|
4
4
|
|
|
5
5
|
export { PatchHealWebGPURenderer, renderers_default as default };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { n as defineRenderer, u as unwrapFrameParam } from "./renderer-mNSyac1V.mjs";
|
|
2
|
-
import { q as parseColor } 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, t as FULLSCREEN_QUAD_WGSL, u as perDevice } from "./gpu-
|
|
2
|
+
import { q as parseColor } from "./dist-C1cCW7Bt.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, t as FULLSCREEN_QUAD_WGSL, u as perDevice } from "./gpu-CMaa63nz.mjs";
|
|
4
4
|
|
|
5
5
|
//#region ../../nodes/node-halftone-screen/dist/renderers-CvluQiq3.mjs
|
|
6
6
|
const WGSL_HALFTONE_SHADER = `
|
|
@@ -456,4 +456,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: HalftoneScreenWebGPURen
|
|
|
456
456
|
|
|
457
457
|
//#endregion
|
|
458
458
|
export { renderers_default as t };
|
|
459
|
-
//# sourceMappingURL=renderer-
|
|
459
|
+
//# sourceMappingURL=renderer-CwFqqpWY.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-LY2MiIj0.mjs","names":[],"sources":["../../../nodes/node-halftone-screen/dist/renderers-CvluQiq3.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { unwrapFrameParam } from \"@framefields/node-sdk\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice, signalTextureView, signalTiming, texturesLayout } from \"@framefields/node-sdk/gpu\";\nimport { parseColor } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst WGSL_HALFTONE_SHADER = `\nstruct HalftoneUniforms {\n mode : f32, // 0 = Monochrome, 1 = CMYK\n dotShape : f32, // 0 = Circle, 1 = Diamond, 2 = Line, 3 = Square\n frequency : f32,\n angle : f32,\n\n contrast : f32,\n invert : f32,\n isSmooth : f32,\n opacity : f32,\n\n dotColor : vec4<f32>,\n paperColor : vec4<f32>,\n\n cyanAngle : f32,\n magentaAngle : f32,\n yellowAngle : f32,\n blackAngle : f32,\n\n hasFreqSig : f32,\n hasAngleSig : f32,\n hasContrastSig : f32,\n hasCyanSig : f32,\n\n hasMagSig : f32,\n hasYelSig : f32,\n hasBlkSig : f32,\n hasOpacitySig : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : HalftoneUniforms;\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 freqSigTex : texture_2d<f32>;\n@group(2) @binding(1) var angleSigTex : texture_2d<f32>;\n@group(2) @binding(2) var contrastSigTex : texture_2d<f32>;\n@group(2) @binding(3) var cyanSigTex : texture_2d<f32>;\n@group(2) @binding(4) var magSigTex : texture_2d<f32>;\n@group(2) @binding(5) var yelSigTex : texture_2d<f32>;\n@group(2) @binding(6) var blkSigTex : texture_2d<f32>;\n@group(2) @binding(7) var opacitySigTex : texture_2d<f32>;\n@group(2) @binding(8) var signalSamp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nconst PI: f32 = 3.141592653589793;\n\nfn getCellCenterUV(\n uv: vec2<f32>,\n dimensions: vec2<f32>,\n screenAngleDeg: f32,\n freq: f32\n) -> vec2<f32> {\n let rad = screenAngleDeg * PI / 180.0;\n let cosA = cos(rad);\n let sinA = sin(rad);\n let rot = mat2x2<f32>(cosA, -sinA, sinA, cosA);\n let invRot = mat2x2<f32>(cosA, sinA, -sinA, cosA);\n\n let minDim = min(dimensions.x, dimensions.y);\n let cellSize = max(minDim / max(freq, 1.0), 1.0);\n\n let center = dimensions * 0.5;\n let pixelPos = (uv * dimensions) - center;\n let rotPos = rot * pixelPos;\n\n let cellIndex = floor(rotPos / cellSize) + vec2<f32>(0.5);\n let cellCenterRot = cellIndex * cellSize;\n let cellCenterPixelPos = invRot * cellCenterRot;\n let cellCenterUV = (cellCenterPixelPos + center) / dimensions;\n return clamp(cellCenterUV, vec2<f32>(0.0), vec2<f32>(1.0));\n}\n\nfn evalDotCoverage(\n uv: vec2<f32>,\n dimensions: vec2<f32>,\n screenAngleDeg: f32,\n freq: f32,\n shape: f32,\n density: f32,\n contrastMultiplier: f32,\n isSmooth: f32\n) -> f32 {\n var d = clamp((density - 0.5) * contrastMultiplier + 0.5, 0.0, 1.0);\n if (d <= 0.0001) { return 0.0; }\n if (d >= 0.9999) { return 1.0; }\n\n let rad = screenAngleDeg * PI / 180.0;\n let cosA = cos(rad);\n let sinA = sin(rad);\n let rot = mat2x2<f32>(cosA, -sinA, sinA, cosA);\n\n let minDim = min(dimensions.x, dimensions.y);\n let cellSize = max(minDim / max(freq, 1.0), 1.0);\n\n let center = dimensions * 0.5;\n let pixelPos = (uv * dimensions) - center;\n let rotPos = rot * pixelPos;\n\n let cellUV = fract(rotPos / cellSize) - vec2<f32>(0.5);\n\n var spot: f32 = 0.0;\n\n if (shape < 0.5) {\n // 0: Euclidean Round Dot\n spot = 0.5 * (1.0 - (cos(cellUV.x * 2.0 * PI) + cos(cellUV.y * 2.0 * PI)) * 0.5);\n } else if (shape < 1.5) {\n // 1: Diamond\n spot = abs(cellUV.x) + abs(cellUV.y);\n } else if (shape < 2.5) {\n // 2: Line\n spot = abs(cellUV.y) * 2.0;\n } else {\n // 3: Square\n spot = max(abs(cellUV.x), abs(cellUV.y)) * 2.0;\n }\n\n let edgeWidth = select(0.001, max(1.5 / cellSize, 0.003), isSmooth > 0.5);\n\n return select(\n step(spot, d),\n smoothstep(d + edgeWidth, d - edgeWidth, spot),\n isSmooth > 0.5\n );\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n let sourceCol = textureSampleLevel(tex, samp, in.uv, 0.0);\n if (sourceCol.a < 1e-5) {\n return sourceCol;\n }\n\n // Resolve parameter overrides or dynamic signals\n var frequency = u.frequency;\n if (u.hasFreqSig > 0.5) {\n frequency = textureSampleLevel(freqSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var baseAngle = u.angle;\n if (u.hasAngleSig > 0.5) {\n baseAngle = textureSampleLevel(angleSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var contrast = u.contrast;\n if (u.hasContrastSig > 0.5) {\n contrast = textureSampleLevel(contrastSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var cyanAngle = u.cyanAngle;\n if (u.hasCyanSig > 0.5) {\n cyanAngle = textureSampleLevel(cyanSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var magentaAngle = u.magentaAngle;\n if (u.hasMagSig > 0.5) {\n magentaAngle = textureSampleLevel(magSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var yellowAngle = u.yellowAngle;\n if (u.hasYelSig > 0.5) {\n yellowAngle = textureSampleLevel(yelSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var blackAngle = u.blackAngle;\n if (u.hasBlkSig > 0.5) {\n blackAngle = textureSampleLevel(blkSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var effectOpacity = u.opacity;\n if (u.hasOpacitySig > 0.5) {\n effectOpacity = textureSampleLevel(opacitySigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n let dimensions = vec2<f32>(textureDimensions(tex));\n let unpremult = sourceCol.rgb / sourceCol.a;\n\n var screenedRgb: vec3<f32>;\n\n if (u.mode < 0.5) {\n // --- Monochrome Mode ---\n let cellCenterUV = getCellCenterUV(in.uv, dimensions, baseAngle, frequency);\n let cellCol = textureSampleLevel(tex, samp, cellCenterUV, 0.0);\n let cellRgb = select(cellCol.rgb, cellCol.rgb / cellCol.a, cellCol.a > 1e-5);\n let luminance = dot(cellRgb, vec3<f32>(0.2126, 0.7152, 0.0722));\n var inkDensity = 1.0 - luminance;\n if (u.invert > 0.5) {\n inkDensity = luminance;\n }\n\n let coverage = evalDotCoverage(\n in.uv,\n dimensions,\n baseAngle,\n frequency,\n u.dotShape,\n inkDensity,\n contrast,\n u.isSmooth\n );\n\n screenedRgb = mix(u.paperColor.rgb, u.dotColor.rgb, coverage);\n } else {\n // --- CMYK Mode ---\n let cellCenterUVC = getCellCenterUV(in.uv, dimensions, baseAngle + cyanAngle, frequency);\n let colC = textureSampleLevel(tex, samp, cellCenterUVC, 0.0);\n let rgbC = select(colC.rgb, colC.rgb / colC.a, colC.a > 1e-5);\n let kC = 1.0 - max(max(rgbC.r, rgbC.g), rgbC.b);\n let invKC = 1.0 - kC;\n var densC = select(0.0, clamp((1.0 - rgbC.r - kC) / max(invKC, 0.0001), 0.0, 1.0), invKC > 0.0001);\n\n let cellCenterUVM = getCellCenterUV(in.uv, dimensions, baseAngle + magentaAngle, frequency);\n let colM = textureSampleLevel(tex, samp, cellCenterUVM, 0.0);\n let rgbM = select(colM.rgb, colM.rgb / colM.a, colM.a > 1e-5);\n let kM = 1.0 - max(max(rgbM.r, rgbM.g), rgbM.b);\n let invKM = 1.0 - kM;\n var densM = select(0.0, clamp((1.0 - rgbM.g - kM) / max(invKM, 0.0001), 0.0, 1.0), invKM > 0.0001);\n\n let cellCenterUVY = getCellCenterUV(in.uv, dimensions, baseAngle + yellowAngle, frequency);\n let colY = textureSampleLevel(tex, samp, cellCenterUVY, 0.0);\n let rgbY = select(colY.rgb, colY.rgb / colY.a, colY.a > 1e-5);\n let kY = 1.0 - max(max(rgbY.r, rgbY.g), rgbY.b);\n let invKY = 1.0 - kY;\n var densY = select(0.0, clamp((1.0 - rgbY.b - kY) / max(invKY, 0.0001), 0.0, 1.0), invKY > 0.0001);\n\n let cellCenterUVK = getCellCenterUV(in.uv, dimensions, baseAngle + blackAngle, frequency);\n let colK = textureSampleLevel(tex, samp, cellCenterUVK, 0.0);\n let rgbK = select(colK.rgb, colK.rgb / colK.a, colK.a > 1e-5);\n var densK = 1.0 - max(max(rgbK.r, rgbK.g), rgbK.b);\n\n if (u.invert > 0.5) {\n densC = 1.0 - densC;\n densM = 1.0 - densM;\n densY = 1.0 - densY;\n densK = 1.0 - densK;\n }\n\n let covC = evalDotCoverage(in.uv, dimensions, baseAngle + cyanAngle, frequency, u.dotShape, densC, contrast, u.isSmooth);\n let covM = evalDotCoverage(in.uv, dimensions, baseAngle + magentaAngle, frequency, u.dotShape, densM, contrast, u.isSmooth);\n let covY = evalDotCoverage(in.uv, dimensions, baseAngle + yellowAngle, frequency, u.dotShape, densY, contrast, u.isSmooth);\n let covK = evalDotCoverage(in.uv, dimensions, baseAngle + blackAngle, frequency, u.dotShape, densK, contrast, u.isSmooth);\n\n // Subtractive synthesis onto paper substrate\n let outR = u.paperColor.r * (1.0 - covC) * (1.0 - covK);\n let outG = u.paperColor.g * (1.0 - covM) * (1.0 - covK);\n let outB = u.paperColor.b * (1.0 - covY) * (1.0 - covK);\n\n screenedRgb = clamp(vec3<f32>(outR, outG, outB), vec3<f32>(0.0), vec3<f32>(1.0));\n }\n\n // Apply effect opacity blend\n let finalRgb = mix(unpremult, screenedRgb, clamp(effectOpacity, 0.0, 1.0));\n return vec4<f32>(finalRgb * sourceCol.a, sourceCol.a);\n}\n`;\nconst getDeviceLayouts = perDevice((device) => ({\n\tuniformLayout: fragmentBindGroupLayout(device, [\"uniform\"]),\n\tsingleTextureLayout: fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]),\n\tsignalTextureLayout: texturesLayout(device, 8),\n\tpipelineCache: /* @__PURE__ */ new Map()\n}));\nfunction getHalftoneResources(device, format) {\n\tconst layouts = getDeviceLayouts(device);\n\tconst cacheKey = `halftone_${format}`;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst halftoneModule = device.createShaderModule({\n\t\t\tlabel: `halftone_${format}.wgsl`,\n\t\t\tcode: WGSL_HALFTONE_SHADER\n\t\t});\n\t\tpipeline = createFullscreenPipeline(device, {\n\t\t\tlabel: `HalftonePipeline_${format}`,\n\t\t\tmodule: halftoneModule,\n\t\t\tlayouts: [\n\t\t\t\tlayouts.uniformLayout,\n\t\t\t\tlayouts.singleTextureLayout,\n\t\t\t\tlayouts.signalTextureLayout\n\t\t\t],\n\t\t\tformat\n\t\t});\n\t\tlayouts.pipelineCache.set(cacheKey, pipeline);\n\t}\n\treturn {\n\t\thalftonePipeline: pipeline,\n\t\tuniformLayout: layouts.uniformLayout,\n\t\tsingleTextureLayout: layouts.singleTextureLayout,\n\t\tsignalTextureLayout: layouts.signalTextureLayout\n\t};\n}\nconst HalftoneScreenWebGPURenderer = 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 !== \"HalftoneScreen\" || !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 nodeId = op.inputs ? Object.keys(op.inputs)[0] : \"halftone_node\";\n\tconst resolveBindable = (configKey, defaultValue, 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\");\n\t\tconst sd = hasSignal && input?.outputItem?.data ? input.outputItem.data : null;\n\t\tlet val = defaultValue;\n\t\tlet hasStaticSig = false;\n\t\tif (!hasSignal) if (input?.connectionValid && input.outputItem?.type === \"Number\") val = Math.max(minVal, Math.min(maxVal, Number(input.outputItem.data ?? defaultValue)));\n\t\telse {\n\t\t\tconst rawVal = unwrapFrameParam(op[configKey], compositionFrame, fps).value;\n\t\t\tval = Math.max(minVal, Math.min(maxVal, Number(rawVal ?? defaultValue)));\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 freqRes = resolveBindable(\"frequency\", 30, 1, 200);\n\tconst angleRes = resolveBindable(\"angle\", 45, 0, 360);\n\tconst contrastRes = resolveBindable(\"contrast\", 1, .1, 5);\n\tconst cyanRes = resolveBindable(\"cyanAngle\", 15, 0, 360);\n\tconst magRes = resolveBindable(\"magentaAngle\", 75, 0, 360);\n\tconst yelRes = resolveBindable(\"yellowAngle\", 0, 0, 360);\n\tconst blkRes = resolveBindable(\"blackAngle\", 45, 0, 360);\n\tconst opacityRes = resolveBindable(\"opacity\", 1, 0, 1);\n\tconst { texture: tmpTex } = await drawChildToTexture(args, childMedia);\n\tconst { halftonePipeline: pipeline, uniformLayout: uLayout, singleTextureLayout: tLayout, signalTextureLayout: sigLayout } = getHalftoneResources(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 freqView = getSignalView(freqRes, \"freq_sig\");\n\tconst angleView = getSignalView(angleRes, \"angle_sig\");\n\tconst contrastView = getSignalView(contrastRes, \"contrast_sig\");\n\tconst cyanView = getSignalView(cyanRes, \"cyan_sig\");\n\tconst magView = getSignalView(magRes, \"mag_sig\");\n\tconst yelView = getSignalView(yelRes, \"yel_sig\");\n\tconst blkView = getSignalView(blkRes, \"blk_sig\");\n\tconst opacityView = getSignalView(opacityRes, \"opacity_sig\");\n\tconst modeVal = op.mode === \"CMYK\" ? 1 : 0;\n\tlet dotShapeVal = 0;\n\tif (op.dotShape === \"Diamond\") dotShapeVal = 1;\n\telse if (op.dotShape === \"Line\") dotShapeVal = 2;\n\telse if (op.dotShape === \"Square\") dotShapeVal = 3;\n\tconst dotCol = parseColor(op.dotColor ?? \"#000000\");\n\tconst paperCol = parseColor(op.paperColor ?? \"#ffffff\");\n\tconst halftoneUniformData = new Float32Array(28);\n\thalftoneUniformData[0] = modeVal;\n\thalftoneUniformData[1] = dotShapeVal;\n\thalftoneUniformData[2] = freqRes.val;\n\thalftoneUniformData[3] = angleRes.val;\n\thalftoneUniformData[4] = contrastRes.val;\n\thalftoneUniformData[5] = op.invert ? 1 : 0;\n\thalftoneUniformData[6] = op.smooth !== false ? 1 : 0;\n\thalftoneUniformData[7] = opacityRes.val;\n\thalftoneUniformData[8] = dotCol.r;\n\thalftoneUniformData[9] = dotCol.g;\n\thalftoneUniformData[10] = dotCol.b;\n\thalftoneUniformData[11] = dotCol.a;\n\thalftoneUniformData[12] = paperCol.r;\n\thalftoneUniformData[13] = paperCol.g;\n\thalftoneUniformData[14] = paperCol.b;\n\thalftoneUniformData[15] = paperCol.a;\n\thalftoneUniformData[16] = cyanRes.val;\n\thalftoneUniformData[17] = magRes.val;\n\thalftoneUniformData[18] = yelRes.val;\n\thalftoneUniformData[19] = blkRes.val;\n\thalftoneUniformData[20] = freqRes.hasStaticSig ? 1 : 0;\n\thalftoneUniformData[21] = angleRes.hasStaticSig ? 1 : 0;\n\thalftoneUniformData[22] = contrastRes.hasStaticSig ? 1 : 0;\n\thalftoneUniformData[23] = cyanRes.hasStaticSig ? 1 : 0;\n\thalftoneUniformData[24] = magRes.hasStaticSig ? 1 : 0;\n\thalftoneUniformData[25] = yelRes.hasStaticSig ? 1 : 0;\n\thalftoneUniformData[26] = blkRes.hasStaticSig ? 1 : 0;\n\thalftoneUniformData[27] = opacityRes.hasStaticSig ? 1 : 0;\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(halftoneUniformData);\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, [\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: uniformBuffer }\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: freqView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: angleView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: contrastView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: cyanView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 4,\n\t\t\t\t\tresource: magView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 5,\n\t\t\t\t\tresource: yelView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 6,\n\t\t\t\t\tresource: blkView\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]);\n\tdrawTextureToTarget(args, outTex);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: HalftoneScreenWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-CvluQiq3.mjs.map"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"renderer-CwFqqpWY.mjs","names":[],"sources":["../../../nodes/node-halftone-screen/dist/renderers-CvluQiq3.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { unwrapFrameParam } from \"@framefields/node-sdk\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice, signalTextureView, signalTiming, texturesLayout } from \"@framefields/node-sdk/gpu\";\nimport { parseColor } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst WGSL_HALFTONE_SHADER = `\nstruct HalftoneUniforms {\n mode : f32, // 0 = Monochrome, 1 = CMYK\n dotShape : f32, // 0 = Circle, 1 = Diamond, 2 = Line, 3 = Square\n frequency : f32,\n angle : f32,\n\n contrast : f32,\n invert : f32,\n isSmooth : f32,\n opacity : f32,\n\n dotColor : vec4<f32>,\n paperColor : vec4<f32>,\n\n cyanAngle : f32,\n magentaAngle : f32,\n yellowAngle : f32,\n blackAngle : f32,\n\n hasFreqSig : f32,\n hasAngleSig : f32,\n hasContrastSig : f32,\n hasCyanSig : f32,\n\n hasMagSig : f32,\n hasYelSig : f32,\n hasBlkSig : f32,\n hasOpacitySig : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : HalftoneUniforms;\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 freqSigTex : texture_2d<f32>;\n@group(2) @binding(1) var angleSigTex : texture_2d<f32>;\n@group(2) @binding(2) var contrastSigTex : texture_2d<f32>;\n@group(2) @binding(3) var cyanSigTex : texture_2d<f32>;\n@group(2) @binding(4) var magSigTex : texture_2d<f32>;\n@group(2) @binding(5) var yelSigTex : texture_2d<f32>;\n@group(2) @binding(6) var blkSigTex : texture_2d<f32>;\n@group(2) @binding(7) var opacitySigTex : texture_2d<f32>;\n@group(2) @binding(8) var signalSamp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nconst PI: f32 = 3.141592653589793;\n\nfn getCellCenterUV(\n uv: vec2<f32>,\n dimensions: vec2<f32>,\n screenAngleDeg: f32,\n freq: f32\n) -> vec2<f32> {\n let rad = screenAngleDeg * PI / 180.0;\n let cosA = cos(rad);\n let sinA = sin(rad);\n let rot = mat2x2<f32>(cosA, -sinA, sinA, cosA);\n let invRot = mat2x2<f32>(cosA, sinA, -sinA, cosA);\n\n let minDim = min(dimensions.x, dimensions.y);\n let cellSize = max(minDim / max(freq, 1.0), 1.0);\n\n let center = dimensions * 0.5;\n let pixelPos = (uv * dimensions) - center;\n let rotPos = rot * pixelPos;\n\n let cellIndex = floor(rotPos / cellSize) + vec2<f32>(0.5);\n let cellCenterRot = cellIndex * cellSize;\n let cellCenterPixelPos = invRot * cellCenterRot;\n let cellCenterUV = (cellCenterPixelPos + center) / dimensions;\n return clamp(cellCenterUV, vec2<f32>(0.0), vec2<f32>(1.0));\n}\n\nfn evalDotCoverage(\n uv: vec2<f32>,\n dimensions: vec2<f32>,\n screenAngleDeg: f32,\n freq: f32,\n shape: f32,\n density: f32,\n contrastMultiplier: f32,\n isSmooth: f32\n) -> f32 {\n var d = clamp((density - 0.5) * contrastMultiplier + 0.5, 0.0, 1.0);\n if (d <= 0.0001) { return 0.0; }\n if (d >= 0.9999) { return 1.0; }\n\n let rad = screenAngleDeg * PI / 180.0;\n let cosA = cos(rad);\n let sinA = sin(rad);\n let rot = mat2x2<f32>(cosA, -sinA, sinA, cosA);\n\n let minDim = min(dimensions.x, dimensions.y);\n let cellSize = max(minDim / max(freq, 1.0), 1.0);\n\n let center = dimensions * 0.5;\n let pixelPos = (uv * dimensions) - center;\n let rotPos = rot * pixelPos;\n\n let cellUV = fract(rotPos / cellSize) - vec2<f32>(0.5);\n\n var spot: f32 = 0.0;\n\n if (shape < 0.5) {\n // 0: Euclidean Round Dot\n spot = 0.5 * (1.0 - (cos(cellUV.x * 2.0 * PI) + cos(cellUV.y * 2.0 * PI)) * 0.5);\n } else if (shape < 1.5) {\n // 1: Diamond\n spot = abs(cellUV.x) + abs(cellUV.y);\n } else if (shape < 2.5) {\n // 2: Line\n spot = abs(cellUV.y) * 2.0;\n } else {\n // 3: Square\n spot = max(abs(cellUV.x), abs(cellUV.y)) * 2.0;\n }\n\n let edgeWidth = select(0.001, max(1.5 / cellSize, 0.003), isSmooth > 0.5);\n\n return select(\n step(spot, d),\n smoothstep(d + edgeWidth, d - edgeWidth, spot),\n isSmooth > 0.5\n );\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n let sourceCol = textureSampleLevel(tex, samp, in.uv, 0.0);\n if (sourceCol.a < 1e-5) {\n return sourceCol;\n }\n\n // Resolve parameter overrides or dynamic signals\n var frequency = u.frequency;\n if (u.hasFreqSig > 0.5) {\n frequency = textureSampleLevel(freqSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var baseAngle = u.angle;\n if (u.hasAngleSig > 0.5) {\n baseAngle = textureSampleLevel(angleSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var contrast = u.contrast;\n if (u.hasContrastSig > 0.5) {\n contrast = textureSampleLevel(contrastSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var cyanAngle = u.cyanAngle;\n if (u.hasCyanSig > 0.5) {\n cyanAngle = textureSampleLevel(cyanSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var magentaAngle = u.magentaAngle;\n if (u.hasMagSig > 0.5) {\n magentaAngle = textureSampleLevel(magSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var yellowAngle = u.yellowAngle;\n if (u.hasYelSig > 0.5) {\n yellowAngle = textureSampleLevel(yelSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var blackAngle = u.blackAngle;\n if (u.hasBlkSig > 0.5) {\n blackAngle = textureSampleLevel(blkSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var effectOpacity = u.opacity;\n if (u.hasOpacitySig > 0.5) {\n effectOpacity = textureSampleLevel(opacitySigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n let dimensions = vec2<f32>(textureDimensions(tex));\n let unpremult = sourceCol.rgb / sourceCol.a;\n\n var screenedRgb: vec3<f32>;\n\n if (u.mode < 0.5) {\n // --- Monochrome Mode ---\n let cellCenterUV = getCellCenterUV(in.uv, dimensions, baseAngle, frequency);\n let cellCol = textureSampleLevel(tex, samp, cellCenterUV, 0.0);\n let cellRgb = select(cellCol.rgb, cellCol.rgb / cellCol.a, cellCol.a > 1e-5);\n let luminance = dot(cellRgb, vec3<f32>(0.2126, 0.7152, 0.0722));\n var inkDensity = 1.0 - luminance;\n if (u.invert > 0.5) {\n inkDensity = luminance;\n }\n\n let coverage = evalDotCoverage(\n in.uv,\n dimensions,\n baseAngle,\n frequency,\n u.dotShape,\n inkDensity,\n contrast,\n u.isSmooth\n );\n\n screenedRgb = mix(u.paperColor.rgb, u.dotColor.rgb, coverage);\n } else {\n // --- CMYK Mode ---\n let cellCenterUVC = getCellCenterUV(in.uv, dimensions, baseAngle + cyanAngle, frequency);\n let colC = textureSampleLevel(tex, samp, cellCenterUVC, 0.0);\n let rgbC = select(colC.rgb, colC.rgb / colC.a, colC.a > 1e-5);\n let kC = 1.0 - max(max(rgbC.r, rgbC.g), rgbC.b);\n let invKC = 1.0 - kC;\n var densC = select(0.0, clamp((1.0 - rgbC.r - kC) / max(invKC, 0.0001), 0.0, 1.0), invKC > 0.0001);\n\n let cellCenterUVM = getCellCenterUV(in.uv, dimensions, baseAngle + magentaAngle, frequency);\n let colM = textureSampleLevel(tex, samp, cellCenterUVM, 0.0);\n let rgbM = select(colM.rgb, colM.rgb / colM.a, colM.a > 1e-5);\n let kM = 1.0 - max(max(rgbM.r, rgbM.g), rgbM.b);\n let invKM = 1.0 - kM;\n var densM = select(0.0, clamp((1.0 - rgbM.g - kM) / max(invKM, 0.0001), 0.0, 1.0), invKM > 0.0001);\n\n let cellCenterUVY = getCellCenterUV(in.uv, dimensions, baseAngle + yellowAngle, frequency);\n let colY = textureSampleLevel(tex, samp, cellCenterUVY, 0.0);\n let rgbY = select(colY.rgb, colY.rgb / colY.a, colY.a > 1e-5);\n let kY = 1.0 - max(max(rgbY.r, rgbY.g), rgbY.b);\n let invKY = 1.0 - kY;\n var densY = select(0.0, clamp((1.0 - rgbY.b - kY) / max(invKY, 0.0001), 0.0, 1.0), invKY > 0.0001);\n\n let cellCenterUVK = getCellCenterUV(in.uv, dimensions, baseAngle + blackAngle, frequency);\n let colK = textureSampleLevel(tex, samp, cellCenterUVK, 0.0);\n let rgbK = select(colK.rgb, colK.rgb / colK.a, colK.a > 1e-5);\n var densK = 1.0 - max(max(rgbK.r, rgbK.g), rgbK.b);\n\n if (u.invert > 0.5) {\n densC = 1.0 - densC;\n densM = 1.0 - densM;\n densY = 1.0 - densY;\n densK = 1.0 - densK;\n }\n\n let covC = evalDotCoverage(in.uv, dimensions, baseAngle + cyanAngle, frequency, u.dotShape, densC, contrast, u.isSmooth);\n let covM = evalDotCoverage(in.uv, dimensions, baseAngle + magentaAngle, frequency, u.dotShape, densM, contrast, u.isSmooth);\n let covY = evalDotCoverage(in.uv, dimensions, baseAngle + yellowAngle, frequency, u.dotShape, densY, contrast, u.isSmooth);\n let covK = evalDotCoverage(in.uv, dimensions, baseAngle + blackAngle, frequency, u.dotShape, densK, contrast, u.isSmooth);\n\n // Subtractive synthesis onto paper substrate\n let outR = u.paperColor.r * (1.0 - covC) * (1.0 - covK);\n let outG = u.paperColor.g * (1.0 - covM) * (1.0 - covK);\n let outB = u.paperColor.b * (1.0 - covY) * (1.0 - covK);\n\n screenedRgb = clamp(vec3<f32>(outR, outG, outB), vec3<f32>(0.0), vec3<f32>(1.0));\n }\n\n // Apply effect opacity blend\n let finalRgb = mix(unpremult, screenedRgb, clamp(effectOpacity, 0.0, 1.0));\n return vec4<f32>(finalRgb * sourceCol.a, sourceCol.a);\n}\n`;\nconst getDeviceLayouts = perDevice((device) => ({\n\tuniformLayout: fragmentBindGroupLayout(device, [\"uniform\"]),\n\tsingleTextureLayout: fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]),\n\tsignalTextureLayout: texturesLayout(device, 8),\n\tpipelineCache: /* @__PURE__ */ new Map()\n}));\nfunction getHalftoneResources(device, format) {\n\tconst layouts = getDeviceLayouts(device);\n\tconst cacheKey = `halftone_${format}`;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst halftoneModule = device.createShaderModule({\n\t\t\tlabel: `halftone_${format}.wgsl`,\n\t\t\tcode: WGSL_HALFTONE_SHADER\n\t\t});\n\t\tpipeline = createFullscreenPipeline(device, {\n\t\t\tlabel: `HalftonePipeline_${format}`,\n\t\t\tmodule: halftoneModule,\n\t\t\tlayouts: [\n\t\t\t\tlayouts.uniformLayout,\n\t\t\t\tlayouts.singleTextureLayout,\n\t\t\t\tlayouts.signalTextureLayout\n\t\t\t],\n\t\t\tformat\n\t\t});\n\t\tlayouts.pipelineCache.set(cacheKey, pipeline);\n\t}\n\treturn {\n\t\thalftonePipeline: pipeline,\n\t\tuniformLayout: layouts.uniformLayout,\n\t\tsingleTextureLayout: layouts.singleTextureLayout,\n\t\tsignalTextureLayout: layouts.signalTextureLayout\n\t};\n}\nconst HalftoneScreenWebGPURenderer = 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 !== \"HalftoneScreen\" || !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 nodeId = op.inputs ? Object.keys(op.inputs)[0] : \"halftone_node\";\n\tconst resolveBindable = (configKey, defaultValue, 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\");\n\t\tconst sd = hasSignal && input?.outputItem?.data ? input.outputItem.data : null;\n\t\tlet val = defaultValue;\n\t\tlet hasStaticSig = false;\n\t\tif (!hasSignal) if (input?.connectionValid && input.outputItem?.type === \"Number\") val = Math.max(minVal, Math.min(maxVal, Number(input.outputItem.data ?? defaultValue)));\n\t\telse {\n\t\t\tconst rawVal = unwrapFrameParam(op[configKey], compositionFrame, fps).value;\n\t\t\tval = Math.max(minVal, Math.min(maxVal, Number(rawVal ?? defaultValue)));\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 freqRes = resolveBindable(\"frequency\", 30, 1, 200);\n\tconst angleRes = resolveBindable(\"angle\", 45, 0, 360);\n\tconst contrastRes = resolveBindable(\"contrast\", 1, .1, 5);\n\tconst cyanRes = resolveBindable(\"cyanAngle\", 15, 0, 360);\n\tconst magRes = resolveBindable(\"magentaAngle\", 75, 0, 360);\n\tconst yelRes = resolveBindable(\"yellowAngle\", 0, 0, 360);\n\tconst blkRes = resolveBindable(\"blackAngle\", 45, 0, 360);\n\tconst opacityRes = resolveBindable(\"opacity\", 1, 0, 1);\n\tconst { texture: tmpTex } = await drawChildToTexture(args, childMedia);\n\tconst { halftonePipeline: pipeline, uniformLayout: uLayout, singleTextureLayout: tLayout, signalTextureLayout: sigLayout } = getHalftoneResources(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 freqView = getSignalView(freqRes, \"freq_sig\");\n\tconst angleView = getSignalView(angleRes, \"angle_sig\");\n\tconst contrastView = getSignalView(contrastRes, \"contrast_sig\");\n\tconst cyanView = getSignalView(cyanRes, \"cyan_sig\");\n\tconst magView = getSignalView(magRes, \"mag_sig\");\n\tconst yelView = getSignalView(yelRes, \"yel_sig\");\n\tconst blkView = getSignalView(blkRes, \"blk_sig\");\n\tconst opacityView = getSignalView(opacityRes, \"opacity_sig\");\n\tconst modeVal = op.mode === \"CMYK\" ? 1 : 0;\n\tlet dotShapeVal = 0;\n\tif (op.dotShape === \"Diamond\") dotShapeVal = 1;\n\telse if (op.dotShape === \"Line\") dotShapeVal = 2;\n\telse if (op.dotShape === \"Square\") dotShapeVal = 3;\n\tconst dotCol = parseColor(op.dotColor ?? \"#000000\");\n\tconst paperCol = parseColor(op.paperColor ?? \"#ffffff\");\n\tconst halftoneUniformData = new Float32Array(28);\n\thalftoneUniformData[0] = modeVal;\n\thalftoneUniformData[1] = dotShapeVal;\n\thalftoneUniformData[2] = freqRes.val;\n\thalftoneUniformData[3] = angleRes.val;\n\thalftoneUniformData[4] = contrastRes.val;\n\thalftoneUniformData[5] = op.invert ? 1 : 0;\n\thalftoneUniformData[6] = op.smooth !== false ? 1 : 0;\n\thalftoneUniformData[7] = opacityRes.val;\n\thalftoneUniformData[8] = dotCol.r;\n\thalftoneUniformData[9] = dotCol.g;\n\thalftoneUniformData[10] = dotCol.b;\n\thalftoneUniformData[11] = dotCol.a;\n\thalftoneUniformData[12] = paperCol.r;\n\thalftoneUniformData[13] = paperCol.g;\n\thalftoneUniformData[14] = paperCol.b;\n\thalftoneUniformData[15] = paperCol.a;\n\thalftoneUniformData[16] = cyanRes.val;\n\thalftoneUniformData[17] = magRes.val;\n\thalftoneUniformData[18] = yelRes.val;\n\thalftoneUniformData[19] = blkRes.val;\n\thalftoneUniformData[20] = freqRes.hasStaticSig ? 1 : 0;\n\thalftoneUniformData[21] = angleRes.hasStaticSig ? 1 : 0;\n\thalftoneUniformData[22] = contrastRes.hasStaticSig ? 1 : 0;\n\thalftoneUniformData[23] = cyanRes.hasStaticSig ? 1 : 0;\n\thalftoneUniformData[24] = magRes.hasStaticSig ? 1 : 0;\n\thalftoneUniformData[25] = yelRes.hasStaticSig ? 1 : 0;\n\thalftoneUniformData[26] = blkRes.hasStaticSig ? 1 : 0;\n\thalftoneUniformData[27] = opacityRes.hasStaticSig ? 1 : 0;\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(halftoneUniformData);\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, [\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: uniformBuffer }\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: freqView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: angleView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: contrastView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: cyanView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 4,\n\t\t\t\t\tresource: magView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 5,\n\t\t\t\t\tresource: yelView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 6,\n\t\t\t\t\tresource: blkView\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]);\n\tdrawTextureToTarget(args, outTex);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: HalftoneScreenWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-CvluQiq3.mjs.map"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { n as defineRenderer } from "./renderer-mNSyac1V.mjs";
|
|
2
|
-
import { o as drawChildToTexture, t as FULLSCREEN_QUAD_WGSL } from "./gpu-
|
|
2
|
+
import { o as drawChildToTexture, t as FULLSCREEN_QUAD_WGSL } from "./gpu-CMaa63nz.mjs";
|
|
3
3
|
|
|
4
4
|
//#region ../../nodes/node-crop/dist/renderers-BE15Jhmk.mjs
|
|
5
5
|
const maskWgsl = `
|
|
@@ -238,4 +238,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: CropWebGPURenderer });
|
|
|
238
238
|
|
|
239
239
|
//#endregion
|
|
240
240
|
export { renderers_default as t };
|
|
241
|
-
//# sourceMappingURL=renderer-
|
|
241
|
+
//# sourceMappingURL=renderer-D47AEJE_.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-D7Cu9OZx.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-D47AEJE_.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,6 +1,6 @@
|
|
|
1
1
|
import { n as defineRenderer, s as resolveHandleParam } from "./renderer-mNSyac1V.mjs";
|
|
2
2
|
import { a as configBuilder, i as VideoResultSchema, n as ImageResultSchema } from "./dist-DVMepKaO.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, t as FULLSCREEN_QUAD_WGSL } from "./gpu-
|
|
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, t as FULLSCREEN_QUAD_WGSL } from "./gpu-CMaa63nz.mjs";
|
|
4
4
|
import { z } from "zod";
|
|
5
5
|
|
|
6
6
|
//#region ../../nodes/node-refine-edge/dist/renderers-BAo85yKE.mjs
|
|
@@ -565,4 +565,4 @@ var renderers_default = defineRenderer({ WebGPURenderer });
|
|
|
565
565
|
|
|
566
566
|
//#endregion
|
|
567
567
|
export { renderers_default as n, WebGPURenderer as t };
|
|
568
|
-
//# sourceMappingURL=renderer-
|
|
568
|
+
//# sourceMappingURL=renderer-D61B9bXF.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-DPn2DhMU.mjs","names":[],"sources":["../../../nodes/node-refine-edge/dist/renderers-BAo85yKE.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { ImageResultSchema, VideoResultSchema, configBuilder, resolveHandleParam } from \"@framefields/node-sdk\";\nimport { FULLSCREEN_QUAD_WGSL, 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 MIN_DECONTAMINATE = 0;\nconst MAX_DECONTAMINATE = 1;\nconst MIN_RADIUS = .5;\nconst MAX_RADIUS = 50;\nconst MIN_SMOOTH = 0;\nconst MAX_SMOOTH = 100;\nconst MIN_FEATHER = 0;\nconst MAX_FEATHER = 50;\nconst MIN_SHIFT_EDGE = -100;\nconst MAX_SHIFT_EDGE = 100;\nconst MatteChannelEnum = z.enum([\n\t\"Alpha\",\n\t\"Luminance\",\n\t\"Red\",\n\t\"Green\",\n\t\"Blue\"\n]);\nconst RefineEdgeOutputModeEnum = z.enum([\n\t\"Composite\",\n\t\"MatteOnly\",\n\t\"DecontaminatedRGB\"\n]);\nconst refineEdgeConfig = configBuilder().field(\"decontaminateAmount\", z.number().multipleOf(.01).min(MIN_DECONTAMINATE).max(MAX_DECONTAMINATE).default(.7), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Decontaminate Colors\",\n\tdescription: \"Amount of edge color spill decontamination/defringing (0.0–1.0).\"\n}).field(\"radius\", z.number().multipleOf(.1).min(MIN_RADIUS).max(MAX_RADIUS).default(2), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Edge Detection Radius (px)\",\n\tdescription: \"Radius in pixels around alpha transitions to refine and decontaminate.\"\n}).field(\"smooth\", z.number().min(MIN_SMOOTH).max(MAX_SMOOTH).default(5), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Smoothness\",\n\tdescription: \"Matte edge smoothing curve intensity (0–100).\"\n}).field(\"feather\", z.number().multipleOf(.1).min(MIN_FEATHER).max(MAX_FEATHER).default(.5), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Feather (px)\",\n\tdescription: \"Sub-pixel gaussian softness along the matte boundary.\"\n}).field(\"shiftEdge\", z.number().min(MIN_SHIFT_EDGE).max(MAX_SHIFT_EDGE).default(0), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Shift Edge (%)\",\n\tdescription: \"Contract (<0) or expand (>0) the edge boundary (-100% to +100%).\"\n}).field(\"matteChannel\", MatteChannelEnum.default(\"Alpha\"), {\n\tlabel: \"Matte Channel\",\n\tdescription: \"Channel to extract matte from (Alpha, Luminance, Red, Green, Blue).\"\n}).field(\"outputMode\", RefineEdgeOutputModeEnum.default(\"Composite\"), {\n\tlabel: \"Output Mode\",\n\tdescription: \"Composite (decontaminated RGB + refined alpha), MatteOnly (grayscale mask), DecontaminatedRGB (clean RGB with full alpha).\"\n}).build();\nconst RefineEdgeNodeConfigSchema = refineEdgeConfig.schema;\nconst RefineEdgeResultSchema = z.union([ImageResultSchema, VideoResultSchema]);\nconst REFINE_EDGE_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 CHANNEL_MAP = {\n\tAlpha: 0,\n\tLuminance: 1,\n\tRed: 2,\n\tGreen: 3,\n\tBlue: 4\n};\nconst OUTPUT_MODE_MAP = {\n\tComposite: 0,\n\tMatteOnly: 1,\n\tDecontaminatedRGB: 2\n};\nconst WGSL_REFINE_EDGE = `\nstruct RefineEdgeUniforms {\n\tdirX : f32,\n\tdirY : f32,\n\tdecontaminateAmount : f32,\n\tradius : f32,\n\n\tsmoothness : f32,\n\tfeather : f32,\n\tshiftEdge : f32,\n\tmatteChannel : f32,\n\n\toutputMode : f32,\n\thasMatte : f32,\n\thasDecontamSig : f32,\n\thasRadiusSig : f32,\n\n\thasSmoothSig : f32,\n\thasFeatherSig : f32,\n\thasShiftEdgeSig : f32,\n\tisSecondPass : f32,\n\n\tpad0 : f32,\n\tpad1 : f32,\n\tpad2 : f32,\n\tpad3 : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : RefineEdgeUniforms;\n\n@group(1) @binding(0) var texInput : texture_2d<f32>;\n@group(1) @binding(1) var texMatte : texture_2d<f32>;\n@group(1) @binding(2) var origTex : texture_2d<f32>;\n@group(1) @binding(3) var samp : sampler;\n\n@group(2) @binding(0) var decontamSigTex : texture_2d<f32>;\n@group(2) @binding(1) var radiusSigTex : texture_2d<f32>;\n@group(2) @binding(2) var smoothSigTex : texture_2d<f32>;\n@group(2) @binding(3) var featherSigTex : texture_2d<f32>;\n@group(2) @binding(4) var shiftEdgeSigTex : texture_2d<f32>;\n@group(2) @binding(5) var signalSamp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn extractChannel(color : vec4<f32>, chCode : f32) -> f32 {\n\tif (chCode < 0.5) {\n\t\t// Alpha\n\t\treturn color.a;\n\t} else if (chCode < 1.5) {\n\t\t// Luminance\n\t\tlet luma = dot(color.rgb, vec3<f32>(0.2126, 0.7152, 0.0722));\n\t\tif (color.a > 1e-4) {\n\t\t\treturn min(1.0, luma / color.a);\n\t\t}\n\t\treturn luma;\n\t} else if (chCode < 2.5) {\n\t\t// Red\n\t\tif (color.a > 1e-4) {\n\t\t\treturn min(1.0, color.r / color.a);\n\t\t}\n\t\treturn color.r;\n\t} else if (chCode < 3.5) {\n\t\t// Green\n\t\tif (color.a > 1e-4) {\n\t\t\treturn min(1.0, color.g / color.a);\n\t\t}\n\t\treturn color.g;\n\t} else {\n\t\t// Blue\n\t\tif (color.a > 1e-4) {\n\t\t\treturn min(1.0, color.b / color.a);\n\t\t}\n\t\treturn color.b;\n\t}\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet dimensions = vec2<f32>(textureDimensions(texInput));\n\tlet texelSize = 1.0 / max(dimensions, vec2<f32>(1.0, 1.0));\n\n\tvar decontam = u.decontaminateAmount;\n\tif (u.hasDecontamSig > 0.5) {\n\t\tdecontam = clamp(textureSampleLevel(decontamSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, 0.0, 1.0);\n\t}\n\tvar radius = u.radius;\n\tif (u.hasRadiusSig > 0.5) {\n\t\tradius = clamp(textureSampleLevel(radiusSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, 0.5, 50.0);\n\t}\n\tvar smoothVal = u.smoothness;\n\tif (u.hasSmoothSig > 0.5) {\n\t\tsmoothVal = clamp(textureSampleLevel(smoothSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, 0.0, 100.0);\n\t}\n\tvar featherVal = u.feather;\n\tif (u.hasFeatherSig > 0.5) {\n\t\tfeatherVal = clamp(textureSampleLevel(featherSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, 0.0, 50.0);\n\t}\n\tvar shiftEdgeVal = u.shiftEdge;\n\tif (u.hasShiftEdgeSig > 0.5) {\n\t\tshiftEdgeVal = clamp(textureSampleLevel(shiftEdgeSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, -100.0, 100.0);\n\t}\n\n\tlet direction = vec2<f32>(u.dirX, u.dirY);\n\n\t// Combined sigma for smoothing & feathering\n\tlet smoothSigma = max(0.0, smoothVal * 0.15);\n\tlet featherSigma = max(0.0, featherVal);\n\tlet totalSigma = max(0.1, sqrt(smoothSigma * smoothSigma + featherSigma * featherSigma));\n\n\tif (u.isSecondPass <= 0.5) {\n\t\t// =============================================================\n\t\t// PASS 1: Horizontal Pass (Alpha filter + FG color sampling)\n\t\t// =============================================================\n\t\tlet centerInput = textureSampleLevel(texInput, samp, in.uv, 0.0);\n\t\tlet centerMatte = textureSampleLevel(texMatte, samp, in.uv, 0.0);\n\n\t\tvar centerRawAlpha = centerInput.a;\n\t\tif (u.hasMatte > 0.5) {\n\t\t\tcenterRawAlpha = extractChannel(centerMatte, u.matteChannel);\n\t\t}\n\n\t\t// 1. Horizontal Alpha Blur / Filter\n\t\tvar alphaAccum = 0.0;\n\t\tvar alphaWeightSum = 0.0;\n\n\t\tlet stepScale = max(1.0, totalSigma / 15.0);\n\t\tlet effectiveSigma = totalSigma / stepScale;\n\t\tlet sampleRadius = min(i32(ceil(3.0 * effectiveSigma)), 32);\n\n\t\tfor (var i = -sampleRadius; i <= sampleRadius; i++) {\n\t\t\tlet offset = vec2<f32>(f32(i) * stepScale) * direction * texelSize;\n\t\t\tlet sampleUv = clamp(in.uv + offset, vec2<f32>(0.0), vec2<f32>(1.0));\n\t\t\tlet sampleInput = textureSampleLevel(texInput, samp, sampleUv, 0.0);\n\t\t\tvar sAlpha = sampleInput.a;\n\t\t\tif (u.hasMatte > 0.5) {\n\t\t\t\tlet sMatte = textureSampleLevel(texMatte, samp, sampleUv, 0.0);\n\t\t\t\tsAlpha = extractChannel(sMatte, u.matteChannel);\n\t\t\t}\n\n\t\t\tlet dist = f32(i) * stepScale;\n\t\t\tlet weight = exp(-0.5 * (dist / totalSigma) * (dist / totalSigma));\n\t\t\talphaAccum += sAlpha * weight;\n\t\t\talphaWeightSum += weight;\n\t\t}\n\n\t\tlet smoothedAlpha = alphaAccum / max(alphaWeightSum, 1e-5);\n\n\t\t// 2. Horizontal Foreground Color Sampling for Defringing\n\t\tvar fgColorAccum = vec3<f32>(0.0);\n\t\tvar fgWeightSum = 0.0;\n\n\t\tlet rStepScale = max(1.0, radius / 15.0);\n\t\tlet rSampleCount = min(i32(ceil(radius / rStepScale)), 32);\n\n\t\tfor (var i = -rSampleCount; i <= rSampleCount; i++) {\n\t\t\tlet offset = vec2<f32>(f32(i) * rStepScale) * direction * texelSize;\n\t\t\tlet sampleUv = clamp(in.uv + offset, vec2<f32>(0.0), vec2<f32>(1.0));\n\t\t\tlet sampleCol = textureSampleLevel(texInput, samp, sampleUv, 0.0);\n\t\t\tvar sampleA = sampleCol.a;\n\t\t\tif (u.hasMatte > 0.5) {\n\t\t\t\tlet sm = textureSampleLevel(texMatte, samp, sampleUv, 0.0);\n\t\t\t\tsampleA = extractChannel(sm, u.matteChannel);\n\t\t\t}\n\n\t\t\tlet sampleRgb = select(sampleCol.rgb, sampleCol.rgb / max(sampleCol.a, 1e-4), sampleCol.a > 1e-4);\n\t\t\tlet spatialDist = f32(i) * rStepScale;\n\t\t\tlet spatialWeight = exp(-0.5 * (spatialDist / max(radius, 0.5)) * (spatialDist / max(radius, 0.5)));\n\t\t\t// Weight foreground pixels by alpha confidence\n\t\t\tlet fgConfidence = clamp((sampleA - 0.2) / 0.8, 0.0, 1.0);\n\t\t\tlet weight = fgConfidence * spatialWeight;\n\n\t\t\tfgColorAccum += sampleRgb * weight;\n\t\t\tfgWeightSum += weight;\n\t\t}\n\n\t\tlet centerUnpremult = select(centerInput.rgb, centerInput.rgb / max(centerInput.a, 1e-4), centerInput.a > 1e-4);\n\t\tlet fgColor = select(centerUnpremult, fgColorAccum / max(fgWeightSum, 1e-5), fgWeightSum > 1e-4);\n\n\t\treturn vec4<f32>(fgColor, smoothedAlpha);\n\t}\n\n\t// =============================================================\n\t// PASS 2: Vertical Pass & Final Defringe/Composite\n\t// =============================================================\n\tlet pass1Sample = textureSampleLevel(texInput, samp, in.uv, 0.0);\n\tlet origSample = textureSampleLevel(origTex, samp, in.uv, 0.0);\n\n\tvar rawMatteAlpha = origSample.a;\n\tif (u.hasMatte > 0.5) {\n\t\tlet rawMatteSample = textureSampleLevel(texMatte, samp, in.uv, 0.0);\n\t\trawMatteAlpha = extractChannel(rawMatteSample, u.matteChannel);\n\t}\n\n\t// 1. Vertical Alpha Blur / Filter\n\tvar alphaAccum = 0.0;\n\tvar alphaWeightSum = 0.0;\n\n\tlet stepScale = max(1.0, totalSigma / 15.0);\n\tlet effectiveSigma = totalSigma / stepScale;\n\tlet sampleRadius = min(i32(ceil(3.0 * effectiveSigma)), 32);\n\n\tfor (var i = -sampleRadius; i <= sampleRadius; i++) {\n\t\tlet offset = vec2<f32>(f32(i) * stepScale) * direction * texelSize;\n\t\tlet sampleUv = clamp(in.uv + offset, vec2<f32>(0.0), vec2<f32>(1.0));\n\t\tlet sPass1 = textureSampleLevel(texInput, samp, sampleUv, 0.0);\n\t\tlet sAlpha = sPass1.a;\n\n\t\tlet dist = f32(i) * stepScale;\n\t\tlet weight = exp(-0.5 * (dist / totalSigma) * (dist / totalSigma));\n\t\talphaAccum += sAlpha * weight;\n\t\talphaWeightSum += weight;\n\t}\n\n\tvar refinedAlpha = alphaAccum / max(alphaWeightSum, 1e-5);\n\n\t// 2. Shift Edge (Choke < 0 or Expand > 0)\n\tif (abs(shiftEdgeVal) > 0.01) {\n\t\tlet shiftNorm = shiftEdgeVal / 100.0;\n\t\tif (shiftNorm < 0.0) {\n\t\t\t// Contract / Choke\n\t\t\tlet chokeLimit = abs(shiftNorm);\n\t\t\trefinedAlpha = clamp((refinedAlpha - chokeLimit) / max(1.0 - chokeLimit, 1e-4), 0.0, 1.0);\n\t\t} else {\n\t\t\t// Expand / Dilate\n\t\t\trefinedAlpha = clamp(refinedAlpha / max(1.0 - shiftNorm, 1e-4), 0.0, 1.0);\n\t\t}\n\t}\n\n\t// 3. Vertical Foreground Color Sampling for Defringing\n\tvar fgColorAccum = vec3<f32>(0.0);\n\tvar fgWeightSum = 0.0;\n\n\tlet rStepScale = max(1.0, radius / 15.0);\n\tlet rSampleCount = min(i32(ceil(radius / rStepScale)), 32);\n\n\tfor (var i = -rSampleCount; i <= rSampleCount; i++) {\n\t\tlet offset = vec2<f32>(f32(i) * rStepScale) * direction * texelSize;\n\t\tlet sampleUv = clamp(in.uv + offset, vec2<f32>(0.0), vec2<f32>(1.0));\n\t\tlet sPass1 = textureSampleLevel(texInput, samp, sampleUv, 0.0);\n\t\tlet sRgb = sPass1.rgb;\n\t\tlet sA = sPass1.a;\n\n\t\tlet spatialDist = f32(i) * rStepScale;\n\t\tlet spatialWeight = exp(-0.5 * (spatialDist / max(radius, 0.5)) * (spatialDist / max(radius, 0.5)));\n\t\tlet fgConfidence = clamp((sA - 0.2) / 0.8, 0.0, 1.0);\n\t\tlet weight = fgConfidence * spatialWeight;\n\n\t\tfgColorAccum += sRgb * weight;\n\t\tfgWeightSum += weight;\n\t}\n\n\tlet origUnpremult = select(origSample.rgb, origSample.rgb / max(origSample.a, 1e-4), origSample.a > 1e-4);\n\tlet fgColor = select(origUnpremult, fgColorAccum / max(fgWeightSum, 1e-5), fgWeightSum > 1e-4);\n\n\t// Edge zone detection: transitions between foreground and background\n\tlet edgeWeight = clamp(4.0 * rawMatteAlpha * (1.0 - rawMatteAlpha), 0.0, 1.0);\n\tlet decontamFactor = clamp(decontam * max(edgeWeight, (1.0 - refinedAlpha) * 0.8), 0.0, 1.0);\n\n\tlet decontaminatedColor = mix(origUnpremult, fgColor, decontamFactor);\n\n\t// Format Output\n\tlet mode = u.outputMode;\n\tif (mode < 0.5) {\n\t\t// Composite: Decontaminated RGB with refined alpha (premultiplied)\n\t\treturn vec4<f32>(decontaminatedColor * refinedAlpha, refinedAlpha);\n\t} else if (mode < 1.5) {\n\t\t// MatteOnly: Grayscale refined alpha mask\n\t\treturn vec4<f32>(refinedAlpha, refinedAlpha, refinedAlpha, 1.0);\n\t} else {\n\t\t// DecontaminatedRGB: Clean defringed RGB with full alpha\n\t\treturn vec4<f32>(decontaminatedColor, 1.0);\n\t}\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nfunction getRefineEdgeResources(device, targetFormat) {\n\tconst cached = deviceResourceCache.get(device);\n\tif (cached) return cached;\n\tconst uniformLayout = fragmentBindGroupLayout(device, [\"uniform\"]);\n\tconst textureLayout = texturesLayout(device, 3);\n\tconst signalTextureLayout = texturesLayout(device, 5);\n\tconst res = {\n\t\tuniformLayout,\n\t\ttextureLayout,\n\t\tsignalTextureLayout,\n\t\tpipeline: createFullscreenPipeline(device, {\n\t\t\tmodule: device.createShaderModule({ code: WGSL_REFINE_EDGE }),\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: targetFormat\n\t\t})\n\t};\n\tdeviceResourceCache.set(device, res);\n\treturn res;\n}\nconst WebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"RefineEdge\" || !op) return;\n\tconst childMedia = props.virtualMedia?.children?.[0];\n\tif (!childMedia) return;\n\tpass.end();\n\tconst frame = props.frame ?? 0;\n\tconst fps = props.fps || 30;\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst resolveField = (handleId, fallbackVal, clampMin = 0, clampMax = 1e3) => resolveHandleParam(op.inputs, handleId, fallbackVal, clampMin, clampMax);\n\tconst decontamRes = resolveField(op.decontaminateAmountHandleId, Number(op.decontaminateAmount ?? .7), MIN_DECONTAMINATE, MAX_DECONTAMINATE);\n\tconst radiusRes = resolveField(op.radiusHandleId, Number(op.radius ?? 2), MIN_RADIUS, MAX_RADIUS);\n\tconst smoothRes = resolveField(op.smoothHandleId, Number(op.smooth ?? 5), MIN_SMOOTH, MAX_SMOOTH);\n\tconst featherRes = resolveField(op.featherHandleId, Number(op.feather ?? .5), MIN_FEATHER, MAX_FEATHER);\n\tconst shiftEdgeRes = resolveField(op.shiftEdgeHandleId, Number(op.shiftEdge ?? 0), MIN_SHIFT_EDGE, MAX_SHIFT_EDGE);\n\tconst { texture: tmpInputTex, view: tmpInputView } = await drawChildToTexture(args, childMedia, { props: {\n\t\t...props,\n\t\tvirtualMedia: childMedia,\n\t\trenderId: `${props.renderId}-input`\n\t} });\n\tlet tmpMatteTex = null;\n\tif (op.matteMedia) ({texture: tmpMatteTex} = await drawChildToTexture(args, op.matteMedia, {\n\t\tprops: {\n\t\t\t...props,\n\t\t\tvirtualMedia: op.matteMedia,\n\t\t\trenderId: `${props.renderId}-matte`,\n\t\t\texcludeTextures: [...props.excludeTextures || [], tmpInputTex]\n\t\t},\n\t\texclude: [tmpInputTex]\n\t}));\n\tconst { pipeline, uniformLayout, textureLayout, signalTextureLayout } = getRefineEdgeResources(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, res.handleId ?? `${props.renderId ?? \"refineedge\"}_${suffix}`);\n\tconst decontamView = getSignalView(decontamRes, \"decontam_sig\");\n\tconst radiusView = getSignalView(radiusRes, \"radius_sig\");\n\tconst smoothView = getSignalView(smoothRes, \"smooth_sig\");\n\tconst featherView = getSignalView(featherRes, \"feather_sig\");\n\tconst shiftEdgeView = getSignalView(shiftEdgeRes, \"shiftEdge_sig\");\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: decontamView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: radiusView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: smoothView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tresource: featherView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 4,\n\t\t\t\tresource: shiftEdgeView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 5,\n\t\t\t\tresource: sampler\n\t\t\t}\n\t\t]\n\t});\n\tconst matteChannelCode = CHANNEL_MAP[op.matteChannel ?? \"Alpha\"] ?? 0;\n\tconst outputModeCode = OUTPUT_MODE_MAP[op.outputMode ?? \"Composite\"] ?? 0;\n\tconst dummyMatteView = tmpMatteTex ? tmpMatteTex.createView() : tmpInputView;\n\tconst hUniformData = new Float32Array(20);\n\tconst vUniformData = new Float32Array(20);\n\tconst baseUniforms = [\n\t\t0,\n\t\t0,\n\t\tdecontamRes.val,\n\t\tradiusRes.val,\n\t\tsmoothRes.val,\n\t\tfeatherRes.val,\n\t\tshiftEdgeRes.val,\n\t\tmatteChannelCode,\n\t\toutputModeCode,\n\t\ttmpMatteTex ? 1 : 0,\n\t\tdecontamRes.hasStaticSig ? 1 : 0,\n\t\tradiusRes.hasStaticSig ? 1 : 0,\n\t\tsmoothRes.hasStaticSig ? 1 : 0,\n\t\tfeatherRes.hasStaticSig ? 1 : 0,\n\t\tshiftEdgeRes.hasStaticSig ? 1 : 0,\n\t\t0,\n\t\t0,\n\t\t0,\n\t\t0,\n\t\t0\n\t];\n\thUniformData.set(baseUniforms);\n\thUniformData[0] = 1;\n\thUniformData[1] = 0;\n\thUniformData[15] = 0;\n\tvUniformData.set(baseUniforms);\n\tvUniformData[0] = 0;\n\tvUniformData[1] = 1;\n\tvUniformData[15] = 1;\n\tconst outTex1 = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpInputTex,\n\t\t...tmpMatteTex ? [tmpMatteTex] : [],\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst outTex2 = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpInputTex,\n\t\t...tmpMatteTex ? [tmpMatteTex] : [],\n\t\toutTex1,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst hBuffer = ctx.renderer.getTemporaryBuffer(hUniformData);\n\tdrawFullscreenPass(encoder, outTex1.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: hBuffer }\n\t\t\t}]\n\t\t}),\n\t\tctx.device.createBindGroup({\n\t\t\tlayout: textureLayout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: tmpInputView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: dummyMatteView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: tmpInputView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: sampler\n\t\t\t\t}\n\t\t\t]\n\t\t}),\n\t\tsigBindGroup\n\t]);\n\tconst vBuffer = ctx.renderer.getTemporaryBuffer(vUniformData);\n\tdrawFullscreenPass(encoder, outTex2.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: vBuffer }\n\t\t\t}]\n\t\t}),\n\t\tctx.device.createBindGroup({\n\t\t\tlayout: textureLayout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: outTex1.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: dummyMatteView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: tmpInputView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: sampler\n\t\t\t\t}\n\t\t\t]\n\t\t}),\n\t\tsigBindGroup\n\t]);\n\tdrawTextureToTarget(args, outTex2, props.opacity ?? op.opacity ?? 1);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer });\n\n//#endregion\nexport { RefineEdgeResultSchema as _, MAX_RADIUS as a, MIN_DECONTAMINATE as c, MIN_SHIFT_EDGE as d, MIN_SMOOTH as f, RefineEdgeOutputModeEnum as g, RefineEdgeNodeConfigSchema as h, MAX_FEATHER as i, MIN_FEATHER as l, REFINE_EDGE_OUTPUT_TYPE_MAP as m, WebGPURenderer as n, MAX_SHIFT_EDGE as o, MatteChannelEnum as p, MAX_DECONTAMINATE as r, MAX_SMOOTH as s, renderers_default as t, MIN_RADIUS as u, refineEdgeConfig as v };\n//# sourceMappingURL=renderers-BAo85yKE.mjs.map"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"renderer-D61B9bXF.mjs","names":[],"sources":["../../../nodes/node-refine-edge/dist/renderers-BAo85yKE.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { ImageResultSchema, VideoResultSchema, configBuilder, resolveHandleParam } from \"@framefields/node-sdk\";\nimport { FULLSCREEN_QUAD_WGSL, 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 MIN_DECONTAMINATE = 0;\nconst MAX_DECONTAMINATE = 1;\nconst MIN_RADIUS = .5;\nconst MAX_RADIUS = 50;\nconst MIN_SMOOTH = 0;\nconst MAX_SMOOTH = 100;\nconst MIN_FEATHER = 0;\nconst MAX_FEATHER = 50;\nconst MIN_SHIFT_EDGE = -100;\nconst MAX_SHIFT_EDGE = 100;\nconst MatteChannelEnum = z.enum([\n\t\"Alpha\",\n\t\"Luminance\",\n\t\"Red\",\n\t\"Green\",\n\t\"Blue\"\n]);\nconst RefineEdgeOutputModeEnum = z.enum([\n\t\"Composite\",\n\t\"MatteOnly\",\n\t\"DecontaminatedRGB\"\n]);\nconst refineEdgeConfig = configBuilder().field(\"decontaminateAmount\", z.number().multipleOf(.01).min(MIN_DECONTAMINATE).max(MAX_DECONTAMINATE).default(.7), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Decontaminate Colors\",\n\tdescription: \"Amount of edge color spill decontamination/defringing (0.0–1.0).\"\n}).field(\"radius\", z.number().multipleOf(.1).min(MIN_RADIUS).max(MAX_RADIUS).default(2), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Edge Detection Radius (px)\",\n\tdescription: \"Radius in pixels around alpha transitions to refine and decontaminate.\"\n}).field(\"smooth\", z.number().min(MIN_SMOOTH).max(MAX_SMOOTH).default(5), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Smoothness\",\n\tdescription: \"Matte edge smoothing curve intensity (0–100).\"\n}).field(\"feather\", z.number().multipleOf(.1).min(MIN_FEATHER).max(MAX_FEATHER).default(.5), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Feather (px)\",\n\tdescription: \"Sub-pixel gaussian softness along the matte boundary.\"\n}).field(\"shiftEdge\", z.number().min(MIN_SHIFT_EDGE).max(MAX_SHIFT_EDGE).default(0), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Shift Edge (%)\",\n\tdescription: \"Contract (<0) or expand (>0) the edge boundary (-100% to +100%).\"\n}).field(\"matteChannel\", MatteChannelEnum.default(\"Alpha\"), {\n\tlabel: \"Matte Channel\",\n\tdescription: \"Channel to extract matte from (Alpha, Luminance, Red, Green, Blue).\"\n}).field(\"outputMode\", RefineEdgeOutputModeEnum.default(\"Composite\"), {\n\tlabel: \"Output Mode\",\n\tdescription: \"Composite (decontaminated RGB + refined alpha), MatteOnly (grayscale mask), DecontaminatedRGB (clean RGB with full alpha).\"\n}).build();\nconst RefineEdgeNodeConfigSchema = refineEdgeConfig.schema;\nconst RefineEdgeResultSchema = z.union([ImageResultSchema, VideoResultSchema]);\nconst REFINE_EDGE_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 CHANNEL_MAP = {\n\tAlpha: 0,\n\tLuminance: 1,\n\tRed: 2,\n\tGreen: 3,\n\tBlue: 4\n};\nconst OUTPUT_MODE_MAP = {\n\tComposite: 0,\n\tMatteOnly: 1,\n\tDecontaminatedRGB: 2\n};\nconst WGSL_REFINE_EDGE = `\nstruct RefineEdgeUniforms {\n\tdirX : f32,\n\tdirY : f32,\n\tdecontaminateAmount : f32,\n\tradius : f32,\n\n\tsmoothness : f32,\n\tfeather : f32,\n\tshiftEdge : f32,\n\tmatteChannel : f32,\n\n\toutputMode : f32,\n\thasMatte : f32,\n\thasDecontamSig : f32,\n\thasRadiusSig : f32,\n\n\thasSmoothSig : f32,\n\thasFeatherSig : f32,\n\thasShiftEdgeSig : f32,\n\tisSecondPass : f32,\n\n\tpad0 : f32,\n\tpad1 : f32,\n\tpad2 : f32,\n\tpad3 : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : RefineEdgeUniforms;\n\n@group(1) @binding(0) var texInput : texture_2d<f32>;\n@group(1) @binding(1) var texMatte : texture_2d<f32>;\n@group(1) @binding(2) var origTex : texture_2d<f32>;\n@group(1) @binding(3) var samp : sampler;\n\n@group(2) @binding(0) var decontamSigTex : texture_2d<f32>;\n@group(2) @binding(1) var radiusSigTex : texture_2d<f32>;\n@group(2) @binding(2) var smoothSigTex : texture_2d<f32>;\n@group(2) @binding(3) var featherSigTex : texture_2d<f32>;\n@group(2) @binding(4) var shiftEdgeSigTex : texture_2d<f32>;\n@group(2) @binding(5) var signalSamp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn extractChannel(color : vec4<f32>, chCode : f32) -> f32 {\n\tif (chCode < 0.5) {\n\t\t// Alpha\n\t\treturn color.a;\n\t} else if (chCode < 1.5) {\n\t\t// Luminance\n\t\tlet luma = dot(color.rgb, vec3<f32>(0.2126, 0.7152, 0.0722));\n\t\tif (color.a > 1e-4) {\n\t\t\treturn min(1.0, luma / color.a);\n\t\t}\n\t\treturn luma;\n\t} else if (chCode < 2.5) {\n\t\t// Red\n\t\tif (color.a > 1e-4) {\n\t\t\treturn min(1.0, color.r / color.a);\n\t\t}\n\t\treturn color.r;\n\t} else if (chCode < 3.5) {\n\t\t// Green\n\t\tif (color.a > 1e-4) {\n\t\t\treturn min(1.0, color.g / color.a);\n\t\t}\n\t\treturn color.g;\n\t} else {\n\t\t// Blue\n\t\tif (color.a > 1e-4) {\n\t\t\treturn min(1.0, color.b / color.a);\n\t\t}\n\t\treturn color.b;\n\t}\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet dimensions = vec2<f32>(textureDimensions(texInput));\n\tlet texelSize = 1.0 / max(dimensions, vec2<f32>(1.0, 1.0));\n\n\tvar decontam = u.decontaminateAmount;\n\tif (u.hasDecontamSig > 0.5) {\n\t\tdecontam = clamp(textureSampleLevel(decontamSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, 0.0, 1.0);\n\t}\n\tvar radius = u.radius;\n\tif (u.hasRadiusSig > 0.5) {\n\t\tradius = clamp(textureSampleLevel(radiusSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, 0.5, 50.0);\n\t}\n\tvar smoothVal = u.smoothness;\n\tif (u.hasSmoothSig > 0.5) {\n\t\tsmoothVal = clamp(textureSampleLevel(smoothSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, 0.0, 100.0);\n\t}\n\tvar featherVal = u.feather;\n\tif (u.hasFeatherSig > 0.5) {\n\t\tfeatherVal = clamp(textureSampleLevel(featherSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, 0.0, 50.0);\n\t}\n\tvar shiftEdgeVal = u.shiftEdge;\n\tif (u.hasShiftEdgeSig > 0.5) {\n\t\tshiftEdgeVal = clamp(textureSampleLevel(shiftEdgeSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r, -100.0, 100.0);\n\t}\n\n\tlet direction = vec2<f32>(u.dirX, u.dirY);\n\n\t// Combined sigma for smoothing & feathering\n\tlet smoothSigma = max(0.0, smoothVal * 0.15);\n\tlet featherSigma = max(0.0, featherVal);\n\tlet totalSigma = max(0.1, sqrt(smoothSigma * smoothSigma + featherSigma * featherSigma));\n\n\tif (u.isSecondPass <= 0.5) {\n\t\t// =============================================================\n\t\t// PASS 1: Horizontal Pass (Alpha filter + FG color sampling)\n\t\t// =============================================================\n\t\tlet centerInput = textureSampleLevel(texInput, samp, in.uv, 0.0);\n\t\tlet centerMatte = textureSampleLevel(texMatte, samp, in.uv, 0.0);\n\n\t\tvar centerRawAlpha = centerInput.a;\n\t\tif (u.hasMatte > 0.5) {\n\t\t\tcenterRawAlpha = extractChannel(centerMatte, u.matteChannel);\n\t\t}\n\n\t\t// 1. Horizontal Alpha Blur / Filter\n\t\tvar alphaAccum = 0.0;\n\t\tvar alphaWeightSum = 0.0;\n\n\t\tlet stepScale = max(1.0, totalSigma / 15.0);\n\t\tlet effectiveSigma = totalSigma / stepScale;\n\t\tlet sampleRadius = min(i32(ceil(3.0 * effectiveSigma)), 32);\n\n\t\tfor (var i = -sampleRadius; i <= sampleRadius; i++) {\n\t\t\tlet offset = vec2<f32>(f32(i) * stepScale) * direction * texelSize;\n\t\t\tlet sampleUv = clamp(in.uv + offset, vec2<f32>(0.0), vec2<f32>(1.0));\n\t\t\tlet sampleInput = textureSampleLevel(texInput, samp, sampleUv, 0.0);\n\t\t\tvar sAlpha = sampleInput.a;\n\t\t\tif (u.hasMatte > 0.5) {\n\t\t\t\tlet sMatte = textureSampleLevel(texMatte, samp, sampleUv, 0.0);\n\t\t\t\tsAlpha = extractChannel(sMatte, u.matteChannel);\n\t\t\t}\n\n\t\t\tlet dist = f32(i) * stepScale;\n\t\t\tlet weight = exp(-0.5 * (dist / totalSigma) * (dist / totalSigma));\n\t\t\talphaAccum += sAlpha * weight;\n\t\t\talphaWeightSum += weight;\n\t\t}\n\n\t\tlet smoothedAlpha = alphaAccum / max(alphaWeightSum, 1e-5);\n\n\t\t// 2. Horizontal Foreground Color Sampling for Defringing\n\t\tvar fgColorAccum = vec3<f32>(0.0);\n\t\tvar fgWeightSum = 0.0;\n\n\t\tlet rStepScale = max(1.0, radius / 15.0);\n\t\tlet rSampleCount = min(i32(ceil(radius / rStepScale)), 32);\n\n\t\tfor (var i = -rSampleCount; i <= rSampleCount; i++) {\n\t\t\tlet offset = vec2<f32>(f32(i) * rStepScale) * direction * texelSize;\n\t\t\tlet sampleUv = clamp(in.uv + offset, vec2<f32>(0.0), vec2<f32>(1.0));\n\t\t\tlet sampleCol = textureSampleLevel(texInput, samp, sampleUv, 0.0);\n\t\t\tvar sampleA = sampleCol.a;\n\t\t\tif (u.hasMatte > 0.5) {\n\t\t\t\tlet sm = textureSampleLevel(texMatte, samp, sampleUv, 0.0);\n\t\t\t\tsampleA = extractChannel(sm, u.matteChannel);\n\t\t\t}\n\n\t\t\tlet sampleRgb = select(sampleCol.rgb, sampleCol.rgb / max(sampleCol.a, 1e-4), sampleCol.a > 1e-4);\n\t\t\tlet spatialDist = f32(i) * rStepScale;\n\t\t\tlet spatialWeight = exp(-0.5 * (spatialDist / max(radius, 0.5)) * (spatialDist / max(radius, 0.5)));\n\t\t\t// Weight foreground pixels by alpha confidence\n\t\t\tlet fgConfidence = clamp((sampleA - 0.2) / 0.8, 0.0, 1.0);\n\t\t\tlet weight = fgConfidence * spatialWeight;\n\n\t\t\tfgColorAccum += sampleRgb * weight;\n\t\t\tfgWeightSum += weight;\n\t\t}\n\n\t\tlet centerUnpremult = select(centerInput.rgb, centerInput.rgb / max(centerInput.a, 1e-4), centerInput.a > 1e-4);\n\t\tlet fgColor = select(centerUnpremult, fgColorAccum / max(fgWeightSum, 1e-5), fgWeightSum > 1e-4);\n\n\t\treturn vec4<f32>(fgColor, smoothedAlpha);\n\t}\n\n\t// =============================================================\n\t// PASS 2: Vertical Pass & Final Defringe/Composite\n\t// =============================================================\n\tlet pass1Sample = textureSampleLevel(texInput, samp, in.uv, 0.0);\n\tlet origSample = textureSampleLevel(origTex, samp, in.uv, 0.0);\n\n\tvar rawMatteAlpha = origSample.a;\n\tif (u.hasMatte > 0.5) {\n\t\tlet rawMatteSample = textureSampleLevel(texMatte, samp, in.uv, 0.0);\n\t\trawMatteAlpha = extractChannel(rawMatteSample, u.matteChannel);\n\t}\n\n\t// 1. Vertical Alpha Blur / Filter\n\tvar alphaAccum = 0.0;\n\tvar alphaWeightSum = 0.0;\n\n\tlet stepScale = max(1.0, totalSigma / 15.0);\n\tlet effectiveSigma = totalSigma / stepScale;\n\tlet sampleRadius = min(i32(ceil(3.0 * effectiveSigma)), 32);\n\n\tfor (var i = -sampleRadius; i <= sampleRadius; i++) {\n\t\tlet offset = vec2<f32>(f32(i) * stepScale) * direction * texelSize;\n\t\tlet sampleUv = clamp(in.uv + offset, vec2<f32>(0.0), vec2<f32>(1.0));\n\t\tlet sPass1 = textureSampleLevel(texInput, samp, sampleUv, 0.0);\n\t\tlet sAlpha = sPass1.a;\n\n\t\tlet dist = f32(i) * stepScale;\n\t\tlet weight = exp(-0.5 * (dist / totalSigma) * (dist / totalSigma));\n\t\talphaAccum += sAlpha * weight;\n\t\talphaWeightSum += weight;\n\t}\n\n\tvar refinedAlpha = alphaAccum / max(alphaWeightSum, 1e-5);\n\n\t// 2. Shift Edge (Choke < 0 or Expand > 0)\n\tif (abs(shiftEdgeVal) > 0.01) {\n\t\tlet shiftNorm = shiftEdgeVal / 100.0;\n\t\tif (shiftNorm < 0.0) {\n\t\t\t// Contract / Choke\n\t\t\tlet chokeLimit = abs(shiftNorm);\n\t\t\trefinedAlpha = clamp((refinedAlpha - chokeLimit) / max(1.0 - chokeLimit, 1e-4), 0.0, 1.0);\n\t\t} else {\n\t\t\t// Expand / Dilate\n\t\t\trefinedAlpha = clamp(refinedAlpha / max(1.0 - shiftNorm, 1e-4), 0.0, 1.0);\n\t\t}\n\t}\n\n\t// 3. Vertical Foreground Color Sampling for Defringing\n\tvar fgColorAccum = vec3<f32>(0.0);\n\tvar fgWeightSum = 0.0;\n\n\tlet rStepScale = max(1.0, radius / 15.0);\n\tlet rSampleCount = min(i32(ceil(radius / rStepScale)), 32);\n\n\tfor (var i = -rSampleCount; i <= rSampleCount; i++) {\n\t\tlet offset = vec2<f32>(f32(i) * rStepScale) * direction * texelSize;\n\t\tlet sampleUv = clamp(in.uv + offset, vec2<f32>(0.0), vec2<f32>(1.0));\n\t\tlet sPass1 = textureSampleLevel(texInput, samp, sampleUv, 0.0);\n\t\tlet sRgb = sPass1.rgb;\n\t\tlet sA = sPass1.a;\n\n\t\tlet spatialDist = f32(i) * rStepScale;\n\t\tlet spatialWeight = exp(-0.5 * (spatialDist / max(radius, 0.5)) * (spatialDist / max(radius, 0.5)));\n\t\tlet fgConfidence = clamp((sA - 0.2) / 0.8, 0.0, 1.0);\n\t\tlet weight = fgConfidence * spatialWeight;\n\n\t\tfgColorAccum += sRgb * weight;\n\t\tfgWeightSum += weight;\n\t}\n\n\tlet origUnpremult = select(origSample.rgb, origSample.rgb / max(origSample.a, 1e-4), origSample.a > 1e-4);\n\tlet fgColor = select(origUnpremult, fgColorAccum / max(fgWeightSum, 1e-5), fgWeightSum > 1e-4);\n\n\t// Edge zone detection: transitions between foreground and background\n\tlet edgeWeight = clamp(4.0 * rawMatteAlpha * (1.0 - rawMatteAlpha), 0.0, 1.0);\n\tlet decontamFactor = clamp(decontam * max(edgeWeight, (1.0 - refinedAlpha) * 0.8), 0.0, 1.0);\n\n\tlet decontaminatedColor = mix(origUnpremult, fgColor, decontamFactor);\n\n\t// Format Output\n\tlet mode = u.outputMode;\n\tif (mode < 0.5) {\n\t\t// Composite: Decontaminated RGB with refined alpha (premultiplied)\n\t\treturn vec4<f32>(decontaminatedColor * refinedAlpha, refinedAlpha);\n\t} else if (mode < 1.5) {\n\t\t// MatteOnly: Grayscale refined alpha mask\n\t\treturn vec4<f32>(refinedAlpha, refinedAlpha, refinedAlpha, 1.0);\n\t} else {\n\t\t// DecontaminatedRGB: Clean defringed RGB with full alpha\n\t\treturn vec4<f32>(decontaminatedColor, 1.0);\n\t}\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nfunction getRefineEdgeResources(device, targetFormat) {\n\tconst cached = deviceResourceCache.get(device);\n\tif (cached) return cached;\n\tconst uniformLayout = fragmentBindGroupLayout(device, [\"uniform\"]);\n\tconst textureLayout = texturesLayout(device, 3);\n\tconst signalTextureLayout = texturesLayout(device, 5);\n\tconst res = {\n\t\tuniformLayout,\n\t\ttextureLayout,\n\t\tsignalTextureLayout,\n\t\tpipeline: createFullscreenPipeline(device, {\n\t\t\tmodule: device.createShaderModule({ code: WGSL_REFINE_EDGE }),\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: targetFormat\n\t\t})\n\t};\n\tdeviceResourceCache.set(device, res);\n\treturn res;\n}\nconst WebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"RefineEdge\" || !op) return;\n\tconst childMedia = props.virtualMedia?.children?.[0];\n\tif (!childMedia) return;\n\tpass.end();\n\tconst frame = props.frame ?? 0;\n\tconst fps = props.fps || 30;\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst resolveField = (handleId, fallbackVal, clampMin = 0, clampMax = 1e3) => resolveHandleParam(op.inputs, handleId, fallbackVal, clampMin, clampMax);\n\tconst decontamRes = resolveField(op.decontaminateAmountHandleId, Number(op.decontaminateAmount ?? .7), MIN_DECONTAMINATE, MAX_DECONTAMINATE);\n\tconst radiusRes = resolveField(op.radiusHandleId, Number(op.radius ?? 2), MIN_RADIUS, MAX_RADIUS);\n\tconst smoothRes = resolveField(op.smoothHandleId, Number(op.smooth ?? 5), MIN_SMOOTH, MAX_SMOOTH);\n\tconst featherRes = resolveField(op.featherHandleId, Number(op.feather ?? .5), MIN_FEATHER, MAX_FEATHER);\n\tconst shiftEdgeRes = resolveField(op.shiftEdgeHandleId, Number(op.shiftEdge ?? 0), MIN_SHIFT_EDGE, MAX_SHIFT_EDGE);\n\tconst { texture: tmpInputTex, view: tmpInputView } = await drawChildToTexture(args, childMedia, { props: {\n\t\t...props,\n\t\tvirtualMedia: childMedia,\n\t\trenderId: `${props.renderId}-input`\n\t} });\n\tlet tmpMatteTex = null;\n\tif (op.matteMedia) ({texture: tmpMatteTex} = await drawChildToTexture(args, op.matteMedia, {\n\t\tprops: {\n\t\t\t...props,\n\t\t\tvirtualMedia: op.matteMedia,\n\t\t\trenderId: `${props.renderId}-matte`,\n\t\t\texcludeTextures: [...props.excludeTextures || [], tmpInputTex]\n\t\t},\n\t\texclude: [tmpInputTex]\n\t}));\n\tconst { pipeline, uniformLayout, textureLayout, signalTextureLayout } = getRefineEdgeResources(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, res.handleId ?? `${props.renderId ?? \"refineedge\"}_${suffix}`);\n\tconst decontamView = getSignalView(decontamRes, \"decontam_sig\");\n\tconst radiusView = getSignalView(radiusRes, \"radius_sig\");\n\tconst smoothView = getSignalView(smoothRes, \"smooth_sig\");\n\tconst featherView = getSignalView(featherRes, \"feather_sig\");\n\tconst shiftEdgeView = getSignalView(shiftEdgeRes, \"shiftEdge_sig\");\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: decontamView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: radiusView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: smoothView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tresource: featherView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 4,\n\t\t\t\tresource: shiftEdgeView\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 5,\n\t\t\t\tresource: sampler\n\t\t\t}\n\t\t]\n\t});\n\tconst matteChannelCode = CHANNEL_MAP[op.matteChannel ?? \"Alpha\"] ?? 0;\n\tconst outputModeCode = OUTPUT_MODE_MAP[op.outputMode ?? \"Composite\"] ?? 0;\n\tconst dummyMatteView = tmpMatteTex ? tmpMatteTex.createView() : tmpInputView;\n\tconst hUniformData = new Float32Array(20);\n\tconst vUniformData = new Float32Array(20);\n\tconst baseUniforms = [\n\t\t0,\n\t\t0,\n\t\tdecontamRes.val,\n\t\tradiusRes.val,\n\t\tsmoothRes.val,\n\t\tfeatherRes.val,\n\t\tshiftEdgeRes.val,\n\t\tmatteChannelCode,\n\t\toutputModeCode,\n\t\ttmpMatteTex ? 1 : 0,\n\t\tdecontamRes.hasStaticSig ? 1 : 0,\n\t\tradiusRes.hasStaticSig ? 1 : 0,\n\t\tsmoothRes.hasStaticSig ? 1 : 0,\n\t\tfeatherRes.hasStaticSig ? 1 : 0,\n\t\tshiftEdgeRes.hasStaticSig ? 1 : 0,\n\t\t0,\n\t\t0,\n\t\t0,\n\t\t0,\n\t\t0\n\t];\n\thUniformData.set(baseUniforms);\n\thUniformData[0] = 1;\n\thUniformData[1] = 0;\n\thUniformData[15] = 0;\n\tvUniformData.set(baseUniforms);\n\tvUniformData[0] = 0;\n\tvUniformData[1] = 1;\n\tvUniformData[15] = 1;\n\tconst outTex1 = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpInputTex,\n\t\t...tmpMatteTex ? [tmpMatteTex] : [],\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst outTex2 = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpInputTex,\n\t\t...tmpMatteTex ? [tmpMatteTex] : [],\n\t\toutTex1,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tconst hBuffer = ctx.renderer.getTemporaryBuffer(hUniformData);\n\tdrawFullscreenPass(encoder, outTex1.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: hBuffer }\n\t\t\t}]\n\t\t}),\n\t\tctx.device.createBindGroup({\n\t\t\tlayout: textureLayout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: tmpInputView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: dummyMatteView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: tmpInputView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: sampler\n\t\t\t\t}\n\t\t\t]\n\t\t}),\n\t\tsigBindGroup\n\t]);\n\tconst vBuffer = ctx.renderer.getTemporaryBuffer(vUniformData);\n\tdrawFullscreenPass(encoder, outTex2.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: vBuffer }\n\t\t\t}]\n\t\t}),\n\t\tctx.device.createBindGroup({\n\t\t\tlayout: textureLayout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: outTex1.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: dummyMatteView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: tmpInputView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: sampler\n\t\t\t\t}\n\t\t\t]\n\t\t}),\n\t\tsigBindGroup\n\t]);\n\tdrawTextureToTarget(args, outTex2, props.opacity ?? op.opacity ?? 1);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer });\n\n//#endregion\nexport { RefineEdgeResultSchema as _, MAX_RADIUS as a, MIN_DECONTAMINATE as c, MIN_SHIFT_EDGE as d, MIN_SMOOTH as f, RefineEdgeOutputModeEnum as g, RefineEdgeNodeConfigSchema as h, MAX_FEATHER as i, MIN_FEATHER as l, REFINE_EDGE_OUTPUT_TYPE_MAP as m, WebGPURenderer as n, MAX_SHIFT_EDGE as o, MatteChannelEnum as p, MAX_DECONTAMINATE as r, MAX_SMOOTH as s, renderers_default as t, MIN_RADIUS as u, refineEdgeConfig as v };\n//# sourceMappingURL=renderers-BAo85yKE.mjs.map"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import "./chunk-BcJoO4Nm.mjs";
|
|
2
2
|
import { n as defineRenderer } from "./renderer-mNSyac1V.mjs";
|
|
3
|
-
import "./dist-
|
|
4
|
-
import { i as beginTargetPass, l as fragmentBindGroupLayout, o as drawChildToTexture, p as texturesLayout, t as FULLSCREEN_QUAD_WGSL } from "./gpu-
|
|
3
|
+
import "./dist-C1cCW7Bt.mjs";
|
|
4
|
+
import { i as beginTargetPass, l as fragmentBindGroupLayout, o as drawChildToTexture, p as texturesLayout, t as FULLSCREEN_QUAD_WGSL } from "./gpu-CMaa63nz.mjs";
|
|
5
5
|
|
|
6
6
|
//#region ../../nodes/node-channel-merger/dist/renderers-CFuJvvvy.mjs
|
|
7
7
|
const COLOR_SPACE_MAP = {
|
|
@@ -290,4 +290,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: ChannelMergerWebGPURend
|
|
|
290
290
|
|
|
291
291
|
//#endregion
|
|
292
292
|
export { ChannelMergerWebGPURenderer, renderers_default as default };
|
|
293
|
-
//# sourceMappingURL=renderer-
|
|
293
|
+
//# sourceMappingURL=renderer-D7Al3_-5.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-CUq2qgyc.mjs","names":[],"sources":["../../../nodes/node-channel-merger/dist/renderers-CFuJvvvy.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, beginTargetPass, drawChildToTexture, fragmentBindGroupLayout, texturesLayout } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst COLOR_SPACE_MAP = {\n\tRGBA: 0,\n\tHSLA: 1,\n\tCMYK: 2,\n\tLAB: 3\n};\nconst WGSL_CHANNEL_MERGER = `\nstruct MergerUniforms {\n\tcolorSpace : f32, // 0=RGBA, 1=HSLA, 2=CMYK, 3=LAB\n\thasCh4 : f32, // 0 or 1\n\tdefaultCh4 : f32, // fallback value (1.0 for alpha, 0.0 for CMYK black)\n\t_pad0 : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : MergerUniforms;\n@group(1) @binding(0) var tex1 : texture_2d<f32>;\n@group(1) @binding(1) var tex2 : texture_2d<f32>;\n@group(1) @binding(2) var tex3 : texture_2d<f32>;\n@group(1) @binding(3) var tex4 : texture_2d<f32>;\n@group(1) @binding(4) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn hue2rgb(p: f32, q: f32, t_in: f32) -> f32 {\n\tvar t = t_in;\n\tif (t < 0.0) { t = t + 1.0; }\n\tif (t > 1.0) { t = t - 1.0; }\n\tif (t < 1.0 / 6.0) { return p + (q - p) * 6.0 * t; }\n\tif (t < 1.0 / 2.0) { return q; }\n\tif (t < 2.0 / 3.0) { return p + (q - p) * (2.0 / 3.0 - t) * 6.0; }\n\treturn p;\n}\n\nfn hsl2rgb(h: f32, s: f32, l: f32) -> vec3<f32> {\n\tif (s <= 0.00001) {\n\t\treturn vec3<f32>(l, l, l);\n\t}\n\tlet q = select(l + s - l * s, l * (1.0 + s), l < 0.5);\n\tlet p = 2.0 * l - q;\n\tlet r = hue2rgb(p, q, h + 1.0 / 3.0);\n\tlet g = hue2rgb(p, q, h);\n\tlet b = hue2rgb(p, q, h - 1.0 / 3.0);\n\treturn vec3<f32>(clamp(r, 0.0, 1.0), clamp(g, 0.0, 1.0), clamp(b, 0.0, 1.0));\n}\n\nfn inv_lab_f(t: f32) -> f32 {\n\tlet t3 = t * t * t;\n\treturn select((t - 16.0 / 116.0) / 7.787, t3, t3 > 0.008856);\n}\n\nfn lin2srgb(v: f32) -> f32 {\n\tlet c = clamp(v, 0.0, 1.0);\n\treturn select(c * 12.92, 1.055 * pow(c, 1.0 / 2.4) - 0.055, c > 0.0031308);\n}\n\n@fragment fn fs(in: VSOut) -> @location(0) vec4<f32> {\n\tlet c1 = textureSample(tex1, samp, in.uv);\n\tlet c2 = textureSample(tex2, samp, in.uv);\n\tlet c3 = textureSample(tex3, samp, in.uv);\n\tlet c4 = textureSample(tex4, samp, in.uv);\n\n\tlet v1 = c1.r;\n\tlet v2 = c2.r;\n\tlet v3 = c3.r;\n\tlet v4 = select(u.defaultCh4, c4.r, u.hasCh4 > 0.5);\n\n\tlet cs = u32(u.colorSpace + 0.5);\n\n\tif (cs == 0u) { // RGBA\n\t\treturn vec4<f32>(clamp(v1, 0.0, 1.0), clamp(v2, 0.0, 1.0), clamp(v3, 0.0, 1.0), clamp(v4, 0.0, 1.0));\n\t} else if (cs == 1u) { // HSLA\n\t\tlet rgb = hsl2rgb(fract(v1), clamp(v2, 0.0, 1.0), clamp(v3, 0.0, 1.0));\n\t\treturn vec4<f32>(rgb, clamp(v4, 0.0, 1.0));\n\t} else if (cs == 2u) { // CMYK\n\t\tlet C = clamp(v1, 0.0, 1.0);\n\t\tlet M = clamp(v2, 0.0, 1.0);\n\t\tlet Y = clamp(v3, 0.0, 1.0);\n\t\tlet K = clamp(v4, 0.0, 1.0);\n\t\tlet r = (1.0 - C) * (1.0 - K);\n\t\tlet g = (1.0 - M) * (1.0 - K);\n\t\tlet b = (1.0 - Y) * (1.0 - K);\n\t\treturn vec4<f32>(clamp(r, 0.0, 1.0), clamp(g, 0.0, 1.0), clamp(b, 0.0, 1.0), 1.0);\n\t} else { // LAB\n\t\tlet L_norm = clamp(v1, 0.0, 1.0);\n\t\tlet a_norm = clamp(v2, 0.0, 1.0);\n\t\tlet b_norm = clamp(v3, 0.0, 1.0);\n\n\t\tlet L_star = L_norm * 100.0;\n\t\tlet a_star = a_norm * 255.0 - 128.0;\n\t\tlet b_star = b_norm * 255.0 - 128.0;\n\n\t\tlet fy = (L_star + 16.0) / 116.0;\n\t\tlet fx = fy + a_star / 500.0;\n\t\tlet fz = fy - b_star / 200.0;\n\n\t\tlet x = inv_lab_f(fx);\n\t\tlet y = inv_lab_f(fy);\n\t\tlet z = inv_lab_f(fz);\n\n\t\tlet X = x * 0.95047;\n\t\tlet Y = y * 1.00000;\n\t\tlet Z = z * 1.08883;\n\n\t\tlet lr = 3.2404542 * X - 1.5371385 * Y - 0.4985314 * Z;\n\t\tlet lg = -0.9692660 * X + 1.8760108 * Y + 0.0415560 * Z;\n\t\tlet lb = 0.0556434 * X - 0.2040259 * Y + 1.0572252 * Z;\n\n\t\treturn vec4<f32>(lin2srgb(lr), lin2srgb(lg), lin2srgb(lb), clamp(v4, 0.0, 1.0));\n\t}\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nconst uniformData = new Float32Array(4);\nfunction getDeviceLayouts(device) {\n\tlet res = deviceResourceCache.get(device);\n\tif (res) return res;\n\tres = {\n\t\tuniformLayout: fragmentBindGroupLayout(device, [\"uniform\"]),\n\t\ttextureLayout: texturesLayout(device, 4),\n\t\tpipelineCache: /* @__PURE__ */ new Map()\n\t};\n\tdeviceResourceCache.set(device, res);\n\treturn res;\n}\nfunction getPipeline(device, format) {\n\tconst resources = getDeviceLayouts(device);\n\tconst key = `merger_${format}`;\n\tlet pipeline = resources.pipelineCache.get(key);\n\tif (!pipeline) {\n\t\tconst module = device.createShaderModule({\n\t\t\tlabel: \"ChannelMergerShader\",\n\t\t\tcode: WGSL_CHANNEL_MERGER\n\t\t});\n\t\tconst layout = device.createPipelineLayout({ bindGroupLayouts: [resources.uniformLayout, resources.textureLayout] });\n\t\tpipeline = device.createRenderPipeline({\n\t\t\tlabel: \"ChannelMergerPipeline\",\n\t\t\tlayout,\n\t\t\tvertex: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"vs\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule,\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\tresources.pipelineCache.set(key, pipeline);\n\t}\n\treturn {\n\t\tpipeline,\n\t\tresources\n\t};\n}\nconst ChannelMergerWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props, drawChild } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"ChannelMerger\" || !op) return;\n\tconst ch1Media = op.channel1Media ?? props.virtualMedia.children?.[0];\n\tconst ch2Media = op.channel2Media;\n\tconst ch3Media = op.channel3Media;\n\tconst ch4Media = op.channel4Media;\n\tif (!ch1Media || !ch2Media || !ch3Media) return;\n\tpass.end();\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst { texture: tex1, view: view1 } = await drawChildToTexture(args, ch1Media, { props: {\n\t\t...props,\n\t\tvirtualMedia: ch1Media,\n\t\trenderId: `${props.renderId}-ch1`\n\t} });\n\targs.pass.end();\n\tconst { texture: tex2, view: view2 } = await drawChildToTexture(args, ch2Media, {\n\t\tprops: {\n\t\t\t...props,\n\t\t\tvirtualMedia: ch2Media,\n\t\t\trenderId: `${props.renderId}-ch2`,\n\t\t\texcludeTextures: [...props.excludeTextures || [], tex1]\n\t\t},\n\t\texclude: [tex1]\n\t});\n\targs.pass.end();\n\tconst { texture: tex3, view: view3 } = await drawChildToTexture(args, ch3Media, {\n\t\tprops: {\n\t\t\t...props,\n\t\t\tvirtualMedia: ch3Media,\n\t\t\trenderId: `${props.renderId}-ch3`,\n\t\t\texcludeTextures: [\n\t\t\t\t...props.excludeTextures || [],\n\t\t\t\ttex1,\n\t\t\t\ttex2\n\t\t\t]\n\t\t},\n\t\texclude: [tex1, tex2]\n\t});\n\targs.pass.end();\n\tconst tex4 = ctx.renderer.getTemporaryTexture(width, height, [\n\t\t...props.excludeTextures || [],\n\t\ttargetTexture,\n\t\ttex1,\n\t\ttex2,\n\t\ttex3\n\t]);\n\tconst view4 = tex4.createView();\n\tctx.renderer.beginFrame(encoder, view4, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, width, height, \"clear\").end();\n\tconst hasCh4 = ch4Media ? 1 : 0;\n\tif (ch4Media) {\n\t\tctx.renderer.pushScissor({\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t\twidth,\n\t\t\theight\n\t\t});\n\t\tctx.renderer.pushIdentity();\n\t\tawait drawChild(ch4Media, {\n\t\t\t...props,\n\t\t\tvirtualMedia: ch4Media,\n\t\t\trenderId: `${props.renderId}-ch4`,\n\t\t\texcludeTextures: [\n\t\t\t\t...props.excludeTextures || [],\n\t\t\t\ttex1,\n\t\t\t\ttex2,\n\t\t\t\ttex3,\n\t\t\t\ttex4\n\t\t\t]\n\t\t}, view4, tex4, width, height);\n\t\tctx.renderer.popTransform();\n\t\tctx.renderer.popScissor();\n\t\targs.pass.end();\n\t}\n\tconst colorSpace = op.colorSpace ?? \"RGBA\";\n\tconst defaultCh4 = op.defaultChannel4 ?? (colorSpace === \"CMYK\" ? 0 : 1);\n\tuniformData[0] = COLOR_SPACE_MAP[colorSpace] ?? 0;\n\tuniformData[1] = hasCh4;\n\tuniformData[2] = defaultCh4;\n\tuniformData[3] = 0;\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(uniformData);\n\tconst { pipeline, resources } = getPipeline(ctx.device, targetTexture.format);\n\tconst uniformBindGroup = ctx.device.createBindGroup({\n\t\tlayout: resources.uniformLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: uniformBuffer }\n\t\t}]\n\t});\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst textureBindGroup = ctx.device.createBindGroup({\n\t\tlayout: resources.textureLayout,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: view1\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: view2\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: view3\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tresource: view4\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 4,\n\t\t\t\tresource: sampler\n\t\t\t}\n\t\t]\n\t});\n\tconst finalPass = beginTargetPass(args);\n\tfinalPass.setPipeline(pipeline);\n\tfinalPass.setBindGroup(0, uniformBindGroup);\n\tfinalPass.setBindGroup(1, textureBindGroup);\n\tfinalPass.draw(4, 1, 0, 0);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: ChannelMergerWebGPURenderer });\n\n//#endregion\nexport { ChannelMergerWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-CFuJvvvy.mjs.map"],"mappings":";;;;;;AAIA,MAAM,kBAAkB;CACvB,MAAM;CACN,MAAM;CACN,MAAM;CACN,KAAK;CACL;AACD,MAAM,sBAAsB;;;;;;;;;;;;;;EAc1B,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0FvB,MAAM,sCAAsC,IAAI,SAAS;AACzD,MAAM,cAAc,IAAI,aAAa,EAAE;AACvC,SAAS,iBAAiB,QAAQ;CACjC,IAAI,MAAM,oBAAoB,IAAI,OAAO;AACzC,KAAI,IAAK,QAAO;AAChB,OAAM;EACL,eAAe,wBAAwB,QAAQ,CAAC,UAAU,CAAC;EAC3D,eAAe,eAAe,QAAQ,EAAE;EACxC,+BAA+B,IAAI,KAAK;EACxC;AACD,qBAAoB,IAAI,QAAQ,IAAI;AACpC,QAAO;;AAER,SAAS,YAAY,QAAQ,QAAQ;CACpC,MAAM,YAAY,iBAAiB,OAAO;CAC1C,MAAM,MAAM,UAAU;CACtB,IAAI,WAAW,UAAU,cAAc,IAAI,IAAI;AAC/C,KAAI,CAAC,UAAU;EACd,MAAM,SAAS,OAAO,mBAAmB;GACxC,OAAO;GACP,MAAM;GACN,CAAC;EACF,MAAM,SAAS,OAAO,qBAAqB,EAAE,kBAAkB,CAAC,UAAU,eAAe,UAAU,cAAc,EAAE,CAAC;AACpH,aAAW,OAAO,qBAAqB;GACtC,OAAO;GACP;GACA,QAAQ;IACP;IACA,YAAY;IACZ;GACD,UAAU;IACT;IACA,YAAY;IACZ,SAAS,CAAC,EAAE,QAAQ,CAAC;IACrB;GACD,WAAW,EAAE,UAAU,kBAAkB;GACzC,CAAC;AACF,YAAU,cAAc,IAAI,KAAK,SAAS;;AAE3C,QAAO;EACN;EACA;EACA;;AAEF,MAAM,8BAA8B,OAAO,SAAS;CACnD,MAAM,EAAE,KAAK,SAAS,MAAM,eAAe,aAAa,cAAc,OAAO,cAAc;CAC3F,MAAM,KAAK,MAAM,cAAc;AAC/B,KAAI,IAAI,OAAO,mBAAmB,CAAC,GAAI;CACvC,MAAM,WAAW,GAAG,iBAAiB,MAAM,aAAa,WAAW;CACnE,MAAM,WAAW,GAAG;CACpB,MAAM,WAAW,GAAG;CACpB,MAAM,WAAW,GAAG;AACpB,KAAI,CAAC,YAAY,CAAC,YAAY,CAAC,SAAU;AACzC,MAAK,KAAK;CACV,MAAM,QAAQ;CACd,MAAM,SAAS;CACf,MAAM,EAAE,SAAS,MAAM,MAAM,UAAU,MAAM,mBAAmB,MAAM,UAAU,EAAE,OAAO;EACxF,GAAG;EACH,cAAc;EACd,UAAU,GAAG,MAAM,SAAS;EAC5B,EAAE,CAAC;AACJ,MAAK,KAAK,KAAK;CACf,MAAM,EAAE,SAAS,MAAM,MAAM,UAAU,MAAM,mBAAmB,MAAM,UAAU;EAC/E,OAAO;GACN,GAAG;GACH,cAAc;GACd,UAAU,GAAG,MAAM,SAAS;GAC5B,iBAAiB,CAAC,GAAG,MAAM,mBAAmB,EAAE,EAAE,KAAK;GACvD;EACD,SAAS,CAAC,KAAK;EACf,CAAC;AACF,MAAK,KAAK,KAAK;CACf,MAAM,EAAE,SAAS,MAAM,MAAM,UAAU,MAAM,mBAAmB,MAAM,UAAU;EAC/E,OAAO;GACN,GAAG;GACH,cAAc;GACd,UAAU,GAAG,MAAM,SAAS;GAC5B,iBAAiB;IAChB,GAAG,MAAM,mBAAmB,EAAE;IAC9B;IACA;IACA;GACD;EACD,SAAS,CAAC,MAAM,KAAK;EACrB,CAAC;AACF,MAAK,KAAK,KAAK;CACf,MAAM,OAAO,IAAI,SAAS,oBAAoB,OAAO,QAAQ;EAC5D,GAAG,MAAM,mBAAmB,EAAE;EAC9B;EACA;EACA;EACA;EACA,CAAC;CACF,MAAM,QAAQ,KAAK,YAAY;AAC/B,KAAI,SAAS,WAAW,SAAS,OAAO;EACvC,GAAG;EACH,GAAG;EACH,GAAG;EACH,GAAG;EACH,EAAE,OAAO,QAAQ,QAAQ,CAAC,KAAK;CAChC,MAAM,SAAS,WAAW,IAAI;AAC9B,KAAI,UAAU;AACb,MAAI,SAAS,YAAY;GACxB,GAAG;GACH,GAAG;GACH;GACA;GACA,CAAC;AACF,MAAI,SAAS,cAAc;AAC3B,QAAM,UAAU,UAAU;GACzB,GAAG;GACH,cAAc;GACd,UAAU,GAAG,MAAM,SAAS;GAC5B,iBAAiB;IAChB,GAAG,MAAM,mBAAmB,EAAE;IAC9B;IACA;IACA;IACA;IACA;GACD,EAAE,OAAO,MAAM,OAAO,OAAO;AAC9B,MAAI,SAAS,cAAc;AAC3B,MAAI,SAAS,YAAY;AACzB,OAAK,KAAK,KAAK;;CAEhB,MAAM,aAAa,GAAG,cAAc;CACpC,MAAM,aAAa,GAAG,oBAAoB,eAAe,SAAS,IAAI;AACtE,aAAY,KAAK,gBAAgB,eAAe;AAChD,aAAY,KAAK;AACjB,aAAY,KAAK;AACjB,aAAY,KAAK;CACjB,MAAM,gBAAgB,IAAI,SAAS,mBAAmB,YAAY;CAClE,MAAM,EAAE,UAAU,cAAc,YAAY,IAAI,QAAQ,cAAc,OAAO;CAC7E,MAAM,mBAAmB,IAAI,OAAO,gBAAgB;EACnD,QAAQ,UAAU;EAClB,SAAS,CAAC;GACT,SAAS;GACT,UAAU,EAAE,QAAQ,eAAe;GACnC,CAAC;EACF,CAAC;CACF,MAAM,UAAU,IAAI,SAAS,aAAa,WAAW,IAAI,OAAO;CAChE,MAAM,mBAAmB,IAAI,OAAO,gBAAgB;EACnD,QAAQ,UAAU;EAClB,SAAS;GACR;IACC,SAAS;IACT,UAAU;IACV;GACD;IACC,SAAS;IACT,UAAU;IACV;GACD;IACC,SAAS;IACT,UAAU;IACV;GACD;IACC,SAAS;IACT,UAAU;IACV;GACD;IACC,SAAS;IACT,UAAU;IACV;GACD;EACD,CAAC;CACF,MAAM,YAAY,gBAAgB,KAAK;AACvC,WAAU,YAAY,SAAS;AAC/B,WAAU,aAAa,GAAG,iBAAiB;AAC3C,WAAU,aAAa,GAAG,iBAAiB;AAC3C,WAAU,KAAK,GAAG,GAAG,GAAG,EAAE;;AAK3B,IAAI,oBAAoB,eAAe,EAAE,gBAAgB,6BAA6B,CAAC"}
|
|
1
|
+
{"version":3,"file":"renderer-D7Al3_-5.mjs","names":[],"sources":["../../../nodes/node-channel-merger/dist/renderers-CFuJvvvy.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, beginTargetPass, drawChildToTexture, fragmentBindGroupLayout, texturesLayout } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst COLOR_SPACE_MAP = {\n\tRGBA: 0,\n\tHSLA: 1,\n\tCMYK: 2,\n\tLAB: 3\n};\nconst WGSL_CHANNEL_MERGER = `\nstruct MergerUniforms {\n\tcolorSpace : f32, // 0=RGBA, 1=HSLA, 2=CMYK, 3=LAB\n\thasCh4 : f32, // 0 or 1\n\tdefaultCh4 : f32, // fallback value (1.0 for alpha, 0.0 for CMYK black)\n\t_pad0 : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : MergerUniforms;\n@group(1) @binding(0) var tex1 : texture_2d<f32>;\n@group(1) @binding(1) var tex2 : texture_2d<f32>;\n@group(1) @binding(2) var tex3 : texture_2d<f32>;\n@group(1) @binding(3) var tex4 : texture_2d<f32>;\n@group(1) @binding(4) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn hue2rgb(p: f32, q: f32, t_in: f32) -> f32 {\n\tvar t = t_in;\n\tif (t < 0.0) { t = t + 1.0; }\n\tif (t > 1.0) { t = t - 1.0; }\n\tif (t < 1.0 / 6.0) { return p + (q - p) * 6.0 * t; }\n\tif (t < 1.0 / 2.0) { return q; }\n\tif (t < 2.0 / 3.0) { return p + (q - p) * (2.0 / 3.0 - t) * 6.0; }\n\treturn p;\n}\n\nfn hsl2rgb(h: f32, s: f32, l: f32) -> vec3<f32> {\n\tif (s <= 0.00001) {\n\t\treturn vec3<f32>(l, l, l);\n\t}\n\tlet q = select(l + s - l * s, l * (1.0 + s), l < 0.5);\n\tlet p = 2.0 * l - q;\n\tlet r = hue2rgb(p, q, h + 1.0 / 3.0);\n\tlet g = hue2rgb(p, q, h);\n\tlet b = hue2rgb(p, q, h - 1.0 / 3.0);\n\treturn vec3<f32>(clamp(r, 0.0, 1.0), clamp(g, 0.0, 1.0), clamp(b, 0.0, 1.0));\n}\n\nfn inv_lab_f(t: f32) -> f32 {\n\tlet t3 = t * t * t;\n\treturn select((t - 16.0 / 116.0) / 7.787, t3, t3 > 0.008856);\n}\n\nfn lin2srgb(v: f32) -> f32 {\n\tlet c = clamp(v, 0.0, 1.0);\n\treturn select(c * 12.92, 1.055 * pow(c, 1.0 / 2.4) - 0.055, c > 0.0031308);\n}\n\n@fragment fn fs(in: VSOut) -> @location(0) vec4<f32> {\n\tlet c1 = textureSample(tex1, samp, in.uv);\n\tlet c2 = textureSample(tex2, samp, in.uv);\n\tlet c3 = textureSample(tex3, samp, in.uv);\n\tlet c4 = textureSample(tex4, samp, in.uv);\n\n\tlet v1 = c1.r;\n\tlet v2 = c2.r;\n\tlet v3 = c3.r;\n\tlet v4 = select(u.defaultCh4, c4.r, u.hasCh4 > 0.5);\n\n\tlet cs = u32(u.colorSpace + 0.5);\n\n\tif (cs == 0u) { // RGBA\n\t\treturn vec4<f32>(clamp(v1, 0.0, 1.0), clamp(v2, 0.0, 1.0), clamp(v3, 0.0, 1.0), clamp(v4, 0.0, 1.0));\n\t} else if (cs == 1u) { // HSLA\n\t\tlet rgb = hsl2rgb(fract(v1), clamp(v2, 0.0, 1.0), clamp(v3, 0.0, 1.0));\n\t\treturn vec4<f32>(rgb, clamp(v4, 0.0, 1.0));\n\t} else if (cs == 2u) { // CMYK\n\t\tlet C = clamp(v1, 0.0, 1.0);\n\t\tlet M = clamp(v2, 0.0, 1.0);\n\t\tlet Y = clamp(v3, 0.0, 1.0);\n\t\tlet K = clamp(v4, 0.0, 1.0);\n\t\tlet r = (1.0 - C) * (1.0 - K);\n\t\tlet g = (1.0 - M) * (1.0 - K);\n\t\tlet b = (1.0 - Y) * (1.0 - K);\n\t\treturn vec4<f32>(clamp(r, 0.0, 1.0), clamp(g, 0.0, 1.0), clamp(b, 0.0, 1.0), 1.0);\n\t} else { // LAB\n\t\tlet L_norm = clamp(v1, 0.0, 1.0);\n\t\tlet a_norm = clamp(v2, 0.0, 1.0);\n\t\tlet b_norm = clamp(v3, 0.0, 1.0);\n\n\t\tlet L_star = L_norm * 100.0;\n\t\tlet a_star = a_norm * 255.0 - 128.0;\n\t\tlet b_star = b_norm * 255.0 - 128.0;\n\n\t\tlet fy = (L_star + 16.0) / 116.0;\n\t\tlet fx = fy + a_star / 500.0;\n\t\tlet fz = fy - b_star / 200.0;\n\n\t\tlet x = inv_lab_f(fx);\n\t\tlet y = inv_lab_f(fy);\n\t\tlet z = inv_lab_f(fz);\n\n\t\tlet X = x * 0.95047;\n\t\tlet Y = y * 1.00000;\n\t\tlet Z = z * 1.08883;\n\n\t\tlet lr = 3.2404542 * X - 1.5371385 * Y - 0.4985314 * Z;\n\t\tlet lg = -0.9692660 * X + 1.8760108 * Y + 0.0415560 * Z;\n\t\tlet lb = 0.0556434 * X - 0.2040259 * Y + 1.0572252 * Z;\n\n\t\treturn vec4<f32>(lin2srgb(lr), lin2srgb(lg), lin2srgb(lb), clamp(v4, 0.0, 1.0));\n\t}\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nconst uniformData = new Float32Array(4);\nfunction getDeviceLayouts(device) {\n\tlet res = deviceResourceCache.get(device);\n\tif (res) return res;\n\tres = {\n\t\tuniformLayout: fragmentBindGroupLayout(device, [\"uniform\"]),\n\t\ttextureLayout: texturesLayout(device, 4),\n\t\tpipelineCache: /* @__PURE__ */ new Map()\n\t};\n\tdeviceResourceCache.set(device, res);\n\treturn res;\n}\nfunction getPipeline(device, format) {\n\tconst resources = getDeviceLayouts(device);\n\tconst key = `merger_${format}`;\n\tlet pipeline = resources.pipelineCache.get(key);\n\tif (!pipeline) {\n\t\tconst module = device.createShaderModule({\n\t\t\tlabel: \"ChannelMergerShader\",\n\t\t\tcode: WGSL_CHANNEL_MERGER\n\t\t});\n\t\tconst layout = device.createPipelineLayout({ bindGroupLayouts: [resources.uniformLayout, resources.textureLayout] });\n\t\tpipeline = device.createRenderPipeline({\n\t\t\tlabel: \"ChannelMergerPipeline\",\n\t\t\tlayout,\n\t\t\tvertex: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"vs\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule,\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\tresources.pipelineCache.set(key, pipeline);\n\t}\n\treturn {\n\t\tpipeline,\n\t\tresources\n\t};\n}\nconst ChannelMergerWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props, drawChild } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"ChannelMerger\" || !op) return;\n\tconst ch1Media = op.channel1Media ?? props.virtualMedia.children?.[0];\n\tconst ch2Media = op.channel2Media;\n\tconst ch3Media = op.channel3Media;\n\tconst ch4Media = op.channel4Media;\n\tif (!ch1Media || !ch2Media || !ch3Media) return;\n\tpass.end();\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst { texture: tex1, view: view1 } = await drawChildToTexture(args, ch1Media, { props: {\n\t\t...props,\n\t\tvirtualMedia: ch1Media,\n\t\trenderId: `${props.renderId}-ch1`\n\t} });\n\targs.pass.end();\n\tconst { texture: tex2, view: view2 } = await drawChildToTexture(args, ch2Media, {\n\t\tprops: {\n\t\t\t...props,\n\t\t\tvirtualMedia: ch2Media,\n\t\t\trenderId: `${props.renderId}-ch2`,\n\t\t\texcludeTextures: [...props.excludeTextures || [], tex1]\n\t\t},\n\t\texclude: [tex1]\n\t});\n\targs.pass.end();\n\tconst { texture: tex3, view: view3 } = await drawChildToTexture(args, ch3Media, {\n\t\tprops: {\n\t\t\t...props,\n\t\t\tvirtualMedia: ch3Media,\n\t\t\trenderId: `${props.renderId}-ch3`,\n\t\t\texcludeTextures: [\n\t\t\t\t...props.excludeTextures || [],\n\t\t\t\ttex1,\n\t\t\t\ttex2\n\t\t\t]\n\t\t},\n\t\texclude: [tex1, tex2]\n\t});\n\targs.pass.end();\n\tconst tex4 = ctx.renderer.getTemporaryTexture(width, height, [\n\t\t...props.excludeTextures || [],\n\t\ttargetTexture,\n\t\ttex1,\n\t\ttex2,\n\t\ttex3\n\t]);\n\tconst view4 = tex4.createView();\n\tctx.renderer.beginFrame(encoder, view4, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, width, height, \"clear\").end();\n\tconst hasCh4 = ch4Media ? 1 : 0;\n\tif (ch4Media) {\n\t\tctx.renderer.pushScissor({\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t\twidth,\n\t\t\theight\n\t\t});\n\t\tctx.renderer.pushIdentity();\n\t\tawait drawChild(ch4Media, {\n\t\t\t...props,\n\t\t\tvirtualMedia: ch4Media,\n\t\t\trenderId: `${props.renderId}-ch4`,\n\t\t\texcludeTextures: [\n\t\t\t\t...props.excludeTextures || [],\n\t\t\t\ttex1,\n\t\t\t\ttex2,\n\t\t\t\ttex3,\n\t\t\t\ttex4\n\t\t\t]\n\t\t}, view4, tex4, width, height);\n\t\tctx.renderer.popTransform();\n\t\tctx.renderer.popScissor();\n\t\targs.pass.end();\n\t}\n\tconst colorSpace = op.colorSpace ?? \"RGBA\";\n\tconst defaultCh4 = op.defaultChannel4 ?? (colorSpace === \"CMYK\" ? 0 : 1);\n\tuniformData[0] = COLOR_SPACE_MAP[colorSpace] ?? 0;\n\tuniformData[1] = hasCh4;\n\tuniformData[2] = defaultCh4;\n\tuniformData[3] = 0;\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(uniformData);\n\tconst { pipeline, resources } = getPipeline(ctx.device, targetTexture.format);\n\tconst uniformBindGroup = ctx.device.createBindGroup({\n\t\tlayout: resources.uniformLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: uniformBuffer }\n\t\t}]\n\t});\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst textureBindGroup = ctx.device.createBindGroup({\n\t\tlayout: resources.textureLayout,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: view1\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: view2\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: view3\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tresource: view4\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 4,\n\t\t\t\tresource: sampler\n\t\t\t}\n\t\t]\n\t});\n\tconst finalPass = beginTargetPass(args);\n\tfinalPass.setPipeline(pipeline);\n\tfinalPass.setBindGroup(0, uniformBindGroup);\n\tfinalPass.setBindGroup(1, textureBindGroup);\n\tfinalPass.draw(4, 1, 0, 0);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: ChannelMergerWebGPURenderer });\n\n//#endregion\nexport { ChannelMergerWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-CFuJvvvy.mjs.map"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { n as defineRenderer, o as resolveFrameNumber } from "./renderer-mNSyac1V.mjs";
|
|
2
|
-
import { c as drawTextureToTarget, o as drawChildToTexture } from "./gpu-
|
|
2
|
+
import { c as drawTextureToTarget, o as drawChildToTexture } from "./gpu-CMaa63nz.mjs";
|
|
3
3
|
import { o as TemporalDeflickerPipeline } from "./dist-Buaaj-Ul.mjs";
|
|
4
4
|
|
|
5
5
|
//#region ../../nodes/node-deflicker/dist/renderers-BEAP_hnG.mjs
|
|
@@ -62,4 +62,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: TemporalDeflickerWebGPU
|
|
|
62
62
|
|
|
63
63
|
//#endregion
|
|
64
64
|
export { renderers_default as t };
|
|
65
|
-
//# sourceMappingURL=renderer-
|
|
65
|
+
//# sourceMappingURL=renderer-D7r6onRT.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-
|
|
1
|
+
{"version":3,"file":"renderer-D7r6onRT.mjs","names":[],"sources":["../../../nodes/node-deflicker/dist/renderers-BEAP_hnG.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { resolveFrameNumber } from \"@framefields/node-sdk\";\nimport { drawChildToTexture, drawTextureToTarget } from \"@framefields/node-sdk/gpu\";\nimport { TemporalDeflickerPipeline } from \"@framefields/tensor-webgpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nfunction resolveProp(op, fieldName, defaultValue, minVal, maxVal, frame, fps) {\n\tconst handleId = op[`${fieldName}HandleId`];\n\tconst input = handleId ? op.inputs?.[handleId] : null;\n\tlet raw;\n\tif (input?.connectionValid && input.outputItem) {\n\t\tconst outData = input.outputItem.data;\n\t\traw = outData && typeof outData === \"object\" && \"offset\" in outData ? outData.offset : input.outputItem.data;\n\t} else raw = op[fieldName];\n\tconst resolved = resolveFrameNumber(raw, defaultValue, frame, fps);\n\treturn Math.max(minVal, Math.min(maxVal, resolved));\n}\nconst pipelineCache = /* @__PURE__ */ new Map();\nfunction getOrCreatePipeline(device, key) {\n\tlet pipe = pipelineCache.get(key);\n\tif (!pipe) {\n\t\tpipe = new TemporalDeflickerPipeline(device);\n\t\tpipelineCache.set(key, pipe);\n\t}\n\treturn pipe;\n}\nconst TemporalDeflickerWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (!op || op.op !== \"TemporalDeflicker\" && op.op !== \"Deflicker\") return;\n\tconst sourceMedia = props.virtualMedia?.children?.[0];\n\tif (!sourceMedia) 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 { texture: srcTex } = await drawChildToTexture(args, sourceMedia, { props: {\n\t\t...props,\n\t\tvirtualMedia: sourceMedia,\n\t\tcontainerWidth: width,\n\t\tcontainerHeight: height\n\t} });\n\targs.pass.end();\n\tconst blendWeight = resolveProp(op, \"blendWeight\", .35, 0, 1, compositionFrame, fps);\n\tconst disocclusionThreshold = resolveProp(op, \"disocclusionThreshold\", .15, .01, 1, compositionFrame, fps);\n\tconst maxMotionPixels = resolveProp(op, \"maxMotionPixels\", 64, 1, 256, compositionFrame, fps);\n\tconst scale = resolveProp(op, \"scale\", .5, .1, 1, compositionFrame, fps);\n\tconst windowSize = Math.round(resolveProp(op, \"windowSize\", 2, 1, 5, compositionFrame, fps));\n\tconst pipelineKey = props.virtualMedia?.metadata?.id || op.id || `deflicker_${props.renderId ?? \"global\"}`;\n\tconst deflickerPipe = getOrCreatePipeline(ctx.device, pipelineKey);\n\tif (frame === 0) deflickerPipe.reset();\n\tdrawTextureToTarget(args, deflickerPipe.execute(srcTex, {\n\t\tblendWeight,\n\t\tdisocclusionThreshold,\n\t\tmaxMotionPixels,\n\t\tscale,\n\t\twindowSize\n\t}, encoder), typeof op.opacity === \"number\" ? op.opacity : 1);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: TemporalDeflickerWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-BEAP_hnG.mjs.map"],"mappings":";;;;;AAMA,SAAS,YAAY,IAAI,WAAW,cAAc,QAAQ,QAAQ,OAAO,KAAK;CAC7E,MAAM,WAAW,GAAG,GAAG,UAAU;CACjC,MAAM,QAAQ,WAAW,GAAG,SAAS,YAAY;CACjD,IAAI;AACJ,KAAI,OAAO,mBAAmB,MAAM,YAAY;EAC/C,MAAM,UAAU,MAAM,WAAW;AACjC,QAAM,WAAW,OAAO,YAAY,YAAY,YAAY,UAAU,QAAQ,SAAS,MAAM,WAAW;OAClG,OAAM,GAAG;CAChB,MAAM,WAAW,mBAAmB,KAAK,cAAc,OAAO,IAAI;AAClE,QAAO,KAAK,IAAI,QAAQ,KAAK,IAAI,QAAQ,SAAS,CAAC;;AAEpD,MAAM,gCAAgC,IAAI,KAAK;AAC/C,SAAS,oBAAoB,QAAQ,KAAK;CACzC,IAAI,OAAO,cAAc,IAAI,IAAI;AACjC,KAAI,CAAC,MAAM;AACV,SAAO,IAAI,0BAA0B,OAAO;AAC5C,gBAAc,IAAI,KAAK,KAAK;;AAE7B,QAAO;;AAER,MAAM,kCAAkC,OAAO,SAAS;CACvD,MAAM,EAAE,KAAK,SAAS,MAAM,aAAa,cAAc,UAAU;CACjE,MAAM,KAAK,MAAM,cAAc;AAC/B,KAAI,CAAC,MAAM,GAAG,OAAO,uBAAuB,GAAG,OAAO,YAAa;CACnE,MAAM,cAAc,MAAM,cAAc,WAAW;AACnD,KAAI,CAAC,YAAa;AAClB,MAAK,KAAK;CACV,MAAM,QAAQ;CACd,MAAM,SAAS;CACf,MAAM,QAAQ,MAAM,SAAS;CAC7B,MAAM,mBAAmB,MAAM,oBAAoB;CACnD,MAAM,MAAM,MAAM,OAAO;CACzB,MAAM,EAAE,SAAS,WAAW,MAAM,mBAAmB,MAAM,aAAa,EAAE,OAAO;EAChF,GAAG;EACH,cAAc;EACd,gBAAgB;EAChB,iBAAiB;EACjB,EAAE,CAAC;AACJ,MAAK,KAAK,KAAK;CACf,MAAM,cAAc,YAAY,IAAI,eAAe,KAAK,GAAG,GAAG,kBAAkB,IAAI;CACpF,MAAM,wBAAwB,YAAY,IAAI,yBAAyB,KAAK,KAAK,GAAG,kBAAkB,IAAI;CAC1G,MAAM,kBAAkB,YAAY,IAAI,mBAAmB,IAAI,GAAG,KAAK,kBAAkB,IAAI;CAC7F,MAAM,QAAQ,YAAY,IAAI,SAAS,IAAI,IAAI,GAAG,kBAAkB,IAAI;CACxE,MAAM,aAAa,KAAK,MAAM,YAAY,IAAI,cAAc,GAAG,GAAG,GAAG,kBAAkB,IAAI,CAAC;CAC5F,MAAM,cAAc,MAAM,cAAc,UAAU,MAAM,GAAG,MAAM,aAAa,MAAM,YAAY;CAChG,MAAM,gBAAgB,oBAAoB,IAAI,QAAQ,YAAY;AAClE,KAAI,UAAU,EAAG,eAAc,OAAO;AACtC,qBAAoB,MAAM,cAAc,QAAQ,QAAQ;EACvD;EACA;EACA;EACA;EACA;EACA,EAAE,QAAQ,EAAE,OAAO,GAAG,YAAY,WAAW,GAAG,UAAU,EAAE;;AAK9D,IAAI,oBAAoB,eAAe,EAAE,gBAAgB,iCAAiC,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import "./chunk-BcJoO4Nm.mjs";
|
|
2
2
|
import { n as defineRenderer } from "./renderer-mNSyac1V.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-C1cCW7Bt.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-CMaa63nz.mjs";
|
|
5
5
|
|
|
6
6
|
//#region ../../nodes/node-rgb-split/dist/renderers-BrKktWQX.mjs
|
|
7
7
|
const OP = "RGBSplit";
|
|
@@ -188,4 +188,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: RGBSplitWebGPURenderer
|
|
|
188
188
|
|
|
189
189
|
//#endregion
|
|
190
190
|
export { RGBSplitWebGPURenderer, renderers_default as default };
|
|
191
|
-
//# sourceMappingURL=renderer-
|
|
191
|
+
//# sourceMappingURL=renderer-D8bBHrWC.mjs.map
|