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,7 +1,7 @@
|
|
|
1
1
|
import "./chunk-D7gtBK74.mjs";
|
|
2
|
-
import { n as defineRenderer } from "./renderer-
|
|
3
|
-
import "./dist-
|
|
4
|
-
import { o as drawChildToTexture } from "./gpu-
|
|
2
|
+
import { n as defineRenderer } from "./renderer-BgmO1Dzw.mjs";
|
|
3
|
+
import "./dist-CDwWQYg3.mjs";
|
|
4
|
+
import { o as drawChildToTexture } from "./gpu-Bb4WmYYH.mjs";
|
|
5
5
|
|
|
6
6
|
//#region ../../nodes/node-extract-frame/dist/renderers-ByS_lnbu.mjs
|
|
7
7
|
/**
|
|
@@ -58,4 +58,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: ExtractFrameWebGPURende
|
|
|
58
58
|
|
|
59
59
|
//#endregion
|
|
60
60
|
export { renderers_default as default };
|
|
61
|
-
//# sourceMappingURL=renderer-
|
|
61
|
+
//# sourceMappingURL=renderer-EwSSuJXj.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-
|
|
1
|
+
{"version":3,"file":"renderer-EwSSuJXj.mjs","names":[],"sources":["../../../nodes/node-extract-frame/dist/renderers-ByS_lnbu.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { drawChildToTexture } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\n/**\n* WebGPU renderer for the ExtractFrame operation.\n*\n* Renders the child media (Video/Lottie/GIF) at a specific frame number,\n* producing a static image output. The frame number is stored in the operation\n* and the child is rendered at the corresponding timestamp.\n*/\nconst ExtractFrameWebGPURenderer = async (args) => {\n\tconst { ctx, props, targetView, targetWidth, targetHeight, encoder } = args;\n\tconst { virtualMedia, opacity = 1 } = props;\n\tconst op = virtualMedia?.operation;\n\tif (!op || op.op !== \"ExtractFrame\") return;\n\tconst childMedia = virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tconst frame = op.frame ?? 0;\n\tconst childMeta = childMedia.metadata;\n\tconst childFps = childMeta?.fps ?? 24;\n\tconst timestampSec = frame / childFps;\n\targs.pass.end();\n\tconst sourceWidth = childMeta?.width ?? props.containerWidth ?? targetWidth;\n\tconst sourceHeight = childMeta?.height ?? props.containerHeight ?? targetHeight;\n\tconst containerWidth = props.containerWidth ?? ctx.surface.width;\n\tconst containerHeight = props.containerHeight ?? ctx.surface.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\tframe,\n\t\t\tfps: childFps,\n\t\t\ttimestampSec,\n\t\t\tforceWait: true\n\t\t}\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\tctx.renderer.drawTexture(outPass, childTex, {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: containerWidth,\n\t\theight: containerHeight\n\t}, { opacity });\n\targs.pass = outPass;\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: ExtractFrameWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-ByS_lnbu.mjs.map"],"mappings":";;;;;;;;;;;;;AAWA,MAAM,6BAA6B,OAAO,SAAS;CAClD,MAAM,EAAE,KAAK,OAAO,YAAY,aAAa,cAAc,YAAY;CACvE,MAAM,EAAE,cAAc,UAAU,MAAM;CACtC,MAAM,KAAK,cAAc;AACzB,KAAI,CAAC,MAAM,GAAG,OAAO,eAAgB;CACrC,MAAM,aAAa,aAAa,WAAW;AAC3C,KAAI,CAAC,WAAY;CACjB,MAAM,QAAQ,GAAG,SAAS;CAC1B,MAAM,YAAY,WAAW;CAC7B,MAAM,WAAW,WAAW,OAAO;CACnC,MAAM,eAAe,QAAQ;AAC7B,MAAK,KAAK,KAAK;CACf,MAAM,cAAc,WAAW,SAAS,MAAM,kBAAkB;CAChE,MAAM,eAAe,WAAW,UAAU,MAAM,mBAAmB;CACnE,MAAM,iBAAiB,MAAM,kBAAkB,IAAI,QAAQ;CAC3D,MAAM,kBAAkB,MAAM,mBAAmB,IAAI,QAAQ;CAC7D,MAAM,EAAE,SAAS,aAAa,MAAM,mBAAmB,MAAM,YAAY;EACxE,OAAO;EACP,QAAQ;EACR,OAAO;GACN,GAAG;GACH,gBAAgB;GAChB,iBAAiB;GACjB;GACA,KAAK;GACL;GACA,WAAW;GACX;EACD,CAAC;CACF,MAAM,UAAU,IAAI,SAAS,WAAW,SAAS,YAAY;EAC5D,GAAG;EACH,GAAG;EACH,GAAG;EACH,GAAG;EACH,EAAE,aAAa,cAAc,OAAO;AACrC,KAAI,SAAS,YAAY,SAAS,UAAU;EAC3C,GAAG;EACH,GAAG;EACH,OAAO;EACP,QAAQ;EACR,EAAE,EAAE,SAAS,CAAC;AACf,MAAK,OAAO;;AAKb,IAAI,oBAAoB,eAAe,EAAE,gBAAgB,4BAA4B,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { n as defineRenderer } from "./renderer-
|
|
2
|
-
import { a as createFullscreenPipeline, i as beginTargetPass, l as fragmentBindGroupLayout, o as drawChildToTexture, r as STRAIGHT_ALPHA_BLEND, t as FULLSCREEN_QUAD_WGSL } from "./gpu-
|
|
1
|
+
import { n as defineRenderer } from "./renderer-BgmO1Dzw.mjs";
|
|
2
|
+
import { a as createFullscreenPipeline, i as beginTargetPass, l as fragmentBindGroupLayout, o as drawChildToTexture, r as STRAIGHT_ALPHA_BLEND, t as FULLSCREEN_QUAD_WGSL } from "./gpu-Bb4WmYYH.mjs";
|
|
3
3
|
|
|
4
4
|
//#region ../../nodes/node-liquify/dist/renderers-C4bNr5l9.mjs
|
|
5
5
|
const MAX_OPERATIONS = 1024;
|
|
@@ -184,4 +184,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: LiquifyWebGPURenderer }
|
|
|
184
184
|
|
|
185
185
|
//#endregion
|
|
186
186
|
export { renderers_default as n, LiquifyWebGPURenderer as t };
|
|
187
|
-
//# sourceMappingURL=renderer-
|
|
187
|
+
//# sourceMappingURL=renderer-JJibsJfb.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-
|
|
1
|
+
{"version":3,"file":"renderer-JJibsJfb.mjs","names":[],"sources":["../../../nodes/node-liquify/dist/renderers-C4bNr5l9.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, STRAIGHT_ALPHA_BLEND, beginTargetPass, createFullscreenPipeline, drawChildToTexture, fragmentBindGroupLayout } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst MAX_OPERATIONS = 1024;\nconst LIQUIFY_SHADER = `\nstruct LiquifyOpData {\n\topType : f32, // 0=Push, 1=Pull, 2=Bloat, 3=Pucker, 4=TwirlCW, 5=TwirlCCW\n\tx : f32,\n\ty : f32,\n\tradius : f32,\n\tstrength : f32,\n\tdx : f32,\n\tdy : f32,\n\t_pad : f32,\n};\n\nstruct LiquifyUniforms {\n\topCount : f32,\n\taspectRatio : f32,\n\topacity : f32,\n\t_pad0 : f32,\n\tops : array<LiquifyOpData, 1024>,\n};\n\n@group(0) @binding(0) var<uniform> u : LiquifyUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nconst PI = 3.141592653589793;\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tvar currentUV = in.uv;\n\tlet count = u32(u.opCount);\n\tlet aspect = u.aspectRatio;\n\n\tfor (var i = 0u; i < count && i < 1024u; i = i + 1u) {\n\t\tlet op = u.ops[i];\n\t\tlet center = vec2<f32>(op.x, op.y);\n\t\tlet delta = currentUV - center;\n\t\tlet deltaAspect = vec2<f32>(delta.x * aspect, delta.y);\n\t\tlet dist = length(deltaAspect);\n\n\t\tif (dist < op.radius && op.radius > 0.0001) {\n\t\t\tlet t = dist / op.radius;\n\t\t\tlet falloff = (1.0 - t * t) * (1.0 - t * t);\n\t\t\tlet s = op.strength;\n\n\t\t\tif (op.opType < 0.5) {\n\t\t\t\t// 0 = Push\n\t\t\t\tlet shift = vec2<f32>(op.dx, op.dy) * s * falloff;\n\t\t\t\tcurrentUV = currentUV - shift;\n\t\t\t} else if (op.opType < 1.5) {\n\t\t\t\t// 1 = Pull\n\t\t\t\tlet shift = vec2<f32>(op.dx, op.dy) * s * falloff;\n\t\t\t\tcurrentUV = currentUV + shift;\n\t\t\t} else if (op.opType < 2.5) {\n\t\t\t\t// 2 = Bloat\n\t\t\t\tlet factor = 1.0 - s * falloff * 0.45;\n\t\t\t\tcurrentUV = center + delta * factor;\n\t\t\t} else if (op.opType < 3.5) {\n\t\t\t\t// 3 = Pucker\n\t\t\t\tlet factor = 1.0 + s * falloff * 0.45;\n\t\t\t\tcurrentUV = center + delta * factor;\n\t\t\t} else if (op.opType < 4.5) {\n\t\t\t\t// 4 = TwirlCW\n\t\t\t\tlet angle = -s * PI * falloff;\n\t\t\t\tlet cosA = cos(angle);\n\t\t\t\tlet sinA = sin(angle);\n\t\t\t\tlet rotated = vec2<f32>(delta.x * cosA - delta.y * sinA, delta.x * sinA + delta.y * cosA);\n\t\t\t\tcurrentUV = center + rotated;\n\t\t\t} else {\n\t\t\t\t// 5 = TwirlCCW\n\t\t\t\tlet angle = s * PI * falloff;\n\t\t\t\tlet cosA = cos(angle);\n\t\t\t\tlet sinA = sin(angle);\n\t\t\t\tlet rotated = vec2<f32>(delta.x * cosA - delta.y * sinA, delta.x * sinA + delta.y * cosA);\n\t\t\t\tcurrentUV = center + rotated;\n\t\t\t}\n\t\t}\n\t}\n\n\tlet clampedUV = clamp(currentUV, vec2<f32>(0.0), vec2<f32>(1.0));\n\tlet sampledColor = textureSampleLevel(tex, samp, clampedUV, 0.0);\n\treturn sampledColor;\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nfunction getLiquifyResources(device, format) {\n\tlet layouts = deviceResourceCache.get(device);\n\tif (!layouts) {\n\t\tlayouts = {\n\t\t\tuniformLayout: fragmentBindGroupLayout(device, [\"uniform\"], \"LiquifyUniformLayout\"),\n\t\t\tsingleTextureLayout: fragmentBindGroupLayout(device, [\"texture\", \"sampler\"], \"LiquifyTextureLayout\"),\n\t\t\tpipelineCache: /* @__PURE__ */ new Map()\n\t\t};\n\t\tdeviceResourceCache.set(device, layouts);\n\t}\n\tconst cacheKey = format;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst module = device.createShaderModule({\n\t\t\tlabel: \"liquify.wgsl\",\n\t\t\tcode: LIQUIFY_SHADER\n\t\t});\n\t\tpipeline = createFullscreenPipeline(device, {\n\t\t\tlabel: `LiquifyPipeline_${format}`,\n\t\t\tmodule,\n\t\t\tlayouts: [layouts.uniformLayout, layouts.singleTextureLayout],\n\t\t\tformat,\n\t\t\tblend: STRAIGHT_ALPHA_BLEND\n\t\t});\n\t\tlayouts.pipelineCache.set(cacheKey, pipeline);\n\t}\n\treturn {\n\t\tliquifyPipeline: pipeline,\n\t\tuniformLayout: layouts.uniformLayout,\n\t\tsingleTextureLayout: layouts.singleTextureLayout\n\t};\n}\nconst TYPE_ENUM_MAP = {\n\tPush: 0,\n\tPull: 1,\n\tBloat: 2,\n\tPucker: 3,\n\tTwirlCW: 4,\n\tTwirlCCW: 5\n};\nconst LiquifyWebGPURenderer = async (args) => {\n\tconst { ctx, pass, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"Liquify\" || !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 aspectRatio = height > 0 ? width / height : 1;\n\tconst { texture: childTexture } = await drawChildToTexture(args, childMedia, { props: {\n\t\t...props,\n\t\tvirtualMedia: childMedia,\n\t\tcontainerWidth: width,\n\t\tcontainerHeight: height\n\t} });\n\tconst operations = op.operations || [];\n\tconst opCount = Math.min(operations.length, MAX_OPERATIONS);\n\tconst uniformData = new Float32Array(4 + MAX_OPERATIONS * 8);\n\tuniformData[0] = opCount;\n\tuniformData[1] = aspectRatio;\n\tuniformData[2] = 1;\n\tuniformData[3] = 0;\n\tfor (let i = 0; i < opCount; i++) {\n\t\tconst item = operations[i];\n\t\tif (!item) continue;\n\t\tconst offset = 4 + i * 8;\n\t\tuniformData[offset + 0] = TYPE_ENUM_MAP[item.type] ?? 2;\n\t\tuniformData[offset + 1] = item.x;\n\t\tuniformData[offset + 2] = item.y;\n\t\tuniformData[offset + 3] = item.radius ?? .15;\n\t\tuniformData[offset + 4] = item.strength ?? .5;\n\t\tuniformData[offset + 5] = item.dx ?? 0;\n\t\tuniformData[offset + 6] = item.dy ?? 0;\n\t\tuniformData[offset + 7] = 0;\n\t}\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(uniformData);\n\tconst resources = getLiquifyResources(ctx.device, ctx.renderer.format);\n\tconst uniformBindGroup = ctx.device.createBindGroup({\n\t\tlayout: resources.uniformLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: uniformBuffer }\n\t\t}]\n\t});\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst textureBindGroup = ctx.renderer.bindGroupCache.getBindGroup(ctx.device, resources.singleTextureLayout, childTexture, sampler);\n\tconst outPass = beginTargetPass(args);\n\toutPass.setPipeline(resources.liquifyPipeline);\n\toutPass.setBindGroup(0, uniformBindGroup);\n\toutPass.setBindGroup(1, textureBindGroup);\n\toutPass.draw(4, 1, 0, 0);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: LiquifyWebGPURenderer });\n\n//#endregion\nexport { LiquifyWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-C4bNr5l9.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-trails/dist/renderers-C37o-6Mg.mjs
|
|
7
7
|
const HISTORY_FORMAT = "rgba16float";
|
|
@@ -212,4 +212,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: TrailsWebGPURenderer })
|
|
|
212
212
|
|
|
213
213
|
//#endregion
|
|
214
214
|
export { TrailsWebGPURenderer, renderers_default as default };
|
|
215
|
-
//# sourceMappingURL=renderer-
|
|
215
|
+
//# sourceMappingURL=renderer-KppAWfmJ.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-B8PNlKEM.mjs","names":[],"sources":["../../../nodes/node-trails/dist/renderers-C37o-6Mg.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 HISTORY_FORMAT = \"rgba16float\";\nconst TRAILS_WGSL = `\nstruct U { a : vec4<f32>, b : vec4<f32> };\n@group(0) @binding(0) var<uniform> u : U;\n@group(0) @binding(1) var historyTex : texture_2d<f32>;\n@group(0) @binding(2) var currentTex : texture_2d<f32>;\n@group(0) @binding(3) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\n// Hue rotation in YIQ: linear, so it works on premultiplied color.\nfn hueRotate(c : vec3<f32>, angle : f32) -> vec3<f32> {\n\tlet yiq = mat3x3<f32>(0.299, 0.596, 0.211, 0.587, -0.274, -0.523, 0.114, -0.322, 0.312) * c;\n\tlet cs = cos(angle);\n\tlet sn = sin(angle);\n\tlet rot = vec3<f32>(yiq.x, yiq.y * cs - yiq.z * sn, yiq.y * sn + yiq.z * cs);\n\treturn mat3x3<f32>(1.0, 1.0, 1.0, 0.956, -0.272, -1.106, 0.621, -0.647, 1.703) * rot;\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet decay = u.a.x;\n\tlet mode = u.a.y;\n\tlet zoom = max(u.a.z, 1e-3);\n\tlet angle = u.a.w;\n\tlet offset = u.b.xy;\n\tlet hue = u.b.z;\n\tlet fresh = u.b.w;\n\tlet cur = textureSampleLevel(currentTex, samp, in.uv, 0.0);\n\tif (fresh > 0.5) { return cur; }\n\tlet c = in.uv - 0.5;\n\tlet cs = cos(-angle);\n\tlet sn = sin(-angle);\n\tlet src = vec2<f32>(c.x * cs - c.y * sn, c.x * sn + c.y * cs) / zoom + 0.5 - offset;\n\tvar hist = vec4<f32>(0.0);\n\tif (all(src >= vec2<f32>(0.0)) && all(src <= vec2<f32>(1.0))) {\n\t\thist = textureSampleLevel(historyTex, samp, src, 0.0);\n\t}\n\tif (hue != 0.0) { hist = vec4<f32>(max(hueRotate(hist.rgb, hue), vec3<f32>(0.0)), hist.a); }\n\thist *= decay;\n\tif (mode < 0.5) { return cur + hist * (1.0 - cur.a); }\n\tif (mode < 1.5) { return vec4<f32>(cur.rgb + hist.rgb, min(cur.a + hist.a, 1.0)); }\n\tif (mode < 2.5) { return max(cur, hist); }\n\t// blend: a running average, so opaque footage shows its own echoes.\n\treturn mix(cur, hist / max(decay, 1e-4), decay);\n}\n`;\nconst resources = perDevice((device) => {\n\tconst layout = fragmentBindGroupLayout(device, [\n\t\t\"uniform\",\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"sampler\"\n\t], \"trails_layout\");\n\tconst module = device.createShaderModule({\n\t\tcode: TRAILS_WGSL,\n\t\tlabel: \"trails.wgsl\"\n\t});\n\treturn {\n\t\tlayout,\n\t\tpipeline: device.createRenderPipeline({\n\t\t\tlabel: \"trails\",\n\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [layout] }),\n\t\t\tvertex: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"vs\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"fs\",\n\t\t\t\ttargets: [{ format: HISTORY_FORMAT }]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t}),\n\t\tsampler: device.createSampler({\n\t\t\tmagFilter: \"linear\",\n\t\t\tminFilter: \"linear\"\n\t\t})\n\t};\n});\nfunction historyFor(effect, device, width, height) {\n\tconst h = effect.feedbackHistory;\n\tif (h && h.device === device && h.width === width && h.height === height) return h;\n\th?.front.destroy();\n\th?.back.destroy();\n\tconst make = (label) => device.createTexture({\n\t\tlabel,\n\t\tsize: [width, height],\n\t\tformat: HISTORY_FORMAT,\n\t\tusage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST\n\t});\n\tconst next = {\n\t\tdevice,\n\t\twidth,\n\t\theight,\n\t\tfront: make(\"trails_front\"),\n\t\tback: make(\"trails_back\"),\n\t\tframe: -1\n\t};\n\teffect.feedbackHistory = next;\n\treturn next;\n}\nasync function childAt(args, frame, compositionStart, h) {\n\tconst child = args.props.virtualMedia?.children?.[0];\n\tif (!child) return null;\n\treturn drawChildToTexture(args, child, {\n\t\texclude: [h.front, h.back],\n\t\tprops: {\n\t\t\t...args.props,\n\t\t\tvirtualMedia: child,\n\t\t\tframe,\n\t\t\tcompositionFrame: compositionStart + frame\n\t\t}\n\t});\n}\nfunction swap(h) {\n\tconst t = h.front;\n\th.front = h.back;\n\th.back = t;\n}\nasync function stepTrails(args, h, v, frame, compositionStart, fresh) {\n\tconst cur = await childAt(args, frame, compositionStart, h);\n\tif (!cur) return;\n\tconst r = resources(args.ctx.device);\n\tconst uniforms = new Float32Array([\n\t\tv.decay,\n\t\t{\n\t\t\tover: 0,\n\t\t\tadd: 1,\n\t\t\tmax: 2,\n\t\t\tblend: 3\n\t\t}[v.mode] ?? 0,\n\t\tv.zoom,\n\t\tv.rotation * Math.PI / 180,\n\t\tv.offsetX / h.width,\n\t\tv.offsetY / h.height,\n\t\tv.hueShift * Math.PI / 180,\n\t\tfresh ? 1 : 0\n\t]);\n\tdrawFullscreenPass(args.encoder, h.back.createView(), r.pipeline, [args.ctx.device.createBindGroup({\n\t\tlayout: r.layout,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: args.ctx.renderer.getTemporaryBuffer(uniforms) }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: h.front.createView()\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: cur.view\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tresource: r.sampler\n\t\t\t}\n\t\t]\n\t})]);\n\tswap(h);\n\th.frame = frame;\n}\nfunction num(v, fallback) {\n\treturn typeof v === \"number\" && Number.isFinite(v) ? v : fallback;\n}\nconst TrailsWebGPURenderer = async (args) => {\n\tconst { ctx, pass, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"Trails\" || !op.effect?.resolveUniforms) return;\n\tif (!props.virtualMedia?.children?.[0]) return;\n\tpass.end();\n\tconst fps = props.fps || 30;\n\tconst local = Math.max(0, Math.round(props.frame ?? 0));\n\tconst compositionFrame = Math.round(props.compositionFrame ?? local);\n\tconst compositionStart = compositionFrame - local;\n\tconst raw = op.effect.resolveUniforms({\n\t\tframe: compositionFrame,\n\t\tfps,\n\t\ttime: compositionFrame / fps\n\t});\n\tconst h = historyFor(op.effect, ctx.device, targetWidth, targetHeight);\n\t{\n\t\tconst v = {\n\t\t\tdecay: Math.min(1, Math.max(0, num(raw.decay, .9))),\n\t\t\tmode: raw.mode ?? \"blend\",\n\t\t\tzoom: num(raw.zoom, 1),\n\t\t\trotation: num(raw.rotation, 0),\n\t\t\toffsetX: num(raw.offsetX, 0),\n\t\t\toffsetY: num(raw.offsetY, 0),\n\t\t\thueShift: num(raw.hueShift, 0),\n\t\t\twarmup: Math.max(0, Math.round(num(raw.warmup, 60)))\n\t\t};\n\t\tif (h.frame !== local) {\n\t\t\tlet start = local;\n\t\t\tif (h.frame === local - 1) start = local;\n\t\t\telse {\n\t\t\t\tconst needed = v.decay > 0 && v.decay < 1 ? Math.ceil(Math.log(.005) / Math.log(v.decay)) : v.warmup;\n\t\t\t\tstart = Math.max(0, local - Math.min(v.warmup, needed));\n\t\t\t\th.frame = -1;\n\t\t\t}\n\t\t\tfor (let f = start; f <= local; f++) await stepTrails(args, h, v, f, compositionStart, h.frame < 0);\n\t\t}\n\t}\n\tdrawTextureToTarget(args, h.front);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: TrailsWebGPURenderer });\n\n//#endregion\nexport { TrailsWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-C37o-6Mg.mjs.map"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"renderer-KppAWfmJ.mjs","names":[],"sources":["../../../nodes/node-trails/dist/renderers-C37o-6Mg.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 HISTORY_FORMAT = \"rgba16float\";\nconst TRAILS_WGSL = `\nstruct U { a : vec4<f32>, b : vec4<f32> };\n@group(0) @binding(0) var<uniform> u : U;\n@group(0) @binding(1) var historyTex : texture_2d<f32>;\n@group(0) @binding(2) var currentTex : texture_2d<f32>;\n@group(0) @binding(3) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\n// Hue rotation in YIQ: linear, so it works on premultiplied color.\nfn hueRotate(c : vec3<f32>, angle : f32) -> vec3<f32> {\n\tlet yiq = mat3x3<f32>(0.299, 0.596, 0.211, 0.587, -0.274, -0.523, 0.114, -0.322, 0.312) * c;\n\tlet cs = cos(angle);\n\tlet sn = sin(angle);\n\tlet rot = vec3<f32>(yiq.x, yiq.y * cs - yiq.z * sn, yiq.y * sn + yiq.z * cs);\n\treturn mat3x3<f32>(1.0, 1.0, 1.0, 0.956, -0.272, -1.106, 0.621, -0.647, 1.703) * rot;\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet decay = u.a.x;\n\tlet mode = u.a.y;\n\tlet zoom = max(u.a.z, 1e-3);\n\tlet angle = u.a.w;\n\tlet offset = u.b.xy;\n\tlet hue = u.b.z;\n\tlet fresh = u.b.w;\n\tlet cur = textureSampleLevel(currentTex, samp, in.uv, 0.0);\n\tif (fresh > 0.5) { return cur; }\n\tlet c = in.uv - 0.5;\n\tlet cs = cos(-angle);\n\tlet sn = sin(-angle);\n\tlet src = vec2<f32>(c.x * cs - c.y * sn, c.x * sn + c.y * cs) / zoom + 0.5 - offset;\n\tvar hist = vec4<f32>(0.0);\n\tif (all(src >= vec2<f32>(0.0)) && all(src <= vec2<f32>(1.0))) {\n\t\thist = textureSampleLevel(historyTex, samp, src, 0.0);\n\t}\n\tif (hue != 0.0) { hist = vec4<f32>(max(hueRotate(hist.rgb, hue), vec3<f32>(0.0)), hist.a); }\n\thist *= decay;\n\tif (mode < 0.5) { return cur + hist * (1.0 - cur.a); }\n\tif (mode < 1.5) { return vec4<f32>(cur.rgb + hist.rgb, min(cur.a + hist.a, 1.0)); }\n\tif (mode < 2.5) { return max(cur, hist); }\n\t// blend: a running average, so opaque footage shows its own echoes.\n\treturn mix(cur, hist / max(decay, 1e-4), decay);\n}\n`;\nconst resources = perDevice((device) => {\n\tconst layout = fragmentBindGroupLayout(device, [\n\t\t\"uniform\",\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"sampler\"\n\t], \"trails_layout\");\n\tconst module = device.createShaderModule({\n\t\tcode: TRAILS_WGSL,\n\t\tlabel: \"trails.wgsl\"\n\t});\n\treturn {\n\t\tlayout,\n\t\tpipeline: device.createRenderPipeline({\n\t\t\tlabel: \"trails\",\n\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [layout] }),\n\t\t\tvertex: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"vs\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule,\n\t\t\t\tentryPoint: \"fs\",\n\t\t\t\ttargets: [{ format: HISTORY_FORMAT }]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t}),\n\t\tsampler: device.createSampler({\n\t\t\tmagFilter: \"linear\",\n\t\t\tminFilter: \"linear\"\n\t\t})\n\t};\n});\nfunction historyFor(effect, device, width, height) {\n\tconst h = effect.feedbackHistory;\n\tif (h && h.device === device && h.width === width && h.height === height) return h;\n\th?.front.destroy();\n\th?.back.destroy();\n\tconst make = (label) => device.createTexture({\n\t\tlabel,\n\t\tsize: [width, height],\n\t\tformat: HISTORY_FORMAT,\n\t\tusage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC | GPUTextureUsage.COPY_DST\n\t});\n\tconst next = {\n\t\tdevice,\n\t\twidth,\n\t\theight,\n\t\tfront: make(\"trails_front\"),\n\t\tback: make(\"trails_back\"),\n\t\tframe: -1\n\t};\n\teffect.feedbackHistory = next;\n\treturn next;\n}\nasync function childAt(args, frame, compositionStart, h) {\n\tconst child = args.props.virtualMedia?.children?.[0];\n\tif (!child) return null;\n\treturn drawChildToTexture(args, child, {\n\t\texclude: [h.front, h.back],\n\t\tprops: {\n\t\t\t...args.props,\n\t\t\tvirtualMedia: child,\n\t\t\tframe,\n\t\t\tcompositionFrame: compositionStart + frame\n\t\t}\n\t});\n}\nfunction swap(h) {\n\tconst t = h.front;\n\th.front = h.back;\n\th.back = t;\n}\nasync function stepTrails(args, h, v, frame, compositionStart, fresh) {\n\tconst cur = await childAt(args, frame, compositionStart, h);\n\tif (!cur) return;\n\tconst r = resources(args.ctx.device);\n\tconst uniforms = new Float32Array([\n\t\tv.decay,\n\t\t{\n\t\t\tover: 0,\n\t\t\tadd: 1,\n\t\t\tmax: 2,\n\t\t\tblend: 3\n\t\t}[v.mode] ?? 0,\n\t\tv.zoom,\n\t\tv.rotation * Math.PI / 180,\n\t\tv.offsetX / h.width,\n\t\tv.offsetY / h.height,\n\t\tv.hueShift * Math.PI / 180,\n\t\tfresh ? 1 : 0\n\t]);\n\tdrawFullscreenPass(args.encoder, h.back.createView(), r.pipeline, [args.ctx.device.createBindGroup({\n\t\tlayout: r.layout,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: args.ctx.renderer.getTemporaryBuffer(uniforms) }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: h.front.createView()\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: cur.view\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tresource: r.sampler\n\t\t\t}\n\t\t]\n\t})]);\n\tswap(h);\n\th.frame = frame;\n}\nfunction num(v, fallback) {\n\treturn typeof v === \"number\" && Number.isFinite(v) ? v : fallback;\n}\nconst TrailsWebGPURenderer = async (args) => {\n\tconst { ctx, pass, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"Trails\" || !op.effect?.resolveUniforms) return;\n\tif (!props.virtualMedia?.children?.[0]) return;\n\tpass.end();\n\tconst fps = props.fps || 30;\n\tconst local = Math.max(0, Math.round(props.frame ?? 0));\n\tconst compositionFrame = Math.round(props.compositionFrame ?? local);\n\tconst compositionStart = compositionFrame - local;\n\tconst raw = op.effect.resolveUniforms({\n\t\tframe: compositionFrame,\n\t\tfps,\n\t\ttime: compositionFrame / fps\n\t});\n\tconst h = historyFor(op.effect, ctx.device, targetWidth, targetHeight);\n\t{\n\t\tconst v = {\n\t\t\tdecay: Math.min(1, Math.max(0, num(raw.decay, .9))),\n\t\t\tmode: raw.mode ?? \"blend\",\n\t\t\tzoom: num(raw.zoom, 1),\n\t\t\trotation: num(raw.rotation, 0),\n\t\t\toffsetX: num(raw.offsetX, 0),\n\t\t\toffsetY: num(raw.offsetY, 0),\n\t\t\thueShift: num(raw.hueShift, 0),\n\t\t\twarmup: Math.max(0, Math.round(num(raw.warmup, 60)))\n\t\t};\n\t\tif (h.frame !== local) {\n\t\t\tlet start = local;\n\t\t\tif (h.frame === local - 1) start = local;\n\t\t\telse {\n\t\t\t\tconst needed = v.decay > 0 && v.decay < 1 ? Math.ceil(Math.log(.005) / Math.log(v.decay)) : v.warmup;\n\t\t\t\tstart = Math.max(0, local - Math.min(v.warmup, needed));\n\t\t\t\th.frame = -1;\n\t\t\t}\n\t\t\tfor (let f = start; f <= local; f++) await stepTrails(args, h, v, f, compositionStart, h.frame < 0);\n\t\t}\n\t}\n\tdrawTextureToTarget(args, h.front);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: TrailsWebGPURenderer });\n\n//#endregion\nexport { TrailsWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-C37o-6Mg.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, 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, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL } from "./gpu-Bb4WmYYH.mjs";
|
|
3
3
|
|
|
4
4
|
//#region ../../nodes/node-curves/dist/renderers-DzdBU1io.mjs
|
|
5
5
|
/**
|
|
@@ -639,4 +639,4 @@ var renderers_default = rendererNode;
|
|
|
639
639
|
|
|
640
640
|
//#endregion
|
|
641
641
|
export { renderers_default as n, rendererNode as t };
|
|
642
|
-
//# sourceMappingURL=renderer-
|
|
642
|
+
//# sourceMappingURL=renderer-LW8MfGjd.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-Cm9fEQsw.mjs","names":[],"sources":["../../../nodes/node-curves/dist/renderers-DzdBU1io.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout } from \"@framefields/node-sdk/gpu\";\n\n//#region src/shared/spline.ts\n/**\n* Solves the Fritsch-Carlson Monotonic Cubic Hermite Spline interpolation\n* for a set of control points. Returns an interpolation function.\n*/\nfunction solveMonotonicSpline(points) {\n\tconst pts = [...points].sort((a, b) => a.x - b.x);\n\tconst uniquePts = [];\n\tfor (const p of pts) if (uniquePts.length === 0 || Math.abs(p.x - uniquePts[uniquePts.length - 1].x) > 1e-6) uniquePts.push(p);\n\tconst n = uniquePts.length;\n\tif (n === 0) return (x) => x;\n\tif (n === 1) return () => uniquePts[0].y;\n\tconst dx = new Float32Array(n - 1);\n\tconst dy = new Float32Array(n - 1);\n\tconst ms = new Float32Array(n - 1);\n\tfor (let i = 0; i < n - 1; i++) {\n\t\tdx[i] = uniquePts[i + 1].x - uniquePts[i].x;\n\t\tdy[i] = uniquePts[i + 1].y - uniquePts[i].y;\n\t\tms[i] = dy[i] / dx[i];\n\t}\n\tconst tangents = new Float32Array(n);\n\ttangents[0] = ms[0];\n\tfor (let i = 1; i < n - 1; i++) tangents[i] = (ms[i - 1] + ms[i]) / 2;\n\ttangents[n - 1] = ms[n - 2];\n\tfor (let i = 0; i < n - 1; i++) {\n\t\tconst m = ms[i];\n\t\tif (Math.abs(m) < 1e-9) {\n\t\t\ttangents[i] = 0;\n\t\t\ttangents[i + 1] = 0;\n\t\t} else {\n\t\t\tconst alpha = tangents[i] / m;\n\t\t\tconst beta = tangents[i + 1] / m;\n\t\t\tconst alphaSq = alpha * alpha;\n\t\t\tconst betaSq = beta * beta;\n\t\t\tif (alphaSq + betaSq > 9) {\n\t\t\t\tconst tau = 3 / Math.sqrt(alphaSq + betaSq);\n\t\t\t\ttangents[i] = tau * alpha * m;\n\t\t\t\ttangents[i + 1] = tau * beta * m;\n\t\t\t}\n\t\t}\n\t}\n\treturn (x) => {\n\t\tif (x <= uniquePts[0].x) return uniquePts[0].y;\n\t\tif (x >= uniquePts[n - 1].x) return uniquePts[n - 1].y;\n\t\tlet low = 0;\n\t\tlet high = n - 2;\n\t\tlet idx = 0;\n\t\twhile (low <= high) {\n\t\t\tconst mid = low + high >> 1;\n\t\t\tif (x >= uniquePts[mid].x && x <= uniquePts[mid + 1].x) {\n\t\t\t\tidx = mid;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (x < uniquePts[mid].x) high = mid - 1;\n\t\t\telse low = mid + 1;\n\t\t}\n\t\tconst h = dx[idx];\n\t\tconst t = (x - uniquePts[idx].x) / h;\n\t\tconst t2 = t * t;\n\t\tconst t3 = t2 * t;\n\t\tconst h00 = 2 * t3 - 3 * t2 + 1;\n\t\tconst h10 = t3 - 2 * t2 + t;\n\t\tconst h01 = -2 * t3 + 3 * t2;\n\t\tconst h11 = t3 - t2;\n\t\tconst y = uniquePts[idx].y * h00 + h * tangents[idx] * h10 + uniquePts[idx + 1].y * h01 + h * tangents[idx + 1] * h11;\n\t\treturn Math.max(0, Math.min(1, y));\n\t};\n}\n\n//#endregion\n//#region src/renderers/histogram-computer.ts\nconst PER_CHAN_SIZE = 256 * 4;\nconst HISTOGRAM_COMPUTE_SHADER = `\n@group(0) @binding(0) var t_src: texture_2d<f32>;\n@group(0) @binding(1) var<storage, read_write> bins_r: array<atomic<u32>, 256>;\n@group(0) @binding(2) var<storage, read_write> bins_g: array<atomic<u32>, 256>;\n@group(0) @binding(3) var<storage, read_write> bins_b: array<atomic<u32>, 256>;\n@group(0) @binding(4) var<storage, read_write> bins_luma: array<atomic<u32>, 256>;\n\n@compute @workgroup_size(8, 8)\nfn main(@builtin(global_invocation_id) gid: vec3<u32>) {\n\tlet dims = textureDimensions(t_src, 0);\n\tif (gid.x >= dims.x || gid.y >= dims.y) { return; }\n\n\tlet color = textureLoad(t_src, vec2<u32>(gid.x, gid.y), 0);\n\tlet a = color.a;\n\tif (a < 1e-5) { return; }\n\n\tlet rgb = color.rgb / a;\n\n\tlet ri = u32(clamp(rgb.r * 255.0, 0.0, 255.0));\n\tlet gi = u32(clamp(rgb.g * 255.0, 0.0, 255.0));\n\tlet bi = u32(clamp(rgb.b * 255.0, 0.0, 255.0));\n\tlet luma = 0.2126 * rgb.r + 0.7152 * rgb.g + 0.0722 * rgb.b;\n\tlet lumai = u32(clamp(luma * 255.0, 0.0, 255.0));\n\n\tatomicAdd(&bins_r[ri], 1u);\n\tatomicAdd(&bins_g[gi], 1u);\n\tatomicAdd(&bins_b[bi], 1u);\n\tatomicAdd(&bins_luma[lumai], 1u);\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nfunction getHistogramResources(device) {\n\tlet res = deviceResourceCache.get(device);\n\tif (!res) {\n\t\tconst bindGroupLayout = device.createBindGroupLayout({ entries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tvisibility: GPUShaderStage.COMPUTE,\n\t\t\t\ttexture: {\n\t\t\t\t\tsampleType: \"float\",\n\t\t\t\t\tviewDimension: \"2d\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tvisibility: GPUShaderStage.COMPUTE,\n\t\t\t\tbuffer: { type: \"storage\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tvisibility: GPUShaderStage.COMPUTE,\n\t\t\t\tbuffer: { type: \"storage\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tvisibility: GPUShaderStage.COMPUTE,\n\t\t\t\tbuffer: { type: \"storage\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 4,\n\t\t\t\tvisibility: GPUShaderStage.COMPUTE,\n\t\t\t\tbuffer: { type: \"storage\" }\n\t\t\t}\n\t\t] });\n\t\tconst module = device.createShaderModule({\n\t\t\tlabel: \"histogram.wgsl\",\n\t\t\tcode: HISTOGRAM_COMPUTE_SHADER\n\t\t});\n\t\tres = {\n\t\t\tpipeline: device.createComputePipeline({\n\t\t\t\tlabel: \"HistogramPipeline\",\n\t\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [bindGroupLayout] }),\n\t\t\t\tcompute: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"main\"\n\t\t\t\t}\n\t\t\t}),\n\t\t\tbindGroupLayout\n\t\t};\n\t\tdeviceResourceCache.set(device, res);\n\t}\n\treturn res;\n}\nconst histogramCallbacks = /* @__PURE__ */ new Map();\nconst inflight = /* @__PURE__ */ new Set();\n/**\n* Records histogram compute + buffer copy commands into the provided encoder.\n* The async readback fires after the queue processes the encoder's commands.\n* This ensures the source texture data is valid when the compute pass reads it.\n*/\nfunction computeHistogramFromEncoder(device, encoder, srcTexture, nodeId) {\n\tif (!histogramCallbacks.get(nodeId)) return;\n\tif (inflight.has(nodeId)) return;\n\tinflight.add(nodeId);\n\tconst { pipeline, bindGroupLayout } = getHistogramResources(device);\n\tconst makeStorage = () => device.createBuffer({\n\t\tsize: PER_CHAN_SIZE,\n\t\tusage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST\n\t});\n\tconst bufR = makeStorage();\n\tconst bufG = makeStorage();\n\tconst bufB = makeStorage();\n\tconst bufLuma = makeStorage();\n\tencoder.clearBuffer(bufR);\n\tencoder.clearBuffer(bufG);\n\tencoder.clearBuffer(bufB);\n\tencoder.clearBuffer(bufLuma);\n\tconst bindGroup = device.createBindGroup({\n\t\tlayout: bindGroupLayout,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: srcTexture.createView()\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: { buffer: bufR }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: { buffer: bufG }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tresource: { buffer: bufB }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 4,\n\t\t\t\tresource: { buffer: bufLuma }\n\t\t\t}\n\t\t]\n\t});\n\tconst pass = encoder.beginComputePass({ label: \"histogram-pass\" });\n\tpass.setPipeline(pipeline);\n\tpass.setBindGroup(0, bindGroup);\n\tpass.dispatchWorkgroups(Math.ceil(srcTexture.width / 8), Math.ceil(srcTexture.height / 8));\n\tpass.end();\n\tconst makeReadback = () => device.createBuffer({\n\t\tsize: PER_CHAN_SIZE,\n\t\tusage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST\n\t});\n\tconst rbR = makeReadback();\n\tconst rbG = makeReadback();\n\tconst rbB = makeReadback();\n\tconst rbLuma = makeReadback();\n\tencoder.copyBufferToBuffer(bufR, 0, rbR, 0, PER_CHAN_SIZE);\n\tencoder.copyBufferToBuffer(bufG, 0, rbG, 0, PER_CHAN_SIZE);\n\tencoder.copyBufferToBuffer(bufB, 0, rbB, 0, PER_CHAN_SIZE);\n\tencoder.copyBufferToBuffer(bufLuma, 0, rbLuma, 0, PER_CHAN_SIZE);\n\tdevice.queue.onSubmittedWorkDone().then(() => {\n\t\treturn Promise.all([\n\t\t\trbR.mapAsync(GPUMapMode.READ),\n\t\t\trbG.mapAsync(GPUMapMode.READ),\n\t\t\trbB.mapAsync(GPUMapMode.READ),\n\t\t\trbLuma.mapAsync(GPUMapMode.READ)\n\t\t]);\n\t}).then(() => {\n\t\tconst r = new Uint32Array(rbR.getMappedRange().slice(0));\n\t\tconst g = new Uint32Array(rbG.getMappedRange().slice(0));\n\t\tconst b = new Uint32Array(rbB.getMappedRange().slice(0));\n\t\tconst luma = new Uint32Array(rbLuma.getMappedRange().slice(0));\n\t\trbR.unmap();\n\t\trbG.unmap();\n\t\trbB.unmap();\n\t\trbLuma.unmap();\n\t\trbR.destroy();\n\t\trbG.destroy();\n\t\trbB.destroy();\n\t\trbLuma.destroy();\n\t\tbufR.destroy();\n\t\tbufG.destroy();\n\t\tbufB.destroy();\n\t\tbufLuma.destroy();\n\t\tinflight.delete(nodeId);\n\t\tconst currentCb = histogramCallbacks.get(nodeId);\n\t\tif (currentCb) currentCb({\n\t\t\tr,\n\t\t\tg,\n\t\t\tb,\n\t\t\tluma\n\t\t});\n\t}).catch(() => {\n\t\trbR.destroy();\n\t\trbG.destroy();\n\t\trbB.destroy();\n\t\trbLuma.destroy();\n\t\tbufR.destroy();\n\t\tbufG.destroy();\n\t\tbufB.destroy();\n\t\tbufLuma.destroy();\n\t\tinflight.delete(nodeId);\n\t});\n}\n\n//#endregion\n//#region src/renderers/webgpu-renderer.ts\nconst LUT_SIZE = 1024;\nconst LUT_FORMAT = \"rgba8unorm\";\nconst LUT_BYTES_PER_ROW = LUT_SIZE * 4;\nconst CURVES_RGB_SHADER = `\n${FULLSCREEN_QUAD_WGSL}\n\n@group(0) @binding(0) var t_lut : texture_2d<f32>;\n@group(0) @binding(1) var s_lut : sampler;\n\n@group(1) @binding(0) var t_src : texture_2d<f32>;\n@group(1) @binding(1) var s_src : sampler;\n\n@fragment fn fs(in: VSOut) -> @location(0) vec4<f32> {\n\tlet src = textureSampleLevel(t_src, s_src, in.uv, 0.0);\n\tif (src.a < 1e-5) { return src; }\n\n\tlet rgb = src.rgb / src.a;\n\n\tlet N = f32(${LUT_SIZE});\n\tlet uv_r = (rgb.r * (N - 1.0) + 0.5) / N;\n\tlet uv_g = (rgb.g * (N - 1.0) + 0.5) / N;\n\tlet uv_b = (rgb.b * (N - 1.0) + 0.5) / N;\n\n\tlet r_graded = textureSampleLevel(t_lut, s_lut, vec2<f32>(uv_r, 0.5), 0.0).r;\n\tlet g_graded = textureSampleLevel(t_lut, s_lut, vec2<f32>(uv_g, 0.5), 0.0).g;\n\tlet b_graded = textureSampleLevel(t_lut, s_lut, vec2<f32>(uv_b, 0.5), 0.0).b;\n\n\tlet graded = vec3<f32>(r_graded, g_graded, b_graded);\n\treturn vec4<f32>(graded * src.a, src.a);\n}\n`;\nconst CURVES_HSL_SHADER = `\nstruct Uniforms {\n\tmode: u32,\n\tpad0: u32,\n\tpad1: u32,\n\tpad2: u32,\n};\n@group(0) @binding(0) var<uniform> u : Uniforms;\n@group(0) @binding(1) var t_lut : texture_2d<f32>;\n@group(0) @binding(2) var s_lut : sampler;\n\n@group(1) @binding(0) var t_src : texture_2d<f32>;\n@group(1) @binding(1) var s_src : sampler;\n\n${FULLSCREEN_QUAD_WGSL}\n\nfn rgb_to_hsl(rgb: vec3<f32>) -> vec3<f32> {\n\tlet r = rgb.r; let g = rgb.g; let b = rgb.b;\n\tlet cmax = max(r, max(g, b));\n\tlet cmin = min(r, min(g, b));\n\tlet delta = cmax - cmin;\n\n\tvar h = 0.0;\n\tvar s = 0.0;\n\tlet l = (cmax + cmin) * 0.5;\n\n\tif (delta > 1e-5) {\n\t\ts = delta / (1.0 - abs(2.0 * l - 1.0));\n\t\tif (cmax == r) {\n\t\t\th = ((g - b) / delta) % 6.0;\n\t\t} else if (cmax == g) {\n\t\t\th = (b - r) / delta + 2.0;\n\t\t} else {\n\t\t\th = (r - g) / delta + 4.0;\n\t\t}\n\t\th = h / 6.0;\n\t\tif (h < 0.0) { h = h + 1.0; }\n\t}\n\treturn vec3<f32>(h, s, l);\n}\n\nfn hsl_to_rgb(hsl: vec3<f32>) -> vec3<f32> {\n\tlet h = hsl.x; let s = hsl.y; let l = hsl.z;\n\tlet c = (1.0 - abs(2.0 * l - 1.0)) * s;\n\tlet x = c * (1.0 - abs((h * 6.0) % 2.0 - 1.0));\n\tlet m = l - c * 0.5;\n\n\tvar rgb = vec3<f32>(0.0);\n\tlet hi = u32(h * 6.0) % 6u;\n\tif (hi == 0u) { rgb = vec3<f32>(c, x, 0.0); }\n\telse if (hi == 1u) { rgb = vec3<f32>(x, c, 0.0); }\n\telse if (hi == 2u) { rgb = vec3<f32>(0.0, c, x); }\n\telse if (hi == 3u) { rgb = vec3<f32>(0.0, x, c); }\n\telse if (hi == 4u) { rgb = vec3<f32>(x, 0.0, c); }\n\telse { rgb = vec3<f32>(c, 0.0, x); }\n\treturn rgb + vec3<f32>(m);\n}\n\nfn lut_sample(x: f32) -> f32 {\n\tlet N = f32(${LUT_SIZE});\n\tlet uv_x = (x * (N - 1.0) + 0.5) / N;\n\treturn textureSampleLevel(t_lut, s_lut, vec2<f32>(uv_x, 0.5), 0.0).r;\n}\n\n@fragment fn fs(in: VSOut) -> @location(0) vec4<f32> {\n\tlet src = textureSampleLevel(t_src, s_src, in.uv, 0.0);\n\tif (src.a < 1e-5) { return src; }\n\n\tlet rgb = src.rgb / src.a;\n\tlet hsl = rgb_to_hsl(rgb);\n\n\tvar out_hsl = hsl;\n\n\tif (u.mode == 0u) {\n\t\tlet adj = lut_sample(hsl.x);\n\t\tout_hsl.x = fract(hsl.x + (adj - 0.5) * 2.0);\n\t} else if (u.mode == 1u) {\n\t\tlet adj = lut_sample(hsl.x);\n\t\tout_hsl.y = clamp(hsl.y * (adj * 2.0), 0.0, 1.0);\n\t} else if (u.mode == 2u) {\n\t\tlet adj = lut_sample(hsl.z);\n\t\tout_hsl.y = clamp(hsl.y * (adj * 2.0), 0.0, 1.0);\n\t} else {\n\t\tlet adj = lut_sample(hsl.y);\n\t\tout_hsl.y = clamp(adj, 0.0, 1.0);\n\t}\n\n\tlet out_rgb = clamp(hsl_to_rgb(out_hsl), vec3<f32>(0.0), vec3<f32>(1.0));\n\treturn vec4<f32>(out_rgb * src.a, src.a);\n}\n`;\nconst rgbResourceCache = /* @__PURE__ */ new WeakMap();\nconst hslResourceCache = /* @__PURE__ */ new WeakMap();\nfunction getRgbResources(device, format) {\n\tlet res = rgbResourceCache.get(device);\n\tif (!res) {\n\t\tconst lutBGL = fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]);\n\t\tconst srcBGL = fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]);\n\t\tres = {\n\t\t\tpipeline: createFullscreenPipeline(device, {\n\t\t\t\tlabel: \"CurvesRgbPipeline\",\n\t\t\t\tmodule: device.createShaderModule({\n\t\t\t\t\tlabel: \"curves-rgb.wgsl\",\n\t\t\t\t\tcode: CURVES_RGB_SHADER\n\t\t\t\t}),\n\t\t\t\tlayouts: [lutBGL, srcBGL],\n\t\t\t\tformat\n\t\t\t}),\n\t\t\tlutBindGroupLayout: lutBGL,\n\t\t\tsrcBindGroupLayout: srcBGL\n\t\t};\n\t\trgbResourceCache.set(device, res);\n\t}\n\treturn res;\n}\nfunction getHslResources(device, format) {\n\tlet res = hslResourceCache.get(device);\n\tif (!res) {\n\t\tconst uniformLayout = fragmentBindGroupLayout(device, [\n\t\t\t\"uniform\",\n\t\t\t\"texture\",\n\t\t\t\"sampler\"\n\t\t]);\n\t\tconst srcBGL = fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]);\n\t\tres = {\n\t\t\tpipeline: createFullscreenPipeline(device, {\n\t\t\t\tlabel: \"CurvesHslPipeline\",\n\t\t\t\tmodule: device.createShaderModule({\n\t\t\t\t\tlabel: \"curves-hsl.wgsl\",\n\t\t\t\t\tcode: CURVES_HSL_SHADER\n\t\t\t\t}),\n\t\t\t\tlayouts: [uniformLayout, srcBGL],\n\t\t\t\tformat\n\t\t\t}),\n\t\t\tuniformLayout,\n\t\t\tsrcBindGroupLayout: srcBGL\n\t\t};\n\t\thslResourceCache.set(device, res);\n\t}\n\treturn res;\n}\nconst LUT_CACHE_LIMIT = 32;\nconst deviceTextureCache = /* @__PURE__ */ new WeakMap();\nfunction getLut(device, configKey, build) {\n\tlet cache = deviceTextureCache.get(device);\n\tif (!cache) {\n\t\tcache = /* @__PURE__ */ new Map();\n\t\tdeviceTextureCache.set(device, cache);\n\t}\n\tconst hit = cache.get(configKey);\n\tif (hit) {\n\t\tcache.delete(configKey);\n\t\tcache.set(configKey, hit);\n\t\treturn hit;\n\t}\n\tconst texture = build();\n\tcache.set(configKey, texture);\n\tif (cache.size > LUT_CACHE_LIMIT) {\n\t\tconst [oldestKey, oldest] = cache.entries().next().value;\n\t\tcache.delete(oldestKey);\n\t\toldest.destroy();\n\t}\n\treturn texture;\n}\nfunction buildRgbLut(device, op) {\n\tconst masterSpline = solveMonotonicSpline(op.master || [{\n\t\tx: 0,\n\t\ty: 0\n\t}, {\n\t\tx: 1,\n\t\ty: 1\n\t}]);\n\tconst redSpline = solveMonotonicSpline(op.red || [{\n\t\tx: 0,\n\t\ty: 0\n\t}, {\n\t\tx: 1,\n\t\ty: 1\n\t}]);\n\tconst greenSpline = solveMonotonicSpline(op.green || [{\n\t\tx: 0,\n\t\ty: 0\n\t}, {\n\t\tx: 1,\n\t\ty: 1\n\t}]);\n\tconst blueSpline = solveMonotonicSpline(op.blue || [{\n\t\tx: 0,\n\t\ty: 0\n\t}, {\n\t\tx: 1,\n\t\ty: 1\n\t}]);\n\tconst lutData = new Uint8Array(LUT_SIZE * 4);\n\tfor (let i = 0; i < LUT_SIZE; i++) {\n\t\tconst masterVal = masterSpline(i / (LUT_SIZE - 1));\n\t\tconst r = Math.max(0, Math.min(1, redSpline(masterVal)));\n\t\tconst g = Math.max(0, Math.min(1, greenSpline(masterVal)));\n\t\tconst b = Math.max(0, Math.min(1, blueSpline(masterVal)));\n\t\tlutData[i * 4 + 0] = Math.round(r * 255);\n\t\tlutData[i * 4 + 1] = Math.round(g * 255);\n\t\tlutData[i * 4 + 2] = Math.round(b * 255);\n\t\tlutData[i * 4 + 3] = 255;\n\t}\n\tconst texture = device.createTexture({\n\t\tsize: [\n\t\t\tLUT_SIZE,\n\t\t\t1,\n\t\t\t1\n\t\t],\n\t\tdimension: \"2d\",\n\t\tformat: LUT_FORMAT,\n\t\tusage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST\n\t});\n\tdevice.queue.writeTexture({ texture }, lutData, { bytesPerRow: LUT_BYTES_PER_ROW }, [\n\t\tLUT_SIZE,\n\t\t1,\n\t\t1\n\t]);\n\treturn texture;\n}\nfunction buildHslLut(device, points) {\n\tconst spline = solveMonotonicSpline(points);\n\tconst lutData = new Uint8Array(LUT_SIZE * 4);\n\tfor (let i = 0; i < LUT_SIZE; i++) {\n\t\tconst u = i / (LUT_SIZE - 1);\n\t\tconst val = Math.round(Math.max(0, Math.min(1, spline(u))) * 255);\n\t\tlutData[i * 4 + 0] = val;\n\t\tlutData[i * 4 + 1] = val;\n\t\tlutData[i * 4 + 2] = val;\n\t\tlutData[i * 4 + 3] = 255;\n\t}\n\tconst texture = device.createTexture({\n\t\tsize: [\n\t\t\tLUT_SIZE,\n\t\t\t1,\n\t\t\t1\n\t\t],\n\t\tdimension: \"2d\",\n\t\tformat: LUT_FORMAT,\n\t\tusage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST\n\t});\n\tdevice.queue.writeTexture({ texture }, lutData, { bytesPerRow: LUT_BYTES_PER_ROW }, [\n\t\tLUT_SIZE,\n\t\t1,\n\t\t1\n\t]);\n\treturn texture;\n}\nconst HSL_MODE_MAP = {\n\t\"hue-vs-hue\": 0,\n\t\"hue-vs-sat\": 1,\n\t\"lum-vs-sat\": 2,\n\t\"sat-vs-sat\": 3\n};\nconst HSL_CURVE_KEY_MAP = {\n\t\"hue-vs-hue\": \"hueVsHue\",\n\t\"hue-vs-sat\": \"hueVsSat\",\n\t\"lum-vs-sat\": \"lumVsSat\",\n\t\"sat-vs-sat\": \"satVsSat\"\n};\nconst CurvesWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"Curves\" || !props.virtualMedia?.children?.[0]) return;\n\tpass.end();\n\tconst childMedia = props.virtualMedia.children[0];\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst nodeId = op.nodeId || \"curves_fallback\";\n\tconst curveType = op.curveType || \"rgb\";\n\tconst { texture: tmpTex } = await drawChildToTexture(args, childMedia);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst outTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tif (curveType === \"rgb\") {\n\t\tconst configKey = JSON.stringify({\n\t\t\tcurveType,\n\t\t\tmaster: op.master,\n\t\t\tred: op.red,\n\t\t\tgreen: op.green,\n\t\t\tblue: op.blue\n\t\t});\n\t\tconst lut = getLut(ctx.device, configKey, () => buildRgbLut(ctx.device, op));\n\t\tconst { pipeline, lutBindGroupLayout, srcBindGroupLayout } = getRgbResources(ctx.device, ctx.renderer.format);\n\t\tdrawFullscreenPass(encoder, outTex.createView(), pipeline, [ctx.device.createBindGroup({\n\t\t\tlayout: lutBindGroupLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: lut.createView()\n\t\t\t}, {\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: sampler\n\t\t\t}]\n\t\t}), ctx.renderer.bindGroupCache.getBindGroup(ctx.device, srcBindGroupLayout, tmpTex, sampler)]);\n\t} else {\n\t\tconst hslPoints = op[HSL_CURVE_KEY_MAP[curveType]] || [{\n\t\t\tx: 0,\n\t\t\ty: .5\n\t\t}, {\n\t\t\tx: 1,\n\t\t\ty: .5\n\t\t}];\n\t\tconst configKey = JSON.stringify({\n\t\t\tcurveType,\n\t\t\tpoints: hslPoints\n\t\t});\n\t\tconst lut = getLut(ctx.device, configKey, () => buildHslLut(ctx.device, hslPoints));\n\t\tconst uniformData = new Uint32Array([\n\t\t\tHSL_MODE_MAP[curveType] ?? 0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0\n\t\t]);\n\t\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(uniformData);\n\t\tconst { pipeline, uniformLayout, srcBindGroupLayout } = getHslResources(ctx.device, ctx.renderer.format);\n\t\tdrawFullscreenPass(encoder, outTex.createView(), pipeline, [ctx.device.createBindGroup({\n\t\t\tlayout: uniformLayout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: uniformBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: lut.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: sampler\n\t\t\t\t}\n\t\t\t]\n\t\t}), ctx.renderer.bindGroupCache.getBindGroup(ctx.device, srcBindGroupLayout, tmpTex, sampler)]);\n\t}\n\tcomputeHistogramFromEncoder(ctx.device, encoder, outTex, nodeId);\n\tdrawTextureToTarget(args, outTex, props.opacity ?? 1);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nconst rendererNode = defineRenderer({ WebGPURenderer: CurvesWebGPURenderer });\nvar renderers_default = rendererNode;\n\n//#endregion\nexport { renderers_default as n, solveMonotonicSpline as r, rendererNode as t };\n//# sourceMappingURL=renderers-DzdBU1io.mjs.map"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"renderer-LW8MfGjd.mjs","names":[],"sources":["../../../nodes/node-curves/dist/renderers-DzdBU1io.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout } from \"@framefields/node-sdk/gpu\";\n\n//#region src/shared/spline.ts\n/**\n* Solves the Fritsch-Carlson Monotonic Cubic Hermite Spline interpolation\n* for a set of control points. Returns an interpolation function.\n*/\nfunction solveMonotonicSpline(points) {\n\tconst pts = [...points].sort((a, b) => a.x - b.x);\n\tconst uniquePts = [];\n\tfor (const p of pts) if (uniquePts.length === 0 || Math.abs(p.x - uniquePts[uniquePts.length - 1].x) > 1e-6) uniquePts.push(p);\n\tconst n = uniquePts.length;\n\tif (n === 0) return (x) => x;\n\tif (n === 1) return () => uniquePts[0].y;\n\tconst dx = new Float32Array(n - 1);\n\tconst dy = new Float32Array(n - 1);\n\tconst ms = new Float32Array(n - 1);\n\tfor (let i = 0; i < n - 1; i++) {\n\t\tdx[i] = uniquePts[i + 1].x - uniquePts[i].x;\n\t\tdy[i] = uniquePts[i + 1].y - uniquePts[i].y;\n\t\tms[i] = dy[i] / dx[i];\n\t}\n\tconst tangents = new Float32Array(n);\n\ttangents[0] = ms[0];\n\tfor (let i = 1; i < n - 1; i++) tangents[i] = (ms[i - 1] + ms[i]) / 2;\n\ttangents[n - 1] = ms[n - 2];\n\tfor (let i = 0; i < n - 1; i++) {\n\t\tconst m = ms[i];\n\t\tif (Math.abs(m) < 1e-9) {\n\t\t\ttangents[i] = 0;\n\t\t\ttangents[i + 1] = 0;\n\t\t} else {\n\t\t\tconst alpha = tangents[i] / m;\n\t\t\tconst beta = tangents[i + 1] / m;\n\t\t\tconst alphaSq = alpha * alpha;\n\t\t\tconst betaSq = beta * beta;\n\t\t\tif (alphaSq + betaSq > 9) {\n\t\t\t\tconst tau = 3 / Math.sqrt(alphaSq + betaSq);\n\t\t\t\ttangents[i] = tau * alpha * m;\n\t\t\t\ttangents[i + 1] = tau * beta * m;\n\t\t\t}\n\t\t}\n\t}\n\treturn (x) => {\n\t\tif (x <= uniquePts[0].x) return uniquePts[0].y;\n\t\tif (x >= uniquePts[n - 1].x) return uniquePts[n - 1].y;\n\t\tlet low = 0;\n\t\tlet high = n - 2;\n\t\tlet idx = 0;\n\t\twhile (low <= high) {\n\t\t\tconst mid = low + high >> 1;\n\t\t\tif (x >= uniquePts[mid].x && x <= uniquePts[mid + 1].x) {\n\t\t\t\tidx = mid;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (x < uniquePts[mid].x) high = mid - 1;\n\t\t\telse low = mid + 1;\n\t\t}\n\t\tconst h = dx[idx];\n\t\tconst t = (x - uniquePts[idx].x) / h;\n\t\tconst t2 = t * t;\n\t\tconst t3 = t2 * t;\n\t\tconst h00 = 2 * t3 - 3 * t2 + 1;\n\t\tconst h10 = t3 - 2 * t2 + t;\n\t\tconst h01 = -2 * t3 + 3 * t2;\n\t\tconst h11 = t3 - t2;\n\t\tconst y = uniquePts[idx].y * h00 + h * tangents[idx] * h10 + uniquePts[idx + 1].y * h01 + h * tangents[idx + 1] * h11;\n\t\treturn Math.max(0, Math.min(1, y));\n\t};\n}\n\n//#endregion\n//#region src/renderers/histogram-computer.ts\nconst PER_CHAN_SIZE = 256 * 4;\nconst HISTOGRAM_COMPUTE_SHADER = `\n@group(0) @binding(0) var t_src: texture_2d<f32>;\n@group(0) @binding(1) var<storage, read_write> bins_r: array<atomic<u32>, 256>;\n@group(0) @binding(2) var<storage, read_write> bins_g: array<atomic<u32>, 256>;\n@group(0) @binding(3) var<storage, read_write> bins_b: array<atomic<u32>, 256>;\n@group(0) @binding(4) var<storage, read_write> bins_luma: array<atomic<u32>, 256>;\n\n@compute @workgroup_size(8, 8)\nfn main(@builtin(global_invocation_id) gid: vec3<u32>) {\n\tlet dims = textureDimensions(t_src, 0);\n\tif (gid.x >= dims.x || gid.y >= dims.y) { return; }\n\n\tlet color = textureLoad(t_src, vec2<u32>(gid.x, gid.y), 0);\n\tlet a = color.a;\n\tif (a < 1e-5) { return; }\n\n\tlet rgb = color.rgb / a;\n\n\tlet ri = u32(clamp(rgb.r * 255.0, 0.0, 255.0));\n\tlet gi = u32(clamp(rgb.g * 255.0, 0.0, 255.0));\n\tlet bi = u32(clamp(rgb.b * 255.0, 0.0, 255.0));\n\tlet luma = 0.2126 * rgb.r + 0.7152 * rgb.g + 0.0722 * rgb.b;\n\tlet lumai = u32(clamp(luma * 255.0, 0.0, 255.0));\n\n\tatomicAdd(&bins_r[ri], 1u);\n\tatomicAdd(&bins_g[gi], 1u);\n\tatomicAdd(&bins_b[bi], 1u);\n\tatomicAdd(&bins_luma[lumai], 1u);\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nfunction getHistogramResources(device) {\n\tlet res = deviceResourceCache.get(device);\n\tif (!res) {\n\t\tconst bindGroupLayout = device.createBindGroupLayout({ entries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tvisibility: GPUShaderStage.COMPUTE,\n\t\t\t\ttexture: {\n\t\t\t\t\tsampleType: \"float\",\n\t\t\t\t\tviewDimension: \"2d\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tvisibility: GPUShaderStage.COMPUTE,\n\t\t\t\tbuffer: { type: \"storage\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tvisibility: GPUShaderStage.COMPUTE,\n\t\t\t\tbuffer: { type: \"storage\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tvisibility: GPUShaderStage.COMPUTE,\n\t\t\t\tbuffer: { type: \"storage\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 4,\n\t\t\t\tvisibility: GPUShaderStage.COMPUTE,\n\t\t\t\tbuffer: { type: \"storage\" }\n\t\t\t}\n\t\t] });\n\t\tconst module = device.createShaderModule({\n\t\t\tlabel: \"histogram.wgsl\",\n\t\t\tcode: HISTOGRAM_COMPUTE_SHADER\n\t\t});\n\t\tres = {\n\t\t\tpipeline: device.createComputePipeline({\n\t\t\t\tlabel: \"HistogramPipeline\",\n\t\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [bindGroupLayout] }),\n\t\t\t\tcompute: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"main\"\n\t\t\t\t}\n\t\t\t}),\n\t\t\tbindGroupLayout\n\t\t};\n\t\tdeviceResourceCache.set(device, res);\n\t}\n\treturn res;\n}\nconst histogramCallbacks = /* @__PURE__ */ new Map();\nconst inflight = /* @__PURE__ */ new Set();\n/**\n* Records histogram compute + buffer copy commands into the provided encoder.\n* The async readback fires after the queue processes the encoder's commands.\n* This ensures the source texture data is valid when the compute pass reads it.\n*/\nfunction computeHistogramFromEncoder(device, encoder, srcTexture, nodeId) {\n\tif (!histogramCallbacks.get(nodeId)) return;\n\tif (inflight.has(nodeId)) return;\n\tinflight.add(nodeId);\n\tconst { pipeline, bindGroupLayout } = getHistogramResources(device);\n\tconst makeStorage = () => device.createBuffer({\n\t\tsize: PER_CHAN_SIZE,\n\t\tusage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST\n\t});\n\tconst bufR = makeStorage();\n\tconst bufG = makeStorage();\n\tconst bufB = makeStorage();\n\tconst bufLuma = makeStorage();\n\tencoder.clearBuffer(bufR);\n\tencoder.clearBuffer(bufG);\n\tencoder.clearBuffer(bufB);\n\tencoder.clearBuffer(bufLuma);\n\tconst bindGroup = device.createBindGroup({\n\t\tlayout: bindGroupLayout,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: srcTexture.createView()\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: { buffer: bufR }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: { buffer: bufG }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tresource: { buffer: bufB }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 4,\n\t\t\t\tresource: { buffer: bufLuma }\n\t\t\t}\n\t\t]\n\t});\n\tconst pass = encoder.beginComputePass({ label: \"histogram-pass\" });\n\tpass.setPipeline(pipeline);\n\tpass.setBindGroup(0, bindGroup);\n\tpass.dispatchWorkgroups(Math.ceil(srcTexture.width / 8), Math.ceil(srcTexture.height / 8));\n\tpass.end();\n\tconst makeReadback = () => device.createBuffer({\n\t\tsize: PER_CHAN_SIZE,\n\t\tusage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST\n\t});\n\tconst rbR = makeReadback();\n\tconst rbG = makeReadback();\n\tconst rbB = makeReadback();\n\tconst rbLuma = makeReadback();\n\tencoder.copyBufferToBuffer(bufR, 0, rbR, 0, PER_CHAN_SIZE);\n\tencoder.copyBufferToBuffer(bufG, 0, rbG, 0, PER_CHAN_SIZE);\n\tencoder.copyBufferToBuffer(bufB, 0, rbB, 0, PER_CHAN_SIZE);\n\tencoder.copyBufferToBuffer(bufLuma, 0, rbLuma, 0, PER_CHAN_SIZE);\n\tdevice.queue.onSubmittedWorkDone().then(() => {\n\t\treturn Promise.all([\n\t\t\trbR.mapAsync(GPUMapMode.READ),\n\t\t\trbG.mapAsync(GPUMapMode.READ),\n\t\t\trbB.mapAsync(GPUMapMode.READ),\n\t\t\trbLuma.mapAsync(GPUMapMode.READ)\n\t\t]);\n\t}).then(() => {\n\t\tconst r = new Uint32Array(rbR.getMappedRange().slice(0));\n\t\tconst g = new Uint32Array(rbG.getMappedRange().slice(0));\n\t\tconst b = new Uint32Array(rbB.getMappedRange().slice(0));\n\t\tconst luma = new Uint32Array(rbLuma.getMappedRange().slice(0));\n\t\trbR.unmap();\n\t\trbG.unmap();\n\t\trbB.unmap();\n\t\trbLuma.unmap();\n\t\trbR.destroy();\n\t\trbG.destroy();\n\t\trbB.destroy();\n\t\trbLuma.destroy();\n\t\tbufR.destroy();\n\t\tbufG.destroy();\n\t\tbufB.destroy();\n\t\tbufLuma.destroy();\n\t\tinflight.delete(nodeId);\n\t\tconst currentCb = histogramCallbacks.get(nodeId);\n\t\tif (currentCb) currentCb({\n\t\t\tr,\n\t\t\tg,\n\t\t\tb,\n\t\t\tluma\n\t\t});\n\t}).catch(() => {\n\t\trbR.destroy();\n\t\trbG.destroy();\n\t\trbB.destroy();\n\t\trbLuma.destroy();\n\t\tbufR.destroy();\n\t\tbufG.destroy();\n\t\tbufB.destroy();\n\t\tbufLuma.destroy();\n\t\tinflight.delete(nodeId);\n\t});\n}\n\n//#endregion\n//#region src/renderers/webgpu-renderer.ts\nconst LUT_SIZE = 1024;\nconst LUT_FORMAT = \"rgba8unorm\";\nconst LUT_BYTES_PER_ROW = LUT_SIZE * 4;\nconst CURVES_RGB_SHADER = `\n${FULLSCREEN_QUAD_WGSL}\n\n@group(0) @binding(0) var t_lut : texture_2d<f32>;\n@group(0) @binding(1) var s_lut : sampler;\n\n@group(1) @binding(0) var t_src : texture_2d<f32>;\n@group(1) @binding(1) var s_src : sampler;\n\n@fragment fn fs(in: VSOut) -> @location(0) vec4<f32> {\n\tlet src = textureSampleLevel(t_src, s_src, in.uv, 0.0);\n\tif (src.a < 1e-5) { return src; }\n\n\tlet rgb = src.rgb / src.a;\n\n\tlet N = f32(${LUT_SIZE});\n\tlet uv_r = (rgb.r * (N - 1.0) + 0.5) / N;\n\tlet uv_g = (rgb.g * (N - 1.0) + 0.5) / N;\n\tlet uv_b = (rgb.b * (N - 1.0) + 0.5) / N;\n\n\tlet r_graded = textureSampleLevel(t_lut, s_lut, vec2<f32>(uv_r, 0.5), 0.0).r;\n\tlet g_graded = textureSampleLevel(t_lut, s_lut, vec2<f32>(uv_g, 0.5), 0.0).g;\n\tlet b_graded = textureSampleLevel(t_lut, s_lut, vec2<f32>(uv_b, 0.5), 0.0).b;\n\n\tlet graded = vec3<f32>(r_graded, g_graded, b_graded);\n\treturn vec4<f32>(graded * src.a, src.a);\n}\n`;\nconst CURVES_HSL_SHADER = `\nstruct Uniforms {\n\tmode: u32,\n\tpad0: u32,\n\tpad1: u32,\n\tpad2: u32,\n};\n@group(0) @binding(0) var<uniform> u : Uniforms;\n@group(0) @binding(1) var t_lut : texture_2d<f32>;\n@group(0) @binding(2) var s_lut : sampler;\n\n@group(1) @binding(0) var t_src : texture_2d<f32>;\n@group(1) @binding(1) var s_src : sampler;\n\n${FULLSCREEN_QUAD_WGSL}\n\nfn rgb_to_hsl(rgb: vec3<f32>) -> vec3<f32> {\n\tlet r = rgb.r; let g = rgb.g; let b = rgb.b;\n\tlet cmax = max(r, max(g, b));\n\tlet cmin = min(r, min(g, b));\n\tlet delta = cmax - cmin;\n\n\tvar h = 0.0;\n\tvar s = 0.0;\n\tlet l = (cmax + cmin) * 0.5;\n\n\tif (delta > 1e-5) {\n\t\ts = delta / (1.0 - abs(2.0 * l - 1.0));\n\t\tif (cmax == r) {\n\t\t\th = ((g - b) / delta) % 6.0;\n\t\t} else if (cmax == g) {\n\t\t\th = (b - r) / delta + 2.0;\n\t\t} else {\n\t\t\th = (r - g) / delta + 4.0;\n\t\t}\n\t\th = h / 6.0;\n\t\tif (h < 0.0) { h = h + 1.0; }\n\t}\n\treturn vec3<f32>(h, s, l);\n}\n\nfn hsl_to_rgb(hsl: vec3<f32>) -> vec3<f32> {\n\tlet h = hsl.x; let s = hsl.y; let l = hsl.z;\n\tlet c = (1.0 - abs(2.0 * l - 1.0)) * s;\n\tlet x = c * (1.0 - abs((h * 6.0) % 2.0 - 1.0));\n\tlet m = l - c * 0.5;\n\n\tvar rgb = vec3<f32>(0.0);\n\tlet hi = u32(h * 6.0) % 6u;\n\tif (hi == 0u) { rgb = vec3<f32>(c, x, 0.0); }\n\telse if (hi == 1u) { rgb = vec3<f32>(x, c, 0.0); }\n\telse if (hi == 2u) { rgb = vec3<f32>(0.0, c, x); }\n\telse if (hi == 3u) { rgb = vec3<f32>(0.0, x, c); }\n\telse if (hi == 4u) { rgb = vec3<f32>(x, 0.0, c); }\n\telse { rgb = vec3<f32>(c, 0.0, x); }\n\treturn rgb + vec3<f32>(m);\n}\n\nfn lut_sample(x: f32) -> f32 {\n\tlet N = f32(${LUT_SIZE});\n\tlet uv_x = (x * (N - 1.0) + 0.5) / N;\n\treturn textureSampleLevel(t_lut, s_lut, vec2<f32>(uv_x, 0.5), 0.0).r;\n}\n\n@fragment fn fs(in: VSOut) -> @location(0) vec4<f32> {\n\tlet src = textureSampleLevel(t_src, s_src, in.uv, 0.0);\n\tif (src.a < 1e-5) { return src; }\n\n\tlet rgb = src.rgb / src.a;\n\tlet hsl = rgb_to_hsl(rgb);\n\n\tvar out_hsl = hsl;\n\n\tif (u.mode == 0u) {\n\t\tlet adj = lut_sample(hsl.x);\n\t\tout_hsl.x = fract(hsl.x + (adj - 0.5) * 2.0);\n\t} else if (u.mode == 1u) {\n\t\tlet adj = lut_sample(hsl.x);\n\t\tout_hsl.y = clamp(hsl.y * (adj * 2.0), 0.0, 1.0);\n\t} else if (u.mode == 2u) {\n\t\tlet adj = lut_sample(hsl.z);\n\t\tout_hsl.y = clamp(hsl.y * (adj * 2.0), 0.0, 1.0);\n\t} else {\n\t\tlet adj = lut_sample(hsl.y);\n\t\tout_hsl.y = clamp(adj, 0.0, 1.0);\n\t}\n\n\tlet out_rgb = clamp(hsl_to_rgb(out_hsl), vec3<f32>(0.0), vec3<f32>(1.0));\n\treturn vec4<f32>(out_rgb * src.a, src.a);\n}\n`;\nconst rgbResourceCache = /* @__PURE__ */ new WeakMap();\nconst hslResourceCache = /* @__PURE__ */ new WeakMap();\nfunction getRgbResources(device, format) {\n\tlet res = rgbResourceCache.get(device);\n\tif (!res) {\n\t\tconst lutBGL = fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]);\n\t\tconst srcBGL = fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]);\n\t\tres = {\n\t\t\tpipeline: createFullscreenPipeline(device, {\n\t\t\t\tlabel: \"CurvesRgbPipeline\",\n\t\t\t\tmodule: device.createShaderModule({\n\t\t\t\t\tlabel: \"curves-rgb.wgsl\",\n\t\t\t\t\tcode: CURVES_RGB_SHADER\n\t\t\t\t}),\n\t\t\t\tlayouts: [lutBGL, srcBGL],\n\t\t\t\tformat\n\t\t\t}),\n\t\t\tlutBindGroupLayout: lutBGL,\n\t\t\tsrcBindGroupLayout: srcBGL\n\t\t};\n\t\trgbResourceCache.set(device, res);\n\t}\n\treturn res;\n}\nfunction getHslResources(device, format) {\n\tlet res = hslResourceCache.get(device);\n\tif (!res) {\n\t\tconst uniformLayout = fragmentBindGroupLayout(device, [\n\t\t\t\"uniform\",\n\t\t\t\"texture\",\n\t\t\t\"sampler\"\n\t\t]);\n\t\tconst srcBGL = fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]);\n\t\tres = {\n\t\t\tpipeline: createFullscreenPipeline(device, {\n\t\t\t\tlabel: \"CurvesHslPipeline\",\n\t\t\t\tmodule: device.createShaderModule({\n\t\t\t\t\tlabel: \"curves-hsl.wgsl\",\n\t\t\t\t\tcode: CURVES_HSL_SHADER\n\t\t\t\t}),\n\t\t\t\tlayouts: [uniformLayout, srcBGL],\n\t\t\t\tformat\n\t\t\t}),\n\t\t\tuniformLayout,\n\t\t\tsrcBindGroupLayout: srcBGL\n\t\t};\n\t\thslResourceCache.set(device, res);\n\t}\n\treturn res;\n}\nconst LUT_CACHE_LIMIT = 32;\nconst deviceTextureCache = /* @__PURE__ */ new WeakMap();\nfunction getLut(device, configKey, build) {\n\tlet cache = deviceTextureCache.get(device);\n\tif (!cache) {\n\t\tcache = /* @__PURE__ */ new Map();\n\t\tdeviceTextureCache.set(device, cache);\n\t}\n\tconst hit = cache.get(configKey);\n\tif (hit) {\n\t\tcache.delete(configKey);\n\t\tcache.set(configKey, hit);\n\t\treturn hit;\n\t}\n\tconst texture = build();\n\tcache.set(configKey, texture);\n\tif (cache.size > LUT_CACHE_LIMIT) {\n\t\tconst [oldestKey, oldest] = cache.entries().next().value;\n\t\tcache.delete(oldestKey);\n\t\toldest.destroy();\n\t}\n\treturn texture;\n}\nfunction buildRgbLut(device, op) {\n\tconst masterSpline = solveMonotonicSpline(op.master || [{\n\t\tx: 0,\n\t\ty: 0\n\t}, {\n\t\tx: 1,\n\t\ty: 1\n\t}]);\n\tconst redSpline = solveMonotonicSpline(op.red || [{\n\t\tx: 0,\n\t\ty: 0\n\t}, {\n\t\tx: 1,\n\t\ty: 1\n\t}]);\n\tconst greenSpline = solveMonotonicSpline(op.green || [{\n\t\tx: 0,\n\t\ty: 0\n\t}, {\n\t\tx: 1,\n\t\ty: 1\n\t}]);\n\tconst blueSpline = solveMonotonicSpline(op.blue || [{\n\t\tx: 0,\n\t\ty: 0\n\t}, {\n\t\tx: 1,\n\t\ty: 1\n\t}]);\n\tconst lutData = new Uint8Array(LUT_SIZE * 4);\n\tfor (let i = 0; i < LUT_SIZE; i++) {\n\t\tconst masterVal = masterSpline(i / (LUT_SIZE - 1));\n\t\tconst r = Math.max(0, Math.min(1, redSpline(masterVal)));\n\t\tconst g = Math.max(0, Math.min(1, greenSpline(masterVal)));\n\t\tconst b = Math.max(0, Math.min(1, blueSpline(masterVal)));\n\t\tlutData[i * 4 + 0] = Math.round(r * 255);\n\t\tlutData[i * 4 + 1] = Math.round(g * 255);\n\t\tlutData[i * 4 + 2] = Math.round(b * 255);\n\t\tlutData[i * 4 + 3] = 255;\n\t}\n\tconst texture = device.createTexture({\n\t\tsize: [\n\t\t\tLUT_SIZE,\n\t\t\t1,\n\t\t\t1\n\t\t],\n\t\tdimension: \"2d\",\n\t\tformat: LUT_FORMAT,\n\t\tusage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST\n\t});\n\tdevice.queue.writeTexture({ texture }, lutData, { bytesPerRow: LUT_BYTES_PER_ROW }, [\n\t\tLUT_SIZE,\n\t\t1,\n\t\t1\n\t]);\n\treturn texture;\n}\nfunction buildHslLut(device, points) {\n\tconst spline = solveMonotonicSpline(points);\n\tconst lutData = new Uint8Array(LUT_SIZE * 4);\n\tfor (let i = 0; i < LUT_SIZE; i++) {\n\t\tconst u = i / (LUT_SIZE - 1);\n\t\tconst val = Math.round(Math.max(0, Math.min(1, spline(u))) * 255);\n\t\tlutData[i * 4 + 0] = val;\n\t\tlutData[i * 4 + 1] = val;\n\t\tlutData[i * 4 + 2] = val;\n\t\tlutData[i * 4 + 3] = 255;\n\t}\n\tconst texture = device.createTexture({\n\t\tsize: [\n\t\t\tLUT_SIZE,\n\t\t\t1,\n\t\t\t1\n\t\t],\n\t\tdimension: \"2d\",\n\t\tformat: LUT_FORMAT,\n\t\tusage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST\n\t});\n\tdevice.queue.writeTexture({ texture }, lutData, { bytesPerRow: LUT_BYTES_PER_ROW }, [\n\t\tLUT_SIZE,\n\t\t1,\n\t\t1\n\t]);\n\treturn texture;\n}\nconst HSL_MODE_MAP = {\n\t\"hue-vs-hue\": 0,\n\t\"hue-vs-sat\": 1,\n\t\"lum-vs-sat\": 2,\n\t\"sat-vs-sat\": 3\n};\nconst HSL_CURVE_KEY_MAP = {\n\t\"hue-vs-hue\": \"hueVsHue\",\n\t\"hue-vs-sat\": \"hueVsSat\",\n\t\"lum-vs-sat\": \"lumVsSat\",\n\t\"sat-vs-sat\": \"satVsSat\"\n};\nconst CurvesWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"Curves\" || !props.virtualMedia?.children?.[0]) return;\n\tpass.end();\n\tconst childMedia = props.virtualMedia.children[0];\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst nodeId = op.nodeId || \"curves_fallback\";\n\tconst curveType = op.curveType || \"rgb\";\n\tconst { texture: tmpTex } = await drawChildToTexture(args, childMedia);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst outTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\ttmpTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tif (curveType === \"rgb\") {\n\t\tconst configKey = JSON.stringify({\n\t\t\tcurveType,\n\t\t\tmaster: op.master,\n\t\t\tred: op.red,\n\t\t\tgreen: op.green,\n\t\t\tblue: op.blue\n\t\t});\n\t\tconst lut = getLut(ctx.device, configKey, () => buildRgbLut(ctx.device, op));\n\t\tconst { pipeline, lutBindGroupLayout, srcBindGroupLayout } = getRgbResources(ctx.device, ctx.renderer.format);\n\t\tdrawFullscreenPass(encoder, outTex.createView(), pipeline, [ctx.device.createBindGroup({\n\t\t\tlayout: lutBindGroupLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: lut.createView()\n\t\t\t}, {\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: sampler\n\t\t\t}]\n\t\t}), ctx.renderer.bindGroupCache.getBindGroup(ctx.device, srcBindGroupLayout, tmpTex, sampler)]);\n\t} else {\n\t\tconst hslPoints = op[HSL_CURVE_KEY_MAP[curveType]] || [{\n\t\t\tx: 0,\n\t\t\ty: .5\n\t\t}, {\n\t\t\tx: 1,\n\t\t\ty: .5\n\t\t}];\n\t\tconst configKey = JSON.stringify({\n\t\t\tcurveType,\n\t\t\tpoints: hslPoints\n\t\t});\n\t\tconst lut = getLut(ctx.device, configKey, () => buildHslLut(ctx.device, hslPoints));\n\t\tconst uniformData = new Uint32Array([\n\t\t\tHSL_MODE_MAP[curveType] ?? 0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0\n\t\t]);\n\t\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(uniformData);\n\t\tconst { pipeline, uniformLayout, srcBindGroupLayout } = getHslResources(ctx.device, ctx.renderer.format);\n\t\tdrawFullscreenPass(encoder, outTex.createView(), pipeline, [ctx.device.createBindGroup({\n\t\t\tlayout: uniformLayout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: uniformBuffer }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: lut.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: sampler\n\t\t\t\t}\n\t\t\t]\n\t\t}), ctx.renderer.bindGroupCache.getBindGroup(ctx.device, srcBindGroupLayout, tmpTex, sampler)]);\n\t}\n\tcomputeHistogramFromEncoder(ctx.device, encoder, outTex, nodeId);\n\tdrawTextureToTarget(args, outTex, props.opacity ?? 1);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nconst rendererNode = defineRenderer({ WebGPURenderer: CurvesWebGPURenderer });\nvar renderers_default = rendererNode;\n\n//#endregion\nexport { renderers_default as n, solveMonotonicSpline as r, rendererNode as t };\n//# sourceMappingURL=renderers-DzdBU1io.mjs.map"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import "./chunk-D7gtBK74.mjs";
|
|
2
2
|
import { At as getFingerprint } from "./dist-D021IFfp.mjs";
|
|
3
|
-
import { n as defineRenderer } from "./renderer-
|
|
4
|
-
import {
|
|
3
|
+
import { n as defineRenderer } from "./renderer-BgmO1Dzw.mjs";
|
|
4
|
+
import { W as lutStore } from "./dist-CDwWQYg3.mjs";
|
|
5
5
|
|
|
6
6
|
//#region ../../nodes/node-extract-lut/dist/renderers-CDotFzd9.mjs
|
|
7
7
|
const extractionCache = /* @__PURE__ */ new Map();
|
|
@@ -979,4 +979,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: ExtractLutWebGPURendere
|
|
|
979
979
|
|
|
980
980
|
//#endregion
|
|
981
981
|
export { renderers_default as default };
|
|
982
|
-
//# sourceMappingURL=renderer-
|
|
982
|
+
//# sourceMappingURL=renderer-PMjV8x65.mjs.map
|