framefields 2.6.1 → 2.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/audio/index.d.mts +4 -4
- package/dist/audio/index.mjs +10 -10
- package/dist/{audio-CYrO9q9P.mjs → audio-j3ttoRDX.mjs} +4 -4
- package/dist/{audio-CYrO9q9P.mjs.map → audio-j3ttoRDX.mjs.map} +1 -1
- package/dist/{audio-B5mdR8vv.d.mts → audio-tL8CcPra.d.mts} +3 -3
- package/dist/{audio-B5mdR8vv.d.mts.map → audio-tL8CcPra.d.mts.map} +1 -1
- package/dist/components/index.d.mts +10 -10
- package/dist/components/index.mjs +44 -44
- package/dist/{dist-cC6nOaMR.mjs → dist-BHTd-EC1.mjs} +164 -34
- package/dist/dist-BHTd-EC1.mjs.map +1 -0
- package/dist/{dist-DSKhnhDk.mjs → dist-BM0ilHvQ.mjs} +115 -21
- package/dist/dist-BM0ilHvQ.mjs.map +1 -0
- package/dist/{dist-D021IFfp.mjs → dist-BRXsfWKQ.mjs} +444 -8
- package/dist/dist-BRXsfWKQ.mjs.map +1 -0
- package/dist/{dist-BPOi5xb_.mjs → dist-CPtFZxtu.mjs} +2 -2
- package/dist/{dist-BPOi5xb_.mjs.map → dist-CPtFZxtu.mjs.map} +1 -1
- package/dist/effects/index.d.mts +4 -4
- package/dist/effects/index.mjs +35 -35
- package/dist/{effects-Dvdwndk0.mjs → effects-Dy661XS_.mjs} +3 -3
- package/dist/{effects-Dvdwndk0.mjs.map → effects-Dy661XS_.mjs.map} +1 -1
- package/dist/fonts/index.mjs +2 -2
- package/dist/{fonts-B6a4CyoM.mjs → fonts-BcFhAqqO.mjs} +2 -2
- package/dist/{fonts-B6a4CyoM.mjs.map → fonts-BcFhAqqO.mjs.map} +1 -1
- package/dist/{gpu-CrQADlcf.mjs → gpu-zIhSz_0X.mjs} +2 -2
- package/dist/{gpu-CrQADlcf.mjs.map → gpu-zIhSz_0X.mjs.map} +1 -1
- package/dist/{index-ocZc12ZS.d.mts → index-B1ENegOQ.d.mts} +224 -2
- package/dist/index-B1ENegOQ.d.mts.map +1 -0
- package/dist/{index-D-Gnyffj.d.mts → index-CJRTBLZ4.d.mts} +4 -4
- package/dist/{index-D-Gnyffj.d.mts.map → index-CJRTBLZ4.d.mts.map} +1 -1
- package/dist/{index-BhzlG_1Q.d.mts → index-Cg30slle.d.mts} +2 -2
- package/dist/{index-BhzlG_1Q.d.mts.map → index-Cg30slle.d.mts.map} +1 -1
- package/dist/{index-B4o6F1JC.d.mts → index-DeeMmoEA.d.mts} +2 -2
- package/dist/{index-B4o6F1JC.d.mts.map → index-DeeMmoEA.d.mts.map} +1 -1
- package/dist/{index-CWG19cm-.d.mts → index-ePGQ_C7f.d.mts} +39 -16
- package/dist/index-ePGQ_C7f.d.mts.map +1 -0
- package/dist/{index-o8LxWdwz.d.mts → index-l1yRugLc.d.mts} +3 -3
- package/dist/{index-o8LxWdwz.d.mts.map → index-l1yRugLc.d.mts.map} +1 -1
- package/dist/{index-3Vdef2KE.d.mts → index-uDZ9Yuv-.d.mts} +5 -8
- package/dist/index-uDZ9Yuv-.d.mts.map +1 -0
- package/dist/index.d.mts +11 -11
- package/dist/index.mjs +53 -53
- package/dist/preview/index.d.mts +3 -3
- package/dist/preview/index.mjs +10 -10
- package/dist/{preview-OTsGYyOU.mjs → preview-IpdVFuxv.mjs} +3 -2
- package/dist/{preview-OTsGYyOU.mjs.map → preview-IpdVFuxv.mjs.map} +1 -1
- package/dist/preview-engine/audio.mjs +1 -1
- package/dist/preview-engine/{chunk-RF62TV3G.mjs → chunk-25WRUINA.mjs} +1 -1
- package/dist/preview-engine/{chunk-MMVFX42U.mjs → chunk-2AEWPT6Y.mjs} +1 -1
- package/dist/preview-engine/{chunk-IIOHF7MH.mjs → chunk-2MDTUA3W.mjs} +1 -1
- package/dist/preview-engine/{chunk-KWTTANYN.mjs → chunk-2TLABBER.mjs} +1 -1
- package/dist/preview-engine/{chunk-MUOJMF7M.mjs → chunk-3QOJVABU.mjs} +1 -1
- package/dist/preview-engine/{chunk-RDEQ4LQU.mjs → chunk-4Q3ZUTQC.mjs} +1 -1
- package/dist/preview-engine/{chunk-OXXRKNHW.mjs → chunk-5BXCJ2QX.mjs} +1 -1
- package/dist/preview-engine/{chunk-JTT3YX7W.mjs → chunk-5R4UF7YK.mjs} +1 -1
- package/dist/preview-engine/{chunk-4C26NVQY.mjs → chunk-6THE6J3A.mjs} +1 -1
- package/dist/preview-engine/{chunk-SVE3XWO7.mjs → chunk-6VDYWMP5.mjs} +1 -1
- package/dist/preview-engine/{chunk-ULPLHKM2.mjs → chunk-7B7QQDPZ.mjs} +1 -1
- package/dist/preview-engine/{chunk-ULVX4VYT.mjs → chunk-7ZA36EZE.mjs} +1 -1
- package/dist/preview-engine/{chunk-LYSU6S4O.mjs → chunk-AJ6BVUDB.mjs} +1 -1
- package/dist/preview-engine/{chunk-J24VHZS6.mjs → chunk-BDXGUSSF.mjs} +1 -1
- package/dist/preview-engine/{chunk-B7J72YSP.mjs → chunk-CC5V7UBF.mjs} +1 -1
- package/dist/preview-engine/{chunk-JD4TBC6Z.mjs → chunk-CP42LYD7.mjs} +1 -1
- package/dist/preview-engine/{chunk-LN3YAWUD.mjs → chunk-DJWDD3OE.mjs} +1 -1
- package/dist/preview-engine/{chunk-V3FODTPI.mjs → chunk-DZEWY4PR.mjs} +22 -22
- package/dist/preview-engine/{chunk-RKNV5N7D.mjs → chunk-ENGQ55LR.mjs} +1 -1
- package/dist/preview-engine/{chunk-AGLAJGQJ.mjs → chunk-FBXKVLTB.mjs} +14 -14
- package/dist/preview-engine/{chunk-MJCK5FLZ.mjs → chunk-FMEXTHL7.mjs} +1 -1
- package/dist/preview-engine/{chunk-UEQIO6AH.mjs → chunk-FQ7UCMWR.mjs} +1 -1
- package/dist/preview-engine/{chunk-TPFDAOW7.mjs → chunk-FRIBHQTM.mjs} +1 -1
- package/dist/preview-engine/chunk-FT7HJ6IE.mjs +3 -0
- package/dist/preview-engine/{chunk-YEPYVASB.mjs → chunk-G3UOUGIE.mjs} +1 -1
- package/dist/preview-engine/{chunk-4JX5LBE2.mjs → chunk-H4GDIVX4.mjs} +1 -1
- package/dist/preview-engine/{chunk-LHCEQ77S.mjs → chunk-HU73APZL.mjs} +1 -1
- package/dist/preview-engine/{chunk-DDFWN7DI.mjs → chunk-I7QIQURU.mjs} +1 -1
- package/dist/preview-engine/{chunk-3KHD67Q3.mjs → chunk-ID344UBN.mjs} +1 -1
- package/dist/preview-engine/{chunk-5NT7WWJR.mjs → chunk-IGCXUGHT.mjs} +1 -1
- package/dist/preview-engine/{chunk-QPBTLJ5W.mjs → chunk-IK3YA6MC.mjs} +1 -1
- package/dist/preview-engine/chunk-J5SKQFJ6.mjs +1 -0
- package/dist/preview-engine/{chunk-Q7JN4EHX.mjs → chunk-JOPZNSZJ.mjs} +1 -1
- package/dist/preview-engine/{chunk-SQ52PBF3.mjs → chunk-JOSNIMFT.mjs} +1 -1
- package/dist/preview-engine/{chunk-SXNCNG4L.mjs → chunk-JR443L5E.mjs} +1 -1
- package/dist/preview-engine/{chunk-FZLKPBKS.mjs → chunk-KCAFMWDM.mjs} +1 -1
- package/dist/preview-engine/{chunk-QRYCB6E3.mjs → chunk-LAEPNVOE.mjs} +1 -1
- package/dist/preview-engine/chunk-MAALUQK3.mjs +1974 -0
- package/dist/preview-engine/chunk-MHCXSWK7.mjs +1 -0
- package/dist/preview-engine/{chunk-4INGTMZ5.mjs → chunk-MWBARRK2.mjs} +1 -1
- package/dist/preview-engine/chunk-MXK2PP6K.mjs +1 -0
- package/dist/preview-engine/{chunk-GQIRV466.mjs → chunk-MXPN2GB7.mjs} +1 -1
- package/dist/preview-engine/{chunk-W2EZFV4Q.mjs → chunk-NHYB5YC3.mjs} +1 -1
- package/dist/preview-engine/{chunk-K3IMPV6T.mjs → chunk-PXSKIGAP.mjs} +6 -6
- package/dist/preview-engine/{chunk-SP22JWN2.mjs → chunk-PYM2FBFA.mjs} +1 -1
- package/dist/preview-engine/chunk-QDTJ4MOJ.mjs +1 -0
- package/dist/preview-engine/{chunk-6PMATELR.mjs → chunk-RQU2GFGH.mjs} +1 -1
- package/dist/preview-engine/{chunk-UQD2UE6I.mjs → chunk-RWDPBES3.mjs} +1 -1
- package/dist/preview-engine/{chunk-QVW5METG.mjs → chunk-S5ONWSZF.mjs} +1 -1
- package/dist/preview-engine/{chunk-2YGR5YCN.mjs → chunk-SIU6JU2R.mjs} +1 -1
- package/dist/preview-engine/{chunk-NQZRPPUU.mjs → chunk-SJ3Q4AQP.mjs} +1 -1
- package/dist/preview-engine/{chunk-Q6CRERSJ.mjs → chunk-T36SKUWK.mjs} +9 -9
- package/dist/preview-engine/chunk-TEBZRQPG.mjs +1 -0
- package/dist/preview-engine/{chunk-WDWHOXSA.mjs → chunk-UUDML2SN.mjs} +1 -1
- package/dist/preview-engine/{chunk-RHXZXWJ4.mjs → chunk-VAS4IJZR.mjs} +1 -1
- package/dist/preview-engine/{chunk-DOCFOSA6.mjs → chunk-WTDK6H46.mjs} +1 -1
- package/dist/preview-engine/chunk-XNMEVVQB.mjs +1 -0
- package/dist/preview-engine/{chunk-AKT4YQWL.mjs → chunk-YVGT4NK6.mjs} +2 -2
- package/dist/preview-engine/{chunk-ZGMA27IG.mjs → chunk-ZR4QFIJR.mjs} +1 -1
- package/dist/preview-engine/chunk-ZYTXBBIX.mjs +1 -0
- package/dist/preview-engine/components.mjs +1 -1
- package/dist/preview-engine/effects.mjs +1 -1
- package/dist/preview-engine/fonts.mjs +1 -1
- package/dist/preview-engine/framefields.mjs +1 -1
- package/dist/preview-engine/player.mjs +2 -2
- package/dist/preview-engine/{renderers-FC7G7KU7.mjs → renderers-2AKYMAIK.mjs} +1 -1
- package/dist/preview-engine/renderers-363CKEIG.mjs +1 -0
- package/dist/preview-engine/{renderers-EJGF3PYQ.mjs → renderers-36L24ZVS.mjs} +1 -1
- package/dist/preview-engine/renderers-3FMMVDMA.mjs +1 -0
- package/dist/preview-engine/{renderers-56TGEFDK.mjs → renderers-44AANAXR.mjs} +1 -1
- package/dist/preview-engine/renderers-4UUU62VV.mjs +1 -0
- package/dist/preview-engine/renderers-4ZTZFSAR.mjs +1 -0
- package/dist/preview-engine/{renderers-PYDOSDEY.mjs → renderers-5ZSB75GY.mjs} +1 -1
- package/dist/preview-engine/renderers-6KDD75BM.mjs +1 -0
- package/dist/preview-engine/renderers-7BJRD4G2.mjs +1 -0
- package/dist/preview-engine/{renderers-HBIBRZD7.mjs → renderers-AIIHGDJM.mjs} +1 -1
- package/dist/preview-engine/{renderers-P2FTCDZ7.mjs → renderers-AU746ORP.mjs} +1 -1
- package/dist/preview-engine/renderers-BIF2BETK.mjs +1 -0
- package/dist/preview-engine/{renderers-FD3ZT73R.mjs → renderers-BTQCHVHV.mjs} +1 -1
- package/dist/preview-engine/{renderers-HMNCIEU3.mjs → renderers-CFHBOAZG.mjs} +1 -1
- package/dist/preview-engine/renderers-CU5RW5UA.mjs +1 -0
- package/dist/preview-engine/renderers-DK5OBTKE.mjs +1 -0
- package/dist/preview-engine/renderers-EAKCDGTY.mjs +1 -0
- package/dist/preview-engine/{renderers-FYI6QNUH.mjs → renderers-EGBGC7MU.mjs} +1 -1
- package/dist/preview-engine/renderers-EVXCU7G7.mjs +1 -0
- package/dist/preview-engine/renderers-EXEYEH3F.mjs +1 -0
- package/dist/preview-engine/{renderers-RDHHVXRE.mjs → renderers-EXJDPS3T.mjs} +1 -1
- package/dist/preview-engine/renderers-F3WALPWI.mjs +1 -0
- package/dist/preview-engine/{renderers-4RVSLTCX.mjs → renderers-FS3EOB4J.mjs} +1 -1
- package/dist/preview-engine/{renderers-C3YXNKNM.mjs → renderers-GUL2MXDD.mjs} +1 -1
- package/dist/preview-engine/{renderers-EQDINUMT.mjs → renderers-H4HC44B5.mjs} +1 -1
- package/dist/preview-engine/renderers-H6565HO4.mjs +1 -0
- package/dist/preview-engine/renderers-HT5V6OZ2.mjs +1 -0
- package/dist/preview-engine/renderers-HXMOARWO.mjs +1 -0
- package/dist/preview-engine/renderers-HZ2Q7BGK.mjs +1 -0
- package/dist/preview-engine/renderers-I4N2K2KW.mjs +1 -0
- package/dist/preview-engine/renderers-I5J7U6CB.mjs +1 -0
- package/dist/preview-engine/renderers-IZV6QXR5.mjs +1 -0
- package/dist/preview-engine/renderers-JWGAPHWX.mjs +1 -0
- package/dist/preview-engine/renderers-KNDSVQTY.mjs +1 -0
- package/dist/preview-engine/renderers-KNDUOO6M.mjs +1 -0
- package/dist/preview-engine/renderers-KQAO3QEI.mjs +1 -0
- package/dist/preview-engine/{renderers-7SW2AHM2.mjs → renderers-LCSQLXRD.mjs} +1 -1
- package/dist/preview-engine/renderers-M34LOEHC.mjs +1 -0
- package/dist/preview-engine/renderers-ML6GNCWB.mjs +1 -0
- package/dist/preview-engine/renderers-NARG274F.mjs +1 -0
- package/dist/preview-engine/renderers-NCFPOSWR.mjs +1 -0
- package/dist/preview-engine/{renderers-ZAMSS7QN.mjs → renderers-PCOTECQB.mjs} +1 -1
- package/dist/preview-engine/renderers-PG5JHI2S.mjs +1 -0
- package/dist/preview-engine/{renderers-LTV5RFDJ.mjs → renderers-Q7MNLQJF.mjs} +1 -1
- package/dist/preview-engine/{renderers-GHP7SL5M.mjs → renderers-QXVSJYZL.mjs} +1 -1
- package/dist/preview-engine/{renderers-H2UI7YEO.mjs → renderers-R3ERZ3ZY.mjs} +1 -1
- package/dist/preview-engine/renderers-RXQKV65L.mjs +1 -0
- package/dist/preview-engine/renderers-SA73GD2B.mjs +1 -0
- package/dist/preview-engine/renderers-SLIXUHNX.mjs +1 -0
- package/dist/preview-engine/renderers-T462JZNA.mjs +1 -0
- package/dist/preview-engine/{renderers-LV6LLULR.mjs → renderers-TH2XZAYW.mjs} +1 -1
- package/dist/preview-engine/{renderers-ART3EGSZ.mjs → renderers-UHZIERVH.mjs} +1 -1
- package/dist/preview-engine/renderers-V7CFVGYK.mjs +1 -0
- package/dist/preview-engine/renderers-VY5E7BPK.mjs +1 -0
- package/dist/preview-engine/{renderers-ZDMDDWLN.mjs → renderers-WKXGELRG.mjs} +1 -1
- package/dist/preview-engine/{renderers-GY4R467B.mjs → renderers-WLDIIFR5.mjs} +1 -1
- package/dist/preview-engine/{renderers-NTKSN32T.mjs → renderers-WM6WBRH6.mjs} +1 -1
- package/dist/preview-engine/renderers-WT5FQZM7.mjs +228 -0
- package/dist/preview-engine/{renderers-YK74777T.mjs → renderers-WTKRLNNR.mjs} +1 -1
- package/dist/preview-engine/{renderers-BWRNCXR6.mjs → renderers-X6GKEVP7.mjs} +1 -1
- package/dist/preview-engine/renderers-Y47N5EYR.mjs +1 -0
- package/dist/preview-engine/renderers-Y4CUVZYI.mjs +1 -0
- package/dist/preview-engine/renderers-Y6YC7ZAK.mjs +1 -0
- package/dist/preview-engine/renderers-Y6ZYUAQG.mjs +1 -0
- package/dist/preview-engine/{renderers-YBTWN76S.mjs → renderers-YRWXYT5A.mjs} +1 -1
- package/dist/preview-engine/{renderers-SY435YU3.mjs → renderers-YWC4MXPG.mjs} +1 -1
- package/dist/preview-engine/{renderers-7GMW52G3.mjs → renderers-ZWNPYZN6.mjs} +1 -1
- package/dist/preview-engine/signals.mjs +1 -1
- package/dist/{program-W4CWO2bp.mjs → program-KPBfq9tw.mjs} +95 -21
- package/dist/program-KPBfq9tw.mjs.map +1 -0
- package/dist/registry/index.json +1 -1
- package/dist/registry/lower-third.json +1 -1
- package/dist/registry/terminal.json +1 -1
- package/dist/registry/text-reveal.json +2 -2
- package/dist/registry/title-card.json +1 -1
- package/dist/renderer/index.d.mts +2 -2
- package/dist/renderer/index.mjs +2 -2
- package/dist/{renderer-CX4rvqm9.mjs → renderer-1-FLx8kd.mjs} +3 -3
- package/dist/{renderer-CX4rvqm9.mjs.map → renderer-1-FLx8kd.mjs.map} +1 -1
- package/dist/{renderer-BIMm7lYG.mjs → renderer-47d3etrX.mjs} +4 -4
- package/dist/{renderer-BIMm7lYG.mjs.map → renderer-47d3etrX.mjs.map} +1 -1
- package/dist/{renderer-CPtyQrJI.mjs → renderer-6GCG6JxD.mjs} +3 -3
- package/dist/{renderer-CPtyQrJI.mjs.map → renderer-6GCG6JxD.mjs.map} +1 -1
- package/dist/{renderer-BE6K88VR.mjs → renderer-8BIDdgjt.mjs} +3 -3
- package/dist/{renderer-BE6K88VR.mjs.map → renderer-8BIDdgjt.mjs.map} +1 -1
- package/dist/renderer-B-5TlncB.mjs +5 -0
- package/dist/{renderer-FgP_1OgD.mjs → renderer-B1yzSbvC.mjs} +4 -4
- package/dist/{renderer-FgP_1OgD.mjs.map → renderer-B1yzSbvC.mjs.map} +1 -1
- package/dist/{renderer-158rymL0.mjs → renderer-B2YiXpp-.mjs} +2 -2
- package/dist/{renderer-158rymL0.mjs.map → renderer-B2YiXpp-.mjs.map} +1 -1
- package/dist/{renderer-eQP0fvgc.mjs → renderer-B55ljMI_.mjs} +2 -2
- package/dist/{renderer-eQP0fvgc.mjs.map → renderer-B55ljMI_.mjs.map} +1 -1
- package/dist/{renderer-Duorbrb8.mjs → renderer-B6Tg4UgH.mjs} +4 -4
- package/dist/{renderer-Duorbrb8.mjs.map → renderer-B6Tg4UgH.mjs.map} +1 -1
- package/dist/{renderer-DmrP4dsn.mjs → renderer-BFnf-8Yt.mjs} +3 -3
- package/dist/{renderer-DmrP4dsn.mjs.map → renderer-BFnf-8Yt.mjs.map} +1 -1
- package/dist/{renderer-CLP6Lm7y.mjs → renderer-BGHHoPiD.mjs} +2 -2
- package/dist/{renderer-BO5u8eFS.mjs → renderer-BHUjPi24.mjs} +2 -2
- package/dist/{renderer-BO5u8eFS.mjs.map → renderer-BHUjPi24.mjs.map} +1 -1
- package/dist/renderer-BHXtDg5_.mjs +3 -0
- package/dist/{renderer-HPBahXjt.mjs → renderer-BIk67-jU.mjs} +2 -2
- package/dist/{renderer-HPBahXjt.mjs.map → renderer-BIk67-jU.mjs.map} +1 -1
- package/dist/{renderer-C-dcd14F.d.mts → renderer-BLEmr0Lt.d.mts} +2 -2
- package/dist/{renderer-C-dcd14F.d.mts.map → renderer-BLEmr0Lt.d.mts.map} +1 -1
- package/dist/{renderer-tYmQUp4d.mjs → renderer-BLs5sDdk.mjs} +3 -3
- package/dist/{renderer-tYmQUp4d.mjs.map → renderer-BLs5sDdk.mjs.map} +1 -1
- package/dist/renderer-BPd3gvEt.mjs +5 -0
- package/dist/{renderer-BiH29MS6.mjs → renderer-BXul0Wy6.mjs} +3 -3
- package/dist/{renderer-BiH29MS6.mjs.map → renderer-BXul0Wy6.mjs.map} +1 -1
- package/dist/{renderer-DVdRzDwX.mjs → renderer-B_1SLBPa.mjs} +3 -3
- package/dist/{renderer-DVdRzDwX.mjs.map → renderer-B_1SLBPa.mjs.map} +1 -1
- package/dist/renderer-B_ep98BH.mjs +5 -0
- package/dist/renderer-Ba_KUbKW.mjs +5 -0
- package/dist/{renderer-dX7Fy1NR.mjs → renderer-BbyNUjE_.mjs} +3 -3
- package/dist/{renderer-dX7Fy1NR.mjs.map → renderer-BbyNUjE_.mjs.map} +1 -1
- package/dist/{renderer-0n4A8P2_.mjs → renderer-BcVr_cIk.mjs} +2 -2
- package/dist/{renderer-0n4A8P2_.mjs.map → renderer-BcVr_cIk.mjs.map} +1 -1
- package/dist/renderer-BeL2hstU.mjs +5 -0
- package/dist/renderer-Bj81osPQ.mjs +5 -0
- package/dist/{renderer-ZM2jwJbX.mjs → renderer-BjL7sKGU.mjs} +3 -3
- package/dist/{renderer-ZM2jwJbX.mjs.map → renderer-BjL7sKGU.mjs.map} +1 -1
- package/dist/{renderer-Bh7d3RSt.mjs → renderer-BjNcuJ4H.mjs} +3 -3
- package/dist/{renderer-Bh7d3RSt.mjs.map → renderer-BjNcuJ4H.mjs.map} +1 -1
- package/dist/{renderer-Sdsy27LH.mjs → renderer-Br8aDmf0.mjs} +2 -2
- package/dist/renderer-BvZQngSm.mjs +5 -0
- package/dist/renderer-BxgN8oXx.mjs +5 -0
- package/dist/{renderer-BQ-pHSPI.mjs → renderer-ByOvGGzp.mjs} +3 -3
- package/dist/{renderer-BQ-pHSPI.mjs.map → renderer-ByOvGGzp.mjs.map} +1 -1
- package/dist/{renderer-KkDYCAkn.mjs → renderer-C11qLlrz.mjs} +3 -3
- package/dist/{renderer-KkDYCAkn.mjs.map → renderer-C11qLlrz.mjs.map} +1 -1
- package/dist/{renderer-D52KWsb8.mjs → renderer-C5dyPQjG.mjs} +3 -3
- package/dist/{renderer-D52KWsb8.mjs.map → renderer-C5dyPQjG.mjs.map} +1 -1
- package/dist/renderer-C5jDrTBc.mjs +5 -0
- package/dist/{renderer-DTKtkgTO.mjs → renderer-C6TbU8U5.mjs} +3 -3
- package/dist/{renderer-DTKtkgTO.mjs.map → renderer-C6TbU8U5.mjs.map} +1 -1
- package/dist/{renderer-aT6MUYPr.mjs → renderer-C9bcEaBE.mjs} +3 -3
- package/dist/{renderer-aT6MUYPr.mjs.map → renderer-C9bcEaBE.mjs.map} +1 -1
- package/dist/{renderer-CsxO_wBG.mjs → renderer-CAH00Lub.mjs} +2 -2
- package/dist/{renderer-Cb74SQHm.mjs → renderer-CAhsBEpU.mjs} +2 -2
- package/dist/{renderer-Cb74SQHm.mjs.map → renderer-CAhsBEpU.mjs.map} +1 -1
- package/dist/renderer-CBK4M82Y.mjs +5 -0
- package/dist/{renderer-CFSh2eG-.mjs → renderer-CCH0gSF7.mjs} +3 -3
- package/dist/{renderer-CFSh2eG-.mjs.map → renderer-CCH0gSF7.mjs.map} +1 -1
- package/dist/{renderer-CHvEgLHy.mjs → renderer-CCbOp0BM.mjs} +3 -3
- package/dist/{renderer-CHvEgLHy.mjs.map → renderer-CCbOp0BM.mjs.map} +1 -1
- package/dist/{renderer-DrrWvz8l.mjs → renderer-CEb5GjcU.mjs} +3 -3
- package/dist/{renderer-DrrWvz8l.mjs.map → renderer-CEb5GjcU.mjs.map} +1 -1
- package/dist/{renderer-1KfQICGK.mjs → renderer-CIL9zh-a.mjs} +3 -3
- package/dist/{renderer-1KfQICGK.mjs.map → renderer-CIL9zh-a.mjs.map} +1 -1
- package/dist/{renderer-CEvj79Wg.mjs → renderer-CIbXIFOb.mjs} +4 -4
- package/dist/{renderer-CEvj79Wg.mjs.map → renderer-CIbXIFOb.mjs.map} +1 -1
- package/dist/renderer-CLHtCctc.mjs +5 -0
- package/dist/{renderer-DxOJv_G7.mjs → renderer-CLX33fIK.mjs} +3 -3
- package/dist/{renderer-DxOJv_G7.mjs.map → renderer-CLX33fIK.mjs.map} +1 -1
- package/dist/{renderer-BcaT2j3R.mjs → renderer-CLXpWDqx.mjs} +2 -2
- package/dist/{renderer-BcaT2j3R.mjs.map → renderer-CLXpWDqx.mjs.map} +1 -1
- package/dist/renderer-CLin7MNN.mjs +5 -0
- package/dist/{renderer-COcFh5bK.mjs → renderer-CLypsmiH.mjs} +3 -3
- package/dist/{renderer-COcFh5bK.mjs.map → renderer-CLypsmiH.mjs.map} +1 -1
- package/dist/renderer-CN7TypOB.mjs +5 -0
- package/dist/renderer-CV5Jfwq7.mjs +5 -0
- package/dist/renderer-Ca5E46WK.mjs +5 -0
- package/dist/renderer-CdbOtoOU.mjs +5 -0
- package/dist/renderer-CeD_bqWj.mjs +5 -0
- package/dist/{renderer-BnpMAub0.mjs → renderer-CfEuoZ7b.mjs} +3 -3
- package/dist/{renderer-BnpMAub0.mjs.map → renderer-CfEuoZ7b.mjs.map} +1 -1
- package/dist/renderer-CfzNNUOd.mjs +5 -0
- package/dist/{renderer-0W-Ty55h.mjs → renderer-Cg3h0Mz9.mjs} +3 -3
- package/dist/{renderer-0W-Ty55h.mjs.map → renderer-Cg3h0Mz9.mjs.map} +1 -1
- package/dist/renderer-Cl8TmdU8.mjs +5 -0
- package/dist/{renderer-CoaDDIS6.mjs → renderer-ClHqvIps.mjs} +10 -10
- package/dist/renderer-ClHqvIps.mjs.map +1 -0
- package/dist/renderer-CosBP_IM.mjs +5 -0
- package/dist/renderer-CpwVs5Fh.mjs +5 -0
- package/dist/renderer-Cq7baxNb.mjs +5 -0
- package/dist/{renderer-B_Oz9L3g.mjs → renderer-CqMz_iXy.mjs} +2 -2
- package/dist/{renderer-B_Oz9L3g.mjs.map → renderer-CqMz_iXy.mjs.map} +1 -1
- package/dist/{renderer-DORydJHm.mjs → renderer-CqSmfrE1.mjs} +3 -3
- package/dist/{renderer-DORydJHm.mjs.map → renderer-CqSmfrE1.mjs.map} +1 -1
- package/dist/{renderer-WTvo3wo9.d.mts → renderer-CrhJJKFY.d.mts} +5 -3
- package/dist/renderer-CrhJJKFY.d.mts.map +1 -0
- package/dist/{renderer-Bt3F1tmP.mjs → renderer-CxxwhUwy.mjs} +3 -3
- package/dist/{renderer-Bt3F1tmP.mjs.map → renderer-CxxwhUwy.mjs.map} +1 -1
- package/dist/{renderer-Cba208C9.mjs → renderer-D24aiXmB.mjs} +3 -3
- package/dist/{renderer-Cba208C9.mjs.map → renderer-D24aiXmB.mjs.map} +1 -1
- package/dist/renderer-D6GkxwAx.mjs +5 -0
- package/dist/renderer-D7SfGdzX.mjs +5 -0
- package/dist/renderer-D7wt09_l.mjs +5 -0
- package/dist/{renderer-CdJoOfQw.mjs → renderer-DBslE7fc.mjs} +2 -2
- package/dist/{renderer-CdJoOfQw.mjs.map → renderer-DBslE7fc.mjs.map} +1 -1
- package/dist/{renderer-Df-rf7RC.mjs → renderer-DE3Ki96C.mjs} +3 -3
- package/dist/{renderer-Df-rf7RC.mjs.map → renderer-DE3Ki96C.mjs.map} +1 -1
- package/dist/{renderer-DqIrYB0P.mjs → renderer-DJCqc98W.mjs} +3 -3
- package/dist/{renderer-DqIrYB0P.mjs.map → renderer-DJCqc98W.mjs.map} +1 -1
- package/dist/{renderer-E54Vv1_W.mjs → renderer-DODOyrty.mjs} +3 -3
- package/dist/{renderer-E54Vv1_W.mjs.map → renderer-DODOyrty.mjs.map} +1 -1
- package/dist/{renderer-DuFwDHHF.mjs → renderer-DRYxcfgi.mjs} +2 -2
- package/dist/renderer-DSuDMYqY.mjs +5 -0
- package/dist/{renderer-BGDKxfsM.mjs → renderer-DYreml_A.mjs} +3 -3
- package/dist/{renderer-BGDKxfsM.mjs.map → renderer-DYreml_A.mjs.map} +1 -1
- package/dist/{renderer-BGnMRdUK.mjs → renderer-DZJnNISO.mjs} +2 -2
- package/dist/{renderer-BGnMRdUK.mjs.map → renderer-DZJnNISO.mjs.map} +1 -1
- package/dist/renderer-DaIstCIs.mjs +5 -0
- package/dist/renderer-DbOD3Nc0.mjs +5 -0
- package/dist/{renderer-B3gQT1uq.mjs → renderer-DbenSRjl.mjs} +3 -3
- package/dist/{renderer-B3gQT1uq.mjs.map → renderer-DbenSRjl.mjs.map} +1 -1
- package/dist/{renderer-DGsWlXjl.mjs → renderer-DcXxkxds.mjs} +75 -72
- package/dist/renderer-DcXxkxds.mjs.map +1 -0
- package/dist/renderer-DdRCA1bn.mjs +6 -0
- package/dist/{renderer-PDs21Gsq.mjs → renderer-DdUtL-qF.mjs} +3 -3
- package/dist/{renderer-PDs21Gsq.mjs.map → renderer-DdUtL-qF.mjs.map} +1 -1
- package/dist/renderer-DfO37haf.mjs +5 -0
- package/dist/renderer-DjZwzxZ7.mjs +5 -0
- package/dist/renderer-DnAvySNy.mjs +5 -0
- package/dist/{renderer-BwnQRuce.mjs → renderer-DnbY04Qk.mjs} +3 -3
- package/dist/{renderer-BwnQRuce.mjs.map → renderer-DnbY04Qk.mjs.map} +1 -1
- package/dist/renderer-DnvEPm5E.mjs +5 -0
- package/dist/{renderer-C_-hWBF1.mjs → renderer-Do9mW_-B.mjs} +3 -3
- package/dist/{renderer-C_-hWBF1.mjs.map → renderer-Do9mW_-B.mjs.map} +1 -1
- package/dist/{renderer-PDAlUGKG.mjs → renderer-Dqg8qxjq.mjs} +3 -3
- package/dist/{renderer-PDAlUGKG.mjs.map → renderer-Dqg8qxjq.mjs.map} +1 -1
- package/dist/{renderer-wrXFfvpJ.mjs → renderer-DvkRbmb2.mjs} +3 -3
- package/dist/{renderer-wrXFfvpJ.mjs.map → renderer-DvkRbmb2.mjs.map} +1 -1
- package/dist/renderer-DwNpKnWf.mjs +5 -0
- package/dist/{renderer-Cv6od7Be.mjs → renderer-Dw_xy3zx.mjs} +3 -3
- package/dist/{renderer-Cv6od7Be.mjs.map → renderer-Dw_xy3zx.mjs.map} +1 -1
- package/dist/renderer-Dx3Dghus.mjs +5 -0
- package/dist/{renderer-lP23pU1s.mjs → renderer-DyrNti45.mjs} +3 -3
- package/dist/{renderer-lP23pU1s.mjs.map → renderer-DyrNti45.mjs.map} +1 -1
- package/dist/renderer-KvaoEwIk.mjs +5 -0
- package/dist/{renderer-Cw7R1U43.mjs → renderer-SwUFJ4aA.mjs} +3 -3
- package/dist/{renderer-Cw7R1U43.mjs.map → renderer-SwUFJ4aA.mjs.map} +1 -1
- package/dist/{renderer-C4Jfgjm5.mjs → renderer-XEoQnDs5.mjs} +3 -3
- package/dist/{renderer-C4Jfgjm5.mjs.map → renderer-XEoQnDs5.mjs.map} +1 -1
- package/dist/{renderer-BXGr426R.mjs → renderer-Xw9Zn3pD.mjs} +2 -2
- package/dist/{renderer-BXGr426R.mjs.map → renderer-Xw9Zn3pD.mjs.map} +1 -1
- package/dist/{renderer-BEpA2g1_.mjs → renderer-ZWIDTOLV.mjs} +2 -2
- package/dist/{renderer-BEpA2g1_.mjs.map → renderer-ZWIDTOLV.mjs.map} +1 -1
- package/dist/{renderer-D36Pjp0B.mjs → renderer-bGhRdKB7.mjs} +2 -2
- package/dist/{renderer-D36Pjp0B.mjs.map → renderer-bGhRdKB7.mjs.map} +1 -1
- package/dist/{renderer-ZarULMvJ.mjs → renderer-d4weUlVq.mjs} +2 -2
- package/dist/{renderer-ZarULMvJ.mjs.map → renderer-d4weUlVq.mjs.map} +1 -1
- package/dist/{renderer-YEDoDnsE.mjs → renderer-g7CMgD1v.mjs} +3 -3
- package/dist/{renderer-YEDoDnsE.mjs.map → renderer-g7CMgD1v.mjs.map} +1 -1
- package/dist/{renderer-CZGpETnc.mjs → renderer-gjLFqdv-.mjs} +4 -4
- package/dist/{renderer-CZGpETnc.mjs.map → renderer-gjLFqdv-.mjs.map} +1 -1
- package/dist/{renderer-H-Adf8Za.mjs → renderer-gv0u9XmU.mjs} +3 -3
- package/dist/{renderer-H-Adf8Za.mjs.map → renderer-gv0u9XmU.mjs.map} +1 -1
- package/dist/{renderer-FPYVmSf6.mjs → renderer-jJWwrha1.mjs} +3 -3
- package/dist/{renderer-FPYVmSf6.mjs.map → renderer-jJWwrha1.mjs.map} +1 -1
- package/dist/{renderer-BKhdqykZ.mjs → renderer-kl_pAczD.mjs} +3 -3
- package/dist/{renderer-BKhdqykZ.mjs.map → renderer-kl_pAczD.mjs.map} +1 -1
- package/dist/{renderer-BKL3UEzN.mjs → renderer-lrKwPhZi.mjs} +2 -2
- package/dist/{renderer-BKL3UEzN.mjs.map → renderer-lrKwPhZi.mjs.map} +1 -1
- package/dist/{renderer-C2O4nK9x.mjs → renderer-pnYj1REL.mjs} +3 -3
- package/dist/{renderer-C2O4nK9x.mjs.map → renderer-pnYj1REL.mjs.map} +1 -1
- package/dist/{renderers-CP8CFWDs-CZJ7NRsl.mjs → renderers-CP8CFWDs-CDikhBRO.mjs} +3 -3
- package/dist/{renderers-CP8CFWDs-CZJ7NRsl.mjs.map → renderers-CP8CFWDs-CDikhBRO.mjs.map} +1 -1
- package/dist/signals/index.d.mts +5 -5
- package/dist/signals/index.mjs +6 -6
- package/dist/{signals-BrNF9l9s.mjs → signals-BeAWA_1Y.mjs} +3 -3
- package/dist/{signals-BrNF9l9s.mjs.map → signals-BeAWA_1Y.mjs.map} +1 -1
- package/dist/{src-_l81YkMD.mjs → src-LYcH_X8o.mjs} +233 -27
- package/dist/src-LYcH_X8o.mjs.map +1 -0
- package/package.json +58 -58
- package/dist/dist-D021IFfp.mjs.map +0 -1
- package/dist/dist-DSKhnhDk.mjs.map +0 -1
- package/dist/dist-cC6nOaMR.mjs.map +0 -1
- package/dist/index-3Vdef2KE.d.mts.map +0 -1
- package/dist/index-CWG19cm-.d.mts.map +0 -1
- package/dist/index-ocZc12ZS.d.mts.map +0 -1
- package/dist/preview-engine/chunk-3SR6BI4B.mjs +0 -1
- package/dist/preview-engine/chunk-5NLDETDV.mjs +0 -1974
- package/dist/preview-engine/chunk-ALSOO22Q.mjs +0 -1
- package/dist/preview-engine/chunk-NKGXINCU.mjs +0 -1
- package/dist/preview-engine/chunk-PJMX2GFY.mjs +0 -1
- package/dist/preview-engine/chunk-SIXIF5QZ.mjs +0 -3
- package/dist/preview-engine/renderers-4CRXZJ5G.mjs +0 -1
- package/dist/preview-engine/renderers-5QF4OLFQ.mjs +0 -1
- package/dist/preview-engine/renderers-5SOW6OVE.mjs +0 -1
- package/dist/preview-engine/renderers-6M2HPY2J.mjs +0 -1
- package/dist/preview-engine/renderers-7HT5NW7W.mjs +0 -1
- package/dist/preview-engine/renderers-ATTGUTYY.mjs +0 -1
- package/dist/preview-engine/renderers-AYWCRBQC.mjs +0 -1
- package/dist/preview-engine/renderers-BA6ZCPI5.mjs +0 -1
- package/dist/preview-engine/renderers-BAS7RXTC.mjs +0 -1
- package/dist/preview-engine/renderers-CZTCW4FC.mjs +0 -1
- package/dist/preview-engine/renderers-D2XEQ2YY.mjs +0 -1
- package/dist/preview-engine/renderers-DFIJYBW2.mjs +0 -1
- package/dist/preview-engine/renderers-EJN6M6DO.mjs +0 -1
- package/dist/preview-engine/renderers-EK3HQUUF.mjs +0 -1
- package/dist/preview-engine/renderers-G34C5J27.mjs +0 -1
- package/dist/preview-engine/renderers-GKVTNDVH.mjs +0 -1
- package/dist/preview-engine/renderers-HZBYQKIQ.mjs +0 -1
- package/dist/preview-engine/renderers-IK7ZJJKJ.mjs +0 -1
- package/dist/preview-engine/renderers-ISASPH6T.mjs +0 -1
- package/dist/preview-engine/renderers-IT5ISWSA.mjs +0 -228
- package/dist/preview-engine/renderers-IW5MWDBI.mjs +0 -1
- package/dist/preview-engine/renderers-K2PI4WJS.mjs +0 -1
- package/dist/preview-engine/renderers-KESHVFL2.mjs +0 -1
- package/dist/preview-engine/renderers-KTZZVAB2.mjs +0 -1
- package/dist/preview-engine/renderers-KY5CJEOV.mjs +0 -1
- package/dist/preview-engine/renderers-M5W6SUQD.mjs +0 -1
- package/dist/preview-engine/renderers-MEM3REMI.mjs +0 -1
- package/dist/preview-engine/renderers-N36R42RL.mjs +0 -1
- package/dist/preview-engine/renderers-O5XMWFPY.mjs +0 -1
- package/dist/preview-engine/renderers-QJA35PKC.mjs +0 -1
- package/dist/preview-engine/renderers-TJIFTQHV.mjs +0 -1
- package/dist/preview-engine/renderers-TN4XN436.mjs +0 -1
- package/dist/preview-engine/renderers-UDYLCYCB.mjs +0 -1
- package/dist/preview-engine/renderers-WZ7SFIBZ.mjs +0 -1
- package/dist/preview-engine/renderers-X6QNDC6R.mjs +0 -1
- package/dist/preview-engine/renderers-X6RNTJOV.mjs +0 -1
- package/dist/preview-engine/renderers-Y3N7236P.mjs +0 -1
- package/dist/preview-engine/renderers-YP3ASXIJ.mjs +0 -1
- package/dist/preview-engine/renderers-YVJAG3PD.mjs +0 -1
- package/dist/preview-engine/renderers-ZPPZNMKJ.mjs +0 -1
- package/dist/program-W4CWO2bp.mjs.map +0 -1
- package/dist/renderer-8HnHWqYj.mjs +0 -5
- package/dist/renderer-8itujues.mjs +0 -5
- package/dist/renderer-BFods-7v.mjs +0 -5
- package/dist/renderer-BbQygRwc.mjs +0 -5
- package/dist/renderer-Bq_sPaCg.mjs +0 -5
- package/dist/renderer-BrkDrvqS.mjs +0 -5
- package/dist/renderer-C1diVT5Q.mjs +0 -5
- package/dist/renderer-C8E7ajTR.mjs +0 -5
- package/dist/renderer-CAz8JW5c.mjs +0 -5
- package/dist/renderer-CKfrUdGw.mjs +0 -5
- package/dist/renderer-CL0rqBA4.mjs +0 -5
- package/dist/renderer-COyavIEv.mjs +0 -5
- package/dist/renderer-CUrShvUZ.mjs +0 -5
- package/dist/renderer-CWvJ_GaL.mjs +0 -5
- package/dist/renderer-Ck0mGIo9.mjs +0 -5
- package/dist/renderer-CoaDDIS6.mjs.map +0 -1
- package/dist/renderer-CqIXqdf0.mjs +0 -5
- package/dist/renderer-Csod6biL.mjs +0 -5
- package/dist/renderer-CueO924-.mjs +0 -5
- package/dist/renderer-D1vM4obC.mjs +0 -5
- package/dist/renderer-DB7QUt90.mjs +0 -5
- package/dist/renderer-DGsWlXjl.mjs.map +0 -1
- package/dist/renderer-DLMDnKlA.mjs +0 -6
- package/dist/renderer-DNs7yWMr.mjs +0 -5
- package/dist/renderer-DOrtuoa9.mjs +0 -5
- package/dist/renderer-D_JgOawb.mjs +0 -5
- package/dist/renderer-DdLo1uoa.mjs +0 -5
- package/dist/renderer-DeX3JEZV.mjs +0 -5
- package/dist/renderer-DfgZVACG.mjs +0 -5
- package/dist/renderer-DoYG7Pn6.mjs +0 -5
- package/dist/renderer-Jwqa-BUN.mjs +0 -5
- package/dist/renderer-WTvo3wo9.d.mts.map +0 -1
- package/dist/renderer-WyaqnVMz.mjs +0 -3
- package/dist/renderer-Z2Vs-IqP.mjs +0 -5
- package/dist/renderer-ZnyCpdWE.mjs +0 -5
- package/dist/renderer-emCnsnTH.mjs +0 -5
- package/dist/renderer-ioxa4-Dy.mjs +0 -5
- package/dist/renderer-iyIwrDWO.mjs +0 -5
- package/dist/renderer-tuudA_RZ.mjs +0 -5
- package/dist/renderer-yyn8S821.mjs +0 -5
- package/dist/src-_l81YkMD.mjs.map +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import "./chunk-D7gtBK74.mjs";
|
|
2
2
|
import { n as defineRenderer } from "./renderer-BgmO1Dzw.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-BHTd-EC1.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-zIhSz_0X.mjs";
|
|
5
5
|
|
|
6
6
|
//#region ../../nodes/node-iridescence/dist/renderers-qgYExzH6.mjs
|
|
7
7
|
const OP = "Iridescence";
|
|
@@ -200,4 +200,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: IridescenceWebGPURender
|
|
|
200
200
|
|
|
201
201
|
//#endregion
|
|
202
202
|
export { IridescenceWebGPURenderer, renderers_default as default };
|
|
203
|
-
//# sourceMappingURL=renderer-
|
|
203
|
+
//# sourceMappingURL=renderer-CCbOp0BM.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-
|
|
1
|
+
{"version":3,"file":"renderer-CCbOp0BM.mjs","names":[],"sources":["../../../nodes/node-iridescence/dist/renderers-qgYExzH6.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst OP = \"Iridescence\";\nconst UNIFORM_FLOATS = 8;\n/** One fragment shader per pass; pass 0 reads the layer, later passes read the previous pass. */\nconst PASSES = [`struct U { v : array<vec4<f32>, 2> };\n@group(0) @binding(0) var<uniform> u : U;\n@group(0) @binding(1) var src : texture_2d<f32>;\n@group(0) @binding(2) var prev : texture_2d<f32>;\n@group(0) @binding(3) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn straight(c : vec4<f32>) -> vec4<f32> {\n\tif (c.a <= 0.0001) { return vec4<f32>(0.0); }\n\treturn vec4<f32>(c.rgb / c.a, c.a);\n}\nfn premul(c : vec4<f32>) -> vec4<f32> { return vec4<f32>(c.rgb * c.a, c.a); }\nfn res() -> vec2<f32> { return vec2<f32>(textureDimensions(src)); }\n/** Straight-alpha color of the layer at a uv (filtered). */\nfn sampleS(uv : vec2<f32>) -> vec4<f32> { return straight(textureSampleLevel(src, samp, uv, 0.0)); }\n/** Premultiplied color of the layer at a uv (filtered). */\nfn sampleP(uv : vec2<f32>) -> vec4<f32> { return textureSampleLevel(src, samp, uv, 0.0); }\n/** Straight-alpha color of the layer's texel at a pixel position (nearest). */\nfn texelS(p : vec2<f32>) -> vec4<f32> {\n\tlet d = vec2<i32>(textureDimensions(src));\n\tlet q = clamp(vec2<i32>(floor(p)), vec2<i32>(0), d - vec2<i32>(1));\n\treturn straight(textureLoad(src, q, 0));\n}\nfn luma(c : vec3<f32>) -> f32 { return dot(c, vec3<f32>(0.2126, 0.7152, 0.0722)); }\nfn hash12(p : vec2<f32>) -> f32 {\n\tvar p3 = fract(vec3<f32>(p.xyx) * 0.1031);\n\tp3 += dot(p3, p3.yzx + 33.33);\n\treturn fract((p3.x + p3.y) * p3.z);\n}\nfn vnoise(p : vec2<f32>) -> f32 {\n\tlet i = floor(p);\n\tlet f = fract(p);\n\tlet u = f * f * (3.0 - 2.0 * f);\n\treturn mix(mix(hash12(i), hash12(i + vec2<f32>(1.0, 0.0)), u.x),\n\t\tmix(hash12(i + vec2<f32>(0.0, 1.0)), hash12(i + vec2<f32>(1.0, 1.0)), u.x), u.y);\n}\n/** 8x8 ordered-dither threshold, 0..1. */\nfn bayer8(p : vec2<f32>) -> f32 {\n\tlet x = u32(p.x) & 7u;\n\tlet y = u32(p.y) & 7u;\n\tvar v = 0u;\n\tfor (var k = 0u; k < 3u; k++) {\n\t\tlet bx = (x >> k) & 1u;\n\t\tlet by = (y >> k) & 1u;\n\t\tlet m = ((bx ^ by) << 1u) | by;\n\t\tv += m * (1u << (2u * (2u - k)));\n\t}\n\treturn (f32(v) + 0.5) / 64.0;\n}\nfn rot2(a : f32) -> mat2x2<f32> { let c = cos(a); let s = sin(a); return mat2x2<f32>(c, s, -s, c); }\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet time = u.v[0].x;\n\tlet frame = u.v[0].y;\n\tlet strength = u.v[1].x;\n\tlet scale = u.v[1].y;\n\tlet shift = u.v[1].z;\n\tlet mode = u32(u.v[1].w + 0.5);\n\n\tlet R = res();\n\tlet c = sampleS(in.uv);\n\tlet l = luma(c.rgb);\n\tvar phase = l;\n\tvar amount = strength;\n\tif (mode == 1u) {\n\t\tlet o = 5.0 / R;\n\t\tlet gx = luma(sampleS(in.uv + vec2<f32>(o.x, 0.0)).rgb) - luma(sampleS(in.uv - vec2<f32>(o.x, 0.0)).rgb);\n\t\tlet gy = luma(sampleS(in.uv + vec2<f32>(0.0, o.y)).rgb) - luma(sampleS(in.uv - vec2<f32>(0.0, o.y)).rgb);\n\t\tlet n = normalize(vec3<f32>(-gx * 3.0, -gy * 3.0, 1.0));\n\t\tlet slope = 1.0 - n.z;\n\t\tphase = slope * 3.0 + l * 0.6 + in.uv.x * 0.4 + in.uv.y * 0.3;\n\t\tamount = strength * clamp(0.3 + slope * 6.0, 0.0, 1.0);\n\t}\n\tphase = phase * scale + shift / 360.0;\n\tlet rainbow = 0.5 + 0.5 * cos(6.2831853 * (phase + vec3<f32>(0.0, 0.33, 0.67)));\n\tlet screened = vec3<f32>(1.0) - (vec3<f32>(1.0) - c.rgb) * (vec3<f32>(1.0) - rainbow * 0.85);\n\treturn premul(vec4<f32>(mix(c.rgb, screened, amount), c.a));\n}\n`];\nconst resources = perDevice((device) => ({\n\tlayout: fragmentBindGroupLayout(device, [\n\t\t\"uniform\",\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"sampler\"\n\t], `${OP}_layout`),\n\tpipelines: /* @__PURE__ */ new Map(),\n\tsampler: device.createSampler({\n\t\tmagFilter: \"linear\",\n\t\tminFilter: \"linear\",\n\t\taddressModeU: \"clamp-to-edge\",\n\t\taddressModeV: \"clamp-to-edge\"\n\t})\n}));\nfunction pipelinesFor(device, format) {\n\tconst r = resources(device);\n\tlet list = r.pipelines.get(format);\n\tif (!list) {\n\t\tlist = PASSES.map((code, i) => {\n\t\t\tconst module = device.createShaderModule({\n\t\t\t\tcode,\n\t\t\t\tlabel: `${OP}_${i}.wgsl`\n\t\t\t});\n\t\t\treturn device.createRenderPipeline({\n\t\t\t\tlabel: `${OP}_${i}`,\n\t\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [r.layout] }),\n\t\t\t\tvertex: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"vs\"\n\t\t\t\t},\n\t\t\t\tfragment: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"fs\",\n\t\t\t\t\ttargets: [{ format }]\n\t\t\t\t},\n\t\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t\t});\n\t\t});\n\t\tr.pipelines.set(format, list);\n\t}\n\treturn list;\n}\nfunction num(v, fallback) {\n\tconst n = typeof v === \"number\" ? v : Number(v);\n\treturn Number.isFinite(n) ? n : fallback;\n}\n/** Packs the effect's resolved props into the uniform block the shaders read. */\nfunction pack(raw, data, time, frame) {\n\tdata.fill(0);\n\tdata[0] = time;\n\tdata[1] = frame;\n\tdata[4] = num(raw.strength, .6);\n\tdata[5] = num(raw.scale, 2);\n\tdata[6] = num(raw.shift, 0);\n\tdata[7] = Math.max(0, [\"luminance\", \"relief\"].indexOf(String(raw.mode ?? \"relief\")));\n}\nconst IridescenceWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== OP) return;\n\tconst child = props.virtualMedia?.children?.[0];\n\tif (!child) return;\n\tpass.end();\n\tconst fps = props.fps || 30;\n\tconst frame = Math.round(props.compositionFrame ?? props.frame ?? 0);\n\tconst raw = op.effect?.resolveUniforms ? op.effect.resolveUniforms({\n\t\tframe,\n\t\tfps,\n\t\ttime: frame / fps\n\t}) : op;\n\tconst data = new Float32Array(UNIFORM_FLOATS);\n\tpack(raw, data, frame / fps, frame);\n\tconst { texture: childTex } = await drawChildToTexture(args, child);\n\tconst device = ctx.device;\n\tconst r = resources(device);\n\tconst pipelines = pipelinesFor(device, ctx.renderer.format);\n\tconst ubo = ctx.renderer.getTemporaryBuffer(data);\n\tlet prev = childTex;\n\tfor (const pipeline of pipelines) {\n\t\tconst out = ctx.renderer.getTemporaryTexture(targetWidth, targetHeight, [\n\t\t\tchildTex,\n\t\t\tprev,\n\t\t\ttargetTexture,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tdrawFullscreenPass(encoder, out.createView(), pipeline, [device.createBindGroup({\n\t\t\tlayout: r.layout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: ubo }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: childTex.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: prev.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: r.sampler\n\t\t\t\t}\n\t\t\t]\n\t\t})]);\n\t\tprev = out;\n\t}\n\tdrawTextureToTarget(args, prev);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: IridescenceWebGPURenderer });\n\n//#endregion\nexport { IridescenceWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-qgYExzH6.mjs.map"],"mappings":";;;;;;AAIA,MAAM,KAAK;AACX,MAAM,iBAAiB;;AAEvB,MAAM,SAAS,CAAC;;;;;EAKd,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwErB;AACF,MAAM,YAAY,WAAW,YAAY;CACxC,QAAQ,wBAAwB,QAAQ;EACvC;EACA;EACA;EACA;EACA,EAAE,GAAG,GAAG,SAAS;CAClB,2BAA2B,IAAI,KAAK;CACpC,SAAS,OAAO,cAAc;EAC7B,WAAW;EACX,WAAW;EACX,cAAc;EACd,cAAc;EACd,CAAC;CACF,EAAE;AACH,SAAS,aAAa,QAAQ,QAAQ;CACrC,MAAM,IAAI,UAAU,OAAO;CAC3B,IAAI,OAAO,EAAE,UAAU,IAAI,OAAO;AAClC,KAAI,CAAC,MAAM;AACV,SAAO,OAAO,KAAK,MAAM,MAAM;GAC9B,MAAM,SAAS,OAAO,mBAAmB;IACxC;IACA,OAAO,GAAG,GAAG,GAAG,EAAE;IAClB,CAAC;AACF,UAAO,OAAO,qBAAqB;IAClC,OAAO,GAAG,GAAG,GAAG;IAChB,QAAQ,OAAO,qBAAqB,EAAE,kBAAkB,CAAC,EAAE,OAAO,EAAE,CAAC;IACrE,QAAQ;KACP;KACA,YAAY;KACZ;IACD,UAAU;KACT;KACA,YAAY;KACZ,SAAS,CAAC,EAAE,QAAQ,CAAC;KACrB;IACD,WAAW,EAAE,UAAU,kBAAkB;IACzC,CAAC;IACD;AACF,IAAE,UAAU,IAAI,QAAQ,KAAK;;AAE9B,QAAO;;AAER,SAAS,IAAI,GAAG,UAAU;CACzB,MAAM,IAAI,OAAO,MAAM,WAAW,IAAI,OAAO,EAAE;AAC/C,QAAO,OAAO,SAAS,EAAE,GAAG,IAAI;;;AAGjC,SAAS,KAAK,KAAK,MAAM,MAAM,OAAO;AACrC,MAAK,KAAK,EAAE;AACZ,MAAK,KAAK;AACV,MAAK,KAAK;AACV,MAAK,KAAK,IAAI,IAAI,UAAU,GAAG;AAC/B,MAAK,KAAK,IAAI,IAAI,OAAO,EAAE;AAC3B,MAAK,KAAK,IAAI,IAAI,OAAO,EAAE;AAC3B,MAAK,KAAK,KAAK,IAAI,GAAG,CAAC,aAAa,SAAS,CAAC,QAAQ,OAAO,IAAI,QAAQ,SAAS,CAAC,CAAC;;AAErF,MAAM,4BAA4B,OAAO,SAAS;CACjD,MAAM,EAAE,KAAK,SAAS,MAAM,eAAe,aAAa,cAAc,UAAU;CAChF,MAAM,KAAK,MAAM,cAAc;AAC/B,KAAI,IAAI,OAAO,GAAI;CACnB,MAAM,QAAQ,MAAM,cAAc,WAAW;AAC7C,KAAI,CAAC,MAAO;AACZ,MAAK,KAAK;CACV,MAAM,MAAM,MAAM,OAAO;CACzB,MAAM,QAAQ,KAAK,MAAM,MAAM,oBAAoB,MAAM,SAAS,EAAE;CACpE,MAAM,MAAM,GAAG,QAAQ,kBAAkB,GAAG,OAAO,gBAAgB;EAClE;EACA;EACA,MAAM,QAAQ;EACd,CAAC,GAAG;CACL,MAAM,OAAO,IAAI,aAAa,eAAe;AAC7C,MAAK,KAAK,MAAM,QAAQ,KAAK,MAAM;CACnC,MAAM,EAAE,SAAS,aAAa,MAAM,mBAAmB,MAAM,MAAM;CACnE,MAAM,SAAS,IAAI;CACnB,MAAM,IAAI,UAAU,OAAO;CAC3B,MAAM,YAAY,aAAa,QAAQ,IAAI,SAAS,OAAO;CAC3D,MAAM,MAAM,IAAI,SAAS,mBAAmB,KAAK;CACjD,IAAI,OAAO;AACX,MAAK,MAAM,YAAY,WAAW;EACjC,MAAM,MAAM,IAAI,SAAS,oBAAoB,aAAa,cAAc;GACvE;GACA;GACA;GACA,GAAG,MAAM,mBAAmB,EAAE;GAC9B,CAAC;AACF,qBAAmB,SAAS,IAAI,YAAY,EAAE,UAAU,CAAC,OAAO,gBAAgB;GAC/E,QAAQ,EAAE;GACV,SAAS;IACR;KACC,SAAS;KACT,UAAU,EAAE,QAAQ,KAAK;KACzB;IACD;KACC,SAAS;KACT,UAAU,SAAS,YAAY;KAC/B;IACD;KACC,SAAS;KACT,UAAU,KAAK,YAAY;KAC3B;IACD;KACC,SAAS;KACT,UAAU,EAAE;KACZ;IACD;GACD,CAAC,CAAC,CAAC;AACJ,SAAO;;AAER,qBAAoB,MAAM,KAAK;;AAKhC,IAAI,oBAAoB,eAAe,EAAE,gBAAgB,2BAA2B,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import "./chunk-D7gtBK74.mjs";
|
|
2
2
|
import { n as defineRenderer } from "./renderer-BgmO1Dzw.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-BHTd-EC1.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-zIhSz_0X.mjs";
|
|
5
5
|
|
|
6
6
|
//#region ../../nodes/node-dither/dist/renderers-v80Aclc6.mjs
|
|
7
7
|
const OP = "Dither";
|
|
@@ -217,4 +217,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: DitherWebGPURenderer })
|
|
|
217
217
|
|
|
218
218
|
//#endregion
|
|
219
219
|
export { DitherWebGPURenderer, renderers_default as default };
|
|
220
|
-
//# sourceMappingURL=renderer-
|
|
220
|
+
//# sourceMappingURL=renderer-CEb5GjcU.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-DrrWvz8l.mjs","names":[],"sources":["../../../nodes/node-dither/dist/renderers-v80Aclc6.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst OP = \"Dither\";\nconst UNIFORM_FLOATS = 16;\n/** One fragment shader per pass; pass 0 reads the layer, later passes read the previous pass. */\nconst PASSES = [`struct U { v : array<vec4<f32>, 4> };\n@group(0) @binding(0) var<uniform> u : U;\n@group(0) @binding(1) var src : texture_2d<f32>;\n@group(0) @binding(2) var prev : texture_2d<f32>;\n@group(0) @binding(3) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn straight(c : vec4<f32>) -> vec4<f32> {\n\tif (c.a <= 0.0001) { return vec4<f32>(0.0); }\n\treturn vec4<f32>(c.rgb / c.a, c.a);\n}\nfn premul(c : vec4<f32>) -> vec4<f32> { return vec4<f32>(c.rgb * c.a, c.a); }\nfn res() -> vec2<f32> { return vec2<f32>(textureDimensions(src)); }\n/** Straight-alpha color of the layer at a uv (filtered). */\nfn sampleS(uv : vec2<f32>) -> vec4<f32> { return straight(textureSampleLevel(src, samp, uv, 0.0)); }\n/** Premultiplied color of the layer at a uv (filtered). */\nfn sampleP(uv : vec2<f32>) -> vec4<f32> { return textureSampleLevel(src, samp, uv, 0.0); }\n/** Straight-alpha color of the layer's texel at a pixel position (nearest). */\nfn texelS(p : vec2<f32>) -> vec4<f32> {\n\tlet d = vec2<i32>(textureDimensions(src));\n\tlet q = clamp(vec2<i32>(floor(p)), vec2<i32>(0), d - vec2<i32>(1));\n\treturn straight(textureLoad(src, q, 0));\n}\nfn luma(c : vec3<f32>) -> f32 { return dot(c, vec3<f32>(0.2126, 0.7152, 0.0722)); }\nfn hash12(p : vec2<f32>) -> f32 {\n\tvar p3 = fract(vec3<f32>(p.xyx) * 0.1031);\n\tp3 += dot(p3, p3.yzx + 33.33);\n\treturn fract((p3.x + p3.y) * p3.z);\n}\nfn vnoise(p : vec2<f32>) -> f32 {\n\tlet i = floor(p);\n\tlet f = fract(p);\n\tlet u = f * f * (3.0 - 2.0 * f);\n\treturn mix(mix(hash12(i), hash12(i + vec2<f32>(1.0, 0.0)), u.x),\n\t\tmix(hash12(i + vec2<f32>(0.0, 1.0)), hash12(i + vec2<f32>(1.0, 1.0)), u.x), u.y);\n}\n/** 8x8 ordered-dither threshold, 0..1. */\nfn bayer8(p : vec2<f32>) -> f32 {\n\tlet x = u32(p.x) & 7u;\n\tlet y = u32(p.y) & 7u;\n\tvar v = 0u;\n\tfor (var k = 0u; k < 3u; k++) {\n\t\tlet bx = (x >> k) & 1u;\n\t\tlet by = (y >> k) & 1u;\n\t\tlet m = ((bx ^ by) << 1u) | by;\n\t\tv += m * (1u << (2u * (2u - k)));\n\t}\n\treturn (f32(v) + 0.5) / 64.0;\n}\nfn rot2(a : f32) -> mat2x2<f32> { let c = cos(a); let s = sin(a); return mat2x2<f32>(c, s, -s, c); }\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet time = u.v[0].x;\n\tlet frame = u.v[0].y;\n\tlet mode = u32(u.v[1].x + 0.5);\n\tlet levels = u.v[1].y;\n\tlet scale = u.v[1].z;\n\tlet monochrome = u.v[1].w;\n\tlet dark = u.v[2];\n\tlet light = u.v[3];\n\n\tlet R = res();\n\tlet s = max(scale, 1.0);\n\tlet cellp = floor(in.uv * R / s);\n\tlet c = texelS(cellp * s + s * 0.5);\n\tvar t = bayer8(cellp);\n\tif (mode == 1u) { t = hash12(cellp); }\n\tif (mode == 2u) { t = clamp(length(fract(cellp / 4.0) - 0.5) * 1.414, 0.0, 1.0); }\n\tlet n = max(levels - 1.0, 1.0);\n\tvar rgb : vec3<f32>;\n\tif (monochrome > 0.5) {\n\t\tlet q = clamp(floor(luma(c.rgb) * n + t) / n, 0.0, 1.0);\n\t\trgb = mix(dark.rgb, light.rgb, q);\n\t} else {\n\t\trgb = clamp(floor(c.rgb * n + vec3<f32>(t)) / n, vec3<f32>(0.0), vec3<f32>(1.0));\n\t}\n\treturn premul(vec4<f32>(rgb, c.a));\n}\n`];\nconst resources = perDevice((device) => ({\n\tlayout: fragmentBindGroupLayout(device, [\n\t\t\"uniform\",\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"sampler\"\n\t], `${OP}_layout`),\n\tpipelines: /* @__PURE__ */ new Map(),\n\tsampler: device.createSampler({\n\t\tmagFilter: \"linear\",\n\t\tminFilter: \"linear\",\n\t\taddressModeU: \"clamp-to-edge\",\n\t\taddressModeV: \"clamp-to-edge\"\n\t})\n}));\nfunction pipelinesFor(device, format) {\n\tconst r = resources(device);\n\tlet list = r.pipelines.get(format);\n\tif (!list) {\n\t\tlist = PASSES.map((code, i) => {\n\t\t\tconst module = device.createShaderModule({\n\t\t\t\tcode,\n\t\t\t\tlabel: `${OP}_${i}.wgsl`\n\t\t\t});\n\t\t\treturn device.createRenderPipeline({\n\t\t\t\tlabel: `${OP}_${i}`,\n\t\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [r.layout] }),\n\t\t\t\tvertex: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"vs\"\n\t\t\t\t},\n\t\t\t\tfragment: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"fs\",\n\t\t\t\t\ttargets: [{ format }]\n\t\t\t\t},\n\t\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t\t});\n\t\t});\n\t\tr.pipelines.set(format, list);\n\t}\n\treturn list;\n}\nfunction num(v, fallback) {\n\tconst n = typeof v === \"number\" ? v : Number(v);\n\treturn Number.isFinite(n) ? n : fallback;\n}\nfunction hexToRgba(hex) {\n\tlet h = hex.trim().replace(\"#\", \"\");\n\tif (h.length === 3 || h.length === 4) h = [...h].map((c) => c + c).join(\"\");\n\tconst n = (i) => Number.parseInt(h.slice(i, i + 2), 16) / 255;\n\treturn [\n\t\tn(0),\n\t\tn(2),\n\t\tn(4),\n\t\th.length >= 8 ? n(6) : 1\n\t];\n}\n/** Packs the effect's resolved props into the uniform block the shaders read. */\nfunction pack(raw, data, time, frame) {\n\tdata.fill(0);\n\tdata[0] = time;\n\tdata[1] = frame;\n\tdata[4] = Math.max(0, [\n\t\t\"bayer\",\n\t\t\"noise\",\n\t\t\"halftone\"\n\t].indexOf(String(raw.mode ?? \"bayer\")));\n\tdata[5] = num(raw.levels, 2);\n\tdata[6] = num(raw.scale, 2);\n\tdata[7] = raw.monochrome === void 0 ? 1 : raw.monochrome ? 1 : 0;\n\tdata.set(hexToRgba(String(raw.dark ?? \"#111111\")), 8);\n\tdata.set(hexToRgba(String(raw.light ?? \"#f2efe6\")), 12);\n}\nconst DitherWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== OP) return;\n\tconst child = props.virtualMedia?.children?.[0];\n\tif (!child) return;\n\tpass.end();\n\tconst fps = props.fps || 30;\n\tconst frame = Math.round(props.compositionFrame ?? props.frame ?? 0);\n\tconst raw = op.effect?.resolveUniforms ? op.effect.resolveUniforms({\n\t\tframe,\n\t\tfps,\n\t\ttime: frame / fps\n\t}) : op;\n\tconst data = new Float32Array(UNIFORM_FLOATS);\n\tpack(raw, data, frame / fps, frame);\n\tconst { texture: childTex } = await drawChildToTexture(args, child);\n\tconst device = ctx.device;\n\tconst r = resources(device);\n\tconst pipelines = pipelinesFor(device, ctx.renderer.format);\n\tconst ubo = ctx.renderer.getTemporaryBuffer(data);\n\tlet prev = childTex;\n\tfor (const pipeline of pipelines) {\n\t\tconst out = ctx.renderer.getTemporaryTexture(targetWidth, targetHeight, [\n\t\t\tchildTex,\n\t\t\tprev,\n\t\t\ttargetTexture,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tdrawFullscreenPass(encoder, out.createView(), pipeline, [device.createBindGroup({\n\t\t\tlayout: r.layout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: ubo }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: childTex.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: prev.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: r.sampler\n\t\t\t\t}\n\t\t\t]\n\t\t})]);\n\t\tprev = out;\n\t}\n\tdrawTextureToTarget(args, prev);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: DitherWebGPURenderer });\n\n//#endregion\nexport { DitherWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-v80Aclc6.mjs.map"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"renderer-CEb5GjcU.mjs","names":[],"sources":["../../../nodes/node-dither/dist/renderers-v80Aclc6.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst OP = \"Dither\";\nconst UNIFORM_FLOATS = 16;\n/** One fragment shader per pass; pass 0 reads the layer, later passes read the previous pass. */\nconst PASSES = [`struct U { v : array<vec4<f32>, 4> };\n@group(0) @binding(0) var<uniform> u : U;\n@group(0) @binding(1) var src : texture_2d<f32>;\n@group(0) @binding(2) var prev : texture_2d<f32>;\n@group(0) @binding(3) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn straight(c : vec4<f32>) -> vec4<f32> {\n\tif (c.a <= 0.0001) { return vec4<f32>(0.0); }\n\treturn vec4<f32>(c.rgb / c.a, c.a);\n}\nfn premul(c : vec4<f32>) -> vec4<f32> { return vec4<f32>(c.rgb * c.a, c.a); }\nfn res() -> vec2<f32> { return vec2<f32>(textureDimensions(src)); }\n/** Straight-alpha color of the layer at a uv (filtered). */\nfn sampleS(uv : vec2<f32>) -> vec4<f32> { return straight(textureSampleLevel(src, samp, uv, 0.0)); }\n/** Premultiplied color of the layer at a uv (filtered). */\nfn sampleP(uv : vec2<f32>) -> vec4<f32> { return textureSampleLevel(src, samp, uv, 0.0); }\n/** Straight-alpha color of the layer's texel at a pixel position (nearest). */\nfn texelS(p : vec2<f32>) -> vec4<f32> {\n\tlet d = vec2<i32>(textureDimensions(src));\n\tlet q = clamp(vec2<i32>(floor(p)), vec2<i32>(0), d - vec2<i32>(1));\n\treturn straight(textureLoad(src, q, 0));\n}\nfn luma(c : vec3<f32>) -> f32 { return dot(c, vec3<f32>(0.2126, 0.7152, 0.0722)); }\nfn hash12(p : vec2<f32>) -> f32 {\n\tvar p3 = fract(vec3<f32>(p.xyx) * 0.1031);\n\tp3 += dot(p3, p3.yzx + 33.33);\n\treturn fract((p3.x + p3.y) * p3.z);\n}\nfn vnoise(p : vec2<f32>) -> f32 {\n\tlet i = floor(p);\n\tlet f = fract(p);\n\tlet u = f * f * (3.0 - 2.0 * f);\n\treturn mix(mix(hash12(i), hash12(i + vec2<f32>(1.0, 0.0)), u.x),\n\t\tmix(hash12(i + vec2<f32>(0.0, 1.0)), hash12(i + vec2<f32>(1.0, 1.0)), u.x), u.y);\n}\n/** 8x8 ordered-dither threshold, 0..1. */\nfn bayer8(p : vec2<f32>) -> f32 {\n\tlet x = u32(p.x) & 7u;\n\tlet y = u32(p.y) & 7u;\n\tvar v = 0u;\n\tfor (var k = 0u; k < 3u; k++) {\n\t\tlet bx = (x >> k) & 1u;\n\t\tlet by = (y >> k) & 1u;\n\t\tlet m = ((bx ^ by) << 1u) | by;\n\t\tv += m * (1u << (2u * (2u - k)));\n\t}\n\treturn (f32(v) + 0.5) / 64.0;\n}\nfn rot2(a : f32) -> mat2x2<f32> { let c = cos(a); let s = sin(a); return mat2x2<f32>(c, s, -s, c); }\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet time = u.v[0].x;\n\tlet frame = u.v[0].y;\n\tlet mode = u32(u.v[1].x + 0.5);\n\tlet levels = u.v[1].y;\n\tlet scale = u.v[1].z;\n\tlet monochrome = u.v[1].w;\n\tlet dark = u.v[2];\n\tlet light = u.v[3];\n\n\tlet R = res();\n\tlet s = max(scale, 1.0);\n\tlet cellp = floor(in.uv * R / s);\n\tlet c = texelS(cellp * s + s * 0.5);\n\tvar t = bayer8(cellp);\n\tif (mode == 1u) { t = hash12(cellp); }\n\tif (mode == 2u) { t = clamp(length(fract(cellp / 4.0) - 0.5) * 1.414, 0.0, 1.0); }\n\tlet n = max(levels - 1.0, 1.0);\n\tvar rgb : vec3<f32>;\n\tif (monochrome > 0.5) {\n\t\tlet q = clamp(floor(luma(c.rgb) * n + t) / n, 0.0, 1.0);\n\t\trgb = mix(dark.rgb, light.rgb, q);\n\t} else {\n\t\trgb = clamp(floor(c.rgb * n + vec3<f32>(t)) / n, vec3<f32>(0.0), vec3<f32>(1.0));\n\t}\n\treturn premul(vec4<f32>(rgb, c.a));\n}\n`];\nconst resources = perDevice((device) => ({\n\tlayout: fragmentBindGroupLayout(device, [\n\t\t\"uniform\",\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"sampler\"\n\t], `${OP}_layout`),\n\tpipelines: /* @__PURE__ */ new Map(),\n\tsampler: device.createSampler({\n\t\tmagFilter: \"linear\",\n\t\tminFilter: \"linear\",\n\t\taddressModeU: \"clamp-to-edge\",\n\t\taddressModeV: \"clamp-to-edge\"\n\t})\n}));\nfunction pipelinesFor(device, format) {\n\tconst r = resources(device);\n\tlet list = r.pipelines.get(format);\n\tif (!list) {\n\t\tlist = PASSES.map((code, i) => {\n\t\t\tconst module = device.createShaderModule({\n\t\t\t\tcode,\n\t\t\t\tlabel: `${OP}_${i}.wgsl`\n\t\t\t});\n\t\t\treturn device.createRenderPipeline({\n\t\t\t\tlabel: `${OP}_${i}`,\n\t\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [r.layout] }),\n\t\t\t\tvertex: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"vs\"\n\t\t\t\t},\n\t\t\t\tfragment: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"fs\",\n\t\t\t\t\ttargets: [{ format }]\n\t\t\t\t},\n\t\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t\t});\n\t\t});\n\t\tr.pipelines.set(format, list);\n\t}\n\treturn list;\n}\nfunction num(v, fallback) {\n\tconst n = typeof v === \"number\" ? v : Number(v);\n\treturn Number.isFinite(n) ? n : fallback;\n}\nfunction hexToRgba(hex) {\n\tlet h = hex.trim().replace(\"#\", \"\");\n\tif (h.length === 3 || h.length === 4) h = [...h].map((c) => c + c).join(\"\");\n\tconst n = (i) => Number.parseInt(h.slice(i, i + 2), 16) / 255;\n\treturn [\n\t\tn(0),\n\t\tn(2),\n\t\tn(4),\n\t\th.length >= 8 ? n(6) : 1\n\t];\n}\n/** Packs the effect's resolved props into the uniform block the shaders read. */\nfunction pack(raw, data, time, frame) {\n\tdata.fill(0);\n\tdata[0] = time;\n\tdata[1] = frame;\n\tdata[4] = Math.max(0, [\n\t\t\"bayer\",\n\t\t\"noise\",\n\t\t\"halftone\"\n\t].indexOf(String(raw.mode ?? \"bayer\")));\n\tdata[5] = num(raw.levels, 2);\n\tdata[6] = num(raw.scale, 2);\n\tdata[7] = raw.monochrome === void 0 ? 1 : raw.monochrome ? 1 : 0;\n\tdata.set(hexToRgba(String(raw.dark ?? \"#111111\")), 8);\n\tdata.set(hexToRgba(String(raw.light ?? \"#f2efe6\")), 12);\n}\nconst DitherWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== OP) return;\n\tconst child = props.virtualMedia?.children?.[0];\n\tif (!child) return;\n\tpass.end();\n\tconst fps = props.fps || 30;\n\tconst frame = Math.round(props.compositionFrame ?? props.frame ?? 0);\n\tconst raw = op.effect?.resolveUniforms ? op.effect.resolveUniforms({\n\t\tframe,\n\t\tfps,\n\t\ttime: frame / fps\n\t}) : op;\n\tconst data = new Float32Array(UNIFORM_FLOATS);\n\tpack(raw, data, frame / fps, frame);\n\tconst { texture: childTex } = await drawChildToTexture(args, child);\n\tconst device = ctx.device;\n\tconst r = resources(device);\n\tconst pipelines = pipelinesFor(device, ctx.renderer.format);\n\tconst ubo = ctx.renderer.getTemporaryBuffer(data);\n\tlet prev = childTex;\n\tfor (const pipeline of pipelines) {\n\t\tconst out = ctx.renderer.getTemporaryTexture(targetWidth, targetHeight, [\n\t\t\tchildTex,\n\t\t\tprev,\n\t\t\ttargetTexture,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tdrawFullscreenPass(encoder, out.createView(), pipeline, [device.createBindGroup({\n\t\t\tlayout: r.layout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: ubo }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: childTex.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: prev.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: r.sampler\n\t\t\t\t}\n\t\t\t]\n\t\t})]);\n\t\tprev = out;\n\t}\n\tdrawTextureToTarget(args, prev);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: DitherWebGPURenderer });\n\n//#endregion\nexport { DitherWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-v80Aclc6.mjs.map"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { n as defineRenderer } from "./renderer-BgmO1Dzw.mjs";
|
|
2
|
-
import { In as signalRegistry } from "./dist-
|
|
3
|
-
import { a as createFullscreenPipeline, c as drawTextureToTarget, f as signalTiming, l as fragmentBindGroupLayout, o as drawChildToTexture, p as texturesLayout, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL, u as perDevice } from "./gpu-
|
|
2
|
+
import { In as signalRegistry } from "./dist-BHTd-EC1.mjs";
|
|
3
|
+
import { a as createFullscreenPipeline, c as drawTextureToTarget, f as signalTiming, l as fragmentBindGroupLayout, o as drawChildToTexture, p as texturesLayout, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL, u as perDevice } from "./gpu-zIhSz_0X.mjs";
|
|
4
4
|
|
|
5
5
|
//#region ../../nodes/node-displacement-map/dist/renderers-DzMCAYTg.mjs
|
|
6
6
|
const STRENGTH_MIN = 0;
|
|
@@ -249,4 +249,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: DisplacementMapWebGPURe
|
|
|
249
249
|
|
|
250
250
|
//#endregion
|
|
251
251
|
export { renderers_default as t };
|
|
252
|
-
//# sourceMappingURL=renderer-
|
|
252
|
+
//# sourceMappingURL=renderer-CIL9zh-a.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-1KfQICGK.mjs","names":[],"sources":["../../../nodes/node-displacement-map/dist/renderers-DzMCAYTg.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice, signalTiming, texturesLayout } from \"@framefields/node-sdk/gpu\";\nimport { signalRegistry } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst STRENGTH_MIN = 0;\nconst STRENGTH_MAX = 500;\nfunction clamp(value, min, max) {\n\treturn Math.min(max, Math.max(min, value));\n}\nconst DISPLACEMENT_MAP_SHADER = `\nstruct DisplacementUniforms {\n strengthX : f32,\n strengthY : f32,\n xChannel : f32, // 0=R, 1=G, 2=B, 3=A, 4=Luma\n yChannel : f32, // 0=R, 1=G, 2=B, 3=A, 4=Luma\n\n wrapMode : f32, // 0=Clamp, 1=Repeat, 2=Mirror\n hasSignalX : f32,\n hasSignalY : f32,\n _pad : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : DisplacementUniforms;\n@group(1) @binding(0) var srcTex : texture_2d<f32>;\n@group(1) @binding(1) var srcSamp : sampler;\n@group(2) @binding(0) var mapTex : texture_2d<f32>;\n@group(2) @binding(1) var mapSamp : sampler;\n@group(3) @binding(0) var sigXTex : texture_2d<f32>;\n@group(3) @binding(1) var sigYTex : texture_2d<f32>;\n@group(3) @binding(2) var sigSamp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn extractChannel(color: vec4<f32>, channel: f32) -> f32 {\n if (channel < 0.5) { return color.r; }\n if (channel < 1.5) { return color.g; }\n if (channel < 2.5) { return color.b; }\n if (channel < 3.5) { return color.a; }\n // Luminance\n return dot(color.rgb, vec3<f32>(0.299, 0.587, 0.114));\n}\n\nfn applyWrap(coord: f32, mode: f32) -> f32 {\n if (mode < 0.5) {\n // Clamp\n return clamp(coord, 0.0, 1.0);\n }\n if (mode < 1.5) {\n // Repeat\n return fract(coord);\n }\n // Mirror\n let t = fract(coord * 0.5) * 2.0;\n if (t > 1.0) {\n return 2.0 - t;\n }\n return t;\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n let mapColor = textureSampleLevel(mapTex, mapSamp, in.uv, 0.0);\n\n // Extract displacement values from chosen channels, centered around 0.5 and gated by alpha\n // NOTE (P3, not changed here): this yields a max offset of strength/2 px at\n // either extreme (peak-to-peak swing == strength). Confirm with design whether\n // \"strength in pixels\" should mean peak amplitude instead — see review doc.\n let dispX = (extractChannel(mapColor, u.xChannel) - 0.5) * mapColor.a;\n let dispY = (extractChannel(mapColor, u.yChannel) - 0.5) * mapColor.a;\n\n // Get strength, potentially from signal textures\n var sX = u.strengthX;\n var sY = u.strengthY;\n if (u.hasSignalX > 0.5) {\n sX = textureSampleLevel(sigXTex, sigSamp, in.uv, 0.0).r;\n }\n if (u.hasSignalY > 0.5) {\n sY = textureSampleLevel(sigYTex, sigSamp, in.uv, 0.0).r;\n }\n\n // Compute displacement in UV space (strength is in pixels, convert to UV)\n let srcDims = vec2<f32>(textureDimensions(srcTex));\n let offset = vec2<f32>(\n dispX * sX / srcDims.x,\n dispY * sY / srcDims.y,\n );\n\n let displaced = vec2<f32>(\n applyWrap(in.uv.x + offset.x, u.wrapMode),\n applyWrap(in.uv.y + offset.y, u.wrapMode),\n );\n\n return textureSampleLevel(srcTex, srcSamp, displaced, 0.0);\n}\n`;\nconst uniformData = new Float32Array(8);\nconst getDeviceLayouts = perDevice((device) => ({\n\tuniformLayout: fragmentBindGroupLayout(device, [\"uniform\"]),\n\tsrcTextureLayout: fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]),\n\tmapTextureLayout: fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]),\n\tsignalTextureLayout: texturesLayout(device, 2),\n\tpipelineCache: /* @__PURE__ */ new Map()\n}));\nfunction getDisplacementResources(device, format) {\n\tconst layouts = getDeviceLayouts(device);\n\tconst cacheKey = `displacement_${format}`;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst module = device.createShaderModule({\n\t\t\tlabel: `displacement_${format}.wgsl`,\n\t\t\tcode: DISPLACEMENT_MAP_SHADER\n\t\t});\n\t\tpipeline = createFullscreenPipeline(device, {\n\t\t\tlabel: `DisplacementMapPipeline_${format}`,\n\t\t\tmodule,\n\t\t\tlayouts: [\n\t\t\t\tlayouts.uniformLayout,\n\t\t\t\tlayouts.srcTextureLayout,\n\t\t\t\tlayouts.mapTextureLayout,\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\tpipeline,\n\t\tuniformLayout: layouts.uniformLayout,\n\t\tsrcTextureLayout: layouts.srcTextureLayout,\n\t\tmapTextureLayout: layouts.mapTextureLayout,\n\t\tsignalTextureLayout: layouts.signalTextureLayout\n\t};\n}\nfunction channelToFloat(ch) {\n\tswitch (ch) {\n\t\tcase \"Green\": return 1;\n\t\tcase \"Blue\": return 2;\n\t\tcase \"Alpha\": return 3;\n\t\tcase \"Luminance\": return 4;\n\t\tdefault: return 0;\n\t}\n}\nfunction wrapModeToFloat(mode) {\n\tswitch (mode) {\n\t\tcase \"Repeat\": return 1;\n\t\tcase \"Mirror\": return 2;\n\t\tdefault: return 0;\n\t}\n}\nfunction resolveSignalField(op, fieldName, defaultValue) {\n\tconst handleId = op[`${fieldName}HandleId`];\n\tconst signalInput = handleId ? op.inputs?.[handleId] : null;\n\tconst hasSignal = !!(signalInput?.connectionValid && signalInput.outputItem?.type === \"Signal\");\n\tconst sd = hasSignal ? signalInput?.outputItem?.data : null;\n\tlet value = defaultValue;\n\tif (!hasSignal) if (signalInput?.connectionValid && signalInput.outputItem?.type === \"Number\") value = clamp(Number(signalInput.outputItem.data ?? defaultValue), STRENGTH_MIN, STRENGTH_MAX);\n\telse value = Number(op[fieldName] ?? defaultValue);\n\telse if (sd && typeof sd === \"object\" && \"offset\" in sd) value = Number(sd.offset ?? defaultValue);\n\treturn {\n\t\thasSignal,\n\t\tsd,\n\t\tvalue\n\t};\n}\nconst DisplacementMapWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"DisplacementMap\" || !op) return;\n\tconst sourceMedia = props.virtualMedia.children?.[0];\n\tconst mapMedia = op.mapMedia;\n\tif (!sourceMedia || !mapMedia) return;\n\tpass.end();\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst frame = props.frame ?? 0;\n\tconst fps = props.fps || 30;\n\tconst strengthXInfo = resolveSignalField(op, \"strengthX\", 50);\n\tconst strengthYInfo = resolveSignalField(op, \"strengthY\", 50);\n\tconst { texture: srcTex } = await drawChildToTexture(args, sourceMedia, { props: {\n\t\t...props,\n\t\tvirtualMedia: sourceMedia,\n\t\trenderId: `${props.renderId}-c0`\n\t} });\n\targs.pass.end();\n\tconst { texture: mapTex } = await drawChildToTexture(args, mapMedia, {\n\t\tprops: {\n\t\t\t...props,\n\t\t\tvirtualMedia: mapMedia,\n\t\t\trenderId: `${props.renderId}-c1`,\n\t\t\texcludeTextures: [...props.excludeTextures || [], srcTex]\n\t\t},\n\t\texclude: [srcTex]\n\t});\n\targs.pass.end();\n\tconst { pipeline, uniformLayout: uLayout, srcTextureLayout: srcLayout, mapTextureLayout: mapLayout, signalTextureLayout: sigLayout } = getDisplacementResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tlet sigXView;\n\tlet sigYView;\n\tconst { elapsedSeconds, durationSeconds } = signalTiming(props, frame, fps);\n\tif (strengthXInfo.hasSignal && strengthXInfo.sd) sigXView = signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, strengthXInfo.sd.nodeId ?? \"displace_sx_sig\", elapsedSeconds, durationSeconds, strengthXInfo.sd, width, height, props.renderId, frame, fps);\n\telse sigXView = signalRegistry.getDummy1x1TextureView(ctx.device);\n\tif (strengthYInfo.hasSignal && strengthYInfo.sd) sigYView = signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, strengthYInfo.sd.nodeId ?? \"displace_sy_sig\", elapsedSeconds, durationSeconds, strengthYInfo.sd, width, height, props.renderId, frame, fps);\n\telse sigYView = signalRegistry.getDummy1x1TextureView(ctx.device);\n\tuniformData[0] = strengthXInfo.value;\n\tuniformData[1] = strengthYInfo.value;\n\tuniformData[2] = channelToFloat(op.xChannel);\n\tuniformData[3] = channelToFloat(op.yChannel);\n\tuniformData[4] = wrapModeToFloat(op.wrapMode);\n\tuniformData[5] = strengthXInfo.hasSignal ? 1 : 0;\n\tuniformData[6] = strengthYInfo.hasSignal ? 1 : 0;\n\tuniformData[7] = 0;\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(uniformData);\n\tconst outTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\tsrcTex,\n\t\tmapTex,\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, srcLayout, srcTex, sampler),\n\t\tctx.renderer.bindGroupCache.getBindGroup(ctx.device, mapLayout, mapTex, 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: sigXView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: sigYView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: sampler\n\t\t\t\t}\n\t\t\t]\n\t\t})\n\t]);\n\tdrawTextureToTarget(args, outTex, op.opacity ?? 1);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: DisplacementMapWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-DzMCAYTg.mjs.map"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"renderer-CIL9zh-a.mjs","names":[],"sources":["../../../nodes/node-displacement-map/dist/renderers-DzMCAYTg.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice, signalTiming, texturesLayout } from \"@framefields/node-sdk/gpu\";\nimport { signalRegistry } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst STRENGTH_MIN = 0;\nconst STRENGTH_MAX = 500;\nfunction clamp(value, min, max) {\n\treturn Math.min(max, Math.max(min, value));\n}\nconst DISPLACEMENT_MAP_SHADER = `\nstruct DisplacementUniforms {\n strengthX : f32,\n strengthY : f32,\n xChannel : f32, // 0=R, 1=G, 2=B, 3=A, 4=Luma\n yChannel : f32, // 0=R, 1=G, 2=B, 3=A, 4=Luma\n\n wrapMode : f32, // 0=Clamp, 1=Repeat, 2=Mirror\n hasSignalX : f32,\n hasSignalY : f32,\n _pad : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : DisplacementUniforms;\n@group(1) @binding(0) var srcTex : texture_2d<f32>;\n@group(1) @binding(1) var srcSamp : sampler;\n@group(2) @binding(0) var mapTex : texture_2d<f32>;\n@group(2) @binding(1) var mapSamp : sampler;\n@group(3) @binding(0) var sigXTex : texture_2d<f32>;\n@group(3) @binding(1) var sigYTex : texture_2d<f32>;\n@group(3) @binding(2) var sigSamp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn extractChannel(color: vec4<f32>, channel: f32) -> f32 {\n if (channel < 0.5) { return color.r; }\n if (channel < 1.5) { return color.g; }\n if (channel < 2.5) { return color.b; }\n if (channel < 3.5) { return color.a; }\n // Luminance\n return dot(color.rgb, vec3<f32>(0.299, 0.587, 0.114));\n}\n\nfn applyWrap(coord: f32, mode: f32) -> f32 {\n if (mode < 0.5) {\n // Clamp\n return clamp(coord, 0.0, 1.0);\n }\n if (mode < 1.5) {\n // Repeat\n return fract(coord);\n }\n // Mirror\n let t = fract(coord * 0.5) * 2.0;\n if (t > 1.0) {\n return 2.0 - t;\n }\n return t;\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n let mapColor = textureSampleLevel(mapTex, mapSamp, in.uv, 0.0);\n\n // Extract displacement values from chosen channels, centered around 0.5 and gated by alpha\n // NOTE (P3, not changed here): this yields a max offset of strength/2 px at\n // either extreme (peak-to-peak swing == strength). Confirm with design whether\n // \"strength in pixels\" should mean peak amplitude instead — see review doc.\n let dispX = (extractChannel(mapColor, u.xChannel) - 0.5) * mapColor.a;\n let dispY = (extractChannel(mapColor, u.yChannel) - 0.5) * mapColor.a;\n\n // Get strength, potentially from signal textures\n var sX = u.strengthX;\n var sY = u.strengthY;\n if (u.hasSignalX > 0.5) {\n sX = textureSampleLevel(sigXTex, sigSamp, in.uv, 0.0).r;\n }\n if (u.hasSignalY > 0.5) {\n sY = textureSampleLevel(sigYTex, sigSamp, in.uv, 0.0).r;\n }\n\n // Compute displacement in UV space (strength is in pixels, convert to UV)\n let srcDims = vec2<f32>(textureDimensions(srcTex));\n let offset = vec2<f32>(\n dispX * sX / srcDims.x,\n dispY * sY / srcDims.y,\n );\n\n let displaced = vec2<f32>(\n applyWrap(in.uv.x + offset.x, u.wrapMode),\n applyWrap(in.uv.y + offset.y, u.wrapMode),\n );\n\n return textureSampleLevel(srcTex, srcSamp, displaced, 0.0);\n}\n`;\nconst uniformData = new Float32Array(8);\nconst getDeviceLayouts = perDevice((device) => ({\n\tuniformLayout: fragmentBindGroupLayout(device, [\"uniform\"]),\n\tsrcTextureLayout: fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]),\n\tmapTextureLayout: fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]),\n\tsignalTextureLayout: texturesLayout(device, 2),\n\tpipelineCache: /* @__PURE__ */ new Map()\n}));\nfunction getDisplacementResources(device, format) {\n\tconst layouts = getDeviceLayouts(device);\n\tconst cacheKey = `displacement_${format}`;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst module = device.createShaderModule({\n\t\t\tlabel: `displacement_${format}.wgsl`,\n\t\t\tcode: DISPLACEMENT_MAP_SHADER\n\t\t});\n\t\tpipeline = createFullscreenPipeline(device, {\n\t\t\tlabel: `DisplacementMapPipeline_${format}`,\n\t\t\tmodule,\n\t\t\tlayouts: [\n\t\t\t\tlayouts.uniformLayout,\n\t\t\t\tlayouts.srcTextureLayout,\n\t\t\t\tlayouts.mapTextureLayout,\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\tpipeline,\n\t\tuniformLayout: layouts.uniformLayout,\n\t\tsrcTextureLayout: layouts.srcTextureLayout,\n\t\tmapTextureLayout: layouts.mapTextureLayout,\n\t\tsignalTextureLayout: layouts.signalTextureLayout\n\t};\n}\nfunction channelToFloat(ch) {\n\tswitch (ch) {\n\t\tcase \"Green\": return 1;\n\t\tcase \"Blue\": return 2;\n\t\tcase \"Alpha\": return 3;\n\t\tcase \"Luminance\": return 4;\n\t\tdefault: return 0;\n\t}\n}\nfunction wrapModeToFloat(mode) {\n\tswitch (mode) {\n\t\tcase \"Repeat\": return 1;\n\t\tcase \"Mirror\": return 2;\n\t\tdefault: return 0;\n\t}\n}\nfunction resolveSignalField(op, fieldName, defaultValue) {\n\tconst handleId = op[`${fieldName}HandleId`];\n\tconst signalInput = handleId ? op.inputs?.[handleId] : null;\n\tconst hasSignal = !!(signalInput?.connectionValid && signalInput.outputItem?.type === \"Signal\");\n\tconst sd = hasSignal ? signalInput?.outputItem?.data : null;\n\tlet value = defaultValue;\n\tif (!hasSignal) if (signalInput?.connectionValid && signalInput.outputItem?.type === \"Number\") value = clamp(Number(signalInput.outputItem.data ?? defaultValue), STRENGTH_MIN, STRENGTH_MAX);\n\telse value = Number(op[fieldName] ?? defaultValue);\n\telse if (sd && typeof sd === \"object\" && \"offset\" in sd) value = Number(sd.offset ?? defaultValue);\n\treturn {\n\t\thasSignal,\n\t\tsd,\n\t\tvalue\n\t};\n}\nconst DisplacementMapWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"DisplacementMap\" || !op) return;\n\tconst sourceMedia = props.virtualMedia.children?.[0];\n\tconst mapMedia = op.mapMedia;\n\tif (!sourceMedia || !mapMedia) return;\n\tpass.end();\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst frame = props.frame ?? 0;\n\tconst fps = props.fps || 30;\n\tconst strengthXInfo = resolveSignalField(op, \"strengthX\", 50);\n\tconst strengthYInfo = resolveSignalField(op, \"strengthY\", 50);\n\tconst { texture: srcTex } = await drawChildToTexture(args, sourceMedia, { props: {\n\t\t...props,\n\t\tvirtualMedia: sourceMedia,\n\t\trenderId: `${props.renderId}-c0`\n\t} });\n\targs.pass.end();\n\tconst { texture: mapTex } = await drawChildToTexture(args, mapMedia, {\n\t\tprops: {\n\t\t\t...props,\n\t\t\tvirtualMedia: mapMedia,\n\t\t\trenderId: `${props.renderId}-c1`,\n\t\t\texcludeTextures: [...props.excludeTextures || [], srcTex]\n\t\t},\n\t\texclude: [srcTex]\n\t});\n\targs.pass.end();\n\tconst { pipeline, uniformLayout: uLayout, srcTextureLayout: srcLayout, mapTextureLayout: mapLayout, signalTextureLayout: sigLayout } = getDisplacementResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tlet sigXView;\n\tlet sigYView;\n\tconst { elapsedSeconds, durationSeconds } = signalTiming(props, frame, fps);\n\tif (strengthXInfo.hasSignal && strengthXInfo.sd) sigXView = signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, strengthXInfo.sd.nodeId ?? \"displace_sx_sig\", elapsedSeconds, durationSeconds, strengthXInfo.sd, width, height, props.renderId, frame, fps);\n\telse sigXView = signalRegistry.getDummy1x1TextureView(ctx.device);\n\tif (strengthYInfo.hasSignal && strengthYInfo.sd) sigYView = signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, strengthYInfo.sd.nodeId ?? \"displace_sy_sig\", elapsedSeconds, durationSeconds, strengthYInfo.sd, width, height, props.renderId, frame, fps);\n\telse sigYView = signalRegistry.getDummy1x1TextureView(ctx.device);\n\tuniformData[0] = strengthXInfo.value;\n\tuniformData[1] = strengthYInfo.value;\n\tuniformData[2] = channelToFloat(op.xChannel);\n\tuniformData[3] = channelToFloat(op.yChannel);\n\tuniformData[4] = wrapModeToFloat(op.wrapMode);\n\tuniformData[5] = strengthXInfo.hasSignal ? 1 : 0;\n\tuniformData[6] = strengthYInfo.hasSignal ? 1 : 0;\n\tuniformData[7] = 0;\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(uniformData);\n\tconst outTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\tsrcTex,\n\t\tmapTex,\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, srcLayout, srcTex, sampler),\n\t\tctx.renderer.bindGroupCache.getBindGroup(ctx.device, mapLayout, mapTex, 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: sigXView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: sigYView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: sampler\n\t\t\t\t}\n\t\t\t]\n\t\t})\n\t]);\n\tdrawTextureToTarget(args, outTex, op.opacity ?? 1);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: DisplacementMapWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-DzMCAYTg.mjs.map"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { n as defineRenderer, u as unwrapFrameParam } from "./renderer-BgmO1Dzw.mjs";
|
|
2
|
-
import { a as configBuilder, i as VideoResultSchema, n as ImageResultSchema } from "./dist-
|
|
3
|
-
import { In as signalRegistry } from "./dist-
|
|
4
|
-
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 { a as configBuilder, i as VideoResultSchema, n as ImageResultSchema } from "./dist-CPtFZxtu.mjs";
|
|
3
|
+
import { In as signalRegistry } from "./dist-BHTd-EC1.mjs";
|
|
4
|
+
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-zIhSz_0X.mjs";
|
|
5
5
|
import { z } from "zod";
|
|
6
6
|
|
|
7
7
|
//#region ../../nodes/node-blur/dist/renderers-rcrwEq-B.mjs
|
|
@@ -845,4 +845,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: BlurWebGPURenderer });
|
|
|
845
845
|
|
|
846
846
|
//#endregion
|
|
847
847
|
export { renderers_default as t };
|
|
848
|
-
//# sourceMappingURL=renderer-
|
|
848
|
+
//# sourceMappingURL=renderer-CIbXIFOb.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-CEvj79Wg.mjs","names":[],"sources":["../../../nodes/node-blur/dist/renderers-rcrwEq-B.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { ImageResultSchema, VideoResultSchema, configBuilder, unwrapFrameParam } from \"@framefields/node-sdk\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice, signalTextureView, signalTiming, texturesLayout } from \"@framefields/node-sdk/gpu\";\nimport { signalRegistry } from \"@framefields/webgpu-renderers\";\nimport { z } from \"zod\";\n\n//#region src/shared/config.ts\nconst MAX_BLUR = 100;\nconst blurConfig = configBuilder().field(\"blurType\", z.enum([\n\t\"Gaussian\",\n\t\"Box\",\n\t\"Median\",\n\t\"Motion\",\n\t\"Bilateral\",\n\t\"Edge-preserving\",\n\t\"Radial\",\n\t\"Zoom\"\n]).default(\"Gaussian\"), {\n\tbindable: false,\n\tlabel: \"Blur Type\"\n}).field(\"strength\", z.number().min(0).max(MAX_BLUR).default(5), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Strength Signal\",\n\tdescription: \"The intensity of the blur. 0 = no blur. Can be modulated by a static number or a dynamic signal.\"\n}).field(\"angle\", z.number().int().min(0).max(360).default(0), {\n\tbindable: false,\n\tsignal: true,\n\tlabel: \"Angle\",\n\tdescription: \"Direction of a Motion blur, in degrees.\"\n}).field(\"sigmaColor\", z.number().min(.01).max(1).default(.1), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Color Sigma Signal\",\n\tdescription: \"Sigma value for color space in Bilateral / Edge-preserving blurs. Can be modulated by a static number or a dynamic signal.\"\n}).field(\"centerX\", z.number().min(0).max(1).default(.5), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Center X Signal\",\n\tdescription: \"The X coordinate of the blur center (0.0 to 1.0). Can be modulated by a static number or a dynamic signal.\"\n}).field(\"centerY\", z.number().min(0).max(1).default(.5), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Center Y Signal\",\n\tdescription: \"The Y coordinate of the blur center (0.0 to 1.0). Can be modulated by a static number or a dynamic signal.\"\n}).field(\"partialBlur\", z.boolean().default(false), {\n\tbindable: false,\n\tsignal: true,\n\tlabel: \"Partial Blur\",\n\tdescription: \"Blurs only a specific circular area around center point.\"\n}).field(\"radius\", z.number().min(.01).max(1).default(.3), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Partial Radius Signal\",\n\tdescription: \"Radius of the partial blur region (0.01 to 1.0). Can be modulated by a static number or a dynamic signal.\"\n}).field(\"radiusY\", z.number().min(0).max(1).default(0), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Partial Radius Y Signal\",\n\tdescription: \"Vertical radius of the partial blur region (0 to 1.0). 0 reuses the horizontal radius.\"\n}).field(\"shape\", z.enum([\n\t\"ellipse\",\n\t\"circle\",\n\t\"rect\"\n]).default(\"circle\"), {\n\tbindable: false,\n\tlabel: \"Partial Shape\",\n\tdescription: \"Shape of the partial blur region.\"\n}).build();\nconst BlurNodeConfigSchema = blurConfig.schema;\nconst BlurResultSchema = z.union([ImageResultSchema, VideoResultSchema]);\nconst BLUR_OUTPUT_TYPE_MAP = {\n\tVideo: \"Video\",\n\tLottie: \"Video\",\n\tGIF: \"GIF\",\n\tImage: \"Image\",\n\tSVG: \"Image\"\n};\n\n//#endregion\n//#region src/renderers/webgpu-renderer.ts\nconst WGSL_BLUR_UNIFORMS = `\nstruct BlurUniforms {\n\tdirX : f32,\n\tdirY : f32,\n\tstrength : f32,\n\tangle : f32,\n\n\tsigmaColor : f32,\n\tcenterX : f32,\n\tcenterY : f32,\n\tradius : f32,\n\n\tpartialBlur : f32,\n\thasStrengthSig : f32,\n\thasSigmaColorSig: f32,\n\thasCenterXSig : f32,\n\n\thasCenterYSig : f32,\n\thasRadiusSig : f32,\n\tradiusY : f32,\n\tshape : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : BlurUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n@group(1) @binding(2) var origTex : texture_2d<f32>;\n\n@group(2) @binding(0) var strengthSigTex : texture_2d<f32>;\n@group(2) @binding(1) var sigmaColorSigTex : texture_2d<f32>;\n@group(2) @binding(2) var centerXSigTex : texture_2d<f32>;\n@group(2) @binding(3) var centerYSigTex : texture_2d<f32>;\n@group(2) @binding(4) var radiusSigTex : texture_2d<f32>;\n@group(2) @binding(5) var signalSamp : sampler;\n\nfn applyPartialBlur(blurred: vec4<f32>, uv: vec2<f32>, dimensions: vec2<f32>) -> vec4<f32> {\n\tif (u.partialBlur <= 0.5) {\n\t\treturn blurred;\n\t}\n\tlet orig = textureSampleLevel(origTex, samp, uv, 0.0);\n\tvar centerX = u.centerX;\n\tif (u.hasCenterXSig > 0.5) {\n\t\tcenterX = textureSampleLevel(centerXSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tvar centerY = u.centerY;\n\tif (u.hasCenterYSig > 0.5) {\n\t\tcenterY = textureSampleLevel(centerYSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tvar radiusX = u.radius;\n\tif (u.hasRadiusSig > 0.5) {\n\t\tradiusX = textureSampleLevel(radiusSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tvar radiusY = u.radiusY;\n\n\tvar mask = 0.0;\n\tif (radiusY <= 0.0) {\n\t\tlet aspect = dimensions.x / dimensions.y;\n\t\tlet diff = (uv - vec2<f32>(centerX, centerY)) * vec2<f32>(aspect, 1.0);\n\t\tlet dist = length(diff);\n\t\tlet feather = 0.05;\n\t\tmask = 1.0 - smoothstep(radiusX - feather, radiusX + feather, dist);\n\t} else {\n\t\tlet diff = abs(uv - vec2<f32>(centerX, centerY));\n\t\tif (u.shape > 0.5) {\n\t\t\tlet feather = 0.02;\n\t\t\tlet edgeX = 1.0 - smoothstep(radiusX - feather, radiusX + feather, diff.x);\n\t\t\tlet edgeY = 1.0 - smoothstep(radiusY - feather, radiusY + feather, diff.y);\n\t\t\tmask = edgeX * edgeY;\n\t\t} else {\n\t\t\tlet normDist = length(vec2<f32>(diff.x / max(1e-4, radiusX), diff.y / max(1e-4, radiusY)));\n\t\t\tlet feather = 0.08;\n\t\t\tmask = 1.0 - smoothstep(1.0 - feather, 1.0 + feather, normDist);\n\t\t}\n\t}\n\treturn mix(orig, blurred, mask);\n}\n`;\nconst GAUSSIAN_BLUR_SHADER = `\n${WGSL_BLUR_UNIFORMS}\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet c = textureSampleLevel(tex, samp, in.uv, 0.0);\n\tvar spatial_sigma = u.strength;\n\tif (u.hasStrengthSig > 0.5) {\n\t\tspatial_sigma = textureSampleLevel(strengthSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\n\tlet dimensions = vec2<f32>(textureDimensions(tex));\n\tif (spatial_sigma <= 0.0) {\n\t\treturn applyPartialBlur(c, in.uv, dimensions);\n\t}\n\n\tlet texelSize = 1.0 / dimensions;\n\tlet stepScale = max(1.0, spatial_sigma / 20.0);\n\tlet effectiveSigma = spatial_sigma / stepScale;\n\tlet radius = min(i32(ceil(3.0 * effectiveSigma)), 64);\n\t\n\tlet direction = vec2<f32>(u.dirX, u.dirY);\n\t\n\tvar color = vec4<f32>(0.0);\n\tvar totalWeight = 0.0;\n\n\tfor (var i = -radius; i <= radius; i++) {\n\t\tlet offset = vec2<f32>(f32(i) * stepScale) * direction * texelSize;\n\t\tlet x = f32(i) * stepScale;\n\t\tlet weight = exp(-0.5 * (x / spatial_sigma) * (x / spatial_sigma));\n\t\tcolor += textureSampleLevel(tex, samp, in.uv + offset, 0.0) * weight;\n\t\ttotalWeight += weight;\n\t}\n\n\tlet blurred = color / totalWeight;\n\treturn applyPartialBlur(blurred, in.uv, dimensions);\n}\n`;\nconst BOX_BLUR_SHADER = `\n${WGSL_BLUR_UNIFORMS}\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet c = textureSampleLevel(tex, samp, in.uv, 0.0);\n\tvar strength = u.strength;\n\tif (u.hasStrengthSig > 0.5) {\n\t\tstrength = textureSampleLevel(strengthSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\n\tlet dimensions = vec2<f32>(textureDimensions(tex));\n\tlet radius = i32(round(strength));\n\tif (radius <= 0) {\n\t\treturn applyPartialBlur(c, in.uv, dimensions);\n\t}\n\n\tlet texelSize = 1.0 / dimensions;\n\tlet direction = vec2<f32>(u.dirX, u.dirY);\n\t\n\tvar color = vec4<f32>(0.0);\n\tvar count = 0.0;\n\n\tfor (var i = -radius; i <= radius; i++) {\n\t\tlet offset = vec2<f32>(f32(i)) * direction * texelSize;\n\t\tcolor += textureSampleLevel(tex, samp, in.uv + offset, 0.0);\n\t\tcount += 1.0;\n\t}\n\n\tlet blurred = color / count;\n\treturn applyPartialBlur(blurred, in.uv, dimensions);\n}\n`;\nconst MEDIAN_BLUR_SHADER = `\n${WGSL_BLUR_UNIFORMS}\nstruct Val {\n\tluma : f32,\n\tcolor : vec4<f32>,\n};\n\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet centerCol = textureSampleLevel(tex, samp, in.uv, 0.0);\n\tvar strength = u.strength;\n\tif (u.hasStrengthSig > 0.5) {\n\t\tstrength = textureSampleLevel(strengthSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\n\tlet dimensions = vec2<f32>(textureDimensions(tex));\n\tlet radius = min(i32(round(strength)), 16);\n\tif (radius <= 0) {\n\t\treturn applyPartialBlur(centerCol, in.uv, dimensions);\n\t}\n\n\tlet count = radius * 2 + 1;\n\tlet texelSize = 1.0 / dimensions;\n\tlet direction = vec2<f32>(u.dirX, u.dirY);\n\n\tvar values : array<Val, 33>;\n\n\tfor (var i = 0; i < 33; i++) {\n\t\tif (i >= count) { break; }\n\t\tlet offset = vec2<f32>(f32(i - radius)) * direction * texelSize;\n\t\tlet col = textureSampleLevel(tex, samp, in.uv + offset, 0.0);\n\t\tvalues[i] = Val(dot(col.rgb, vec3<f32>(0.299, 0.587, 0.114)), col);\n\t}\n\n\t// Selection sort\n\tfor (var i = 0; i < 33; i++) {\n\t\tif (i >= count - 1) { break; }\n\t\tvar minIdx = i;\n\t\tfor (var j = 0; j < 33; j++) {\n\t\t\tif (j <= i) { continue; }\n\t\t\tif (j >= count) { break; }\n\t\t\tif (values[j].luma < values[minIdx].luma) {\n\t\t\t\tminIdx = j;\n\t\t\t}\n\t\t}\n\t\tif (minIdx != i) {\n\t\t\tlet temp = values[i];\n\t\t\tvalues[i] = values[minIdx];\n\t\t\tvalues[minIdx] = temp;\n\t\t}\n\t}\n\n\tlet medianIdx = count / 2;\n\treturn applyPartialBlur(values[medianIdx].color, in.uv, dimensions);\n}\n`;\nconst MOTION_BLUR_SHADER = `\n${WGSL_BLUR_UNIFORMS}\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet c = textureSampleLevel(tex, samp, in.uv, 0.0);\n\tvar strength = u.strength;\n\tif (u.hasStrengthSig > 0.5) {\n\t\tstrength = textureSampleLevel(strengthSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\n\tlet dimensions = vec2<f32>(textureDimensions(tex));\n\tif (strength <= 0.0) {\n\t\treturn applyPartialBlur(c, in.uv, dimensions);\n\t}\n\n\tlet PI = 3.14159265359;\n\tlet angleRad = u.angle * PI / 180.0;\n\tlet dir = vec2<f32>(cos(angleRad), sin(angleRad));\n\n\tlet texelSize = 1.0 / dimensions;\n\tlet step = dir * texelSize;\n\n\tlet numSamples = i32(clamp(strength, 1.0, 64.0));\n\tvar color = vec4<f32>(0.0);\n\t\n\tfor (var i = 0; i < 64; i++) {\n\t\tif (i >= numSamples) { break; }\n\t\tlet offset = f32(i - numSamples / 2) * step;\n\t\tcolor += textureSampleLevel(tex, samp, in.uv + offset, 0.0);\n\t}\n\n\tlet blurred = color / f32(numSamples);\n\treturn applyPartialBlur(blurred, in.uv, dimensions);\n}\n`;\nconst BILATERAL_BLUR_SHADER = `\n${WGSL_BLUR_UNIFORMS}\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet centerCol = textureSampleLevel(tex, samp, in.uv, 0.0);\n\tvar spatial_sigma = u.strength;\n\tif (u.hasStrengthSig > 0.5) {\n\t\tspatial_sigma = textureSampleLevel(strengthSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tvar sigmaColor = u.sigmaColor;\n\tif (u.hasSigmaColorSig > 0.5) {\n\t\tsigmaColor = textureSampleLevel(sigmaColorSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\n\tlet dimensions = vec2<f32>(textureDimensions(tex));\n\tif (spatial_sigma <= 0.0) {\n\t\treturn applyPartialBlur(centerCol, in.uv, dimensions);\n\t}\n\n\tlet texelSize = 1.0 / dimensions;\n\tlet radius = min(i32(ceil(3.0 * spatial_sigma)), 32);\n\tlet direction = vec2<f32>(u.dirX, u.dirY);\n\t\n\tvar color = vec4<f32>(0.0);\n\tvar totalWeight = 0.0;\n\n\tfor (var i = -32; i <= 32; i++) {\n\t\tif (i < -radius || i > radius) { continue; }\n\t\tlet offset = vec2<f32>(f32(i)) * direction * texelSize;\n\t\tlet sampleCol = textureSampleLevel(tex, samp, in.uv + offset, 0.0);\n\t\t\n\t\tlet spatialDistSq = f32(i * i);\n\t\tlet spatialWeight = exp(-0.5 * spatialDistSq / (spatial_sigma * spatial_sigma));\n\t\t\n\t\tlet diff = sampleCol - centerCol;\n\t\tlet colorDistSq = dot(diff, diff);\n\t\tlet rangeWeight = exp(-0.5 * colorDistSq / (sigmaColor * sigmaColor));\n\t\t\n\t\tlet weight = spatialWeight * rangeWeight;\n\t\tcolor += sampleCol * weight;\n\t\ttotalWeight += weight;\n\t}\n\n\tvar blurred = centerCol;\n\tif (totalWeight > 0.0) {\n\t\tblurred = color / totalWeight;\n\t}\n\treturn applyPartialBlur(blurred, in.uv, dimensions);\n}\n`;\nconst EDGE_PRESERVING_SHADER = `\n${WGSL_BLUR_UNIFORMS}\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet centerCol = textureSampleLevel(tex, samp, in.uv, 0.0);\n\tvar strength = u.strength;\n\tif (u.hasStrengthSig > 0.5) {\n\t\tstrength = textureSampleLevel(strengthSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\n\t// Map strength (1-10) to radius (1-6)\n\tlet radius = i32(clamp(round(strength * 5.0 / 10.0) + 1.0, 1.0, 6.0));\n\n\tlet dimensions = vec2<f32>(textureDimensions(tex));\n\tlet texelSize = 1.0 / dimensions;\n\n\tvar m0 = vec3<f32>(0.0); var m1 = vec3<f32>(0.0); var m2 = vec3<f32>(0.0); var m3 = vec3<f32>(0.0);\n\tvar s0 = vec3<f32>(0.0); var s1 = vec3<f32>(0.0); var s2 = vec3<f32>(0.0); var s3 = vec3<f32>(0.0);\n\n\tlet n = f32((radius + 1) * (radius + 1));\n\n\tfor (var j = -6; j <= 6; j++) {\n\t\tif (j < -radius || j > radius) { continue; }\n\t\tfor (var i = -6; i <= 6; i++) {\n\t\t\tif (i < -radius || i > radius) { continue; }\n\t\t\t\n\t\t\tlet c = textureSampleLevel(tex, samp, in.uv + vec2<f32>(f32(i), f32(j)) * texelSize, 0.0).rgb;\n\t\t\t\n\t\t\tif (i <= 0 && j <= 0) {\n\t\t\t\tm0 += c;\n\t\t\t\ts0 += c * c;\n\t\t\t}\n\t\t\tif (i >= 0 && j <= 0) {\n\t\t\t\tm1 += c;\n\t\t\t\ts1 += c * c;\n\t\t\t}\n\t\t\tif (i <= 0 && j >= 0) {\n\t\t\t\tm2 += c;\n\t\t\t\ts2 += c * c;\n\t\t\t}\n\t\t\tif (i >= 0 && j >= 0) {\n\t\t\t\tm3 += c;\n\t\t\t\ts3 += c * c;\n\t\t\t}\n\t\t}\n\t}\n\n\tm0 = m0 / n; s0 = abs(s0 / n - m0 * m0);\n\tm1 = m1 / n; s1 = abs(s1 / n - m1 * m1);\n\tm2 = m2 / n; s2 = abs(s2 / n - m2 * m2);\n\tm3 = m3 / n; s3 = abs(s3 / n - m3 * m3);\n\n\tlet v0 = s0.r + s0.g + s0.b;\n\tlet v1 = s1.r + s1.g + s1.b;\n\tlet v2 = s2.r + s2.g + s2.b;\n\tlet v3 = s3.r + s3.g + s3.b;\n\n\tvar minVar = v0;\n\tvar finalCol = m0;\n\n\tif (v1 < minVar) {\n\t\tminVar = v1;\n\t\tfinalCol = m1;\n\t}\n\tif (v2 < minVar) {\n\t\tminVar = v2;\n\t\tfinalCol = m2;\n\t}\n\tif (v3 < minVar) {\n\t\tminVar = v3;\n\t\tfinalCol = m3;\n\t}\n\n\tlet blurred = vec4<f32>(finalCol, centerCol.a);\n\treturn applyPartialBlur(blurred, in.uv, dimensions);\n}\n`;\nconst RADIAL_BLUR_SHADER = `\n${WGSL_BLUR_UNIFORMS}\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet centerCol = textureSampleLevel(tex, samp, in.uv, 0.0);\n\tvar strength = u.strength;\n\tif (u.hasStrengthSig > 0.5) {\n\t\tstrength = textureSampleLevel(strengthSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tvar centerX = u.centerX;\n\tif (u.hasCenterXSig > 0.5) {\n\t\tcenterX = textureSampleLevel(centerXSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tvar centerY = u.centerY;\n\tif (u.hasCenterYSig > 0.5) {\n\t\tcenterY = textureSampleLevel(centerYSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\n\tlet dimensions = vec2<f32>(textureDimensions(tex));\n\tif (strength <= 0.0) {\n\t\treturn applyPartialBlur(centerCol, in.uv, dimensions);\n\t}\n\n\tlet center = vec2<f32>(centerX, centerY);\n\tlet toPixel = in.uv - center;\n\tlet dist = length(toPixel);\n\tif (dist <= 0.0) {\n\t\treturn applyPartialBlur(centerCol, in.uv, dimensions);\n\t}\n\n\tlet dir = vec2<f32>(-toPixel.y, toPixel.x);\n\tlet blurAmount = (strength / 100.0) * 0.1 * dist;\n\n\tlet numSamples = 24;\n\tvar color = vec4<f32>(0.0);\n\tlet step = dir * (blurAmount / f32(numSamples));\n\n\tfor (var i = 0; i < 24; i++) {\n\t\tlet offset = step * f32(i - 12);\n\t\tcolor += textureSampleLevel(tex, samp, in.uv + offset, 0.0);\n\t}\n\n\tlet blurred = color / 24.0;\n\treturn applyPartialBlur(blurred, in.uv, dimensions);\n}\n`;\nconst ZOOM_BLUR_SHADER = `\n${WGSL_BLUR_UNIFORMS}\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet centerCol = textureSampleLevel(tex, samp, in.uv, 0.0);\n\tvar strength = u.strength;\n\tif (u.hasStrengthSig > 0.5) {\n\t\tstrength = textureSampleLevel(strengthSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tvar centerX = u.centerX;\n\tif (u.hasCenterXSig > 0.5) {\n\t\tcenterX = textureSampleLevel(centerXSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tvar centerY = u.centerY;\n\tif (u.hasCenterYSig > 0.5) {\n\t\tcenterY = textureSampleLevel(centerYSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\n\tlet dimensions = vec2<f32>(textureDimensions(tex));\n\tif (strength <= 0.0) {\n\t\treturn applyPartialBlur(centerCol, in.uv, dimensions);\n\t}\n\n\tlet center = vec2<f32>(centerX, centerY);\n\tlet toPixel = in.uv - center;\n\tlet blurAmount = (strength / 100.0) * 0.15;\n\n\tlet numSamples = 24;\n\tvar color = vec4<f32>(0.0);\n\tlet step = toPixel * (blurAmount / f32(numSamples));\n\n\tfor (var i = 0; i < 24; i++) {\n\t\tlet offset = step * f32(i - 12);\n\t\tcolor += textureSampleLevel(tex, samp, in.uv + offset, 0.0);\n\t}\n\n\tlet blurred = color / 24.0;\n\treturn applyPartialBlur(blurred, in.uv, dimensions);\n}\n`;\nconst getDeviceLayouts = perDevice((device) => ({\n\tblurUniformLayout: fragmentBindGroupLayout(device, [\"uniform\"]),\n\tsingleTextureLayout: fragmentBindGroupLayout(device, [\n\t\t\"texture\",\n\t\t\"sampler\",\n\t\t\"texture\"\n\t]),\n\tsignalTextureLayout: texturesLayout(device, 5),\n\tpipelineCache: /* @__PURE__ */ new Map()\n}));\nfunction getBlurResources(device, format, blurType) {\n\tconst layouts = getDeviceLayouts(device);\n\tconst cacheKey = `blur_${blurType}_${format}`;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tlet code = GAUSSIAN_BLUR_SHADER;\n\t\tif (blurType === \"Box\") code = BOX_BLUR_SHADER;\n\t\telse if (blurType === \"Median\") code = MEDIAN_BLUR_SHADER;\n\t\telse if (blurType === \"Motion\") code = MOTION_BLUR_SHADER;\n\t\telse if (blurType === \"Bilateral\") code = BILATERAL_BLUR_SHADER;\n\t\telse if (blurType === \"Edge-preserving\") code = EDGE_PRESERVING_SHADER;\n\t\telse if (blurType === \"Radial\") code = RADIAL_BLUR_SHADER;\n\t\telse if (blurType === \"Zoom\") code = ZOOM_BLUR_SHADER;\n\t\tconst blurModule = device.createShaderModule({\n\t\t\tlabel: `blur_${blurType}_${format}.wgsl`,\n\t\t\tcode\n\t\t});\n\t\tpipeline = createFullscreenPipeline(device, {\n\t\t\tlabel: `BlurPipeline_${blurType}_${format}`,\n\t\t\tmodule: blurModule,\n\t\t\tlayouts: [\n\t\t\t\tlayouts.blurUniformLayout,\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\tblurPipeline: pipeline,\n\t\tblurUniformLayout: layouts.blurUniformLayout,\n\t\tsingleTextureLayout: layouts.singleTextureLayout,\n\t\tsignalTextureLayout: layouts.signalTextureLayout\n\t};\n}\nconst BlurWebGPURenderer = 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 !== \"Blur\" || !op) return;\n\tconst childMedia = props.virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tpass.end();\n\tconst blurData = new Float32Array(16);\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst dpiScale = width / (props.containerWidth ?? ctx.surface.width / (typeof window !== \"undefined\" ? window.devicePixelRatio : 1));\n\tconst nodeId = op.inputs ? Object.keys(op.inputs)[0] : \"blur_node\";\n\tconst resolveBindable = (configKey, defaultValue, minVal, maxVal, scaleByDpi = false) => {\n\t\tconst handleId = op[`${configKey}HandleId`];\n\t\tconst input = handleId ? op.inputs?.[handleId] : null;\n\t\tconst hasSignal = !!(input?.connectionValid && (input.outputItem?.type === \"Signal\" || input.outputItem?.type === \"Numeric\"));\n\t\tconst sd = hasSignal && input?.outputItem?.data ? input.outputItem.data : null;\n\t\tlet val = defaultValue;\n\t\tlet hasStaticSig = false;\n\t\tlet gpuTextureView;\n\t\tif (!hasSignal) if (input?.connectionValid && input.outputItem?.type === \"Number\") {\n\t\t\tconst rawVal = Number(input.outputItem.data ?? defaultValue);\n\t\t\tval = Math.max(minVal, Math.min(maxVal, rawVal));\n\t\t\tif (scaleByDpi) val *= dpiScale;\n\t\t} else {\n\t\t\tconst unwrapped = unwrapFrameParam(op[configKey], compositionFrame, fps);\n\t\t\tif (unwrapped.gpuTextureView) {\n\t\t\t\tgpuTextureView = unwrapped.gpuTextureView;\n\t\t\t\thasStaticSig = true;\n\t\t\t}\n\t\t\tconst rawVal = unwrapped.value;\n\t\t\tconst numVal = Number(rawVal ?? defaultValue);\n\t\t\tval = Math.max(minVal, Math.min(maxVal, isNaN(numVal) ? defaultValue : numVal));\n\t\t\tif (scaleByDpi) val *= dpiScale;\n\t\t}\n\t\telse if (sd) {\n\t\t\tconst rawVal = Number(sd.offset ?? 0);\n\t\t\tval = Math.max(minVal, Math.min(maxVal, rawVal));\n\t\t\tif (scaleByDpi) val *= dpiScale;\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\tgpuTextureView\n\t\t};\n\t};\n\tconst strengthRes = resolveBindable(\"strength\", 5, 0, MAX_BLUR, true);\n\tconst sigmaColorRes = resolveBindable(\"sigmaColor\", .1, .01, 1, false);\n\tconst centerXRes = resolveBindable(\"centerX\", .5, 0, 1, false);\n\tconst centerYRes = resolveBindable(\"centerY\", .5, 0, 1, false);\n\tconst radiusRes = resolveBindable(\"radius\", .3, .001, 1, false);\n\tconst radiusYRes = resolveBindable(\"radiusY\", 0, 0, 1, false);\n\tconst { texture: tmpTex } = await drawChildToTexture(args, childMedia);\n\tconst blurType = op.blurType ?? \"Gaussian\";\n\tconst isSeparable = blurType === \"Gaussian\" || blurType === \"Box\" || blurType === \"Median\" || blurType === \"Bilateral\";\n\tconst { blurPipeline: pipeline, blurUniformLayout: uLayout, singleTextureLayout: tLayout, signalTextureLayout: sigLayout } = getBlurResources(ctx.device, ctx.renderer.format, blurType);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst { elapsedSeconds, durationSeconds } = signalTiming(props, frame, fps);\n\tfor (const bindableRes of [\n\t\tstrengthRes,\n\t\tsigmaColorRes,\n\t\tcenterXRes,\n\t\tcenterYRes,\n\t\tradiusRes\n\t]) if (bindableRes.hasStaticSig && bindableRes.sd) await signalRegistry.ensureAudioSourcesExtracted(ctx.device, bindableRes.sd, fps, props.renderId);\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 strengthView = getSignalView(strengthRes, \"strength_sig\");\n\tconst sigmaColorView = getSignalView(sigmaColorRes, \"sigmacolor_sig\");\n\tconst centerXView = getSignalView(centerXRes, \"centerx_sig\");\n\tconst centerYView = getSignalView(centerYRes, \"centery_sig\");\n\tconst radiusView = getSignalView(radiusRes, \"radius_sig\");\n\tconst createBlurBindGroup1 = (inputTex, origTex) => ctx.device.createBindGroup({\n\t\tlayout: tLayout,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: inputTex.createView()\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: sampler\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: origTex.createView()\n\t\t\t}\n\t\t]\n\t});\n\tconst isPartial = Boolean(op.partialBlur && op.partialBlur !== \"false\" && op.partialBlur !== 0);\n\tblurData[2] = strengthRes.val;\n\tblurData[3] = Number(op.angle ?? 0);\n\tblurData[4] = sigmaColorRes.val;\n\tblurData[5] = centerXRes.val;\n\tblurData[6] = centerYRes.val;\n\tblurData[7] = radiusRes.val;\n\tblurData[8] = isPartial ? 1 : 0;\n\tblurData[9] = strengthRes.hasStaticSig ? 1 : 0;\n\tblurData[10] = sigmaColorRes.hasStaticSig ? 1 : 0;\n\tblurData[11] = centerXRes.hasStaticSig ? 1 : 0;\n\tblurData[12] = centerYRes.hasStaticSig ? 1 : 0;\n\tblurData[13] = radiusRes.hasStaticSig ? 1 : 0;\n\tblurData[14] = radiusYRes.val;\n\tblurData[15] = op.shape === \"rect\" ? 1 : 0;\n\tlet outTex2;\n\tif (isSeparable) {\n\t\tconst outTex1 = ctx.renderer.getTemporaryTexture(width, height, [\n\t\t\ttmpTex,\n\t\t\ttargetTexture,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\toutTex2 = ctx.renderer.getTemporaryTexture(width, height, [\n\t\t\ttmpTex,\n\t\t\toutTex1,\n\t\t\ttargetTexture,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tblurData[0] = 1;\n\t\tblurData[1] = 0;\n\t\tblurData[8] = 0;\n\t\tconst hBuffer = ctx.renderer.getTemporaryBuffer(blurData);\n\t\tdrawFullscreenPass(encoder, outTex1.createView(), pipeline, [\n\t\t\tctx.device.createBindGroup({\n\t\t\t\tlayout: uLayout,\n\t\t\t\tentries: [{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: hBuffer }\n\t\t\t\t}]\n\t\t\t}),\n\t\t\tcreateBlurBindGroup1(tmpTex, tmpTex),\n\t\t\tctx.device.createBindGroup({\n\t\t\t\tlayout: sigLayout,\n\t\t\t\tentries: [\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 0,\n\t\t\t\t\t\tresource: strengthView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 1,\n\t\t\t\t\t\tresource: sigmaColorView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 2,\n\t\t\t\t\t\tresource: centerXView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 3,\n\t\t\t\t\t\tresource: centerYView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 4,\n\t\t\t\t\t\tresource: radiusView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 5,\n\t\t\t\t\t\tresource: sampler\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t})\n\t\t]);\n\t\tblurData[0] = 0;\n\t\tblurData[1] = 1;\n\t\tblurData[8] = isPartial ? 1 : 0;\n\t\tconst vBuffer = ctx.renderer.getTemporaryBuffer(blurData);\n\t\tdrawFullscreenPass(encoder, outTex2.createView(), pipeline, [\n\t\t\tctx.device.createBindGroup({\n\t\t\t\tlayout: uLayout,\n\t\t\t\tentries: [{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: vBuffer }\n\t\t\t\t}]\n\t\t\t}),\n\t\t\tcreateBlurBindGroup1(outTex1, tmpTex),\n\t\t\tctx.device.createBindGroup({\n\t\t\t\tlayout: sigLayout,\n\t\t\t\tentries: [\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 0,\n\t\t\t\t\t\tresource: strengthView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 1,\n\t\t\t\t\t\tresource: sigmaColorView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 2,\n\t\t\t\t\t\tresource: centerXView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 3,\n\t\t\t\t\t\tresource: centerYView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 4,\n\t\t\t\t\t\tresource: radiusView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 5,\n\t\t\t\t\t\tresource: sampler\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t})\n\t\t]);\n\t} else {\n\t\toutTex2 = ctx.renderer.getTemporaryTexture(width, height, [\n\t\t\ttmpTex,\n\t\t\ttargetTexture,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tblurData[0] = 0;\n\t\tblurData[1] = 0;\n\t\tblurData[8] = isPartial ? 1 : 0;\n\t\tconst singleBuffer = ctx.renderer.getTemporaryBuffer(blurData);\n\t\tdrawFullscreenPass(encoder, outTex2.createView(), pipeline, [\n\t\t\tctx.device.createBindGroup({\n\t\t\t\tlayout: uLayout,\n\t\t\t\tentries: [{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: singleBuffer }\n\t\t\t\t}]\n\t\t\t}),\n\t\t\tcreateBlurBindGroup1(tmpTex, tmpTex),\n\t\t\tctx.device.createBindGroup({\n\t\t\t\tlayout: sigLayout,\n\t\t\t\tentries: [\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 0,\n\t\t\t\t\t\tresource: strengthView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 1,\n\t\t\t\t\t\tresource: sigmaColorView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 2,\n\t\t\t\t\t\tresource: centerXView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 3,\n\t\t\t\t\t\tresource: centerYView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 4,\n\t\t\t\t\t\tresource: radiusView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 5,\n\t\t\t\t\t\tresource: sampler\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t})\n\t\t]);\n\t}\n\tdrawTextureToTarget(args, outTex2, op.opacity ?? 1);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: BlurWebGPURenderer });\n\n//#endregion\nexport { MAX_BLUR as a, BlurResultSchema as i, BLUR_OUTPUT_TYPE_MAP as n, blurConfig as o, BlurNodeConfigSchema as r, renderers_default as t };\n//# sourceMappingURL=renderers-rcrwEq-B.mjs.map"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"renderer-CIbXIFOb.mjs","names":[],"sources":["../../../nodes/node-blur/dist/renderers-rcrwEq-B.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { ImageResultSchema, VideoResultSchema, configBuilder, unwrapFrameParam } from \"@framefields/node-sdk\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice, signalTextureView, signalTiming, texturesLayout } from \"@framefields/node-sdk/gpu\";\nimport { signalRegistry } from \"@framefields/webgpu-renderers\";\nimport { z } from \"zod\";\n\n//#region src/shared/config.ts\nconst MAX_BLUR = 100;\nconst blurConfig = configBuilder().field(\"blurType\", z.enum([\n\t\"Gaussian\",\n\t\"Box\",\n\t\"Median\",\n\t\"Motion\",\n\t\"Bilateral\",\n\t\"Edge-preserving\",\n\t\"Radial\",\n\t\"Zoom\"\n]).default(\"Gaussian\"), {\n\tbindable: false,\n\tlabel: \"Blur Type\"\n}).field(\"strength\", z.number().min(0).max(MAX_BLUR).default(5), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Strength Signal\",\n\tdescription: \"The intensity of the blur. 0 = no blur. Can be modulated by a static number or a dynamic signal.\"\n}).field(\"angle\", z.number().int().min(0).max(360).default(0), {\n\tbindable: false,\n\tsignal: true,\n\tlabel: \"Angle\",\n\tdescription: \"Direction of a Motion blur, in degrees.\"\n}).field(\"sigmaColor\", z.number().min(.01).max(1).default(.1), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Color Sigma Signal\",\n\tdescription: \"Sigma value for color space in Bilateral / Edge-preserving blurs. Can be modulated by a static number or a dynamic signal.\"\n}).field(\"centerX\", z.number().min(0).max(1).default(.5), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Center X Signal\",\n\tdescription: \"The X coordinate of the blur center (0.0 to 1.0). Can be modulated by a static number or a dynamic signal.\"\n}).field(\"centerY\", z.number().min(0).max(1).default(.5), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Center Y Signal\",\n\tdescription: \"The Y coordinate of the blur center (0.0 to 1.0). Can be modulated by a static number or a dynamic signal.\"\n}).field(\"partialBlur\", z.boolean().default(false), {\n\tbindable: false,\n\tsignal: true,\n\tlabel: \"Partial Blur\",\n\tdescription: \"Blurs only a specific circular area around center point.\"\n}).field(\"radius\", z.number().min(.01).max(1).default(.3), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Partial Radius Signal\",\n\tdescription: \"Radius of the partial blur region (0.01 to 1.0). Can be modulated by a static number or a dynamic signal.\"\n}).field(\"radiusY\", z.number().min(0).max(1).default(0), {\n\tbindable: true,\n\tdataTypes: [\"Number\", \"Signal\"],\n\tlabel: \"Partial Radius Y Signal\",\n\tdescription: \"Vertical radius of the partial blur region (0 to 1.0). 0 reuses the horizontal radius.\"\n}).field(\"shape\", z.enum([\n\t\"ellipse\",\n\t\"circle\",\n\t\"rect\"\n]).default(\"circle\"), {\n\tbindable: false,\n\tlabel: \"Partial Shape\",\n\tdescription: \"Shape of the partial blur region.\"\n}).build();\nconst BlurNodeConfigSchema = blurConfig.schema;\nconst BlurResultSchema = z.union([ImageResultSchema, VideoResultSchema]);\nconst BLUR_OUTPUT_TYPE_MAP = {\n\tVideo: \"Video\",\n\tLottie: \"Video\",\n\tGIF: \"GIF\",\n\tImage: \"Image\",\n\tSVG: \"Image\"\n};\n\n//#endregion\n//#region src/renderers/webgpu-renderer.ts\nconst WGSL_BLUR_UNIFORMS = `\nstruct BlurUniforms {\n\tdirX : f32,\n\tdirY : f32,\n\tstrength : f32,\n\tangle : f32,\n\n\tsigmaColor : f32,\n\tcenterX : f32,\n\tcenterY : f32,\n\tradius : f32,\n\n\tpartialBlur : f32,\n\thasStrengthSig : f32,\n\thasSigmaColorSig: f32,\n\thasCenterXSig : f32,\n\n\thasCenterYSig : f32,\n\thasRadiusSig : f32,\n\tradiusY : f32,\n\tshape : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : BlurUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n@group(1) @binding(2) var origTex : texture_2d<f32>;\n\n@group(2) @binding(0) var strengthSigTex : texture_2d<f32>;\n@group(2) @binding(1) var sigmaColorSigTex : texture_2d<f32>;\n@group(2) @binding(2) var centerXSigTex : texture_2d<f32>;\n@group(2) @binding(3) var centerYSigTex : texture_2d<f32>;\n@group(2) @binding(4) var radiusSigTex : texture_2d<f32>;\n@group(2) @binding(5) var signalSamp : sampler;\n\nfn applyPartialBlur(blurred: vec4<f32>, uv: vec2<f32>, dimensions: vec2<f32>) -> vec4<f32> {\n\tif (u.partialBlur <= 0.5) {\n\t\treturn blurred;\n\t}\n\tlet orig = textureSampleLevel(origTex, samp, uv, 0.0);\n\tvar centerX = u.centerX;\n\tif (u.hasCenterXSig > 0.5) {\n\t\tcenterX = textureSampleLevel(centerXSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tvar centerY = u.centerY;\n\tif (u.hasCenterYSig > 0.5) {\n\t\tcenterY = textureSampleLevel(centerYSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tvar radiusX = u.radius;\n\tif (u.hasRadiusSig > 0.5) {\n\t\tradiusX = textureSampleLevel(radiusSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tvar radiusY = u.radiusY;\n\n\tvar mask = 0.0;\n\tif (radiusY <= 0.0) {\n\t\tlet aspect = dimensions.x / dimensions.y;\n\t\tlet diff = (uv - vec2<f32>(centerX, centerY)) * vec2<f32>(aspect, 1.0);\n\t\tlet dist = length(diff);\n\t\tlet feather = 0.05;\n\t\tmask = 1.0 - smoothstep(radiusX - feather, radiusX + feather, dist);\n\t} else {\n\t\tlet diff = abs(uv - vec2<f32>(centerX, centerY));\n\t\tif (u.shape > 0.5) {\n\t\t\tlet feather = 0.02;\n\t\t\tlet edgeX = 1.0 - smoothstep(radiusX - feather, radiusX + feather, diff.x);\n\t\t\tlet edgeY = 1.0 - smoothstep(radiusY - feather, radiusY + feather, diff.y);\n\t\t\tmask = edgeX * edgeY;\n\t\t} else {\n\t\t\tlet normDist = length(vec2<f32>(diff.x / max(1e-4, radiusX), diff.y / max(1e-4, radiusY)));\n\t\t\tlet feather = 0.08;\n\t\t\tmask = 1.0 - smoothstep(1.0 - feather, 1.0 + feather, normDist);\n\t\t}\n\t}\n\treturn mix(orig, blurred, mask);\n}\n`;\nconst GAUSSIAN_BLUR_SHADER = `\n${WGSL_BLUR_UNIFORMS}\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet c = textureSampleLevel(tex, samp, in.uv, 0.0);\n\tvar spatial_sigma = u.strength;\n\tif (u.hasStrengthSig > 0.5) {\n\t\tspatial_sigma = textureSampleLevel(strengthSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\n\tlet dimensions = vec2<f32>(textureDimensions(tex));\n\tif (spatial_sigma <= 0.0) {\n\t\treturn applyPartialBlur(c, in.uv, dimensions);\n\t}\n\n\tlet texelSize = 1.0 / dimensions;\n\tlet stepScale = max(1.0, spatial_sigma / 20.0);\n\tlet effectiveSigma = spatial_sigma / stepScale;\n\tlet radius = min(i32(ceil(3.0 * effectiveSigma)), 64);\n\t\n\tlet direction = vec2<f32>(u.dirX, u.dirY);\n\t\n\tvar color = vec4<f32>(0.0);\n\tvar totalWeight = 0.0;\n\n\tfor (var i = -radius; i <= radius; i++) {\n\t\tlet offset = vec2<f32>(f32(i) * stepScale) * direction * texelSize;\n\t\tlet x = f32(i) * stepScale;\n\t\tlet weight = exp(-0.5 * (x / spatial_sigma) * (x / spatial_sigma));\n\t\tcolor += textureSampleLevel(tex, samp, in.uv + offset, 0.0) * weight;\n\t\ttotalWeight += weight;\n\t}\n\n\tlet blurred = color / totalWeight;\n\treturn applyPartialBlur(blurred, in.uv, dimensions);\n}\n`;\nconst BOX_BLUR_SHADER = `\n${WGSL_BLUR_UNIFORMS}\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet c = textureSampleLevel(tex, samp, in.uv, 0.0);\n\tvar strength = u.strength;\n\tif (u.hasStrengthSig > 0.5) {\n\t\tstrength = textureSampleLevel(strengthSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\n\tlet dimensions = vec2<f32>(textureDimensions(tex));\n\tlet radius = i32(round(strength));\n\tif (radius <= 0) {\n\t\treturn applyPartialBlur(c, in.uv, dimensions);\n\t}\n\n\tlet texelSize = 1.0 / dimensions;\n\tlet direction = vec2<f32>(u.dirX, u.dirY);\n\t\n\tvar color = vec4<f32>(0.0);\n\tvar count = 0.0;\n\n\tfor (var i = -radius; i <= radius; i++) {\n\t\tlet offset = vec2<f32>(f32(i)) * direction * texelSize;\n\t\tcolor += textureSampleLevel(tex, samp, in.uv + offset, 0.0);\n\t\tcount += 1.0;\n\t}\n\n\tlet blurred = color / count;\n\treturn applyPartialBlur(blurred, in.uv, dimensions);\n}\n`;\nconst MEDIAN_BLUR_SHADER = `\n${WGSL_BLUR_UNIFORMS}\nstruct Val {\n\tluma : f32,\n\tcolor : vec4<f32>,\n};\n\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet centerCol = textureSampleLevel(tex, samp, in.uv, 0.0);\n\tvar strength = u.strength;\n\tif (u.hasStrengthSig > 0.5) {\n\t\tstrength = textureSampleLevel(strengthSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\n\tlet dimensions = vec2<f32>(textureDimensions(tex));\n\tlet radius = min(i32(round(strength)), 16);\n\tif (radius <= 0) {\n\t\treturn applyPartialBlur(centerCol, in.uv, dimensions);\n\t}\n\n\tlet count = radius * 2 + 1;\n\tlet texelSize = 1.0 / dimensions;\n\tlet direction = vec2<f32>(u.dirX, u.dirY);\n\n\tvar values : array<Val, 33>;\n\n\tfor (var i = 0; i < 33; i++) {\n\t\tif (i >= count) { break; }\n\t\tlet offset = vec2<f32>(f32(i - radius)) * direction * texelSize;\n\t\tlet col = textureSampleLevel(tex, samp, in.uv + offset, 0.0);\n\t\tvalues[i] = Val(dot(col.rgb, vec3<f32>(0.299, 0.587, 0.114)), col);\n\t}\n\n\t// Selection sort\n\tfor (var i = 0; i < 33; i++) {\n\t\tif (i >= count - 1) { break; }\n\t\tvar minIdx = i;\n\t\tfor (var j = 0; j < 33; j++) {\n\t\t\tif (j <= i) { continue; }\n\t\t\tif (j >= count) { break; }\n\t\t\tif (values[j].luma < values[minIdx].luma) {\n\t\t\t\tminIdx = j;\n\t\t\t}\n\t\t}\n\t\tif (minIdx != i) {\n\t\t\tlet temp = values[i];\n\t\t\tvalues[i] = values[minIdx];\n\t\t\tvalues[minIdx] = temp;\n\t\t}\n\t}\n\n\tlet medianIdx = count / 2;\n\treturn applyPartialBlur(values[medianIdx].color, in.uv, dimensions);\n}\n`;\nconst MOTION_BLUR_SHADER = `\n${WGSL_BLUR_UNIFORMS}\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet c = textureSampleLevel(tex, samp, in.uv, 0.0);\n\tvar strength = u.strength;\n\tif (u.hasStrengthSig > 0.5) {\n\t\tstrength = textureSampleLevel(strengthSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\n\tlet dimensions = vec2<f32>(textureDimensions(tex));\n\tif (strength <= 0.0) {\n\t\treturn applyPartialBlur(c, in.uv, dimensions);\n\t}\n\n\tlet PI = 3.14159265359;\n\tlet angleRad = u.angle * PI / 180.0;\n\tlet dir = vec2<f32>(cos(angleRad), sin(angleRad));\n\n\tlet texelSize = 1.0 / dimensions;\n\tlet step = dir * texelSize;\n\n\tlet numSamples = i32(clamp(strength, 1.0, 64.0));\n\tvar color = vec4<f32>(0.0);\n\t\n\tfor (var i = 0; i < 64; i++) {\n\t\tif (i >= numSamples) { break; }\n\t\tlet offset = f32(i - numSamples / 2) * step;\n\t\tcolor += textureSampleLevel(tex, samp, in.uv + offset, 0.0);\n\t}\n\n\tlet blurred = color / f32(numSamples);\n\treturn applyPartialBlur(blurred, in.uv, dimensions);\n}\n`;\nconst BILATERAL_BLUR_SHADER = `\n${WGSL_BLUR_UNIFORMS}\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet centerCol = textureSampleLevel(tex, samp, in.uv, 0.0);\n\tvar spatial_sigma = u.strength;\n\tif (u.hasStrengthSig > 0.5) {\n\t\tspatial_sigma = textureSampleLevel(strengthSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tvar sigmaColor = u.sigmaColor;\n\tif (u.hasSigmaColorSig > 0.5) {\n\t\tsigmaColor = textureSampleLevel(sigmaColorSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\n\tlet dimensions = vec2<f32>(textureDimensions(tex));\n\tif (spatial_sigma <= 0.0) {\n\t\treturn applyPartialBlur(centerCol, in.uv, dimensions);\n\t}\n\n\tlet texelSize = 1.0 / dimensions;\n\tlet radius = min(i32(ceil(3.0 * spatial_sigma)), 32);\n\tlet direction = vec2<f32>(u.dirX, u.dirY);\n\t\n\tvar color = vec4<f32>(0.0);\n\tvar totalWeight = 0.0;\n\n\tfor (var i = -32; i <= 32; i++) {\n\t\tif (i < -radius || i > radius) { continue; }\n\t\tlet offset = vec2<f32>(f32(i)) * direction * texelSize;\n\t\tlet sampleCol = textureSampleLevel(tex, samp, in.uv + offset, 0.0);\n\t\t\n\t\tlet spatialDistSq = f32(i * i);\n\t\tlet spatialWeight = exp(-0.5 * spatialDistSq / (spatial_sigma * spatial_sigma));\n\t\t\n\t\tlet diff = sampleCol - centerCol;\n\t\tlet colorDistSq = dot(diff, diff);\n\t\tlet rangeWeight = exp(-0.5 * colorDistSq / (sigmaColor * sigmaColor));\n\t\t\n\t\tlet weight = spatialWeight * rangeWeight;\n\t\tcolor += sampleCol * weight;\n\t\ttotalWeight += weight;\n\t}\n\n\tvar blurred = centerCol;\n\tif (totalWeight > 0.0) {\n\t\tblurred = color / totalWeight;\n\t}\n\treturn applyPartialBlur(blurred, in.uv, dimensions);\n}\n`;\nconst EDGE_PRESERVING_SHADER = `\n${WGSL_BLUR_UNIFORMS}\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet centerCol = textureSampleLevel(tex, samp, in.uv, 0.0);\n\tvar strength = u.strength;\n\tif (u.hasStrengthSig > 0.5) {\n\t\tstrength = textureSampleLevel(strengthSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\n\t// Map strength (1-10) to radius (1-6)\n\tlet radius = i32(clamp(round(strength * 5.0 / 10.0) + 1.0, 1.0, 6.0));\n\n\tlet dimensions = vec2<f32>(textureDimensions(tex));\n\tlet texelSize = 1.0 / dimensions;\n\n\tvar m0 = vec3<f32>(0.0); var m1 = vec3<f32>(0.0); var m2 = vec3<f32>(0.0); var m3 = vec3<f32>(0.0);\n\tvar s0 = vec3<f32>(0.0); var s1 = vec3<f32>(0.0); var s2 = vec3<f32>(0.0); var s3 = vec3<f32>(0.0);\n\n\tlet n = f32((radius + 1) * (radius + 1));\n\n\tfor (var j = -6; j <= 6; j++) {\n\t\tif (j < -radius || j > radius) { continue; }\n\t\tfor (var i = -6; i <= 6; i++) {\n\t\t\tif (i < -radius || i > radius) { continue; }\n\t\t\t\n\t\t\tlet c = textureSampleLevel(tex, samp, in.uv + vec2<f32>(f32(i), f32(j)) * texelSize, 0.0).rgb;\n\t\t\t\n\t\t\tif (i <= 0 && j <= 0) {\n\t\t\t\tm0 += c;\n\t\t\t\ts0 += c * c;\n\t\t\t}\n\t\t\tif (i >= 0 && j <= 0) {\n\t\t\t\tm1 += c;\n\t\t\t\ts1 += c * c;\n\t\t\t}\n\t\t\tif (i <= 0 && j >= 0) {\n\t\t\t\tm2 += c;\n\t\t\t\ts2 += c * c;\n\t\t\t}\n\t\t\tif (i >= 0 && j >= 0) {\n\t\t\t\tm3 += c;\n\t\t\t\ts3 += c * c;\n\t\t\t}\n\t\t}\n\t}\n\n\tm0 = m0 / n; s0 = abs(s0 / n - m0 * m0);\n\tm1 = m1 / n; s1 = abs(s1 / n - m1 * m1);\n\tm2 = m2 / n; s2 = abs(s2 / n - m2 * m2);\n\tm3 = m3 / n; s3 = abs(s3 / n - m3 * m3);\n\n\tlet v0 = s0.r + s0.g + s0.b;\n\tlet v1 = s1.r + s1.g + s1.b;\n\tlet v2 = s2.r + s2.g + s2.b;\n\tlet v3 = s3.r + s3.g + s3.b;\n\n\tvar minVar = v0;\n\tvar finalCol = m0;\n\n\tif (v1 < minVar) {\n\t\tminVar = v1;\n\t\tfinalCol = m1;\n\t}\n\tif (v2 < minVar) {\n\t\tminVar = v2;\n\t\tfinalCol = m2;\n\t}\n\tif (v3 < minVar) {\n\t\tminVar = v3;\n\t\tfinalCol = m3;\n\t}\n\n\tlet blurred = vec4<f32>(finalCol, centerCol.a);\n\treturn applyPartialBlur(blurred, in.uv, dimensions);\n}\n`;\nconst RADIAL_BLUR_SHADER = `\n${WGSL_BLUR_UNIFORMS}\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet centerCol = textureSampleLevel(tex, samp, in.uv, 0.0);\n\tvar strength = u.strength;\n\tif (u.hasStrengthSig > 0.5) {\n\t\tstrength = textureSampleLevel(strengthSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tvar centerX = u.centerX;\n\tif (u.hasCenterXSig > 0.5) {\n\t\tcenterX = textureSampleLevel(centerXSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tvar centerY = u.centerY;\n\tif (u.hasCenterYSig > 0.5) {\n\t\tcenterY = textureSampleLevel(centerYSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\n\tlet dimensions = vec2<f32>(textureDimensions(tex));\n\tif (strength <= 0.0) {\n\t\treturn applyPartialBlur(centerCol, in.uv, dimensions);\n\t}\n\n\tlet center = vec2<f32>(centerX, centerY);\n\tlet toPixel = in.uv - center;\n\tlet dist = length(toPixel);\n\tif (dist <= 0.0) {\n\t\treturn applyPartialBlur(centerCol, in.uv, dimensions);\n\t}\n\n\tlet dir = vec2<f32>(-toPixel.y, toPixel.x);\n\tlet blurAmount = (strength / 100.0) * 0.1 * dist;\n\n\tlet numSamples = 24;\n\tvar color = vec4<f32>(0.0);\n\tlet step = dir * (blurAmount / f32(numSamples));\n\n\tfor (var i = 0; i < 24; i++) {\n\t\tlet offset = step * f32(i - 12);\n\t\tcolor += textureSampleLevel(tex, samp, in.uv + offset, 0.0);\n\t}\n\n\tlet blurred = color / 24.0;\n\treturn applyPartialBlur(blurred, in.uv, dimensions);\n}\n`;\nconst ZOOM_BLUR_SHADER = `\n${WGSL_BLUR_UNIFORMS}\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet centerCol = textureSampleLevel(tex, samp, in.uv, 0.0);\n\tvar strength = u.strength;\n\tif (u.hasStrengthSig > 0.5) {\n\t\tstrength = textureSampleLevel(strengthSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tvar centerX = u.centerX;\n\tif (u.hasCenterXSig > 0.5) {\n\t\tcenterX = textureSampleLevel(centerXSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\tvar centerY = u.centerY;\n\tif (u.hasCenterYSig > 0.5) {\n\t\tcenterY = textureSampleLevel(centerYSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n\t}\n\n\tlet dimensions = vec2<f32>(textureDimensions(tex));\n\tif (strength <= 0.0) {\n\t\treturn applyPartialBlur(centerCol, in.uv, dimensions);\n\t}\n\n\tlet center = vec2<f32>(centerX, centerY);\n\tlet toPixel = in.uv - center;\n\tlet blurAmount = (strength / 100.0) * 0.15;\n\n\tlet numSamples = 24;\n\tvar color = vec4<f32>(0.0);\n\tlet step = toPixel * (blurAmount / f32(numSamples));\n\n\tfor (var i = 0; i < 24; i++) {\n\t\tlet offset = step * f32(i - 12);\n\t\tcolor += textureSampleLevel(tex, samp, in.uv + offset, 0.0);\n\t}\n\n\tlet blurred = color / 24.0;\n\treturn applyPartialBlur(blurred, in.uv, dimensions);\n}\n`;\nconst getDeviceLayouts = perDevice((device) => ({\n\tblurUniformLayout: fragmentBindGroupLayout(device, [\"uniform\"]),\n\tsingleTextureLayout: fragmentBindGroupLayout(device, [\n\t\t\"texture\",\n\t\t\"sampler\",\n\t\t\"texture\"\n\t]),\n\tsignalTextureLayout: texturesLayout(device, 5),\n\tpipelineCache: /* @__PURE__ */ new Map()\n}));\nfunction getBlurResources(device, format, blurType) {\n\tconst layouts = getDeviceLayouts(device);\n\tconst cacheKey = `blur_${blurType}_${format}`;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tlet code = GAUSSIAN_BLUR_SHADER;\n\t\tif (blurType === \"Box\") code = BOX_BLUR_SHADER;\n\t\telse if (blurType === \"Median\") code = MEDIAN_BLUR_SHADER;\n\t\telse if (blurType === \"Motion\") code = MOTION_BLUR_SHADER;\n\t\telse if (blurType === \"Bilateral\") code = BILATERAL_BLUR_SHADER;\n\t\telse if (blurType === \"Edge-preserving\") code = EDGE_PRESERVING_SHADER;\n\t\telse if (blurType === \"Radial\") code = RADIAL_BLUR_SHADER;\n\t\telse if (blurType === \"Zoom\") code = ZOOM_BLUR_SHADER;\n\t\tconst blurModule = device.createShaderModule({\n\t\t\tlabel: `blur_${blurType}_${format}.wgsl`,\n\t\t\tcode\n\t\t});\n\t\tpipeline = createFullscreenPipeline(device, {\n\t\t\tlabel: `BlurPipeline_${blurType}_${format}`,\n\t\t\tmodule: blurModule,\n\t\t\tlayouts: [\n\t\t\t\tlayouts.blurUniformLayout,\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\tblurPipeline: pipeline,\n\t\tblurUniformLayout: layouts.blurUniformLayout,\n\t\tsingleTextureLayout: layouts.singleTextureLayout,\n\t\tsignalTextureLayout: layouts.signalTextureLayout\n\t};\n}\nconst BlurWebGPURenderer = 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 !== \"Blur\" || !op) return;\n\tconst childMedia = props.virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tpass.end();\n\tconst blurData = new Float32Array(16);\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst dpiScale = width / (props.containerWidth ?? ctx.surface.width / (typeof window !== \"undefined\" ? window.devicePixelRatio : 1));\n\tconst nodeId = op.inputs ? Object.keys(op.inputs)[0] : \"blur_node\";\n\tconst resolveBindable = (configKey, defaultValue, minVal, maxVal, scaleByDpi = false) => {\n\t\tconst handleId = op[`${configKey}HandleId`];\n\t\tconst input = handleId ? op.inputs?.[handleId] : null;\n\t\tconst hasSignal = !!(input?.connectionValid && (input.outputItem?.type === \"Signal\" || input.outputItem?.type === \"Numeric\"));\n\t\tconst sd = hasSignal && input?.outputItem?.data ? input.outputItem.data : null;\n\t\tlet val = defaultValue;\n\t\tlet hasStaticSig = false;\n\t\tlet gpuTextureView;\n\t\tif (!hasSignal) if (input?.connectionValid && input.outputItem?.type === \"Number\") {\n\t\t\tconst rawVal = Number(input.outputItem.data ?? defaultValue);\n\t\t\tval = Math.max(minVal, Math.min(maxVal, rawVal));\n\t\t\tif (scaleByDpi) val *= dpiScale;\n\t\t} else {\n\t\t\tconst unwrapped = unwrapFrameParam(op[configKey], compositionFrame, fps);\n\t\t\tif (unwrapped.gpuTextureView) {\n\t\t\t\tgpuTextureView = unwrapped.gpuTextureView;\n\t\t\t\thasStaticSig = true;\n\t\t\t}\n\t\t\tconst rawVal = unwrapped.value;\n\t\t\tconst numVal = Number(rawVal ?? defaultValue);\n\t\t\tval = Math.max(minVal, Math.min(maxVal, isNaN(numVal) ? defaultValue : numVal));\n\t\t\tif (scaleByDpi) val *= dpiScale;\n\t\t}\n\t\telse if (sd) {\n\t\t\tconst rawVal = Number(sd.offset ?? 0);\n\t\t\tval = Math.max(minVal, Math.min(maxVal, rawVal));\n\t\t\tif (scaleByDpi) val *= dpiScale;\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\tgpuTextureView\n\t\t};\n\t};\n\tconst strengthRes = resolveBindable(\"strength\", 5, 0, MAX_BLUR, true);\n\tconst sigmaColorRes = resolveBindable(\"sigmaColor\", .1, .01, 1, false);\n\tconst centerXRes = resolveBindable(\"centerX\", .5, 0, 1, false);\n\tconst centerYRes = resolveBindable(\"centerY\", .5, 0, 1, false);\n\tconst radiusRes = resolveBindable(\"radius\", .3, .001, 1, false);\n\tconst radiusYRes = resolveBindable(\"radiusY\", 0, 0, 1, false);\n\tconst { texture: tmpTex } = await drawChildToTexture(args, childMedia);\n\tconst blurType = op.blurType ?? \"Gaussian\";\n\tconst isSeparable = blurType === \"Gaussian\" || blurType === \"Box\" || blurType === \"Median\" || blurType === \"Bilateral\";\n\tconst { blurPipeline: pipeline, blurUniformLayout: uLayout, singleTextureLayout: tLayout, signalTextureLayout: sigLayout } = getBlurResources(ctx.device, ctx.renderer.format, blurType);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst { elapsedSeconds, durationSeconds } = signalTiming(props, frame, fps);\n\tfor (const bindableRes of [\n\t\tstrengthRes,\n\t\tsigmaColorRes,\n\t\tcenterXRes,\n\t\tcenterYRes,\n\t\tradiusRes\n\t]) if (bindableRes.hasStaticSig && bindableRes.sd) await signalRegistry.ensureAudioSourcesExtracted(ctx.device, bindableRes.sd, fps, props.renderId);\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 strengthView = getSignalView(strengthRes, \"strength_sig\");\n\tconst sigmaColorView = getSignalView(sigmaColorRes, \"sigmacolor_sig\");\n\tconst centerXView = getSignalView(centerXRes, \"centerx_sig\");\n\tconst centerYView = getSignalView(centerYRes, \"centery_sig\");\n\tconst radiusView = getSignalView(radiusRes, \"radius_sig\");\n\tconst createBlurBindGroup1 = (inputTex, origTex) => ctx.device.createBindGroup({\n\t\tlayout: tLayout,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: inputTex.createView()\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: sampler\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: origTex.createView()\n\t\t\t}\n\t\t]\n\t});\n\tconst isPartial = Boolean(op.partialBlur && op.partialBlur !== \"false\" && op.partialBlur !== 0);\n\tblurData[2] = strengthRes.val;\n\tblurData[3] = Number(op.angle ?? 0);\n\tblurData[4] = sigmaColorRes.val;\n\tblurData[5] = centerXRes.val;\n\tblurData[6] = centerYRes.val;\n\tblurData[7] = radiusRes.val;\n\tblurData[8] = isPartial ? 1 : 0;\n\tblurData[9] = strengthRes.hasStaticSig ? 1 : 0;\n\tblurData[10] = sigmaColorRes.hasStaticSig ? 1 : 0;\n\tblurData[11] = centerXRes.hasStaticSig ? 1 : 0;\n\tblurData[12] = centerYRes.hasStaticSig ? 1 : 0;\n\tblurData[13] = radiusRes.hasStaticSig ? 1 : 0;\n\tblurData[14] = radiusYRes.val;\n\tblurData[15] = op.shape === \"rect\" ? 1 : 0;\n\tlet outTex2;\n\tif (isSeparable) {\n\t\tconst outTex1 = ctx.renderer.getTemporaryTexture(width, height, [\n\t\t\ttmpTex,\n\t\t\ttargetTexture,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\toutTex2 = ctx.renderer.getTemporaryTexture(width, height, [\n\t\t\ttmpTex,\n\t\t\toutTex1,\n\t\t\ttargetTexture,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tblurData[0] = 1;\n\t\tblurData[1] = 0;\n\t\tblurData[8] = 0;\n\t\tconst hBuffer = ctx.renderer.getTemporaryBuffer(blurData);\n\t\tdrawFullscreenPass(encoder, outTex1.createView(), pipeline, [\n\t\t\tctx.device.createBindGroup({\n\t\t\t\tlayout: uLayout,\n\t\t\t\tentries: [{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: hBuffer }\n\t\t\t\t}]\n\t\t\t}),\n\t\t\tcreateBlurBindGroup1(tmpTex, tmpTex),\n\t\t\tctx.device.createBindGroup({\n\t\t\t\tlayout: sigLayout,\n\t\t\t\tentries: [\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 0,\n\t\t\t\t\t\tresource: strengthView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 1,\n\t\t\t\t\t\tresource: sigmaColorView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 2,\n\t\t\t\t\t\tresource: centerXView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 3,\n\t\t\t\t\t\tresource: centerYView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 4,\n\t\t\t\t\t\tresource: radiusView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 5,\n\t\t\t\t\t\tresource: sampler\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t})\n\t\t]);\n\t\tblurData[0] = 0;\n\t\tblurData[1] = 1;\n\t\tblurData[8] = isPartial ? 1 : 0;\n\t\tconst vBuffer = ctx.renderer.getTemporaryBuffer(blurData);\n\t\tdrawFullscreenPass(encoder, outTex2.createView(), pipeline, [\n\t\t\tctx.device.createBindGroup({\n\t\t\t\tlayout: uLayout,\n\t\t\t\tentries: [{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: vBuffer }\n\t\t\t\t}]\n\t\t\t}),\n\t\t\tcreateBlurBindGroup1(outTex1, tmpTex),\n\t\t\tctx.device.createBindGroup({\n\t\t\t\tlayout: sigLayout,\n\t\t\t\tentries: [\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 0,\n\t\t\t\t\t\tresource: strengthView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 1,\n\t\t\t\t\t\tresource: sigmaColorView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 2,\n\t\t\t\t\t\tresource: centerXView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 3,\n\t\t\t\t\t\tresource: centerYView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 4,\n\t\t\t\t\t\tresource: radiusView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 5,\n\t\t\t\t\t\tresource: sampler\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t})\n\t\t]);\n\t} else {\n\t\toutTex2 = ctx.renderer.getTemporaryTexture(width, height, [\n\t\t\ttmpTex,\n\t\t\ttargetTexture,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tblurData[0] = 0;\n\t\tblurData[1] = 0;\n\t\tblurData[8] = isPartial ? 1 : 0;\n\t\tconst singleBuffer = ctx.renderer.getTemporaryBuffer(blurData);\n\t\tdrawFullscreenPass(encoder, outTex2.createView(), pipeline, [\n\t\t\tctx.device.createBindGroup({\n\t\t\t\tlayout: uLayout,\n\t\t\t\tentries: [{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: singleBuffer }\n\t\t\t\t}]\n\t\t\t}),\n\t\t\tcreateBlurBindGroup1(tmpTex, tmpTex),\n\t\t\tctx.device.createBindGroup({\n\t\t\t\tlayout: sigLayout,\n\t\t\t\tentries: [\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 0,\n\t\t\t\t\t\tresource: strengthView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 1,\n\t\t\t\t\t\tresource: sigmaColorView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 2,\n\t\t\t\t\t\tresource: centerXView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 3,\n\t\t\t\t\t\tresource: centerYView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 4,\n\t\t\t\t\t\tresource: radiusView\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tbinding: 5,\n\t\t\t\t\t\tresource: sampler\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t})\n\t\t]);\n\t}\n\tdrawTextureToTarget(args, outTex2, op.opacity ?? 1);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: BlurWebGPURenderer });\n\n//#endregion\nexport { MAX_BLUR as a, BlurResultSchema as i, BLUR_OUTPUT_TYPE_MAP as n, blurConfig as o, BlurNodeConfigSchema as r, renderers_default as t };\n//# sourceMappingURL=renderers-rcrwEq-B.mjs.map"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { n as defineRenderer } from "./renderer-BgmO1Dzw.mjs";
|
|
2
|
-
import { In as signalRegistry, W as lutStore } from "./dist-
|
|
3
|
-
import { a as createFullscreenPipeline, c as drawTextureToTarget, f as signalTiming, l as fragmentBindGroupLayout, o as drawChildToTexture, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL, u as perDevice } from "./gpu-
|
|
2
|
+
import { In as signalRegistry, W as lutStore } from "./dist-BHTd-EC1.mjs";
|
|
3
|
+
import { a as createFullscreenPipeline, c as drawTextureToTarget, f as signalTiming, l as fragmentBindGroupLayout, o as drawChildToTexture, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL, u as perDevice } from "./gpu-zIhSz_0X.mjs";
|
|
4
4
|
|
|
5
5
|
//#region ../../nodes/node-apply-lut/dist/renderers-BrWmp6fW.mjs
|
|
6
6
|
const LUT_3D_SHADER = `
|
|
@@ -219,4 +219,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: LutWebGPURenderer });
|
|
|
219
219
|
|
|
220
220
|
//#endregion
|
|
221
221
|
export { renderers_default as t };
|
|
222
|
-
//# sourceMappingURL=renderer-
|
|
222
|
+
//# sourceMappingURL=renderer-CLX33fIK.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-DxOJv_G7.mjs","names":[],"sources":["../../../nodes/node-apply-lut/dist/renderers-BrWmp6fW.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice, signalTiming } from \"@framefields/node-sdk/gpu\";\nimport { lutStore, signalRegistry } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst LUT_3D_SHADER = `\nstruct LutUniforms {\n\tintensity : f32,\n\tlutSize : f32,\n\thasSignal : f32,\n\tpad : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : LutUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n@group(2) @binding(0) var lutTex : texture_3d<f32>;\n@group(2) @binding(1) var lutSamp : sampler;\n@group(3) @binding(0) var signalTex : texture_2d<f32>;\n@group(3) @binding(1) var signalSamp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet inputColor = textureSampleLevel(tex, samp, in.uv, 0.0);\n\t\n\t// Coordinate adjustment to sample from texel centers\n\tlet uvw = inputColor.rgb * ((u.lutSize - 1.0) / u.lutSize) + vec3<f32>(0.5 / u.lutSize);\n\tlet mappedColor = textureSampleLevel(lutTex, lutSamp, uvw, 0.0);\n\t\n\tvar activeIntensity = u.intensity;\n\tif (u.hasSignal > 0.5) {\n\t\tactiveIntensity = textureSampleLevel(signalTex, signalSamp, in.uv, 0.0).r;\n\t}\n\t\n\tlet finalRgb = inputColor.rgb + activeIntensity * (mappedColor.rgb - inputColor.rgb);\n\treturn vec4<f32>(finalRgb * inputColor.a, inputColor.a);\n}\n`;\nconst LUT_1D_SHADER = `\nstruct LutUniforms {\n\tintensity : f32,\n\tlutSize : f32,\n\thasSignal : f32,\n\tpad : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : LutUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n@group(2) @binding(0) var lutTex : texture_1d<f32>;\n@group(2) @binding(1) var lutSamp : sampler;\n@group(3) @binding(0) var signalTex : texture_2d<f32>;\n@group(3) @binding(1) var signalSamp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet inputColor = textureSampleLevel(tex, samp, in.uv, 0.0);\n\t\n\tlet rCoord = inputColor.r * ((u.lutSize - 1.0) / u.lutSize) + (0.5 / u.lutSize);\n\tlet gCoord = inputColor.g * ((u.lutSize - 1.0) / u.lutSize) + (0.5 / u.lutSize);\n\tlet bCoord = inputColor.b * ((u.lutSize - 1.0) / u.lutSize) + (0.5 / u.lutSize);\n\t\n\tlet mappedR = textureSampleLevel(lutTex, lutSamp, rCoord, 0.0).r;\n\tlet mappedG = textureSampleLevel(lutTex, lutSamp, gCoord, 0.0).g;\n\tlet mappedB = textureSampleLevel(lutTex, lutSamp, bCoord, 0.0).b;\n\t\n\tvar activeIntensity = u.intensity;\n\tif (u.hasSignal > 0.5) {\n\t\tactiveIntensity = textureSampleLevel(signalTex, signalSamp, in.uv, 0.0).r;\n\t}\n\t\n\tlet finalRgb = inputColor.rgb + activeIntensity * (vec3<f32>(mappedR, mappedG, mappedB) - inputColor.rgb);\n\treturn vec4<f32>(finalRgb * inputColor.a, inputColor.a);\n}\n`;\nconst lutUniformData = new Float32Array(4);\nconst getDeviceLayouts = perDevice((device) => ({\n\tlutUniformLayout: fragmentBindGroupLayout(device, [\"uniform\"]),\n\tsingleTextureLayout: fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]),\n\tlutTextureLayout3D: fragmentBindGroupLayout(device, [{ texture: {\n\t\tviewDimension: \"3d\",\n\t\tsampleType: \"float\"\n\t} }, \"sampler\"]),\n\tlutTextureLayout1D: fragmentBindGroupLayout(device, [{ texture: {\n\t\tviewDimension: \"1d\",\n\t\tsampleType: \"float\"\n\t} }, \"sampler\"]),\n\tsignalTextureLayout: fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]),\n\tpipelineCache: /* @__PURE__ */ new Map()\n}));\nfunction getLutResources(device, format, type) {\n\tconst layouts = getDeviceLayouts(device);\n\tconst cacheKey = `lut_${type}_${format}`;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst shaderCode = type === \"3D\" ? LUT_3D_SHADER : LUT_1D_SHADER;\n\t\tconst lutModule = device.createShaderModule({\n\t\t\tlabel: `lut_${type.toLowerCase()}_${format}.wgsl`,\n\t\t\tcode: shaderCode\n\t\t});\n\t\tconst currentLutLayout = type === \"3D\" ? layouts.lutTextureLayout3D : layouts.lutTextureLayout1D;\n\t\tpipeline = createFullscreenPipeline(device, {\n\t\t\tlabel: `LutPipeline_${type}_${format}`,\n\t\t\tmodule: lutModule,\n\t\t\tlayouts: [\n\t\t\t\tlayouts.lutUniformLayout,\n\t\t\t\tlayouts.singleTextureLayout,\n\t\t\t\tcurrentLutLayout,\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\tlutPipeline: pipeline,\n\t\tlutUniformLayout: layouts.lutUniformLayout,\n\t\tsingleTextureLayout: layouts.singleTextureLayout,\n\t\tlutTextureLayout: type === \"3D\" ? layouts.lutTextureLayout3D : layouts.lutTextureLayout1D,\n\t\tsignalTextureLayout: layouts.signalTextureLayout\n\t};\n}\nconst LutWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst frame = props.frame ?? 0;\n\tconst fps = props.fps || 30;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"ApplyLUT\" || !op) return;\n\tconst childMedia = props.virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tconst lutUrl = op.lutUrl;\n\tif (!lutUrl) return;\n\tpass.end();\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst intensityInput = op.intensityHandleId ? op.inputs?.[op.intensityHandleId] : null;\n\tconst hasSignal = !!(intensityInput?.connectionValid && intensityInput.outputItem?.type === \"Signal\");\n\tconst sd = hasSignal ? intensityInput?.outputItem?.data : null;\n\tlet intensity = 1;\n\tlet hasStaticSignal = false;\n\tif (!hasSignal) if (intensityInput?.connectionValid && intensityInput.outputItem?.type === \"Number\") intensity = Number(intensityInput.outputItem.data ?? 1);\n\telse intensity = Number(op.intensity ?? 1);\n\telse if (sd && typeof sd === \"object\") {\n\t\tintensity = Number(sd.offset ?? 1);\n\t\thasStaticSignal = true;\n\t}\n\tintensity = Math.max(0, Math.min(10, intensity));\n\tlet lut = lutStore.get(lutUrl, ctx.device);\n\tif (!lut) {\n\t\tif ((props.isHeadless ?? (typeof window === \"undefined\" || globalThis.__IS_HEADLESS_RENDERER__)) || props.forceWait) try {\n\t\t\tlut = await lutStore.getOrLoad(lutUrl, ctx.device);\n\t\t} catch (err) {\n\t\t\tif (!(err instanceof DOMException && err.name === \"AbortError\") && !(err && typeof err === \"object\" && \"name\" in err && err.name === \"AbortError\")) console.error(\"[ApplyLUT] Failed to load LUT synchronously:\", err);\n\t\t}\n\t\telse lutStore.getOrLoad(lutUrl, ctx.device).catch((err) => {\n\t\t\tif (err instanceof DOMException && err.name === \"AbortError\" || err && typeof err === \"object\" && \"name\" in err && err.name === \"AbortError\") return;\n\t\t\tconsole.error(\"[ApplyLUT] Failed to load LUT in background:\", err);\n\t\t});\n\t\tif (!lut && lutUrl.startsWith(\"runtime://lut/\")) {\n\t\t\tconst prefix = lutUrl.substring(0, lutUrl.lastIndexOf(\"-\") + 1);\n\t\t\tif (prefix) lut = lutStore.getAnyMatching(prefix, ctx.device);\n\t\t}\n\t}\n\tconst { texture: tmpTex } = await drawChildToTexture(args, childMedia);\n\tif (!lut) {\n\t\tdrawTextureToTarget(args, tmpTex, op.opacity ?? 1);\n\t\treturn;\n\t}\n\tconst { lutPipeline: pipeline, lutUniformLayout: uLayout, singleTextureLayout: tLayout, lutTextureLayout: lLayout, signalTextureLayout: sigLayout } = getLutResources(ctx.device, ctx.renderer.format, lut.type);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst outTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tlet signalView;\n\tif (hasStaticSignal) {\n\t\tconst { elapsedSeconds, durationSeconds } = signalTiming(props, frame, fps);\n\t\tsignalView = signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, sd.nodeId ?? \"lut_intensity_sig\", elapsedSeconds, durationSeconds, sd, width, height, props.renderId, frame, fps);\n\t} else signalView = signalRegistry.getDummy1x1TextureView(ctx.device);\n\tlutUniformData[0] = intensity;\n\tlutUniformData[1] = lut.size;\n\tlutUniformData[2] = hasStaticSignal ? 1 : 0;\n\tlutUniformData[3] = 0;\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(lutUniformData);\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: lLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: lut.texture.createView()\n\t\t\t}, {\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: sampler\n\t\t\t}]\n\t\t}),\n\t\tctx.device.createBindGroup({\n\t\t\tlayout: sigLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: signalView\n\t\t\t}, {\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: sampler\n\t\t\t}]\n\t\t})\n\t]);\n\tdrawTextureToTarget(args, outTex, op.opacity ?? 1);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: LutWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-BrWmp6fW.mjs.map"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"renderer-CLX33fIK.mjs","names":[],"sources":["../../../nodes/node-apply-lut/dist/renderers-BrWmp6fW.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice, signalTiming } from \"@framefields/node-sdk/gpu\";\nimport { lutStore, signalRegistry } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst LUT_3D_SHADER = `\nstruct LutUniforms {\n\tintensity : f32,\n\tlutSize : f32,\n\thasSignal : f32,\n\tpad : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : LutUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n@group(2) @binding(0) var lutTex : texture_3d<f32>;\n@group(2) @binding(1) var lutSamp : sampler;\n@group(3) @binding(0) var signalTex : texture_2d<f32>;\n@group(3) @binding(1) var signalSamp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet inputColor = textureSampleLevel(tex, samp, in.uv, 0.0);\n\t\n\t// Coordinate adjustment to sample from texel centers\n\tlet uvw = inputColor.rgb * ((u.lutSize - 1.0) / u.lutSize) + vec3<f32>(0.5 / u.lutSize);\n\tlet mappedColor = textureSampleLevel(lutTex, lutSamp, uvw, 0.0);\n\t\n\tvar activeIntensity = u.intensity;\n\tif (u.hasSignal > 0.5) {\n\t\tactiveIntensity = textureSampleLevel(signalTex, signalSamp, in.uv, 0.0).r;\n\t}\n\t\n\tlet finalRgb = inputColor.rgb + activeIntensity * (mappedColor.rgb - inputColor.rgb);\n\treturn vec4<f32>(finalRgb * inputColor.a, inputColor.a);\n}\n`;\nconst LUT_1D_SHADER = `\nstruct LutUniforms {\n\tintensity : f32,\n\tlutSize : f32,\n\thasSignal : f32,\n\tpad : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : LutUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n@group(2) @binding(0) var lutTex : texture_1d<f32>;\n@group(2) @binding(1) var lutSamp : sampler;\n@group(3) @binding(0) var signalTex : texture_2d<f32>;\n@group(3) @binding(1) var signalSamp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet inputColor = textureSampleLevel(tex, samp, in.uv, 0.0);\n\t\n\tlet rCoord = inputColor.r * ((u.lutSize - 1.0) / u.lutSize) + (0.5 / u.lutSize);\n\tlet gCoord = inputColor.g * ((u.lutSize - 1.0) / u.lutSize) + (0.5 / u.lutSize);\n\tlet bCoord = inputColor.b * ((u.lutSize - 1.0) / u.lutSize) + (0.5 / u.lutSize);\n\t\n\tlet mappedR = textureSampleLevel(lutTex, lutSamp, rCoord, 0.0).r;\n\tlet mappedG = textureSampleLevel(lutTex, lutSamp, gCoord, 0.0).g;\n\tlet mappedB = textureSampleLevel(lutTex, lutSamp, bCoord, 0.0).b;\n\t\n\tvar activeIntensity = u.intensity;\n\tif (u.hasSignal > 0.5) {\n\t\tactiveIntensity = textureSampleLevel(signalTex, signalSamp, in.uv, 0.0).r;\n\t}\n\t\n\tlet finalRgb = inputColor.rgb + activeIntensity * (vec3<f32>(mappedR, mappedG, mappedB) - inputColor.rgb);\n\treturn vec4<f32>(finalRgb * inputColor.a, inputColor.a);\n}\n`;\nconst lutUniformData = new Float32Array(4);\nconst getDeviceLayouts = perDevice((device) => ({\n\tlutUniformLayout: fragmentBindGroupLayout(device, [\"uniform\"]),\n\tsingleTextureLayout: fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]),\n\tlutTextureLayout3D: fragmentBindGroupLayout(device, [{ texture: {\n\t\tviewDimension: \"3d\",\n\t\tsampleType: \"float\"\n\t} }, \"sampler\"]),\n\tlutTextureLayout1D: fragmentBindGroupLayout(device, [{ texture: {\n\t\tviewDimension: \"1d\",\n\t\tsampleType: \"float\"\n\t} }, \"sampler\"]),\n\tsignalTextureLayout: fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]),\n\tpipelineCache: /* @__PURE__ */ new Map()\n}));\nfunction getLutResources(device, format, type) {\n\tconst layouts = getDeviceLayouts(device);\n\tconst cacheKey = `lut_${type}_${format}`;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst shaderCode = type === \"3D\" ? LUT_3D_SHADER : LUT_1D_SHADER;\n\t\tconst lutModule = device.createShaderModule({\n\t\t\tlabel: `lut_${type.toLowerCase()}_${format}.wgsl`,\n\t\t\tcode: shaderCode\n\t\t});\n\t\tconst currentLutLayout = type === \"3D\" ? layouts.lutTextureLayout3D : layouts.lutTextureLayout1D;\n\t\tpipeline = createFullscreenPipeline(device, {\n\t\t\tlabel: `LutPipeline_${type}_${format}`,\n\t\t\tmodule: lutModule,\n\t\t\tlayouts: [\n\t\t\t\tlayouts.lutUniformLayout,\n\t\t\t\tlayouts.singleTextureLayout,\n\t\t\t\tcurrentLutLayout,\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\tlutPipeline: pipeline,\n\t\tlutUniformLayout: layouts.lutUniformLayout,\n\t\tsingleTextureLayout: layouts.singleTextureLayout,\n\t\tlutTextureLayout: type === \"3D\" ? layouts.lutTextureLayout3D : layouts.lutTextureLayout1D,\n\t\tsignalTextureLayout: layouts.signalTextureLayout\n\t};\n}\nconst LutWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst frame = props.frame ?? 0;\n\tconst fps = props.fps || 30;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"ApplyLUT\" || !op) return;\n\tconst childMedia = props.virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tconst lutUrl = op.lutUrl;\n\tif (!lutUrl) return;\n\tpass.end();\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst intensityInput = op.intensityHandleId ? op.inputs?.[op.intensityHandleId] : null;\n\tconst hasSignal = !!(intensityInput?.connectionValid && intensityInput.outputItem?.type === \"Signal\");\n\tconst sd = hasSignal ? intensityInput?.outputItem?.data : null;\n\tlet intensity = 1;\n\tlet hasStaticSignal = false;\n\tif (!hasSignal) if (intensityInput?.connectionValid && intensityInput.outputItem?.type === \"Number\") intensity = Number(intensityInput.outputItem.data ?? 1);\n\telse intensity = Number(op.intensity ?? 1);\n\telse if (sd && typeof sd === \"object\") {\n\t\tintensity = Number(sd.offset ?? 1);\n\t\thasStaticSignal = true;\n\t}\n\tintensity = Math.max(0, Math.min(10, intensity));\n\tlet lut = lutStore.get(lutUrl, ctx.device);\n\tif (!lut) {\n\t\tif ((props.isHeadless ?? (typeof window === \"undefined\" || globalThis.__IS_HEADLESS_RENDERER__)) || props.forceWait) try {\n\t\t\tlut = await lutStore.getOrLoad(lutUrl, ctx.device);\n\t\t} catch (err) {\n\t\t\tif (!(err instanceof DOMException && err.name === \"AbortError\") && !(err && typeof err === \"object\" && \"name\" in err && err.name === \"AbortError\")) console.error(\"[ApplyLUT] Failed to load LUT synchronously:\", err);\n\t\t}\n\t\telse lutStore.getOrLoad(lutUrl, ctx.device).catch((err) => {\n\t\t\tif (err instanceof DOMException && err.name === \"AbortError\" || err && typeof err === \"object\" && \"name\" in err && err.name === \"AbortError\") return;\n\t\t\tconsole.error(\"[ApplyLUT] Failed to load LUT in background:\", err);\n\t\t});\n\t\tif (!lut && lutUrl.startsWith(\"runtime://lut/\")) {\n\t\t\tconst prefix = lutUrl.substring(0, lutUrl.lastIndexOf(\"-\") + 1);\n\t\t\tif (prefix) lut = lutStore.getAnyMatching(prefix, ctx.device);\n\t\t}\n\t}\n\tconst { texture: tmpTex } = await drawChildToTexture(args, childMedia);\n\tif (!lut) {\n\t\tdrawTextureToTarget(args, tmpTex, op.opacity ?? 1);\n\t\treturn;\n\t}\n\tconst { lutPipeline: pipeline, lutUniformLayout: uLayout, singleTextureLayout: tLayout, lutTextureLayout: lLayout, signalTextureLayout: sigLayout } = getLutResources(ctx.device, ctx.renderer.format, lut.type);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst outTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tlet signalView;\n\tif (hasStaticSignal) {\n\t\tconst { elapsedSeconds, durationSeconds } = signalTiming(props, frame, fps);\n\t\tsignalView = signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, sd.nodeId ?? \"lut_intensity_sig\", elapsedSeconds, durationSeconds, sd, width, height, props.renderId, frame, fps);\n\t} else signalView = signalRegistry.getDummy1x1TextureView(ctx.device);\n\tlutUniformData[0] = intensity;\n\tlutUniformData[1] = lut.size;\n\tlutUniformData[2] = hasStaticSignal ? 1 : 0;\n\tlutUniformData[3] = 0;\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(lutUniformData);\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: lLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: lut.texture.createView()\n\t\t\t}, {\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: sampler\n\t\t\t}]\n\t\t}),\n\t\tctx.device.createBindGroup({\n\t\t\tlayout: sigLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: signalView\n\t\t\t}, {\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: sampler\n\t\t\t}]\n\t\t})\n\t]);\n\tdrawTextureToTarget(args, outTex, op.opacity ?? 1);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: LutWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-BrWmp6fW.mjs.map"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { n as defineRenderer, u as unwrapFrameParam } from "./renderer-BgmO1Dzw.mjs";
|
|
2
|
-
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 { 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-zIhSz_0X.mjs";
|
|
3
3
|
|
|
4
4
|
//#region ../../nodes/node-tile-offset/dist/renderers-DQJJPfSd.mjs
|
|
5
5
|
const TILE_OFFSET_SHADER = `
|
|
@@ -206,4 +206,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: TileOffsetWebGPURendere
|
|
|
206
206
|
|
|
207
207
|
//#endregion
|
|
208
208
|
export { renderers_default as t };
|
|
209
|
-
//# sourceMappingURL=renderer-
|
|
209
|
+
//# sourceMappingURL=renderer-CLXpWDqx.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-BcaT2j3R.mjs","names":[],"sources":["../../../nodes/node-tile-offset/dist/renderers-DQJJPfSd.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\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst TILE_OFFSET_SHADER = `\nstruct TileOffsetUniforms {\n offsetX : f32,\n offsetY : f32,\n hasOffsetXSig : f32,\n hasOffsetYSig : f32,\n\n layerWidth : f32,\n layerHeight : f32,\n edgeMode : f32,\n pad : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : TileOffsetUniforms;\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 offsetXSigTex : texture_2d<f32>;\n@group(2) @binding(1) var offsetYSigTex : texture_2d<f32>;\n@group(2) @binding(2) var signalSamp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n var offX = u.offsetX;\n if (u.hasOffsetXSig > 0.5) {\n let sigX = textureSampleLevel(offsetXSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n offX = offX + sigX;\n }\n\n var offY = u.offsetY;\n if (u.hasOffsetYSig > 0.5) {\n let sigY = textureSampleLevel(offsetYSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n offY = offY + sigY;\n }\n\n let normOffset = vec2<f32>(\n offX / max(1.0, u.layerWidth),\n offY / max(1.0, u.layerHeight)\n );\n var uv = in.uv - normOffset;\n\n // Edge Modes:\n // 0.0 = wrap (seamless modulo)\n // 1.0 = clamp (edge smear)\n // 2.0 = transparent (clear bounds)\n // 3.0 = mirror (ping-pong reflection)\n if (u.edgeMode < 0.5) {\n uv = fract(uv);\n } else if (u.edgeMode < 1.5) {\n uv = clamp(uv, vec2<f32>(0.0), vec2<f32>(1.0));\n } else if (u.edgeMode < 2.5) {\n if (uv.x < 0.0 || uv.x > 1.0 || uv.y < 0.0 || uv.y > 1.0) {\n return vec4<f32>(0.0);\n }\n } else {\n uv = 1.0 - abs(fract(uv * 0.5) * 2.0 - 1.0);\n }\n\n let color = textureSampleLevel(tex, samp, uv, 0.0);\n return color;\n}\n`;\nconst uniformData = new Float32Array(8);\nconst getDeviceLayouts = perDevice((device) => ({\n\tuniformLayout: fragmentBindGroupLayout(device, [\"uniform\"]),\n\tsingleTextureLayout: fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]),\n\tsignalTextureLayout: texturesLayout(device, 2),\n\tpipelineCache: /* @__PURE__ */ new Map()\n}));\nfunction getTileOffsetResources(device, format) {\n\tconst layouts = getDeviceLayouts(device);\n\tconst cacheKey = `tile_offset_${format}`;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst module = device.createShaderModule({\n\t\t\tlabel: `tile_offset_${format}.wgsl`,\n\t\t\tcode: TILE_OFFSET_SHADER\n\t\t});\n\t\tpipeline = createFullscreenPipeline(device, {\n\t\t\tlabel: `TileOffsetPipeline_${format}`,\n\t\t\tmodule,\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\tpipeline,\n\t\tuniformLayout: layouts.uniformLayout,\n\t\tsingleTextureLayout: layouts.singleTextureLayout,\n\t\tsignalTextureLayout: layouts.signalTextureLayout\n\t};\n}\nconst TileOffsetWebGPURenderer = 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 !== \"TileOffset\" || !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] : \"tile_offset_node\";\n\tconst resolveBindable = (configKey, defaultValue) => {\n\t\tconst handleId = op[`${configKey}HandleId`];\n\t\tconst input = handleId ? op.inputs?.[handleId] : null;\n\t\tconst hasSignal = !!(input?.connectionValid && (input.outputItem?.type === \"Signal\" || input.outputItem?.type === \"Numeric\"));\n\t\tconst sd = hasSignal && input?.outputItem?.data ? input.outputItem.data : null;\n\t\tlet val = defaultValue;\n\t\tlet hasStaticSig = false;\n\t\tif (!hasSignal) if (input?.connectionValid && input.outputItem?.type === \"Number\") val = Number(input.outputItem.data ?? defaultValue);\n\t\telse {\n\t\t\tconst rawVal = unwrapFrameParam(op[configKey], compositionFrame, fps).value;\n\t\t\tconst numVal = Number(rawVal ?? defaultValue);\n\t\t\tval = isNaN(numVal) ? defaultValue : numVal;\n\t\t}\n\t\telse if (sd) {\n\t\t\tval = 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 offsetXRes = resolveBindable(\"offsetX\", 0);\n\tconst offsetYRes = resolveBindable(\"offsetY\", 0);\n\tlet edgeModeIndex = 0;\n\tconst edgeMode = op.edgeMode ?? (op.wrap !== false ? \"wrap\" : \"transparent\");\n\tif (edgeMode === \"clamp\") edgeModeIndex = 1;\n\telse if (edgeMode === \"transparent\" || op.wrap === false) edgeModeIndex = 2;\n\telse if (edgeMode === \"mirror\") edgeModeIndex = 3;\n\tconst { texture: tmpTex } = await drawChildToTexture(args, childMedia);\n\targs.pass.end();\n\tconst { pipeline, uniformLayout: uLayout, singleTextureLayout: tLayout, signalTextureLayout: sigLayout } = getTileOffsetResources(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 offsetXView = getSignalView(offsetXRes, \"offsetX_sig\");\n\tconst offsetYView = getSignalView(offsetYRes, \"offsetY_sig\");\n\tuniformData[0] = offsetXRes.val;\n\tuniformData[1] = offsetYRes.val;\n\tuniformData[2] = offsetXRes.hasStaticSig ? 1 : 0;\n\tuniformData[3] = offsetYRes.hasStaticSig ? 1 : 0;\n\tuniformData[4] = width;\n\tuniformData[5] = height;\n\tuniformData[6] = edgeModeIndex;\n\tuniformData[7] = 0;\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(uniformData);\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: offsetXView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: offsetYView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: sampler\n\t\t\t\t}\n\t\t\t]\n\t\t})\n\t]);\n\tdrawTextureToTarget(args, outTex, op.opacity ?? 1);\n};\nconst WebGPURenderer = TileOffsetWebGPURenderer;\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-DQJJPfSd.mjs.map"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"renderer-CLXpWDqx.mjs","names":[],"sources":["../../../nodes/node-tile-offset/dist/renderers-DQJJPfSd.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\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst TILE_OFFSET_SHADER = `\nstruct TileOffsetUniforms {\n offsetX : f32,\n offsetY : f32,\n hasOffsetXSig : f32,\n hasOffsetYSig : f32,\n\n layerWidth : f32,\n layerHeight : f32,\n edgeMode : f32,\n pad : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : TileOffsetUniforms;\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 offsetXSigTex : texture_2d<f32>;\n@group(2) @binding(1) var offsetYSigTex : texture_2d<f32>;\n@group(2) @binding(2) var signalSamp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n var offX = u.offsetX;\n if (u.hasOffsetXSig > 0.5) {\n let sigX = textureSampleLevel(offsetXSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n offX = offX + sigX;\n }\n\n var offY = u.offsetY;\n if (u.hasOffsetYSig > 0.5) {\n let sigY = textureSampleLevel(offsetYSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n offY = offY + sigY;\n }\n\n let normOffset = vec2<f32>(\n offX / max(1.0, u.layerWidth),\n offY / max(1.0, u.layerHeight)\n );\n var uv = in.uv - normOffset;\n\n // Edge Modes:\n // 0.0 = wrap (seamless modulo)\n // 1.0 = clamp (edge smear)\n // 2.0 = transparent (clear bounds)\n // 3.0 = mirror (ping-pong reflection)\n if (u.edgeMode < 0.5) {\n uv = fract(uv);\n } else if (u.edgeMode < 1.5) {\n uv = clamp(uv, vec2<f32>(0.0), vec2<f32>(1.0));\n } else if (u.edgeMode < 2.5) {\n if (uv.x < 0.0 || uv.x > 1.0 || uv.y < 0.0 || uv.y > 1.0) {\n return vec4<f32>(0.0);\n }\n } else {\n uv = 1.0 - abs(fract(uv * 0.5) * 2.0 - 1.0);\n }\n\n let color = textureSampleLevel(tex, samp, uv, 0.0);\n return color;\n}\n`;\nconst uniformData = new Float32Array(8);\nconst getDeviceLayouts = perDevice((device) => ({\n\tuniformLayout: fragmentBindGroupLayout(device, [\"uniform\"]),\n\tsingleTextureLayout: fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]),\n\tsignalTextureLayout: texturesLayout(device, 2),\n\tpipelineCache: /* @__PURE__ */ new Map()\n}));\nfunction getTileOffsetResources(device, format) {\n\tconst layouts = getDeviceLayouts(device);\n\tconst cacheKey = `tile_offset_${format}`;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst module = device.createShaderModule({\n\t\t\tlabel: `tile_offset_${format}.wgsl`,\n\t\t\tcode: TILE_OFFSET_SHADER\n\t\t});\n\t\tpipeline = createFullscreenPipeline(device, {\n\t\t\tlabel: `TileOffsetPipeline_${format}`,\n\t\t\tmodule,\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\tpipeline,\n\t\tuniformLayout: layouts.uniformLayout,\n\t\tsingleTextureLayout: layouts.singleTextureLayout,\n\t\tsignalTextureLayout: layouts.signalTextureLayout\n\t};\n}\nconst TileOffsetWebGPURenderer = 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 !== \"TileOffset\" || !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] : \"tile_offset_node\";\n\tconst resolveBindable = (configKey, defaultValue) => {\n\t\tconst handleId = op[`${configKey}HandleId`];\n\t\tconst input = handleId ? op.inputs?.[handleId] : null;\n\t\tconst hasSignal = !!(input?.connectionValid && (input.outputItem?.type === \"Signal\" || input.outputItem?.type === \"Numeric\"));\n\t\tconst sd = hasSignal && input?.outputItem?.data ? input.outputItem.data : null;\n\t\tlet val = defaultValue;\n\t\tlet hasStaticSig = false;\n\t\tif (!hasSignal) if (input?.connectionValid && input.outputItem?.type === \"Number\") val = Number(input.outputItem.data ?? defaultValue);\n\t\telse {\n\t\t\tconst rawVal = unwrapFrameParam(op[configKey], compositionFrame, fps).value;\n\t\t\tconst numVal = Number(rawVal ?? defaultValue);\n\t\t\tval = isNaN(numVal) ? defaultValue : numVal;\n\t\t}\n\t\telse if (sd) {\n\t\t\tval = 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 offsetXRes = resolveBindable(\"offsetX\", 0);\n\tconst offsetYRes = resolveBindable(\"offsetY\", 0);\n\tlet edgeModeIndex = 0;\n\tconst edgeMode = op.edgeMode ?? (op.wrap !== false ? \"wrap\" : \"transparent\");\n\tif (edgeMode === \"clamp\") edgeModeIndex = 1;\n\telse if (edgeMode === \"transparent\" || op.wrap === false) edgeModeIndex = 2;\n\telse if (edgeMode === \"mirror\") edgeModeIndex = 3;\n\tconst { texture: tmpTex } = await drawChildToTexture(args, childMedia);\n\targs.pass.end();\n\tconst { pipeline, uniformLayout: uLayout, singleTextureLayout: tLayout, signalTextureLayout: sigLayout } = getTileOffsetResources(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 offsetXView = getSignalView(offsetXRes, \"offsetX_sig\");\n\tconst offsetYView = getSignalView(offsetYRes, \"offsetY_sig\");\n\tuniformData[0] = offsetXRes.val;\n\tuniformData[1] = offsetYRes.val;\n\tuniformData[2] = offsetXRes.hasStaticSig ? 1 : 0;\n\tuniformData[3] = offsetYRes.hasStaticSig ? 1 : 0;\n\tuniformData[4] = width;\n\tuniformData[5] = height;\n\tuniformData[6] = edgeModeIndex;\n\tuniformData[7] = 0;\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(uniformData);\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: offsetXView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: offsetYView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: sampler\n\t\t\t\t}\n\t\t\t]\n\t\t})\n\t]);\n\tdrawTextureToTarget(args, outTex, op.opacity ?? 1);\n};\nconst WebGPURenderer = TileOffsetWebGPURenderer;\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-DQJJPfSd.mjs.map"],"mappings":";;;;AAKA,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;EAoBzB,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0CvB,MAAM,cAAc,IAAI,aAAa,EAAE;AACvC,MAAM,mBAAmB,WAAW,YAAY;CAC/C,eAAe,wBAAwB,QAAQ,CAAC,UAAU,CAAC;CAC3D,qBAAqB,wBAAwB,QAAQ,CAAC,WAAW,UAAU,CAAC;CAC5E,qBAAqB,eAAe,QAAQ,EAAE;CAC9C,+BAA+B,IAAI,KAAK;CACxC,EAAE;AACH,SAAS,uBAAuB,QAAQ,QAAQ;CAC/C,MAAM,UAAU,iBAAiB,OAAO;CACxC,MAAM,WAAW,eAAe;CAChC,IAAI,WAAW,QAAQ,cAAc,IAAI,SAAS;AAClD,KAAI,CAAC,UAAU;EACd,MAAM,SAAS,OAAO,mBAAmB;GACxC,OAAO,eAAe,OAAO;GAC7B,MAAM;GACN,CAAC;AACF,aAAW,yBAAyB,QAAQ;GAC3C,OAAO,sBAAsB;GAC7B;GACA,SAAS;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR;GACD;GACA,CAAC;AACF,UAAQ,cAAc,IAAI,UAAU,SAAS;;AAE9C,QAAO;EACN;EACA,eAAe,QAAQ;EACvB,qBAAqB,QAAQ;EAC7B,qBAAqB,QAAQ;EAC7B;;AAEF,MAAM,2BAA2B,OAAO,SAAS;CAChD,MAAM,EAAE,KAAK,SAAS,MAAM,eAAe,aAAa,cAAc,UAAU;CAChF,MAAM,QAAQ,MAAM,SAAS;CAC7B,MAAM,mBAAmB,MAAM,oBAAoB;CACnD,MAAM,MAAM,MAAM,OAAO;CACzB,MAAM,KAAK,MAAM,cAAc;AAC/B,KAAI,IAAI,OAAO,gBAAgB,CAAC,GAAI;CACpC,MAAM,aAAa,MAAM,cAAc,WAAW;AAClD,KAAI,CAAC,WAAY;AACjB,MAAK,KAAK;CACV,MAAM,QAAQ;CACd,MAAM,SAAS;CACf,MAAM,SAAS,GAAG,SAAS,OAAO,KAAK,GAAG,OAAO,CAAC,KAAK;CACvD,MAAM,mBAAmB,WAAW,iBAAiB;EACpD,MAAM,WAAW,GAAG,GAAG,UAAU;EACjC,MAAM,QAAQ,WAAW,GAAG,SAAS,YAAY;EACjD,MAAM,YAAY,CAAC,EAAE,OAAO,oBAAoB,MAAM,YAAY,SAAS,YAAY,MAAM,YAAY,SAAS;EAClH,MAAM,KAAK,aAAa,OAAO,YAAY,OAAO,MAAM,WAAW,OAAO;EAC1E,IAAI,MAAM;EACV,IAAI,eAAe;AACnB,MAAI,CAAC,UAAW,KAAI,OAAO,mBAAmB,MAAM,YAAY,SAAS,SAAU,OAAM,OAAO,MAAM,WAAW,QAAQ,aAAa;OACjI;GACJ,MAAM,SAAS,iBAAiB,GAAG,YAAY,kBAAkB,IAAI,CAAC;GACtE,MAAM,SAAS,OAAO,UAAU,aAAa;AAC7C,SAAM,MAAM,OAAO,GAAG,eAAe;;WAE7B,IAAI;AACZ,SAAM,OAAO,GAAG,UAAU,EAAE;AAC5B,kBAAe;;AAEhB,SAAO;GACN;GACA;GACA;GACA;;CAEF,MAAM,aAAa,gBAAgB,WAAW,EAAE;CAChD,MAAM,aAAa,gBAAgB,WAAW,EAAE;CAChD,IAAI,gBAAgB;CACpB,MAAM,WAAW,GAAG,aAAa,GAAG,SAAS,QAAQ,SAAS;AAC9D,KAAI,aAAa,QAAS,iBAAgB;UACjC,aAAa,iBAAiB,GAAG,SAAS,MAAO,iBAAgB;UACjE,aAAa,SAAU,iBAAgB;CAChD,MAAM,EAAE,SAAS,WAAW,MAAM,mBAAmB,MAAM,WAAW;AACtE,MAAK,KAAK,KAAK;CACf,MAAM,EAAE,UAAU,eAAe,SAAS,qBAAqB,SAAS,qBAAqB,cAAc,uBAAuB,IAAI,QAAQ,IAAI,SAAS,OAAO;CAClK,MAAM,UAAU,IAAI,SAAS,aAAa,WAAW,IAAI,OAAO;CAChE,MAAM,EAAE,gBAAgB,oBAAoB,aAAa,OAAO,OAAO,IAAI;CAC3E,MAAM,gBAAgB;EACrB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACD,MAAM,iBAAiB,KAAK,WAAW,kBAAkB,eAAe,KAAK,GAAG,OAAO,GAAG,SAAS;CACnG,MAAM,cAAc,cAAc,YAAY,cAAc;CAC5D,MAAM,cAAc,cAAc,YAAY,cAAc;AAC5D,aAAY,KAAK,WAAW;AAC5B,aAAY,KAAK,WAAW;AAC5B,aAAY,KAAK,WAAW,eAAe,IAAI;AAC/C,aAAY,KAAK,WAAW,eAAe,IAAI;AAC/C,aAAY,KAAK;AACjB,aAAY,KAAK;AACjB,aAAY,KAAK;AACjB,aAAY,KAAK;CACjB,MAAM,gBAAgB,IAAI,SAAS,mBAAmB,YAAY;CAClE,MAAM,SAAS,IAAI,SAAS,oBAAoB,OAAO,QAAQ;EAC9D;EACA;EACA,GAAG,MAAM,mBAAmB,EAAE;EAC9B,CAAC;AACF,oBAAmB,SAAS,OAAO,YAAY,EAAE,UAAU;EAC1D,IAAI,OAAO,gBAAgB;GAC1B,QAAQ;GACR,SAAS,CAAC;IACT,SAAS;IACT,UAAU,EAAE,QAAQ,eAAe;IACnC,CAAC;GACF,CAAC;EACF,IAAI,SAAS,eAAe,aAAa,IAAI,QAAQ,SAAS,QAAQ,QAAQ;EAC9E,IAAI,OAAO,gBAAgB;GAC1B,QAAQ;GACR,SAAS;IACR;KACC,SAAS;KACT,UAAU;KACV;IACD;KACC,SAAS;KACT,UAAU;KACV;IACD;KACC,SAAS;KACT,UAAU;KACV;IACD;GACD,CAAC;EACF,CAAC;AACF,qBAAoB,MAAM,QAAQ,GAAG,WAAW,EAAE;;AAMnD,IAAI,oBAAoB,eAAe,EAAE,gBAJlB,0BAIkC,CAAC"}
|