framefields 2.5.3 → 2.6.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/README.md +11 -0
- package/dist/audio/index.d.mts +4 -4
- package/dist/audio/index.mjs +10 -10
- package/dist/{audio-2ew5y0Bl.d.mts → audio-B5mdR8vv.d.mts} +3 -3
- package/dist/{audio-2ew5y0Bl.d.mts.map → audio-B5mdR8vv.d.mts.map} +1 -1
- package/dist/{audio-DrUskzwZ.mjs → audio-QBA2VogL.mjs} +3 -3
- package/dist/{audio-DrUskzwZ.mjs.map → audio-QBA2VogL.mjs.map} +1 -1
- package/dist/cli.mjs +866 -16
- package/dist/cli.mjs.map +1 -1
- package/dist/components/index.d.mts +11 -11
- package/dist/components/index.mjs +45 -45
- package/dist/dist-BPOi5xb_.mjs.map +1 -1
- package/dist/{dist-Bf0H4lp1.mjs → dist-CDwWQYg3.mjs} +12 -4
- package/dist/dist-CDwWQYg3.mjs.map +1 -0
- package/dist/{dist-DG65RDhc.mjs → dist-nHCqVk-e.mjs} +6 -7
- package/dist/dist-nHCqVk-e.mjs.map +1 -0
- package/dist/effects/index.d.mts +4 -4
- package/dist/effects/index.mjs +35 -35
- package/dist/{effects-Z-brb-n7.mjs → effects-C-6I4iYW.mjs} +2 -2
- package/dist/{effects-Z-brb-n7.mjs.map → effects-C-6I4iYW.mjs.map} +1 -1
- package/dist/fonts/index.d.mts +1 -1
- package/dist/fonts/index.mjs +2 -2
- package/dist/{fonts-DqYgk_1a.mjs → fonts-BieW3VWV.mjs} +7 -3
- package/dist/fonts-BieW3VWV.mjs.map +1 -0
- package/dist/{gpu-CevnCkZC.mjs → gpu-Bb4WmYYH.mjs} +2 -2
- package/dist/{gpu-CevnCkZC.mjs.map → gpu-Bb4WmYYH.mjs.map} +1 -1
- package/dist/{index-D1C735Wp.d.mts → index-3Vdef2KE.d.mts} +3 -3
- package/dist/{index-D1C735Wp.d.mts.map → index-3Vdef2KE.d.mts.map} +1 -1
- package/dist/{index-COQTaniR.d.mts → index-B4o6F1JC.d.mts} +2 -2
- package/dist/{index-COQTaniR.d.mts.map → index-B4o6F1JC.d.mts.map} +1 -1
- package/dist/{index-KqW22NHL.d.mts → index-BhzlG_1Q.d.mts} +2 -2
- package/dist/{index-KqW22NHL.d.mts.map → index-BhzlG_1Q.d.mts.map} +1 -1
- package/dist/{index-DSGFMpwL.d.mts → index-D-Gnyffj.d.mts} +4 -4
- package/dist/{index-DSGFMpwL.d.mts.map → index-D-Gnyffj.d.mts.map} +1 -1
- package/dist/{index-tCKz9Tku.d.mts → index-E1IrPAm4.d.mts} +825 -399
- package/dist/index-E1IrPAm4.d.mts.map +1 -0
- package/dist/{index-CalU-mpZ.d.mts → index-j5LGVVbm.d.mts} +3 -1
- package/dist/index-j5LGVVbm.d.mts.map +1 -0
- package/dist/{index-CfMylY3O.d.mts → index-o8LxWdwz.d.mts} +3 -3
- package/dist/{index-CfMylY3O.d.mts.map → index-o8LxWdwz.d.mts.map} +1 -1
- package/dist/{index-CZK6CFLy.d.mts → index-ocZc12ZS.d.mts} +17 -17
- package/dist/index-ocZc12ZS.d.mts.map +1 -0
- package/dist/index.d.mts +12 -12
- package/dist/index.mjs +52 -52
- package/dist/preview/index.d.mts +3 -3
- package/dist/preview/index.mjs +10 -10
- package/dist/{preview-DVw2jLDh.mjs → preview-D6jS38Di.mjs} +2 -2
- package/dist/{preview-DVw2jLDh.mjs.map → preview-D6jS38Di.mjs.map} +1 -1
- package/dist/preview-engine/audio.mjs +1 -1
- package/dist/preview-engine/{chunk-MCFYUKAJ.mjs → chunk-2LQCQ3OT.mjs} +8 -8
- package/dist/preview-engine/{chunk-JMOJKT5W.mjs → chunk-2YGR5YCN.mjs} +1 -1
- package/dist/preview-engine/{chunk-LNJYHSYX.mjs → chunk-3KHD67Q3.mjs} +1 -1
- package/dist/preview-engine/chunk-3SR6BI4B.mjs +1 -0
- package/dist/preview-engine/{chunk-NXKXOSE6.mjs → chunk-4INGTMZ5.mjs} +1 -1
- package/dist/preview-engine/{chunk-T4VP45AP.mjs → chunk-4JX5LBE2.mjs} +1 -1
- package/dist/preview-engine/{chunk-7JYMNGNK.mjs → chunk-5NT7WWJR.mjs} +1 -1
- package/dist/preview-engine/{chunk-NB55FW7D.mjs → chunk-6PMATELR.mjs} +1 -1
- package/dist/preview-engine/{chunk-45XGWIOY.mjs → chunk-AKT4YQWL.mjs} +1 -1
- package/dist/preview-engine/{chunk-RNFYEZLL.mjs → chunk-ALSOO22Q.mjs} +1 -1
- package/dist/preview-engine/{chunk-5FTCPTOX.mjs → chunk-AYTP6OGO.mjs} +8 -8
- package/dist/preview-engine/{chunk-3AYICEZ5.mjs → chunk-B7J72YSP.mjs} +1 -1
- package/dist/preview-engine/{chunk-I3ZTDIVM.mjs → chunk-BBHRXV75.mjs} +1 -1
- package/dist/preview-engine/{chunk-NHQR76WL.mjs → chunk-DDFWN7DI.mjs} +1 -1
- package/dist/preview-engine/{chunk-ZVUTFXDR.mjs → chunk-DOCFOSA6.mjs} +1 -1
- package/dist/preview-engine/{chunk-YJ24W73B.mjs → chunk-FZLKPBKS.mjs} +1 -1
- package/dist/preview-engine/{chunk-EU7CFSB5.mjs → chunk-GQIRV466.mjs} +1 -1
- package/dist/preview-engine/{chunk-DWHQSNSJ.mjs → chunk-IIOHF7MH.mjs} +1 -1
- package/dist/preview-engine/{chunk-WUMVCQYI.mjs → chunk-J24VHZS6.mjs} +1 -1
- package/dist/preview-engine/{chunk-2WOCQNZX.mjs → chunk-JD4TBC6Z.mjs} +8 -8
- package/dist/preview-engine/{chunk-X6BJLPW6.mjs → chunk-JTT3YX7W.mjs} +1 -1
- package/dist/preview-engine/{chunk-XJ4CQIZZ.mjs → chunk-KWTTANYN.mjs} +1 -1
- package/dist/preview-engine/{chunk-QCUGWPYP.mjs → chunk-LN3YAWUD.mjs} +1 -1
- package/dist/preview-engine/{chunk-M6ZKK6ZU.mjs → chunk-LYSU6S4O.mjs} +1 -1
- package/dist/preview-engine/{chunk-TE2QAKKF.mjs → chunk-MJCK5FLZ.mjs} +1 -1
- package/dist/preview-engine/chunk-MLAIEIUF.mjs +1974 -0
- package/dist/preview-engine/{chunk-24H3QVYB.mjs → chunk-MMVFX42U.mjs} +1 -1
- package/dist/preview-engine/{chunk-25T3M6MI.mjs → chunk-MUOJMF7M.mjs} +1 -1
- package/dist/preview-engine/{chunk-B555EGEU.mjs → chunk-NQZRPPUU.mjs} +1 -1
- package/dist/preview-engine/{chunk-VTE3IISK.mjs → chunk-OXXRKNHW.mjs} +1 -1
- package/dist/preview-engine/{chunk-DUEY7AXY.mjs → chunk-PJMX2GFY.mjs} +1 -1
- package/dist/preview-engine/{chunk-MA4YVA2E.mjs → chunk-Q7JN4EHX.mjs} +1 -1
- package/dist/preview-engine/{chunk-UXCTWFKK.mjs → chunk-QPBTLJ5W.mjs} +1 -1
- package/dist/preview-engine/{chunk-LQVACZDE.mjs → chunk-QRYCB6E3.mjs} +1 -1
- package/dist/preview-engine/{chunk-2QQQTZHS.mjs → chunk-RDEQ4LQU.mjs} +1 -1
- package/dist/preview-engine/{chunk-KKBJ7X3T.mjs → chunk-RF62TV3G.mjs} +1 -1
- package/dist/preview-engine/{chunk-CE6CG5BH.mjs → chunk-RHXZXWJ4.mjs} +1 -1
- package/dist/preview-engine/{chunk-BNO5JAEZ.mjs → chunk-RKNV5N7D.mjs} +1 -1
- package/dist/preview-engine/{chunk-PXWCGXTF.mjs → chunk-SP22JWN2.mjs} +1 -1
- package/dist/preview-engine/{chunk-NYEDWUFS.mjs → chunk-SQ52PBF3.mjs} +1 -1
- package/dist/preview-engine/{chunk-QYIKOOFI.mjs → chunk-SVE3XWO7.mjs} +1 -1
- package/dist/preview-engine/{chunk-QJYAIQYU.mjs → chunk-SXNCNG4L.mjs} +1 -1
- package/dist/preview-engine/{chunk-VH5V54RA.mjs → chunk-TPFDAOW7.mjs} +1 -1
- package/dist/preview-engine/{chunk-ENS4KUJV.mjs → chunk-UEQIO6AH.mjs} +1 -1
- package/dist/preview-engine/{chunk-XYRBFLFF.mjs → chunk-ULPLHKM2.mjs} +1 -1
- package/dist/preview-engine/{chunk-MCR7XMNQ.mjs → chunk-ULVX4VYT.mjs} +1 -1
- package/dist/preview-engine/{chunk-ZAIVXGSS.mjs → chunk-UQD2UE6I.mjs} +1 -1
- package/dist/preview-engine/{chunk-QP24X77K.mjs → chunk-VY6ST4QX.mjs} +1 -1
- package/dist/preview-engine/{chunk-7BUKVFWB.mjs → chunk-W2EZFV4Q.mjs} +1 -1
- package/dist/preview-engine/chunk-W3I7LKDV.mjs +5 -0
- package/dist/preview-engine/{chunk-P734GD7D.mjs → chunk-WDWHOXSA.mjs} +1 -1
- package/dist/preview-engine/{chunk-2RZ6S4SW.mjs → chunk-YEPYVASB.mjs} +1 -1
- package/dist/preview-engine/chunk-ZMMNN77R.mjs +3 -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 +1 -1
- package/dist/preview-engine/renderers-4CRXZJ5G.mjs +1 -0
- package/dist/preview-engine/renderers-4G3UOPA7.mjs +228 -0
- package/dist/preview-engine/{renderers-WPBTAU2E.mjs → renderers-4RVSLTCX.mjs} +1 -1
- package/dist/preview-engine/{renderers-W5CTR4B5.mjs → renderers-56TGEFDK.mjs} +1 -1
- package/dist/preview-engine/renderers-5QF4OLFQ.mjs +1 -0
- package/dist/preview-engine/renderers-5SOW6OVE.mjs +1 -0
- package/dist/preview-engine/renderers-6M2HPY2J.mjs +1 -0
- package/dist/preview-engine/{renderers-DZZFIYYA.mjs → renderers-7GMW52G3.mjs} +1 -1
- package/dist/preview-engine/renderers-7HT5NW7W.mjs +1 -0
- package/dist/preview-engine/{renderers-KV3TTCO6.mjs → renderers-7SW2AHM2.mjs} +1 -1
- package/dist/preview-engine/{renderers-BNXTSIXJ.mjs → renderers-ART3EGSZ.mjs} +1 -1
- package/dist/preview-engine/{renderers-6NFRKHNO.mjs → renderers-ATTGUTYY.mjs} +1 -1
- package/dist/preview-engine/renderers-AYWCRBQC.mjs +1 -0
- package/dist/preview-engine/renderers-BA6ZCPI5.mjs +1 -0
- package/dist/preview-engine/{renderers-AKZAAGR7.mjs → renderers-BAS7RXTC.mjs} +1 -1
- package/dist/preview-engine/{renderers-CLLR5MOQ.mjs → renderers-BWRNCXR6.mjs} +1 -1
- package/dist/preview-engine/{renderers-N7T34SCI.mjs → renderers-C3YXNKNM.mjs} +1 -1
- package/dist/preview-engine/renderers-CZTCW4FC.mjs +1 -0
- package/dist/preview-engine/{renderers-C7SJ3M6S.mjs → renderers-D2XEQ2YY.mjs} +1 -1
- package/dist/preview-engine/renderers-DFIJYBW2.mjs +1 -0
- package/dist/preview-engine/{renderers-DHKB5LI6.mjs → renderers-EJGF3PYQ.mjs} +1 -1
- package/dist/preview-engine/renderers-EJN6M6DO.mjs +1 -0
- package/dist/preview-engine/{renderers-MKEXNBCW.mjs → renderers-EK3HQUUF.mjs} +1 -1
- package/dist/preview-engine/{renderers-O56IOD7J.mjs → renderers-EQDINUMT.mjs} +1 -1
- package/dist/preview-engine/{renderers-VYK2BJID.mjs → renderers-FC7G7KU7.mjs} +1 -1
- package/dist/preview-engine/{renderers-BQLYS4TM.mjs → renderers-FD3ZT73R.mjs} +1 -1
- package/dist/preview-engine/{renderers-TASYN62K.mjs → renderers-FYI6QNUH.mjs} +1 -1
- package/dist/preview-engine/renderers-G34C5J27.mjs +1 -0
- package/dist/preview-engine/{renderers-ROSSJ7Y2.mjs → renderers-GHP7SL5M.mjs} +1 -1
- package/dist/preview-engine/renderers-GKVTNDVH.mjs +1 -0
- package/dist/preview-engine/{renderers-MPCYLXXU.mjs → renderers-GY4R467B.mjs} +1 -1
- package/dist/preview-engine/{renderers-TAMDNTEQ.mjs → renderers-H2UI7YEO.mjs} +1 -1
- package/dist/preview-engine/{renderers-6PVGRTXV.mjs → renderers-HBIBRZD7.mjs} +1 -1
- package/dist/preview-engine/{renderers-GF77N2KM.mjs → renderers-HMNCIEU3.mjs} +1 -1
- package/dist/preview-engine/{renderers-SIBP54WK.mjs → renderers-HZBYQKIQ.mjs} +1 -1
- package/dist/preview-engine/renderers-IK7ZJJKJ.mjs +1 -0
- package/dist/preview-engine/renderers-ISASPH6T.mjs +1 -0
- package/dist/preview-engine/renderers-IW5MWDBI.mjs +1 -0
- package/dist/preview-engine/renderers-K2PI4WJS.mjs +1 -0
- package/dist/preview-engine/renderers-KESHVFL2.mjs +1 -0
- package/dist/preview-engine/renderers-KTZZVAB2.mjs +1 -0
- package/dist/preview-engine/renderers-KY5CJEOV.mjs +1 -0
- package/dist/preview-engine/{renderers-MS4HG3M4.mjs → renderers-LTV5RFDJ.mjs} +1 -1
- package/dist/preview-engine/{renderers-CEJP6Q7F.mjs → renderers-LV6LLULR.mjs} +1 -1
- package/dist/preview-engine/renderers-M5W6SUQD.mjs +1 -0
- package/dist/preview-engine/{renderers-H3ZM2TOA.mjs → renderers-MEM3REMI.mjs} +1 -1
- package/dist/preview-engine/{renderers-EJATUIUP.mjs → renderers-N36R42RL.mjs} +1 -1
- package/dist/preview-engine/{renderers-UVABXXQF.mjs → renderers-NTKSN32T.mjs} +1 -1
- package/dist/preview-engine/renderers-O5XMWFPY.mjs +1 -0
- package/dist/preview-engine/{renderers-QO2RHF7F.mjs → renderers-P2FTCDZ7.mjs} +1 -1
- package/dist/preview-engine/{renderers-L7EITUCD.mjs → renderers-PYDOSDEY.mjs} +1 -1
- package/dist/preview-engine/renderers-QJA35PKC.mjs +1 -0
- package/dist/preview-engine/{renderers-TWZHTKW7.mjs → renderers-RDHHVXRE.mjs} +1 -1
- package/dist/preview-engine/{renderers-RRJ2DX2W.mjs → renderers-SY435YU3.mjs} +1 -1
- package/dist/preview-engine/renderers-TJIFTQHV.mjs +1 -0
- package/dist/preview-engine/renderers-TN4XN436.mjs +1 -0
- package/dist/preview-engine/renderers-UDYLCYCB.mjs +1 -0
- package/dist/preview-engine/renderers-WZ7SFIBZ.mjs +1 -0
- package/dist/preview-engine/renderers-X6QNDC6R.mjs +1 -0
- package/dist/preview-engine/renderers-X6RNTJOV.mjs +1 -0
- package/dist/preview-engine/{renderers-QPFZBLDI.mjs → renderers-Y3N7236P.mjs} +1 -1
- package/dist/preview-engine/{renderers-XSPU2BIQ.mjs → renderers-YBTWN76S.mjs} +1 -1
- package/dist/preview-engine/{renderers-T62TXGVO.mjs → renderers-YK74777T.mjs} +1 -1
- package/dist/preview-engine/renderers-YP3ASXIJ.mjs +1 -0
- package/dist/preview-engine/renderers-YVJAG3PD.mjs +1 -0
- package/dist/preview-engine/{renderers-4RFB2LG2.mjs → renderers-ZAMSS7QN.mjs} +1 -1
- package/dist/preview-engine/{renderers-FOHW7RWH.mjs → renderers-ZDMDDWLN.mjs} +1 -1
- package/dist/preview-engine/renderers-ZPPZNMKJ.mjs +1 -0
- package/dist/preview-engine/signals.mjs +1 -1
- package/dist/{program-4mAVgg3c.mjs → program-Bf4yHbHC.mjs} +19 -3
- package/dist/program-Bf4yHbHC.mjs.map +1 -0
- package/dist/registry/annotate.json +1 -1
- package/dist/registry/app-frame.json +1 -1
- package/dist/registry/backdrop.json +3 -3
- package/dist/registry/before-after.json +1 -1
- package/dist/registry/callout.json +1 -1
- package/dist/registry/captions.json +7 -1
- package/dist/registry/card-stack.json +5 -4
- package/dist/registry/chat-thread.json +10 -3
- package/dist/registry/code-block.json +8 -2
- package/dist/registry/confetti.json +1 -1
- package/dist/registry/device-frame.json +2 -1
- package/dist/registry/focus-zoom.json +1 -1
- package/dist/registry/index.json +3 -2
- package/dist/registry/logo-reveal.json +1 -1
- package/dist/registry/lower-third.json +1 -1
- package/dist/registry/meter.json +1 -1
- package/dist/registry/mouse-pointer.json +1 -1
- package/dist/registry/selection.json +3 -3
- package/dist/registry/spotlight.json +1 -1
- package/dist/registry/terminal.json +7 -1
- package/dist/registry/text-reveal.json +2 -1
- package/dist/registry/title-card.json +1 -1
- package/dist/registry/toasts.json +1 -1
- package/dist/registry/touch-point.json +4 -4
- package/dist/registry/waveform.json +3 -3
- package/dist/registry/word-cycle.json +2 -2
- package/dist/renderer/index.d.mts +2 -2
- package/dist/renderer/index.mjs +2 -2
- package/dist/renderer-4FQmduPw.mjs +5 -0
- package/dist/{renderer-Cjw6lyaK.mjs → renderer-4v6XYAiX.mjs} +4 -4
- package/dist/{renderer-Cjw6lyaK.mjs.map → renderer-4v6XYAiX.mjs.map} +1 -1
- package/dist/{renderer-CXa6SWXy.mjs → renderer-79mO0b9Y.mjs} +4 -4
- package/dist/{renderer-CXa6SWXy.mjs.map → renderer-79mO0b9Y.mjs.map} +1 -1
- package/dist/{renderer-wEXBnlr1.mjs → renderer-AOZWHGT3.mjs} +4 -4
- package/dist/{renderer-wEXBnlr1.mjs.map → renderer-AOZWHGT3.mjs.map} +1 -1
- package/dist/{renderer-CjcrhBB2.mjs → renderer-B1Ox12RF.mjs} +3 -3
- package/dist/{renderer-CjcrhBB2.mjs.map → renderer-B1Ox12RF.mjs.map} +1 -1
- package/dist/{renderer-B9m7xIPo.mjs → renderer-B6vr-B0t.mjs} +4 -4
- package/dist/{renderer-B9m7xIPo.mjs.map → renderer-B6vr-B0t.mjs.map} +1 -1
- package/dist/renderer-BBCpRuYU.mjs +5 -0
- package/dist/renderer-BBTo_jLO.mjs +5 -0
- package/dist/{renderer-CgMnZYTM.mjs → renderer-BDCS7k5X.mjs} +4 -4
- package/dist/{renderer-CgMnZYTM.mjs.map → renderer-BDCS7k5X.mjs.map} +1 -1
- package/dist/{renderer-BjxceNBj.mjs → renderer-BFdgbqgW.mjs} +4 -4
- package/dist/{renderer-BjxceNBj.mjs.map → renderer-BFdgbqgW.mjs.map} +1 -1
- package/dist/{renderer-C0P8ZRiC.mjs → renderer-BHgYRSu8.mjs} +3 -3
- package/dist/{renderer-C0P8ZRiC.mjs.map → renderer-BHgYRSu8.mjs.map} +1 -1
- package/dist/{renderer-CTvPNRMH.mjs → renderer-BKssznKn.mjs} +3 -3
- package/dist/{renderer-CTvPNRMH.mjs.map → renderer-BKssznKn.mjs.map} +1 -1
- package/dist/{renderer-B9iVE2GG.mjs → renderer-BL9vkn6m.mjs} +4 -4
- package/dist/{renderer-B9iVE2GG.mjs.map → renderer-BL9vkn6m.mjs.map} +1 -1
- package/dist/renderer-BLg66ZgG.mjs +5 -0
- package/dist/{renderer-D22g6ION.mjs → renderer-BQFxoNzi.mjs} +4 -4
- package/dist/{renderer-D22g6ION.mjs.map → renderer-BQFxoNzi.mjs.map} +1 -1
- package/dist/{renderer-Datqywo_.mjs → renderer-BQdn_qGp.mjs} +4 -4
- package/dist/{renderer-Datqywo_.mjs.map → renderer-BQdn_qGp.mjs.map} +1 -1
- package/dist/{renderer-T2dd9a2L.mjs → renderer-BR35Xp9n.mjs} +4 -4
- package/dist/{renderer-T2dd9a2L.mjs.map → renderer-BR35Xp9n.mjs.map} +1 -1
- package/dist/renderer-BScS8AzG.mjs +5 -0
- package/dist/{renderer-BcSSAzc4.mjs → renderer-BTjveb1Y.mjs} +4 -4
- package/dist/{renderer-BcSSAzc4.mjs.map → renderer-BTjveb1Y.mjs.map} +1 -1
- package/dist/renderer-Bb1cS5mJ.mjs +5 -0
- package/dist/{renderer-4P-DCjk2.mjs → renderer-Bbkf5EIi.mjs} +4 -4
- package/dist/{renderer-4P-DCjk2.mjs.map → renderer-Bbkf5EIi.mjs.map} +1 -1
- package/dist/{renderer-C9r0-KY4.mjs → renderer-BgmO1Dzw.mjs} +11 -2
- package/dist/{renderer-C9r0-KY4.mjs.map → renderer-BgmO1Dzw.mjs.map} +1 -1
- package/dist/{renderer-khVVYoVF.mjs → renderer-BmgyvIC3.mjs} +4 -4
- package/dist/{renderer-khVVYoVF.mjs.map → renderer-BmgyvIC3.mjs.map} +1 -1
- package/dist/{renderer-CvYxxS_X.mjs → renderer-Bpve7M6S.mjs} +73 -73
- package/dist/{renderer-CvYxxS_X.mjs.map → renderer-Bpve7M6S.mjs.map} +1 -1
- package/dist/renderer-Bpwd9zEY.mjs +5 -0
- package/dist/renderer-BsewLDHZ.mjs +3 -0
- package/dist/{renderer-C4f_X1Qc.mjs → renderer-BsnhAgrB.mjs} +3 -3
- package/dist/{renderer-C4f_X1Qc.mjs.map → renderer-BsnhAgrB.mjs.map} +1 -1
- package/dist/{renderer-BIt-At3v.mjs → renderer-By5xTRqB.mjs} +4 -4
- package/dist/{renderer-BIt-At3v.mjs.map → renderer-By5xTRqB.mjs.map} +1 -1
- package/dist/{renderer-vc8t_z-y.mjs → renderer-BzEQXAdl.mjs} +3 -3
- package/dist/{renderer-vc8t_z-y.mjs.map → renderer-BzEQXAdl.mjs.map} +1 -1
- package/dist/renderer-Bzyd9xi5.mjs +5 -0
- package/dist/{renderer-CE9N4EEI.d.mts → renderer-C-dcd14F.d.mts} +2 -2
- package/dist/{renderer-CE9N4EEI.d.mts.map → renderer-C-dcd14F.d.mts.map} +1 -1
- package/dist/{renderer-RiWi7y5C.mjs → renderer-C64g87yU.mjs} +4 -4
- package/dist/{renderer-RiWi7y5C.mjs.map → renderer-C64g87yU.mjs.map} +1 -1
- package/dist/{renderer-De7gno9X.mjs → renderer-C6Wb1TZT.mjs} +4 -4
- package/dist/{renderer-De7gno9X.mjs.map → renderer-C6Wb1TZT.mjs.map} +1 -1
- package/dist/{renderer-CT_3Fegr.mjs → renderer-CHPLHbAs.mjs} +4 -4
- package/dist/{renderer-CT_3Fegr.mjs.map → renderer-CHPLHbAs.mjs.map} +1 -1
- package/dist/{renderer-CkJXq4bD.mjs → renderer-CJRu7lLH.mjs} +3 -3
- package/dist/{renderer-CkJXq4bD.mjs.map → renderer-CJRu7lLH.mjs.map} +1 -1
- package/dist/{renderer-BwRLXhxJ.mjs → renderer-CMWUtfwn.mjs} +3 -3
- package/dist/{renderer-BwRLXhxJ.mjs.map → renderer-CMWUtfwn.mjs.map} +1 -1
- package/dist/{renderer-C4pS7aAI.mjs → renderer-CRkgyk08.mjs} +4 -4
- package/dist/{renderer-C4pS7aAI.mjs.map → renderer-CRkgyk08.mjs.map} +1 -1
- package/dist/renderer-CXVssx1k.mjs +5 -0
- package/dist/{renderer-5-9DPis6.mjs → renderer-CY0BT6ok.mjs} +3 -3
- package/dist/{renderer-5-9DPis6.mjs.map → renderer-CY0BT6ok.mjs.map} +1 -1
- package/dist/renderer-CYFiGLls.mjs +5 -0
- package/dist/{renderer-BVtQzjgT.mjs → renderer-CYLP8sD6.mjs} +3 -3
- package/dist/{renderer-BVtQzjgT.mjs.map → renderer-CYLP8sD6.mjs.map} +1 -1
- package/dist/{renderer-DPVEs5ME.mjs → renderer-CY_1u6zi.mjs} +4 -4
- package/dist/{renderer-DPVEs5ME.mjs.map → renderer-CY_1u6zi.mjs.map} +1 -1
- package/dist/renderer-C__BvvtP.mjs +5 -0
- package/dist/renderer-Ca3YZsoT.mjs +5 -0
- package/dist/{renderer-BpBhvMi1.mjs → renderer-CcSBjtRa.mjs} +2 -2
- package/dist/{renderer-nLPfvY3-.mjs → renderer-CdxNwGeb.mjs} +2 -2
- package/dist/{renderer-nLPfvY3-.mjs.map → renderer-CdxNwGeb.mjs.map} +1 -1
- package/dist/{renderer-CJ2-jEy7.mjs → renderer-CgdplRri.mjs} +3 -3
- package/dist/{renderer-CJ2-jEy7.mjs.map → renderer-CgdplRri.mjs.map} +1 -1
- package/dist/{renderer-MQPiZQXN.mjs → renderer-Cn9tU_s5.mjs} +3 -3
- package/dist/{renderer-MQPiZQXN.mjs.map → renderer-Cn9tU_s5.mjs.map} +1 -1
- package/dist/renderer-CnM5iFj9.mjs +5 -0
- package/dist/{renderer-Cz5SOnJr.mjs → renderer-Cqp_TUl_.mjs} +3 -3
- package/dist/{renderer-Cz5SOnJr.mjs.map → renderer-Cqp_TUl_.mjs.map} +1 -1
- package/dist/{renderer-BKayVZhL.mjs → renderer-CsOLHKFx.mjs} +3 -3
- package/dist/{renderer-BKayVZhL.mjs.map → renderer-CsOLHKFx.mjs.map} +1 -1
- package/dist/{renderer-BWqQxZNk.mjs → renderer-D01RT3Ov.mjs} +2 -2
- package/dist/renderer-D1nZrvQx.mjs +5 -0
- package/dist/renderer-D6XjVQME.mjs +5 -0
- package/dist/{renderer-9gjn790a.mjs → renderer-DAONCf_3.mjs} +4 -4
- package/dist/{renderer-9gjn790a.mjs.map → renderer-DAONCf_3.mjs.map} +1 -1
- package/dist/{renderer-D0iSbNza.mjs → renderer-DAfWLGfy.mjs} +4 -4
- package/dist/{renderer-D0iSbNza.mjs.map → renderer-DAfWLGfy.mjs.map} +1 -1
- package/dist/{renderer-Bk7vVfTu.mjs → renderer-DEeKkljI.mjs} +3 -3
- package/dist/{renderer-Bk7vVfTu.mjs.map → renderer-DEeKkljI.mjs.map} +1 -1
- package/dist/{renderer-B9AZ6R1U.mjs → renderer-DFYXjAIT.mjs} +172 -8
- package/dist/renderer-DFYXjAIT.mjs.map +1 -0
- package/dist/renderer-DIuMnMF0.mjs +5 -0
- package/dist/{renderer-DnT62IDK.mjs → renderer-DJHuPNJx.mjs} +3 -3
- package/dist/{renderer-DnT62IDK.mjs.map → renderer-DJHuPNJx.mjs.map} +1 -1
- package/dist/{renderer-B9yv3R1y.mjs → renderer-DJTXhVNh.mjs} +3 -3
- package/dist/{renderer-B9yv3R1y.mjs.map → renderer-DJTXhVNh.mjs.map} +1 -1
- package/dist/{renderer-DPzair18.mjs → renderer-DNEFYrQ5.mjs} +2 -2
- package/dist/renderer-DUvvM8EF.mjs +5 -0
- package/dist/renderer-DWogyuMO.mjs +5 -0
- package/dist/renderer-DWsj_LJR.mjs +5 -0
- package/dist/{renderer-BBA-iCi-.mjs → renderer-DYJHFHF4.mjs} +34 -9
- package/dist/renderer-DYJHFHF4.mjs.map +1 -0
- package/dist/{renderer-Dkt1oh9H.mjs → renderer-DYR4gFEM.mjs} +4 -4
- package/dist/{renderer-Dkt1oh9H.mjs.map → renderer-DYR4gFEM.mjs.map} +1 -1
- package/dist/renderer-DYun0DJl.mjs +5 -0
- package/dist/renderer-D_6YqD-Z.mjs +5 -0
- package/dist/{renderer-DTXAa2pL.mjs → renderer-D_UPFbei.mjs} +4 -4
- package/dist/{renderer-DTXAa2pL.mjs.map → renderer-D_UPFbei.mjs.map} +1 -1
- package/dist/renderer-Db9LP86x.mjs +5 -0
- package/dist/{renderer-Y5JmTL8J.mjs → renderer-DgRJG_l-.mjs} +3 -3
- package/dist/{renderer-Y5JmTL8J.mjs.map → renderer-DgRJG_l-.mjs.map} +1 -1
- package/dist/renderer-DhHiC87m.mjs +5 -0
- package/dist/{renderer-C8-NmotX.mjs → renderer-DiD3r9tx.mjs} +3 -3
- package/dist/{renderer-C8-NmotX.mjs.map → renderer-DiD3r9tx.mjs.map} +1 -1
- package/dist/{renderer-_vcT__tW.mjs → renderer-Dj-y-BtT.mjs} +4 -4
- package/dist/{renderer-_vcT__tW.mjs.map → renderer-Dj-y-BtT.mjs.map} +1 -1
- package/dist/renderer-Dj5jGAkR.mjs +5 -0
- package/dist/{renderer-NL2IZShC.mjs → renderer-DlA7kzIs.mjs} +4 -4
- package/dist/{renderer-NL2IZShC.mjs.map → renderer-DlA7kzIs.mjs.map} +1 -1
- package/dist/renderer-DlPUQ7RF.mjs +5 -0
- package/dist/renderer-DpIPdgn8.mjs +5 -0
- package/dist/{renderer-wIsJb2eO.mjs → renderer-Duorbrb8.mjs} +2 -2
- package/dist/{renderer-wIsJb2eO.mjs.map → renderer-Duorbrb8.mjs.map} +1 -1
- package/dist/renderer-Dv0C9CEt.mjs +6 -0
- package/dist/{renderer-C7HIJcJK.mjs → renderer-EwSSuJXj.mjs} +4 -4
- package/dist/{renderer-C7HIJcJK.mjs.map → renderer-EwSSuJXj.mjs.map} +1 -1
- package/dist/renderer-Iw8fDL-p.mjs +5 -0
- package/dist/{renderer-CuwVuVKG.mjs → renderer-JJibsJfb.mjs} +3 -3
- package/dist/{renderer-CuwVuVKG.mjs.map → renderer-JJibsJfb.mjs.map} +1 -1
- package/dist/{renderer-B8PNlKEM.mjs → renderer-KppAWfmJ.mjs} +4 -4
- package/dist/{renderer-B8PNlKEM.mjs.map → renderer-KppAWfmJ.mjs.map} +1 -1
- package/dist/{renderer-Cm9fEQsw.mjs → renderer-LW8MfGjd.mjs} +3 -3
- package/dist/{renderer-Cm9fEQsw.mjs.map → renderer-LW8MfGjd.mjs.map} +1 -1
- package/dist/{renderer-Cb5uDZm0.mjs → renderer-PMjV8x65.mjs} +3 -3
- package/dist/{renderer-Cb5uDZm0.mjs.map → renderer-PMjV8x65.mjs.map} +1 -1
- package/dist/renderer-SLI69Mju.mjs +5 -0
- package/dist/{renderer-CGKKjJ5Q.mjs → renderer-UArFa4y9.mjs} +3 -3
- package/dist/{renderer-CGKKjJ5Q.mjs.map → renderer-UArFa4y9.mjs.map} +1 -1
- package/dist/{renderer-Bh0dwc8n.mjs → renderer-VwKmjuc6.mjs} +4 -4
- package/dist/{renderer-Bh0dwc8n.mjs.map → renderer-VwKmjuc6.mjs.map} +1 -1
- package/dist/{renderer-92IAZzBU.d.mts → renderer-WTvo3wo9.d.mts} +18 -4
- package/dist/renderer-WTvo3wo9.d.mts.map +1 -0
- package/dist/renderer-WyaqnVMz.mjs +3 -0
- package/dist/renderer-ZVtbb3-P.mjs +5 -0
- package/dist/{renderer-C5h2TSjH.mjs → renderer-bb3puodg.mjs} +3 -3
- package/dist/{renderer-C5h2TSjH.mjs.map → renderer-bb3puodg.mjs.map} +1 -1
- package/dist/{renderer-CWnhRMOq.mjs → renderer-eyvY4Lq4.mjs} +4 -4
- package/dist/{renderer-CWnhRMOq.mjs.map → renderer-eyvY4Lq4.mjs.map} +1 -1
- package/dist/renderer-gHNCu7H5.mjs +5 -0
- package/dist/renderer-gxDNmbtU.mjs +5 -0
- package/dist/renderer-hkK4DNRX.mjs +5 -0
- package/dist/{renderer-CxOaqnho.mjs → renderer-ij448rvt.mjs} +3 -3
- package/dist/{renderer-CxOaqnho.mjs.map → renderer-ij448rvt.mjs.map} +1 -1
- package/dist/{renderer-CxkUI9s_.mjs → renderer-j7aUfyeR.mjs} +4 -4
- package/dist/{renderer-CxkUI9s_.mjs.map → renderer-j7aUfyeR.mjs.map} +1 -1
- package/dist/{renderer-PNIgmWft.mjs → renderer-kFtcuY9J.mjs} +2 -2
- package/dist/{renderer-PNIgmWft.mjs.map → renderer-kFtcuY9J.mjs.map} +1 -1
- package/dist/{renderer-zdpn1Hkk.mjs → renderer-kOlfYLtu.mjs} +3 -3
- package/dist/{renderer-zdpn1Hkk.mjs.map → renderer-kOlfYLtu.mjs.map} +1 -1
- package/dist/{renderer-CPl1wOrj.mjs → renderer-l1qJE4z-.mjs} +3 -3
- package/dist/{renderer-CPl1wOrj.mjs.map → renderer-l1qJE4z-.mjs.map} +1 -1
- package/dist/{renderer-BIYJKdwA.mjs → renderer-ml2LHmRb.mjs} +3 -3
- package/dist/{renderer-BIYJKdwA.mjs.map → renderer-ml2LHmRb.mjs.map} +1 -1
- package/dist/{renderer-BmX2CmyO.mjs → renderer-mu2mYo5w.mjs} +4 -4
- package/dist/{renderer-BmX2CmyO.mjs.map → renderer-mu2mYo5w.mjs.map} +1 -1
- package/dist/{renderer-D-FwaV1R.mjs → renderer-ovkctV5a.mjs} +2 -2
- package/dist/renderer-oy6SGDRz.mjs +5 -0
- package/dist/{renderer-Du8z4UrN.mjs → renderer-qQmoO5Hk.mjs} +3 -3
- package/dist/{renderer-Du8z4UrN.mjs.map → renderer-qQmoO5Hk.mjs.map} +1 -1
- package/dist/renderer-rq7UIcuH.mjs +5 -0
- package/dist/{renderer-Bt_j2Zi6.mjs → renderer-rv-AKqCl.mjs} +3 -3
- package/dist/{renderer-Bt_j2Zi6.mjs.map → renderer-rv-AKqCl.mjs.map} +1 -1
- package/dist/renderer-xkEJahws.mjs +5 -0
- package/dist/{renderer-C1sFg34Y.mjs → renderer-yF40Pb-n.mjs} +4 -4
- package/dist/{renderer-C1sFg34Y.mjs.map → renderer-yF40Pb-n.mjs.map} +1 -1
- package/dist/{renderer-Ddg3dJmu.mjs → renderer-yFHP9Zj2.mjs} +4 -4
- package/dist/{renderer-Ddg3dJmu.mjs.map → renderer-yFHP9Zj2.mjs.map} +1 -1
- package/dist/{renderer-DYdll3xW.mjs → renderer-zOK5DYYn.mjs} +4 -4
- package/dist/{renderer-DYdll3xW.mjs.map → renderer-zOK5DYYn.mjs.map} +1 -1
- package/dist/{renderers-CP8CFWDs-BbLkcJTN.mjs → renderers-CP8CFWDs-DPLX5EJs.mjs} +3 -3
- package/dist/{renderers-CP8CFWDs-BbLkcJTN.mjs.map → renderers-CP8CFWDs-DPLX5EJs.mjs.map} +1 -1
- package/dist/signals/index.d.mts +5 -5
- package/dist/signals/index.mjs +5 -5
- package/dist/{src-WAnxhDYD.mjs → src-BnkrNj2W.mjs} +613 -118
- package/dist/src-BnkrNj2W.mjs.map +1 -0
- package/package.json +59 -58
- package/dist/dist-Bf0H4lp1.mjs.map +0 -1
- package/dist/dist-DG65RDhc.mjs.map +0 -1
- package/dist/fonts-DqYgk_1a.mjs.map +0 -1
- package/dist/index-CZK6CFLy.d.mts.map +0 -1
- package/dist/index-CalU-mpZ.d.mts.map +0 -1
- package/dist/index-tCKz9Tku.d.mts.map +0 -1
- package/dist/preview-engine/chunk-FAEWI3LF.mjs +0 -5
- package/dist/preview-engine/chunk-I6E3AKLS.mjs +0 -1
- package/dist/preview-engine/chunk-PR37RCNO.mjs +0 -1974
- package/dist/preview-engine/chunk-YSXMXD3F.mjs +0 -3
- package/dist/preview-engine/renderers-2S5ZWL2J.mjs +0 -1
- package/dist/preview-engine/renderers-37CN7O4S.mjs +0 -1
- package/dist/preview-engine/renderers-3UGG2IMP.mjs +0 -1
- package/dist/preview-engine/renderers-7MPBAHYA.mjs +0 -1
- package/dist/preview-engine/renderers-AFTYMS3H.mjs +0 -1
- package/dist/preview-engine/renderers-AYEWAW7F.mjs +0 -1
- package/dist/preview-engine/renderers-BILNWTUC.mjs +0 -228
- package/dist/preview-engine/renderers-DUF2CTX6.mjs +0 -1
- package/dist/preview-engine/renderers-EIJFIY6L.mjs +0 -1
- package/dist/preview-engine/renderers-EOMMSENQ.mjs +0 -1
- package/dist/preview-engine/renderers-JXBZPQKP.mjs +0 -1
- package/dist/preview-engine/renderers-LD3COS4X.mjs +0 -1
- package/dist/preview-engine/renderers-MCTBJEL7.mjs +0 -1
- package/dist/preview-engine/renderers-OZGEXW2X.mjs +0 -1
- package/dist/preview-engine/renderers-PSEDMUBV.mjs +0 -1
- package/dist/preview-engine/renderers-PVUROEGR.mjs +0 -1
- package/dist/preview-engine/renderers-QBVVTQV6.mjs +0 -1
- package/dist/preview-engine/renderers-R4U2TK6P.mjs +0 -1
- package/dist/preview-engine/renderers-RBLNDAO4.mjs +0 -1
- package/dist/preview-engine/renderers-RM25AXWZ.mjs +0 -1
- package/dist/preview-engine/renderers-RYRFCEYT.mjs +0 -1
- package/dist/preview-engine/renderers-SKT7AGGE.mjs +0 -1
- package/dist/preview-engine/renderers-SRU6QXLN.mjs +0 -1
- package/dist/preview-engine/renderers-TBP2EKJ4.mjs +0 -1
- package/dist/preview-engine/renderers-UQHKFGDX.mjs +0 -1
- package/dist/preview-engine/renderers-WDV7ENJA.mjs +0 -1
- package/dist/preview-engine/renderers-WNBDSSJ3.mjs +0 -1
- package/dist/preview-engine/renderers-WTC2RNGU.mjs +0 -1
- package/dist/preview-engine/renderers-XVUOO7B6.mjs +0 -1
- package/dist/preview-engine/renderers-YHOQUEHD.mjs +0 -1
- package/dist/preview-engine/renderers-YPFM5UJO.mjs +0 -1
- package/dist/preview-engine/renderers-YW3LBALW.mjs +0 -1
- package/dist/program-4mAVgg3c.mjs.map +0 -1
- package/dist/renderer-1ymN1FIT.mjs +0 -5
- package/dist/renderer-92IAZzBU.d.mts.map +0 -1
- package/dist/renderer-B-43EuKb.mjs +0 -5
- package/dist/renderer-B-v5ZboU.mjs +0 -5
- package/dist/renderer-B9AZ6R1U.mjs.map +0 -1
- package/dist/renderer-BBA-iCi-.mjs.map +0 -1
- package/dist/renderer-BKF8Sfbg.mjs +0 -3
- package/dist/renderer-BTB8ifgH.mjs +0 -5
- package/dist/renderer-BYxzR6Hp.mjs +0 -5
- package/dist/renderer-BcGhO_Mw.mjs +0 -5
- package/dist/renderer-Bk3RgiFg.mjs +0 -5
- package/dist/renderer-BvItCxkw.mjs +0 -5
- package/dist/renderer-BvcqncI2.mjs +0 -3
- package/dist/renderer-CCnfPHqk.mjs +0 -5
- package/dist/renderer-CIoWQNaA.mjs +0 -5
- package/dist/renderer-CMwQtIIq.mjs +0 -5
- package/dist/renderer-CN8kRB90.mjs +0 -6
- package/dist/renderer-CPKBDif1.mjs +0 -5
- package/dist/renderer-CamsHxEP.mjs +0 -5
- package/dist/renderer-CeQormOH.mjs +0 -5
- package/dist/renderer-Cex4eMtv.mjs +0 -5
- package/dist/renderer-CjyTrNlr.mjs +0 -5
- package/dist/renderer-Clv9TO6C.mjs +0 -5
- package/dist/renderer-D4LnJk-M.mjs +0 -5
- package/dist/renderer-D5OfQ8Ut.mjs +0 -5
- package/dist/renderer-DBYssktC.mjs +0 -5
- package/dist/renderer-DC-Aj3me.mjs +0 -5
- package/dist/renderer-DG97_Aoc.mjs +0 -5
- package/dist/renderer-DS4UGjcS.mjs +0 -5
- package/dist/renderer-DdG6ibtM.mjs +0 -5
- package/dist/renderer-DhZi4f3t.mjs +0 -5
- package/dist/renderer-MgLekf6d.mjs +0 -5
- package/dist/renderer-Qvs-1lWh.mjs +0 -5
- package/dist/renderer-bN7dOErt.mjs +0 -5
- package/dist/renderer-jWKVmReU.mjs +0 -5
- package/dist/renderer-lk-At57G.mjs +0 -5
- package/dist/renderer-qi8Slwfo.mjs +0 -5
- package/dist/renderer-qxOH4JH1.mjs +0 -5
- package/dist/renderer-t30NpmIl.mjs +0 -5
- package/dist/renderer-wKW4HWRx.mjs +0 -5
- package/dist/renderer-ydjPm8bp.mjs +0 -5
- package/dist/src-WAnxhDYD.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-zdpn1Hkk.mjs","names":[],"sources":["../../../nodes/node-audio-reverb/dist/renderers-DCFjIwTB.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { isHandleConnected, resolveNumber } from \"@framefields/node-sdk\";\nimport { WebGPUAudioProcessor } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/audio-processor.ts\nconst PARAM_ORDER = [\n\t\"roomSize\",\n\t\"damping\",\n\t\"wet\",\n\t\"dry\",\n\t\"width\"\n];\nconst REVERB_SHADER_TEMPLATE = () => `\nstruct Uniforms {\n sampleRate : f32,\n roomSize : f32,\n damping : f32,\n wet : f32,\n dry : f32,\n width : f32,\n hasRoomSizeSig : f32,\n hasDampingSig : f32,\n hasWetSig : f32,\n hasDrySig : f32,\n hasWidthSig : f32,\n baseTime : f32,\n frame : f32,\n numSamples : f32,\n numChannels : f32,\n pad1 : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : Uniforms;\n@group(0) @binding(1) var<storage, read> inputChannels : array<f32>;\n@group(0) @binding(2) var<storage, read_write> outputChannels : array<f32>;\n@group(0) @binding(3) var<storage, read_write> state : array<f32>;\n@group(0) @binding(4) var<storage, read> roomSizeSignal : array<f32>;\n@group(0) @binding(5) var<storage, read> dampingSignal : array<f32>;\n@group(0) @binding(6) var<storage, read> wetSignal : array<f32>;\n@group(0) @binding(7) var<storage, read> drySignal : array<f32>;\n@group(0) @binding(8) var<storage, read> widthSignal : array<f32>;\n\nfn tanh(x: f32) -> f32 {\n let exp2x = exp(2.0f * x);\n return (exp2x - 1.0f) / (exp2x + 1.0f);\n}\n\nfn is_nan_or_inf(v: f32) -> bool {\n return (v != v) || (abs(v) > 3.402823466e+38f);\n}\n\n@compute @workgroup_size(1)\nfn main(@builtin(global_invocation_id) gid : vec3<u32>) {\n if (gid.x != 0u) { return; }\n\n let numSamples = u32(u.numSamples);\n let numChannels = u32(u.numChannels);\n let fixedgain: f32 = 0.015f;\n\n var bufIndices: array<u32, 24>;\n var filterStores: array<f32, 24>;\n var sizes: array<u32, 24>;\n var startOffsets: array<u32, 24>;\n\n for (var f = 0u; f < 24u; f = f + 1u) {\n let metaOffset = f * 4u;\n sizes[f] = u32(state[metaOffset]);\n startOffsets[f] = u32(state[metaOffset + 1u]);\n bufIndices[f] = u32(state[metaOffset + 2u]);\n var fs = state[metaOffset + 3u];\n if (is_nan_or_inf(fs)) { fs = 0.0f; }\n filterStores[f] = fs;\n }\n\n if (numChannels == 1u) {\n for (var index = 0u; index < numSamples; index = index + 1u) {\n // Dynamic parameter signal evaluation\n var effRoomSize = u.roomSize;\n if (u.hasRoomSizeSig > 0.5f) { effRoomSize = roomSizeSignal[index]; }\n effRoomSize = clamp(effRoomSize, 0.0f, 0.98f);\n\n var effDamping = u.damping;\n if (u.hasDampingSig > 0.5f) { effDamping = dampingSignal[index]; }\n effDamping = clamp(effDamping, 0.0f, 1.0f) * 0.4f;\n\n var effWet = u.wet;\n if (u.hasWetSig > 0.5f) { effWet = wetSignal[index]; }\n effWet = clamp(effWet, 0.0f, 1.0f) * 3.0f;\n\n var effDry = u.dry;\n if (u.hasDrySig > 0.5f) { effDry = drySignal[index]; }\n effDry = clamp(effDry, 0.0f, 2.0f);\n\n var x = inputChannels[index];\n if (is_nan_or_inf(x)) { x = 0.0f; }\n let inputVal = x * fixedgain;\n\n var combSum = 0.0f;\n for (var j = 0u; j < 8u; j = j + 1u) {\n let size = sizes[j];\n let startOffset = startOffsets[j];\n let bufferIndex = bufIndices[j];\n var fs = filterStores[j];\n\n var output = state[startOffset + bufferIndex];\n if (is_nan_or_inf(output)) { output = 0.0f; }\n\n fs = output * (1.0f - effDamping) + fs * effDamping;\n var nextVal = inputVal + fs * effRoomSize;\n if (is_nan_or_inf(nextVal)) { nextVal = 0.0f; }\n state[startOffset + bufferIndex] = clamp(nextVal, -4.0f, 4.0f);\n\n bufIndices[j] = (bufferIndex + 1u) % size;\n filterStores[j] = fs;\n combSum = combSum + output;\n }\n\n var revOut = combSum;\n for (var j = 0u; j < 4u; j = j + 1u) {\n let f = 8u + j;\n let size = sizes[f];\n let startOffset = startOffsets[f];\n let bufferIndex = bufIndices[f];\n\n var bufOut = state[startOffset + bufferIndex];\n if (is_nan_or_inf(bufOut)) { bufOut = 0.0f; }\n\n var nextVal = revOut + bufOut * 0.5f;\n if (is_nan_or_inf(nextVal)) { nextVal = 0.0f; }\n state[startOffset + bufferIndex] = clamp(nextVal, -4.0f, 4.0f);\n\n let output = bufOut - revOut;\n bufIndices[f] = (bufferIndex + 1u) % size;\n revOut = output;\n }\n\n var outVal = x * effDry + revOut * effWet;\n if (is_nan_or_inf(outVal)) { outVal = 0.0f; }\n\n if (outVal > 1.0f) { outVal = 1.0f; }\n else if (outVal < -1.0f) { outVal = -1.0f; }\n else if (outVal > 0.9f) { outVal = 0.9f + 0.1f * tanh((outVal - 0.9f) / 0.1f); }\n else if (outVal < -0.9f) { outVal = -0.9f + 0.1f * tanh((outVal + 0.9f) / 0.1f); }\n\n outputChannels[index] = outVal;\n }\n } else {\n for (var index = 0u; index < numSamples; index = index + 1u) {\n // Dynamic parameter signal evaluation\n var effRoomSize = u.roomSize;\n if (u.hasRoomSizeSig > 0.5f) { effRoomSize = roomSizeSignal[index]; }\n effRoomSize = clamp(effRoomSize, 0.0f, 0.98f);\n\n var effDamping = u.damping;\n if (u.hasDampingSig > 0.5f) { effDamping = dampingSignal[index]; }\n effDamping = clamp(effDamping, 0.0f, 1.0f) * 0.4f;\n\n var effWet = u.wet;\n if (u.hasWetSig > 0.5f) { effWet = wetSignal[index]; }\n effWet = clamp(effWet, 0.0f, 1.0f) * 3.0f;\n\n var effDry = u.dry;\n if (u.hasDrySig > 0.5f) { effDry = drySignal[index]; }\n effDry = clamp(effDry, 0.0f, 2.0f);\n\n var effWidth = u.width;\n if (u.hasWidthSig > 0.5f) { effWidth = widthSignal[index]; }\n effWidth = clamp(effWidth, 0.0f, 1.0f);\n\n let wet1 = effWet * (effWidth / 2.0f + 0.5f);\n let wet2 = effWet * ((1.0f - effWidth) / 2.0f);\n\n var inputL = inputChannels[index];\n if (is_nan_or_inf(inputL)) { inputL = 0.0f; }\n var inputR = inputChannels[numSamples + index];\n if (is_nan_or_inf(inputR)) { inputR = 0.0f; }\n\n let inputVal = (inputL + inputR) * fixedgain;\n\n // Left channel (Filters 0-11)\n var combSumL = 0.0f;\n for (var j = 0u; j < 8u; j = j + 1u) {\n let size = sizes[j];\n let startOffset = startOffsets[j];\n let bufferIndex = bufIndices[j];\n var fs = filterStores[j];\n\n var output = state[startOffset + bufferIndex];\n if (is_nan_or_inf(output)) { output = 0.0f; }\n\n fs = output * (1.0f - effDamping) + fs * effDamping;\n var nextVal = inputVal + fs * effRoomSize;\n if (is_nan_or_inf(nextVal)) { nextVal = 0.0f; }\n state[startOffset + bufferIndex] = clamp(nextVal, -4.0f, 4.0f);\n\n bufIndices[j] = (bufferIndex + 1u) % size;\n filterStores[j] = fs;\n combSumL = combSumL + output;\n }\n var revOutL = combSumL;\n for (var j = 0u; j < 4u; j = j + 1u) {\n let f = 8u + j;\n let size = sizes[f];\n let startOffset = startOffsets[f];\n let bufferIndex = bufIndices[f];\n\n var bufOut = state[startOffset + bufferIndex];\n if (is_nan_or_inf(bufOut)) { bufOut = 0.0f; }\n\n var nextVal = revOutL + bufOut * 0.5f;\n if (is_nan_or_inf(nextVal)) { nextVal = 0.0f; }\n state[startOffset + bufferIndex] = clamp(nextVal, -4.0f, 4.0f);\n\n let output = bufOut - revOutL;\n bufIndices[f] = (bufferIndex + 1u) % size;\n revOutL = output;\n }\n\n // Right channel (Filters 12-23)\n var combSumR = 0.0f;\n for (var j = 0u; j < 8u; j = j + 1u) {\n let f = 12u + j;\n let size = sizes[f];\n let startOffset = startOffsets[f];\n let bufferIndex = bufIndices[f];\n var fs = filterStores[f];\n\n var output = state[startOffset + bufferIndex];\n if (is_nan_or_inf(output)) { output = 0.0f; }\n\n fs = output * (1.0f - effDamping) + fs * effDamping;\n var nextVal = inputVal + fs * effRoomSize;\n if (is_nan_or_inf(nextVal)) { nextVal = 0.0f; }\n state[startOffset + bufferIndex] = clamp(nextVal, -4.0f, 4.0f);\n\n bufIndices[f] = (bufferIndex + 1u) % size;\n filterStores[f] = fs;\n combSumR = combSumR + output;\n }\n var revOutR = combSumR;\n for (var j = 0u; j < 4u; j = j + 1u) {\n let f = 20u + j;\n let size = sizes[f];\n let startOffset = startOffsets[f];\n let bufferIndex = bufIndices[f];\n\n var bufOut = state[startOffset + bufferIndex];\n if (is_nan_or_inf(bufOut)) { bufOut = 0.0f; }\n\n var nextVal = revOutR + bufOut * 0.5f;\n if (is_nan_or_inf(nextVal)) { nextVal = 0.0f; }\n state[startOffset + bufferIndex] = clamp(nextVal, -4.0f, 4.0f);\n\n let output = bufOut - revOutR;\n bufIndices[f] = (bufferIndex + 1u) % size;\n revOutR = output;\n }\n\n var outL = inputL * effDry + revOutL * wet1 + revOutR * wet2;\n var outR = inputR * effDry + revOutR * wet1 + revOutL * wet2;\n if (is_nan_or_inf(outL)) { outL = 0.0f; }\n if (is_nan_or_inf(outR)) { outR = 0.0f; }\n\n if (outL > 1.0f) { outL = 1.0f; } else if (outL < -1.0f) { outL = -1.0f; }\n else if (outL > 0.9f) { outL = 0.9f + 0.1f * tanh((outL - 0.9f) / 0.1f); }\n else if (outL < -0.9f) { outL = -0.9f + 0.1f * tanh((outL + 0.9f) / 0.1f); }\n\n if (outR > 1.0f) { outR = 1.0f; } else if (outR < -1.0f) { outR = -1.0f; }\n else if (outR > 0.9f) { outR = 0.9f + 0.1f * tanh((outR - 0.9f) / 0.1f); }\n else if (outR < -0.9f) { outR = -0.9f + 0.1f * tanh((outR + 0.9f) / 0.1f); }\n\n outputChannels[index] = outL;\n outputChannels[numSamples + index] = outR;\n }\n }\n\n for (var f = 0u; f < 24u; f = f + 1u) {\n let metaOffset = f * 4u;\n state[metaOffset + 2u] = f32(bufIndices[f]);\n state[metaOffset + 3u] = filterStores[f];\n }\n}\n`;\nconst leftCombLengths = [\n\t1116,\n\t1188,\n\t1277,\n\t1356,\n\t1422,\n\t1491,\n\t1557,\n\t1617\n];\nconst leftAllpassLengths = [\n\t556,\n\t441,\n\t341,\n\t225\n];\nconst reverbAudioProcessor = async (channels, sampleRate, virtualMedia, ctx) => {\n\tif (!ctx?.device) throw new Error(\"GPUDevice is required for WebGPU Reverb.\");\n\tconst op = virtualMedia.operation || {};\n\tconst numChannels = channels.length;\n\tif (numChannels === 0) return;\n\tconst numSamples = channels[0].length;\n\tif (numSamples === 0) return;\n\tconst roomSizeInternal = Math.max(0, Math.min(resolveNumber(op.roomSize, .5), .98));\n\tconst dampingInternal = Math.max(0, Math.min(resolveNumber(op.damping, .5), 1));\n\tconst wetInternal = Math.max(0, Math.min(resolveNumber(op.wet, .3), 1));\n\tconst dryInternal = Math.max(0, Math.min(resolveNumber(op.dry, 1), 1));\n\tconst widthInternal = Math.max(0, Math.min(resolveNumber(op.width, 1), 1));\n\tconst hasRoomSizeSig = isHandleConnected(op, \"roomSizeHandleId\") ? 1 : 0;\n\tconst hasDampingSig = isHandleConnected(op, \"dampingHandleId\") ? 1 : 0;\n\tconst hasWetSig = isHandleConnected(op, \"wetHandleId\") ? 1 : 0;\n\tconst hasDrySig = isHandleConnected(op, \"dryHandleId\") ? 1 : 0;\n\tconst hasWidthSig = isHandleConnected(op, \"widthHandleId\") ? 1 : 0;\n\tconst scale = sampleRate / 44100;\n\tconst nodeId = op.id || \"audio-reverb\";\n\tconst frame = ctx.frame ?? 0;\n\tconst fps = ctx.fps ?? 24;\n\tconst sizesL = [];\n\tconst sizesR = [];\n\tleftCombLengths.forEach((len) => {\n\t\tsizesL.push(Math.round(len * scale));\n\t});\n\tleftCombLengths.forEach((len) => {\n\t\tsizesR.push(Math.round((len + 23) * scale));\n\t});\n\tleftAllpassLengths.forEach((len) => {\n\t\tsizesL.push(Math.round(len * scale));\n\t});\n\tleftAllpassLengths.forEach((len) => {\n\t\tsizesR.push(Math.round((len + 23) * scale));\n\t});\n\tconst totalMetadataFloats = 96;\n\tlet totalDelaySamples = 0;\n\tconst filterSizes = [...sizesL, ...sizesR];\n\tfor (const size of filterSizes) totalDelaySamples += size;\n\tconst stateFloatCount = totalMetadataFloats + totalDelaySamples;\n\tconst metaData = new Float32Array(totalMetadataFloats);\n\tlet currentOffset = totalMetadataFloats;\n\tfor (let f = 0; f < 24; f++) {\n\t\tconst size = filterSizes[f];\n\t\tmetaData[f * 4] = size;\n\t\tmetaData[f * 4 + 1] = currentOffset;\n\t\tmetaData[f * 4 + 2] = 0;\n\t\tmetaData[f * 4 + 3] = 0;\n\t\tcurrentOffset += size;\n\t}\n\tawait WebGPUAudioProcessor.process(ctx.device, nodeId, channels, sampleRate, virtualMedia, frame, fps, REVERB_SHADER_TEMPLATE, () => [\n\t\tsampleRate,\n\t\troomSizeInternal,\n\t\tdampingInternal,\n\t\twetInternal,\n\t\tdryInternal,\n\t\twidthInternal,\n\t\thasRoomSizeSig,\n\t\thasDampingSig,\n\t\thasWetSig,\n\t\thasDrySig,\n\t\thasWidthSig,\n\t\t0,\n\t\tframe,\n\t\tnumSamples,\n\t\tnumChannels,\n\t\t0\n\t], 16, stateFloatCount, ctx?.renderId, true, ctx?.elapsedMs, ctx?.durationMs, metaData, void 0, PARAM_ORDER);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ audioProcessor: reverbAudioProcessor });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-DCFjIwTB.mjs.map"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"renderer-kOlfYLtu.mjs","names":[],"sources":["../../../nodes/node-audio-reverb/dist/renderers-DCFjIwTB.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { isHandleConnected, resolveNumber } from \"@framefields/node-sdk\";\nimport { WebGPUAudioProcessor } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/audio-processor.ts\nconst PARAM_ORDER = [\n\t\"roomSize\",\n\t\"damping\",\n\t\"wet\",\n\t\"dry\",\n\t\"width\"\n];\nconst REVERB_SHADER_TEMPLATE = () => `\nstruct Uniforms {\n sampleRate : f32,\n roomSize : f32,\n damping : f32,\n wet : f32,\n dry : f32,\n width : f32,\n hasRoomSizeSig : f32,\n hasDampingSig : f32,\n hasWetSig : f32,\n hasDrySig : f32,\n hasWidthSig : f32,\n baseTime : f32,\n frame : f32,\n numSamples : f32,\n numChannels : f32,\n pad1 : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : Uniforms;\n@group(0) @binding(1) var<storage, read> inputChannels : array<f32>;\n@group(0) @binding(2) var<storage, read_write> outputChannels : array<f32>;\n@group(0) @binding(3) var<storage, read_write> state : array<f32>;\n@group(0) @binding(4) var<storage, read> roomSizeSignal : array<f32>;\n@group(0) @binding(5) var<storage, read> dampingSignal : array<f32>;\n@group(0) @binding(6) var<storage, read> wetSignal : array<f32>;\n@group(0) @binding(7) var<storage, read> drySignal : array<f32>;\n@group(0) @binding(8) var<storage, read> widthSignal : array<f32>;\n\nfn tanh(x: f32) -> f32 {\n let exp2x = exp(2.0f * x);\n return (exp2x - 1.0f) / (exp2x + 1.0f);\n}\n\nfn is_nan_or_inf(v: f32) -> bool {\n return (v != v) || (abs(v) > 3.402823466e+38f);\n}\n\n@compute @workgroup_size(1)\nfn main(@builtin(global_invocation_id) gid : vec3<u32>) {\n if (gid.x != 0u) { return; }\n\n let numSamples = u32(u.numSamples);\n let numChannels = u32(u.numChannels);\n let fixedgain: f32 = 0.015f;\n\n var bufIndices: array<u32, 24>;\n var filterStores: array<f32, 24>;\n var sizes: array<u32, 24>;\n var startOffsets: array<u32, 24>;\n\n for (var f = 0u; f < 24u; f = f + 1u) {\n let metaOffset = f * 4u;\n sizes[f] = u32(state[metaOffset]);\n startOffsets[f] = u32(state[metaOffset + 1u]);\n bufIndices[f] = u32(state[metaOffset + 2u]);\n var fs = state[metaOffset + 3u];\n if (is_nan_or_inf(fs)) { fs = 0.0f; }\n filterStores[f] = fs;\n }\n\n if (numChannels == 1u) {\n for (var index = 0u; index < numSamples; index = index + 1u) {\n // Dynamic parameter signal evaluation\n var effRoomSize = u.roomSize;\n if (u.hasRoomSizeSig > 0.5f) { effRoomSize = roomSizeSignal[index]; }\n effRoomSize = clamp(effRoomSize, 0.0f, 0.98f);\n\n var effDamping = u.damping;\n if (u.hasDampingSig > 0.5f) { effDamping = dampingSignal[index]; }\n effDamping = clamp(effDamping, 0.0f, 1.0f) * 0.4f;\n\n var effWet = u.wet;\n if (u.hasWetSig > 0.5f) { effWet = wetSignal[index]; }\n effWet = clamp(effWet, 0.0f, 1.0f) * 3.0f;\n\n var effDry = u.dry;\n if (u.hasDrySig > 0.5f) { effDry = drySignal[index]; }\n effDry = clamp(effDry, 0.0f, 2.0f);\n\n var x = inputChannels[index];\n if (is_nan_or_inf(x)) { x = 0.0f; }\n let inputVal = x * fixedgain;\n\n var combSum = 0.0f;\n for (var j = 0u; j < 8u; j = j + 1u) {\n let size = sizes[j];\n let startOffset = startOffsets[j];\n let bufferIndex = bufIndices[j];\n var fs = filterStores[j];\n\n var output = state[startOffset + bufferIndex];\n if (is_nan_or_inf(output)) { output = 0.0f; }\n\n fs = output * (1.0f - effDamping) + fs * effDamping;\n var nextVal = inputVal + fs * effRoomSize;\n if (is_nan_or_inf(nextVal)) { nextVal = 0.0f; }\n state[startOffset + bufferIndex] = clamp(nextVal, -4.0f, 4.0f);\n\n bufIndices[j] = (bufferIndex + 1u) % size;\n filterStores[j] = fs;\n combSum = combSum + output;\n }\n\n var revOut = combSum;\n for (var j = 0u; j < 4u; j = j + 1u) {\n let f = 8u + j;\n let size = sizes[f];\n let startOffset = startOffsets[f];\n let bufferIndex = bufIndices[f];\n\n var bufOut = state[startOffset + bufferIndex];\n if (is_nan_or_inf(bufOut)) { bufOut = 0.0f; }\n\n var nextVal = revOut + bufOut * 0.5f;\n if (is_nan_or_inf(nextVal)) { nextVal = 0.0f; }\n state[startOffset + bufferIndex] = clamp(nextVal, -4.0f, 4.0f);\n\n let output = bufOut - revOut;\n bufIndices[f] = (bufferIndex + 1u) % size;\n revOut = output;\n }\n\n var outVal = x * effDry + revOut * effWet;\n if (is_nan_or_inf(outVal)) { outVal = 0.0f; }\n\n if (outVal > 1.0f) { outVal = 1.0f; }\n else if (outVal < -1.0f) { outVal = -1.0f; }\n else if (outVal > 0.9f) { outVal = 0.9f + 0.1f * tanh((outVal - 0.9f) / 0.1f); }\n else if (outVal < -0.9f) { outVal = -0.9f + 0.1f * tanh((outVal + 0.9f) / 0.1f); }\n\n outputChannels[index] = outVal;\n }\n } else {\n for (var index = 0u; index < numSamples; index = index + 1u) {\n // Dynamic parameter signal evaluation\n var effRoomSize = u.roomSize;\n if (u.hasRoomSizeSig > 0.5f) { effRoomSize = roomSizeSignal[index]; }\n effRoomSize = clamp(effRoomSize, 0.0f, 0.98f);\n\n var effDamping = u.damping;\n if (u.hasDampingSig > 0.5f) { effDamping = dampingSignal[index]; }\n effDamping = clamp(effDamping, 0.0f, 1.0f) * 0.4f;\n\n var effWet = u.wet;\n if (u.hasWetSig > 0.5f) { effWet = wetSignal[index]; }\n effWet = clamp(effWet, 0.0f, 1.0f) * 3.0f;\n\n var effDry = u.dry;\n if (u.hasDrySig > 0.5f) { effDry = drySignal[index]; }\n effDry = clamp(effDry, 0.0f, 2.0f);\n\n var effWidth = u.width;\n if (u.hasWidthSig > 0.5f) { effWidth = widthSignal[index]; }\n effWidth = clamp(effWidth, 0.0f, 1.0f);\n\n let wet1 = effWet * (effWidth / 2.0f + 0.5f);\n let wet2 = effWet * ((1.0f - effWidth) / 2.0f);\n\n var inputL = inputChannels[index];\n if (is_nan_or_inf(inputL)) { inputL = 0.0f; }\n var inputR = inputChannels[numSamples + index];\n if (is_nan_or_inf(inputR)) { inputR = 0.0f; }\n\n let inputVal = (inputL + inputR) * fixedgain;\n\n // Left channel (Filters 0-11)\n var combSumL = 0.0f;\n for (var j = 0u; j < 8u; j = j + 1u) {\n let size = sizes[j];\n let startOffset = startOffsets[j];\n let bufferIndex = bufIndices[j];\n var fs = filterStores[j];\n\n var output = state[startOffset + bufferIndex];\n if (is_nan_or_inf(output)) { output = 0.0f; }\n\n fs = output * (1.0f - effDamping) + fs * effDamping;\n var nextVal = inputVal + fs * effRoomSize;\n if (is_nan_or_inf(nextVal)) { nextVal = 0.0f; }\n state[startOffset + bufferIndex] = clamp(nextVal, -4.0f, 4.0f);\n\n bufIndices[j] = (bufferIndex + 1u) % size;\n filterStores[j] = fs;\n combSumL = combSumL + output;\n }\n var revOutL = combSumL;\n for (var j = 0u; j < 4u; j = j + 1u) {\n let f = 8u + j;\n let size = sizes[f];\n let startOffset = startOffsets[f];\n let bufferIndex = bufIndices[f];\n\n var bufOut = state[startOffset + bufferIndex];\n if (is_nan_or_inf(bufOut)) { bufOut = 0.0f; }\n\n var nextVal = revOutL + bufOut * 0.5f;\n if (is_nan_or_inf(nextVal)) { nextVal = 0.0f; }\n state[startOffset + bufferIndex] = clamp(nextVal, -4.0f, 4.0f);\n\n let output = bufOut - revOutL;\n bufIndices[f] = (bufferIndex + 1u) % size;\n revOutL = output;\n }\n\n // Right channel (Filters 12-23)\n var combSumR = 0.0f;\n for (var j = 0u; j < 8u; j = j + 1u) {\n let f = 12u + j;\n let size = sizes[f];\n let startOffset = startOffsets[f];\n let bufferIndex = bufIndices[f];\n var fs = filterStores[f];\n\n var output = state[startOffset + bufferIndex];\n if (is_nan_or_inf(output)) { output = 0.0f; }\n\n fs = output * (1.0f - effDamping) + fs * effDamping;\n var nextVal = inputVal + fs * effRoomSize;\n if (is_nan_or_inf(nextVal)) { nextVal = 0.0f; }\n state[startOffset + bufferIndex] = clamp(nextVal, -4.0f, 4.0f);\n\n bufIndices[f] = (bufferIndex + 1u) % size;\n filterStores[f] = fs;\n combSumR = combSumR + output;\n }\n var revOutR = combSumR;\n for (var j = 0u; j < 4u; j = j + 1u) {\n let f = 20u + j;\n let size = sizes[f];\n let startOffset = startOffsets[f];\n let bufferIndex = bufIndices[f];\n\n var bufOut = state[startOffset + bufferIndex];\n if (is_nan_or_inf(bufOut)) { bufOut = 0.0f; }\n\n var nextVal = revOutR + bufOut * 0.5f;\n if (is_nan_or_inf(nextVal)) { nextVal = 0.0f; }\n state[startOffset + bufferIndex] = clamp(nextVal, -4.0f, 4.0f);\n\n let output = bufOut - revOutR;\n bufIndices[f] = (bufferIndex + 1u) % size;\n revOutR = output;\n }\n\n var outL = inputL * effDry + revOutL * wet1 + revOutR * wet2;\n var outR = inputR * effDry + revOutR * wet1 + revOutL * wet2;\n if (is_nan_or_inf(outL)) { outL = 0.0f; }\n if (is_nan_or_inf(outR)) { outR = 0.0f; }\n\n if (outL > 1.0f) { outL = 1.0f; } else if (outL < -1.0f) { outL = -1.0f; }\n else if (outL > 0.9f) { outL = 0.9f + 0.1f * tanh((outL - 0.9f) / 0.1f); }\n else if (outL < -0.9f) { outL = -0.9f + 0.1f * tanh((outL + 0.9f) / 0.1f); }\n\n if (outR > 1.0f) { outR = 1.0f; } else if (outR < -1.0f) { outR = -1.0f; }\n else if (outR > 0.9f) { outR = 0.9f + 0.1f * tanh((outR - 0.9f) / 0.1f); }\n else if (outR < -0.9f) { outR = -0.9f + 0.1f * tanh((outR + 0.9f) / 0.1f); }\n\n outputChannels[index] = outL;\n outputChannels[numSamples + index] = outR;\n }\n }\n\n for (var f = 0u; f < 24u; f = f + 1u) {\n let metaOffset = f * 4u;\n state[metaOffset + 2u] = f32(bufIndices[f]);\n state[metaOffset + 3u] = filterStores[f];\n }\n}\n`;\nconst leftCombLengths = [\n\t1116,\n\t1188,\n\t1277,\n\t1356,\n\t1422,\n\t1491,\n\t1557,\n\t1617\n];\nconst leftAllpassLengths = [\n\t556,\n\t441,\n\t341,\n\t225\n];\nconst reverbAudioProcessor = async (channels, sampleRate, virtualMedia, ctx) => {\n\tif (!ctx?.device) throw new Error(\"GPUDevice is required for WebGPU Reverb.\");\n\tconst op = virtualMedia.operation || {};\n\tconst numChannels = channels.length;\n\tif (numChannels === 0) return;\n\tconst numSamples = channels[0].length;\n\tif (numSamples === 0) return;\n\tconst roomSizeInternal = Math.max(0, Math.min(resolveNumber(op.roomSize, .5), .98));\n\tconst dampingInternal = Math.max(0, Math.min(resolveNumber(op.damping, .5), 1));\n\tconst wetInternal = Math.max(0, Math.min(resolveNumber(op.wet, .3), 1));\n\tconst dryInternal = Math.max(0, Math.min(resolveNumber(op.dry, 1), 1));\n\tconst widthInternal = Math.max(0, Math.min(resolveNumber(op.width, 1), 1));\n\tconst hasRoomSizeSig = isHandleConnected(op, \"roomSizeHandleId\") ? 1 : 0;\n\tconst hasDampingSig = isHandleConnected(op, \"dampingHandleId\") ? 1 : 0;\n\tconst hasWetSig = isHandleConnected(op, \"wetHandleId\") ? 1 : 0;\n\tconst hasDrySig = isHandleConnected(op, \"dryHandleId\") ? 1 : 0;\n\tconst hasWidthSig = isHandleConnected(op, \"widthHandleId\") ? 1 : 0;\n\tconst scale = sampleRate / 44100;\n\tconst nodeId = op.id || \"audio-reverb\";\n\tconst frame = ctx.frame ?? 0;\n\tconst fps = ctx.fps ?? 24;\n\tconst sizesL = [];\n\tconst sizesR = [];\n\tleftCombLengths.forEach((len) => {\n\t\tsizesL.push(Math.round(len * scale));\n\t});\n\tleftCombLengths.forEach((len) => {\n\t\tsizesR.push(Math.round((len + 23) * scale));\n\t});\n\tleftAllpassLengths.forEach((len) => {\n\t\tsizesL.push(Math.round(len * scale));\n\t});\n\tleftAllpassLengths.forEach((len) => {\n\t\tsizesR.push(Math.round((len + 23) * scale));\n\t});\n\tconst totalMetadataFloats = 96;\n\tlet totalDelaySamples = 0;\n\tconst filterSizes = [...sizesL, ...sizesR];\n\tfor (const size of filterSizes) totalDelaySamples += size;\n\tconst stateFloatCount = totalMetadataFloats + totalDelaySamples;\n\tconst metaData = new Float32Array(totalMetadataFloats);\n\tlet currentOffset = totalMetadataFloats;\n\tfor (let f = 0; f < 24; f++) {\n\t\tconst size = filterSizes[f];\n\t\tmetaData[f * 4] = size;\n\t\tmetaData[f * 4 + 1] = currentOffset;\n\t\tmetaData[f * 4 + 2] = 0;\n\t\tmetaData[f * 4 + 3] = 0;\n\t\tcurrentOffset += size;\n\t}\n\tawait WebGPUAudioProcessor.process(ctx.device, nodeId, channels, sampleRate, virtualMedia, frame, fps, REVERB_SHADER_TEMPLATE, () => [\n\t\tsampleRate,\n\t\troomSizeInternal,\n\t\tdampingInternal,\n\t\twetInternal,\n\t\tdryInternal,\n\t\twidthInternal,\n\t\thasRoomSizeSig,\n\t\thasDampingSig,\n\t\thasWetSig,\n\t\thasDrySig,\n\t\thasWidthSig,\n\t\t0,\n\t\tframe,\n\t\tnumSamples,\n\t\tnumChannels,\n\t\t0\n\t], 16, stateFloatCount, ctx?.renderId, true, ctx?.elapsedMs, ctx?.durationMs, metaData, void 0, PARAM_ORDER);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ audioProcessor: reverbAudioProcessor });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-DCFjIwTB.mjs.map"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { n as defineRenderer } from "./renderer-
|
|
2
|
-
import { a as createFullscreenPipeline, l as fragmentBindGroupLayout, o as drawChildToTexture, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL } from "./gpu-
|
|
1
|
+
import { n as defineRenderer } from "./renderer-BgmO1Dzw.mjs";
|
|
2
|
+
import { a as createFullscreenPipeline, l as fragmentBindGroupLayout, o as drawChildToTexture, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL } from "./gpu-Bb4WmYYH.mjs";
|
|
3
3
|
|
|
4
4
|
//#region ../../nodes/node-kenburns/dist/renderers-Ca3wLKBl.mjs
|
|
5
5
|
const easeIn = (t) => t * t;
|
|
@@ -261,4 +261,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: KenBurnsWebGPURenderer
|
|
|
261
261
|
|
|
262
262
|
//#endregion
|
|
263
263
|
export { renderers_default as t };
|
|
264
|
-
//# sourceMappingURL=renderer-
|
|
264
|
+
//# sourceMappingURL=renderer-l1qJE4z-.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-CPl1wOrj.mjs","names":[],"sources":["../../../nodes/node-kenburns/dist/renderers-Ca3wLKBl.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, fragmentBindGroupLayout } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst easeIn = (t) => t * t;\nconst easeOut = (t) => t * (2 - t);\nconst easeInOut = (t) => t < .5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\nconst springEase = (t) => {\n\tconst c4 = 2 * Math.PI / 3;\n\treturn t === 0 ? 0 : t === 1 ? 1 : 2 ** (-10 * t) * Math.sin((t * 10 - .75) * c4) + 1;\n};\nconst applyEasing = (t, easing) => {\n\tswitch (easing) {\n\t\tcase \"ease-in\": return easeIn(t);\n\t\tcase \"ease-out\": return easeOut(t);\n\t\tcase \"ease-in-out\": return easeInOut(t);\n\t\tcase \"spring\": return springEase(t);\n\t\tdefault: return t;\n\t}\n};\nconst catmullRom = (p0, p1, p2, p3, t) => {\n\tconst t2 = t * t;\n\tconst t3 = t2 * t;\n\treturn .5 * (2 * p1 + (-p0 + p2) * t + (2 * p0 - 5 * p1 + 4 * p2 - p3) * t2 + (-p0 + 3 * p1 - 3 * p2 + p3) * t3);\n};\nfunction interpolateKenBurns(keyframes, timeMs, movementStyle = \"spline\") {\n\tif (keyframes.length === 0) return {\n\t\tx: 50,\n\t\ty: 50,\n\t\tscale: 1\n\t};\n\tif (keyframes.length === 1) {\n\t\tconst kf = keyframes[0];\n\t\treturn {\n\t\t\tx: kf.x ?? 50,\n\t\t\ty: kf.y ?? 50,\n\t\t\tscale: kf.scale ?? 1\n\t\t};\n\t}\n\tlet elapsed = 0;\n\tfor (let i = 0; i < keyframes.length; i++) {\n\t\tconst kf = keyframes[i];\n\t\tconst hold = kf.holdMs ?? 0;\n\t\tconst dur = kf.durationMs ?? 0;\n\t\tif (timeMs <= elapsed + hold) return {\n\t\t\tx: kf.x ?? 50,\n\t\t\ty: kf.y ?? 50,\n\t\t\tscale: kf.scale ?? 1\n\t\t};\n\t\telapsed += hold;\n\t\tif (i < keyframes.length - 1 && dur > 0) {\n\t\t\tif (timeMs <= elapsed + dur) {\n\t\t\t\tconst rawT = (timeMs - elapsed) / dur;\n\t\t\t\tconst t = applyEasing(Math.max(0, Math.min(1, rawT)), kf.easing);\n\t\t\t\tconst next = keyframes[i + 1];\n\t\t\t\tif (movementStyle === \"spline\") {\n\t\t\t\t\tconst prev = keyframes[i - 1] ?? kf;\n\t\t\t\t\tconst afterNext = keyframes[i + 2] ?? next;\n\t\t\t\t\treturn {\n\t\t\t\t\t\tx: catmullRom(prev.x ?? 50, kf.x ?? 50, next.x ?? 50, afterNext.x ?? 50, t),\n\t\t\t\t\t\ty: catmullRom(prev.y ?? 50, kf.y ?? 50, next.y ?? 50, afterNext.y ?? 50, t),\n\t\t\t\t\t\tscale: catmullRom(prev.scale ?? 1, kf.scale ?? 1, next.scale ?? 1, afterNext.scale ?? 1, t)\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tx: (kf.x ?? 50) + ((next.x ?? 50) - (kf.x ?? 50)) * t,\n\t\t\t\t\ty: (kf.y ?? 50) + ((next.y ?? 50) - (kf.y ?? 50)) * t,\n\t\t\t\t\tscale: (kf.scale ?? 1) + ((next.scale ?? 1) - (kf.scale ?? 1)) * t\n\t\t\t\t};\n\t\t\t}\n\t\t\telapsed += dur;\n\t\t}\n\t}\n\tconst last = keyframes[keyframes.length - 1];\n\treturn {\n\t\tx: last.x ?? 50,\n\t\ty: last.y ?? 50,\n\t\tscale: last.scale ?? 1\n\t};\n}\nfunction calculateSrcRect(state, sourceWidth, sourceHeight, targetAspectRatio) {\n\tlet baseBoxW_pct = 100;\n\tlet baseBoxH_pct = 100;\n\tif (targetAspectRatio !== \"input\") {\n\t\tconst parts = targetAspectRatio.split(\":\");\n\t\tconst tW = Number(parts[0]);\n\t\tconst tH = Number(parts[1]);\n\t\tif (!Number.isNaN(tW) && !Number.isNaN(tH) && tW > 0 && tH > 0) {\n\t\t\tconst desiredAR = tW / tH;\n\t\t\tconst sourceAR = sourceWidth / sourceHeight;\n\t\t\tif (sourceAR > desiredAR) {\n\t\t\t\tbaseBoxH_pct = 100;\n\t\t\t\tbaseBoxW_pct = desiredAR / sourceAR * 100;\n\t\t\t} else {\n\t\t\t\tbaseBoxW_pct = 100;\n\t\t\t\tbaseBoxH_pct = sourceAR / desiredAR * 100;\n\t\t\t}\n\t\t}\n\t}\n\tconst baseBoxPxW = baseBoxW_pct / 100 * sourceWidth;\n\tconst baseBoxPxH = baseBoxH_pct / 100 * sourceHeight;\n\tconst clampedScale = Math.max(state.scale, 1);\n\tconst currentBoxPxW = baseBoxPxW / clampedScale;\n\tconst currentBoxPxH = baseBoxPxH / clampedScale;\n\tconst rawFocalX = state.x / 100 * sourceWidth;\n\tconst rawFocalY = state.y / 100 * sourceHeight;\n\tconst halfBoxW = currentBoxPxW / 2;\n\tconst halfBoxH = currentBoxPxH / 2;\n\tconst focalX = Math.max(halfBoxW, Math.min(sourceWidth - halfBoxW, rawFocalX));\n\tconst focalY = Math.max(halfBoxH, Math.min(sourceHeight - halfBoxH, rawFocalY));\n\treturn {\n\t\tx: focalX - halfBoxW,\n\t\ty: focalY - halfBoxH,\n\t\twidth: currentBoxPxW,\n\t\theight: currentBoxPxH\n\t};\n}\nconst motionBlurWgsl = `\nstruct MotionBlurUniforms {\n\tprev_origin : vec2<f32>,\n\tprev_size : vec2<f32>,\n\tcurr_origin : vec2<f32>,\n\tcurr_size : vec2<f32>,\n\tsamples : f32,\n\tblurSize : f32,\n\tpadding : vec2<f32>,\n};\n\n@group(0) @binding(0) var<uniform> u : MotionBlurUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet uv = in.uv;\n\tlet n = i32(u.samples);\n\t\n\tif (n <= 1) {\n\t\tlet p_curr = u.curr_origin + uv * u.curr_size;\n\t\treturn textureSampleLevel(tex, samp, p_curr, 0.0);\n\t}\n\t\n\tvar color = vec4<f32>(0.0);\n\tfor (var i = 0; i < n; i = i + 1) {\n\t\t// Use blurSize to control the shutter interval width. \n\t\t// t=1.0 is current frame, t=0.0 is previous frame.\n\t\tlet t = 1.0 + (f32(i) / f32(n - 1) - 0.5) * u.blurSize;\n\t\t\n\t\tlet origin = mix(u.prev_origin, u.curr_origin, t);\n\t\tlet size = mix(u.prev_size, u.curr_size, t);\n\t\tlet p_sample = origin + uv * size;\n\t\t\n\t\tcolor += textureSampleLevel(tex, samp, p_sample, 0.0);\n\t}\n\treturn color / f32(n);\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nconst motionBlurData = new Float32Array(12);\nfunction getMotionBlurResources(device, format) {\n\tlet res = deviceResourceCache.get(device);\n\tif (!res) {\n\t\tconst motionBlurUniformLayout = fragmentBindGroupLayout(device, [\"uniform\"]);\n\t\tconst singleTextureLayout = fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]);\n\t\tres = {\n\t\t\tmotionBlurPipeline: createFullscreenPipeline(device, {\n\t\t\t\tlabel: \"MotionBlurPipeline\",\n\t\t\t\tmodule: device.createShaderModule({\n\t\t\t\t\tlabel: \"kenburns_motionblur.wgsl\",\n\t\t\t\t\tcode: motionBlurWgsl\n\t\t\t\t}),\n\t\t\t\tlayouts: [motionBlurUniformLayout, singleTextureLayout],\n\t\t\t\tformat\n\t\t\t}),\n\t\t\tmotionBlurUniformLayout,\n\t\t\tsingleTextureLayout\n\t\t};\n\t\tdeviceResourceCache.set(device, res);\n\t}\n\treturn res;\n}\nconst KenBurnsWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetView, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst { virtualMedia, containerWidth, containerHeight, frame, fps, trimStartOverride, opacity = 1, inheritedSeekOffset = 0 } = props;\n\tconst op = virtualMedia.operation;\n\tif (op?.op !== \"KenBurns\") return;\n\tconst childMedia = virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tconst sourceWidth = op.originalWidth ?? childMedia.metadata?.width ?? virtualMedia.metadata?.width ?? containerWidth ?? targetWidth;\n\tconst sourceHeight = op.originalHeight ?? childMedia.metadata?.height ?? virtualMedia.metadata?.height ?? containerHeight ?? targetHeight;\n\tconst keyframes = op.keyframes ?? [];\n\tconst movementStyle = op.movementStyle ?? \"spline\";\n\tconst targetAspectRatio = op.aspectRatio || \"input\";\n\tconst offsetMs = ((trimStartOverride ?? 0) + inheritedSeekOffset) * 1e3;\n\tconst fpsVal = Math.max(1, fps ?? 30);\n\tconst frameDurationMs = 1e3 / fpsVal;\n\tconst timeMs = offsetMs + (frame ?? 0) / fpsVal * 1e3;\n\tconst prevTimeMs = timeMs - frameDurationMs;\n\tconst state = interpolateKenBurns(keyframes, timeMs, movementStyle);\n\tconst prevState = interpolateKenBurns(keyframes, prevTimeMs, movementStyle);\n\tconst srcRect = calculateSrcRect(state, sourceWidth, sourceHeight, targetAspectRatio);\n\tconst prevSrcRect = calculateSrcRect(prevState, sourceWidth, sourceHeight, targetAspectRatio);\n\tconst dstWidth = containerWidth ?? targetWidth;\n\tconst dstHeight = containerHeight ?? targetHeight;\n\tconst dstRect = {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: dstWidth,\n\t\theight: dstHeight\n\t};\n\tpass.end();\n\tconst { texture: tempTex } = await drawChildToTexture(args, childMedia, {\n\t\twidth: sourceWidth,\n\t\theight: sourceHeight,\n\t\tprops: {\n\t\t\t...props,\n\t\t\tcontainerWidth: sourceWidth,\n\t\t\tcontainerHeight: sourceHeight\n\t\t}\n\t});\n\tconst motionBlurSize = op.motionBlurSize ?? 1.5;\n\tlet blurTex = null;\n\tif (motionBlurSize > 0) {\n\t\tconst { motionBlurPipeline: pipeline, motionBlurUniformLayout: uLayout, singleTextureLayout: tLayout } = getMotionBlurResources(ctx.device, ctx.renderer.format);\n\t\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\t\tmotionBlurData[0] = prevSrcRect.x / sourceWidth;\n\t\tmotionBlurData[1] = prevSrcRect.y / sourceHeight;\n\t\tmotionBlurData[2] = prevSrcRect.width / sourceWidth;\n\t\tmotionBlurData[3] = prevSrcRect.height / sourceHeight;\n\t\tmotionBlurData[4] = srcRect.x / sourceWidth;\n\t\tmotionBlurData[5] = srcRect.y / sourceHeight;\n\t\tmotionBlurData[6] = srcRect.width / sourceWidth;\n\t\tmotionBlurData[7] = srcRect.height / sourceHeight;\n\t\tmotionBlurData[8] = 12;\n\t\tmotionBlurData[9] = motionBlurSize;\n\t\tconst uBuffer = ctx.renderer.getTemporaryBuffer(motionBlurData);\n\t\tblurTex = ctx.renderer.getTemporaryTexture(dstWidth, dstHeight, [\n\t\t\ttargetTexture,\n\t\t\ttempTex,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tdrawFullscreenPass(encoder, blurTex.createView(), pipeline, [ctx.device.createBindGroup({\n\t\t\tlayout: uLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: uBuffer }\n\t\t\t}]\n\t\t}), ctx.renderer.bindGroupCache.getBindGroup(ctx.device, tLayout, tempTex, sampler)]);\n\t}\n\tconst outPass = ctx.renderer.beginFrame(encoder, targetView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, targetWidth, targetHeight, \"load\");\n\tif (blurTex) ctx.renderer.drawTexture(outPass, blurTex, dstRect, { opacity });\n\telse ctx.renderer.drawTextureRegion(outPass, tempTex, srcRect, dstRect, { opacity });\n\targs.pass = outPass;\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: KenBurnsWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-Ca3wLKBl.mjs.map"],"mappings":";;;;AAIA,MAAM,UAAU,MAAM,IAAI;AAC1B,MAAM,WAAW,MAAM,KAAK,IAAI;AAChC,MAAM,aAAa,MAAM,IAAI,KAAK,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,KAAK;AACjE,MAAM,cAAc,MAAM;CACzB,MAAM,KAAK,IAAI,KAAK,KAAK;AACzB,QAAO,MAAM,IAAI,IAAI,MAAM,IAAI,IAAI,MAAM,MAAM,KAAK,KAAK,KAAK,IAAI,KAAK,OAAO,GAAG,GAAG;;AAErF,MAAM,eAAe,GAAG,WAAW;AAClC,SAAQ,QAAR;EACC,KAAK,UAAW,QAAO,OAAO,EAAE;EAChC,KAAK,WAAY,QAAO,QAAQ,EAAE;EAClC,KAAK,cAAe,QAAO,UAAU,EAAE;EACvC,KAAK,SAAU,QAAO,WAAW,EAAE;EACnC,QAAS,QAAO;;;AAGlB,MAAM,cAAc,IAAI,IAAI,IAAI,IAAI,MAAM;CACzC,MAAM,KAAK,IAAI;CACf,MAAM,KAAK,KAAK;AAChB,QAAO,MAAM,IAAI,MAAM,CAAC,KAAK,MAAM,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,MAAM,MAAM,CAAC,KAAK,IAAI,KAAK,IAAI,KAAK,MAAM;;AAE9G,SAAS,oBAAoB,WAAW,QAAQ,gBAAgB,UAAU;AACzE,KAAI,UAAU,WAAW,EAAG,QAAO;EAClC,GAAG;EACH,GAAG;EACH,OAAO;EACP;AACD,KAAI,UAAU,WAAW,GAAG;EAC3B,MAAM,KAAK,UAAU;AACrB,SAAO;GACN,GAAG,GAAG,KAAK;GACX,GAAG,GAAG,KAAK;GACX,OAAO,GAAG,SAAS;GACnB;;CAEF,IAAI,UAAU;AACd,MAAK,IAAI,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;EAC1C,MAAM,KAAK,UAAU;EACrB,MAAM,OAAO,GAAG,UAAU;EAC1B,MAAM,MAAM,GAAG,cAAc;AAC7B,MAAI,UAAU,UAAU,KAAM,QAAO;GACpC,GAAG,GAAG,KAAK;GACX,GAAG,GAAG,KAAK;GACX,OAAO,GAAG,SAAS;GACnB;AACD,aAAW;AACX,MAAI,IAAI,UAAU,SAAS,KAAK,MAAM,GAAG;AACxC,OAAI,UAAU,UAAU,KAAK;IAC5B,MAAM,QAAQ,SAAS,WAAW;IAClC,MAAM,IAAI,YAAY,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,KAAK,CAAC,EAAE,GAAG,OAAO;IAChE,MAAM,OAAO,UAAU,IAAI;AAC3B,QAAI,kBAAkB,UAAU;KAC/B,MAAM,OAAO,UAAU,IAAI,MAAM;KACjC,MAAM,YAAY,UAAU,IAAI,MAAM;AACtC,YAAO;MACN,GAAG,WAAW,KAAK,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,KAAK,IAAI,UAAU,KAAK,IAAI,EAAE;MAC3E,GAAG,WAAW,KAAK,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,KAAK,IAAI,UAAU,KAAK,IAAI,EAAE;MAC3E,OAAO,WAAW,KAAK,SAAS,GAAG,GAAG,SAAS,GAAG,KAAK,SAAS,GAAG,UAAU,SAAS,GAAG,EAAE;MAC3F;;AAEF,WAAO;KACN,IAAI,GAAG,KAAK,QAAQ,KAAK,KAAK,OAAO,GAAG,KAAK,OAAO;KACpD,IAAI,GAAG,KAAK,QAAQ,KAAK,KAAK,OAAO,GAAG,KAAK,OAAO;KACpD,QAAQ,GAAG,SAAS,OAAO,KAAK,SAAS,MAAM,GAAG,SAAS,MAAM;KACjE;;AAEF,cAAW;;;CAGb,MAAM,OAAO,UAAU,UAAU,SAAS;AAC1C,QAAO;EACN,GAAG,KAAK,KAAK;EACb,GAAG,KAAK,KAAK;EACb,OAAO,KAAK,SAAS;EACrB;;AAEF,SAAS,iBAAiB,OAAO,aAAa,cAAc,mBAAmB;CAC9E,IAAI,eAAe;CACnB,IAAI,eAAe;AACnB,KAAI,sBAAsB,SAAS;EAClC,MAAM,QAAQ,kBAAkB,MAAM,IAAI;EAC1C,MAAM,KAAK,OAAO,MAAM,GAAG;EAC3B,MAAM,KAAK,OAAO,MAAM,GAAG;AAC3B,MAAI,CAAC,OAAO,MAAM,GAAG,IAAI,CAAC,OAAO,MAAM,GAAG,IAAI,KAAK,KAAK,KAAK,GAAG;GAC/D,MAAM,YAAY,KAAK;GACvB,MAAM,WAAW,cAAc;AAC/B,OAAI,WAAW,WAAW;AACzB,mBAAe;AACf,mBAAe,YAAY,WAAW;UAChC;AACN,mBAAe;AACf,mBAAe,WAAW,YAAY;;;;CAIzC,MAAM,aAAa,eAAe,MAAM;CACxC,MAAM,aAAa,eAAe,MAAM;CACxC,MAAM,eAAe,KAAK,IAAI,MAAM,OAAO,EAAE;CAC7C,MAAM,gBAAgB,aAAa;CACnC,MAAM,gBAAgB,aAAa;CACnC,MAAM,YAAY,MAAM,IAAI,MAAM;CAClC,MAAM,YAAY,MAAM,IAAI,MAAM;CAClC,MAAM,WAAW,gBAAgB;CACjC,MAAM,WAAW,gBAAgB;CACjC,MAAM,SAAS,KAAK,IAAI,UAAU,KAAK,IAAI,cAAc,UAAU,UAAU,CAAC;CAC9E,MAAM,SAAS,KAAK,IAAI,UAAU,KAAK,IAAI,eAAe,UAAU,UAAU,CAAC;AAC/E,QAAO;EACN,GAAG,SAAS;EACZ,GAAG,SAAS;EACZ,OAAO;EACP,QAAQ;EACR;;AAEF,MAAM,iBAAiB;;;;;;;;;;;;;;EAcrB,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BvB,MAAM,sCAAsC,IAAI,SAAS;AACzD,MAAM,iBAAiB,IAAI,aAAa,GAAG;AAC3C,SAAS,uBAAuB,QAAQ,QAAQ;CAC/C,IAAI,MAAM,oBAAoB,IAAI,OAAO;AACzC,KAAI,CAAC,KAAK;EACT,MAAM,0BAA0B,wBAAwB,QAAQ,CAAC,UAAU,CAAC;EAC5E,MAAM,sBAAsB,wBAAwB,QAAQ,CAAC,WAAW,UAAU,CAAC;AACnF,QAAM;GACL,oBAAoB,yBAAyB,QAAQ;IACpD,OAAO;IACP,QAAQ,OAAO,mBAAmB;KACjC,OAAO;KACP,MAAM;KACN,CAAC;IACF,SAAS,CAAC,yBAAyB,oBAAoB;IACvD;IACA,CAAC;GACF;GACA;GACA;AACD,sBAAoB,IAAI,QAAQ,IAAI;;AAErC,QAAO;;AAER,MAAM,yBAAyB,OAAO,SAAS;CAC9C,MAAM,EAAE,KAAK,SAAS,MAAM,YAAY,eAAe,aAAa,cAAc,UAAU;CAC5F,MAAM,EAAE,cAAc,gBAAgB,iBAAiB,OAAO,KAAK,mBAAmB,UAAU,GAAG,sBAAsB,MAAM;CAC/H,MAAM,KAAK,aAAa;AACxB,KAAI,IAAI,OAAO,WAAY;CAC3B,MAAM,aAAa,aAAa,WAAW;AAC3C,KAAI,CAAC,WAAY;CACjB,MAAM,cAAc,GAAG,iBAAiB,WAAW,UAAU,SAAS,aAAa,UAAU,SAAS,kBAAkB;CACxH,MAAM,eAAe,GAAG,kBAAkB,WAAW,UAAU,UAAU,aAAa,UAAU,UAAU,mBAAmB;CAC7H,MAAM,YAAY,GAAG,aAAa,EAAE;CACpC,MAAM,gBAAgB,GAAG,iBAAiB;CAC1C,MAAM,oBAAoB,GAAG,eAAe;CAC5C,MAAM,aAAa,qBAAqB,KAAK,uBAAuB;CACpE,MAAM,SAAS,KAAK,IAAI,GAAG,OAAO,GAAG;CACrC,MAAM,kBAAkB,MAAM;CAC9B,MAAM,SAAS,YAAY,SAAS,KAAK,SAAS;CAClD,MAAM,aAAa,SAAS;CAC5B,MAAM,QAAQ,oBAAoB,WAAW,QAAQ,cAAc;CACnE,MAAM,YAAY,oBAAoB,WAAW,YAAY,cAAc;CAC3E,MAAM,UAAU,iBAAiB,OAAO,aAAa,cAAc,kBAAkB;CACrF,MAAM,cAAc,iBAAiB,WAAW,aAAa,cAAc,kBAAkB;CAC7F,MAAM,WAAW,kBAAkB;CACnC,MAAM,YAAY,mBAAmB;CACrC,MAAM,UAAU;EACf,GAAG;EACH,GAAG;EACH,OAAO;EACP,QAAQ;EACR;AACD,MAAK,KAAK;CACV,MAAM,EAAE,SAAS,YAAY,MAAM,mBAAmB,MAAM,YAAY;EACvE,OAAO;EACP,QAAQ;EACR,OAAO;GACN,GAAG;GACH,gBAAgB;GAChB,iBAAiB;GACjB;EACD,CAAC;CACF,MAAM,iBAAiB,GAAG,kBAAkB;CAC5C,IAAI,UAAU;AACd,KAAI,iBAAiB,GAAG;EACvB,MAAM,EAAE,oBAAoB,UAAU,yBAAyB,SAAS,qBAAqB,YAAY,uBAAuB,IAAI,QAAQ,IAAI,SAAS,OAAO;EAChK,MAAM,UAAU,IAAI,SAAS,aAAa,WAAW,IAAI,OAAO;AAChE,iBAAe,KAAK,YAAY,IAAI;AACpC,iBAAe,KAAK,YAAY,IAAI;AACpC,iBAAe,KAAK,YAAY,QAAQ;AACxC,iBAAe,KAAK,YAAY,SAAS;AACzC,iBAAe,KAAK,QAAQ,IAAI;AAChC,iBAAe,KAAK,QAAQ,IAAI;AAChC,iBAAe,KAAK,QAAQ,QAAQ;AACpC,iBAAe,KAAK,QAAQ,SAAS;AACrC,iBAAe,KAAK;AACpB,iBAAe,KAAK;EACpB,MAAM,UAAU,IAAI,SAAS,mBAAmB,eAAe;AAC/D,YAAU,IAAI,SAAS,oBAAoB,UAAU,WAAW;GAC/D;GACA;GACA,GAAG,MAAM,mBAAmB,EAAE;GAC9B,CAAC;AACF,qBAAmB,SAAS,QAAQ,YAAY,EAAE,UAAU,CAAC,IAAI,OAAO,gBAAgB;GACvF,QAAQ;GACR,SAAS,CAAC;IACT,SAAS;IACT,UAAU,EAAE,QAAQ,SAAS;IAC7B,CAAC;GACF,CAAC,EAAE,IAAI,SAAS,eAAe,aAAa,IAAI,QAAQ,SAAS,SAAS,QAAQ,CAAC,CAAC;;CAEtF,MAAM,UAAU,IAAI,SAAS,WAAW,SAAS,YAAY;EAC5D,GAAG;EACH,GAAG;EACH,GAAG;EACH,GAAG;EACH,EAAE,aAAa,cAAc,OAAO;AACrC,KAAI,QAAS,KAAI,SAAS,YAAY,SAAS,SAAS,SAAS,EAAE,SAAS,CAAC;KACxE,KAAI,SAAS,kBAAkB,SAAS,SAAS,SAAS,SAAS,EAAE,SAAS,CAAC;AACpF,MAAK,OAAO;;AAKb,IAAI,oBAAoB,eAAe,EAAE,gBAAgB,wBAAwB,CAAC"}
|
|
1
|
+
{"version":3,"file":"renderer-l1qJE4z-.mjs","names":[],"sources":["../../../nodes/node-kenburns/dist/renderers-Ca3wLKBl.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, fragmentBindGroupLayout } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst easeIn = (t) => t * t;\nconst easeOut = (t) => t * (2 - t);\nconst easeInOut = (t) => t < .5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\nconst springEase = (t) => {\n\tconst c4 = 2 * Math.PI / 3;\n\treturn t === 0 ? 0 : t === 1 ? 1 : 2 ** (-10 * t) * Math.sin((t * 10 - .75) * c4) + 1;\n};\nconst applyEasing = (t, easing) => {\n\tswitch (easing) {\n\t\tcase \"ease-in\": return easeIn(t);\n\t\tcase \"ease-out\": return easeOut(t);\n\t\tcase \"ease-in-out\": return easeInOut(t);\n\t\tcase \"spring\": return springEase(t);\n\t\tdefault: return t;\n\t}\n};\nconst catmullRom = (p0, p1, p2, p3, t) => {\n\tconst t2 = t * t;\n\tconst t3 = t2 * t;\n\treturn .5 * (2 * p1 + (-p0 + p2) * t + (2 * p0 - 5 * p1 + 4 * p2 - p3) * t2 + (-p0 + 3 * p1 - 3 * p2 + p3) * t3);\n};\nfunction interpolateKenBurns(keyframes, timeMs, movementStyle = \"spline\") {\n\tif (keyframes.length === 0) return {\n\t\tx: 50,\n\t\ty: 50,\n\t\tscale: 1\n\t};\n\tif (keyframes.length === 1) {\n\t\tconst kf = keyframes[0];\n\t\treturn {\n\t\t\tx: kf.x ?? 50,\n\t\t\ty: kf.y ?? 50,\n\t\t\tscale: kf.scale ?? 1\n\t\t};\n\t}\n\tlet elapsed = 0;\n\tfor (let i = 0; i < keyframes.length; i++) {\n\t\tconst kf = keyframes[i];\n\t\tconst hold = kf.holdMs ?? 0;\n\t\tconst dur = kf.durationMs ?? 0;\n\t\tif (timeMs <= elapsed + hold) return {\n\t\t\tx: kf.x ?? 50,\n\t\t\ty: kf.y ?? 50,\n\t\t\tscale: kf.scale ?? 1\n\t\t};\n\t\telapsed += hold;\n\t\tif (i < keyframes.length - 1 && dur > 0) {\n\t\t\tif (timeMs <= elapsed + dur) {\n\t\t\t\tconst rawT = (timeMs - elapsed) / dur;\n\t\t\t\tconst t = applyEasing(Math.max(0, Math.min(1, rawT)), kf.easing);\n\t\t\t\tconst next = keyframes[i + 1];\n\t\t\t\tif (movementStyle === \"spline\") {\n\t\t\t\t\tconst prev = keyframes[i - 1] ?? kf;\n\t\t\t\t\tconst afterNext = keyframes[i + 2] ?? next;\n\t\t\t\t\treturn {\n\t\t\t\t\t\tx: catmullRom(prev.x ?? 50, kf.x ?? 50, next.x ?? 50, afterNext.x ?? 50, t),\n\t\t\t\t\t\ty: catmullRom(prev.y ?? 50, kf.y ?? 50, next.y ?? 50, afterNext.y ?? 50, t),\n\t\t\t\t\t\tscale: catmullRom(prev.scale ?? 1, kf.scale ?? 1, next.scale ?? 1, afterNext.scale ?? 1, t)\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tx: (kf.x ?? 50) + ((next.x ?? 50) - (kf.x ?? 50)) * t,\n\t\t\t\t\ty: (kf.y ?? 50) + ((next.y ?? 50) - (kf.y ?? 50)) * t,\n\t\t\t\t\tscale: (kf.scale ?? 1) + ((next.scale ?? 1) - (kf.scale ?? 1)) * t\n\t\t\t\t};\n\t\t\t}\n\t\t\telapsed += dur;\n\t\t}\n\t}\n\tconst last = keyframes[keyframes.length - 1];\n\treturn {\n\t\tx: last.x ?? 50,\n\t\ty: last.y ?? 50,\n\t\tscale: last.scale ?? 1\n\t};\n}\nfunction calculateSrcRect(state, sourceWidth, sourceHeight, targetAspectRatio) {\n\tlet baseBoxW_pct = 100;\n\tlet baseBoxH_pct = 100;\n\tif (targetAspectRatio !== \"input\") {\n\t\tconst parts = targetAspectRatio.split(\":\");\n\t\tconst tW = Number(parts[0]);\n\t\tconst tH = Number(parts[1]);\n\t\tif (!Number.isNaN(tW) && !Number.isNaN(tH) && tW > 0 && tH > 0) {\n\t\t\tconst desiredAR = tW / tH;\n\t\t\tconst sourceAR = sourceWidth / sourceHeight;\n\t\t\tif (sourceAR > desiredAR) {\n\t\t\t\tbaseBoxH_pct = 100;\n\t\t\t\tbaseBoxW_pct = desiredAR / sourceAR * 100;\n\t\t\t} else {\n\t\t\t\tbaseBoxW_pct = 100;\n\t\t\t\tbaseBoxH_pct = sourceAR / desiredAR * 100;\n\t\t\t}\n\t\t}\n\t}\n\tconst baseBoxPxW = baseBoxW_pct / 100 * sourceWidth;\n\tconst baseBoxPxH = baseBoxH_pct / 100 * sourceHeight;\n\tconst clampedScale = Math.max(state.scale, 1);\n\tconst currentBoxPxW = baseBoxPxW / clampedScale;\n\tconst currentBoxPxH = baseBoxPxH / clampedScale;\n\tconst rawFocalX = state.x / 100 * sourceWidth;\n\tconst rawFocalY = state.y / 100 * sourceHeight;\n\tconst halfBoxW = currentBoxPxW / 2;\n\tconst halfBoxH = currentBoxPxH / 2;\n\tconst focalX = Math.max(halfBoxW, Math.min(sourceWidth - halfBoxW, rawFocalX));\n\tconst focalY = Math.max(halfBoxH, Math.min(sourceHeight - halfBoxH, rawFocalY));\n\treturn {\n\t\tx: focalX - halfBoxW,\n\t\ty: focalY - halfBoxH,\n\t\twidth: currentBoxPxW,\n\t\theight: currentBoxPxH\n\t};\n}\nconst motionBlurWgsl = `\nstruct MotionBlurUniforms {\n\tprev_origin : vec2<f32>,\n\tprev_size : vec2<f32>,\n\tcurr_origin : vec2<f32>,\n\tcurr_size : vec2<f32>,\n\tsamples : f32,\n\tblurSize : f32,\n\tpadding : vec2<f32>,\n};\n\n@group(0) @binding(0) var<uniform> u : MotionBlurUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet uv = in.uv;\n\tlet n = i32(u.samples);\n\t\n\tif (n <= 1) {\n\t\tlet p_curr = u.curr_origin + uv * u.curr_size;\n\t\treturn textureSampleLevel(tex, samp, p_curr, 0.0);\n\t}\n\t\n\tvar color = vec4<f32>(0.0);\n\tfor (var i = 0; i < n; i = i + 1) {\n\t\t// Use blurSize to control the shutter interval width. \n\t\t// t=1.0 is current frame, t=0.0 is previous frame.\n\t\tlet t = 1.0 + (f32(i) / f32(n - 1) - 0.5) * u.blurSize;\n\t\t\n\t\tlet origin = mix(u.prev_origin, u.curr_origin, t);\n\t\tlet size = mix(u.prev_size, u.curr_size, t);\n\t\tlet p_sample = origin + uv * size;\n\t\t\n\t\tcolor += textureSampleLevel(tex, samp, p_sample, 0.0);\n\t}\n\treturn color / f32(n);\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nconst motionBlurData = new Float32Array(12);\nfunction getMotionBlurResources(device, format) {\n\tlet res = deviceResourceCache.get(device);\n\tif (!res) {\n\t\tconst motionBlurUniformLayout = fragmentBindGroupLayout(device, [\"uniform\"]);\n\t\tconst singleTextureLayout = fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]);\n\t\tres = {\n\t\t\tmotionBlurPipeline: createFullscreenPipeline(device, {\n\t\t\t\tlabel: \"MotionBlurPipeline\",\n\t\t\t\tmodule: device.createShaderModule({\n\t\t\t\t\tlabel: \"kenburns_motionblur.wgsl\",\n\t\t\t\t\tcode: motionBlurWgsl\n\t\t\t\t}),\n\t\t\t\tlayouts: [motionBlurUniformLayout, singleTextureLayout],\n\t\t\t\tformat\n\t\t\t}),\n\t\t\tmotionBlurUniformLayout,\n\t\t\tsingleTextureLayout\n\t\t};\n\t\tdeviceResourceCache.set(device, res);\n\t}\n\treturn res;\n}\nconst KenBurnsWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetView, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst { virtualMedia, containerWidth, containerHeight, frame, fps, trimStartOverride, opacity = 1, inheritedSeekOffset = 0 } = props;\n\tconst op = virtualMedia.operation;\n\tif (op?.op !== \"KenBurns\") return;\n\tconst childMedia = virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tconst sourceWidth = op.originalWidth ?? childMedia.metadata?.width ?? virtualMedia.metadata?.width ?? containerWidth ?? targetWidth;\n\tconst sourceHeight = op.originalHeight ?? childMedia.metadata?.height ?? virtualMedia.metadata?.height ?? containerHeight ?? targetHeight;\n\tconst keyframes = op.keyframes ?? [];\n\tconst movementStyle = op.movementStyle ?? \"spline\";\n\tconst targetAspectRatio = op.aspectRatio || \"input\";\n\tconst offsetMs = ((trimStartOverride ?? 0) + inheritedSeekOffset) * 1e3;\n\tconst fpsVal = Math.max(1, fps ?? 30);\n\tconst frameDurationMs = 1e3 / fpsVal;\n\tconst timeMs = offsetMs + (frame ?? 0) / fpsVal * 1e3;\n\tconst prevTimeMs = timeMs - frameDurationMs;\n\tconst state = interpolateKenBurns(keyframes, timeMs, movementStyle);\n\tconst prevState = interpolateKenBurns(keyframes, prevTimeMs, movementStyle);\n\tconst srcRect = calculateSrcRect(state, sourceWidth, sourceHeight, targetAspectRatio);\n\tconst prevSrcRect = calculateSrcRect(prevState, sourceWidth, sourceHeight, targetAspectRatio);\n\tconst dstWidth = containerWidth ?? targetWidth;\n\tconst dstHeight = containerHeight ?? targetHeight;\n\tconst dstRect = {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: dstWidth,\n\t\theight: dstHeight\n\t};\n\tpass.end();\n\tconst { texture: tempTex } = await drawChildToTexture(args, childMedia, {\n\t\twidth: sourceWidth,\n\t\theight: sourceHeight,\n\t\tprops: {\n\t\t\t...props,\n\t\t\tcontainerWidth: sourceWidth,\n\t\t\tcontainerHeight: sourceHeight\n\t\t}\n\t});\n\tconst motionBlurSize = op.motionBlurSize ?? 1.5;\n\tlet blurTex = null;\n\tif (motionBlurSize > 0) {\n\t\tconst { motionBlurPipeline: pipeline, motionBlurUniformLayout: uLayout, singleTextureLayout: tLayout } = getMotionBlurResources(ctx.device, ctx.renderer.format);\n\t\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\t\tmotionBlurData[0] = prevSrcRect.x / sourceWidth;\n\t\tmotionBlurData[1] = prevSrcRect.y / sourceHeight;\n\t\tmotionBlurData[2] = prevSrcRect.width / sourceWidth;\n\t\tmotionBlurData[3] = prevSrcRect.height / sourceHeight;\n\t\tmotionBlurData[4] = srcRect.x / sourceWidth;\n\t\tmotionBlurData[5] = srcRect.y / sourceHeight;\n\t\tmotionBlurData[6] = srcRect.width / sourceWidth;\n\t\tmotionBlurData[7] = srcRect.height / sourceHeight;\n\t\tmotionBlurData[8] = 12;\n\t\tmotionBlurData[9] = motionBlurSize;\n\t\tconst uBuffer = ctx.renderer.getTemporaryBuffer(motionBlurData);\n\t\tblurTex = ctx.renderer.getTemporaryTexture(dstWidth, dstHeight, [\n\t\t\ttargetTexture,\n\t\t\ttempTex,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tdrawFullscreenPass(encoder, blurTex.createView(), pipeline, [ctx.device.createBindGroup({\n\t\t\tlayout: uLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: uBuffer }\n\t\t\t}]\n\t\t}), ctx.renderer.bindGroupCache.getBindGroup(ctx.device, tLayout, tempTex, sampler)]);\n\t}\n\tconst outPass = ctx.renderer.beginFrame(encoder, targetView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, targetWidth, targetHeight, \"load\");\n\tif (blurTex) ctx.renderer.drawTexture(outPass, blurTex, dstRect, { opacity });\n\telse ctx.renderer.drawTextureRegion(outPass, tempTex, srcRect, dstRect, { opacity });\n\targs.pass = outPass;\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: KenBurnsWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-Ca3wLKBl.mjs.map"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { n as defineRenderer } from "./renderer-
|
|
2
|
-
import { a as createFullscreenPipeline, c as drawTextureToTarget, l as fragmentBindGroupLayout, o as drawChildToTexture, r as STRAIGHT_ALPHA_BLEND, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL } from "./gpu-
|
|
1
|
+
import { n as defineRenderer } from "./renderer-BgmO1Dzw.mjs";
|
|
2
|
+
import { a as createFullscreenPipeline, c as drawTextureToTarget, l as fragmentBindGroupLayout, o as drawChildToTexture, r as STRAIGHT_ALPHA_BLEND, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL } from "./gpu-Bb4WmYYH.mjs";
|
|
3
3
|
|
|
4
4
|
//#region ../../nodes/node-flip/dist/renderers-CeDdi1eu.mjs
|
|
5
5
|
const WGSL_FLIP_SHADER = `
|
|
@@ -157,4 +157,4 @@ var renderers_default = defineRenderer({ WebGPURenderer });
|
|
|
157
157
|
|
|
158
158
|
//#endregion
|
|
159
159
|
export { renderers_default as t };
|
|
160
|
-
//# sourceMappingURL=renderer-
|
|
160
|
+
//# sourceMappingURL=renderer-ml2LHmRb.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-
|
|
1
|
+
{"version":3,"file":"renderer-ml2LHmRb.mjs","names":[],"sources":["../../../nodes/node-flip/dist/renderers-CeDdi1eu.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, STRAIGHT_ALPHA_BLEND, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst WGSL_FLIP_SHADER = `\nstruct FlipUniforms {\n\tflipH : f32,\n\tflipV : f32,\n\tdiagonal : f32,\n\tsymmetry : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : FlipUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tvar uv = in.uv;\n\n\t// 1. Split-Mirror / Symmetry\n\tif (u.symmetry > 0.5 && u.symmetry < 1.5) {\n\t\t// leftToRight: mirror left half to right half\n\t\tuv.x = select(uv.x, 1.0 - uv.x, uv.x > 0.5);\n\t} else if (u.symmetry > 1.5 && u.symmetry < 2.5) {\n\t\t// rightToLeft: mirror right half to left half\n\t\tuv.x = select(1.0 - uv.x, uv.x, uv.x > 0.5);\n\t} else if (u.symmetry > 2.5 && u.symmetry < 3.5) {\n\t\t// topToBottom: mirror top half to bottom half\n\t\tuv.y = select(uv.y, 1.0 - uv.y, uv.y > 0.5);\n\t} else if (u.symmetry > 3.5 && u.symmetry < 4.5) {\n\t\t// bottomToTop: mirror bottom half to top half\n\t\tuv.y = select(1.0 - uv.y, uv.y, uv.y > 0.5);\n\t} else if (u.symmetry > 4.5) {\n\t\t// quadrant: 4-way kaleidoscopic symmetry\n\t\tuv.x = select(uv.x, 1.0 - uv.x, uv.x > 0.5);\n\t\tuv.y = select(uv.y, 1.0 - uv.y, uv.y > 0.5);\n\t}\n\n\t// 2. Diagonal Swap (Transposition: x <-> y)\n\tif (u.diagonal > 0.5) {\n\t\tlet temp = uv.x;\n\t\tuv.x = uv.y;\n\t\tuv.y = temp;\n\t}\n\n\t// 3. Horizontal / Vertical Flip\n\tif (u.flipH > 0.5) {\n\t\tuv.x = 1.0 - uv.x;\n\t}\n\tif (u.flipV > 0.5) {\n\t\tuv.y = 1.0 - uv.y;\n\t}\n\n\treturn textureSampleLevel(tex, samp, uv, 0.0);\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nconst uniformData = new Float32Array(4);\nfunction getFlipResources(device, targetFormat) {\n\tconst cached = deviceResourceCache.get(device);\n\tif (cached) return cached;\n\tconst uniformLayout = fragmentBindGroupLayout(device, [\"uniform\"]);\n\tconst textureLayout = fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]);\n\tconst res = {\n\t\tuniformLayout,\n\t\ttextureLayout,\n\t\tpipeline: createFullscreenPipeline(device, {\n\t\t\tmodule: device.createShaderModule({ code: WGSL_FLIP_SHADER }),\n\t\t\tlayouts: device.createPipelineLayout({ bindGroupLayouts: [uniformLayout, textureLayout] }),\n\t\t\tformat: targetFormat,\n\t\t\tblend: STRAIGHT_ALPHA_BLEND\n\t\t})\n\t};\n\tdeviceResourceCache.set(device, res);\n\treturn res;\n}\nconst WebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"Flip\" || !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 sourceWidth = childMedia.metadata?.width ?? props.containerWidth ?? width;\n\tconst sourceHeight = childMedia.metadata?.height ?? props.containerHeight ?? height;\n\tconst { texture: childTex } = await drawChildToTexture(args, childMedia, {\n\t\twidth: sourceWidth,\n\t\theight: sourceHeight,\n\t\tprops: {\n\t\t\t...props,\n\t\t\tcontainerWidth: sourceWidth,\n\t\t\tcontainerHeight: sourceHeight,\n\t\t\tvirtualMedia: childMedia\n\t\t}\n\t});\n\tconst { pipeline, uniformLayout: uLayout, textureLayout: tLayout } = getFlipResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst mode = op.mode ?? \"horizontal\";\n\tlet isFlipH = false;\n\tlet isFlipV = false;\n\tlet isDiag = false;\n\tif (mode === \"horizontal\") isFlipH = true;\n\telse if (mode === \"vertical\") isFlipV = true;\n\telse if (mode === \"both\") {\n\t\tisFlipH = true;\n\t\tisFlipV = true;\n\t} else if (mode === \"diagonal\") isDiag = true;\n\telse if (mode === \"antiDiagonal\") {\n\t\tisDiag = true;\n\t\tisFlipH = true;\n\t\tisFlipV = true;\n\t} else if (mode === \"custom\") {\n\t\tisFlipH = op.horizontal ?? true;\n\t\tisFlipV = op.vertical ?? false;\n\t\tisDiag = op.diagonal ?? false;\n\t}\n\tlet symVal = 0;\n\tif (op.symmetry === \"leftToRight\") symVal = 1;\n\telse if (op.symmetry === \"rightToLeft\") symVal = 2;\n\telse if (op.symmetry === \"topToBottom\") symVal = 3;\n\telse if (op.symmetry === \"bottomToTop\") symVal = 4;\n\telse if (op.symmetry === \"quadrant\") symVal = 5;\n\tuniformData[0] = isFlipH ? 1 : 0;\n\tuniformData[1] = isFlipV ? 1 : 0;\n\tuniformData[2] = isDiag ? 1 : 0;\n\tuniformData[3] = symVal;\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(uniformData);\n\tconst uBindGroup = ctx.device.createBindGroup({\n\t\tlayout: uLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: uniformBuffer }\n\t\t}]\n\t});\n\tconst tBindGroup = ctx.device.createBindGroup({\n\t\tlayout: tLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: childTex.createView()\n\t\t}, {\n\t\t\tbinding: 1,\n\t\t\tresource: sampler\n\t\t}]\n\t});\n\tconst outTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\tchildTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tdrawFullscreenPass(encoder, outTex.createView(), pipeline, [uBindGroup, tBindGroup]);\n\tdrawTextureToTarget(args, outTex, op.opacity ?? 1);\n};\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-CeDdi1eu.mjs.map"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import "./chunk-D7gtBK74.mjs";
|
|
2
|
-
import { n as defineRenderer } from "./renderer-
|
|
3
|
-
import "./dist-
|
|
4
|
-
import { a as createFullscreenPipeline, l as fragmentBindGroupLayout, t as FULLSCREEN_QUAD_WGSL, u as perDevice } from "./gpu-
|
|
2
|
+
import { n as defineRenderer } from "./renderer-BgmO1Dzw.mjs";
|
|
3
|
+
import "./dist-CDwWQYg3.mjs";
|
|
4
|
+
import { a as createFullscreenPipeline, l as fragmentBindGroupLayout, t as FULLSCREEN_QUAD_WGSL, u as perDevice } from "./gpu-Bb4WmYYH.mjs";
|
|
5
5
|
|
|
6
6
|
//#region ../../nodes/node-canvas-generator/dist/renderers-BNR_p9ve.mjs
|
|
7
7
|
const CANVAS_SHADER = `
|
|
@@ -127,4 +127,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: CanvasGeneratorWebGPURe
|
|
|
127
127
|
|
|
128
128
|
//#endregion
|
|
129
129
|
export { CanvasGeneratorWebGPURenderer, renderers_default as default };
|
|
130
|
-
//# sourceMappingURL=renderer-
|
|
130
|
+
//# sourceMappingURL=renderer-mu2mYo5w.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-
|
|
1
|
+
{"version":3,"file":"renderer-mu2mYo5w.mjs","names":[],"sources":["../../../nodes/node-canvas-generator/dist/renderers-BNR_p9ve.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, fragmentBindGroupLayout, perDevice } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst CANVAS_SHADER = `\nstruct CanvasUniforms {\n fillType : f32, // 0 = Solid, 1 = Linear, 2 = Radial\n angleRad : f32,\n radius : f32,\n _padding1 : f32,\n solid : vec4<f32>,\n startColor : vec4<f32>,\n endColor : vec4<f32>,\n center : vec2<f32>,\n _padding2 : vec2<f32>,\n};\n\n@group(0) @binding(0) var<uniform> u : CanvasUniforms;\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n if (u.fillType < 0.5) {\n // Solid Color\n return u.solid;\n } else if (u.fillType < 1.5) {\n // Linear Gradient\n let dir = vec2<f32>(cos(u.angleRad), sin(u.angleRad));\n // Project uv relative to center (0.5, 0.5) onto the direction\n let t = dot(in.uv - vec2<f32>(0.5, 0.5), dir) + 0.5;\n let clampedT = clamp(t, 0.0, 1.0);\n return mix(u.startColor, u.endColor, clampedT);\n } else {\n // Radial Gradient\n let dist = distance(in.uv, u.center);\n let t = clamp(dist / max(u.radius, 1e-4), 0.0, 1.0);\n return mix(u.startColor, u.endColor, t);\n }\n}\n`;\nconst canvasUniformData = new Float32Array(20);\nconst getDeviceLayouts = perDevice((device) => ({\n\tuniformLayout: fragmentBindGroupLayout(device, [\"uniform\"]),\n\tpipelineCache: /* @__PURE__ */ new Map()\n}));\nfunction getCanvasResources(device, format) {\n\tconst layouts = getDeviceLayouts(device);\n\tconst cacheKey = `canvas_${format}`;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst canvasModule = device.createShaderModule({\n\t\t\tlabel: `canvas_${format}.wgsl`,\n\t\t\tcode: CANVAS_SHADER\n\t\t});\n\t\tpipeline = createFullscreenPipeline(device, {\n\t\t\tlabel: `CanvasGeneratorPipeline_${format}`,\n\t\t\tmodule: canvasModule,\n\t\t\tlayouts: [layouts.uniformLayout],\n\t\t\tformat\n\t\t});\n\t\tlayouts.pipelineCache.set(cacheKey, pipeline);\n\t}\n\treturn {\n\t\tcanvasPipeline: pipeline,\n\t\tuniformLayout: layouts.uniformLayout\n\t};\n}\nfunction hexToRgba(hex) {\n\tlet h = hex.replace(\"#\", \"\");\n\tif (h.length === 3 || h.length === 4) h = h.split(\"\").map((c) => c + c).join(\"\");\n\tconst r = parseInt(h.substring(0, 2), 16) / 255;\n\tconst g = parseInt(h.substring(2, 4), 16) / 255;\n\tconst b = parseInt(h.substring(4, 6), 16) / 255;\n\tlet a = 1;\n\tif (h.length === 8) a = parseInt(h.substring(6, 8), 16) / 255;\n\treturn [\n\t\tr,\n\t\tg,\n\t\tb,\n\t\ta\n\t];\n}\nconst CanvasGeneratorWebGPURenderer = async (args) => {\n\tconst { ctx, pass, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"CanvasGenerator\" || !op) return;\n\tconst { canvasPipeline: pipeline, uniformLayout: uLayout } = getCanvasResources(ctx.device, ctx.renderer.format);\n\tconst fillTypeVal = op.fillType === \"radial\" ? 2 : op.fillType === \"linear\" ? 1 : 0;\n\tconst angleRadVal = (op.gradientAngle ?? 180) * Math.PI / 180;\n\tconst radialRadiusVal = op.radialRadius ?? .5;\n\tconst solidCol = hexToRgba(op.solidColor ?? \"#3b82f6\");\n\tconst startCol = hexToRgba(op.gradientStart ?? \"#3b82f6\");\n\tconst endCol = hexToRgba(op.gradientEnd ?? \"#1d4ed8\");\n\tcanvasUniformData[0] = fillTypeVal;\n\tcanvasUniformData[1] = angleRadVal;\n\tcanvasUniformData[2] = radialRadiusVal;\n\tcanvasUniformData[3] = 0;\n\tcanvasUniformData[4] = solidCol[0];\n\tcanvasUniformData[5] = solidCol[1];\n\tcanvasUniformData[6] = solidCol[2];\n\tcanvasUniformData[7] = solidCol[3];\n\tcanvasUniformData[8] = startCol[0];\n\tcanvasUniformData[9] = startCol[1];\n\tcanvasUniformData[10] = startCol[2];\n\tcanvasUniformData[11] = startCol[3];\n\tcanvasUniformData[12] = endCol[0];\n\tcanvasUniformData[13] = endCol[1];\n\tcanvasUniformData[14] = endCol[2];\n\tcanvasUniformData[15] = endCol[3];\n\tcanvasUniformData[16] = op.radialCenterX ?? .5;\n\tcanvasUniformData[17] = op.radialCenterY ?? .5;\n\tcanvasUniformData[18] = 0;\n\tcanvasUniformData[19] = 0;\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(canvasUniformData);\n\tpass.setPipeline(pipeline);\n\tpass.setBindGroup(0, ctx.device.createBindGroup({\n\t\tlayout: uLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: uniformBuffer }\n\t\t}]\n\t}));\n\tpass.draw(4);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: CanvasGeneratorWebGPURenderer });\n\n//#endregion\nexport { CanvasGeneratorWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-BNR_p9ve.mjs.map"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import "./chunk-D7gtBK74.mjs";
|
|
2
|
-
import "./dist-
|
|
3
|
-
import { n as renderers_default, t as GradientMapWebGPURenderer } from "./renderer-
|
|
2
|
+
import "./dist-CDwWQYg3.mjs";
|
|
3
|
+
import { n as renderers_default, t as GradientMapWebGPURenderer } from "./renderer-DEeKkljI.mjs";
|
|
4
4
|
|
|
5
5
|
export { GradientMapWebGPURenderer, renderers_default as default };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { c as drawTextureToTarget, o as drawChildToTexture } from "./gpu-
|
|
1
|
+
import { n as defineRenderer, o as resolveFrameNumber } from "./renderer-BgmO1Dzw.mjs";
|
|
2
|
+
import { c as drawTextureToTarget, o as drawChildToTexture } from "./gpu-Bb4WmYYH.mjs";
|
|
3
3
|
import { o as TemporalDeflickerPipeline } from "./dist-C_SMBmHr.mjs";
|
|
4
4
|
|
|
5
5
|
//#region ../../nodes/node-deflicker/dist/renderers-BEAP_hnG.mjs
|
|
@@ -62,4 +62,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: TemporalDeflickerWebGPU
|
|
|
62
62
|
|
|
63
63
|
//#endregion
|
|
64
64
|
export { renderers_default as t };
|
|
65
|
-
//# sourceMappingURL=renderer-
|
|
65
|
+
//# sourceMappingURL=renderer-qQmoO5Hk.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-
|
|
1
|
+
{"version":3,"file":"renderer-qQmoO5Hk.mjs","names":[],"sources":["../../../nodes/node-deflicker/dist/renderers-BEAP_hnG.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { resolveFrameNumber } from \"@framefields/node-sdk\";\nimport { drawChildToTexture, drawTextureToTarget } from \"@framefields/node-sdk/gpu\";\nimport { TemporalDeflickerPipeline } from \"@framefields/tensor-webgpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nfunction resolveProp(op, fieldName, defaultValue, minVal, maxVal, frame, fps) {\n\tconst handleId = op[`${fieldName}HandleId`];\n\tconst input = handleId ? op.inputs?.[handleId] : null;\n\tlet raw;\n\tif (input?.connectionValid && input.outputItem) {\n\t\tconst outData = input.outputItem.data;\n\t\traw = outData && typeof outData === \"object\" && \"offset\" in outData ? outData.offset : input.outputItem.data;\n\t} else raw = op[fieldName];\n\tconst resolved = resolveFrameNumber(raw, defaultValue, frame, fps);\n\treturn Math.max(minVal, Math.min(maxVal, resolved));\n}\nconst pipelineCache = /* @__PURE__ */ new Map();\nfunction getOrCreatePipeline(device, key) {\n\tlet pipe = pipelineCache.get(key);\n\tif (!pipe) {\n\t\tpipe = new TemporalDeflickerPipeline(device);\n\t\tpipelineCache.set(key, pipe);\n\t}\n\treturn pipe;\n}\nconst TemporalDeflickerWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (!op || op.op !== \"TemporalDeflicker\" && op.op !== \"Deflicker\") return;\n\tconst sourceMedia = props.virtualMedia?.children?.[0];\n\tif (!sourceMedia) return;\n\tpass.end();\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst frame = props.frame ?? 0;\n\tconst compositionFrame = props.compositionFrame ?? frame;\n\tconst fps = props.fps || 30;\n\tconst { texture: srcTex } = await drawChildToTexture(args, sourceMedia, { props: {\n\t\t...props,\n\t\tvirtualMedia: sourceMedia,\n\t\tcontainerWidth: width,\n\t\tcontainerHeight: height\n\t} });\n\targs.pass.end();\n\tconst blendWeight = resolveProp(op, \"blendWeight\", .35, 0, 1, compositionFrame, fps);\n\tconst disocclusionThreshold = resolveProp(op, \"disocclusionThreshold\", .15, .01, 1, compositionFrame, fps);\n\tconst maxMotionPixels = resolveProp(op, \"maxMotionPixels\", 64, 1, 256, compositionFrame, fps);\n\tconst scale = resolveProp(op, \"scale\", .5, .1, 1, compositionFrame, fps);\n\tconst windowSize = Math.round(resolveProp(op, \"windowSize\", 2, 1, 5, compositionFrame, fps));\n\tconst pipelineKey = props.virtualMedia?.metadata?.id || op.id || `deflicker_${props.renderId ?? \"global\"}`;\n\tconst deflickerPipe = getOrCreatePipeline(ctx.device, pipelineKey);\n\tif (frame === 0) deflickerPipe.reset();\n\tdrawTextureToTarget(args, deflickerPipe.execute(srcTex, {\n\t\tblendWeight,\n\t\tdisocclusionThreshold,\n\t\tmaxMotionPixels,\n\t\tscale,\n\t\twindowSize\n\t}, encoder), typeof op.opacity === \"number\" ? op.opacity : 1);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: TemporalDeflickerWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-BEAP_hnG.mjs.map"],"mappings":";;;;;AAMA,SAAS,YAAY,IAAI,WAAW,cAAc,QAAQ,QAAQ,OAAO,KAAK;CAC7E,MAAM,WAAW,GAAG,GAAG,UAAU;CACjC,MAAM,QAAQ,WAAW,GAAG,SAAS,YAAY;CACjD,IAAI;AACJ,KAAI,OAAO,mBAAmB,MAAM,YAAY;EAC/C,MAAM,UAAU,MAAM,WAAW;AACjC,QAAM,WAAW,OAAO,YAAY,YAAY,YAAY,UAAU,QAAQ,SAAS,MAAM,WAAW;OAClG,OAAM,GAAG;CAChB,MAAM,WAAW,mBAAmB,KAAK,cAAc,OAAO,IAAI;AAClE,QAAO,KAAK,IAAI,QAAQ,KAAK,IAAI,QAAQ,SAAS,CAAC;;AAEpD,MAAM,gCAAgC,IAAI,KAAK;AAC/C,SAAS,oBAAoB,QAAQ,KAAK;CACzC,IAAI,OAAO,cAAc,IAAI,IAAI;AACjC,KAAI,CAAC,MAAM;AACV,SAAO,IAAI,0BAA0B,OAAO;AAC5C,gBAAc,IAAI,KAAK,KAAK;;AAE7B,QAAO;;AAER,MAAM,kCAAkC,OAAO,SAAS;CACvD,MAAM,EAAE,KAAK,SAAS,MAAM,aAAa,cAAc,UAAU;CACjE,MAAM,KAAK,MAAM,cAAc;AAC/B,KAAI,CAAC,MAAM,GAAG,OAAO,uBAAuB,GAAG,OAAO,YAAa;CACnE,MAAM,cAAc,MAAM,cAAc,WAAW;AACnD,KAAI,CAAC,YAAa;AAClB,MAAK,KAAK;CACV,MAAM,QAAQ;CACd,MAAM,SAAS;CACf,MAAM,QAAQ,MAAM,SAAS;CAC7B,MAAM,mBAAmB,MAAM,oBAAoB;CACnD,MAAM,MAAM,MAAM,OAAO;CACzB,MAAM,EAAE,SAAS,WAAW,MAAM,mBAAmB,MAAM,aAAa,EAAE,OAAO;EAChF,GAAG;EACH,cAAc;EACd,gBAAgB;EAChB,iBAAiB;EACjB,EAAE,CAAC;AACJ,MAAK,KAAK,KAAK;CACf,MAAM,cAAc,YAAY,IAAI,eAAe,KAAK,GAAG,GAAG,kBAAkB,IAAI;CACpF,MAAM,wBAAwB,YAAY,IAAI,yBAAyB,KAAK,KAAK,GAAG,kBAAkB,IAAI;CAC1G,MAAM,kBAAkB,YAAY,IAAI,mBAAmB,IAAI,GAAG,KAAK,kBAAkB,IAAI;CAC7F,MAAM,QAAQ,YAAY,IAAI,SAAS,IAAI,IAAI,GAAG,kBAAkB,IAAI;CACxE,MAAM,aAAa,KAAK,MAAM,YAAY,IAAI,cAAc,GAAG,GAAG,GAAG,kBAAkB,IAAI,CAAC;CAC5F,MAAM,cAAc,MAAM,cAAc,UAAU,MAAM,GAAG,MAAM,aAAa,MAAM,YAAY;CAChG,MAAM,gBAAgB,oBAAoB,IAAI,QAAQ,YAAY;AAClE,KAAI,UAAU,EAAG,eAAc,OAAO;AACtC,qBAAoB,MAAM,cAAc,QAAQ,QAAQ;EACvD;EACA;EACA;EACA;EACA;EACA,EAAE,QAAQ,EAAE,OAAO,GAAG,YAAY,WAAW,GAAG,UAAU,EAAE;;AAK9D,IAAI,oBAAoB,eAAe,EAAE,gBAAgB,iCAAiC,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
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-
|
|
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-Bb4WmYYH.mjs";
|
|
3
3
|
|
|
4
4
|
//#region ../../nodes/node-vignette/dist/renderers-B_pue82_.mjs
|
|
5
5
|
const VIGNETTE_SHADER = `
|
|
@@ -271,4 +271,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: VignetteWebGPURenderer
|
|
|
271
271
|
|
|
272
272
|
//#endregion
|
|
273
273
|
export { renderers_default as t };
|
|
274
|
-
//# sourceMappingURL=renderer-
|
|
274
|
+
//# sourceMappingURL=renderer-rv-AKqCl.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-Bt_j2Zi6.mjs","names":[],"sources":["../../../nodes/node-vignette/dist/renderers-B_pue82_.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 VIGNETTE_SHADER = `\nstruct VignetteUniforms {\n strength : f32,\n radius : f32,\n softness : f32,\n roundness : f32,\n\n centerX : f32,\n centerY : f32,\n hasStrengthSig : f32,\n hasRadiusSig : f32,\n\n hasSoftnessSig : f32,\n hasRoundnessSig: f32,\n hasCenterXSig : f32,\n hasCenterYSig : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : VignetteUniforms;\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 strengthSigTex : texture_2d<f32>;\n@group(2) @binding(1) var radiusSigTex : texture_2d<f32>;\n@group(2) @binding(2) var softnessSigTex : texture_2d<f32>;\n@group(2) @binding(3) var roundnessSigTex : texture_2d<f32>;\n@group(2) @binding(4) var centerXSigTex : texture_2d<f32>;\n@group(2) @binding(5) var centerYSigTex : texture_2d<f32>;\n@group(2) @binding(6) var signalSamp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n let color = textureSampleLevel(tex, samp, in.uv, 0.0);\n\n if (color.a < 1e-5) {\n return color;\n }\n\n // Resolve parameter overrides or dynamic signals\n var strength = u.strength;\n if (u.hasStrengthSig > 0.5) {\n strength = textureSampleLevel(strengthSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var radius = u.radius;\n if (u.hasRadiusSig > 0.5) {\n radius = textureSampleLevel(radiusSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var softness = u.softness;\n if (u.hasSoftnessSig > 0.5) {\n softness = textureSampleLevel(softnessSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var roundness = u.roundness;\n if (u.hasRoundnessSig > 0.5) {\n roundness = textureSampleLevel(roundnessSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var centerX = u.centerX;\n if (u.hasCenterXSig > 0.5) {\n centerX = textureSampleLevel(centerXSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var centerY = u.centerY;\n if (u.hasCenterYSig > 0.5) {\n centerY = textureSampleLevel(centerYSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n let center = vec2<f32>(centerX, centerY);\n let dimensions = vec2<f32>(textureDimensions(tex));\n let aspect = dimensions.x / dimensions.y;\n let uvOffset = in.uv - center;\n\n // Calculate aspect ratio corrected coordinate for circle\n let correctedOffset = vec2<f32>(\n uvOffset.x * mix(1.0, aspect, roundness),\n uvOffset.y\n );\n let dist = length(correctedOffset);\n\n // Calculate vignette edge falloff\n let edge0 = radius;\n let edge1 = max(0.0, radius - softness);\n let vignetteFactor = smoothstep(edge0, edge1, dist);\n\n // Blend based on strength\n let intensity = strength / 100.0;\n let finalVignette = mix(1.0, vignetteFactor, intensity);\n\n // Unpremultiply, apply vignette, and repremultiply\n let unpremult_rgb = color.rgb / color.a;\n let final_rgb = unpremult_rgb * finalVignette;\n\n return vec4<f32>(clamp(final_rgb, vec3<f32>(0.0), vec3<f32>(1.0)) * color.a, color.a);\n}\n`;\nconst vignetteUniformData = new Float32Array(12);\nconst getDeviceLayouts = perDevice((device) => ({\n\tuniformLayout: fragmentBindGroupLayout(device, [\"uniform\"]),\n\tsingleTextureLayout: fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]),\n\tsignalTextureLayout: texturesLayout(device, 6),\n\tpipelineCache: /* @__PURE__ */ new Map()\n}));\nfunction getVignetteResources(device, format) {\n\tconst layouts = getDeviceLayouts(device);\n\tconst cacheKey = `vignette_${format}`;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst vignetteModule = device.createShaderModule({\n\t\t\tlabel: `vignette_${format}.wgsl`,\n\t\t\tcode: VIGNETTE_SHADER\n\t\t});\n\t\tpipeline = createFullscreenPipeline(device, {\n\t\t\tlabel: `VignettePipeline_${format}`,\n\t\t\tmodule: vignetteModule,\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\tvignettePipeline: pipeline,\n\t\tuniformLayout: layouts.uniformLayout,\n\t\tsingleTextureLayout: layouts.singleTextureLayout,\n\t\tsignalTextureLayout: layouts.signalTextureLayout\n\t};\n}\nconst VignetteWebGPURenderer = 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 !== \"Vignette\" || !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] : \"vignette_node\";\n\tconst resolveBindable = (configKey, defaultValue, minVal, maxVal) => {\n\t\tconst handleId = op[`${configKey}HandleId`];\n\t\tconst input = handleId ? op.inputs?.[handleId] : null;\n\t\tconst hasSignal = !!(input?.connectionValid && (input.outputItem?.type === \"Signal\" || 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\") val = Math.max(minVal, Math.min(maxVal, Number(input.outputItem.data ?? defaultValue)));\n\t\telse {\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}\n\t\telse if (sd) {\n\t\t\tval = Math.max(minVal, Math.min(maxVal, Number(sd.offset ?? 0)));\n\t\t\thasStaticSig = true;\n\t\t}\n\t\treturn {\n\t\t\tval,\n\t\t\thasStaticSig,\n\t\t\tsd,\n\t\t\tgpuTextureView\n\t\t};\n\t};\n\tconst strengthRes = resolveBindable(\"strength\", 50, 0, 100);\n\tconst radiusRes = resolveBindable(\"radius\", 1, .1, 2);\n\tconst softnessRes = resolveBindable(\"softness\", .5, 0, 1);\n\tconst roundnessRes = resolveBindable(\"roundness\", .5, 0, 1);\n\tconst centerXRes = resolveBindable(\"centerX\", .5, 0, 1);\n\tconst centerYRes = resolveBindable(\"centerY\", .5, 0, 1);\n\tconst { texture: tmpTex } = await drawChildToTexture(args, childMedia);\n\targs.pass.end();\n\tconst { vignettePipeline: pipeline, uniformLayout: uLayout, singleTextureLayout: tLayout, signalTextureLayout: sigLayout } = getVignetteResources(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 strengthView = getSignalView(strengthRes, \"strength_sig\");\n\tconst radiusView = getSignalView(radiusRes, \"radius_sig\");\n\tconst softnessView = getSignalView(softnessRes, \"softness_sig\");\n\tconst roundnessView = getSignalView(roundnessRes, \"roundness_sig\");\n\tconst centerXView = getSignalView(centerXRes, \"centerX_sig\");\n\tconst centerYView = getSignalView(centerYRes, \"centerY_sig\");\n\tvignetteUniformData[0] = strengthRes.val;\n\tvignetteUniformData[1] = radiusRes.val;\n\tvignetteUniformData[2] = softnessRes.val;\n\tvignetteUniformData[3] = roundnessRes.val;\n\tvignetteUniformData[4] = centerXRes.val;\n\tvignetteUniformData[5] = centerYRes.val;\n\tvignetteUniformData[6] = strengthRes.hasStaticSig ? 1 : 0;\n\tvignetteUniformData[7] = radiusRes.hasStaticSig ? 1 : 0;\n\tvignetteUniformData[8] = softnessRes.hasStaticSig ? 1 : 0;\n\tvignetteUniformData[9] = roundnessRes.hasStaticSig ? 1 : 0;\n\tvignetteUniformData[10] = centerXRes.hasStaticSig ? 1 : 0;\n\tvignetteUniformData[11] = centerYRes.hasStaticSig ? 1 : 0;\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(vignetteUniformData);\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: strengthView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: radiusView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: softnessView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: roundnessView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 4,\n\t\t\t\t\tresource: centerXView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 5,\n\t\t\t\t\tresource: centerYView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 6,\n\t\t\t\t\tresource: sampler\n\t\t\t\t}\n\t\t\t]\n\t\t})\n\t]);\n\tdrawTextureToTarget(args, outTex, op.opacity ?? 1);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: VignetteWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-B_pue82_.mjs.map"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"renderer-rv-AKqCl.mjs","names":[],"sources":["../../../nodes/node-vignette/dist/renderers-B_pue82_.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 VIGNETTE_SHADER = `\nstruct VignetteUniforms {\n strength : f32,\n radius : f32,\n softness : f32,\n roundness : f32,\n\n centerX : f32,\n centerY : f32,\n hasStrengthSig : f32,\n hasRadiusSig : f32,\n\n hasSoftnessSig : f32,\n hasRoundnessSig: f32,\n hasCenterXSig : f32,\n hasCenterYSig : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : VignetteUniforms;\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 strengthSigTex : texture_2d<f32>;\n@group(2) @binding(1) var radiusSigTex : texture_2d<f32>;\n@group(2) @binding(2) var softnessSigTex : texture_2d<f32>;\n@group(2) @binding(3) var roundnessSigTex : texture_2d<f32>;\n@group(2) @binding(4) var centerXSigTex : texture_2d<f32>;\n@group(2) @binding(5) var centerYSigTex : texture_2d<f32>;\n@group(2) @binding(6) var signalSamp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n let color = textureSampleLevel(tex, samp, in.uv, 0.0);\n\n if (color.a < 1e-5) {\n return color;\n }\n\n // Resolve parameter overrides or dynamic signals\n var strength = u.strength;\n if (u.hasStrengthSig > 0.5) {\n strength = textureSampleLevel(strengthSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var radius = u.radius;\n if (u.hasRadiusSig > 0.5) {\n radius = textureSampleLevel(radiusSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var softness = u.softness;\n if (u.hasSoftnessSig > 0.5) {\n softness = textureSampleLevel(softnessSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var roundness = u.roundness;\n if (u.hasRoundnessSig > 0.5) {\n roundness = textureSampleLevel(roundnessSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var centerX = u.centerX;\n if (u.hasCenterXSig > 0.5) {\n centerX = textureSampleLevel(centerXSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n var centerY = u.centerY;\n if (u.hasCenterYSig > 0.5) {\n centerY = textureSampleLevel(centerYSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;\n }\n\n let center = vec2<f32>(centerX, centerY);\n let dimensions = vec2<f32>(textureDimensions(tex));\n let aspect = dimensions.x / dimensions.y;\n let uvOffset = in.uv - center;\n\n // Calculate aspect ratio corrected coordinate for circle\n let correctedOffset = vec2<f32>(\n uvOffset.x * mix(1.0, aspect, roundness),\n uvOffset.y\n );\n let dist = length(correctedOffset);\n\n // Calculate vignette edge falloff\n let edge0 = radius;\n let edge1 = max(0.0, radius - softness);\n let vignetteFactor = smoothstep(edge0, edge1, dist);\n\n // Blend based on strength\n let intensity = strength / 100.0;\n let finalVignette = mix(1.0, vignetteFactor, intensity);\n\n // Unpremultiply, apply vignette, and repremultiply\n let unpremult_rgb = color.rgb / color.a;\n let final_rgb = unpremult_rgb * finalVignette;\n\n return vec4<f32>(clamp(final_rgb, vec3<f32>(0.0), vec3<f32>(1.0)) * color.a, color.a);\n}\n`;\nconst vignetteUniformData = new Float32Array(12);\nconst getDeviceLayouts = perDevice((device) => ({\n\tuniformLayout: fragmentBindGroupLayout(device, [\"uniform\"]),\n\tsingleTextureLayout: fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]),\n\tsignalTextureLayout: texturesLayout(device, 6),\n\tpipelineCache: /* @__PURE__ */ new Map()\n}));\nfunction getVignetteResources(device, format) {\n\tconst layouts = getDeviceLayouts(device);\n\tconst cacheKey = `vignette_${format}`;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst vignetteModule = device.createShaderModule({\n\t\t\tlabel: `vignette_${format}.wgsl`,\n\t\t\tcode: VIGNETTE_SHADER\n\t\t});\n\t\tpipeline = createFullscreenPipeline(device, {\n\t\t\tlabel: `VignettePipeline_${format}`,\n\t\t\tmodule: vignetteModule,\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\tvignettePipeline: pipeline,\n\t\tuniformLayout: layouts.uniformLayout,\n\t\tsingleTextureLayout: layouts.singleTextureLayout,\n\t\tsignalTextureLayout: layouts.signalTextureLayout\n\t};\n}\nconst VignetteWebGPURenderer = 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 !== \"Vignette\" || !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] : \"vignette_node\";\n\tconst resolveBindable = (configKey, defaultValue, minVal, maxVal) => {\n\t\tconst handleId = op[`${configKey}HandleId`];\n\t\tconst input = handleId ? op.inputs?.[handleId] : null;\n\t\tconst hasSignal = !!(input?.connectionValid && (input.outputItem?.type === \"Signal\" || 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\") val = Math.max(minVal, Math.min(maxVal, Number(input.outputItem.data ?? defaultValue)));\n\t\telse {\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}\n\t\telse if (sd) {\n\t\t\tval = Math.max(minVal, Math.min(maxVal, Number(sd.offset ?? 0)));\n\t\t\thasStaticSig = true;\n\t\t}\n\t\treturn {\n\t\t\tval,\n\t\t\thasStaticSig,\n\t\t\tsd,\n\t\t\tgpuTextureView\n\t\t};\n\t};\n\tconst strengthRes = resolveBindable(\"strength\", 50, 0, 100);\n\tconst radiusRes = resolveBindable(\"radius\", 1, .1, 2);\n\tconst softnessRes = resolveBindable(\"softness\", .5, 0, 1);\n\tconst roundnessRes = resolveBindable(\"roundness\", .5, 0, 1);\n\tconst centerXRes = resolveBindable(\"centerX\", .5, 0, 1);\n\tconst centerYRes = resolveBindable(\"centerY\", .5, 0, 1);\n\tconst { texture: tmpTex } = await drawChildToTexture(args, childMedia);\n\targs.pass.end();\n\tconst { vignettePipeline: pipeline, uniformLayout: uLayout, singleTextureLayout: tLayout, signalTextureLayout: sigLayout } = getVignetteResources(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 strengthView = getSignalView(strengthRes, \"strength_sig\");\n\tconst radiusView = getSignalView(radiusRes, \"radius_sig\");\n\tconst softnessView = getSignalView(softnessRes, \"softness_sig\");\n\tconst roundnessView = getSignalView(roundnessRes, \"roundness_sig\");\n\tconst centerXView = getSignalView(centerXRes, \"centerX_sig\");\n\tconst centerYView = getSignalView(centerYRes, \"centerY_sig\");\n\tvignetteUniformData[0] = strengthRes.val;\n\tvignetteUniformData[1] = radiusRes.val;\n\tvignetteUniformData[2] = softnessRes.val;\n\tvignetteUniformData[3] = roundnessRes.val;\n\tvignetteUniformData[4] = centerXRes.val;\n\tvignetteUniformData[5] = centerYRes.val;\n\tvignetteUniformData[6] = strengthRes.hasStaticSig ? 1 : 0;\n\tvignetteUniformData[7] = radiusRes.hasStaticSig ? 1 : 0;\n\tvignetteUniformData[8] = softnessRes.hasStaticSig ? 1 : 0;\n\tvignetteUniformData[9] = roundnessRes.hasStaticSig ? 1 : 0;\n\tvignetteUniformData[10] = centerXRes.hasStaticSig ? 1 : 0;\n\tvignetteUniformData[11] = centerYRes.hasStaticSig ? 1 : 0;\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(vignetteUniformData);\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: strengthView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: radiusView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: softnessView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: roundnessView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 4,\n\t\t\t\t\tresource: centerXView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 5,\n\t\t\t\t\tresource: centerYView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 6,\n\t\t\t\t\tresource: sampler\n\t\t\t\t}\n\t\t\t]\n\t\t})\n\t]);\n\tdrawTextureToTarget(args, outTex, op.opacity ?? 1);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: VignetteWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-B_pue82_.mjs.map"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import "./chunk-D7gtBK74.mjs";
|
|
2
|
-
import { n as defineRenderer } from "./renderer-
|
|
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-
|
|
2
|
+
import { n as defineRenderer } from "./renderer-BgmO1Dzw.mjs";
|
|
3
|
+
import "./dist-CDwWQYg3.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-Bb4WmYYH.mjs";
|
|
5
5
|
|
|
6
6
|
//#region ../../nodes/node-pixelate/dist/renderers-lrLhGRcA.mjs
|
|
7
7
|
const OP = "Pixelate";
|
|
@@ -201,4 +201,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: PixelateWebGPURenderer
|
|
|
201
201
|
|
|
202
202
|
//#endregion
|
|
203
203
|
export { PixelateWebGPURenderer, renderers_default as default };
|
|
204
|
-
//# sourceMappingURL=renderer-
|
|
204
|
+
//# sourceMappingURL=renderer-yF40Pb-n.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-
|
|
1
|
+
{"version":3,"file":"renderer-yF40Pb-n.mjs","names":[],"sources":["../../../nodes/node-pixelate/dist/renderers-lrLhGRcA.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 = \"Pixelate\";\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 size = u.v[1].x;\n\tlet shape = u32(u.v[1].y + 0.5);\n\tlet gap = u.v[1].z;\n\n\tlet R = res();\n\tlet cell = max(size, 1.0);\n\tlet p = in.uv * R;\n\tlet c0 = floor(p / cell) * cell + cell * 0.5;\n\tlet col = texelS(c0);\n\tlet f = (p - c0) / cell;\n\tlet g = 1.0 - gap;\n\tlet e = 1.0 / cell;\n\tvar m = 1.0;\n\tif (shape == 1u) {\n\t\tm = 1.0 - smoothstep(0.5 * g - e, 0.5 * g, length(f));\n\t} else if (shape == 2u) {\n\t\tm = 1.0 - smoothstep(0.5 * g - e, 0.5 * g, abs(f.x) + abs(f.y));\n\t} else if (gap > 0.0) {\n\t\tm = 1.0 - smoothstep(0.5 * g - e, 0.5 * g, max(abs(f.x), abs(f.y)));\n\t}\n\treturn premul(vec4<f32>(col.rgb, col.a * m));\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.size, 12);\n\tdata[5] = Math.max(0, [\n\t\t\"square\",\n\t\t\"circle\",\n\t\t\"diamond\"\n\t].indexOf(String(raw.shape ?? \"square\")));\n\tdata[6] = num(raw.gap, 0);\n}\nconst PixelateWebGPURenderer = 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: PixelateWebGPURenderer });\n\n//#endregion\nexport { PixelateWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-lrLhGRcA.mjs.map"],"mappings":";;;;;;AAIA,MAAM,KAAK;AACX,MAAM,iBAAiB;;AAEvB,MAAM,SAAS,CAAC;;;;;EAKd,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsErB;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,MAAM,GAAG;AAC3B,MAAK,KAAK,KAAK,IAAI,GAAG;EACrB;EACA;EACA;EACA,CAAC,QAAQ,OAAO,IAAI,SAAS,SAAS,CAAC,CAAC;AACzC,MAAK,KAAK,IAAI,IAAI,KAAK,EAAE;;AAE1B,MAAM,yBAAyB,OAAO,SAAS;CAC9C,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,wBAAwB,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
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 } from "./gpu-
|
|
1
|
+
import { c as resolveSignalField, n as defineRenderer } from "./renderer-BgmO1Dzw.mjs";
|
|
2
|
+
import { In as signalRegistry, q as parseColor } from "./dist-CDwWQYg3.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 } from "./gpu-Bb4WmYYH.mjs";
|
|
4
4
|
|
|
5
5
|
//#region ../../nodes/node-refraction-caustics/dist/renderers-BuTkLbVU.mjs
|
|
6
6
|
const REFRACTION_CAUSTICS_SHADER = `
|
|
@@ -563,4 +563,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: RefractionCaustics3DWeb
|
|
|
563
563
|
|
|
564
564
|
//#endregion
|
|
565
565
|
export { renderers_default as n, RefractionCaustics3DWebGPURenderer as t };
|
|
566
|
-
//# sourceMappingURL=renderer-
|
|
566
|
+
//# sourceMappingURL=renderer-yFHP9Zj2.mjs.map
|