framefields 2.2.0 → 2.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -2
- package/dist/audio/index.d.mts +4 -4
- package/dist/audio/index.mjs +10 -10
- package/dist/{audio-BvYmTu5T.d.mts → audio-BNnEclHU.d.mts} +3 -3
- package/dist/{audio-BvYmTu5T.d.mts.map → audio-BNnEclHU.d.mts.map} +1 -1
- package/dist/{audio-DMUr01vS.mjs → audio-CS104aUj.mjs} +3 -3
- package/dist/{audio-DMUr01vS.mjs.map → audio-CS104aUj.mjs.map} +1 -1
- package/dist/{dist-CT___nEU.mjs → dist-BOdxAhOT.mjs} +7 -5
- package/dist/dist-BOdxAhOT.mjs.map +1 -0
- package/dist/{dist-cjxDXQdx.mjs → dist-jU289ehm.mjs} +209 -31
- package/dist/{dist-cjxDXQdx.mjs.map → dist-jU289ehm.mjs.map} +1 -1
- package/dist/effects/index.d.mts +5 -5
- package/dist/effects/index.mjs +36 -36
- package/dist/{effects-C06-AOge.mjs → effects-BzOlVD-w.mjs} +532 -4
- package/dist/effects-BzOlVD-w.mjs.map +1 -0
- package/dist/fonts/index.d.mts +1 -1
- package/dist/fonts/index.mjs +2 -2
- package/dist/{fonts-C0UuLQvr.mjs → fonts-BhlV_3Qt.mjs} +2 -2
- package/dist/{fonts-C0UuLQvr.mjs.map → fonts-BhlV_3Qt.mjs.map} +1 -1
- package/dist/{gpu-Du7GpVFW.mjs → gpu-BA1Wz_mS.mjs} +2 -2
- package/dist/{gpu-Du7GpVFW.mjs.map → gpu-BA1Wz_mS.mjs.map} +1 -1
- package/dist/{index-B-oUlLoO.d.mts → index-AdrZIWT0.d.mts} +27 -2
- package/dist/index-AdrZIWT0.d.mts.map +1 -0
- package/dist/{index-BcA8rep0.d.mts → index-B-55dXDu.d.mts} +1 -1
- package/dist/{index-BcA8rep0.d.mts.map → index-B-55dXDu.d.mts.map} +1 -1
- package/dist/{index-D-Iek5sq.d.mts → index-B3BwLHa6.d.mts} +3 -3
- package/dist/{index-D-Iek5sq.d.mts.map → index-B3BwLHa6.d.mts.map} +1 -1
- package/dist/{index-CwbszPDG.d.mts → index-BU51pxZO.d.mts} +956 -9
- package/dist/index-BU51pxZO.d.mts.map +1 -0
- package/dist/{index-XdQPNJnq.d.mts → index-CeRv1KC0.d.mts} +3 -3
- package/dist/{index-XdQPNJnq.d.mts.map → index-CeRv1KC0.d.mts.map} +1 -1
- package/dist/{index-DXfp_T-3.d.mts → index-Cg2ptXcs.d.mts} +2 -2
- package/dist/{index-DXfp_T-3.d.mts.map → index-Cg2ptXcs.d.mts.map} +1 -1
- package/dist/{index-CdyE1tst.d.mts → index-QmkcUL3W.d.mts} +2 -2
- package/dist/{index-CdyE1tst.d.mts.map → index-QmkcUL3W.d.mts.map} +1 -1
- package/dist/index.d.mts +1383 -11
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +3122 -83
- package/dist/index.mjs.map +1 -1
- package/dist/preview/index.d.mts +2 -2
- package/dist/preview/index.mjs +10 -10
- package/dist/{preview-M0TsUzC6.mjs → preview-BVyG76gO.mjs} +2 -2
- package/dist/{preview-M0TsUzC6.mjs.map → preview-BVyG76gO.mjs.map} +1 -1
- package/dist/preview-engine/audio.mjs +1 -1
- package/dist/preview-engine/chunk-2JKXYG6J.mjs +127 -0
- package/dist/preview-engine/chunk-7I7PKKDL.mjs +214 -0
- package/dist/preview-engine/chunk-BQY4BUMN.mjs +1 -0
- package/dist/preview-engine/{chunk-RSMO7NPN.mjs → chunk-BSOJR4JU.mjs} +1 -1
- package/dist/preview-engine/chunk-BVA5NGSH.mjs +1 -0
- package/dist/preview-engine/{chunk-ZTHWCQ2A.mjs → chunk-FNE22WGA.mjs} +1 -1
- package/dist/preview-engine/chunk-GCTVRM7J.mjs +1522 -0
- package/dist/preview-engine/chunk-KERW7QJ4.mjs +174 -0
- package/dist/preview-engine/{chunk-7B5S5D4N.mjs → chunk-TPAEN6VV.mjs} +1 -1
- package/dist/preview-engine/chunk-YQRKT47I.mjs +1 -0
- package/dist/preview-engine/crypto-W5UAWSNT.mjs +1 -0
- package/dist/preview-engine/effects.mjs +1 -1
- package/dist/preview-engine/framefields.mjs +26 -26
- package/dist/preview-engine/player.mjs +5 -5
- package/dist/preview-engine/rapier-AHBIGHEL.mjs +1 -0
- package/dist/preview-engine/rapier-JD7KNQRV.mjs +1 -0
- package/dist/preview-engine/renderers-3F5AIDEL.mjs +228 -0
- package/dist/preview-engine/renderers-6ODPWZ2R.mjs +96 -0
- package/dist/preview-engine/renderers-7NCG6BYS.mjs +94 -0
- package/dist/preview-engine/renderers-BGGRPAVV.mjs +363 -0
- package/dist/preview-engine/renderers-DN2GF3I7.mjs +82 -0
- package/dist/preview-engine/renderers-FGHOLJJK.mjs +44 -0
- package/dist/preview-engine/renderers-FK72LKQC.mjs +275 -0
- package/dist/preview-engine/renderers-FQWWAETX.mjs +203 -0
- package/dist/preview-engine/renderers-HMR2NAD7.mjs +81 -0
- package/dist/preview-engine/renderers-HUW2ZMS3.mjs +1 -0
- package/dist/preview-engine/renderers-JLFGBYN4.mjs +78 -0
- package/dist/preview-engine/renderers-LLUEOW5T.mjs +77 -0
- package/dist/preview-engine/renderers-NC64EQDE.mjs +1 -0
- package/dist/preview-engine/renderers-PVYP2ONH.mjs +76 -0
- package/dist/preview-engine/renderers-TPBPNXWH.mjs +26 -0
- package/dist/preview-engine/renderers-UJ4YVJZT.mjs +80 -0
- package/dist/preview-engine/renderers-WHBDHTRI.mjs +78 -0
- package/dist/preview-engine/renderers-WP67KK5K.mjs +89 -0
- package/dist/preview-engine/renderers-YNFKFM7D.mjs +67 -0
- package/dist/preview-engine/renderers-ZSENYGIY.mjs +84 -0
- package/dist/preview-engine/signals.mjs +1 -1
- package/dist/{program-DzknMiY0.mjs → program-CCSfHMfh.mjs} +346 -13
- package/dist/program-CCSfHMfh.mjs.map +1 -0
- package/dist/renderer/index.d.mts +2 -2
- package/dist/renderer/index.mjs +2 -2
- package/dist/renderer-1Kv7oA86.mjs +5 -0
- package/dist/{renderer-1vhaKMeg.mjs → renderer-1uLtqb74.mjs} +141 -56
- package/dist/renderer-1uLtqb74.mjs.map +1 -0
- package/dist/{renderer-BerD3T-X.mjs → renderer-4VpA7LfU.mjs} +2 -2
- package/dist/{renderer-BerD3T-X.mjs.map → renderer-4VpA7LfU.mjs.map} +1 -1
- package/dist/{renderer-BNqwn0gZ.mjs → renderer-8BM6sJUR.mjs} +2 -2
- package/dist/{renderer-BNqwn0gZ.mjs.map → renderer-8BM6sJUR.mjs.map} +1 -1
- package/dist/renderer-AVHJ33nv.mjs +5 -0
- package/dist/{renderer-0gY4IQhM.mjs → renderer-AtLlZMQ9.mjs} +2 -2
- package/dist/{renderer-0gY4IQhM.mjs.map → renderer-AtLlZMQ9.mjs.map} +1 -1
- package/dist/renderer-B8dJGf8R.mjs +6 -0
- package/dist/{renderer-57ATc_mQ.mjs → renderer-B93zd3sx.mjs} +2 -2
- package/dist/{renderer-57ATc_mQ.mjs.map → renderer-B93zd3sx.mjs.map} +1 -1
- package/dist/renderer-BARst3ZD.mjs +3 -0
- package/dist/{renderer-CJB9nU1x.mjs → renderer-BD7Lmb8h.mjs} +3 -3
- package/dist/{renderer-CJB9nU1x.mjs.map → renderer-BD7Lmb8h.mjs.map} +1 -1
- package/dist/renderer-BEA6nknY.mjs +5 -0
- package/dist/renderer-BFRI5alp.mjs +222 -0
- package/dist/renderer-BFRI5alp.mjs.map +1 -0
- package/dist/{renderer-BiwIh_w4.mjs → renderer-BG5sbTXt.mjs} +3 -3
- package/dist/{renderer-BiwIh_w4.mjs.map → renderer-BG5sbTXt.mjs.map} +1 -1
- package/dist/{renderer-DtgMsjyL.mjs → renderer-BI4OMlEx.mjs} +2 -2
- package/dist/{renderer-DtgMsjyL.mjs.map → renderer-BI4OMlEx.mjs.map} +1 -1
- package/dist/renderer-BOfi06L2.mjs +5 -0
- package/dist/renderer-BOhvtAGL.mjs +5 -0
- package/dist/renderer-BQT3GI9g.mjs +5 -0
- package/dist/{renderer-DJfFc-XW.mjs → renderer-BRwp1kV-.mjs} +3 -3
- package/dist/{renderer-DJfFc-XW.mjs.map → renderer-BRwp1kV-.mjs.map} +1 -1
- package/dist/{renderer-u8ynJtAC.mjs → renderer-BVUTOGHs.mjs} +2 -2
- package/dist/{renderer-u8ynJtAC.mjs.map → renderer-BVUTOGHs.mjs.map} +1 -1
- package/dist/renderer-BXmStgeT.mjs +5 -0
- package/dist/renderer-Bajxo7Nt.mjs +5 -0
- package/dist/{renderer-BHskWZNG.mjs → renderer-Bel1UHA5.mjs} +2 -2
- package/dist/{renderer-AF884a7T.mjs → renderer-BetA_iVd.mjs} +3 -3
- package/dist/{renderer-AF884a7T.mjs.map → renderer-BetA_iVd.mjs.map} +1 -1
- package/dist/{renderer-DpW_LxLO.mjs → renderer-BmDpyiII.mjs} +3 -3
- package/dist/{renderer-DpW_LxLO.mjs.map → renderer-BmDpyiII.mjs.map} +1 -1
- package/dist/{renderer-BteUC_7n.mjs → renderer-BonWt8jF.mjs} +3 -3
- package/dist/{renderer-BteUC_7n.mjs.map → renderer-BonWt8jF.mjs.map} +1 -1
- package/dist/{renderer-BC8XOVl5.mjs → renderer-BpEsZG3t.mjs} +3 -3
- package/dist/{renderer-BC8XOVl5.mjs.map → renderer-BpEsZG3t.mjs.map} +1 -1
- package/dist/{renderer-aArb4RwJ.mjs → renderer-BvBIHi6N.mjs} +2 -2
- package/dist/{renderer-aArb4RwJ.mjs.map → renderer-BvBIHi6N.mjs.map} +1 -1
- package/dist/{renderer-Db3JIF1K.mjs → renderer-BvvuGfZk.mjs} +3 -3
- package/dist/{renderer-Db3JIF1K.mjs.map → renderer-BvvuGfZk.mjs.map} +1 -1
- package/dist/renderer-BzRR0KMm.mjs +5 -0
- package/dist/{renderer-DEuIwr-t.mjs → renderer-Bzl0s07U.mjs} +2 -2
- package/dist/{renderer-DEuIwr-t.mjs.map → renderer-Bzl0s07U.mjs.map} +1 -1
- package/dist/renderer-C39GD6jP.mjs +331 -0
- package/dist/renderer-C39GD6jP.mjs.map +1 -0
- package/dist/renderer-C3Gjy2iE.mjs +5 -0
- package/dist/{renderer-Br6KyRO_.mjs → renderer-C3lPwajT.mjs} +3 -3
- package/dist/{renderer-Br6KyRO_.mjs.map → renderer-C3lPwajT.mjs.map} +1 -1
- package/dist/renderer-C5hQgkz-.mjs +5 -0
- package/dist/{renderer-CebB0v1y.mjs → renderer-C6cF5seJ.mjs} +2 -2
- package/dist/{renderer-CebB0v1y.mjs.map → renderer-C6cF5seJ.mjs.map} +1 -1
- package/dist/renderer-C8GZ0pCV.mjs +191 -0
- package/dist/renderer-C8GZ0pCV.mjs.map +1 -0
- package/dist/{renderer-CuVPo-wP.mjs → renderer-CFe9pZFN.mjs} +2 -2
- package/dist/{renderer-CuVPo-wP.mjs.map → renderer-CFe9pZFN.mjs.map} +1 -1
- package/dist/renderer-CLF-MiOA.mjs +5 -0
- package/dist/renderer-CLa43fCd.mjs +5 -0
- package/dist/{renderer-Bvx56GR6.mjs → renderer-CLdwOhST.mjs} +2 -2
- package/dist/{renderer-Bvx56GR6.mjs.map → renderer-CLdwOhST.mjs.map} +1 -1
- package/dist/renderer-CMK1d6w_.mjs +5 -0
- package/dist/{renderer-CursFKUf.mjs → renderer-CMdtUn5o.mjs} +2 -2
- package/dist/{renderer-CursFKUf.mjs.map → renderer-CMdtUn5o.mjs.map} +1 -1
- package/dist/{renderer-DXqIslFk.mjs → renderer-CNYfB5cC.mjs} +2 -2
- package/dist/{renderer-DXqIslFk.mjs.map → renderer-CNYfB5cC.mjs.map} +1 -1
- package/dist/renderer-CPEQOe3u.mjs +5 -0
- package/dist/{renderer-BbdZ0YHR.mjs → renderer-CWx3Kg79.mjs} +3 -3
- package/dist/{renderer-BbdZ0YHR.mjs.map → renderer-CWx3Kg79.mjs.map} +1 -1
- package/dist/{renderer-CWBHVCvA.mjs → renderer-CdOy3EBJ.mjs} +2 -2
- package/dist/{renderer-CWBHVCvA.mjs.map → renderer-CdOy3EBJ.mjs.map} +1 -1
- package/dist/{renderer-DupsdRIw.mjs → renderer-Celrh689.mjs} +3 -3
- package/dist/{renderer-DupsdRIw.mjs.map → renderer-Celrh689.mjs.map} +1 -1
- package/dist/renderer-CemfjOM9.mjs +5 -0
- package/dist/{renderer-jYxN4mHn.mjs → renderer-ChloaI6P.mjs} +3 -3
- package/dist/{renderer-jYxN4mHn.mjs.map → renderer-ChloaI6P.mjs.map} +1 -1
- package/dist/{renderer-DqdhsSwS.mjs → renderer-CiMpdh0s.mjs} +2 -2
- package/dist/{renderer-DqdhsSwS.mjs.map → renderer-CiMpdh0s.mjs.map} +1 -1
- package/dist/renderer-CkcrScs9.mjs +5 -0
- package/dist/{renderer-CMT4QcpV.mjs → renderer-Cn6VlWHZ.mjs} +3 -3
- package/dist/{renderer-CMT4QcpV.mjs.map → renderer-Cn6VlWHZ.mjs.map} +1 -1
- package/dist/renderer-CqewgazK.mjs +224 -0
- package/dist/renderer-CqewgazK.mjs.map +1 -0
- package/dist/{renderer-C6md3msE.mjs → renderer-Cu5k5D9N.mjs} +2 -2
- package/dist/{renderer-C6md3msE.mjs.map → renderer-Cu5k5D9N.mjs.map} +1 -1
- package/dist/{renderer-id8TbKBY.mjs → renderer-CuphUktB.mjs} +2 -2
- package/dist/{renderer-id8TbKBY.mjs.map → renderer-CuphUktB.mjs.map} +1 -1
- package/dist/renderer-CwrLihY6.mjs +5 -0
- package/dist/{renderer-BzDjy1_x.mjs → renderer-D1Jt-c3F.mjs} +2 -2
- package/dist/{renderer-BzDjy1_x.mjs.map → renderer-D1Jt-c3F.mjs.map} +1 -1
- package/dist/{renderer-Beg7FLt2.mjs → renderer-D1wd0FhZ.mjs} +75 -27
- package/dist/renderer-D1wd0FhZ.mjs.map +1 -0
- package/dist/{renderer-jqByPgkD.mjs → renderer-D26S5hUh.mjs} +2 -2
- package/dist/{renderer-jqByPgkD.mjs.map → renderer-D26S5hUh.mjs.map} +1 -1
- package/dist/renderer-D4S6i2MC.mjs +5 -0
- package/dist/{renderer-BmGPTWwV.mjs → renderer-D7ss6fLB.mjs} +3 -3
- package/dist/{renderer-BmGPTWwV.mjs.map → renderer-D7ss6fLB.mjs.map} +1 -1
- package/dist/renderer-DB8F0XoP.mjs +5 -0
- package/dist/{renderer-PKQNH21k.mjs → renderer-DCGLXnYW.mjs} +2 -2
- package/dist/{renderer-CrABA3lB.mjs → renderer-DCYabwlC.mjs} +2 -2
- package/dist/{renderer-CrABA3lB.mjs.map → renderer-DCYabwlC.mjs.map} +1 -1
- package/dist/renderer-DGpVLJOn.mjs +5 -0
- package/dist/renderer-DGxibeSa.mjs +5 -0
- package/dist/renderer-DJQm3bAW.mjs +5 -0
- package/dist/{renderer-DD8napek.mjs → renderer-DMZ5aLU1.mjs} +2 -2
- package/dist/{renderer-DD8napek.mjs.map → renderer-DMZ5aLU1.mjs.map} +1 -1
- package/dist/renderer-DMftVSfX.mjs +5 -0
- package/dist/renderer-DNpovOd8.mjs +5 -0
- package/dist/renderer-DO5r7ZV-.mjs +658 -0
- package/dist/renderer-DO5r7ZV-.mjs.map +1 -0
- package/dist/{renderer-DZXbgVMK.mjs → renderer-DOWekunR.mjs} +3 -3
- package/dist/{renderer-DZXbgVMK.mjs.map → renderer-DOWekunR.mjs.map} +1 -1
- package/dist/{renderer-Cce2fgpX.mjs → renderer-DPWeKe_x.mjs} +3 -3
- package/dist/{renderer-Cce2fgpX.mjs.map → renderer-DPWeKe_x.mjs.map} +1 -1
- package/dist/{renderer-CE7fwGgw.mjs → renderer-DQtk282o.mjs} +29 -8
- package/dist/renderer-DQtk282o.mjs.map +1 -0
- package/dist/renderer-DSHlvKQk.mjs +5 -0
- package/dist/renderer-DUBb7D17.mjs +219 -0
- package/dist/renderer-DUBb7D17.mjs.map +1 -0
- package/dist/renderer-DYtrdR2p.mjs +5 -0
- package/dist/{renderer-Bn2eQE-t.mjs → renderer-DaCsT-XU.mjs} +3 -3
- package/dist/{renderer-Bn2eQE-t.mjs.map → renderer-DaCsT-XU.mjs.map} +1 -1
- package/dist/{renderer-D1Cm21eq.mjs → renderer-DcAfp1Er.mjs} +2 -2
- package/dist/{renderer-D1Cm21eq.mjs.map → renderer-DcAfp1Er.mjs.map} +1 -1
- package/dist/{renderer-C8uKdelk.mjs → renderer-DdlaBsk_.mjs} +2 -2
- package/dist/{renderer-C8uKdelk.mjs.map → renderer-DdlaBsk_.mjs.map} +1 -1
- package/dist/renderer-DerDxKK3.mjs +220 -0
- package/dist/renderer-DerDxKK3.mjs.map +1 -0
- package/dist/{renderer-CeyAgJnw.mjs → renderer-DfkWYUTX.mjs} +2 -2
- package/dist/{renderer-DHGTzype.mjs → renderer-Dh-OF6aH.mjs} +2 -2
- package/dist/{renderer-DHGTzype.mjs.map → renderer-Dh-OF6aH.mjs.map} +1 -1
- package/dist/renderer-Dk-THZHp.mjs +222 -0
- package/dist/renderer-Dk-THZHp.mjs.map +1 -0
- package/dist/{renderer-BT-_EoXw.d.mts → renderer-DlESyfg7.d.mts} +2 -2
- package/dist/{renderer-BT-_EoXw.d.mts.map → renderer-DlESyfg7.d.mts.map} +1 -1
- package/dist/renderer-DpWRj6zF.mjs +203 -0
- package/dist/renderer-DpWRj6zF.mjs.map +1 -0
- package/dist/renderer-DpwlN4LH.mjs +233 -0
- package/dist/renderer-DpwlN4LH.mjs.map +1 -0
- package/dist/{renderer-DvFaC_-7.mjs → renderer-Dq4aO7az.mjs} +2 -2
- package/dist/{renderer-DvFaC_-7.mjs.map → renderer-Dq4aO7az.mjs.map} +1 -1
- package/dist/renderer-DuSImLUz.mjs +5 -0
- package/dist/{renderer-BeIUgp1r.mjs → renderer-DukD7S3w.mjs} +2 -2
- package/dist/{renderer-BeIUgp1r.mjs.map → renderer-DukD7S3w.mjs.map} +1 -1
- package/dist/{renderer-EemDpvv3.mjs → renderer-FXUCKps6.mjs} +3 -3
- package/dist/{renderer-EemDpvv3.mjs.map → renderer-FXUCKps6.mjs.map} +1 -1
- package/dist/renderer-FbyMYKXe.mjs +5 -0
- package/dist/renderer-HMl2V4iM.mjs +541 -0
- package/dist/renderer-HMl2V4iM.mjs.map +1 -0
- package/dist/renderer-LM_XIKl1.mjs +203 -0
- package/dist/renderer-LM_XIKl1.mjs.map +1 -0
- package/dist/renderer-NMFv7Auz.mjs +5 -0
- package/dist/{renderer-YbaCzPcG.mjs → renderer-O1b-oYJE.mjs} +2 -2
- package/dist/renderer-P3vpdUnb.mjs +5 -0
- package/dist/renderer-PknbdJyL.mjs +208 -0
- package/dist/renderer-PknbdJyL.mjs.map +1 -0
- package/dist/renderer-QTOm26Lg.mjs +5 -0
- package/dist/renderer-YJ3Yukou.mjs +215 -0
- package/dist/renderer-YJ3Yukou.mjs.map +1 -0
- package/dist/{renderer-p_C_T9Kn.mjs → renderer-YdLL2o6d.mjs} +2 -2
- package/dist/{renderer-p_C_T9Kn.mjs.map → renderer-YdLL2o6d.mjs.map} +1 -1
- package/dist/renderer-ahzhMa5q.mjs +5 -0
- package/dist/{renderer-D-vRKssW.mjs → renderer-c-bwxMde.mjs} +2 -2
- package/dist/{renderer-D-vRKssW.mjs.map → renderer-c-bwxMde.mjs.map} +1 -1
- package/dist/renderer-dThfTNge.mjs +5 -0
- package/dist/renderer-dUkOBfGB.mjs +308 -0
- package/dist/renderer-dUkOBfGB.mjs.map +1 -0
- package/dist/renderer-dgAS_k7B.mjs +5 -0
- package/dist/renderer-g-ui08Lh.mjs +204 -0
- package/dist/renderer-g-ui08Lh.mjs.map +1 -0
- package/dist/renderer-kSs8VtY7.mjs +223 -0
- package/dist/renderer-kSs8VtY7.mjs.map +1 -0
- package/dist/{renderer-KnCcN_Nz.mjs → renderer-pPiQwFYh.mjs} +2 -2
- package/dist/{renderer-KnCcN_Nz.mjs.map → renderer-pPiQwFYh.mjs.map} +1 -1
- package/dist/{renderer-D8thCpS7.mjs → renderer-wL-ly4fT.mjs} +3 -3
- package/dist/{renderer-D8thCpS7.mjs.map → renderer-wL-ly4fT.mjs.map} +1 -1
- package/dist/{renderers-CP8CFWDs-BA-4l6By.mjs → renderers-CP8CFWDs-CVHwMTiz.mjs} +2 -2
- package/dist/{renderers-CP8CFWDs-BA-4l6By.mjs.map → renderers-CP8CFWDs-CVHwMTiz.mjs.map} +1 -1
- package/dist/signals/index.d.mts +5 -5
- package/dist/signals/index.mjs +4 -4
- package/package.json +58 -55
- package/dist/dist-CT___nEU.mjs.map +0 -1
- package/dist/effects-C06-AOge.mjs.map +0 -1
- package/dist/index-B-oUlLoO.d.mts.map +0 -1
- package/dist/index-CwbszPDG.d.mts.map +0 -1
- package/dist/preview-engine/chunk-G4K6TLNA.mjs +0 -1
- package/dist/preview-engine/chunk-HVCAOHNI.mjs +0 -1
- package/dist/preview-engine/chunk-KBO6EX3M.mjs +0 -1448
- package/dist/preview-engine/chunk-N4LHIPHZ.mjs +0 -340
- package/dist/preview-engine/chunk-NECOKNHA.mjs +0 -174
- package/dist/preview-engine/renderers-T4JMJXWL.mjs +0 -1
- package/dist/preview-engine/renderers-VFV5QWO3.mjs +0 -1
- package/dist/preview-engine/renderers-VUL4HBX3.mjs +0 -228
- package/dist/program-DzknMiY0.mjs.map +0 -1
- package/dist/renderer--IDyGdqT.mjs +0 -5
- package/dist/renderer-17K4tjid.mjs +0 -5
- package/dist/renderer-1vhaKMeg.mjs.map +0 -1
- package/dist/renderer-Ab9Ttn_m.mjs +0 -5
- package/dist/renderer-B-roDBBo.mjs +0 -5
- package/dist/renderer-B03uwoUX.mjs +0 -5
- package/dist/renderer-B3BI_7YJ.mjs +0 -5
- package/dist/renderer-BGD4lQ74.mjs +0 -5
- package/dist/renderer-BHXhYfeC.mjs +0 -5
- package/dist/renderer-BRsTIMFa.mjs +0 -5
- package/dist/renderer-Beg7FLt2.mjs.map +0 -1
- package/dist/renderer-BjMTtYZw.mjs +0 -5
- package/dist/renderer-BoCh3Yts.mjs +0 -5
- package/dist/renderer-BqPbR8c4.mjs +0 -5
- package/dist/renderer-Bxa4SDm9.mjs +0 -3
- package/dist/renderer-C4Da2I1-.mjs +0 -5
- package/dist/renderer-C93X6dgl.mjs +0 -5
- package/dist/renderer-CE7fwGgw.mjs.map +0 -1
- package/dist/renderer-CMAwFfGx.mjs +0 -6
- package/dist/renderer-CRXeSuX2.mjs +0 -5
- package/dist/renderer-CSp6WYBN.mjs +0 -5
- package/dist/renderer-CUXX7HTL.mjs +0 -5
- package/dist/renderer-CUgThpka.mjs +0 -5
- package/dist/renderer-CeVtufiT.mjs +0 -5
- package/dist/renderer-CespkZUk.mjs +0 -5
- package/dist/renderer-D1l47xhL.mjs +0 -5
- package/dist/renderer-DDuG18J8.mjs +0 -5
- package/dist/renderer-DFhrFSMn.mjs +0 -5
- package/dist/renderer-DO48vQ7Y.mjs +0 -5
- package/dist/renderer-DTC39B_n.mjs +0 -5
- package/dist/renderer-DbyU3hNF.mjs +0 -5
- package/dist/renderer-DftVpmfu.mjs +0 -5
- package/dist/renderer-Dj5jm63K.mjs +0 -5
- package/dist/renderer-Dju57ZaF.mjs +0 -5
- package/dist/renderer-Dn8TQCw7.mjs +0 -5
- package/dist/renderer-ETF46K0D.mjs +0 -5
- package/dist/renderer-azYzWGC3.mjs +0 -5
- package/dist/renderer-dxNoRW59.mjs +0 -5
- package/dist/renderer-fdfelx_I.mjs +0 -5
- package/dist/renderer-snwEKwMw.mjs +0 -5
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import{a as S,d as U,f as w,h as R,j as G,m as T}from"./chunk-ENKKLU7B.mjs";import"./chunk-6YJP57MZ.mjs";import{z as P}from"./chunk-63SFBHEH.mjs";import{e as l}from"./chunk-BVF64D6H.mjs";l();l();var f="Iridescence",N=8,$=[`struct U { v : array<vec4<f32>, 2> };
|
|
2
|
+
@group(0) @binding(0) var<uniform> u : U;
|
|
3
|
+
@group(0) @binding(1) var src : texture_2d<f32>;
|
|
4
|
+
@group(0) @binding(2) var prev : texture_2d<f32>;
|
|
5
|
+
@group(0) @binding(3) var samp : sampler;
|
|
6
|
+
${S}
|
|
7
|
+
|
|
8
|
+
fn straight(c : vec4<f32>) -> vec4<f32> {
|
|
9
|
+
if (c.a <= 0.0001) { return vec4<f32>(0.0); }
|
|
10
|
+
return vec4<f32>(c.rgb / c.a, c.a);
|
|
11
|
+
}
|
|
12
|
+
fn premul(c : vec4<f32>) -> vec4<f32> { return vec4<f32>(c.rgb * c.a, c.a); }
|
|
13
|
+
fn res() -> vec2<f32> { return vec2<f32>(textureDimensions(src)); }
|
|
14
|
+
/** Straight-alpha color of the layer at a uv (filtered). */
|
|
15
|
+
fn sampleS(uv : vec2<f32>) -> vec4<f32> { return straight(textureSampleLevel(src, samp, uv, 0.0)); }
|
|
16
|
+
/** Premultiplied color of the layer at a uv (filtered). */
|
|
17
|
+
fn sampleP(uv : vec2<f32>) -> vec4<f32> { return textureSampleLevel(src, samp, uv, 0.0); }
|
|
18
|
+
/** Straight-alpha color of the layer's texel at a pixel position (nearest). */
|
|
19
|
+
fn texelS(p : vec2<f32>) -> vec4<f32> {
|
|
20
|
+
let d = vec2<i32>(textureDimensions(src));
|
|
21
|
+
let q = clamp(vec2<i32>(floor(p)), vec2<i32>(0), d - vec2<i32>(1));
|
|
22
|
+
return straight(textureLoad(src, q, 0));
|
|
23
|
+
}
|
|
24
|
+
fn luma(c : vec3<f32>) -> f32 { return dot(c, vec3<f32>(0.2126, 0.7152, 0.0722)); }
|
|
25
|
+
fn hash12(p : vec2<f32>) -> f32 {
|
|
26
|
+
var p3 = fract(vec3<f32>(p.xyx) * 0.1031);
|
|
27
|
+
p3 += dot(p3, p3.yzx + 33.33);
|
|
28
|
+
return fract((p3.x + p3.y) * p3.z);
|
|
29
|
+
}
|
|
30
|
+
fn vnoise(p : vec2<f32>) -> f32 {
|
|
31
|
+
let i = floor(p);
|
|
32
|
+
let f = fract(p);
|
|
33
|
+
let u = f * f * (3.0 - 2.0 * f);
|
|
34
|
+
return mix(mix(hash12(i), hash12(i + vec2<f32>(1.0, 0.0)), u.x),
|
|
35
|
+
mix(hash12(i + vec2<f32>(0.0, 1.0)), hash12(i + vec2<f32>(1.0, 1.0)), u.x), u.y);
|
|
36
|
+
}
|
|
37
|
+
/** 8x8 ordered-dither threshold, 0..1. */
|
|
38
|
+
fn bayer8(p : vec2<f32>) -> f32 {
|
|
39
|
+
let x = u32(p.x) & 7u;
|
|
40
|
+
let y = u32(p.y) & 7u;
|
|
41
|
+
var v = 0u;
|
|
42
|
+
for (var k = 0u; k < 3u; k++) {
|
|
43
|
+
let bx = (x >> k) & 1u;
|
|
44
|
+
let by = (y >> k) & 1u;
|
|
45
|
+
let m = ((bx ^ by) << 1u) | by;
|
|
46
|
+
v += m * (1u << (2u * (2u - k)));
|
|
47
|
+
}
|
|
48
|
+
return (f32(v) + 0.5) / 64.0;
|
|
49
|
+
}
|
|
50
|
+
fn rot2(a : f32) -> mat2x2<f32> { let c = cos(a); let s = sin(a); return mat2x2<f32>(c, s, -s, c); }
|
|
51
|
+
@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {
|
|
52
|
+
let time = u.v[0].x;
|
|
53
|
+
let frame = u.v[0].y;
|
|
54
|
+
let strength = u.v[1].x;
|
|
55
|
+
let scale = u.v[1].y;
|
|
56
|
+
let shift = u.v[1].z;
|
|
57
|
+
let mode = u32(u.v[1].w + 0.5);
|
|
58
|
+
|
|
59
|
+
let R = res();
|
|
60
|
+
let c = sampleS(in.uv);
|
|
61
|
+
let l = luma(c.rgb);
|
|
62
|
+
var phase = l;
|
|
63
|
+
var amount = strength;
|
|
64
|
+
if (mode == 1u) {
|
|
65
|
+
let o = 5.0 / R;
|
|
66
|
+
let gx = luma(sampleS(in.uv + vec2<f32>(o.x, 0.0)).rgb) - luma(sampleS(in.uv - vec2<f32>(o.x, 0.0)).rgb);
|
|
67
|
+
let gy = luma(sampleS(in.uv + vec2<f32>(0.0, o.y)).rgb) - luma(sampleS(in.uv - vec2<f32>(0.0, o.y)).rgb);
|
|
68
|
+
let n = normalize(vec3<f32>(-gx * 3.0, -gy * 3.0, 1.0));
|
|
69
|
+
let slope = 1.0 - n.z;
|
|
70
|
+
phase = slope * 3.0 + l * 0.6 + in.uv.x * 0.4 + in.uv.y * 0.3;
|
|
71
|
+
amount = strength * clamp(0.3 + slope * 6.0, 0.0, 1.0);
|
|
72
|
+
}
|
|
73
|
+
phase = phase * scale + shift / 360.0;
|
|
74
|
+
let rainbow = 0.5 + 0.5 * cos(6.2831853 * (phase + vec3<f32>(0.0, 0.33, 0.67)));
|
|
75
|
+
let screened = vec3<f32>(1.0) - (vec3<f32>(1.0) - c.rgb) * (vec3<f32>(1.0) - rainbow * 0.85);
|
|
76
|
+
return premul(vec4<f32>(mix(c.rgb, screened, amount), c.a));
|
|
77
|
+
}
|
|
78
|
+
`],k=w(e=>({layout:U(e,["uniform","texture","texture","sampler"],`${f}_layout`),pipelines:new Map,sampler:e.createSampler({magFilter:"linear",minFilter:"linear",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"})}));function z(e,r){let t=k(e),n=t.pipelines.get(r);return n||(n=$.map((p,i)=>{let a=e.createShaderModule({code:p,label:`${f}_${i}.wgsl`});return e.createRenderPipeline({label:`${f}_${i}`,layout:e.createPipelineLayout({bindGroupLayouts:[t.layout]}),vertex:{module:a,entryPoint:"vs"},fragment:{module:a,entryPoint:"fs",targets:[{format:r}]},primitive:{topology:"triangle-strip"}})}),t.pipelines.set(r,n)),n}function g(e,r){let t=typeof e=="number"?e:Number(e);return Number.isFinite(t)?t:r}function A(e,r,t,n){r.fill(0),r[0]=t,r[1]=n,r[4]=g(e.strength,.6),r[5]=g(e.scale,2),r[6]=g(e.shift,0),r[7]=Math.max(0,["luminance","relief"].indexOf(String(e.mode??"relief")))}var F=async e=>{let{ctx:r,encoder:t,pass:n,targetTexture:p,targetWidth:i,targetHeight:a,props:o}=e,c=o.virtualMedia?.operation;if(c?.op!==f)return;let x=o.virtualMedia?.children?.[0];if(!x)return;n.end();let m=o.fps||30,u=Math.round(o.compositionFrame??o.frame??0),L=c.effect?.resolveUniforms?c.effect.resolveUniforms({frame:u,fps:m,time:u/m}):c,h=new Float32Array(N);A(L,h,u/m,u);let{texture:v}=await R(e,x),d=r.device,b=k(d),M=z(d,r.renderer.format),_=r.renderer.getTemporaryBuffer(h),s=v;for(let W of M){let y=r.renderer.getTemporaryTexture(i,a,[v,s,p,...o.excludeTextures||[]]);T(t,y.createView(),W,[d.createBindGroup({layout:b.layout,entries:[{binding:0,resource:{buffer:_}},{binding:1,resource:v.createView()},{binding:2,resource:s.createView()},{binding:3,resource:b.sampler}]})]),s=y}G(e,s)};var q=P({WebGPURenderer:F});export{F as IridescenceWebGPURenderer,q as default};
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import{a as U,d as R,f as G,h as S,j as T,m as k}from"./chunk-ENKKLU7B.mjs";import"./chunk-6YJP57MZ.mjs";import{z as P}from"./chunk-63SFBHEH.mjs";import{e as f}from"./chunk-BVF64D6H.mjs";f();f();var p="Kaleidoscope",D=12,N=[`struct U { v : array<vec4<f32>, 3> };
|
|
2
|
+
@group(0) @binding(0) var<uniform> u : U;
|
|
3
|
+
@group(0) @binding(1) var src : texture_2d<f32>;
|
|
4
|
+
@group(0) @binding(2) var prev : texture_2d<f32>;
|
|
5
|
+
@group(0) @binding(3) var samp : sampler;
|
|
6
|
+
${U}
|
|
7
|
+
|
|
8
|
+
fn straight(c : vec4<f32>) -> vec4<f32> {
|
|
9
|
+
if (c.a <= 0.0001) { return vec4<f32>(0.0); }
|
|
10
|
+
return vec4<f32>(c.rgb / c.a, c.a);
|
|
11
|
+
}
|
|
12
|
+
fn premul(c : vec4<f32>) -> vec4<f32> { return vec4<f32>(c.rgb * c.a, c.a); }
|
|
13
|
+
fn res() -> vec2<f32> { return vec2<f32>(textureDimensions(src)); }
|
|
14
|
+
/** Straight-alpha color of the layer at a uv (filtered). */
|
|
15
|
+
fn sampleS(uv : vec2<f32>) -> vec4<f32> { return straight(textureSampleLevel(src, samp, uv, 0.0)); }
|
|
16
|
+
/** Premultiplied color of the layer at a uv (filtered). */
|
|
17
|
+
fn sampleP(uv : vec2<f32>) -> vec4<f32> { return textureSampleLevel(src, samp, uv, 0.0); }
|
|
18
|
+
/** Straight-alpha color of the layer's texel at a pixel position (nearest). */
|
|
19
|
+
fn texelS(p : vec2<f32>) -> vec4<f32> {
|
|
20
|
+
let d = vec2<i32>(textureDimensions(src));
|
|
21
|
+
let q = clamp(vec2<i32>(floor(p)), vec2<i32>(0), d - vec2<i32>(1));
|
|
22
|
+
return straight(textureLoad(src, q, 0));
|
|
23
|
+
}
|
|
24
|
+
fn luma(c : vec3<f32>) -> f32 { return dot(c, vec3<f32>(0.2126, 0.7152, 0.0722)); }
|
|
25
|
+
fn hash12(p : vec2<f32>) -> f32 {
|
|
26
|
+
var p3 = fract(vec3<f32>(p.xyx) * 0.1031);
|
|
27
|
+
p3 += dot(p3, p3.yzx + 33.33);
|
|
28
|
+
return fract((p3.x + p3.y) * p3.z);
|
|
29
|
+
}
|
|
30
|
+
fn vnoise(p : vec2<f32>) -> f32 {
|
|
31
|
+
let i = floor(p);
|
|
32
|
+
let f = fract(p);
|
|
33
|
+
let u = f * f * (3.0 - 2.0 * f);
|
|
34
|
+
return mix(mix(hash12(i), hash12(i + vec2<f32>(1.0, 0.0)), u.x),
|
|
35
|
+
mix(hash12(i + vec2<f32>(0.0, 1.0)), hash12(i + vec2<f32>(1.0, 1.0)), u.x), u.y);
|
|
36
|
+
}
|
|
37
|
+
/** 8x8 ordered-dither threshold, 0..1. */
|
|
38
|
+
fn bayer8(p : vec2<f32>) -> f32 {
|
|
39
|
+
let x = u32(p.x) & 7u;
|
|
40
|
+
let y = u32(p.y) & 7u;
|
|
41
|
+
var v = 0u;
|
|
42
|
+
for (var k = 0u; k < 3u; k++) {
|
|
43
|
+
let bx = (x >> k) & 1u;
|
|
44
|
+
let by = (y >> k) & 1u;
|
|
45
|
+
let m = ((bx ^ by) << 1u) | by;
|
|
46
|
+
v += m * (1u << (2u * (2u - k)));
|
|
47
|
+
}
|
|
48
|
+
return (f32(v) + 0.5) / 64.0;
|
|
49
|
+
}
|
|
50
|
+
fn rot2(a : f32) -> mat2x2<f32> { let c = cos(a); let s = sin(a); return mat2x2<f32>(c, s, -s, c); }
|
|
51
|
+
@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {
|
|
52
|
+
let time = u.v[0].x;
|
|
53
|
+
let frame = u.v[0].y;
|
|
54
|
+
let segments = u.v[1].x;
|
|
55
|
+
let rotation = u.v[1].y;
|
|
56
|
+
let centerX = u.v[1].z;
|
|
57
|
+
let centerY = u.v[1].w;
|
|
58
|
+
let zoom = u.v[2].x;
|
|
59
|
+
|
|
60
|
+
let R = res();
|
|
61
|
+
let aspect = R.x / R.y;
|
|
62
|
+
let center = vec2<f32>(centerX, centerY);
|
|
63
|
+
var p = in.uv - center;
|
|
64
|
+
p.x *= aspect;
|
|
65
|
+
let rad = length(p) / zoom;
|
|
66
|
+
let rot = radians(rotation);
|
|
67
|
+
let seg = 6.2831853 / segments;
|
|
68
|
+
var a = atan2(p.y, p.x) - rot;
|
|
69
|
+
a = a - seg * floor(a / seg);
|
|
70
|
+
a = min(a, seg - a);
|
|
71
|
+
var q = vec2<f32>(cos(a + rot), sin(a + rot)) * rad;
|
|
72
|
+
q.x /= aspect;
|
|
73
|
+
let uv = q + center;
|
|
74
|
+
let m = vec2<f32>(1.0) - abs(fract(uv * 0.5) * 2.0 - vec2<f32>(1.0));
|
|
75
|
+
return sampleP(m);
|
|
76
|
+
}
|
|
77
|
+
`],w=G(e=>({layout:R(e,["uniform","texture","texture","sampler"],`${p}_layout`),pipelines:new Map,sampler:e.createSampler({magFilter:"linear",minFilter:"linear",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"})}));function $(e,r){let t=w(e),n=t.pipelines.get(r);return n||(n=N.map((m,i)=>{let c=e.createShaderModule({code:m,label:`${p}_${i}.wgsl`});return e.createRenderPipeline({label:`${p}_${i}`,layout:e.createPipelineLayout({bindGroupLayouts:[t.layout]}),vertex:{module:c,entryPoint:"vs"},fragment:{module:c,entryPoint:"fs",targets:[{format:r}]},primitive:{topology:"triangle-strip"}})}),t.pipelines.set(r,n)),n}function a(e,r){let t=typeof e=="number"?e:Number(e);return Number.isFinite(t)?t:r}function q(e,r,t,n){r.fill(0),r[0]=t,r[1]=n,r[4]=a(e.segments,6),r[5]=a(e.rotation,0),r[6]=a(e.centerX,.5),r[7]=a(e.centerY,.5),r[8]=a(e.zoom,1)}var F=async e=>{let{ctx:r,encoder:t,pass:n,targetTexture:m,targetWidth:i,targetHeight:c,props:o}=e,s=o.virtualMedia?.operation;if(s?.op!==p)return;let g=o.virtualMedia?.children?.[0];if(!g)return;n.end();let v=o.fps||30,u=Math.round(o.compositionFrame??o.frame??0),L=s.effect?.resolveUniforms?s.effect.resolveUniforms({frame:u,fps:v,time:u/v}):s,y=new Float32Array(D);q(L,y,u/v,u);let{texture:d}=await S(e,g),x=r.device,b=w(x),M=$(x,r.renderer.format),_=r.renderer.getTemporaryBuffer(y),l=d;for(let W of M){let h=r.renderer.getTemporaryTexture(i,c,[d,l,m,...o.excludeTextures||[]]);k(t,h.createView(),W,[x.createBindGroup({layout:b.layout,entries:[{binding:0,resource:{buffer:_}},{binding:1,resource:d.createView()},{binding:2,resource:l.createView()},{binding:3,resource:b.sampler}]})]),l=h}T(e,l)};var K=P({WebGPURenderer:F});export{F as KaleidoscopeWebGPURenderer,K as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{T as a}from"./chunk-KERW7QJ4.mjs";import"./chunk-YQRKT47I.mjs";import"./chunk-VXUJWPIK.mjs";import"./chunk-YKMBRUAE.mjs";import"./chunk-XKO4RYKN.mjs";import"./chunk-X6HUH6K4.mjs";import"./chunk-NQZKBFC6.mjs";import"./chunk-24P6DAB3.mjs";import"./chunk-63SFBHEH.mjs";import"./chunk-4GEWSUX5.mjs";import"./chunk-MTJHQATU.mjs";import"./chunk-IQKIHFNZ.mjs";import"./chunk-YAQFFQPG.mjs";import"./chunk-BVF64D6H.mjs";export{a as default};
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import{a as P,d as U,f as S,h as R,j as G,m as w}from"./chunk-ENKKLU7B.mjs";import"./chunk-6YJP57MZ.mjs";import{z as y}from"./chunk-63SFBHEH.mjs";import{e as u}from"./chunk-BVF64D6H.mjs";u();u();var f="Pixelate",D=8,N=[`struct U { v : array<vec4<f32>, 2> };
|
|
2
|
+
@group(0) @binding(0) var<uniform> u : U;
|
|
3
|
+
@group(0) @binding(1) var src : texture_2d<f32>;
|
|
4
|
+
@group(0) @binding(2) var prev : texture_2d<f32>;
|
|
5
|
+
@group(0) @binding(3) var samp : sampler;
|
|
6
|
+
${P}
|
|
7
|
+
|
|
8
|
+
fn straight(c : vec4<f32>) -> vec4<f32> {
|
|
9
|
+
if (c.a <= 0.0001) { return vec4<f32>(0.0); }
|
|
10
|
+
return vec4<f32>(c.rgb / c.a, c.a);
|
|
11
|
+
}
|
|
12
|
+
fn premul(c : vec4<f32>) -> vec4<f32> { return vec4<f32>(c.rgb * c.a, c.a); }
|
|
13
|
+
fn res() -> vec2<f32> { return vec2<f32>(textureDimensions(src)); }
|
|
14
|
+
/** Straight-alpha color of the layer at a uv (filtered). */
|
|
15
|
+
fn sampleS(uv : vec2<f32>) -> vec4<f32> { return straight(textureSampleLevel(src, samp, uv, 0.0)); }
|
|
16
|
+
/** Premultiplied color of the layer at a uv (filtered). */
|
|
17
|
+
fn sampleP(uv : vec2<f32>) -> vec4<f32> { return textureSampleLevel(src, samp, uv, 0.0); }
|
|
18
|
+
/** Straight-alpha color of the layer's texel at a pixel position (nearest). */
|
|
19
|
+
fn texelS(p : vec2<f32>) -> vec4<f32> {
|
|
20
|
+
let d = vec2<i32>(textureDimensions(src));
|
|
21
|
+
let q = clamp(vec2<i32>(floor(p)), vec2<i32>(0), d - vec2<i32>(1));
|
|
22
|
+
return straight(textureLoad(src, q, 0));
|
|
23
|
+
}
|
|
24
|
+
fn luma(c : vec3<f32>) -> f32 { return dot(c, vec3<f32>(0.2126, 0.7152, 0.0722)); }
|
|
25
|
+
fn hash12(p : vec2<f32>) -> f32 {
|
|
26
|
+
var p3 = fract(vec3<f32>(p.xyx) * 0.1031);
|
|
27
|
+
p3 += dot(p3, p3.yzx + 33.33);
|
|
28
|
+
return fract((p3.x + p3.y) * p3.z);
|
|
29
|
+
}
|
|
30
|
+
fn vnoise(p : vec2<f32>) -> f32 {
|
|
31
|
+
let i = floor(p);
|
|
32
|
+
let f = fract(p);
|
|
33
|
+
let u = f * f * (3.0 - 2.0 * f);
|
|
34
|
+
return mix(mix(hash12(i), hash12(i + vec2<f32>(1.0, 0.0)), u.x),
|
|
35
|
+
mix(hash12(i + vec2<f32>(0.0, 1.0)), hash12(i + vec2<f32>(1.0, 1.0)), u.x), u.y);
|
|
36
|
+
}
|
|
37
|
+
/** 8x8 ordered-dither threshold, 0..1. */
|
|
38
|
+
fn bayer8(p : vec2<f32>) -> f32 {
|
|
39
|
+
let x = u32(p.x) & 7u;
|
|
40
|
+
let y = u32(p.y) & 7u;
|
|
41
|
+
var v = 0u;
|
|
42
|
+
for (var k = 0u; k < 3u; k++) {
|
|
43
|
+
let bx = (x >> k) & 1u;
|
|
44
|
+
let by = (y >> k) & 1u;
|
|
45
|
+
let m = ((bx ^ by) << 1u) | by;
|
|
46
|
+
v += m * (1u << (2u * (2u - k)));
|
|
47
|
+
}
|
|
48
|
+
return (f32(v) + 0.5) / 64.0;
|
|
49
|
+
}
|
|
50
|
+
fn rot2(a : f32) -> mat2x2<f32> { let c = cos(a); let s = sin(a); return mat2x2<f32>(c, s, -s, c); }
|
|
51
|
+
@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {
|
|
52
|
+
let time = u.v[0].x;
|
|
53
|
+
let frame = u.v[0].y;
|
|
54
|
+
let size = u.v[1].x;
|
|
55
|
+
let shape = u32(u.v[1].y + 0.5);
|
|
56
|
+
let gap = u.v[1].z;
|
|
57
|
+
|
|
58
|
+
let R = res();
|
|
59
|
+
let cell = max(size, 1.0);
|
|
60
|
+
let p = in.uv * R;
|
|
61
|
+
let c0 = floor(p / cell) * cell + cell * 0.5;
|
|
62
|
+
let col = texelS(c0);
|
|
63
|
+
let f = (p - c0) / cell;
|
|
64
|
+
let g = 1.0 - gap;
|
|
65
|
+
let e = 1.0 / cell;
|
|
66
|
+
var m = 1.0;
|
|
67
|
+
if (shape == 1u) {
|
|
68
|
+
m = 1.0 - smoothstep(0.5 * g - e, 0.5 * g, length(f));
|
|
69
|
+
} else if (shape == 2u) {
|
|
70
|
+
m = 1.0 - smoothstep(0.5 * g - e, 0.5 * g, abs(f.x) + abs(f.y));
|
|
71
|
+
} else if (gap > 0.0) {
|
|
72
|
+
m = 1.0 - smoothstep(0.5 * g - e, 0.5 * g, max(abs(f.x), abs(f.y)));
|
|
73
|
+
}
|
|
74
|
+
return premul(vec4<f32>(col.rgb, col.a * m));
|
|
75
|
+
}
|
|
76
|
+
`],k=S(e=>({layout:U(e,["uniform","texture","texture","sampler"],`${f}_layout`),pipelines:new Map,sampler:e.createSampler({magFilter:"linear",minFilter:"linear",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"})}));function $(e,r){let t=k(e),n=t.pipelines.get(r);return n||(n=N.map((p,i)=>{let a=e.createShaderModule({code:p,label:`${f}_${i}.wgsl`});return e.createRenderPipeline({label:`${f}_${i}`,layout:e.createPipelineLayout({bindGroupLayouts:[t.layout]}),vertex:{module:a,entryPoint:"vs"},fragment:{module:a,entryPoint:"fs",targets:[{format:r}]},primitive:{topology:"triangle-strip"}})}),t.pipelines.set(r,n)),n}function T(e,r){let t=typeof e=="number"?e:Number(e);return Number.isFinite(t)?t:r}function A(e,r,t,n){r.fill(0),r[0]=t,r[1]=n,r[4]=T(e.size,12),r[5]=Math.max(0,["square","circle","diamond"].indexOf(String(e.shape??"square"))),r[6]=T(e.gap,0)}var F=async e=>{let{ctx:r,encoder:t,pass:n,targetTexture:p,targetWidth:i,targetHeight:a,props:o}=e,l=o.virtualMedia?.operation;if(l?.op!==f)return;let x=o.virtualMedia?.children?.[0];if(!x)return;n.end();let m=o.fps||30,c=Math.round(o.compositionFrame??o.frame??0),L=l.effect?.resolveUniforms?l.effect.resolveUniforms({frame:c,fps:m,time:c/m}):l,g=new Float32Array(D);A(L,g,c/m,c);let{texture:d}=await R(e,x),v=r.device,h=k(v),M=$(v,r.renderer.format),_=r.renderer.getTemporaryBuffer(g),s=d;for(let W of M){let b=r.renderer.getTemporaryTexture(i,a,[d,s,p,...o.excludeTextures||[]]);w(t,b.createView(),W,[v.createBindGroup({layout:h.layout,entries:[{binding:0,resource:{buffer:_}},{binding:1,resource:d.createView()},{binding:2,resource:s.createView()},{binding:3,resource:h.sampler}]})]),s=b}G(e,s)};var C=y({WebGPURenderer:F});export{F as PixelateWebGPURenderer,C as default};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import{a as G}from"./chunk-7I7PKKDL.mjs";import{a as T,d as w,f as U,h,j as P,m as k}from"./chunk-ENKKLU7B.mjs";import"./chunk-6YJP57MZ.mjs";import{z as g}from"./chunk-63SFBHEH.mjs";import{e as p}from"./chunk-BVF64D6H.mjs";p();p();var v="rgba16float",D=`
|
|
2
|
+
struct U { a : vec4<f32>, b : vec4<f32> };
|
|
3
|
+
@group(0) @binding(0) var<uniform> u : U;
|
|
4
|
+
@group(0) @binding(1) var moshTex : texture_2d<f32>;
|
|
5
|
+
@group(0) @binding(2) var currentTex : texture_2d<f32>;
|
|
6
|
+
@group(0) @binding(3) var flowTex : texture_2d<f32>;
|
|
7
|
+
@group(0) @binding(4) var samp : sampler;
|
|
8
|
+
${T}
|
|
9
|
+
|
|
10
|
+
@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {
|
|
11
|
+
let strength = u.a.x;
|
|
12
|
+
let bleed = u.a.y;
|
|
13
|
+
let inv = u.a.zw;
|
|
14
|
+
let cur0 = textureSampleLevel(currentTex, samp, in.uv, 0.0);
|
|
15
|
+
if (u.b.x > 0.5) { return cur0; }
|
|
16
|
+
let dims = vec2<f32>(textureDimensions(flowTex));
|
|
17
|
+
let coord = vec2<i32>(clamp(in.uv * dims, vec2<f32>(0.0), dims - 1.0));
|
|
18
|
+
let flow = textureLoad(flowTex, coord, 0).xy;
|
|
19
|
+
let cur = textureSampleLevel(currentTex, samp, in.uv, 0.0);
|
|
20
|
+
// The old picture moves with the new motion instead of being replaced.
|
|
21
|
+
let moved = textureSampleLevel(moshTex, samp, clamp(in.uv - flow * inv * strength, vec2<f32>(0.0), vec2<f32>(1.0)), 0.0);
|
|
22
|
+
var out = mix(moved, cur, bleed);
|
|
23
|
+
if (moved.a < 0.01) { out = cur; }
|
|
24
|
+
return out;
|
|
25
|
+
}
|
|
26
|
+
`,_=U(e=>{let r=w(e,["uniform","texture","texture","texture","sampler"],"datamosh_layout"),a=e.createShaderModule({code:D,label:"datamosh.wgsl"});return{layout:r,pipeline:e.createRenderPipeline({label:"datamosh",layout:e.createPipelineLayout({bindGroupLayouts:[r]}),vertex:{module:a,entryPoint:"vs"},fragment:{module:a,entryPoint:"fs",targets:[{format:v}]},primitive:{topology:"triangle-strip"}}),flow:new G(e),sampler:e.createSampler({magFilter:"linear",minFilter:"linear"})}});function H(e,r,a,i,s){let t=e.feedbackHistory;if(t&&t.device===r&&t.width===a&&t.height===i)return t;t?.front.destroy(),t?.back.destroy(),t?.prev?.destroy();let o=(n,c)=>r.createTexture({label:n,size:[a,i],format:c,usage:GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_SRC|GPUTextureUsage.COPY_DST}),u={device:r,width:a,height:i,front:o("feedback_front",v),back:o("feedback_back",v),prev:o("feedback_prev",s),frame:-1};return e.feedbackHistory=u,u}async function S(e,r,a,i){let s=e.props.virtualMedia?.children?.[0];return s?h(e,s,{exclude:[i.front,i.back,...i.prev?[i.prev]:[]],props:{...e.props,virtualMedia:s,frame:r,compositionFrame:a+r}}):null}function A(e){let r=e.front;e.front=e.back,e.back=r}async function L(e,r,a,i,s,t){let o=await S(e,i,s,r);if(!o||!r.prev)return;let u=_(e.ctx.device),{encoder:n}=e,c=t||r.frame<0,b=c?o.texture:u.flow.execute(r.prev,o.texture,{},n),m=new Float32Array([a.strength,a.bleed,1/r.width,1/r.height,c?1:0,0,0,0]);k(n,r.back.createView(),u.pipeline,[e.ctx.device.createBindGroup({layout:u.layout,entries:[{binding:0,resource:{buffer:e.ctx.renderer.getTemporaryBuffer(m)}},{binding:1,resource:r.front.createView()},{binding:2,resource:o.view},{binding:3,resource:b.createView()},{binding:4,resource:u.sampler}]})]),n.copyTextureToTexture({texture:o.texture},{texture:r.prev},[r.width,r.height,1]),A(r),r.frame=i}function x(e,r){return typeof e=="number"&&Number.isFinite(e)?e:r}var F=async e=>{let{ctx:r,pass:a,targetWidth:i,targetHeight:s,props:t}=e,o=t.virtualMedia?.operation;if(o?.op!=="Datamosh"||!o.effect?.resolveUniforms||!t.virtualMedia?.children?.[0])return;a.end();let u=t.fps||30,n=Math.max(0,Math.round(t.frame??0)),c=Math.round(t.compositionFrame??n),b=c-n,m=o.effect.resolveUniforms({frame:c,fps:u,time:c/u}),d=H(o.effect,r.device,i,s,r.renderer.format);{let l={keyframes:Array.isArray(m.keyframes)?m.keyframes.map(Math.round):[],strength:x(m.strength,1),bleed:Math.min(1,Math.max(0,x(m.bleed,0))),warmup:Math.max(1,Math.round(x(m.warmup,48)))};if(d.frame!==n){let y=n;if(d.frame!==n-1){let f=Math.max(0,...l.keyframes.filter(M=>M<=n));y=Math.max(f,n-l.warmup),d.frame=-1}for(let f=y;f<=n;f++)await L(e,d,l,f,b,f===0||l.keyframes.includes(f)||d.frame<0)}}P(e,d.front)};var B=g({WebGPURenderer:F});export{F as DatamoshWebGPURenderer,B as default};
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import{a as S,d as U,f as R,h as w,j as G,m as T}from"./chunk-ENKKLU7B.mjs";import"./chunk-6YJP57MZ.mjs";import{z as P}from"./chunk-63SFBHEH.mjs";import{e as c}from"./chunk-BVF64D6H.mjs";c();c();var f="Contour",D=16,$=[`struct U { v : array<vec4<f32>, 4> };
|
|
2
|
+
@group(0) @binding(0) var<uniform> u : U;
|
|
3
|
+
@group(0) @binding(1) var src : texture_2d<f32>;
|
|
4
|
+
@group(0) @binding(2) var prev : texture_2d<f32>;
|
|
5
|
+
@group(0) @binding(3) var samp : sampler;
|
|
6
|
+
${S}
|
|
7
|
+
|
|
8
|
+
fn straight(c : vec4<f32>) -> vec4<f32> {
|
|
9
|
+
if (c.a <= 0.0001) { return vec4<f32>(0.0); }
|
|
10
|
+
return vec4<f32>(c.rgb / c.a, c.a);
|
|
11
|
+
}
|
|
12
|
+
fn premul(c : vec4<f32>) -> vec4<f32> { return vec4<f32>(c.rgb * c.a, c.a); }
|
|
13
|
+
fn res() -> vec2<f32> { return vec2<f32>(textureDimensions(src)); }
|
|
14
|
+
/** Straight-alpha color of the layer at a uv (filtered). */
|
|
15
|
+
fn sampleS(uv : vec2<f32>) -> vec4<f32> { return straight(textureSampleLevel(src, samp, uv, 0.0)); }
|
|
16
|
+
/** Premultiplied color of the layer at a uv (filtered). */
|
|
17
|
+
fn sampleP(uv : vec2<f32>) -> vec4<f32> { return textureSampleLevel(src, samp, uv, 0.0); }
|
|
18
|
+
/** Straight-alpha color of the layer's texel at a pixel position (nearest). */
|
|
19
|
+
fn texelS(p : vec2<f32>) -> vec4<f32> {
|
|
20
|
+
let d = vec2<i32>(textureDimensions(src));
|
|
21
|
+
let q = clamp(vec2<i32>(floor(p)), vec2<i32>(0), d - vec2<i32>(1));
|
|
22
|
+
return straight(textureLoad(src, q, 0));
|
|
23
|
+
}
|
|
24
|
+
fn luma(c : vec3<f32>) -> f32 { return dot(c, vec3<f32>(0.2126, 0.7152, 0.0722)); }
|
|
25
|
+
fn hash12(p : vec2<f32>) -> f32 {
|
|
26
|
+
var p3 = fract(vec3<f32>(p.xyx) * 0.1031);
|
|
27
|
+
p3 += dot(p3, p3.yzx + 33.33);
|
|
28
|
+
return fract((p3.x + p3.y) * p3.z);
|
|
29
|
+
}
|
|
30
|
+
fn vnoise(p : vec2<f32>) -> f32 {
|
|
31
|
+
let i = floor(p);
|
|
32
|
+
let f = fract(p);
|
|
33
|
+
let u = f * f * (3.0 - 2.0 * f);
|
|
34
|
+
return mix(mix(hash12(i), hash12(i + vec2<f32>(1.0, 0.0)), u.x),
|
|
35
|
+
mix(hash12(i + vec2<f32>(0.0, 1.0)), hash12(i + vec2<f32>(1.0, 1.0)), u.x), u.y);
|
|
36
|
+
}
|
|
37
|
+
/** 8x8 ordered-dither threshold, 0..1. */
|
|
38
|
+
fn bayer8(p : vec2<f32>) -> f32 {
|
|
39
|
+
let x = u32(p.x) & 7u;
|
|
40
|
+
let y = u32(p.y) & 7u;
|
|
41
|
+
var v = 0u;
|
|
42
|
+
for (var k = 0u; k < 3u; k++) {
|
|
43
|
+
let bx = (x >> k) & 1u;
|
|
44
|
+
let by = (y >> k) & 1u;
|
|
45
|
+
let m = ((bx ^ by) << 1u) | by;
|
|
46
|
+
v += m * (1u << (2u * (2u - k)));
|
|
47
|
+
}
|
|
48
|
+
return (f32(v) + 0.5) / 64.0;
|
|
49
|
+
}
|
|
50
|
+
fn rot2(a : f32) -> mat2x2<f32> { let c = cos(a); let s = sin(a); return mat2x2<f32>(c, s, -s, c); }
|
|
51
|
+
@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {
|
|
52
|
+
let time = u.v[0].x;
|
|
53
|
+
let frame = u.v[0].y;
|
|
54
|
+
let levels = u.v[1].x;
|
|
55
|
+
let lineWidth = u.v[1].y;
|
|
56
|
+
let lineColor = u.v[2];
|
|
57
|
+
let fill = u32(u.v[1].z + 0.5);
|
|
58
|
+
let fillColor = u.v[3];
|
|
59
|
+
let smoothing = u.v[1].w;
|
|
60
|
+
|
|
61
|
+
let R = res();
|
|
62
|
+
let s = smoothing / R;
|
|
63
|
+
var lsum = 0.0;
|
|
64
|
+
for (var j = -1; j <= 1; j++) {
|
|
65
|
+
for (var i = -1; i <= 1; i++) {
|
|
66
|
+
lsum += luma(sampleS(in.uv + vec2<f32>(f32(i), f32(j)) * s).rgb);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
let h = lsum / 9.0 * levels;
|
|
70
|
+
let w = max(fwidth(h), 1e-4);
|
|
71
|
+
let d = abs(fract(h - 0.5) - 0.5) / w;
|
|
72
|
+
let line = 1.0 - smoothstep(lineWidth * 0.5, lineWidth * 0.5 + 1.0, d);
|
|
73
|
+
let c = sampleS(in.uv);
|
|
74
|
+
var base = vec4<f32>(c.rgb, c.a);
|
|
75
|
+
if (fill == 1u) { base = vec4<f32>(fillColor.rgb, 1.0); }
|
|
76
|
+
if (fill == 2u) { base = vec4<f32>(lineColor.rgb, 0.0); }
|
|
77
|
+
let rgb = mix(base.rgb, lineColor.rgb, line);
|
|
78
|
+
return premul(vec4<f32>(rgb, max(base.a, line * select(1.0, c.a, fill == 0u))));
|
|
79
|
+
}
|
|
80
|
+
`],F=R(r=>({layout:U(r,["uniform","texture","texture","sampler"],`${f}_layout`),pipelines:new Map,sampler:r.createSampler({magFilter:"linear",minFilter:"linear",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"})}));function j(r,e){let t=F(r),n=t.pipelines.get(e);return n||(n=$.map((p,o)=>{let l=r.createShaderModule({code:p,label:`${f}_${o}.wgsl`});return r.createRenderPipeline({label:`${f}_${o}`,layout:r.createPipelineLayout({bindGroupLayouts:[t.layout]}),vertex:{module:l,entryPoint:"vs"},fragment:{module:l,entryPoint:"fs",targets:[{format:e}]},primitive:{topology:"triangle-strip"}})}),t.pipelines.set(e,n)),n}function g(r,e){let t=typeof r=="number"?r:Number(r);return Number.isFinite(t)?t:e}function k(r){let e=r.trim().replace("#","");(e.length===3||e.length===4)&&(e=[...e].map(n=>n+n).join(""));let t=n=>Number.parseInt(e.slice(n,n+2),16)/255;return[t(0),t(2),t(4),e.length>=8?t(6):1]}function A(r,e,t,n){e.fill(0),e[0]=t,e[1]=n,e[4]=g(r.levels,14),e[5]=g(r.lineWidth,1.2),e.set(k(String(r.lineColor??"#2b1d0e")),8),e[6]=Math.max(0,["source","flat","none"].indexOf(String(r.fill??"source"))),e.set(k(String(r.fillColor??"#f3ead8")),12),e[7]=g(r.smoothing,2)}var C=async r=>{let{ctx:e,encoder:t,pass:n,targetTexture:p,targetWidth:o,targetHeight:l,props:i}=r,u=i.virtualMedia?.operation;if(u?.op!==f)return;let b=i.virtualMedia?.children?.[0];if(!b)return;n.end();let m=i.fps||30,s=Math.round(i.compositionFrame??i.frame??0),W=u.effect?.resolveUniforms?u.effect.resolveUniforms({frame:s,fps:m,time:s/m}):u,x=new Float32Array(D);A(W,x,s/m,s);let{texture:v}=await w(r,b),d=e.device,h=F(d),L=j(d,e.renderer.format),M=e.renderer.getTemporaryBuffer(x),a=v;for(let _ of L){let y=e.renderer.getTemporaryTexture(o,l,[v,a,p,...i.excludeTextures||[]]);T(t,y.createView(),_,[d.createBindGroup({layout:h.layout,entries:[{binding:0,resource:{buffer:M}},{binding:1,resource:v.createView()},{binding:2,resource:a.createView()},{binding:3,resource:h.sampler}]})]),a=y}G(r,a)};var q=P({WebGPURenderer:C});export{C as ContourWebGPURenderer,q as default};
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import{a as P,d as U,f as S,h as R,j as k,m as G}from"./chunk-ENKKLU7B.mjs";import"./chunk-6YJP57MZ.mjs";import{z as y}from"./chunk-63SFBHEH.mjs";import{e as s}from"./chunk-BVF64D6H.mjs";s();s();var f="Dither",$=16,A=[`struct U { v : array<vec4<f32>, 4> };
|
|
2
|
+
@group(0) @binding(0) var<uniform> u : U;
|
|
3
|
+
@group(0) @binding(1) var src : texture_2d<f32>;
|
|
4
|
+
@group(0) @binding(2) var prev : texture_2d<f32>;
|
|
5
|
+
@group(0) @binding(3) var samp : sampler;
|
|
6
|
+
${P}
|
|
7
|
+
|
|
8
|
+
fn straight(c : vec4<f32>) -> vec4<f32> {
|
|
9
|
+
if (c.a <= 0.0001) { return vec4<f32>(0.0); }
|
|
10
|
+
return vec4<f32>(c.rgb / c.a, c.a);
|
|
11
|
+
}
|
|
12
|
+
fn premul(c : vec4<f32>) -> vec4<f32> { return vec4<f32>(c.rgb * c.a, c.a); }
|
|
13
|
+
fn res() -> vec2<f32> { return vec2<f32>(textureDimensions(src)); }
|
|
14
|
+
/** Straight-alpha color of the layer at a uv (filtered). */
|
|
15
|
+
fn sampleS(uv : vec2<f32>) -> vec4<f32> { return straight(textureSampleLevel(src, samp, uv, 0.0)); }
|
|
16
|
+
/** Premultiplied color of the layer at a uv (filtered). */
|
|
17
|
+
fn sampleP(uv : vec2<f32>) -> vec4<f32> { return textureSampleLevel(src, samp, uv, 0.0); }
|
|
18
|
+
/** Straight-alpha color of the layer's texel at a pixel position (nearest). */
|
|
19
|
+
fn texelS(p : vec2<f32>) -> vec4<f32> {
|
|
20
|
+
let d = vec2<i32>(textureDimensions(src));
|
|
21
|
+
let q = clamp(vec2<i32>(floor(p)), vec2<i32>(0), d - vec2<i32>(1));
|
|
22
|
+
return straight(textureLoad(src, q, 0));
|
|
23
|
+
}
|
|
24
|
+
fn luma(c : vec3<f32>) -> f32 { return dot(c, vec3<f32>(0.2126, 0.7152, 0.0722)); }
|
|
25
|
+
fn hash12(p : vec2<f32>) -> f32 {
|
|
26
|
+
var p3 = fract(vec3<f32>(p.xyx) * 0.1031);
|
|
27
|
+
p3 += dot(p3, p3.yzx + 33.33);
|
|
28
|
+
return fract((p3.x + p3.y) * p3.z);
|
|
29
|
+
}
|
|
30
|
+
fn vnoise(p : vec2<f32>) -> f32 {
|
|
31
|
+
let i = floor(p);
|
|
32
|
+
let f = fract(p);
|
|
33
|
+
let u = f * f * (3.0 - 2.0 * f);
|
|
34
|
+
return mix(mix(hash12(i), hash12(i + vec2<f32>(1.0, 0.0)), u.x),
|
|
35
|
+
mix(hash12(i + vec2<f32>(0.0, 1.0)), hash12(i + vec2<f32>(1.0, 1.0)), u.x), u.y);
|
|
36
|
+
}
|
|
37
|
+
/** 8x8 ordered-dither threshold, 0..1. */
|
|
38
|
+
fn bayer8(p : vec2<f32>) -> f32 {
|
|
39
|
+
let x = u32(p.x) & 7u;
|
|
40
|
+
let y = u32(p.y) & 7u;
|
|
41
|
+
var v = 0u;
|
|
42
|
+
for (var k = 0u; k < 3u; k++) {
|
|
43
|
+
let bx = (x >> k) & 1u;
|
|
44
|
+
let by = (y >> k) & 1u;
|
|
45
|
+
let m = ((bx ^ by) << 1u) | by;
|
|
46
|
+
v += m * (1u << (2u * (2u - k)));
|
|
47
|
+
}
|
|
48
|
+
return (f32(v) + 0.5) / 64.0;
|
|
49
|
+
}
|
|
50
|
+
fn rot2(a : f32) -> mat2x2<f32> { let c = cos(a); let s = sin(a); return mat2x2<f32>(c, s, -s, c); }
|
|
51
|
+
@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {
|
|
52
|
+
let time = u.v[0].x;
|
|
53
|
+
let frame = u.v[0].y;
|
|
54
|
+
let mode = u32(u.v[1].x + 0.5);
|
|
55
|
+
let levels = u.v[1].y;
|
|
56
|
+
let scale = u.v[1].z;
|
|
57
|
+
let monochrome = u.v[1].w;
|
|
58
|
+
let dark = u.v[2];
|
|
59
|
+
let light = u.v[3];
|
|
60
|
+
|
|
61
|
+
let R = res();
|
|
62
|
+
let s = max(scale, 1.0);
|
|
63
|
+
let cellp = floor(in.uv * R / s);
|
|
64
|
+
let c = texelS(cellp * s + s * 0.5);
|
|
65
|
+
var t = bayer8(cellp);
|
|
66
|
+
if (mode == 1u) { t = hash12(cellp); }
|
|
67
|
+
if (mode == 2u) { t = clamp(length(fract(cellp / 4.0) - 0.5) * 1.414, 0.0, 1.0); }
|
|
68
|
+
let n = max(levels - 1.0, 1.0);
|
|
69
|
+
var rgb : vec3<f32>;
|
|
70
|
+
if (monochrome > 0.5) {
|
|
71
|
+
let q = clamp(floor(luma(c.rgb) * n + t) / n, 0.0, 1.0);
|
|
72
|
+
rgb = mix(dark.rgb, light.rgb, q);
|
|
73
|
+
} else {
|
|
74
|
+
rgb = clamp(floor(c.rgb * n + vec3<f32>(t)) / n, vec3<f32>(0.0), vec3<f32>(1.0));
|
|
75
|
+
}
|
|
76
|
+
return premul(vec4<f32>(rgb, c.a));
|
|
77
|
+
}
|
|
78
|
+
`],w=S(r=>({layout:U(r,["uniform","texture","texture","sampler"],`${f}_layout`),pipelines:new Map,sampler:r.createSampler({magFilter:"linear",minFilter:"linear",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"})}));function O(r,e){let t=w(r),n=t.pipelines.get(e);return n||(n=A.map((p,i)=>{let l=r.createShaderModule({code:p,label:`${f}_${i}.wgsl`});return r.createRenderPipeline({label:`${f}_${i}`,layout:r.createPipelineLayout({bindGroupLayouts:[t.layout]}),vertex:{module:l,entryPoint:"vs"},fragment:{module:l,entryPoint:"fs",targets:[{format:e}]},primitive:{topology:"triangle-strip"}})}),t.pipelines.set(e,n)),n}function T(r,e){let t=typeof r=="number"?r:Number(r);return Number.isFinite(t)?t:e}function F(r){let e=r.trim().replace("#","");(e.length===3||e.length===4)&&(e=[...e].map(n=>n+n).join(""));let t=n=>Number.parseInt(e.slice(n,n+2),16)/255;return[t(0),t(2),t(4),e.length>=8?t(6):1]}function V(r,e,t,n){e.fill(0),e[0]=t,e[1]=n,e[4]=Math.max(0,["bayer","noise","halftone"].indexOf(String(r.mode??"bayer"))),e[5]=T(r.levels,2),e[6]=T(r.scale,2),e[7]=r.monochrome===void 0||r.monochrome?1:0,e.set(F(String(r.dark??"#111111")),8),e.set(F(String(r.light??"#f2efe6")),12)}var L=async r=>{let{ctx:e,encoder:t,pass:n,targetTexture:p,targetWidth:i,targetHeight:l,props:o}=r,c=o.virtualMedia?.operation;if(c?.op!==f)return;let g=o.virtualMedia?.children?.[0];if(!g)return;n.end();let m=o.fps||30,u=Math.round(o.compositionFrame??o.frame??0),D=c.effect?.resolveUniforms?c.effect.resolveUniforms({frame:u,fps:m,time:u/m}):c,x=new Float32Array($);V(D,x,u/m,u);let{texture:v}=await R(r,g),d=e.device,b=w(d),M=O(d,e.renderer.format),_=e.renderer.getTemporaryBuffer(x),a=v;for(let N of M){let h=e.renderer.getTemporaryTexture(i,l,[v,a,p,...o.excludeTextures||[]]);G(t,h.createView(),N,[d.createBindGroup({layout:b.layout,entries:[{binding:0,resource:{buffer:_}},{binding:1,resource:v.createView()},{binding:2,resource:a.createView()},{binding:3,resource:b.sampler}]})]),a=h}k(r,a)};var I=y({WebGPURenderer:L});export{L as DitherWebGPURenderer,I as default};
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import{a as P,d as U,f as S,h as w,j as R,m as G}from"./chunk-ENKKLU7B.mjs";import"./chunk-6YJP57MZ.mjs";import{z as k}from"./chunk-63SFBHEH.mjs";import{e as l}from"./chunk-BVF64D6H.mjs";l();l();var p="OpArt",_=20,N=[`struct U { v : array<vec4<f32>, 5> };
|
|
2
|
+
@group(0) @binding(0) var<uniform> u : U;
|
|
3
|
+
@group(0) @binding(1) var src : texture_2d<f32>;
|
|
4
|
+
@group(0) @binding(2) var prev : texture_2d<f32>;
|
|
5
|
+
@group(0) @binding(3) var samp : sampler;
|
|
6
|
+
${P}
|
|
7
|
+
|
|
8
|
+
fn straight(c : vec4<f32>) -> vec4<f32> {
|
|
9
|
+
if (c.a <= 0.0001) { return vec4<f32>(0.0); }
|
|
10
|
+
return vec4<f32>(c.rgb / c.a, c.a);
|
|
11
|
+
}
|
|
12
|
+
fn premul(c : vec4<f32>) -> vec4<f32> { return vec4<f32>(c.rgb * c.a, c.a); }
|
|
13
|
+
fn res() -> vec2<f32> { return vec2<f32>(textureDimensions(src)); }
|
|
14
|
+
/** Straight-alpha color of the layer at a uv (filtered). */
|
|
15
|
+
fn sampleS(uv : vec2<f32>) -> vec4<f32> { return straight(textureSampleLevel(src, samp, uv, 0.0)); }
|
|
16
|
+
/** Premultiplied color of the layer at a uv (filtered). */
|
|
17
|
+
fn sampleP(uv : vec2<f32>) -> vec4<f32> { return textureSampleLevel(src, samp, uv, 0.0); }
|
|
18
|
+
/** Straight-alpha color of the layer's texel at a pixel position (nearest). */
|
|
19
|
+
fn texelS(p : vec2<f32>) -> vec4<f32> {
|
|
20
|
+
let d = vec2<i32>(textureDimensions(src));
|
|
21
|
+
let q = clamp(vec2<i32>(floor(p)), vec2<i32>(0), d - vec2<i32>(1));
|
|
22
|
+
return straight(textureLoad(src, q, 0));
|
|
23
|
+
}
|
|
24
|
+
fn luma(c : vec3<f32>) -> f32 { return dot(c, vec3<f32>(0.2126, 0.7152, 0.0722)); }
|
|
25
|
+
fn hash12(p : vec2<f32>) -> f32 {
|
|
26
|
+
var p3 = fract(vec3<f32>(p.xyx) * 0.1031);
|
|
27
|
+
p3 += dot(p3, p3.yzx + 33.33);
|
|
28
|
+
return fract((p3.x + p3.y) * p3.z);
|
|
29
|
+
}
|
|
30
|
+
fn vnoise(p : vec2<f32>) -> f32 {
|
|
31
|
+
let i = floor(p);
|
|
32
|
+
let f = fract(p);
|
|
33
|
+
let u = f * f * (3.0 - 2.0 * f);
|
|
34
|
+
return mix(mix(hash12(i), hash12(i + vec2<f32>(1.0, 0.0)), u.x),
|
|
35
|
+
mix(hash12(i + vec2<f32>(0.0, 1.0)), hash12(i + vec2<f32>(1.0, 1.0)), u.x), u.y);
|
|
36
|
+
}
|
|
37
|
+
/** 8x8 ordered-dither threshold, 0..1. */
|
|
38
|
+
fn bayer8(p : vec2<f32>) -> f32 {
|
|
39
|
+
let x = u32(p.x) & 7u;
|
|
40
|
+
let y = u32(p.y) & 7u;
|
|
41
|
+
var v = 0u;
|
|
42
|
+
for (var k = 0u; k < 3u; k++) {
|
|
43
|
+
let bx = (x >> k) & 1u;
|
|
44
|
+
let by = (y >> k) & 1u;
|
|
45
|
+
let m = ((bx ^ by) << 1u) | by;
|
|
46
|
+
v += m * (1u << (2u * (2u - k)));
|
|
47
|
+
}
|
|
48
|
+
return (f32(v) + 0.5) / 64.0;
|
|
49
|
+
}
|
|
50
|
+
fn rot2(a : f32) -> mat2x2<f32> { let c = cos(a); let s = sin(a); return mat2x2<f32>(c, s, -s, c); }
|
|
51
|
+
@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {
|
|
52
|
+
let time = u.v[0].x;
|
|
53
|
+
let frame = u.v[0].y;
|
|
54
|
+
let pattern = u32(u.v[1].x + 0.5);
|
|
55
|
+
let frequency = u.v[1].y;
|
|
56
|
+
let angle = u.v[1].z;
|
|
57
|
+
let warp = u.v[1].w;
|
|
58
|
+
let source = u.v[2].x;
|
|
59
|
+
let colorA = u.v[3];
|
|
60
|
+
let colorB = u.v[4];
|
|
61
|
+
|
|
62
|
+
let R = res();
|
|
63
|
+
let c = sampleS(in.uv);
|
|
64
|
+
let l = luma(c.rgb) * c.a + (1.0 - c.a);
|
|
65
|
+
var p = (in.uv - 0.5) * vec2<f32>(R.x / R.y, 1.0);
|
|
66
|
+
p = rot2(radians(angle)) * p;
|
|
67
|
+
var v = p.y * frequency;
|
|
68
|
+
if (pattern == 1u) { v = length(p) * frequency; }
|
|
69
|
+
if (pattern == 3u) { v = p.y * frequency + sin(p.x * frequency * 0.25) * 2.0; }
|
|
70
|
+
v += (1.0 - l) * warp * 3.0;
|
|
71
|
+
var v2 = p.x * frequency + (1.0 - l) * warp * 3.0;
|
|
72
|
+
let duty = mix(0.5, clamp(1.0 - l, 0.05, 0.95), source);
|
|
73
|
+
let e = max(fwidth(v), 1e-4);
|
|
74
|
+
let e2 = max(fwidth(v2), 1e-4);
|
|
75
|
+
let s = fract(v);
|
|
76
|
+
var ink = smoothstep(duty + e, duty - e, s) * smoothstep(-e, e, s);
|
|
77
|
+
if (pattern == 2u) {
|
|
78
|
+
let s2 = fract(v2);
|
|
79
|
+
let a = step(0.5, s);
|
|
80
|
+
let b = step(0.5, s2);
|
|
81
|
+
ink = abs(a - b);
|
|
82
|
+
ink = mix(ink, 1.0 - ink, step(duty, 0.5) * 0.0);
|
|
83
|
+
let edgeA = smoothstep(0.0, e, min(s, 1.0 - s)) * smoothstep(0.0, e, abs(s - 0.5));
|
|
84
|
+
let edgeB = smoothstep(0.0, e2, min(s2, 1.0 - s2)) * smoothstep(0.0, e2, abs(s2 - 0.5));
|
|
85
|
+
ink = mix(0.5, ink, edgeA * edgeB);
|
|
86
|
+
}
|
|
87
|
+
return vec4<f32>(mix(colorB.rgb, colorA.rgb, ink), 1.0);
|
|
88
|
+
}
|
|
89
|
+
`],A=S(r=>({layout:U(r,["uniform","texture","texture","sampler"],`${p}_layout`),pipelines:new Map,sampler:r.createSampler({magFilter:"linear",minFilter:"linear",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"})}));function W(r,e){let t=A(r),n=t.pipelines.get(e);return n||(n=N.map((m,i)=>{let s=r.createShaderModule({code:m,label:`${p}_${i}.wgsl`});return r.createRenderPipeline({label:`${p}_${i}`,layout:r.createPipelineLayout({bindGroupLayouts:[t.layout]}),vertex:{module:s,entryPoint:"vs"},fragment:{module:s,entryPoint:"fs",targets:[{format:e}]},primitive:{topology:"triangle-strip"}})}),t.pipelines.set(e,n)),n}function f(r,e){let t=typeof r=="number"?r:Number(r);return Number.isFinite(t)?t:e}function T(r){let e=r.trim().replace("#","");(e.length===3||e.length===4)&&(e=[...e].map(n=>n+n).join(""));let t=n=>Number.parseInt(e.slice(n,n+2),16)/255;return[t(0),t(2),t(4),e.length>=8?t(6):1]}function D(r,e,t,n){e.fill(0),e[0]=t,e[1]=n,e[4]=Math.max(0,["stripes","rings","checker","waves"].indexOf(String(r.pattern??"stripes"))),e[5]=f(r.frequency,48),e[6]=f(r.angle,0),e[7]=f(r.warp,.6),e[8]=f(r.source,1),e.set(T(String(r.colorA??"#0a0a0a")),12),e.set(T(String(r.colorB??"#f5f5f5")),16)}var F=async r=>{let{ctx:e,encoder:t,pass:n,targetTexture:m,targetWidth:i,targetHeight:s,props:o}=r,u=o.virtualMedia?.operation;if(u?.op!==p)return;let g=o.virtualMedia?.children?.[0];if(!g)return;n.end();let v=o.fps||30,a=Math.round(o.compositionFrame??o.frame??0),L=u.effect?.resolveUniforms?u.effect.resolveUniforms({frame:a,fps:v,time:a/v}):u,y=new Float32Array(_);D(L,y,a/v,a);let{texture:d}=await w(r,g),x=e.device,b=A(x),q=W(x,e.renderer.format),M=e.renderer.getTemporaryBuffer(y),c=d;for(let B of q){let h=e.renderer.getTemporaryTexture(i,s,[d,c,m,...o.excludeTextures||[]]);G(t,h.createView(),B,[x.createBindGroup({layout:b.layout,entries:[{binding:0,resource:{buffer:M}},{binding:1,resource:d.createView()},{binding:2,resource:c.createView()},{binding:3,resource:b.sampler}]})]),c=h}R(r,c)};var I=k({WebGPURenderer:F});export{F as OpArtWebGPURenderer,I as default};
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import{a as P,d as R,f as U,h as G,j as S,m as T}from"./chunk-ENKKLU7B.mjs";import"./chunk-6YJP57MZ.mjs";import{z as h}from"./chunk-63SFBHEH.mjs";import{e as s}from"./chunk-BVF64D6H.mjs";s();s();var f="RGBSplit",D=8,N=[`struct U { v : array<vec4<f32>, 2> };
|
|
2
|
+
@group(0) @binding(0) var<uniform> u : U;
|
|
3
|
+
@group(0) @binding(1) var src : texture_2d<f32>;
|
|
4
|
+
@group(0) @binding(2) var prev : texture_2d<f32>;
|
|
5
|
+
@group(0) @binding(3) var samp : sampler;
|
|
6
|
+
${P}
|
|
7
|
+
|
|
8
|
+
fn straight(c : vec4<f32>) -> vec4<f32> {
|
|
9
|
+
if (c.a <= 0.0001) { return vec4<f32>(0.0); }
|
|
10
|
+
return vec4<f32>(c.rgb / c.a, c.a);
|
|
11
|
+
}
|
|
12
|
+
fn premul(c : vec4<f32>) -> vec4<f32> { return vec4<f32>(c.rgb * c.a, c.a); }
|
|
13
|
+
fn res() -> vec2<f32> { return vec2<f32>(textureDimensions(src)); }
|
|
14
|
+
/** Straight-alpha color of the layer at a uv (filtered). */
|
|
15
|
+
fn sampleS(uv : vec2<f32>) -> vec4<f32> { return straight(textureSampleLevel(src, samp, uv, 0.0)); }
|
|
16
|
+
/** Premultiplied color of the layer at a uv (filtered). */
|
|
17
|
+
fn sampleP(uv : vec2<f32>) -> vec4<f32> { return textureSampleLevel(src, samp, uv, 0.0); }
|
|
18
|
+
/** Straight-alpha color of the layer's texel at a pixel position (nearest). */
|
|
19
|
+
fn texelS(p : vec2<f32>) -> vec4<f32> {
|
|
20
|
+
let d = vec2<i32>(textureDimensions(src));
|
|
21
|
+
let q = clamp(vec2<i32>(floor(p)), vec2<i32>(0), d - vec2<i32>(1));
|
|
22
|
+
return straight(textureLoad(src, q, 0));
|
|
23
|
+
}
|
|
24
|
+
fn luma(c : vec3<f32>) -> f32 { return dot(c, vec3<f32>(0.2126, 0.7152, 0.0722)); }
|
|
25
|
+
fn hash12(p : vec2<f32>) -> f32 {
|
|
26
|
+
var p3 = fract(vec3<f32>(p.xyx) * 0.1031);
|
|
27
|
+
p3 += dot(p3, p3.yzx + 33.33);
|
|
28
|
+
return fract((p3.x + p3.y) * p3.z);
|
|
29
|
+
}
|
|
30
|
+
fn vnoise(p : vec2<f32>) -> f32 {
|
|
31
|
+
let i = floor(p);
|
|
32
|
+
let f = fract(p);
|
|
33
|
+
let u = f * f * (3.0 - 2.0 * f);
|
|
34
|
+
return mix(mix(hash12(i), hash12(i + vec2<f32>(1.0, 0.0)), u.x),
|
|
35
|
+
mix(hash12(i + vec2<f32>(0.0, 1.0)), hash12(i + vec2<f32>(1.0, 1.0)), u.x), u.y);
|
|
36
|
+
}
|
|
37
|
+
/** 8x8 ordered-dither threshold, 0..1. */
|
|
38
|
+
fn bayer8(p : vec2<f32>) -> f32 {
|
|
39
|
+
let x = u32(p.x) & 7u;
|
|
40
|
+
let y = u32(p.y) & 7u;
|
|
41
|
+
var v = 0u;
|
|
42
|
+
for (var k = 0u; k < 3u; k++) {
|
|
43
|
+
let bx = (x >> k) & 1u;
|
|
44
|
+
let by = (y >> k) & 1u;
|
|
45
|
+
let m = ((bx ^ by) << 1u) | by;
|
|
46
|
+
v += m * (1u << (2u * (2u - k)));
|
|
47
|
+
}
|
|
48
|
+
return (f32(v) + 0.5) / 64.0;
|
|
49
|
+
}
|
|
50
|
+
fn rot2(a : f32) -> mat2x2<f32> { let c = cos(a); let s = sin(a); return mat2x2<f32>(c, s, -s, c); }
|
|
51
|
+
@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {
|
|
52
|
+
let time = u.v[0].x;
|
|
53
|
+
let frame = u.v[0].y;
|
|
54
|
+
let amount = u.v[1].x;
|
|
55
|
+
let angle = u.v[1].y;
|
|
56
|
+
let radial = u.v[1].z;
|
|
57
|
+
|
|
58
|
+
let R = res();
|
|
59
|
+
let a = radians(angle);
|
|
60
|
+
var d = vec2<f32>(cos(a), sin(a)) * amount / R;
|
|
61
|
+
if (radial > 0.5) { d = (in.uv - 0.5) * 2.0 * amount / R; }
|
|
62
|
+
let cr = sampleP(in.uv + d);
|
|
63
|
+
let cg = sampleP(in.uv);
|
|
64
|
+
let cb = sampleP(in.uv - d);
|
|
65
|
+
return vec4<f32>(cr.r, cg.g, cb.b, max(max(cr.a, cg.a), cb.a));
|
|
66
|
+
}
|
|
67
|
+
`],w=U(e=>({layout:R(e,["uniform","texture","texture","sampler"],`${f}_layout`),pipelines:new Map,sampler:e.createSampler({magFilter:"linear",minFilter:"linear",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"})}));function $(e,r){let t=w(e),n=t.pipelines.get(r);return n||(n=N.map((p,a)=>{let o=e.createShaderModule({code:p,label:`${f}_${a}.wgsl`});return e.createRenderPipeline({label:`${f}_${a}`,layout:e.createPipelineLayout({bindGroupLayouts:[t.layout]}),vertex:{module:o,entryPoint:"vs"},fragment:{module:o,entryPoint:"fs",targets:[{format:r}]},primitive:{topology:"triangle-strip"}})}),t.pipelines.set(r,n)),n}function k(e,r){let t=typeof e=="number"?e:Number(e);return Number.isFinite(t)?t:r}function A(e,r,t,n){r.fill(0),r[0]=t,r[1]=n,r[4]=k(e.amount,8),r[5]=k(e.angle,0),r[6]=e.radial===void 0?0:e.radial?1:0}var F=async e=>{let{ctx:r,encoder:t,pass:n,targetTexture:p,targetWidth:a,targetHeight:o,props:i}=e,c=i.virtualMedia?.operation;if(c?.op!==f)return;let x=i.virtualMedia?.children?.[0];if(!x)return;n.end();let d=i.fps||30,u=Math.round(i.compositionFrame??i.frame??0),L=c.effect?.resolveUniforms?c.effect.resolveUniforms({frame:u,fps:d,time:u/d}):c,g=new Float32Array(D);A(L,g,u/d,u);let{texture:m}=await G(e,x),v=r.device,b=w(v),M=$(v,r.renderer.format),_=r.renderer.getTemporaryBuffer(g),l=m;for(let W of M){let y=r.renderer.getTemporaryTexture(a,o,[m,l,p,...i.excludeTextures||[]]);T(t,y.createView(),W,[v.createBindGroup({layout:b.layout,entries:[{binding:0,resource:{buffer:_}},{binding:1,resource:m.createView()},{binding:2,resource:l.createView()},{binding:3,resource:b.sampler}]})]),l=y}S(e,l)};var C=h({WebGPURenderer:F});export{F as RGBSplitWebGPURenderer,C as default};
|