framefields 2.5.1 → 2.5.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/audio/index.d.mts +4 -4
- package/dist/audio/index.mjs +10 -10
- package/dist/{audio-C1A4N3Wh.d.mts → audio-2ew5y0Bl.d.mts} +3 -3
- package/dist/{audio-C1A4N3Wh.d.mts.map → audio-2ew5y0Bl.d.mts.map} +1 -1
- package/dist/{audio-CZwVENqB.mjs → audio-DrUskzwZ.mjs} +4 -4
- package/dist/{audio-CZwVENqB.mjs.map → audio-DrUskzwZ.mjs.map} +1 -1
- package/dist/components/index.d.mts +10 -10
- package/dist/components/index.mjs +44 -44
- package/dist/{dist-CQZ5_60A.mjs → dist-BPOi5xb_.mjs} +2 -2
- package/dist/{dist-CQZ5_60A.mjs.map → dist-BPOi5xb_.mjs.map} +1 -1
- package/dist/{dist-DBWkkSvJ.mjs → dist-Bf0H4lp1.mjs} +66 -28
- package/dist/dist-Bf0H4lp1.mjs.map +1 -0
- package/dist/{dist-DFeF-ygz.mjs → dist-D021IFfp.mjs} +3 -1
- package/dist/{dist-DFeF-ygz.mjs.map → dist-D021IFfp.mjs.map} +1 -1
- package/dist/{dist-DHQVWaV2.mjs → dist-DG65RDhc.mjs} +3 -3
- package/dist/{dist-DHQVWaV2.mjs.map → dist-DG65RDhc.mjs.map} +1 -1
- package/dist/effects/index.d.mts +4 -4
- package/dist/effects/index.mjs +35 -35
- package/dist/{effects-DZvq-nWT.mjs → effects-Z-brb-n7.mjs} +3 -3
- package/dist/{effects-DZvq-nWT.mjs.map → effects-Z-brb-n7.mjs.map} +1 -1
- package/dist/fonts/index.mjs +2 -2
- package/dist/{fonts-DcsxFpyU.mjs → fonts-DqYgk_1a.mjs} +2 -2
- package/dist/{fonts-DcsxFpyU.mjs.map → fonts-DqYgk_1a.mjs.map} +1 -1
- package/dist/{gpu-Dq_uI_00.mjs → gpu-CevnCkZC.mjs} +2 -2
- package/dist/{gpu-Dq_uI_00.mjs.map → gpu-CevnCkZC.mjs.map} +1 -1
- package/dist/{index-C2f4Hm-p.d.mts → index-COQTaniR.d.mts} +2 -2
- package/dist/{index-C2f4Hm-p.d.mts.map → index-COQTaniR.d.mts.map} +1 -1
- package/dist/{index-fymoeGNW.d.mts → index-CZK6CFLy.d.mts} +22 -19
- package/dist/index-CZK6CFLy.d.mts.map +1 -0
- package/dist/{index-BpdVOlsV.d.mts → index-CfMylY3O.d.mts} +3 -3
- package/dist/{index-BpdVOlsV.d.mts.map → index-CfMylY3O.d.mts.map} +1 -1
- package/dist/{index-DNKM3to5.d.mts → index-D1C735Wp.d.mts} +3 -3
- package/dist/{index-DNKM3to5.d.mts.map → index-D1C735Wp.d.mts.map} +1 -1
- package/dist/{index-D6-lH1Mx.d.mts → index-DSGFMpwL.d.mts} +4 -4
- package/dist/{index-D6-lH1Mx.d.mts.map → index-DSGFMpwL.d.mts.map} +1 -1
- package/dist/{index-B-KVpJMb.d.mts → index-KqW22NHL.d.mts} +2 -2
- package/dist/{index-B-KVpJMb.d.mts.map → index-KqW22NHL.d.mts.map} +1 -1
- package/dist/{index-DKssQ_wn.d.mts → index-tCKz9Tku.d.mts} +231 -233
- package/dist/index-tCKz9Tku.d.mts.map +1 -0
- package/dist/index.d.mts +11 -11
- package/dist/index.mjs +52 -52
- package/dist/preview/index.d.mts +3 -3
- package/dist/preview/index.mjs +10 -10
- package/dist/{preview-CYI4i4m3.mjs → preview-DVw2jLDh.mjs} +2 -2
- package/dist/{preview-CYI4i4m3.mjs.map → preview-DVw2jLDh.mjs.map} +1 -1
- package/dist/preview-engine/{chunk-3I6B3YPF.mjs → chunk-2WOCQNZX.mjs} +3 -3
- package/dist/preview-engine/{chunk-PDM3TJ45.mjs → chunk-45XGWIOY.mjs} +1 -1
- package/dist/preview-engine/{chunk-XUPZBI3Y.mjs → chunk-5FTCPTOX.mjs} +13 -7
- package/dist/preview-engine/{chunk-Z4TKEI3I.mjs → chunk-B555EGEU.mjs} +1 -1
- package/dist/preview-engine/{chunk-6GMEF2QB.mjs → chunk-FAEWI3LF.mjs} +1 -1
- package/dist/preview-engine/{chunk-W4HIVUUA.mjs → chunk-I3ZTDIVM.mjs} +1 -1
- package/dist/preview-engine/{chunk-CT2WFPYG.mjs → chunk-MCFYUKAJ.mjs} +8 -8
- package/dist/preview-engine/{chunk-AB5VITYM.mjs → chunk-PR37RCNO.mjs} +1 -1
- package/dist/preview-engine/{chunk-NAISBHLR.mjs → chunk-QP24X77K.mjs} +1 -1
- package/dist/preview-engine/chunk-SYP4AJMF.mjs +1 -0
- package/dist/preview-engine/{chunk-SNASF7OM.mjs → chunk-YSXMXD3F.mjs} +1 -1
- 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-BILNWTUC.mjs +228 -0
- package/dist/preview-engine/{renderers-HJ6NO5ZD.mjs → renderers-EJATUIUP.mjs} +1 -1
- package/dist/preview-engine/renderers-SKT7AGGE.mjs +1 -0
- package/dist/{program-BdPDtfVv.mjs → program-4mAVgg3c.mjs} +4 -4
- package/dist/{program-BdPDtfVv.mjs.map → program-4mAVgg3c.mjs.map} +1 -1
- package/dist/registry/captions.json +1 -1
- package/dist/registry/lower-third.json +1 -1
- package/dist/registry/meter.json +1 -1
- package/dist/renderer/index.d.mts +2 -2
- package/dist/renderer/index.mjs +2 -2
- package/dist/renderer-1ymN1FIT.mjs +5 -0
- package/dist/{renderer-VdTs-dqH.mjs → renderer-4P-DCjk2.mjs} +3 -3
- package/dist/{renderer-VdTs-dqH.mjs.map → renderer-4P-DCjk2.mjs.map} +1 -1
- package/dist/{renderer-B4blg067.mjs → renderer-5-9DPis6.mjs} +3 -3
- package/dist/{renderer-B4blg067.mjs.map → renderer-5-9DPis6.mjs.map} +1 -1
- package/dist/{renderer-COXKPofU.d.mts → renderer-92IAZzBU.d.mts} +2 -2
- package/dist/{renderer-COXKPofU.d.mts.map → renderer-92IAZzBU.d.mts.map} +1 -1
- package/dist/{renderer-o_JK4YfO.mjs → renderer-9gjn790a.mjs} +3 -3
- package/dist/{renderer-o_JK4YfO.mjs.map → renderer-9gjn790a.mjs.map} +1 -1
- package/dist/renderer-B-43EuKb.mjs +5 -0
- package/dist/renderer-B-v5ZboU.mjs +5 -0
- package/dist/{renderer-IMg0dK6K.mjs → renderer-B8PNlKEM.mjs} +3 -3
- package/dist/{renderer-IMg0dK6K.mjs.map → renderer-B8PNlKEM.mjs.map} +1 -1
- package/dist/{renderer-Db_wphHH.mjs → renderer-B9AZ6R1U.mjs} +64 -21
- package/dist/renderer-B9AZ6R1U.mjs.map +1 -0
- package/dist/{renderer-7DyjqxEj.mjs → renderer-B9iVE2GG.mjs} +3 -3
- package/dist/{renderer-7DyjqxEj.mjs.map → renderer-B9iVE2GG.mjs.map} +1 -1
- package/dist/{renderer-ChCUad83.mjs → renderer-B9m7xIPo.mjs} +3 -3
- package/dist/{renderer-ChCUad83.mjs.map → renderer-B9m7xIPo.mjs.map} +1 -1
- package/dist/{renderer-BAkPq8qo.mjs → renderer-B9yv3R1y.mjs} +2 -2
- package/dist/{renderer-BAkPq8qo.mjs.map → renderer-B9yv3R1y.mjs.map} +1 -1
- package/dist/{renderer-DuQMzR3v.mjs → renderer-BBA-iCi-.mjs} +8 -417
- package/dist/renderer-BBA-iCi-.mjs.map +1 -0
- package/dist/{renderer-l_U6kA8K.mjs → renderer-BIYJKdwA.mjs} +2 -2
- package/dist/{renderer-l_U6kA8K.mjs.map → renderer-BIYJKdwA.mjs.map} +1 -1
- package/dist/{renderer-DQuKNgIx.mjs → renderer-BIt-At3v.mjs} +4 -4
- package/dist/{renderer-DQuKNgIx.mjs.map → renderer-BIt-At3v.mjs.map} +1 -1
- package/dist/renderer-BKF8Sfbg.mjs +3 -0
- package/dist/{renderer-D2ru2Afi.mjs → renderer-BKayVZhL.mjs} +3 -3
- package/dist/{renderer-D2ru2Afi.mjs.map → renderer-BKayVZhL.mjs.map} +1 -1
- package/dist/renderer-BTB8ifgH.mjs +5 -0
- package/dist/{renderer-fH9SCJC2.mjs → renderer-BVtQzjgT.mjs} +2 -2
- package/dist/{renderer-fH9SCJC2.mjs.map → renderer-BVtQzjgT.mjs.map} +1 -1
- package/dist/{renderer-DBjV6C2u.mjs → renderer-BWqQxZNk.mjs} +2 -2
- package/dist/renderer-BYxzR6Hp.mjs +5 -0
- package/dist/renderer-BcGhO_Mw.mjs +5 -0
- package/dist/{renderer-DK34NH92.mjs → renderer-BcSSAzc4.mjs} +3 -3
- package/dist/{renderer-DK34NH92.mjs.map → renderer-BcSSAzc4.mjs.map} +1 -1
- package/dist/{renderer-BBTkfhL8.mjs → renderer-Bh0dwc8n.mjs} +3 -3
- package/dist/{renderer-BBTkfhL8.mjs.map → renderer-Bh0dwc8n.mjs.map} +1 -1
- package/dist/{renderer-CDX2f82b.mjs → renderer-BjxceNBj.mjs} +3 -3
- package/dist/{renderer-CDX2f82b.mjs.map → renderer-BjxceNBj.mjs.map} +1 -1
- package/dist/renderer-Bk3RgiFg.mjs +5 -0
- package/dist/{renderer-Bmj7AyJP.mjs → renderer-Bk7vVfTu.mjs} +3 -3
- package/dist/{renderer-Bmj7AyJP.mjs.map → renderer-Bk7vVfTu.mjs.map} +1 -1
- package/dist/{renderer-Ch7qwjH9.mjs → renderer-BmX2CmyO.mjs} +3 -3
- package/dist/{renderer-Ch7qwjH9.mjs.map → renderer-BmX2CmyO.mjs.map} +1 -1
- package/dist/{renderer-Bo1PY0zW.mjs → renderer-BpBhvMi1.mjs} +2 -2
- package/dist/{renderer-ZjSP5jw6.mjs → renderer-Bt_j2Zi6.mjs} +2 -2
- package/dist/{renderer-ZjSP5jw6.mjs.map → renderer-Bt_j2Zi6.mjs.map} +1 -1
- package/dist/renderer-BvItCxkw.mjs +5 -0
- package/dist/{renderer-Bw5YP2Db.mjs → renderer-BwRLXhxJ.mjs} +3 -3
- package/dist/{renderer-Bw5YP2Db.mjs.map → renderer-BwRLXhxJ.mjs.map} +1 -1
- package/dist/{renderer-CWSM0IGG.mjs → renderer-C0P8ZRiC.mjs} +2 -2
- package/dist/{renderer-CWSM0IGG.mjs.map → renderer-C0P8ZRiC.mjs.map} +1 -1
- package/dist/{renderer-Z39F9QK5.mjs → renderer-C1sFg34Y.mjs} +3 -3
- package/dist/{renderer-Z39F9QK5.mjs.map → renderer-C1sFg34Y.mjs.map} +1 -1
- package/dist/{renderer-BGNdwdCR.mjs → renderer-C4f_X1Qc.mjs} +3 -3
- package/dist/{renderer-BGNdwdCR.mjs.map → renderer-C4f_X1Qc.mjs.map} +1 -1
- package/dist/{renderer-DyMEAZIm.mjs → renderer-C4pS7aAI.mjs} +4 -4
- package/dist/{renderer-DyMEAZIm.mjs.map → renderer-C4pS7aAI.mjs.map} +1 -1
- package/dist/{renderer-BWa3CLK7.mjs → renderer-C5h2TSjH.mjs} +2 -2
- package/dist/{renderer-BWa3CLK7.mjs.map → renderer-C5h2TSjH.mjs.map} +1 -1
- package/dist/{renderer-BN_n6O6P.mjs → renderer-C7HIJcJK.mjs} +3 -3
- package/dist/{renderer-BN_n6O6P.mjs.map → renderer-C7HIJcJK.mjs.map} +1 -1
- package/dist/{renderer-G3px5ODP.mjs → renderer-C8-NmotX.mjs} +3 -3
- package/dist/{renderer-G3px5ODP.mjs.map → renderer-C8-NmotX.mjs.map} +1 -1
- package/dist/renderer-CCnfPHqk.mjs +5 -0
- package/dist/{renderer-Dx28wTi1.d.mts → renderer-CE9N4EEI.d.mts} +2 -2
- package/dist/{renderer-Dx28wTi1.d.mts.map → renderer-CE9N4EEI.d.mts.map} +1 -1
- package/dist/{renderer-CLO8QHWE.mjs → renderer-CGKKjJ5Q.mjs} +3 -3
- package/dist/{renderer-CLO8QHWE.mjs.map → renderer-CGKKjJ5Q.mjs.map} +1 -1
- package/dist/renderer-CIoWQNaA.mjs +5 -0
- package/dist/{renderer-2bipMLqz.mjs → renderer-CJ2-jEy7.mjs} +2 -2
- package/dist/{renderer-2bipMLqz.mjs.map → renderer-CJ2-jEy7.mjs.map} +1 -1
- package/dist/renderer-CMwQtIIq.mjs +5 -0
- package/dist/renderer-CN8kRB90.mjs +6 -0
- package/dist/renderer-CPKBDif1.mjs +5 -0
- package/dist/{renderer-Cj1giMd0.mjs → renderer-CPl1wOrj.mjs} +2 -2
- package/dist/{renderer-Cj1giMd0.mjs.map → renderer-CPl1wOrj.mjs.map} +1 -1
- package/dist/{renderer-BmoQJUJO.mjs → renderer-CT_3Fegr.mjs} +3 -3
- package/dist/{renderer-BmoQJUJO.mjs.map → renderer-CT_3Fegr.mjs.map} +1 -1
- package/dist/{renderer-BfrzKmRh.mjs → renderer-CTvPNRMH.mjs} +2 -2
- package/dist/{renderer-BfrzKmRh.mjs.map → renderer-CTvPNRMH.mjs.map} +1 -1
- package/dist/{renderer-DWaqF7-6.mjs → renderer-CWnhRMOq.mjs} +3 -3
- package/dist/{renderer-DWaqF7-6.mjs.map → renderer-CWnhRMOq.mjs.map} +1 -1
- package/dist/{renderer-BBTdHKH7.mjs → renderer-CXa6SWXy.mjs} +3 -3
- package/dist/{renderer-BBTdHKH7.mjs.map → renderer-CXa6SWXy.mjs.map} +1 -1
- package/dist/renderer-CamsHxEP.mjs +5 -0
- package/dist/{renderer-CMEqUhrW.mjs → renderer-Cb5uDZm0.mjs} +3 -3
- package/dist/{renderer-CMEqUhrW.mjs.map → renderer-Cb5uDZm0.mjs.map} +1 -1
- package/dist/renderer-CeQormOH.mjs +5 -0
- package/dist/renderer-Cex4eMtv.mjs +5 -0
- package/dist/{renderer-kP5Y282J.mjs → renderer-CgMnZYTM.mjs} +4 -4
- package/dist/{renderer-kP5Y282J.mjs.map → renderer-CgMnZYTM.mjs.map} +1 -1
- package/dist/{renderer-B5YYBBDq.mjs → renderer-CjcrhBB2.mjs} +2 -2
- package/dist/{renderer-B5YYBBDq.mjs.map → renderer-CjcrhBB2.mjs.map} +1 -1
- package/dist/{renderer-CXbXF7Dh.mjs → renderer-Cjw6lyaK.mjs} +3 -3
- package/dist/{renderer-CXbXF7Dh.mjs.map → renderer-Cjw6lyaK.mjs.map} +1 -1
- package/dist/renderer-CjyTrNlr.mjs +5 -0
- package/dist/{renderer-D6p8b6ql.mjs → renderer-CkJXq4bD.mjs} +3 -3
- package/dist/{renderer-D6p8b6ql.mjs.map → renderer-CkJXq4bD.mjs.map} +1 -1
- package/dist/renderer-Clv9TO6C.mjs +5 -0
- package/dist/{renderer-gjT5v76-.mjs → renderer-Cm9fEQsw.mjs} +2 -2
- package/dist/{renderer-gjT5v76-.mjs.map → renderer-Cm9fEQsw.mjs.map} +1 -1
- package/dist/{renderer-CJoa4H2G.mjs → renderer-CuwVuVKG.mjs} +2 -2
- package/dist/{renderer-CJoa4H2G.mjs.map → renderer-CuwVuVKG.mjs.map} +1 -1
- package/dist/{renderer-D5u3GVtD.mjs → renderer-CvYxxS_X.mjs} +71 -71
- package/dist/{renderer-D5u3GVtD.mjs.map → renderer-CvYxxS_X.mjs.map} +1 -1
- package/dist/{renderer-VxVi_0c7.mjs → renderer-CxOaqnho.mjs} +2 -2
- package/dist/{renderer-VxVi_0c7.mjs.map → renderer-CxOaqnho.mjs.map} +1 -1
- package/dist/{renderer-DkPDYtD3.mjs → renderer-CxkUI9s_.mjs} +3 -3
- package/dist/{renderer-DkPDYtD3.mjs.map → renderer-CxkUI9s_.mjs.map} +1 -1
- package/dist/{renderer-BYJS2lhn.mjs → renderer-Cz5SOnJr.mjs} +3 -3
- package/dist/{renderer-BYJS2lhn.mjs.map → renderer-Cz5SOnJr.mjs.map} +1 -1
- package/dist/{renderer-WVrUeiLZ.mjs → renderer-D-FwaV1R.mjs} +2 -2
- package/dist/{renderer-BWnFh7NO.mjs → renderer-D0iSbNza.mjs} +3 -3
- package/dist/{renderer-BWnFh7NO.mjs.map → renderer-D0iSbNza.mjs.map} +1 -1
- package/dist/{renderer-DHqicGgT.mjs → renderer-D22g6ION.mjs} +3 -3
- package/dist/{renderer-DHqicGgT.mjs.map → renderer-D22g6ION.mjs.map} +1 -1
- package/dist/renderer-D4LnJk-M.mjs +5 -0
- package/dist/renderer-D5OfQ8Ut.mjs +5 -0
- package/dist/renderer-DBYssktC.mjs +5 -0
- package/dist/renderer-DC-Aj3me.mjs +5 -0
- package/dist/renderer-DG97_Aoc.mjs +5 -0
- package/dist/{renderer-Cjs1OeBu.mjs → renderer-DPVEs5ME.mjs} +3 -3
- package/dist/{renderer-Cjs1OeBu.mjs.map → renderer-DPVEs5ME.mjs.map} +1 -1
- package/dist/{renderer-COtZ315B.mjs → renderer-DPzair18.mjs} +2 -2
- package/dist/renderer-DS4UGjcS.mjs +5 -0
- package/dist/{renderer-PLoGrFGz.mjs → renderer-DTXAa2pL.mjs} +3 -3
- package/dist/{renderer-PLoGrFGz.mjs.map → renderer-DTXAa2pL.mjs.map} +1 -1
- package/dist/{renderer-ChjkppUz.mjs → renderer-DYdll3xW.mjs} +3 -3
- package/dist/{renderer-ChjkppUz.mjs.map → renderer-DYdll3xW.mjs.map} +1 -1
- package/dist/{renderer-BhhweLr_.mjs → renderer-Datqywo_.mjs} +3 -3
- package/dist/{renderer-BhhweLr_.mjs.map → renderer-Datqywo_.mjs.map} +1 -1
- package/dist/renderer-DdG6ibtM.mjs +5 -0
- package/dist/{renderer-D0X7Eh-T.mjs → renderer-Ddg3dJmu.mjs} +3 -3
- package/dist/{renderer-D0X7Eh-T.mjs.map → renderer-Ddg3dJmu.mjs.map} +1 -1
- package/dist/{renderer-CmKdr2nA.mjs → renderer-De7gno9X.mjs} +3 -3
- package/dist/{renderer-CmKdr2nA.mjs.map → renderer-De7gno9X.mjs.map} +1 -1
- package/dist/renderer-DhZi4f3t.mjs +5 -0
- package/dist/{renderer-BJwOM1Dq.mjs → renderer-Dkt1oh9H.mjs} +3 -3
- package/dist/{renderer-BJwOM1Dq.mjs.map → renderer-Dkt1oh9H.mjs.map} +1 -1
- package/dist/{renderer-DqO9gBAi.mjs → renderer-DnT62IDK.mjs} +3 -3
- package/dist/{renderer-DqO9gBAi.mjs.map → renderer-DnT62IDK.mjs.map} +1 -1
- package/dist/{renderer-vwoyR8pW.mjs → renderer-Du8z4UrN.mjs} +2 -2
- package/dist/{renderer-vwoyR8pW.mjs.map → renderer-Du8z4UrN.mjs.map} +1 -1
- package/dist/{renderer-B8LXXvHi.mjs → renderer-MQPiZQXN.mjs} +3 -3
- package/dist/{renderer-B8LXXvHi.mjs.map → renderer-MQPiZQXN.mjs.map} +1 -1
- package/dist/renderer-MgLekf6d.mjs +5 -0
- package/dist/{renderer-FCqOfN6n.mjs → renderer-NL2IZShC.mjs} +3 -3
- package/dist/{renderer-FCqOfN6n.mjs.map → renderer-NL2IZShC.mjs.map} +1 -1
- package/dist/renderer-Qvs-1lWh.mjs +5 -0
- package/dist/{renderer-B31zMDE8.mjs → renderer-RiWi7y5C.mjs} +4 -4
- package/dist/{renderer-B31zMDE8.mjs.map → renderer-RiWi7y5C.mjs.map} +1 -1
- package/dist/{renderer-Fsdod0yZ.mjs → renderer-T2dd9a2L.mjs} +3 -3
- package/dist/{renderer-Fsdod0yZ.mjs.map → renderer-T2dd9a2L.mjs.map} +1 -1
- package/dist/{renderer-1VKN5j2C.mjs → renderer-Y5JmTL8J.mjs} +3 -3
- package/dist/{renderer-1VKN5j2C.mjs.map → renderer-Y5JmTL8J.mjs.map} +1 -1
- package/dist/{renderer-CdUf7ZDJ.mjs → renderer-_vcT__tW.mjs} +3 -3
- package/dist/{renderer-CdUf7ZDJ.mjs.map → renderer-_vcT__tW.mjs.map} +1 -1
- package/dist/renderer-bN7dOErt.mjs +5 -0
- package/dist/renderer-jWKVmReU.mjs +5 -0
- package/dist/{renderer-kkDfQ56G.mjs → renderer-khVVYoVF.mjs} +3 -3
- package/dist/{renderer-kkDfQ56G.mjs.map → renderer-khVVYoVF.mjs.map} +1 -1
- package/dist/renderer-lk-At57G.mjs +5 -0
- package/dist/renderer-qi8Slwfo.mjs +5 -0
- package/dist/renderer-qxOH4JH1.mjs +5 -0
- package/dist/renderer-t30NpmIl.mjs +5 -0
- package/dist/{renderer-Bo_d7h86.mjs → renderer-vc8t_z-y.mjs} +3 -3
- package/dist/{renderer-Bo_d7h86.mjs.map → renderer-vc8t_z-y.mjs.map} +1 -1
- package/dist/{renderer-0cHsK6xR.mjs → renderer-wEXBnlr1.mjs} +3 -3
- package/dist/{renderer-0cHsK6xR.mjs.map → renderer-wEXBnlr1.mjs.map} +1 -1
- package/dist/{renderer-CNs1vBUy.mjs → renderer-wIsJb2eO.mjs} +2 -2
- package/dist/{renderer-CNs1vBUy.mjs.map → renderer-wIsJb2eO.mjs.map} +1 -1
- package/dist/renderer-wKW4HWRx.mjs +5 -0
- package/dist/renderer-ydjPm8bp.mjs +5 -0
- package/dist/{renderer-DP41Fokp.mjs → renderer-zdpn1Hkk.mjs} +3 -3
- package/dist/{renderer-DP41Fokp.mjs.map → renderer-zdpn1Hkk.mjs.map} +1 -1
- package/dist/{renderers-CP8CFWDs-DiX2Y4Qp.mjs → renderers-CP8CFWDs-BbLkcJTN.mjs} +3 -3
- package/dist/{renderers-CP8CFWDs-DiX2Y4Qp.mjs.map → renderers-CP8CFWDs-BbLkcJTN.mjs.map} +1 -1
- package/dist/signals/index.d.mts +5 -5
- package/dist/signals/index.mjs +6 -6
- package/dist/{signals-Cf9mfNGE.mjs → signals-BrNF9l9s.mjs} +3 -3
- package/dist/{signals-Cf9mfNGE.mjs.map → signals-BrNF9l9s.mjs.map} +1 -1
- package/dist/{src-Ds9IAk5S.mjs → src-WAnxhDYD.mjs} +9 -9
- package/dist/{src-Ds9IAk5S.mjs.map → src-WAnxhDYD.mjs.map} +1 -1
- package/package.json +58 -58
- package/dist/dist-DBWkkSvJ.mjs.map +0 -1
- package/dist/index-DKssQ_wn.d.mts.map +0 -1
- package/dist/index-fymoeGNW.d.mts.map +0 -1
- package/dist/preview-engine/chunk-X6HUH6K4.mjs +0 -1
- package/dist/preview-engine/renderers-KSQM7EM5.mjs +0 -1
- package/dist/preview-engine/renderers-XLBHSQZJ.mjs +0 -228
- package/dist/renderer-B-D_VZg3.mjs +0 -5
- package/dist/renderer-B64dhpDX.mjs +0 -5
- package/dist/renderer-BA2Ko4H1.mjs +0 -3
- package/dist/renderer-BDL4jyrb.mjs +0 -5
- package/dist/renderer-BKCZGKkl.mjs +0 -5
- package/dist/renderer-BKs3jI7-.mjs +0 -5
- package/dist/renderer-BW74Zf-u.mjs +0 -5
- package/dist/renderer-BXuQN61O.mjs +0 -5
- package/dist/renderer-BY1pPvzx.mjs +0 -6
- package/dist/renderer-Bahthqvq.mjs +0 -5
- package/dist/renderer-BbaiQG8h.mjs +0 -5
- package/dist/renderer-BhHF-08y.mjs +0 -5
- package/dist/renderer-BnrMcw6C.mjs +0 -5
- package/dist/renderer-BsS61z5l.mjs +0 -5
- package/dist/renderer-Btuq2Eq8.mjs +0 -5
- package/dist/renderer-BxmsEl2x.mjs +0 -5
- package/dist/renderer-CGOyHdKs.mjs +0 -5
- package/dist/renderer-CJjmpmpu.mjs +0 -5
- package/dist/renderer-CQvDDAIu.mjs +0 -5
- package/dist/renderer-CYxigw7S.mjs +0 -5
- package/dist/renderer-CgDofO5z.mjs +0 -5
- package/dist/renderer-CgmQchab.mjs +0 -5
- package/dist/renderer-CjzrLwW_.mjs +0 -5
- package/dist/renderer-ClnYWADT.mjs +0 -5
- package/dist/renderer-CwAd71C6.mjs +0 -5
- package/dist/renderer-D3Z9t-xT.mjs +0 -5
- package/dist/renderer-DKH1oSlW.mjs +0 -5
- package/dist/renderer-DTkf_hwG.mjs +0 -5
- package/dist/renderer-DU0bmOS7.mjs +0 -5
- package/dist/renderer-D_vJHQt5.mjs +0 -5
- package/dist/renderer-Db_wphHH.mjs.map +0 -1
- package/dist/renderer-Dc5n0M6P.mjs +0 -5
- package/dist/renderer-Ddfn0Dha.mjs +0 -5
- package/dist/renderer-DeSoNQeG.mjs +0 -5
- package/dist/renderer-DuQMzR3v.mjs.map +0 -1
- package/dist/renderer-Dzca9Qba.mjs +0 -5
- package/dist/renderer-HRVvtc9c.mjs +0 -5
- package/dist/renderer-M3Qs4f1K.mjs +0 -5
- package/dist/renderer-NDHJt_Ae.mjs +0 -5
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { c as solveHomography, n as defineRenderer } from "./renderer-C9r0-KY4.mjs";
|
|
2
|
-
import { a as createFullscreenPipeline, c as drawTextureToTarget, l as fragmentBindGroupLayout, o as drawChildToTexture, r as STRAIGHT_ALPHA_BLEND, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL } from "./gpu-
|
|
2
|
+
import { a as createFullscreenPipeline, c as drawTextureToTarget, l as fragmentBindGroupLayout, o as drawChildToTexture, r as STRAIGHT_ALPHA_BLEND, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL } from "./gpu-CevnCkZC.mjs";
|
|
3
3
|
|
|
4
4
|
//#region ../../nodes/node-corner-pin/dist/renderers-pM5Tx32P.mjs
|
|
5
5
|
function getDefaultPoints() {
|
|
@@ -145,4 +145,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: CornerPinWebGPURenderer
|
|
|
145
145
|
|
|
146
146
|
//#endregion
|
|
147
147
|
export { renderers_default as t };
|
|
148
|
-
//# sourceMappingURL=renderer-
|
|
148
|
+
//# sourceMappingURL=renderer-CxOaqnho.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-
|
|
1
|
+
{"version":3,"file":"renderer-CxOaqnho.mjs","names":[],"sources":["../../../nodes/node-corner-pin/dist/renderers-pM5Tx32P.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, STRAIGHT_ALPHA_BLEND, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout } from \"@framefields/node-sdk/gpu\";\nimport { solveHomography } from \"@framefields/node-sdk\";\n\n//#region src/shared/utils.ts\nfunction getDefaultPoints() {\n\treturn [\n\t\t{\n\t\t\tx: 0,\n\t\t\ty: 0\n\t\t},\n\t\t{\n\t\t\tx: 100,\n\t\t\ty: 0\n\t\t},\n\t\t{\n\t\t\tx: 0,\n\t\t\ty: 100\n\t\t},\n\t\t{\n\t\t\tx: 100,\n\t\t\ty: 100\n\t\t}\n\t];\n}\n/**\n* Homography mapping the corner-pin quad (percent coordinates, TL, TR, BL, BR)\n* to the unit square it samples from. Falls back to the identity quad.\n*/\nfunction solveCornerPinHomography(targetPoints) {\n\treturn solveHomography((targetPoints && targetPoints.length === 4 ? targetPoints : getDefaultPoints()).map((p) => ({\n\t\tx: p.x / 100,\n\t\ty: p.y / 100\n\t})));\n}\n\n//#endregion\n//#region src/renderers/webgpu-renderer.ts\nconst cornerPinWgsl = `\nstruct CornerPinUniforms {\n\tmatrix_row0 : vec4<f32>,\n\tmatrix_row1 : vec4<f32>,\n\tmatrix_row2 : vec4<f32>,\n};\n\n@group(0) @binding(0) var<uniform> u : CornerPinUniforms;\n@group(1) @binding(0) var tex : texture_2d<f32>;\n@group(1) @binding(1) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet x = in.uv.x;\n\tlet y = in.uv.y;\n\n\tlet d = u.matrix_row2.x * x + u.matrix_row2.y * y + u.matrix_row2.z;\n\tif (abs(d) < 1e-6) {\n\t\treturn vec4<f32>(0.0);\n\t}\n\n\tlet src_u = (u.matrix_row0.x * x + u.matrix_row0.y * y + u.matrix_row0.z) / d;\n\tlet src_v = (u.matrix_row1.x * x + u.matrix_row1.y * y + u.matrix_row1.z) / d;\n\n\tif (src_u < 0.0 || src_u > 1.0 || src_v < 0.0 || src_v > 1.0) {\n\t\treturn vec4<f32>(0.0);\n\t}\n\n\tlet color = textureSampleLevel(tex, samp, vec2<f32>(src_u, src_v), 0.0);\n\treturn color;\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nfunction getCornerPinResources(device, format) {\n\tlet res = deviceResourceCache.get(device);\n\tif (!res) {\n\t\tconst pinUniformLayout = fragmentBindGroupLayout(device, [\"uniform\"]);\n\t\tconst pinTextureLayout = fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]);\n\t\tres = {\n\t\t\tpinPipeline: createFullscreenPipeline(device, {\n\t\t\t\tlabel: \"CornerPinPipeline\",\n\t\t\t\tmodule: device.createShaderModule({\n\t\t\t\t\tlabel: \"corner_pin.wgsl\",\n\t\t\t\t\tcode: cornerPinWgsl\n\t\t\t\t}),\n\t\t\t\tlayouts: [pinUniformLayout, pinTextureLayout],\n\t\t\t\tformat,\n\t\t\t\tblend: STRAIGHT_ALPHA_BLEND\n\t\t\t}),\n\t\t\tpinUniformLayout,\n\t\t\tpinTextureLayout\n\t\t};\n\t\tdeviceResourceCache.set(device, res);\n\t}\n\treturn res;\n}\nconst CornerPinWebGPURenderer = async (args) => {\n\tconst { ctx, props, targetTexture, targetWidth, targetHeight, encoder } = args;\n\tconst { virtualMedia } = props;\n\tconst op = virtualMedia?.operation;\n\tif (!op || op.op !== \"CornerPin\") return;\n\tconst childMedia = virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tconst sourceWidth = op.originalWidth ?? childMedia.metadata?.width ?? props.containerWidth ?? targetWidth;\n\tconst sourceHeight = op.originalHeight ?? childMedia.metadata?.height ?? props.containerHeight ?? targetHeight;\n\targs.pass.end();\n\tconst { texture: childTex } = await drawChildToTexture(args, childMedia, {\n\t\twidth: sourceWidth,\n\t\theight: sourceHeight,\n\t\tprops: {\n\t\t\t...props,\n\t\t\tcontainerWidth: sourceWidth,\n\t\t\tcontainerHeight: sourceHeight,\n\t\t\tvirtualMedia: childMedia\n\t\t}\n\t});\n\tconst h = solveCornerPinHomography(op.points || []);\n\tconst uniformData = new Float32Array(12);\n\tuniformData[0] = h[0];\n\tuniformData[1] = h[1];\n\tuniformData[2] = h[2];\n\tuniformData[3] = 0;\n\tuniformData[4] = h[3];\n\tuniformData[5] = h[4];\n\tuniformData[6] = h[5];\n\tuniformData[7] = 0;\n\tuniformData[8] = h[6];\n\tuniformData[9] = h[7];\n\tuniformData[10] = h[8];\n\tuniformData[11] = 0;\n\tconst { pinPipeline: pipeline, pinUniformLayout: uLayout, pinTextureLayout: tLayout } = getCornerPinResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(uniformData);\n\tconst uniformBindGroup = ctx.device.createBindGroup({\n\t\tlayout: uLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: uniformBuffer }\n\t\t}]\n\t});\n\tconst textureBindGroup = ctx.renderer.bindGroupCache.getBindGroup(ctx.device, tLayout, childTex, sampler);\n\tconst outTex = ctx.renderer.getTemporaryTexture(targetWidth, targetHeight, [\n\t\tchildTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tdrawFullscreenPass(encoder, outTex.createView(), pipeline, [uniformBindGroup, textureBindGroup]);\n\tdrawTextureToTarget(args, outTex, op.opacity ?? 1);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: CornerPinWebGPURenderer });\n\n//#endregion\nexport { getDefaultPoints as n, solveCornerPinHomography as r, renderers_default as t };\n//# sourceMappingURL=renderers-pM5Tx32P.mjs.map"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import "./chunk-D7gtBK74.mjs";
|
|
2
2
|
import { n as defineRenderer } from "./renderer-C9r0-KY4.mjs";
|
|
3
|
-
import "./dist-
|
|
4
|
-
import { c as drawTextureToTarget, l as fragmentBindGroupLayout, o as drawChildToTexture, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL, u as perDevice } from "./gpu-
|
|
3
|
+
import "./dist-Bf0H4lp1.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-CevnCkZC.mjs";
|
|
5
5
|
|
|
6
6
|
//#region ../../nodes/node-dither/dist/renderers-v80Aclc6.mjs
|
|
7
7
|
const OP = "Dither";
|
|
@@ -217,4 +217,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: DitherWebGPURenderer })
|
|
|
217
217
|
|
|
218
218
|
//#endregion
|
|
219
219
|
export { DitherWebGPURenderer, renderers_default as default };
|
|
220
|
-
//# sourceMappingURL=renderer-
|
|
220
|
+
//# sourceMappingURL=renderer-CxkUI9s_.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-DkPDYtD3.mjs","names":[],"sources":["../../../nodes/node-dither/dist/renderers-v80Aclc6.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst OP = \"Dither\";\nconst UNIFORM_FLOATS = 16;\n/** One fragment shader per pass; pass 0 reads the layer, later passes read the previous pass. */\nconst PASSES = [`struct U { v : array<vec4<f32>, 4> };\n@group(0) @binding(0) var<uniform> u : U;\n@group(0) @binding(1) var src : texture_2d<f32>;\n@group(0) @binding(2) var prev : texture_2d<f32>;\n@group(0) @binding(3) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn straight(c : vec4<f32>) -> vec4<f32> {\n\tif (c.a <= 0.0001) { return vec4<f32>(0.0); }\n\treturn vec4<f32>(c.rgb / c.a, c.a);\n}\nfn premul(c : vec4<f32>) -> vec4<f32> { return vec4<f32>(c.rgb * c.a, c.a); }\nfn res() -> vec2<f32> { return vec2<f32>(textureDimensions(src)); }\n/** Straight-alpha color of the layer at a uv (filtered). */\nfn sampleS(uv : vec2<f32>) -> vec4<f32> { return straight(textureSampleLevel(src, samp, uv, 0.0)); }\n/** Premultiplied color of the layer at a uv (filtered). */\nfn sampleP(uv : vec2<f32>) -> vec4<f32> { return textureSampleLevel(src, samp, uv, 0.0); }\n/** Straight-alpha color of the layer's texel at a pixel position (nearest). */\nfn texelS(p : vec2<f32>) -> vec4<f32> {\n\tlet d = vec2<i32>(textureDimensions(src));\n\tlet q = clamp(vec2<i32>(floor(p)), vec2<i32>(0), d - vec2<i32>(1));\n\treturn straight(textureLoad(src, q, 0));\n}\nfn luma(c : vec3<f32>) -> f32 { return dot(c, vec3<f32>(0.2126, 0.7152, 0.0722)); }\nfn hash12(p : vec2<f32>) -> f32 {\n\tvar p3 = fract(vec3<f32>(p.xyx) * 0.1031);\n\tp3 += dot(p3, p3.yzx + 33.33);\n\treturn fract((p3.x + p3.y) * p3.z);\n}\nfn vnoise(p : vec2<f32>) -> f32 {\n\tlet i = floor(p);\n\tlet f = fract(p);\n\tlet u = f * f * (3.0 - 2.0 * f);\n\treturn mix(mix(hash12(i), hash12(i + vec2<f32>(1.0, 0.0)), u.x),\n\t\tmix(hash12(i + vec2<f32>(0.0, 1.0)), hash12(i + vec2<f32>(1.0, 1.0)), u.x), u.y);\n}\n/** 8x8 ordered-dither threshold, 0..1. */\nfn bayer8(p : vec2<f32>) -> f32 {\n\tlet x = u32(p.x) & 7u;\n\tlet y = u32(p.y) & 7u;\n\tvar v = 0u;\n\tfor (var k = 0u; k < 3u; k++) {\n\t\tlet bx = (x >> k) & 1u;\n\t\tlet by = (y >> k) & 1u;\n\t\tlet m = ((bx ^ by) << 1u) | by;\n\t\tv += m * (1u << (2u * (2u - k)));\n\t}\n\treturn (f32(v) + 0.5) / 64.0;\n}\nfn rot2(a : f32) -> mat2x2<f32> { let c = cos(a); let s = sin(a); return mat2x2<f32>(c, s, -s, c); }\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet time = u.v[0].x;\n\tlet frame = u.v[0].y;\n\tlet mode = u32(u.v[1].x + 0.5);\n\tlet levels = u.v[1].y;\n\tlet scale = u.v[1].z;\n\tlet monochrome = u.v[1].w;\n\tlet dark = u.v[2];\n\tlet light = u.v[3];\n\n\tlet R = res();\n\tlet s = max(scale, 1.0);\n\tlet cellp = floor(in.uv * R / s);\n\tlet c = texelS(cellp * s + s * 0.5);\n\tvar t = bayer8(cellp);\n\tif (mode == 1u) { t = hash12(cellp); }\n\tif (mode == 2u) { t = clamp(length(fract(cellp / 4.0) - 0.5) * 1.414, 0.0, 1.0); }\n\tlet n = max(levels - 1.0, 1.0);\n\tvar rgb : vec3<f32>;\n\tif (monochrome > 0.5) {\n\t\tlet q = clamp(floor(luma(c.rgb) * n + t) / n, 0.0, 1.0);\n\t\trgb = mix(dark.rgb, light.rgb, q);\n\t} else {\n\t\trgb = clamp(floor(c.rgb * n + vec3<f32>(t)) / n, vec3<f32>(0.0), vec3<f32>(1.0));\n\t}\n\treturn premul(vec4<f32>(rgb, c.a));\n}\n`];\nconst resources = perDevice((device) => ({\n\tlayout: fragmentBindGroupLayout(device, [\n\t\t\"uniform\",\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"sampler\"\n\t], `${OP}_layout`),\n\tpipelines: /* @__PURE__ */ new Map(),\n\tsampler: device.createSampler({\n\t\tmagFilter: \"linear\",\n\t\tminFilter: \"linear\",\n\t\taddressModeU: \"clamp-to-edge\",\n\t\taddressModeV: \"clamp-to-edge\"\n\t})\n}));\nfunction pipelinesFor(device, format) {\n\tconst r = resources(device);\n\tlet list = r.pipelines.get(format);\n\tif (!list) {\n\t\tlist = PASSES.map((code, i) => {\n\t\t\tconst module = device.createShaderModule({\n\t\t\t\tcode,\n\t\t\t\tlabel: `${OP}_${i}.wgsl`\n\t\t\t});\n\t\t\treturn device.createRenderPipeline({\n\t\t\t\tlabel: `${OP}_${i}`,\n\t\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [r.layout] }),\n\t\t\t\tvertex: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"vs\"\n\t\t\t\t},\n\t\t\t\tfragment: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"fs\",\n\t\t\t\t\ttargets: [{ format }]\n\t\t\t\t},\n\t\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t\t});\n\t\t});\n\t\tr.pipelines.set(format, list);\n\t}\n\treturn list;\n}\nfunction num(v, fallback) {\n\tconst n = typeof v === \"number\" ? v : Number(v);\n\treturn Number.isFinite(n) ? n : fallback;\n}\nfunction hexToRgba(hex) {\n\tlet h = hex.trim().replace(\"#\", \"\");\n\tif (h.length === 3 || h.length === 4) h = [...h].map((c) => c + c).join(\"\");\n\tconst n = (i) => Number.parseInt(h.slice(i, i + 2), 16) / 255;\n\treturn [\n\t\tn(0),\n\t\tn(2),\n\t\tn(4),\n\t\th.length >= 8 ? n(6) : 1\n\t];\n}\n/** Packs the effect's resolved props into the uniform block the shaders read. */\nfunction pack(raw, data, time, frame) {\n\tdata.fill(0);\n\tdata[0] = time;\n\tdata[1] = frame;\n\tdata[4] = Math.max(0, [\n\t\t\"bayer\",\n\t\t\"noise\",\n\t\t\"halftone\"\n\t].indexOf(String(raw.mode ?? \"bayer\")));\n\tdata[5] = num(raw.levels, 2);\n\tdata[6] = num(raw.scale, 2);\n\tdata[7] = raw.monochrome === void 0 ? 1 : raw.monochrome ? 1 : 0;\n\tdata.set(hexToRgba(String(raw.dark ?? \"#111111\")), 8);\n\tdata.set(hexToRgba(String(raw.light ?? \"#f2efe6\")), 12);\n}\nconst DitherWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== OP) return;\n\tconst child = props.virtualMedia?.children?.[0];\n\tif (!child) return;\n\tpass.end();\n\tconst fps = props.fps || 30;\n\tconst frame = Math.round(props.compositionFrame ?? props.frame ?? 0);\n\tconst raw = op.effect?.resolveUniforms ? op.effect.resolveUniforms({\n\t\tframe,\n\t\tfps,\n\t\ttime: frame / fps\n\t}) : op;\n\tconst data = new Float32Array(UNIFORM_FLOATS);\n\tpack(raw, data, frame / fps, frame);\n\tconst { texture: childTex } = await drawChildToTexture(args, child);\n\tconst device = ctx.device;\n\tconst r = resources(device);\n\tconst pipelines = pipelinesFor(device, ctx.renderer.format);\n\tconst ubo = ctx.renderer.getTemporaryBuffer(data);\n\tlet prev = childTex;\n\tfor (const pipeline of pipelines) {\n\t\tconst out = ctx.renderer.getTemporaryTexture(targetWidth, targetHeight, [\n\t\t\tchildTex,\n\t\t\tprev,\n\t\t\ttargetTexture,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tdrawFullscreenPass(encoder, out.createView(), pipeline, [device.createBindGroup({\n\t\t\tlayout: r.layout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: ubo }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: childTex.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: prev.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: r.sampler\n\t\t\t\t}\n\t\t\t]\n\t\t})]);\n\t\tprev = out;\n\t}\n\tdrawTextureToTarget(args, prev);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: DitherWebGPURenderer });\n\n//#endregion\nexport { DitherWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-v80Aclc6.mjs.map"],"mappings":";;;;;;AAIA,MAAM,KAAK;AACX,MAAM,iBAAiB;;AAEvB,MAAM,SAAS,CAAC;;;;;EAKd,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwErB;AACF,MAAM,YAAY,WAAW,YAAY;CACxC,QAAQ,wBAAwB,QAAQ;EACvC;EACA;EACA;EACA;EACA,EAAE,GAAG,GAAG,SAAS;CAClB,2BAA2B,IAAI,KAAK;CACpC,SAAS,OAAO,cAAc;EAC7B,WAAW;EACX,WAAW;EACX,cAAc;EACd,cAAc;EACd,CAAC;CACF,EAAE;AACH,SAAS,aAAa,QAAQ,QAAQ;CACrC,MAAM,IAAI,UAAU,OAAO;CAC3B,IAAI,OAAO,EAAE,UAAU,IAAI,OAAO;AAClC,KAAI,CAAC,MAAM;AACV,SAAO,OAAO,KAAK,MAAM,MAAM;GAC9B,MAAM,SAAS,OAAO,mBAAmB;IACxC;IACA,OAAO,GAAG,GAAG,GAAG,EAAE;IAClB,CAAC;AACF,UAAO,OAAO,qBAAqB;IAClC,OAAO,GAAG,GAAG,GAAG;IAChB,QAAQ,OAAO,qBAAqB,EAAE,kBAAkB,CAAC,EAAE,OAAO,EAAE,CAAC;IACrE,QAAQ;KACP;KACA,YAAY;KACZ;IACD,UAAU;KACT;KACA,YAAY;KACZ,SAAS,CAAC,EAAE,QAAQ,CAAC;KACrB;IACD,WAAW,EAAE,UAAU,kBAAkB;IACzC,CAAC;IACD;AACF,IAAE,UAAU,IAAI,QAAQ,KAAK;;AAE9B,QAAO;;AAER,SAAS,IAAI,GAAG,UAAU;CACzB,MAAM,IAAI,OAAO,MAAM,WAAW,IAAI,OAAO,EAAE;AAC/C,QAAO,OAAO,SAAS,EAAE,GAAG,IAAI;;AAEjC,SAAS,UAAU,KAAK;CACvB,IAAI,IAAI,IAAI,MAAM,CAAC,QAAQ,KAAK,GAAG;AACnC,KAAI,EAAE,WAAW,KAAK,EAAE,WAAW,EAAG,KAAI,CAAC,GAAG,EAAE,CAAC,KAAK,MAAM,IAAI,EAAE,CAAC,KAAK,GAAG;CAC3E,MAAM,KAAK,MAAM,OAAO,SAAS,EAAE,MAAM,GAAG,IAAI,EAAE,EAAE,GAAG,GAAG;AAC1D,QAAO;EACN,EAAE,EAAE;EACJ,EAAE,EAAE;EACJ,EAAE,EAAE;EACJ,EAAE,UAAU,IAAI,EAAE,EAAE,GAAG;EACvB;;;AAGF,SAAS,KAAK,KAAK,MAAM,MAAM,OAAO;AACrC,MAAK,KAAK,EAAE;AACZ,MAAK,KAAK;AACV,MAAK,KAAK;AACV,MAAK,KAAK,KAAK,IAAI,GAAG;EACrB;EACA;EACA;EACA,CAAC,QAAQ,OAAO,IAAI,QAAQ,QAAQ,CAAC,CAAC;AACvC,MAAK,KAAK,IAAI,IAAI,QAAQ,EAAE;AAC5B,MAAK,KAAK,IAAI,IAAI,OAAO,EAAE;AAC3B,MAAK,KAAK,IAAI,eAAe,KAAK,IAAI,IAAI,IAAI,aAAa,IAAI;AAC/D,MAAK,IAAI,UAAU,OAAO,IAAI,QAAQ,UAAU,CAAC,EAAE,EAAE;AACrD,MAAK,IAAI,UAAU,OAAO,IAAI,SAAS,UAAU,CAAC,EAAE,GAAG;;AAExD,MAAM,uBAAuB,OAAO,SAAS;CAC5C,MAAM,EAAE,KAAK,SAAS,MAAM,eAAe,aAAa,cAAc,UAAU;CAChF,MAAM,KAAK,MAAM,cAAc;AAC/B,KAAI,IAAI,OAAO,GAAI;CACnB,MAAM,QAAQ,MAAM,cAAc,WAAW;AAC7C,KAAI,CAAC,MAAO;AACZ,MAAK,KAAK;CACV,MAAM,MAAM,MAAM,OAAO;CACzB,MAAM,QAAQ,KAAK,MAAM,MAAM,oBAAoB,MAAM,SAAS,EAAE;CACpE,MAAM,MAAM,GAAG,QAAQ,kBAAkB,GAAG,OAAO,gBAAgB;EAClE;EACA;EACA,MAAM,QAAQ;EACd,CAAC,GAAG;CACL,MAAM,OAAO,IAAI,aAAa,eAAe;AAC7C,MAAK,KAAK,MAAM,QAAQ,KAAK,MAAM;CACnC,MAAM,EAAE,SAAS,aAAa,MAAM,mBAAmB,MAAM,MAAM;CACnE,MAAM,SAAS,IAAI;CACnB,MAAM,IAAI,UAAU,OAAO;CAC3B,MAAM,YAAY,aAAa,QAAQ,IAAI,SAAS,OAAO;CAC3D,MAAM,MAAM,IAAI,SAAS,mBAAmB,KAAK;CACjD,IAAI,OAAO;AACX,MAAK,MAAM,YAAY,WAAW;EACjC,MAAM,MAAM,IAAI,SAAS,oBAAoB,aAAa,cAAc;GACvE;GACA;GACA;GACA,GAAG,MAAM,mBAAmB,EAAE;GAC9B,CAAC;AACF,qBAAmB,SAAS,IAAI,YAAY,EAAE,UAAU,CAAC,OAAO,gBAAgB;GAC/E,QAAQ,EAAE;GACV,SAAS;IACR;KACC,SAAS;KACT,UAAU,EAAE,QAAQ,KAAK;KACzB;IACD;KACC,SAAS;KACT,UAAU,SAAS,YAAY;KAC/B;IACD;KACC,SAAS;KACT,UAAU,KAAK,YAAY;KAC3B;IACD;KACC,SAAS;KACT,UAAU,EAAE;KACZ;IACD;GACD,CAAC,CAAC,CAAC;AACJ,SAAO;;AAER,qBAAoB,MAAM,KAAK;;AAKhC,IAAI,oBAAoB,eAAe,EAAE,gBAAgB,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"renderer-CxkUI9s_.mjs","names":[],"sources":["../../../nodes/node-dither/dist/renderers-v80Aclc6.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst OP = \"Dither\";\nconst UNIFORM_FLOATS = 16;\n/** One fragment shader per pass; pass 0 reads the layer, later passes read the previous pass. */\nconst PASSES = [`struct U { v : array<vec4<f32>, 4> };\n@group(0) @binding(0) var<uniform> u : U;\n@group(0) @binding(1) var src : texture_2d<f32>;\n@group(0) @binding(2) var prev : texture_2d<f32>;\n@group(0) @binding(3) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn straight(c : vec4<f32>) -> vec4<f32> {\n\tif (c.a <= 0.0001) { return vec4<f32>(0.0); }\n\treturn vec4<f32>(c.rgb / c.a, c.a);\n}\nfn premul(c : vec4<f32>) -> vec4<f32> { return vec4<f32>(c.rgb * c.a, c.a); }\nfn res() -> vec2<f32> { return vec2<f32>(textureDimensions(src)); }\n/** Straight-alpha color of the layer at a uv (filtered). */\nfn sampleS(uv : vec2<f32>) -> vec4<f32> { return straight(textureSampleLevel(src, samp, uv, 0.0)); }\n/** Premultiplied color of the layer at a uv (filtered). */\nfn sampleP(uv : vec2<f32>) -> vec4<f32> { return textureSampleLevel(src, samp, uv, 0.0); }\n/** Straight-alpha color of the layer's texel at a pixel position (nearest). */\nfn texelS(p : vec2<f32>) -> vec4<f32> {\n\tlet d = vec2<i32>(textureDimensions(src));\n\tlet q = clamp(vec2<i32>(floor(p)), vec2<i32>(0), d - vec2<i32>(1));\n\treturn straight(textureLoad(src, q, 0));\n}\nfn luma(c : vec3<f32>) -> f32 { return dot(c, vec3<f32>(0.2126, 0.7152, 0.0722)); }\nfn hash12(p : vec2<f32>) -> f32 {\n\tvar p3 = fract(vec3<f32>(p.xyx) * 0.1031);\n\tp3 += dot(p3, p3.yzx + 33.33);\n\treturn fract((p3.x + p3.y) * p3.z);\n}\nfn vnoise(p : vec2<f32>) -> f32 {\n\tlet i = floor(p);\n\tlet f = fract(p);\n\tlet u = f * f * (3.0 - 2.0 * f);\n\treturn mix(mix(hash12(i), hash12(i + vec2<f32>(1.0, 0.0)), u.x),\n\t\tmix(hash12(i + vec2<f32>(0.0, 1.0)), hash12(i + vec2<f32>(1.0, 1.0)), u.x), u.y);\n}\n/** 8x8 ordered-dither threshold, 0..1. */\nfn bayer8(p : vec2<f32>) -> f32 {\n\tlet x = u32(p.x) & 7u;\n\tlet y = u32(p.y) & 7u;\n\tvar v = 0u;\n\tfor (var k = 0u; k < 3u; k++) {\n\t\tlet bx = (x >> k) & 1u;\n\t\tlet by = (y >> k) & 1u;\n\t\tlet m = ((bx ^ by) << 1u) | by;\n\t\tv += m * (1u << (2u * (2u - k)));\n\t}\n\treturn (f32(v) + 0.5) / 64.0;\n}\nfn rot2(a : f32) -> mat2x2<f32> { let c = cos(a); let s = sin(a); return mat2x2<f32>(c, s, -s, c); }\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet time = u.v[0].x;\n\tlet frame = u.v[0].y;\n\tlet mode = u32(u.v[1].x + 0.5);\n\tlet levels = u.v[1].y;\n\tlet scale = u.v[1].z;\n\tlet monochrome = u.v[1].w;\n\tlet dark = u.v[2];\n\tlet light = u.v[3];\n\n\tlet R = res();\n\tlet s = max(scale, 1.0);\n\tlet cellp = floor(in.uv * R / s);\n\tlet c = texelS(cellp * s + s * 0.5);\n\tvar t = bayer8(cellp);\n\tif (mode == 1u) { t = hash12(cellp); }\n\tif (mode == 2u) { t = clamp(length(fract(cellp / 4.0) - 0.5) * 1.414, 0.0, 1.0); }\n\tlet n = max(levels - 1.0, 1.0);\n\tvar rgb : vec3<f32>;\n\tif (monochrome > 0.5) {\n\t\tlet q = clamp(floor(luma(c.rgb) * n + t) / n, 0.0, 1.0);\n\t\trgb = mix(dark.rgb, light.rgb, q);\n\t} else {\n\t\trgb = clamp(floor(c.rgb * n + vec3<f32>(t)) / n, vec3<f32>(0.0), vec3<f32>(1.0));\n\t}\n\treturn premul(vec4<f32>(rgb, c.a));\n}\n`];\nconst resources = perDevice((device) => ({\n\tlayout: fragmentBindGroupLayout(device, [\n\t\t\"uniform\",\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"sampler\"\n\t], `${OP}_layout`),\n\tpipelines: /* @__PURE__ */ new Map(),\n\tsampler: device.createSampler({\n\t\tmagFilter: \"linear\",\n\t\tminFilter: \"linear\",\n\t\taddressModeU: \"clamp-to-edge\",\n\t\taddressModeV: \"clamp-to-edge\"\n\t})\n}));\nfunction pipelinesFor(device, format) {\n\tconst r = resources(device);\n\tlet list = r.pipelines.get(format);\n\tif (!list) {\n\t\tlist = PASSES.map((code, i) => {\n\t\t\tconst module = device.createShaderModule({\n\t\t\t\tcode,\n\t\t\t\tlabel: `${OP}_${i}.wgsl`\n\t\t\t});\n\t\t\treturn device.createRenderPipeline({\n\t\t\t\tlabel: `${OP}_${i}`,\n\t\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [r.layout] }),\n\t\t\t\tvertex: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"vs\"\n\t\t\t\t},\n\t\t\t\tfragment: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"fs\",\n\t\t\t\t\ttargets: [{ format }]\n\t\t\t\t},\n\t\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t\t});\n\t\t});\n\t\tr.pipelines.set(format, list);\n\t}\n\treturn list;\n}\nfunction num(v, fallback) {\n\tconst n = typeof v === \"number\" ? v : Number(v);\n\treturn Number.isFinite(n) ? n : fallback;\n}\nfunction hexToRgba(hex) {\n\tlet h = hex.trim().replace(\"#\", \"\");\n\tif (h.length === 3 || h.length === 4) h = [...h].map((c) => c + c).join(\"\");\n\tconst n = (i) => Number.parseInt(h.slice(i, i + 2), 16) / 255;\n\treturn [\n\t\tn(0),\n\t\tn(2),\n\t\tn(4),\n\t\th.length >= 8 ? n(6) : 1\n\t];\n}\n/** Packs the effect's resolved props into the uniform block the shaders read. */\nfunction pack(raw, data, time, frame) {\n\tdata.fill(0);\n\tdata[0] = time;\n\tdata[1] = frame;\n\tdata[4] = Math.max(0, [\n\t\t\"bayer\",\n\t\t\"noise\",\n\t\t\"halftone\"\n\t].indexOf(String(raw.mode ?? \"bayer\")));\n\tdata[5] = num(raw.levels, 2);\n\tdata[6] = num(raw.scale, 2);\n\tdata[7] = raw.monochrome === void 0 ? 1 : raw.monochrome ? 1 : 0;\n\tdata.set(hexToRgba(String(raw.dark ?? \"#111111\")), 8);\n\tdata.set(hexToRgba(String(raw.light ?? \"#f2efe6\")), 12);\n}\nconst DitherWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== OP) return;\n\tconst child = props.virtualMedia?.children?.[0];\n\tif (!child) return;\n\tpass.end();\n\tconst fps = props.fps || 30;\n\tconst frame = Math.round(props.compositionFrame ?? props.frame ?? 0);\n\tconst raw = op.effect?.resolveUniforms ? op.effect.resolveUniforms({\n\t\tframe,\n\t\tfps,\n\t\ttime: frame / fps\n\t}) : op;\n\tconst data = new Float32Array(UNIFORM_FLOATS);\n\tpack(raw, data, frame / fps, frame);\n\tconst { texture: childTex } = await drawChildToTexture(args, child);\n\tconst device = ctx.device;\n\tconst r = resources(device);\n\tconst pipelines = pipelinesFor(device, ctx.renderer.format);\n\tconst ubo = ctx.renderer.getTemporaryBuffer(data);\n\tlet prev = childTex;\n\tfor (const pipeline of pipelines) {\n\t\tconst out = ctx.renderer.getTemporaryTexture(targetWidth, targetHeight, [\n\t\t\tchildTex,\n\t\t\tprev,\n\t\t\ttargetTexture,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tdrawFullscreenPass(encoder, out.createView(), pipeline, [device.createBindGroup({\n\t\t\tlayout: r.layout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: ubo }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: childTex.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: prev.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: r.sampler\n\t\t\t\t}\n\t\t\t]\n\t\t})]);\n\t\tprev = out;\n\t}\n\tdrawTextureToTarget(args, prev);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: DitherWebGPURenderer });\n\n//#endregion\nexport { DitherWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-v80Aclc6.mjs.map"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { cn as resolveNumber, un as resolveString } from "./dist-
|
|
1
|
+
import { cn as resolveNumber, un as resolveString } from "./dist-D021IFfp.mjs";
|
|
2
2
|
import { n as defineRenderer, r as isHandleConnected } from "./renderer-C9r0-KY4.mjs";
|
|
3
|
-
import { g as WebGPUAudioProcessor } from "./dist-
|
|
3
|
+
import { g as WebGPUAudioProcessor } from "./dist-Bf0H4lp1.mjs";
|
|
4
4
|
|
|
5
5
|
//#region ../../nodes/node-audio-fade/dist/renderers-C_aLLJ4x.mjs
|
|
6
6
|
const PARAM_ORDER = ["fadeInDuration", "fadeOutDuration"];
|
|
@@ -173,4 +173,4 @@ var renderers_default = defineRenderer({ audioProcessor: fadeAudioProcessor });
|
|
|
173
173
|
|
|
174
174
|
//#endregion
|
|
175
175
|
export { renderers_default as t };
|
|
176
|
-
//# sourceMappingURL=renderer-
|
|
176
|
+
//# sourceMappingURL=renderer-Cz5SOnJr.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-
|
|
1
|
+
{"version":3,"file":"renderer-Cz5SOnJr.mjs","names":[],"sources":["../../../nodes/node-audio-fade/dist/renderers-C_aLLJ4x.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { isHandleConnected, resolveNumber, resolveString } from \"@framefields/node-sdk\";\nimport { WebGPUAudioProcessor } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/audio-processor.ts\nconst PARAM_ORDER = [\"fadeInDuration\", \"fadeOutDuration\"];\nconst FADE_SHADER_TEMPLATE = () => `\nstruct Uniforms {\n sampleRate : f32,\n fadeInDuration : f32,\n fadeOutDuration : f32,\n fadeInCurve : f32,\n fadeOutCurve : f32,\n clipDuration : f32,\n hasFadeInDurationSig : f32,\n hasFadeOutDurationSig : f32,\n baseTime : f32,\n frame : f32,\n numSamples : f32,\n numChannels : f32,\n pad1 : f32,\n pad2 : f32,\n pad3 : f32,\n pad4 : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : Uniforms;\n@group(0) @binding(1) var<storage, read> inputChannels : array<f32>;\n@group(0) @binding(2) var<storage, read_write> outputChannels : array<f32>;\n@group(0) @binding(3) var<storage, read_write> state : array<f32>; // state[0] = samplesProcessed\n@group(0) @binding(4) var<storage, read> fadeInDurationSignal : array<f32>;\n@group(0) @binding(5) var<storage, read> fadeOutDurationSignal : array<f32>;\n\nfn applyCurve(p: f32, curve: f32) -> f32 {\n let clampedP = max(0.0f, min(p, 1.0f));\n if (curve == 1.0f) { // exponential\n return clampedP * clampedP;\n }\n if (curve == 2.0f) { // scurve\n return clampedP * clampedP * (3.0f - 2.0f * clampedP);\n }\n return clampedP; // linear\n}\n\nfn tanh(x: f32) -> f32 {\n let exp2x = exp(2.0f * x);\n return (exp2x - 1.0f) / (exp2x + 1.0f);\n}\n\nfn is_nan_or_inf(v: f32) -> bool {\n return (v != v) || (abs(v) > 3.402823466e+38f);\n}\n\n@compute @workgroup_size(1)\nfn main(@builtin(global_invocation_id) gid : vec3<u32>) {\n if (gid.x != 0u) { return; }\n\n let numSamples = u32(u.numSamples);\n let numChannels = u32(u.numChannels);\n\n for (var index = 0u; index < numSamples; index = index + 1u) {\n let t = u.baseTime + f32(index) / u.sampleRate;\n var gain = 1.0f;\n\n var effFadeIn = u.fadeInDuration;\n if (u.hasFadeInDurationSig > 0.5f) {\n effFadeIn = fadeInDurationSignal[index];\n }\n effFadeIn = clamp(effFadeIn, 0.0f, 60.0f);\n\n var effFadeOut = u.fadeOutDuration;\n if (u.hasFadeOutDurationSig > 0.5f) {\n effFadeOut = fadeOutDurationSignal[index];\n }\n effFadeOut = clamp(effFadeOut, 0.0f, 60.0f);\n\n if (effFadeIn > 0.0f && t < effFadeIn) {\n let p = t / effFadeIn;\n gain = gain * applyCurve(p, u.fadeInCurve);\n }\n\n if (effFadeOut > 0.0f && t > u.clipDuration - effFadeOut) {\n let p = (u.clipDuration - t) / effFadeOut;\n gain = gain * applyCurve(p, u.fadeOutCurve);\n }\n\n gain = clamp(gain, 0.0f, 1.0f);\n\n for (var c = 0u; c < numChannels; c = c + 1u) {\n let sampleIndex = c * numSamples + index;\n var inVal = inputChannels[sampleIndex];\n if (is_nan_or_inf(inVal)) {\n inVal = 0.0f;\n }\n\n var outVal = inVal * gain;\n if (is_nan_or_inf(outVal)) {\n outVal = 0.0f;\n }\n\n if (outVal > 1.0f) {\n outVal = 1.0f;\n } else if (outVal < -1.0f) {\n outVal = -1.0f;\n } else if (outVal > 0.9f) {\n outVal = 0.9f + 0.1f * tanh((outVal - 0.9f) / 0.1f);\n } else if (outVal < -0.9f) {\n outVal = -0.9f + 0.1f * tanh((outVal + 0.9f) / 0.1f);\n }\n\n outputChannels[sampleIndex] = outVal;\n }\n }\n\n // Dummy reference to keep state binding active\n state[0] = state[0];\n}\n`;\nconst getCurveCode = (curve) => {\n\tif (curve === \"exponential\") return 1;\n\tif (curve === \"scurve\") return 2;\n\treturn 0;\n};\nconst fadeAudioProcessor = async (channels, sampleRate, virtualMedia, ctx) => {\n\tif (!ctx?.device) throw new Error(\"GPUDevice is required for WebGPU Audio Fade.\");\n\tconst op = virtualMedia.operation || {};\n\tconst numChannels = channels.length;\n\tif (numChannels === 0) return;\n\tconst numSamples = channels[0].length;\n\tif (numSamples === 0) return;\n\tconst fadeInDuration = Math.max(0, resolveNumber(op.fadeInDuration, 0));\n\tconst fadeOutDuration = Math.max(0, resolveNumber(op.fadeOutDuration, 0));\n\tconst fadeInCurve = resolveString(op.fadeInCurve, \"linear\");\n\tconst fadeOutCurve = resolveString(op.fadeOutCurve, \"linear\");\n\tconst durationMs = virtualMedia.metadata?.durationMs ?? ctx?.durationMs ?? (typeof op.durationFrames === \"number\" && (ctx.fps ?? 24) > 0 ? op.durationFrames / (ctx.fps ?? 24) * 1e3 : void 0);\n\tconst clipDuration = durationMs !== void 0 && durationMs > 0 ? durationMs / 1e3 : numSamples / sampleRate;\n\tlet fadeIn = fadeInDuration;\n\tlet fadeOut = fadeOutDuration;\n\tif (clipDuration > 0 && fadeIn + fadeOut > clipDuration) {\n\t\tconst half = clipDuration / 2;\n\t\tfadeIn = Math.min(fadeIn, half);\n\t\tfadeOut = Math.min(fadeOut, half);\n\t}\n\tconst hasFadeInDurationSig = isHandleConnected(op, \"fadeInDurationHandleId\") ? 1 : 0;\n\tconst hasFadeOutDurationSig = isHandleConnected(op, \"fadeOutDurationHandleId\") ? 1 : 0;\n\tconst nodeId = op.id || \"audio-fade\";\n\tconst frame = ctx.frame ?? 0;\n\tconst fps = ctx.fps ?? 24;\n\tconst segmentStartSec = Math.max(0, (ctx.elapsedMs ?? 0) / 1e3);\n\tawait WebGPUAudioProcessor.process(ctx.device, nodeId, channels, sampleRate, virtualMedia, frame, fps, FADE_SHADER_TEMPLATE, (chunkTimeSec) => {\n\t\tconst mediaTimeSec = segmentStartSec + Math.max(0, chunkTimeSec - frame / fps);\n\t\treturn [\n\t\t\tsampleRate,\n\t\t\tfadeIn,\n\t\t\tfadeOut,\n\t\t\tgetCurveCode(fadeInCurve),\n\t\t\tgetCurveCode(fadeOutCurve),\n\t\t\tclipDuration,\n\t\t\thasFadeInDurationSig,\n\t\t\thasFadeOutDurationSig,\n\t\t\tmediaTimeSec,\n\t\t\tframe,\n\t\t\tnumSamples,\n\t\t\tnumChannels,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0,\n\t\t\t0\n\t\t];\n\t}, 16, 1, ctx?.renderId, true, ctx?.elapsedMs, ctx?.durationMs, void 0, void 0, PARAM_ORDER);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ audioProcessor: fadeAudioProcessor });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-C_aLLJ4x.mjs.map"],"mappings":";;;;;AAKA,MAAM,cAAc,CAAC,kBAAkB,kBAAkB;AACzD,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgHnC,MAAM,gBAAgB,UAAU;AAC/B,KAAI,UAAU,cAAe,QAAO;AACpC,KAAI,UAAU,SAAU,QAAO;AAC/B,QAAO;;AAER,MAAM,qBAAqB,OAAO,UAAU,YAAY,cAAc,QAAQ;AAC7E,KAAI,CAAC,KAAK,OAAQ,OAAM,IAAI,MAAM,+CAA+C;CACjF,MAAM,KAAK,aAAa,aAAa,EAAE;CACvC,MAAM,cAAc,SAAS;AAC7B,KAAI,gBAAgB,EAAG;CACvB,MAAM,aAAa,SAAS,GAAG;AAC/B,KAAI,eAAe,EAAG;CACtB,MAAM,iBAAiB,KAAK,IAAI,GAAG,cAAc,GAAG,gBAAgB,EAAE,CAAC;CACvE,MAAM,kBAAkB,KAAK,IAAI,GAAG,cAAc,GAAG,iBAAiB,EAAE,CAAC;CACzE,MAAM,cAAc,cAAc,GAAG,aAAa,SAAS;CAC3D,MAAM,eAAe,cAAc,GAAG,cAAc,SAAS;CAC7D,MAAM,aAAa,aAAa,UAAU,cAAc,KAAK,eAAe,OAAO,GAAG,mBAAmB,aAAa,IAAI,OAAO,MAAM,IAAI,GAAG,kBAAkB,IAAI,OAAO,MAAM,MAAM,KAAK;CAC5L,MAAM,eAAe,eAAe,KAAK,KAAK,aAAa,IAAI,aAAa,MAAM,aAAa;CAC/F,IAAI,SAAS;CACb,IAAI,UAAU;AACd,KAAI,eAAe,KAAK,SAAS,UAAU,cAAc;EACxD,MAAM,OAAO,eAAe;AAC5B,WAAS,KAAK,IAAI,QAAQ,KAAK;AAC/B,YAAU,KAAK,IAAI,SAAS,KAAK;;CAElC,MAAM,uBAAuB,kBAAkB,IAAI,yBAAyB,GAAG,IAAI;CACnF,MAAM,wBAAwB,kBAAkB,IAAI,0BAA0B,GAAG,IAAI;CACrF,MAAM,SAAS,GAAG,MAAM;CACxB,MAAM,QAAQ,IAAI,SAAS;CAC3B,MAAM,MAAM,IAAI,OAAO;CACvB,MAAM,kBAAkB,KAAK,IAAI,IAAI,IAAI,aAAa,KAAK,IAAI;AAC/D,OAAM,qBAAqB,QAAQ,IAAI,QAAQ,QAAQ,UAAU,YAAY,cAAc,OAAO,KAAK,uBAAuB,iBAAiB;EAC9I,MAAM,eAAe,kBAAkB,KAAK,IAAI,GAAG,eAAe,QAAQ,IAAI;AAC9E,SAAO;GACN;GACA;GACA;GACA,aAAa,YAAY;GACzB,aAAa,aAAa;GAC1B;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;IACC,IAAI,GAAG,KAAK,UAAU,MAAM,KAAK,WAAW,KAAK,YAAY,KAAK,GAAG,KAAK,GAAG,YAAY;;AAK7F,IAAI,oBAAoB,eAAe,EAAE,gBAAgB,oBAAoB,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import "./chunk-D7gtBK74.mjs";
|
|
2
|
-
import "./dist-
|
|
3
|
-
import { n as renderers_default, t as GradientMapWebGPURenderer } from "./renderer-
|
|
2
|
+
import "./dist-Bf0H4lp1.mjs";
|
|
3
|
+
import { n as renderers_default, t as GradientMapWebGPURenderer } from "./renderer-Bk7vVfTu.mjs";
|
|
4
4
|
|
|
5
5
|
export { GradientMapWebGPURenderer, renderers_default as default };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import "./chunk-D7gtBK74.mjs";
|
|
2
2
|
import { n as defineRenderer } from "./renderer-C9r0-KY4.mjs";
|
|
3
|
-
import "./dist-
|
|
4
|
-
import { c as drawTextureToTarget, l as fragmentBindGroupLayout, o as drawChildToTexture, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL, u as perDevice } from "./gpu-
|
|
3
|
+
import "./dist-Bf0H4lp1.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-CevnCkZC.mjs";
|
|
5
5
|
|
|
6
6
|
//#region ../../nodes/node-crt/dist/renderers-RZlSUb1G.mjs
|
|
7
7
|
const OP = "CRT";
|
|
@@ -221,4 +221,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: CRTWebGPURenderer });
|
|
|
221
221
|
|
|
222
222
|
//#endregion
|
|
223
223
|
export { CRTWebGPURenderer, renderers_default as default };
|
|
224
|
-
//# sourceMappingURL=renderer-
|
|
224
|
+
//# sourceMappingURL=renderer-D0iSbNza.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-BWnFh7NO.mjs","names":[],"sources":["../../../nodes/node-crt/dist/renderers-RZlSUb1G.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst OP = \"CRT\";\nconst UNIFORM_FLOATS = 16;\n/** One fragment shader per pass; pass 0 reads the layer, later passes read the previous pass. */\nconst PASSES = [`struct U { v : array<vec4<f32>, 4> };\n@group(0) @binding(0) var<uniform> u : U;\n@group(0) @binding(1) var src : texture_2d<f32>;\n@group(0) @binding(2) var prev : texture_2d<f32>;\n@group(0) @binding(3) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn straight(c : vec4<f32>) -> vec4<f32> {\n\tif (c.a <= 0.0001) { return vec4<f32>(0.0); }\n\treturn vec4<f32>(c.rgb / c.a, c.a);\n}\nfn premul(c : vec4<f32>) -> vec4<f32> { return vec4<f32>(c.rgb * c.a, c.a); }\nfn res() -> vec2<f32> { return vec2<f32>(textureDimensions(src)); }\n/** Straight-alpha color of the layer at a uv (filtered). */\nfn sampleS(uv : vec2<f32>) -> vec4<f32> { return straight(textureSampleLevel(src, samp, uv, 0.0)); }\n/** Premultiplied color of the layer at a uv (filtered). */\nfn sampleP(uv : vec2<f32>) -> vec4<f32> { return textureSampleLevel(src, samp, uv, 0.0); }\n/** Straight-alpha color of the layer's texel at a pixel position (nearest). */\nfn texelS(p : vec2<f32>) -> vec4<f32> {\n\tlet d = vec2<i32>(textureDimensions(src));\n\tlet q = clamp(vec2<i32>(floor(p)), vec2<i32>(0), d - vec2<i32>(1));\n\treturn straight(textureLoad(src, q, 0));\n}\nfn luma(c : vec3<f32>) -> f32 { return dot(c, vec3<f32>(0.2126, 0.7152, 0.0722)); }\nfn hash12(p : vec2<f32>) -> f32 {\n\tvar p3 = fract(vec3<f32>(p.xyx) * 0.1031);\n\tp3 += dot(p3, p3.yzx + 33.33);\n\treturn fract((p3.x + p3.y) * p3.z);\n}\nfn vnoise(p : vec2<f32>) -> f32 {\n\tlet i = floor(p);\n\tlet f = fract(p);\n\tlet u = f * f * (3.0 - 2.0 * f);\n\treturn mix(mix(hash12(i), hash12(i + vec2<f32>(1.0, 0.0)), u.x),\n\t\tmix(hash12(i + vec2<f32>(0.0, 1.0)), hash12(i + vec2<f32>(1.0, 1.0)), u.x), u.y);\n}\n/** 8x8 ordered-dither threshold, 0..1. */\nfn bayer8(p : vec2<f32>) -> f32 {\n\tlet x = u32(p.x) & 7u;\n\tlet y = u32(p.y) & 7u;\n\tvar v = 0u;\n\tfor (var k = 0u; k < 3u; k++) {\n\t\tlet bx = (x >> k) & 1u;\n\t\tlet by = (y >> k) & 1u;\n\t\tlet m = ((bx ^ by) << 1u) | by;\n\t\tv += m * (1u << (2u * (2u - k)));\n\t}\n\treturn (f32(v) + 0.5) / 64.0;\n}\nfn rot2(a : f32) -> mat2x2<f32> { let c = cos(a); let s = sin(a); return mat2x2<f32>(c, s, -s, c); }\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet time = u.v[0].x;\n\tlet frame = u.v[0].y;\n\tlet scanlines = u.v[1].x;\n\tlet lineCount = u.v[1].y;\n\tlet curvature = u.v[1].z;\n\tlet mask = u.v[1].w;\n\tlet vignette = u.v[2].x;\n\tlet noise = u.v[2].y;\n\tlet flicker = u.v[2].z;\n\tlet tracking = u.v[2].w;\n\tlet chroma = u.v[3].x;\n\n\tlet R = res();\n\tlet t = time;\n\tlet cc = in.uv * 2.0 - 1.0;\n\tvar uv = (cc * (1.0 + curvature * 0.25 * dot(cc, cc))) * 0.5 + 0.5;\n\tif (uv.x < 0.0 || uv.y < 0.0 || uv.x > 1.0 || uv.y > 1.0) { return vec4<f32>(0.0, 0.0, 0.0, 1.0); }\n\tlet line = floor(uv.y * lineCount);\n\tlet jitter = (hash12(vec2<f32>(line, floor(t * 30.0))) - 0.5) * tracking * 0.006;\n\tlet bandY = fract(t * 0.13);\n\tlet band = smoothstep(0.07, 0.0, abs(uv.y - bandY)) * tracking;\n\tuv.x += jitter + band * 0.015 * sin(uv.y * 400.0 + t * 20.0);\n\tlet base = sampleS(uv);\n\tvar rgb = base.rgb;\n\tif (chroma > 0.0) {\n\t\tlet off = chroma / R.x;\n\t\tlet avg = (sampleS(uv - vec2<f32>(off, 0.0)).rgb + base.rgb + sampleS(uv + vec2<f32>(off * 2.0, 0.0)).rgb) / 3.0;\n\t\tlet y = luma(base.rgb);\n\t\trgb = vec3<f32>(y) + (avg - vec3<f32>(luma(avg)));\n\t}\n\tlet sl = 0.5 + 0.5 * cos(uv.y * lineCount * 6.2831853);\n\trgb *= 1.0 - scanlines * (1.0 - sl) * 0.7;\n\tlet tri = u32(floor(in.uv.x * R.x)) % 3u;\n\tvar m = vec3<f32>(0.75);\n\tif (tri == 0u) { m.r = 1.25; } else if (tri == 1u) { m.g = 1.25; } else { m.b = 1.25; }\n\trgb *= mix(vec3<f32>(1.0), m, mask);\n\trgb += (hash12(in.uv * R + vec2<f32>(t * 61.0, t * 17.0)) - 0.5) * noise * 0.3;\n\trgb *= 1.0 - flicker * hash12(vec2<f32>(floor(t * 24.0), 3.0));\n\trgb *= 1.0 - vignette * dot(cc, cc) * 0.35;\n\trgb += band * 0.12;\n\treturn vec4<f32>(clamp(rgb, vec3<f32>(0.0), vec3<f32>(1.0)), 1.0);\n}\n`];\nconst resources = perDevice((device) => ({\n\tlayout: fragmentBindGroupLayout(device, [\n\t\t\"uniform\",\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"sampler\"\n\t], `${OP}_layout`),\n\tpipelines: /* @__PURE__ */ new Map(),\n\tsampler: device.createSampler({\n\t\tmagFilter: \"linear\",\n\t\tminFilter: \"linear\",\n\t\taddressModeU: \"clamp-to-edge\",\n\t\taddressModeV: \"clamp-to-edge\"\n\t})\n}));\nfunction pipelinesFor(device, format) {\n\tconst r = resources(device);\n\tlet list = r.pipelines.get(format);\n\tif (!list) {\n\t\tlist = PASSES.map((code, i) => {\n\t\t\tconst module = device.createShaderModule({\n\t\t\t\tcode,\n\t\t\t\tlabel: `${OP}_${i}.wgsl`\n\t\t\t});\n\t\t\treturn device.createRenderPipeline({\n\t\t\t\tlabel: `${OP}_${i}`,\n\t\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [r.layout] }),\n\t\t\t\tvertex: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"vs\"\n\t\t\t\t},\n\t\t\t\tfragment: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"fs\",\n\t\t\t\t\ttargets: [{ format }]\n\t\t\t\t},\n\t\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t\t});\n\t\t});\n\t\tr.pipelines.set(format, list);\n\t}\n\treturn list;\n}\nfunction num(v, fallback) {\n\tconst n = typeof v === \"number\" ? v : Number(v);\n\treturn Number.isFinite(n) ? n : fallback;\n}\n/** Packs the effect's resolved props into the uniform block the shaders read. */\nfunction pack(raw, data, time, frame) {\n\tdata.fill(0);\n\tdata[0] = time;\n\tdata[1] = frame;\n\tdata[4] = num(raw.scanlines, .45);\n\tdata[5] = num(raw.lineCount, 540);\n\tdata[6] = num(raw.curvature, .12);\n\tdata[7] = num(raw.mask, .25);\n\tdata[8] = num(raw.vignette, .35);\n\tdata[9] = num(raw.noise, .08);\n\tdata[10] = num(raw.flicker, .03);\n\tdata[11] = num(raw.tracking, 0);\n\tdata[12] = num(raw.chroma, 0);\n}\nconst CRTWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== OP) return;\n\tconst child = props.virtualMedia?.children?.[0];\n\tif (!child) return;\n\tpass.end();\n\tconst fps = props.fps || 30;\n\tconst frame = Math.round(props.compositionFrame ?? props.frame ?? 0);\n\tconst raw = op.effect?.resolveUniforms ? op.effect.resolveUniforms({\n\t\tframe,\n\t\tfps,\n\t\ttime: frame / fps\n\t}) : op;\n\tconst data = new Float32Array(UNIFORM_FLOATS);\n\tpack(raw, data, frame / fps, frame);\n\tconst { texture: childTex } = await drawChildToTexture(args, child);\n\tconst device = ctx.device;\n\tconst r = resources(device);\n\tconst pipelines = pipelinesFor(device, ctx.renderer.format);\n\tconst ubo = ctx.renderer.getTemporaryBuffer(data);\n\tlet prev = childTex;\n\tfor (const pipeline of pipelines) {\n\t\tconst out = ctx.renderer.getTemporaryTexture(targetWidth, targetHeight, [\n\t\t\tchildTex,\n\t\t\tprev,\n\t\t\ttargetTexture,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tdrawFullscreenPass(encoder, out.createView(), pipeline, [device.createBindGroup({\n\t\t\tlayout: r.layout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: ubo }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: childTex.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: prev.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: r.sampler\n\t\t\t\t}\n\t\t\t]\n\t\t})]);\n\t\tprev = out;\n\t}\n\tdrawTextureToTarget(args, prev);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: CRTWebGPURenderer });\n\n//#endregion\nexport { CRTWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-RZlSUb1G.mjs.map"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"renderer-D0iSbNza.mjs","names":[],"sources":["../../../nodes/node-crt/dist/renderers-RZlSUb1G.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice } from \"@framefields/node-sdk/gpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst OP = \"CRT\";\nconst UNIFORM_FLOATS = 16;\n/** One fragment shader per pass; pass 0 reads the layer, later passes read the previous pass. */\nconst PASSES = [`struct U { v : array<vec4<f32>, 4> };\n@group(0) @binding(0) var<uniform> u : U;\n@group(0) @binding(1) var src : texture_2d<f32>;\n@group(0) @binding(2) var prev : texture_2d<f32>;\n@group(0) @binding(3) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn straight(c : vec4<f32>) -> vec4<f32> {\n\tif (c.a <= 0.0001) { return vec4<f32>(0.0); }\n\treturn vec4<f32>(c.rgb / c.a, c.a);\n}\nfn premul(c : vec4<f32>) -> vec4<f32> { return vec4<f32>(c.rgb * c.a, c.a); }\nfn res() -> vec2<f32> { return vec2<f32>(textureDimensions(src)); }\n/** Straight-alpha color of the layer at a uv (filtered). */\nfn sampleS(uv : vec2<f32>) -> vec4<f32> { return straight(textureSampleLevel(src, samp, uv, 0.0)); }\n/** Premultiplied color of the layer at a uv (filtered). */\nfn sampleP(uv : vec2<f32>) -> vec4<f32> { return textureSampleLevel(src, samp, uv, 0.0); }\n/** Straight-alpha color of the layer's texel at a pixel position (nearest). */\nfn texelS(p : vec2<f32>) -> vec4<f32> {\n\tlet d = vec2<i32>(textureDimensions(src));\n\tlet q = clamp(vec2<i32>(floor(p)), vec2<i32>(0), d - vec2<i32>(1));\n\treturn straight(textureLoad(src, q, 0));\n}\nfn luma(c : vec3<f32>) -> f32 { return dot(c, vec3<f32>(0.2126, 0.7152, 0.0722)); }\nfn hash12(p : vec2<f32>) -> f32 {\n\tvar p3 = fract(vec3<f32>(p.xyx) * 0.1031);\n\tp3 += dot(p3, p3.yzx + 33.33);\n\treturn fract((p3.x + p3.y) * p3.z);\n}\nfn vnoise(p : vec2<f32>) -> f32 {\n\tlet i = floor(p);\n\tlet f = fract(p);\n\tlet u = f * f * (3.0 - 2.0 * f);\n\treturn mix(mix(hash12(i), hash12(i + vec2<f32>(1.0, 0.0)), u.x),\n\t\tmix(hash12(i + vec2<f32>(0.0, 1.0)), hash12(i + vec2<f32>(1.0, 1.0)), u.x), u.y);\n}\n/** 8x8 ordered-dither threshold, 0..1. */\nfn bayer8(p : vec2<f32>) -> f32 {\n\tlet x = u32(p.x) & 7u;\n\tlet y = u32(p.y) & 7u;\n\tvar v = 0u;\n\tfor (var k = 0u; k < 3u; k++) {\n\t\tlet bx = (x >> k) & 1u;\n\t\tlet by = (y >> k) & 1u;\n\t\tlet m = ((bx ^ by) << 1u) | by;\n\t\tv += m * (1u << (2u * (2u - k)));\n\t}\n\treturn (f32(v) + 0.5) / 64.0;\n}\nfn rot2(a : f32) -> mat2x2<f32> { let c = cos(a); let s = sin(a); return mat2x2<f32>(c, s, -s, c); }\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet time = u.v[0].x;\n\tlet frame = u.v[0].y;\n\tlet scanlines = u.v[1].x;\n\tlet lineCount = u.v[1].y;\n\tlet curvature = u.v[1].z;\n\tlet mask = u.v[1].w;\n\tlet vignette = u.v[2].x;\n\tlet noise = u.v[2].y;\n\tlet flicker = u.v[2].z;\n\tlet tracking = u.v[2].w;\n\tlet chroma = u.v[3].x;\n\n\tlet R = res();\n\tlet t = time;\n\tlet cc = in.uv * 2.0 - 1.0;\n\tvar uv = (cc * (1.0 + curvature * 0.25 * dot(cc, cc))) * 0.5 + 0.5;\n\tif (uv.x < 0.0 || uv.y < 0.0 || uv.x > 1.0 || uv.y > 1.0) { return vec4<f32>(0.0, 0.0, 0.0, 1.0); }\n\tlet line = floor(uv.y * lineCount);\n\tlet jitter = (hash12(vec2<f32>(line, floor(t * 30.0))) - 0.5) * tracking * 0.006;\n\tlet bandY = fract(t * 0.13);\n\tlet band = smoothstep(0.07, 0.0, abs(uv.y - bandY)) * tracking;\n\tuv.x += jitter + band * 0.015 * sin(uv.y * 400.0 + t * 20.0);\n\tlet base = sampleS(uv);\n\tvar rgb = base.rgb;\n\tif (chroma > 0.0) {\n\t\tlet off = chroma / R.x;\n\t\tlet avg = (sampleS(uv - vec2<f32>(off, 0.0)).rgb + base.rgb + sampleS(uv + vec2<f32>(off * 2.0, 0.0)).rgb) / 3.0;\n\t\tlet y = luma(base.rgb);\n\t\trgb = vec3<f32>(y) + (avg - vec3<f32>(luma(avg)));\n\t}\n\tlet sl = 0.5 + 0.5 * cos(uv.y * lineCount * 6.2831853);\n\trgb *= 1.0 - scanlines * (1.0 - sl) * 0.7;\n\tlet tri = u32(floor(in.uv.x * R.x)) % 3u;\n\tvar m = vec3<f32>(0.75);\n\tif (tri == 0u) { m.r = 1.25; } else if (tri == 1u) { m.g = 1.25; } else { m.b = 1.25; }\n\trgb *= mix(vec3<f32>(1.0), m, mask);\n\trgb += (hash12(in.uv * R + vec2<f32>(t * 61.0, t * 17.0)) - 0.5) * noise * 0.3;\n\trgb *= 1.0 - flicker * hash12(vec2<f32>(floor(t * 24.0), 3.0));\n\trgb *= 1.0 - vignette * dot(cc, cc) * 0.35;\n\trgb += band * 0.12;\n\treturn vec4<f32>(clamp(rgb, vec3<f32>(0.0), vec3<f32>(1.0)), 1.0);\n}\n`];\nconst resources = perDevice((device) => ({\n\tlayout: fragmentBindGroupLayout(device, [\n\t\t\"uniform\",\n\t\t\"texture\",\n\t\t\"texture\",\n\t\t\"sampler\"\n\t], `${OP}_layout`),\n\tpipelines: /* @__PURE__ */ new Map(),\n\tsampler: device.createSampler({\n\t\tmagFilter: \"linear\",\n\t\tminFilter: \"linear\",\n\t\taddressModeU: \"clamp-to-edge\",\n\t\taddressModeV: \"clamp-to-edge\"\n\t})\n}));\nfunction pipelinesFor(device, format) {\n\tconst r = resources(device);\n\tlet list = r.pipelines.get(format);\n\tif (!list) {\n\t\tlist = PASSES.map((code, i) => {\n\t\t\tconst module = device.createShaderModule({\n\t\t\t\tcode,\n\t\t\t\tlabel: `${OP}_${i}.wgsl`\n\t\t\t});\n\t\t\treturn device.createRenderPipeline({\n\t\t\t\tlabel: `${OP}_${i}`,\n\t\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [r.layout] }),\n\t\t\t\tvertex: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"vs\"\n\t\t\t\t},\n\t\t\t\tfragment: {\n\t\t\t\t\tmodule,\n\t\t\t\t\tentryPoint: \"fs\",\n\t\t\t\t\ttargets: [{ format }]\n\t\t\t\t},\n\t\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t\t});\n\t\t});\n\t\tr.pipelines.set(format, list);\n\t}\n\treturn list;\n}\nfunction num(v, fallback) {\n\tconst n = typeof v === \"number\" ? v : Number(v);\n\treturn Number.isFinite(n) ? n : fallback;\n}\n/** Packs the effect's resolved props into the uniform block the shaders read. */\nfunction pack(raw, data, time, frame) {\n\tdata.fill(0);\n\tdata[0] = time;\n\tdata[1] = frame;\n\tdata[4] = num(raw.scanlines, .45);\n\tdata[5] = num(raw.lineCount, 540);\n\tdata[6] = num(raw.curvature, .12);\n\tdata[7] = num(raw.mask, .25);\n\tdata[8] = num(raw.vignette, .35);\n\tdata[9] = num(raw.noise, .08);\n\tdata[10] = num(raw.flicker, .03);\n\tdata[11] = num(raw.tracking, 0);\n\tdata[12] = num(raw.chroma, 0);\n}\nconst CRTWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== OP) return;\n\tconst child = props.virtualMedia?.children?.[0];\n\tif (!child) return;\n\tpass.end();\n\tconst fps = props.fps || 30;\n\tconst frame = Math.round(props.compositionFrame ?? props.frame ?? 0);\n\tconst raw = op.effect?.resolveUniforms ? op.effect.resolveUniforms({\n\t\tframe,\n\t\tfps,\n\t\ttime: frame / fps\n\t}) : op;\n\tconst data = new Float32Array(UNIFORM_FLOATS);\n\tpack(raw, data, frame / fps, frame);\n\tconst { texture: childTex } = await drawChildToTexture(args, child);\n\tconst device = ctx.device;\n\tconst r = resources(device);\n\tconst pipelines = pipelinesFor(device, ctx.renderer.format);\n\tconst ubo = ctx.renderer.getTemporaryBuffer(data);\n\tlet prev = childTex;\n\tfor (const pipeline of pipelines) {\n\t\tconst out = ctx.renderer.getTemporaryTexture(targetWidth, targetHeight, [\n\t\t\tchildTex,\n\t\t\tprev,\n\t\t\ttargetTexture,\n\t\t\t...props.excludeTextures || []\n\t\t]);\n\t\tdrawFullscreenPass(encoder, out.createView(), pipeline, [device.createBindGroup({\n\t\t\tlayout: r.layout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: { buffer: ubo }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: childTex.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: prev.createView()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: r.sampler\n\t\t\t\t}\n\t\t\t]\n\t\t})]);\n\t\tprev = out;\n\t}\n\tdrawTextureToTarget(args, prev);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: CRTWebGPURenderer });\n\n//#endregion\nexport { CRTWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-RZlSUb1G.mjs.map"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { a as resolveFrameNumber, n as defineRenderer } from "./renderer-C9r0-KY4.mjs";
|
|
2
|
-
import { Fn as signalRegistry, K as parseColor } from "./dist-
|
|
3
|
-
import { a as createFullscreenPipeline, c as drawTextureToTarget, l as fragmentBindGroupLayout, o as drawChildToTexture, p as texturesLayout, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL, u as perDevice } from "./gpu-
|
|
2
|
+
import { Fn as signalRegistry, K as parseColor } from "./dist-Bf0H4lp1.mjs";
|
|
3
|
+
import { a as createFullscreenPipeline, c as drawTextureToTarget, l as fragmentBindGroupLayout, o as drawChildToTexture, p as texturesLayout, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL, u as perDevice } from "./gpu-CevnCkZC.mjs";
|
|
4
4
|
|
|
5
5
|
//#region ../../nodes/node-relight-3d/dist/renderers-CXgKN5yn.mjs
|
|
6
6
|
const RELIGHT_SHADER = `
|
|
@@ -448,4 +448,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: Relight3DWebGPURenderer
|
|
|
448
448
|
|
|
449
449
|
//#endregion
|
|
450
450
|
export { renderers_default as t };
|
|
451
|
-
//# sourceMappingURL=renderer-
|
|
451
|
+
//# sourceMappingURL=renderer-D22g6ION.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-DHqicGgT.mjs","names":[],"sources":["../../../nodes/node-relight-3d/dist/renderers-CXgKN5yn.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { resolveFrameNumber } from \"@framefields/node-sdk\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice, texturesLayout } from \"@framefields/node-sdk/gpu\";\nimport { parseColor, signalRegistry } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst RELIGHT_SHADER = `\nstruct RelightUniforms {\n // vec4 0\n lightType : f32, // 0=Point, 1=Spot, 2=Directional, 3=Rim\n intensity : f32,\n lightPosX : f32,\n lightPosY : f32,\n\n // vec4 1\n lightPosZ : f32,\n lightRadius : f32,\n spotConeAngle : f32, // in radians\n specularRoughness : f32,\n\n // vec4 2\n specularStrength : f32,\n metallic : f32,\n ambientIntensity : f32,\n volumetricDensity : f32,\n\n // vec4 3\n depthScale : f32,\n depthInvert : f32,\n hasDepthMap : f32,\n hasNormalMap : f32,\n\n // vec4 4: signal flags\n hasSigIntensity : f32,\n hasSigPosX : f32,\n hasSigPosY : f32,\n hasSigPosZ : f32,\n\n // vec4 5: signal flags\n hasSigRadius : f32,\n hasSigRoughness : f32,\n hasSigSpecular : f32,\n hasSigVolumetric : f32,\n\n // vec4 6 & 7: colors\n lightColor : vec4<f32>,\n ambientColor : vec4<f32>,\n};\n\n@group(0) @binding(0) var<uniform> u : RelightUniforms;\n\n@group(1) @binding(0) var srcTex : texture_2d<f32>;\n@group(1) @binding(1) var srcSamp : sampler;\n\n@group(2) @binding(0) var depthTex : texture_2d<f32>;\n@group(2) @binding(1) var depthSamp : sampler;\n\n@group(3) @binding(0) var intensitySigTex : texture_2d<f32>;\n@group(3) @binding(1) var posXSigTex : texture_2d<f32>;\n@group(3) @binding(2) var posYSigTex : texture_2d<f32>;\n@group(3) @binding(3) var posZSigTex : texture_2d<f32>;\n@group(3) @binding(4) var radiusSigTex : texture_2d<f32>;\n@group(3) @binding(5) var roughnessSigTex : texture_2d<f32>;\n@group(3) @binding(6) var specularSigTex : texture_2d<f32>;\n@group(3) @binding(7) var volumetricSigTex : texture_2d<f32>;\n@group(3) @binding(8) var sigSamp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn sampleDepth(uv: vec2<f32>) -> f32 {\n var raw: f32 = 0.0;\n if (u.hasDepthMap > 0.5) {\n let dSample = textureSampleLevel(depthTex, depthSamp, clamp(uv, vec2<f32>(0.0), vec2<f32>(1.0)), 0.0);\n raw = dot(dSample.rgb, vec3<f32>(0.299, 0.587, 0.114));\n } else {\n let c = textureSampleLevel(srcTex, srcSamp, clamp(uv, vec2<f32>(0.0), vec2<f32>(1.0)), 0.0);\n raw = dot(c.rgb, vec3<f32>(0.299, 0.587, 0.114));\n }\n if (u.depthInvert > 0.5) {\n raw = 1.0 - raw;\n }\n return raw;\n}\n\nfn sampleSmoothDepth(uv: vec2<f32>, texelSize: vec2<f32>) -> f32 {\n let d0 = sampleDepth(uv);\n let d1 = sampleDepth(uv + vec2<f32>(texelSize.x, 0.0));\n let d2 = sampleDepth(uv - vec2<f32>(texelSize.x, 0.0));\n let d3 = sampleDepth(uv + vec2<f32>(0.0, texelSize.y));\n let d4 = sampleDepth(uv - vec2<f32>(0.0, texelSize.y));\n return (d0 * 4.0 + d1 + d2 + d3 + d4) * 0.125;\n}\n\nfn computeNormal(uv: vec2<f32>, texelSize: vec2<f32>) -> vec3<f32> {\n if (u.hasNormalMap > 0.5) {\n let rawNormal = textureSampleLevel(depthTex, depthSamp, clamp(uv, vec2<f32>(0.0), vec2<f32>(1.0)), 0.0).rgb;\n return normalize(rawNormal * 2.0 - 1.0);\n }\n let step = texelSize * 2.5;\n let dL = sampleSmoothDepth(uv - vec2<f32>(step.x, 0.0), texelSize);\n let dR = sampleSmoothDepth(uv + vec2<f32>(step.x, 0.0), texelSize);\n let dD = sampleSmoothDepth(uv - vec2<f32>(0.0, step.y), texelSize);\n let dU = sampleSmoothDepth(uv + vec2<f32>(0.0, step.y), texelSize);\n\n let dx = (dR - dL) * u.depthScale * 1.5;\n let dy = (dU - dD) * u.depthScale * 1.5;\n return normalize(vec3<f32>(-dx, -dy, 1.0));\n}\n\n@fragment fn fs(in: VSOut) -> @location(0) vec4<f32> {\n let albedo = textureSampleLevel(srcTex, srcSamp, in.uv, 0.0);\n if (albedo.a <= 0.0) {\n return albedo;\n }\n\n let dims = vec2<f32>(textureDimensions(srcTex));\n let texelSize = vec2<f32>(1.0 / dims.x, 1.0 / dims.y);\n let aspect = dims.x / dims.y;\n\n // Resolve signals\n var intensity = u.intensity;\n if (u.hasSigIntensity > 0.5) {\n intensity = textureSampleLevel(intensitySigTex, sigSamp, in.uv, 0.0).r;\n }\n\n var posX = u.lightPosX;\n if (u.hasSigPosX > 0.5) {\n posX = textureSampleLevel(posXSigTex, sigSamp, in.uv, 0.0).r;\n }\n\n var posY = u.lightPosY;\n if (u.hasSigPosY > 0.5) {\n posY = textureSampleLevel(posYSigTex, sigSamp, in.uv, 0.0).r;\n }\n\n var posZ = u.lightPosZ;\n if (u.hasSigPosZ > 0.5) {\n posZ = textureSampleLevel(posZSigTex, sigSamp, in.uv, 0.0).r;\n }\n\n var radius = u.lightRadius;\n if (u.hasSigRadius > 0.5) {\n radius = max(0.05, textureSampleLevel(radiusSigTex, sigSamp, in.uv, 0.0).r);\n }\n\n var roughness = u.specularRoughness;\n if (u.hasSigRoughness > 0.5) {\n roughness = clamp(textureSampleLevel(roughnessSigTex, sigSamp, in.uv, 0.0).r, 0.01, 1.0);\n }\n\n var specularStrength = u.specularStrength;\n if (u.hasSigSpecular > 0.5) {\n specularStrength = max(0.0, textureSampleLevel(specularSigTex, sigSamp, in.uv, 0.0).r);\n }\n\n var volumetricDensity = u.volumetricDensity;\n if (u.hasSigVolumetric > 0.5) {\n volumetricDensity = clamp(textureSampleLevel(volumetricSigTex, sigSamp, in.uv, 0.0).r, 0.0, 1.0);\n }\n\n // Geometry & Surface Normals\n let depth = sampleSmoothDepth(in.uv, texelSize) * u.depthScale;\n let N = computeNormal(in.uv, texelSize);\n let V = vec3<f32>(0.0, 0.0, 1.0);\n\n // 3D coordinates (Aspect corrected for uniform radius)\n let pSurface = vec3<f32>((in.uv.x - 0.5) * aspect, in.uv.y - 0.5, - (1.0 - depth) * 0.4);\n let pLight = vec3<f32>((posX - 0.5) * aspect, posY - 0.5, max(0.02, posZ));\n\n let toLight = pLight - pSurface;\n let dist3D = length(toLight);\n var L = normalize(toLight);\n\n // Attenuation\n var att = 1.0 / (1.0 + (dist3D / max(0.05, radius)) * (dist3D / max(0.05, radius)));\n var diffuse = max(dot(N, L), 0.0);\n let H = normalize(L + V);\n let NdotH = max(dot(N, H), 0.0);\n let specPower = max(2.0, 2.0 / (roughness * roughness) - 2.0);\n var specular = pow(NdotH, specPower) * specularStrength;\n\n let lightMode = u.lightType;\n\n if (lightMode > 0.5 && lightMode < 1.5) {\n // Spot Light\n let spotDir = normalize(vec3<f32>(0.0, 0.0, -1.0));\n let spotAngleCos = dot(-L, spotDir);\n let coneCos = cos(u.spotConeAngle);\n let spotAtt = smoothstep(coneCos, coneCos + 0.15, spotAngleCos);\n\n diffuse = diffuse * spotAtt;\n specular = specular * spotAtt;\n } else if (lightMode > 1.5 && lightMode < 2.5) {\n // Directional Light\n L = normalize(vec3<f32>(posX - 0.5, posY - 0.5, max(0.1, posZ)));\n att = 1.0;\n diffuse = max(dot(N, L), 0.0);\n let dirH = normalize(L + V);\n specular = pow(max(dot(N, dirH), 0.0), specPower) * specularStrength;\n } else if (lightMode > 2.5) {\n // Rim Light\n let rimTerm = 1.0 - max(dot(N, V), 0.0);\n let rim = pow(rimTerm, 2.5) * (0.5 + depth * 0.8) * 1.5;\n diffuse = max(dot(N, L), 0.0) * 0.2 + rim;\n }\n\n // Volumetric Atmospheric Light Scatter / Glow\n let dist2D = length(vec2<f32>((in.uv.x - posX) * aspect, in.uv.y - posY));\n let volGlow = volumetricDensity * (1.0 / (1.0 + (dist2D / (radius * 0.5)) * (dist2D / (radius * 0.5)))) * (1.0 - clamp(depth * 0.3, 0.0, 0.8));\n\n let lightCol = u.lightColor.rgb;\n let ambientCol = u.ambientColor.rgb;\n\n // Natural Relighting Energy Distribution\n let ambientLighting = ambientCol * clamp(u.ambientIntensity, 0.0, 1.5);\n let diffuseLighting = lightCol * (diffuse * att * intensity * 0.6);\n let specularLighting = mix(vec3<f32>(1.0), albedo.rgb, u.metallic) * (specular * att * intensity * 0.35);\n let volLighting = lightCol * (volGlow * intensity * 0.2);\n\n let litRgb = albedo.rgb * (ambientLighting + diffuseLighting) + specularLighting + volLighting;\n\n return vec4<f32>(clamp(litRgb, vec3<f32>(0.0), vec3<f32>(1.0)), albedo.a);\n}\n`;\nconst getDeviceLayouts = perDevice((device) => ({\n\tuniformLayout: fragmentBindGroupLayout(device, [\"uniform\"]),\n\tsrcTextureLayout: fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]),\n\tdepthTextureLayout: fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]),\n\tsignalTextureLayout: texturesLayout(device, 8),\n\tpipelineCache: /* @__PURE__ */ new Map()\n}));\nfunction getRelightResources(device, format) {\n\tconst layouts = getDeviceLayouts(device);\n\tconst cacheKey = `relight_${format}`;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst module = device.createShaderModule({\n\t\t\tlabel: `relight_${format}.wgsl`,\n\t\t\tcode: RELIGHT_SHADER\n\t\t});\n\t\tpipeline = createFullscreenPipeline(device, {\n\t\t\tlabel: `RelightPipeline_${format}`,\n\t\t\tmodule,\n\t\t\tlayouts: [\n\t\t\t\tlayouts.uniformLayout,\n\t\t\t\tlayouts.srcTextureLayout,\n\t\t\t\tlayouts.depthTextureLayout,\n\t\t\t\tlayouts.signalTextureLayout\n\t\t\t],\n\t\t\tformat\n\t\t});\n\t\tlayouts.pipelineCache.set(cacheKey, pipeline);\n\t}\n\treturn {\n\t\tpipeline,\n\t\tuniformLayout: layouts.uniformLayout,\n\t\tsrcTextureLayout: layouts.srcTextureLayout,\n\t\tdepthTextureLayout: layouts.depthTextureLayout,\n\t\tsignalTextureLayout: layouts.signalTextureLayout\n\t};\n}\nfunction resolveSignalField(op, fieldName, defaultValue, minVal, maxVal, frame = 0, fps = 30) {\n\tconst handleId = op[`${fieldName}HandleId`];\n\tconst signalInput = handleId ? op.inputs?.[handleId] : null;\n\tconst hasSignal = !!(signalInput?.connectionValid && (signalInput.outputItem?.type === \"Signal\" || signalInput.outputItem?.type === \"Numeric\"));\n\tconst sd = hasSignal && signalInput?.outputItem?.data ? signalInput.outputItem.data : null;\n\tlet value = defaultValue;\n\tif (!hasSignal) if (signalInput?.connectionValid && signalInput.outputItem?.type === \"Number\") {\n\t\tconst raw = resolveFrameNumber(signalInput.outputItem.data, defaultValue, frame, fps);\n\t\tvalue = Math.max(minVal, Math.min(maxVal, raw));\n\t} else {\n\t\tconst raw = resolveFrameNumber(op[fieldName], defaultValue, frame, fps);\n\t\tvalue = Math.max(minVal, Math.min(maxVal, raw));\n\t}\n\telse if (sd) {\n\t\tconst raw = resolveFrameNumber(sd.offset, defaultValue, frame, fps);\n\t\tvalue = Math.max(minVal, Math.min(maxVal, raw));\n\t}\n\treturn {\n\t\thasSignal,\n\t\tsd,\n\t\tvalue\n\t};\n}\nconst Relight3DWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst frame = props.frame ?? 0;\n\tconst compositionFrame = props.compositionFrame ?? frame;\n\tconst fps = props.fps || 30;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"Relight3D\" || !op) return;\n\tconst sourceMedia = props.virtualMedia.children?.[0];\n\tif (!sourceMedia) return;\n\tpass.end();\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst { texture: srcTex } = await drawChildToTexture(args, sourceMedia, { props: {\n\t\t...props,\n\t\tvirtualMedia: sourceMedia,\n\t\tcontainerWidth: width,\n\t\tcontainerHeight: height\n\t} });\n\targs.pass.end();\n\tconst normalMedia = op.normalMedia ?? (op.inputs?.normalMap?.connectionValid ? op.inputs.normalMap.outputItem?.data : null);\n\tconst depthMedia = normalMedia ?? op.depthMedia;\n\tlet depthTex;\n\tlet hasDepthMap = false;\n\tconst hasNormalMap = Boolean(normalMedia);\n\tif (depthMedia) {\n\t\t({texture: depthTex} = await drawChildToTexture(args, depthMedia, {\n\t\t\tprops: {\n\t\t\t\t...props,\n\t\t\t\tvirtualMedia: depthMedia,\n\t\t\t\tcontainerWidth: width,\n\t\t\t\tcontainerHeight: height\n\t\t\t},\n\t\t\texclude: [srcTex]\n\t\t}));\n\t\targs.pass.end();\n\t\thasDepthMap = true;\n\t} else {\n\t\tdepthTex = srcTex;\n\t\thasDepthMap = false;\n\t}\n\tconst { pipeline, uniformLayout: uLayout, srcTextureLayout: srcLayout, depthTextureLayout: depthLayout, signalTextureLayout: sigLayout } = getRelightResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst elapsedSeconds = props.elapsedMs !== void 0 ? props.elapsedMs / 1e3 : compositionFrame / fps;\n\tconst durationSeconds = props.virtualMedia?.metadata?.durationMs ? props.virtualMedia.metadata.durationMs / 1e3 : props.durationMs !== void 0 ? props.durationMs / 1e3 : 4;\n\tconst intensityInfo = resolveSignalField(op, \"intensity\", 1, 0, 10, compositionFrame, fps);\n\tconst posXInfo = resolveSignalField(op, \"lightPosX\", .5, 0, 1, compositionFrame, fps);\n\tconst posYInfo = resolveSignalField(op, \"lightPosY\", .5, 0, 1, compositionFrame, fps);\n\tconst posZInfo = resolveSignalField(op, \"lightPosZ\", .3, -2, 2, compositionFrame, fps);\n\tconst radiusInfo = resolveSignalField(op, \"lightRadius\", .8, .05, 5, compositionFrame, fps);\n\tconst spotConeInfo = resolveSignalField(op, \"spotConeAngle\", 45, 5, 90, compositionFrame, fps);\n\tconst roughnessInfo = resolveSignalField(op, \"specularRoughness\", .35, .01, 1, compositionFrame, fps);\n\tconst specularInfo = resolveSignalField(op, \"specularStrength\", .7, 0, 3, compositionFrame, fps);\n\tconst metallicInfo = resolveSignalField(op, \"metallic\", 0, 0, 1, compositionFrame, fps);\n\tconst ambientInfo = resolveSignalField(op, \"ambientIntensity\", .4, 0, 2, compositionFrame, fps);\n\tconst volumetricInfo = resolveSignalField(op, \"volumetricDensity\", .2, 0, 1, compositionFrame, fps);\n\tconst depthScaleInfo = resolveSignalField(op, \"depthScale\", 1, .1, 10, compositionFrame, fps);\n\tconst getSigTextureView = (info, fallbackId) => {\n\t\tif (info.hasSignal && info.sd) return signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, info.sd.nodeId ?? fallbackId, elapsedSeconds, durationSeconds, info.sd, width, height, props.renderId, compositionFrame, fps);\n\t\treturn signalRegistry.getDummy1x1TextureView(ctx.device);\n\t};\n\tconst sigIntensityView = getSigTextureView(intensityInfo, \"relight_int_sig\");\n\tconst sigPosXView = getSigTextureView(posXInfo, \"relight_posx_sig\");\n\tconst sigPosYView = getSigTextureView(posYInfo, \"relight_posy_sig\");\n\tconst sigPosZView = getSigTextureView(posZInfo, \"relight_posz_sig\");\n\tconst sigRadiusView = getSigTextureView(radiusInfo, \"relight_rad_sig\");\n\tconst sigRoughnessView = getSigTextureView(roughnessInfo, \"relight_rough_sig\");\n\tconst sigSpecularView = getSigTextureView(specularInfo, \"relight_spec_sig\");\n\tconst sigVolumetricView = getSigTextureView(volumetricInfo, \"relight_vol_sig\");\n\tconst uniformData = new Float32Array(32);\n\tconst lightColorParsed = parseColor(op.lightColor ?? \"#ffffff\");\n\tconst ambientColorParsed = parseColor(op.ambientColor ?? \"#ffffff\");\n\tuniformData[0] = op.lightType === \"Spot\" ? 1 : op.lightType === \"Directional\" ? 2 : op.lightType === \"Rim\" ? 3 : 0;\n\tuniformData[1] = intensityInfo.value;\n\tuniformData[2] = posXInfo.value;\n\tuniformData[3] = posYInfo.value;\n\tuniformData[4] = posZInfo.value;\n\tuniformData[5] = radiusInfo.value;\n\tuniformData[6] = spotConeInfo.value * Math.PI / 180;\n\tuniformData[7] = roughnessInfo.value;\n\tuniformData[8] = specularInfo.value;\n\tuniformData[9] = metallicInfo.value;\n\tuniformData[10] = ambientInfo.value;\n\tuniformData[11] = volumetricInfo.value;\n\tuniformData[12] = depthScaleInfo.value;\n\tuniformData[13] = op.depthInvert ? 1 : 0;\n\tuniformData[14] = hasDepthMap || hasNormalMap ? 1 : 0;\n\tuniformData[15] = hasNormalMap ? 1 : 0;\n\tuniformData[16] = intensityInfo.hasSignal ? 1 : 0;\n\tuniformData[17] = posXInfo.hasSignal ? 1 : 0;\n\tuniformData[18] = posYInfo.hasSignal ? 1 : 0;\n\tuniformData[19] = posZInfo.hasSignal ? 1 : 0;\n\tuniformData[20] = radiusInfo.hasSignal ? 1 : 0;\n\tuniformData[21] = roughnessInfo.hasSignal ? 1 : 0;\n\tuniformData[22] = specularInfo.hasSignal ? 1 : 0;\n\tuniformData[23] = volumetricInfo.hasSignal ? 1 : 0;\n\tuniformData[24] = lightColorParsed.r;\n\tuniformData[25] = lightColorParsed.g;\n\tuniformData[26] = lightColorParsed.b;\n\tuniformData[27] = lightColorParsed.a;\n\tuniformData[28] = ambientColorParsed.r;\n\tuniformData[29] = ambientColorParsed.g;\n\tuniformData[30] = ambientColorParsed.b;\n\tuniformData[31] = ambientColorParsed.a;\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(uniformData);\n\tconst outTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\tsrcTex,\n\t\tdepthTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tdrawFullscreenPass(encoder, outTex.createView(), pipeline, [\n\t\tctx.device.createBindGroup({\n\t\t\tlayout: uLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: uniformBuffer }\n\t\t\t}]\n\t\t}),\n\t\tctx.renderer.bindGroupCache.getBindGroup(ctx.device, srcLayout, srcTex, sampler),\n\t\tctx.renderer.bindGroupCache.getBindGroup(ctx.device, depthLayout, depthTex, sampler),\n\t\tctx.device.createBindGroup({\n\t\t\tlayout: sigLayout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: sigIntensityView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: sigPosXView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: sigPosYView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: sigPosZView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 4,\n\t\t\t\t\tresource: sigRadiusView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 5,\n\t\t\t\t\tresource: sigRoughnessView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 6,\n\t\t\t\t\tresource: sigSpecularView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 7,\n\t\t\t\t\tresource: sigVolumetricView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 8,\n\t\t\t\t\tresource: sampler\n\t\t\t\t}\n\t\t\t]\n\t\t})\n\t]);\n\tdrawTextureToTarget(args, outTex, op.opacity ?? 1);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: Relight3DWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-CXgKN5yn.mjs.map"],"mappings":";;;;;AAMA,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4DrB,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6JvB,MAAM,mBAAmB,WAAW,YAAY;CAC/C,eAAe,wBAAwB,QAAQ,CAAC,UAAU,CAAC;CAC3D,kBAAkB,wBAAwB,QAAQ,CAAC,WAAW,UAAU,CAAC;CACzE,oBAAoB,wBAAwB,QAAQ,CAAC,WAAW,UAAU,CAAC;CAC3E,qBAAqB,eAAe,QAAQ,EAAE;CAC9C,+BAA+B,IAAI,KAAK;CACxC,EAAE;AACH,SAAS,oBAAoB,QAAQ,QAAQ;CAC5C,MAAM,UAAU,iBAAiB,OAAO;CACxC,MAAM,WAAW,WAAW;CAC5B,IAAI,WAAW,QAAQ,cAAc,IAAI,SAAS;AAClD,KAAI,CAAC,UAAU;EACd,MAAM,SAAS,OAAO,mBAAmB;GACxC,OAAO,WAAW,OAAO;GACzB,MAAM;GACN,CAAC;AACF,aAAW,yBAAyB,QAAQ;GAC3C,OAAO,mBAAmB;GAC1B;GACA,SAAS;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR;GACD;GACA,CAAC;AACF,UAAQ,cAAc,IAAI,UAAU,SAAS;;AAE9C,QAAO;EACN;EACA,eAAe,QAAQ;EACvB,kBAAkB,QAAQ;EAC1B,oBAAoB,QAAQ;EAC5B,qBAAqB,QAAQ;EAC7B;;AAEF,SAAS,mBAAmB,IAAI,WAAW,cAAc,QAAQ,QAAQ,QAAQ,GAAG,MAAM,IAAI;CAC7F,MAAM,WAAW,GAAG,GAAG,UAAU;CACjC,MAAM,cAAc,WAAW,GAAG,SAAS,YAAY;CACvD,MAAM,YAAY,CAAC,EAAE,aAAa,oBAAoB,YAAY,YAAY,SAAS,YAAY,YAAY,YAAY,SAAS;CACpI,MAAM,KAAK,aAAa,aAAa,YAAY,OAAO,YAAY,WAAW,OAAO;CACtF,IAAI,QAAQ;AACZ,KAAI,CAAC,UAAW,KAAI,aAAa,mBAAmB,YAAY,YAAY,SAAS,UAAU;EAC9F,MAAM,MAAM,mBAAmB,YAAY,WAAW,MAAM,cAAc,OAAO,IAAI;AACrF,UAAQ,KAAK,IAAI,QAAQ,KAAK,IAAI,QAAQ,IAAI,CAAC;QACzC;EACN,MAAM,MAAM,mBAAmB,GAAG,YAAY,cAAc,OAAO,IAAI;AACvE,UAAQ,KAAK,IAAI,QAAQ,KAAK,IAAI,QAAQ,IAAI,CAAC;;UAEvC,IAAI;EACZ,MAAM,MAAM,mBAAmB,GAAG,QAAQ,cAAc,OAAO,IAAI;AACnE,UAAQ,KAAK,IAAI,QAAQ,KAAK,IAAI,QAAQ,IAAI,CAAC;;AAEhD,QAAO;EACN;EACA;EACA;EACA;;AAEF,MAAM,0BAA0B,OAAO,SAAS;CAC/C,MAAM,EAAE,KAAK,SAAS,MAAM,eAAe,aAAa,cAAc,UAAU;CAChF,MAAM,QAAQ,MAAM,SAAS;CAC7B,MAAM,mBAAmB,MAAM,oBAAoB;CACnD,MAAM,MAAM,MAAM,OAAO;CACzB,MAAM,KAAK,MAAM,cAAc;AAC/B,KAAI,IAAI,OAAO,eAAe,CAAC,GAAI;CACnC,MAAM,cAAc,MAAM,aAAa,WAAW;AAClD,KAAI,CAAC,YAAa;AAClB,MAAK,KAAK;CACV,MAAM,QAAQ;CACd,MAAM,SAAS;CACf,MAAM,EAAE,SAAS,WAAW,MAAM,mBAAmB,MAAM,aAAa,EAAE,OAAO;EAChF,GAAG;EACH,cAAc;EACd,gBAAgB;EAChB,iBAAiB;EACjB,EAAE,CAAC;AACJ,MAAK,KAAK,KAAK;CACf,MAAM,cAAc,GAAG,gBAAgB,GAAG,QAAQ,WAAW,kBAAkB,GAAG,OAAO,UAAU,YAAY,OAAO;CACtH,MAAM,aAAa,eAAe,GAAG;CACrC,IAAI;CACJ,IAAI,cAAc;CAClB,MAAM,eAAe,QAAQ,YAAY;AACzC,KAAI,YAAY;AACf,GAAC,CAAC,SAAS,YAAY,MAAM,mBAAmB,MAAM,YAAY;GACjE,OAAO;IACN,GAAG;IACH,cAAc;IACd,gBAAgB;IAChB,iBAAiB;IACjB;GACD,SAAS,CAAC,OAAO;GACjB,CAAC;AACF,OAAK,KAAK,KAAK;AACf,gBAAc;QACR;AACN,aAAW;AACX,gBAAc;;CAEf,MAAM,EAAE,UAAU,eAAe,SAAS,kBAAkB,WAAW,oBAAoB,aAAa,qBAAqB,cAAc,oBAAoB,IAAI,QAAQ,IAAI,SAAS,OAAO;CAC/L,MAAM,UAAU,IAAI,SAAS,aAAa,WAAW,IAAI,OAAO;CAChE,MAAM,iBAAiB,MAAM,cAAc,KAAK,IAAI,MAAM,YAAY,MAAM,mBAAmB;CAC/F,MAAM,kBAAkB,MAAM,cAAc,UAAU,aAAa,MAAM,aAAa,SAAS,aAAa,MAAM,MAAM,eAAe,KAAK,IAAI,MAAM,aAAa,MAAM;CACzK,MAAM,gBAAgB,mBAAmB,IAAI,aAAa,GAAG,GAAG,IAAI,kBAAkB,IAAI;CAC1F,MAAM,WAAW,mBAAmB,IAAI,aAAa,IAAI,GAAG,GAAG,kBAAkB,IAAI;CACrF,MAAM,WAAW,mBAAmB,IAAI,aAAa,IAAI,GAAG,GAAG,kBAAkB,IAAI;CACrF,MAAM,WAAW,mBAAmB,IAAI,aAAa,IAAI,IAAI,GAAG,kBAAkB,IAAI;CACtF,MAAM,aAAa,mBAAmB,IAAI,eAAe,IAAI,KAAK,GAAG,kBAAkB,IAAI;CAC3F,MAAM,eAAe,mBAAmB,IAAI,iBAAiB,IAAI,GAAG,IAAI,kBAAkB,IAAI;CAC9F,MAAM,gBAAgB,mBAAmB,IAAI,qBAAqB,KAAK,KAAK,GAAG,kBAAkB,IAAI;CACrG,MAAM,eAAe,mBAAmB,IAAI,oBAAoB,IAAI,GAAG,GAAG,kBAAkB,IAAI;CAChG,MAAM,eAAe,mBAAmB,IAAI,YAAY,GAAG,GAAG,GAAG,kBAAkB,IAAI;CACvF,MAAM,cAAc,mBAAmB,IAAI,oBAAoB,IAAI,GAAG,GAAG,kBAAkB,IAAI;CAC/F,MAAM,iBAAiB,mBAAmB,IAAI,qBAAqB,IAAI,GAAG,GAAG,kBAAkB,IAAI;CACnG,MAAM,iBAAiB,mBAAmB,IAAI,cAAc,GAAG,IAAI,IAAI,kBAAkB,IAAI;CAC7F,MAAM,qBAAqB,MAAM,eAAe;AAC/C,MAAI,KAAK,aAAa,KAAK,GAAI,QAAO,eAAe,yBAAyB,IAAI,QAAQ,SAAS,KAAK,GAAG,UAAU,YAAY,gBAAgB,iBAAiB,KAAK,IAAI,OAAO,QAAQ,MAAM,UAAU,kBAAkB,IAAI;AAChO,SAAO,eAAe,uBAAuB,IAAI,OAAO;;CAEzD,MAAM,mBAAmB,kBAAkB,eAAe,kBAAkB;CAC5E,MAAM,cAAc,kBAAkB,UAAU,mBAAmB;CACnE,MAAM,cAAc,kBAAkB,UAAU,mBAAmB;CACnE,MAAM,cAAc,kBAAkB,UAAU,mBAAmB;CACnE,MAAM,gBAAgB,kBAAkB,YAAY,kBAAkB;CACtE,MAAM,mBAAmB,kBAAkB,eAAe,oBAAoB;CAC9E,MAAM,kBAAkB,kBAAkB,cAAc,mBAAmB;CAC3E,MAAM,oBAAoB,kBAAkB,gBAAgB,kBAAkB;CAC9E,MAAM,cAAc,IAAI,aAAa,GAAG;CACxC,MAAM,mBAAmB,WAAW,GAAG,cAAc,UAAU;CAC/D,MAAM,qBAAqB,WAAW,GAAG,gBAAgB,UAAU;AACnE,aAAY,KAAK,GAAG,cAAc,SAAS,IAAI,GAAG,cAAc,gBAAgB,IAAI,GAAG,cAAc,QAAQ,IAAI;AACjH,aAAY,KAAK,cAAc;AAC/B,aAAY,KAAK,SAAS;AAC1B,aAAY,KAAK,SAAS;AAC1B,aAAY,KAAK,SAAS;AAC1B,aAAY,KAAK,WAAW;AAC5B,aAAY,KAAK,aAAa,QAAQ,KAAK,KAAK;AAChD,aAAY,KAAK,cAAc;AAC/B,aAAY,KAAK,aAAa;AAC9B,aAAY,KAAK,aAAa;AAC9B,aAAY,MAAM,YAAY;AAC9B,aAAY,MAAM,eAAe;AACjC,aAAY,MAAM,eAAe;AACjC,aAAY,MAAM,GAAG,cAAc,IAAI;AACvC,aAAY,MAAM,eAAe,eAAe,IAAI;AACpD,aAAY,MAAM,eAAe,IAAI;AACrC,aAAY,MAAM,cAAc,YAAY,IAAI;AAChD,aAAY,MAAM,SAAS,YAAY,IAAI;AAC3C,aAAY,MAAM,SAAS,YAAY,IAAI;AAC3C,aAAY,MAAM,SAAS,YAAY,IAAI;AAC3C,aAAY,MAAM,WAAW,YAAY,IAAI;AAC7C,aAAY,MAAM,cAAc,YAAY,IAAI;AAChD,aAAY,MAAM,aAAa,YAAY,IAAI;AAC/C,aAAY,MAAM,eAAe,YAAY,IAAI;AACjD,aAAY,MAAM,iBAAiB;AACnC,aAAY,MAAM,iBAAiB;AACnC,aAAY,MAAM,iBAAiB;AACnC,aAAY,MAAM,iBAAiB;AACnC,aAAY,MAAM,mBAAmB;AACrC,aAAY,MAAM,mBAAmB;AACrC,aAAY,MAAM,mBAAmB;AACrC,aAAY,MAAM,mBAAmB;CACrC,MAAM,gBAAgB,IAAI,SAAS,mBAAmB,YAAY;CAClE,MAAM,SAAS,IAAI,SAAS,oBAAoB,OAAO,QAAQ;EAC9D;EACA;EACA;EACA,GAAG,MAAM,mBAAmB,EAAE;EAC9B,CAAC;AACF,oBAAmB,SAAS,OAAO,YAAY,EAAE,UAAU;EAC1D,IAAI,OAAO,gBAAgB;GAC1B,QAAQ;GACR,SAAS,CAAC;IACT,SAAS;IACT,UAAU,EAAE,QAAQ,eAAe;IACnC,CAAC;GACF,CAAC;EACF,IAAI,SAAS,eAAe,aAAa,IAAI,QAAQ,WAAW,QAAQ,QAAQ;EAChF,IAAI,SAAS,eAAe,aAAa,IAAI,QAAQ,aAAa,UAAU,QAAQ;EACpF,IAAI,OAAO,gBAAgB;GAC1B,QAAQ;GACR,SAAS;IACR;KACC,SAAS;KACT,UAAU;KACV;IACD;KACC,SAAS;KACT,UAAU;KACV;IACD;KACC,SAAS;KACT,UAAU;KACV;IACD;KACC,SAAS;KACT,UAAU;KACV;IACD;KACC,SAAS;KACT,UAAU;KACV;IACD;KACC,SAAS;KACT,UAAU;KACV;IACD;KACC,SAAS;KACT,UAAU;KACV;IACD;KACC,SAAS;KACT,UAAU;KACV;IACD;KACC,SAAS;KACT,UAAU;KACV;IACD;GACD,CAAC;EACF,CAAC;AACF,qBAAoB,MAAM,QAAQ,GAAG,WAAW,EAAE;;AAKnD,IAAI,oBAAoB,eAAe,EAAE,gBAAgB,yBAAyB,CAAC"}
|
|
1
|
+
{"version":3,"file":"renderer-D22g6ION.mjs","names":[],"sources":["../../../nodes/node-relight-3d/dist/renderers-CXgKN5yn.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { resolveFrameNumber } from \"@framefields/node-sdk\";\nimport { FULLSCREEN_QUAD_WGSL, createFullscreenPipeline, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice, texturesLayout } from \"@framefields/node-sdk/gpu\";\nimport { parseColor, signalRegistry } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst RELIGHT_SHADER = `\nstruct RelightUniforms {\n // vec4 0\n lightType : f32, // 0=Point, 1=Spot, 2=Directional, 3=Rim\n intensity : f32,\n lightPosX : f32,\n lightPosY : f32,\n\n // vec4 1\n lightPosZ : f32,\n lightRadius : f32,\n spotConeAngle : f32, // in radians\n specularRoughness : f32,\n\n // vec4 2\n specularStrength : f32,\n metallic : f32,\n ambientIntensity : f32,\n volumetricDensity : f32,\n\n // vec4 3\n depthScale : f32,\n depthInvert : f32,\n hasDepthMap : f32,\n hasNormalMap : f32,\n\n // vec4 4: signal flags\n hasSigIntensity : f32,\n hasSigPosX : f32,\n hasSigPosY : f32,\n hasSigPosZ : f32,\n\n // vec4 5: signal flags\n hasSigRadius : f32,\n hasSigRoughness : f32,\n hasSigSpecular : f32,\n hasSigVolumetric : f32,\n\n // vec4 6 & 7: colors\n lightColor : vec4<f32>,\n ambientColor : vec4<f32>,\n};\n\n@group(0) @binding(0) var<uniform> u : RelightUniforms;\n\n@group(1) @binding(0) var srcTex : texture_2d<f32>;\n@group(1) @binding(1) var srcSamp : sampler;\n\n@group(2) @binding(0) var depthTex : texture_2d<f32>;\n@group(2) @binding(1) var depthSamp : sampler;\n\n@group(3) @binding(0) var intensitySigTex : texture_2d<f32>;\n@group(3) @binding(1) var posXSigTex : texture_2d<f32>;\n@group(3) @binding(2) var posYSigTex : texture_2d<f32>;\n@group(3) @binding(3) var posZSigTex : texture_2d<f32>;\n@group(3) @binding(4) var radiusSigTex : texture_2d<f32>;\n@group(3) @binding(5) var roughnessSigTex : texture_2d<f32>;\n@group(3) @binding(6) var specularSigTex : texture_2d<f32>;\n@group(3) @binding(7) var volumetricSigTex : texture_2d<f32>;\n@group(3) @binding(8) var sigSamp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\nfn sampleDepth(uv: vec2<f32>) -> f32 {\n var raw: f32 = 0.0;\n if (u.hasDepthMap > 0.5) {\n let dSample = textureSampleLevel(depthTex, depthSamp, clamp(uv, vec2<f32>(0.0), vec2<f32>(1.0)), 0.0);\n raw = dot(dSample.rgb, vec3<f32>(0.299, 0.587, 0.114));\n } else {\n let c = textureSampleLevel(srcTex, srcSamp, clamp(uv, vec2<f32>(0.0), vec2<f32>(1.0)), 0.0);\n raw = dot(c.rgb, vec3<f32>(0.299, 0.587, 0.114));\n }\n if (u.depthInvert > 0.5) {\n raw = 1.0 - raw;\n }\n return raw;\n}\n\nfn sampleSmoothDepth(uv: vec2<f32>, texelSize: vec2<f32>) -> f32 {\n let d0 = sampleDepth(uv);\n let d1 = sampleDepth(uv + vec2<f32>(texelSize.x, 0.0));\n let d2 = sampleDepth(uv - vec2<f32>(texelSize.x, 0.0));\n let d3 = sampleDepth(uv + vec2<f32>(0.0, texelSize.y));\n let d4 = sampleDepth(uv - vec2<f32>(0.0, texelSize.y));\n return (d0 * 4.0 + d1 + d2 + d3 + d4) * 0.125;\n}\n\nfn computeNormal(uv: vec2<f32>, texelSize: vec2<f32>) -> vec3<f32> {\n if (u.hasNormalMap > 0.5) {\n let rawNormal = textureSampleLevel(depthTex, depthSamp, clamp(uv, vec2<f32>(0.0), vec2<f32>(1.0)), 0.0).rgb;\n return normalize(rawNormal * 2.0 - 1.0);\n }\n let step = texelSize * 2.5;\n let dL = sampleSmoothDepth(uv - vec2<f32>(step.x, 0.0), texelSize);\n let dR = sampleSmoothDepth(uv + vec2<f32>(step.x, 0.0), texelSize);\n let dD = sampleSmoothDepth(uv - vec2<f32>(0.0, step.y), texelSize);\n let dU = sampleSmoothDepth(uv + vec2<f32>(0.0, step.y), texelSize);\n\n let dx = (dR - dL) * u.depthScale * 1.5;\n let dy = (dU - dD) * u.depthScale * 1.5;\n return normalize(vec3<f32>(-dx, -dy, 1.0));\n}\n\n@fragment fn fs(in: VSOut) -> @location(0) vec4<f32> {\n let albedo = textureSampleLevel(srcTex, srcSamp, in.uv, 0.0);\n if (albedo.a <= 0.0) {\n return albedo;\n }\n\n let dims = vec2<f32>(textureDimensions(srcTex));\n let texelSize = vec2<f32>(1.0 / dims.x, 1.0 / dims.y);\n let aspect = dims.x / dims.y;\n\n // Resolve signals\n var intensity = u.intensity;\n if (u.hasSigIntensity > 0.5) {\n intensity = textureSampleLevel(intensitySigTex, sigSamp, in.uv, 0.0).r;\n }\n\n var posX = u.lightPosX;\n if (u.hasSigPosX > 0.5) {\n posX = textureSampleLevel(posXSigTex, sigSamp, in.uv, 0.0).r;\n }\n\n var posY = u.lightPosY;\n if (u.hasSigPosY > 0.5) {\n posY = textureSampleLevel(posYSigTex, sigSamp, in.uv, 0.0).r;\n }\n\n var posZ = u.lightPosZ;\n if (u.hasSigPosZ > 0.5) {\n posZ = textureSampleLevel(posZSigTex, sigSamp, in.uv, 0.0).r;\n }\n\n var radius = u.lightRadius;\n if (u.hasSigRadius > 0.5) {\n radius = max(0.05, textureSampleLevel(radiusSigTex, sigSamp, in.uv, 0.0).r);\n }\n\n var roughness = u.specularRoughness;\n if (u.hasSigRoughness > 0.5) {\n roughness = clamp(textureSampleLevel(roughnessSigTex, sigSamp, in.uv, 0.0).r, 0.01, 1.0);\n }\n\n var specularStrength = u.specularStrength;\n if (u.hasSigSpecular > 0.5) {\n specularStrength = max(0.0, textureSampleLevel(specularSigTex, sigSamp, in.uv, 0.0).r);\n }\n\n var volumetricDensity = u.volumetricDensity;\n if (u.hasSigVolumetric > 0.5) {\n volumetricDensity = clamp(textureSampleLevel(volumetricSigTex, sigSamp, in.uv, 0.0).r, 0.0, 1.0);\n }\n\n // Geometry & Surface Normals\n let depth = sampleSmoothDepth(in.uv, texelSize) * u.depthScale;\n let N = computeNormal(in.uv, texelSize);\n let V = vec3<f32>(0.0, 0.0, 1.0);\n\n // 3D coordinates (Aspect corrected for uniform radius)\n let pSurface = vec3<f32>((in.uv.x - 0.5) * aspect, in.uv.y - 0.5, - (1.0 - depth) * 0.4);\n let pLight = vec3<f32>((posX - 0.5) * aspect, posY - 0.5, max(0.02, posZ));\n\n let toLight = pLight - pSurface;\n let dist3D = length(toLight);\n var L = normalize(toLight);\n\n // Attenuation\n var att = 1.0 / (1.0 + (dist3D / max(0.05, radius)) * (dist3D / max(0.05, radius)));\n var diffuse = max(dot(N, L), 0.0);\n let H = normalize(L + V);\n let NdotH = max(dot(N, H), 0.0);\n let specPower = max(2.0, 2.0 / (roughness * roughness) - 2.0);\n var specular = pow(NdotH, specPower) * specularStrength;\n\n let lightMode = u.lightType;\n\n if (lightMode > 0.5 && lightMode < 1.5) {\n // Spot Light\n let spotDir = normalize(vec3<f32>(0.0, 0.0, -1.0));\n let spotAngleCos = dot(-L, spotDir);\n let coneCos = cos(u.spotConeAngle);\n let spotAtt = smoothstep(coneCos, coneCos + 0.15, spotAngleCos);\n\n diffuse = diffuse * spotAtt;\n specular = specular * spotAtt;\n } else if (lightMode > 1.5 && lightMode < 2.5) {\n // Directional Light\n L = normalize(vec3<f32>(posX - 0.5, posY - 0.5, max(0.1, posZ)));\n att = 1.0;\n diffuse = max(dot(N, L), 0.0);\n let dirH = normalize(L + V);\n specular = pow(max(dot(N, dirH), 0.0), specPower) * specularStrength;\n } else if (lightMode > 2.5) {\n // Rim Light\n let rimTerm = 1.0 - max(dot(N, V), 0.0);\n let rim = pow(rimTerm, 2.5) * (0.5 + depth * 0.8) * 1.5;\n diffuse = max(dot(N, L), 0.0) * 0.2 + rim;\n }\n\n // Volumetric Atmospheric Light Scatter / Glow\n let dist2D = length(vec2<f32>((in.uv.x - posX) * aspect, in.uv.y - posY));\n let volGlow = volumetricDensity * (1.0 / (1.0 + (dist2D / (radius * 0.5)) * (dist2D / (radius * 0.5)))) * (1.0 - clamp(depth * 0.3, 0.0, 0.8));\n\n let lightCol = u.lightColor.rgb;\n let ambientCol = u.ambientColor.rgb;\n\n // Natural Relighting Energy Distribution\n let ambientLighting = ambientCol * clamp(u.ambientIntensity, 0.0, 1.5);\n let diffuseLighting = lightCol * (diffuse * att * intensity * 0.6);\n let specularLighting = mix(vec3<f32>(1.0), albedo.rgb, u.metallic) * (specular * att * intensity * 0.35);\n let volLighting = lightCol * (volGlow * intensity * 0.2);\n\n let litRgb = albedo.rgb * (ambientLighting + diffuseLighting) + specularLighting + volLighting;\n\n return vec4<f32>(clamp(litRgb, vec3<f32>(0.0), vec3<f32>(1.0)), albedo.a);\n}\n`;\nconst getDeviceLayouts = perDevice((device) => ({\n\tuniformLayout: fragmentBindGroupLayout(device, [\"uniform\"]),\n\tsrcTextureLayout: fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]),\n\tdepthTextureLayout: fragmentBindGroupLayout(device, [\"texture\", \"sampler\"]),\n\tsignalTextureLayout: texturesLayout(device, 8),\n\tpipelineCache: /* @__PURE__ */ new Map()\n}));\nfunction getRelightResources(device, format) {\n\tconst layouts = getDeviceLayouts(device);\n\tconst cacheKey = `relight_${format}`;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst module = device.createShaderModule({\n\t\t\tlabel: `relight_${format}.wgsl`,\n\t\t\tcode: RELIGHT_SHADER\n\t\t});\n\t\tpipeline = createFullscreenPipeline(device, {\n\t\t\tlabel: `RelightPipeline_${format}`,\n\t\t\tmodule,\n\t\t\tlayouts: [\n\t\t\t\tlayouts.uniformLayout,\n\t\t\t\tlayouts.srcTextureLayout,\n\t\t\t\tlayouts.depthTextureLayout,\n\t\t\t\tlayouts.signalTextureLayout\n\t\t\t],\n\t\t\tformat\n\t\t});\n\t\tlayouts.pipelineCache.set(cacheKey, pipeline);\n\t}\n\treturn {\n\t\tpipeline,\n\t\tuniformLayout: layouts.uniformLayout,\n\t\tsrcTextureLayout: layouts.srcTextureLayout,\n\t\tdepthTextureLayout: layouts.depthTextureLayout,\n\t\tsignalTextureLayout: layouts.signalTextureLayout\n\t};\n}\nfunction resolveSignalField(op, fieldName, defaultValue, minVal, maxVal, frame = 0, fps = 30) {\n\tconst handleId = op[`${fieldName}HandleId`];\n\tconst signalInput = handleId ? op.inputs?.[handleId] : null;\n\tconst hasSignal = !!(signalInput?.connectionValid && (signalInput.outputItem?.type === \"Signal\" || signalInput.outputItem?.type === \"Numeric\"));\n\tconst sd = hasSignal && signalInput?.outputItem?.data ? signalInput.outputItem.data : null;\n\tlet value = defaultValue;\n\tif (!hasSignal) if (signalInput?.connectionValid && signalInput.outputItem?.type === \"Number\") {\n\t\tconst raw = resolveFrameNumber(signalInput.outputItem.data, defaultValue, frame, fps);\n\t\tvalue = Math.max(minVal, Math.min(maxVal, raw));\n\t} else {\n\t\tconst raw = resolveFrameNumber(op[fieldName], defaultValue, frame, fps);\n\t\tvalue = Math.max(minVal, Math.min(maxVal, raw));\n\t}\n\telse if (sd) {\n\t\tconst raw = resolveFrameNumber(sd.offset, defaultValue, frame, fps);\n\t\tvalue = Math.max(minVal, Math.min(maxVal, raw));\n\t}\n\treturn {\n\t\thasSignal,\n\t\tsd,\n\t\tvalue\n\t};\n}\nconst Relight3DWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetTexture, targetWidth, targetHeight, props } = args;\n\tconst frame = props.frame ?? 0;\n\tconst compositionFrame = props.compositionFrame ?? frame;\n\tconst fps = props.fps || 30;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"Relight3D\" || !op) return;\n\tconst sourceMedia = props.virtualMedia.children?.[0];\n\tif (!sourceMedia) return;\n\tpass.end();\n\tconst width = targetWidth;\n\tconst height = targetHeight;\n\tconst { texture: srcTex } = await drawChildToTexture(args, sourceMedia, { props: {\n\t\t...props,\n\t\tvirtualMedia: sourceMedia,\n\t\tcontainerWidth: width,\n\t\tcontainerHeight: height\n\t} });\n\targs.pass.end();\n\tconst normalMedia = op.normalMedia ?? (op.inputs?.normalMap?.connectionValid ? op.inputs.normalMap.outputItem?.data : null);\n\tconst depthMedia = normalMedia ?? op.depthMedia;\n\tlet depthTex;\n\tlet hasDepthMap = false;\n\tconst hasNormalMap = Boolean(normalMedia);\n\tif (depthMedia) {\n\t\t({texture: depthTex} = await drawChildToTexture(args, depthMedia, {\n\t\t\tprops: {\n\t\t\t\t...props,\n\t\t\t\tvirtualMedia: depthMedia,\n\t\t\t\tcontainerWidth: width,\n\t\t\t\tcontainerHeight: height\n\t\t\t},\n\t\t\texclude: [srcTex]\n\t\t}));\n\t\targs.pass.end();\n\t\thasDepthMap = true;\n\t} else {\n\t\tdepthTex = srcTex;\n\t\thasDepthMap = false;\n\t}\n\tconst { pipeline, uniformLayout: uLayout, srcTextureLayout: srcLayout, depthTextureLayout: depthLayout, signalTextureLayout: sigLayout } = getRelightResources(ctx.device, ctx.renderer.format);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst elapsedSeconds = props.elapsedMs !== void 0 ? props.elapsedMs / 1e3 : compositionFrame / fps;\n\tconst durationSeconds = props.virtualMedia?.metadata?.durationMs ? props.virtualMedia.metadata.durationMs / 1e3 : props.durationMs !== void 0 ? props.durationMs / 1e3 : 4;\n\tconst intensityInfo = resolveSignalField(op, \"intensity\", 1, 0, 10, compositionFrame, fps);\n\tconst posXInfo = resolveSignalField(op, \"lightPosX\", .5, 0, 1, compositionFrame, fps);\n\tconst posYInfo = resolveSignalField(op, \"lightPosY\", .5, 0, 1, compositionFrame, fps);\n\tconst posZInfo = resolveSignalField(op, \"lightPosZ\", .3, -2, 2, compositionFrame, fps);\n\tconst radiusInfo = resolveSignalField(op, \"lightRadius\", .8, .05, 5, compositionFrame, fps);\n\tconst spotConeInfo = resolveSignalField(op, \"spotConeAngle\", 45, 5, 90, compositionFrame, fps);\n\tconst roughnessInfo = resolveSignalField(op, \"specularRoughness\", .35, .01, 1, compositionFrame, fps);\n\tconst specularInfo = resolveSignalField(op, \"specularStrength\", .7, 0, 3, compositionFrame, fps);\n\tconst metallicInfo = resolveSignalField(op, \"metallic\", 0, 0, 1, compositionFrame, fps);\n\tconst ambientInfo = resolveSignalField(op, \"ambientIntensity\", .4, 0, 2, compositionFrame, fps);\n\tconst volumetricInfo = resolveSignalField(op, \"volumetricDensity\", .2, 0, 1, compositionFrame, fps);\n\tconst depthScaleInfo = resolveSignalField(op, \"depthScale\", 1, .1, 10, compositionFrame, fps);\n\tconst getSigTextureView = (info, fallbackId) => {\n\t\tif (info.hasSignal && info.sd) return signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, info.sd.nodeId ?? fallbackId, elapsedSeconds, durationSeconds, info.sd, width, height, props.renderId, compositionFrame, fps);\n\t\treturn signalRegistry.getDummy1x1TextureView(ctx.device);\n\t};\n\tconst sigIntensityView = getSigTextureView(intensityInfo, \"relight_int_sig\");\n\tconst sigPosXView = getSigTextureView(posXInfo, \"relight_posx_sig\");\n\tconst sigPosYView = getSigTextureView(posYInfo, \"relight_posy_sig\");\n\tconst sigPosZView = getSigTextureView(posZInfo, \"relight_posz_sig\");\n\tconst sigRadiusView = getSigTextureView(radiusInfo, \"relight_rad_sig\");\n\tconst sigRoughnessView = getSigTextureView(roughnessInfo, \"relight_rough_sig\");\n\tconst sigSpecularView = getSigTextureView(specularInfo, \"relight_spec_sig\");\n\tconst sigVolumetricView = getSigTextureView(volumetricInfo, \"relight_vol_sig\");\n\tconst uniformData = new Float32Array(32);\n\tconst lightColorParsed = parseColor(op.lightColor ?? \"#ffffff\");\n\tconst ambientColorParsed = parseColor(op.ambientColor ?? \"#ffffff\");\n\tuniformData[0] = op.lightType === \"Spot\" ? 1 : op.lightType === \"Directional\" ? 2 : op.lightType === \"Rim\" ? 3 : 0;\n\tuniformData[1] = intensityInfo.value;\n\tuniformData[2] = posXInfo.value;\n\tuniformData[3] = posYInfo.value;\n\tuniformData[4] = posZInfo.value;\n\tuniformData[5] = radiusInfo.value;\n\tuniformData[6] = spotConeInfo.value * Math.PI / 180;\n\tuniformData[7] = roughnessInfo.value;\n\tuniformData[8] = specularInfo.value;\n\tuniformData[9] = metallicInfo.value;\n\tuniformData[10] = ambientInfo.value;\n\tuniformData[11] = volumetricInfo.value;\n\tuniformData[12] = depthScaleInfo.value;\n\tuniformData[13] = op.depthInvert ? 1 : 0;\n\tuniformData[14] = hasDepthMap || hasNormalMap ? 1 : 0;\n\tuniformData[15] = hasNormalMap ? 1 : 0;\n\tuniformData[16] = intensityInfo.hasSignal ? 1 : 0;\n\tuniformData[17] = posXInfo.hasSignal ? 1 : 0;\n\tuniformData[18] = posYInfo.hasSignal ? 1 : 0;\n\tuniformData[19] = posZInfo.hasSignal ? 1 : 0;\n\tuniformData[20] = radiusInfo.hasSignal ? 1 : 0;\n\tuniformData[21] = roughnessInfo.hasSignal ? 1 : 0;\n\tuniformData[22] = specularInfo.hasSignal ? 1 : 0;\n\tuniformData[23] = volumetricInfo.hasSignal ? 1 : 0;\n\tuniformData[24] = lightColorParsed.r;\n\tuniformData[25] = lightColorParsed.g;\n\tuniformData[26] = lightColorParsed.b;\n\tuniformData[27] = lightColorParsed.a;\n\tuniformData[28] = ambientColorParsed.r;\n\tuniformData[29] = ambientColorParsed.g;\n\tuniformData[30] = ambientColorParsed.b;\n\tuniformData[31] = ambientColorParsed.a;\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(uniformData);\n\tconst outTex = ctx.renderer.getTemporaryTexture(width, height, [\n\t\tsrcTex,\n\t\tdepthTex,\n\t\ttargetTexture,\n\t\t...props.excludeTextures || []\n\t]);\n\tdrawFullscreenPass(encoder, outTex.createView(), pipeline, [\n\t\tctx.device.createBindGroup({\n\t\t\tlayout: uLayout,\n\t\t\tentries: [{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: uniformBuffer }\n\t\t\t}]\n\t\t}),\n\t\tctx.renderer.bindGroupCache.getBindGroup(ctx.device, srcLayout, srcTex, sampler),\n\t\tctx.renderer.bindGroupCache.getBindGroup(ctx.device, depthLayout, depthTex, sampler),\n\t\tctx.device.createBindGroup({\n\t\t\tlayout: sigLayout,\n\t\t\tentries: [\n\t\t\t\t{\n\t\t\t\t\tbinding: 0,\n\t\t\t\t\tresource: sigIntensityView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 1,\n\t\t\t\t\tresource: sigPosXView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 2,\n\t\t\t\t\tresource: sigPosYView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 3,\n\t\t\t\t\tresource: sigPosZView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 4,\n\t\t\t\t\tresource: sigRadiusView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 5,\n\t\t\t\t\tresource: sigRoughnessView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 6,\n\t\t\t\t\tresource: sigSpecularView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 7,\n\t\t\t\t\tresource: sigVolumetricView\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tbinding: 8,\n\t\t\t\t\tresource: sampler\n\t\t\t\t}\n\t\t\t]\n\t\t})\n\t]);\n\tdrawTextureToTarget(args, outTex, op.opacity ?? 1);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: Relight3DWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-CXgKN5yn.mjs.map"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import "./chunk-D7gtBK74.mjs";
|
|
2
2
|
import { n as defineRenderer } from "./renderer-C9r0-KY4.mjs";
|
|
3
|
-
import "./dist-
|
|
4
|
-
import { c as drawTextureToTarget, l as fragmentBindGroupLayout, o as drawChildToTexture, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL, u as perDevice } from "./gpu-
|
|
3
|
+
import "./dist-Bf0H4lp1.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-CevnCkZC.mjs";
|
|
5
5
|
import { i as OpticalFlowComputePipeline } from "./dist-C_SMBmHr.mjs";
|
|
6
6
|
|
|
7
7
|
//#region ../../nodes/node-datamosh/dist/renderers-D-M1-_H_.mjs
|
|
@@ -205,4 +205,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: DatamoshWebGPURenderer
|
|
|
205
205
|
|
|
206
206
|
//#endregion
|
|
207
207
|
export { DatamoshWebGPURenderer, renderers_default as default };
|
|
208
|
-
//# sourceMappingURL=renderer-
|
|
208
|
+
//# sourceMappingURL=renderer-DPVEs5ME.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-Cjs1OeBu.mjs","names":[],"sources":["../../../nodes/node-datamosh/dist/renderers-D-M1-_H_.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice } from \"@framefields/node-sdk/gpu\";\nimport { OpticalFlowComputePipeline } from \"@framefields/tensor-webgpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst HISTORY_FORMAT = \"rgba16float\";\nconst MOSH_WGSL = `\nstruct U { a : vec4<f32>, b : vec4<f32> };\n@group(0) @binding(0) var<uniform> u : U;\n@group(0) @binding(1) var moshTex : texture_2d<f32>;\n@group(0) @binding(2) var currentTex : texture_2d<f32>;\n@group(0) @binding(3) var flowTex : texture_2d<f32>;\n@group(0) @binding(4) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet strength = u.a.x;\n\tlet bleed = u.a.y;\n\tlet inv = u.a.zw;\n\tlet cur0 = textureSampleLevel(currentTex, samp, in.uv, 0.0);\n\tif (u.b.x > 0.5) { return cur0; }\n\tlet dims = vec2<f32>(textureDimensions(flowTex));\n\tlet coord = vec2<i32>(clamp(in.uv * dims, vec2<f32>(0.0), dims - 1.0));\n\tlet flow = textureLoad(flowTex, coord, 0).xy;\n\tlet cur = textureSampleLevel(currentTex, samp, in.uv, 0.0);\n\t// The old picture moves with the new motion instead of being replaced.\n\tlet moved = textureSampleLevel(moshTex, samp, clamp(in.uv - flow * inv * strength, vec2<f32>(0.0), vec2<f32>(1.0)), 0.0);\n\tvar out = mix(moved, cur, bleed);\n\tif (moved.a < 0.01) { out = cur; }\n\treturn out;\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\"texture\",\n\t\t\"sampler\"\n\t], \"datamosh_layout\");\n\tconst module = device.createShaderModule({\n\t\tcode: MOSH_WGSL,\n\t\tlabel: \"datamosh.wgsl\"\n\t});\n\treturn {\n\t\tlayout,\n\t\tpipeline: device.createRenderPipeline({\n\t\t\tlabel: \"datamosh\",\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\tflow: new OpticalFlowComputePipeline(device),\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, format) {\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\th?.prev?.destroy();\n\tconst make = (label, fmt) => device.createTexture({\n\t\tlabel,\n\t\tsize: [width, height],\n\t\tformat: fmt,\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(\"feedback_front\", HISTORY_FORMAT),\n\t\tback: make(\"feedback_back\", HISTORY_FORMAT),\n\t\tprev: make(\"feedback_prev\", format),\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: [\n\t\t\th.front,\n\t\t\th.back,\n\t\t\t...h.prev ? [h.prev] : []\n\t\t],\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 stepDatamosh(args, h, v, frame, compositionStart, key) {\n\tconst cur = await childAt(args, frame, compositionStart, h);\n\tif (!cur || !h.prev) return;\n\tconst r = resources(args.ctx.device);\n\tconst { encoder } = args;\n\tconst clean = key || h.frame < 0;\n\tconst flow = clean ? cur.texture : r.flow.execute(h.prev, cur.texture, {}, encoder);\n\tconst uniforms = new Float32Array([\n\t\tv.strength,\n\t\tv.bleed,\n\t\t1 / h.width,\n\t\t1 / h.height,\n\t\tclean ? 1 : 0,\n\t\t0,\n\t\t0,\n\t\t0\n\t]);\n\tdrawFullscreenPass(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: flow.createView()\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 4,\n\t\t\t\tresource: r.sampler\n\t\t\t}\n\t\t]\n\t})]);\n\tencoder.copyTextureToTexture({ texture: cur.texture }, { texture: h.prev }, [\n\t\th.width,\n\t\th.height,\n\t\t1\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 DatamoshWebGPURenderer = async (args) => {\n\tconst { ctx, pass, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"Datamosh\" || !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, ctx.renderer.format);\n\t{\n\t\tconst v = {\n\t\t\tkeyframes: Array.isArray(raw.keyframes) ? raw.keyframes.map(Math.round) : [],\n\t\t\tstrength: num(raw.strength, 1),\n\t\t\tbleed: Math.min(1, Math.max(0, num(raw.bleed, 0))),\n\t\t\twarmup: Math.max(1, Math.round(num(raw.warmup, 48)))\n\t\t};\n\t\tif (h.frame !== local) {\n\t\t\tlet start = local;\n\t\t\tif (h.frame !== local - 1) {\n\t\t\t\tconst lastKey = Math.max(0, ...v.keyframes.filter((k) => k <= local));\n\t\t\t\tstart = Math.max(lastKey, local - v.warmup);\n\t\t\t\th.frame = -1;\n\t\t\t}\n\t\t\tfor (let f = start; f <= local; f++) await stepDatamosh(args, h, v, f, compositionStart, f === 0 || v.keyframes.includes(f) || 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: DatamoshWebGPURenderer });\n\n//#endregion\nexport { DatamoshWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-D-M1-_H_.mjs.map"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"renderer-DPVEs5ME.mjs","names":[],"sources":["../../../nodes/node-datamosh/dist/renderers-D-M1-_H_.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { FULLSCREEN_QUAD_WGSL, drawChildToTexture, drawFullscreenPass, drawTextureToTarget, fragmentBindGroupLayout, perDevice } from \"@framefields/node-sdk/gpu\";\nimport { OpticalFlowComputePipeline } from \"@framefields/tensor-webgpu\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst HISTORY_FORMAT = \"rgba16float\";\nconst MOSH_WGSL = `\nstruct U { a : vec4<f32>, b : vec4<f32> };\n@group(0) @binding(0) var<uniform> u : U;\n@group(0) @binding(1) var moshTex : texture_2d<f32>;\n@group(0) @binding(2) var currentTex : texture_2d<f32>;\n@group(0) @binding(3) var flowTex : texture_2d<f32>;\n@group(0) @binding(4) var samp : sampler;\n${FULLSCREEN_QUAD_WGSL}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n\tlet strength = u.a.x;\n\tlet bleed = u.a.y;\n\tlet inv = u.a.zw;\n\tlet cur0 = textureSampleLevel(currentTex, samp, in.uv, 0.0);\n\tif (u.b.x > 0.5) { return cur0; }\n\tlet dims = vec2<f32>(textureDimensions(flowTex));\n\tlet coord = vec2<i32>(clamp(in.uv * dims, vec2<f32>(0.0), dims - 1.0));\n\tlet flow = textureLoad(flowTex, coord, 0).xy;\n\tlet cur = textureSampleLevel(currentTex, samp, in.uv, 0.0);\n\t// The old picture moves with the new motion instead of being replaced.\n\tlet moved = textureSampleLevel(moshTex, samp, clamp(in.uv - flow * inv * strength, vec2<f32>(0.0), vec2<f32>(1.0)), 0.0);\n\tvar out = mix(moved, cur, bleed);\n\tif (moved.a < 0.01) { out = cur; }\n\treturn out;\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\"texture\",\n\t\t\"sampler\"\n\t], \"datamosh_layout\");\n\tconst module = device.createShaderModule({\n\t\tcode: MOSH_WGSL,\n\t\tlabel: \"datamosh.wgsl\"\n\t});\n\treturn {\n\t\tlayout,\n\t\tpipeline: device.createRenderPipeline({\n\t\t\tlabel: \"datamosh\",\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\tflow: new OpticalFlowComputePipeline(device),\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, format) {\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\th?.prev?.destroy();\n\tconst make = (label, fmt) => device.createTexture({\n\t\tlabel,\n\t\tsize: [width, height],\n\t\tformat: fmt,\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(\"feedback_front\", HISTORY_FORMAT),\n\t\tback: make(\"feedback_back\", HISTORY_FORMAT),\n\t\tprev: make(\"feedback_prev\", format),\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: [\n\t\t\th.front,\n\t\t\th.back,\n\t\t\t...h.prev ? [h.prev] : []\n\t\t],\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 stepDatamosh(args, h, v, frame, compositionStart, key) {\n\tconst cur = await childAt(args, frame, compositionStart, h);\n\tif (!cur || !h.prev) return;\n\tconst r = resources(args.ctx.device);\n\tconst { encoder } = args;\n\tconst clean = key || h.frame < 0;\n\tconst flow = clean ? cur.texture : r.flow.execute(h.prev, cur.texture, {}, encoder);\n\tconst uniforms = new Float32Array([\n\t\tv.strength,\n\t\tv.bleed,\n\t\t1 / h.width,\n\t\t1 / h.height,\n\t\tclean ? 1 : 0,\n\t\t0,\n\t\t0,\n\t\t0\n\t]);\n\tdrawFullscreenPass(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: flow.createView()\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 4,\n\t\t\t\tresource: r.sampler\n\t\t\t}\n\t\t]\n\t})]);\n\tencoder.copyTextureToTexture({ texture: cur.texture }, { texture: h.prev }, [\n\t\th.width,\n\t\th.height,\n\t\t1\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 DatamoshWebGPURenderer = async (args) => {\n\tconst { ctx, pass, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"Datamosh\" || !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, ctx.renderer.format);\n\t{\n\t\tconst v = {\n\t\t\tkeyframes: Array.isArray(raw.keyframes) ? raw.keyframes.map(Math.round) : [],\n\t\t\tstrength: num(raw.strength, 1),\n\t\t\tbleed: Math.min(1, Math.max(0, num(raw.bleed, 0))),\n\t\t\twarmup: Math.max(1, Math.round(num(raw.warmup, 48)))\n\t\t};\n\t\tif (h.frame !== local) {\n\t\t\tlet start = local;\n\t\t\tif (h.frame !== local - 1) {\n\t\t\t\tconst lastKey = Math.max(0, ...v.keyframes.filter((k) => k <= local));\n\t\t\t\tstart = Math.max(lastKey, local - v.warmup);\n\t\t\t\th.frame = -1;\n\t\t\t}\n\t\t\tfor (let f = start; f <= local; f++) await stepDatamosh(args, h, v, f, compositionStart, f === 0 || v.keyframes.includes(f) || 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: DatamoshWebGPURenderer });\n\n//#endregion\nexport { DatamoshWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-D-M1-_H_.mjs.map"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import "./chunk-D7gtBK74.mjs";
|
|
2
|
-
import "./dist-
|
|
3
|
-
import { n as renderers_default, t as ColorBalanceWebGPURenderer } from "./renderer-
|
|
2
|
+
import "./dist-Bf0H4lp1.mjs";
|
|
3
|
+
import { n as renderers_default, t as ColorBalanceWebGPURenderer } from "./renderer-CJ2-jEy7.mjs";
|
|
4
4
|
|
|
5
5
|
export { ColorBalanceWebGPURenderer, renderers_default as default };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { n as defineRenderer } from "./renderer-C9r0-KY4.mjs";
|
|
2
|
-
import { Fn as signalRegistry } from "./dist-
|
|
3
|
-
import { a as createFullscreenPipeline, c as drawTextureToTarget, f as signalTiming, l as fragmentBindGroupLayout, o as drawChildToTexture, p as texturesLayout, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL, u as perDevice } from "./gpu-
|
|
2
|
+
import { Fn as signalRegistry } from "./dist-Bf0H4lp1.mjs";
|
|
3
|
+
import { a as createFullscreenPipeline, c as drawTextureToTarget, f as signalTiming, l as fragmentBindGroupLayout, o as drawChildToTexture, p as texturesLayout, s as drawFullscreenPass, t as FULLSCREEN_QUAD_WGSL, u as perDevice } from "./gpu-CevnCkZC.mjs";
|
|
4
4
|
|
|
5
5
|
//#region ../../nodes/node-modulate/dist/renderers-B9q42xr2.mjs
|
|
6
6
|
function resolveVal(val, fallback, frame, fps) {
|
|
@@ -370,4 +370,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: ModulateWebGPURenderer
|
|
|
370
370
|
|
|
371
371
|
//#endregion
|
|
372
372
|
export { renderers_default as t };
|
|
373
|
-
//# sourceMappingURL=renderer-
|
|
373
|
+
//# sourceMappingURL=renderer-DTXAa2pL.mjs.map
|