framefields 2.0.2
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/LICENCE +202 -0
- package/README.md +740 -0
- package/dist/audio/index.d.mts +5 -0
- package/dist/audio/index.mjs +14 -0
- package/dist/audio-Dvwwz8xU.d.mts +37 -0
- package/dist/audio-Dvwwz8xU.d.mts.map +1 -0
- package/dist/audio-TAvPwzLR.mjs +214 -0
- package/dist/audio-TAvPwzLR.mjs.map +1 -0
- package/dist/audio-x28ZgQBP.mjs +85 -0
- package/dist/audio-x28ZgQBP.mjs.map +1 -0
- package/dist/chunk-GMkBE123.mjs +47 -0
- package/dist/client-C74hb7fy.mjs +66 -0
- package/dist/client-C74hb7fy.mjs.map +1 -0
- package/dist/dist-1iUYuPct.mjs +1859 -0
- package/dist/dist-1iUYuPct.mjs.map +1 -0
- package/dist/dist-Bx6J0VcM.mjs +1859 -0
- package/dist/dist-Bx6J0VcM.mjs.map +1 -0
- package/dist/dist-C_hjvkdN.mjs +2220 -0
- package/dist/dist-C_hjvkdN.mjs.map +1 -0
- package/dist/dist-DKm2IyEJ.mjs +94 -0
- package/dist/dist-DKm2IyEJ.mjs.map +1 -0
- package/dist/dist-cjs-B5EVqDFp.mjs +85 -0
- package/dist/dist-cjs-B5EVqDFp.mjs.map +1 -0
- package/dist/dist-cjs-BGJkdexX.mjs +437 -0
- package/dist/dist-cjs-BGJkdexX.mjs.map +1 -0
- package/dist/dist-cjs-BKmGCgtm.mjs +9069 -0
- package/dist/dist-cjs-BKmGCgtm.mjs.map +1 -0
- package/dist/dist-cjs-BUc0_kg-.mjs +1091 -0
- package/dist/dist-cjs-BUc0_kg-.mjs.map +1 -0
- package/dist/dist-cjs-BUwe2XhR.mjs +153 -0
- package/dist/dist-cjs-BUwe2XhR.mjs.map +1 -0
- package/dist/dist-cjs-BWgoUCXJ.mjs +137 -0
- package/dist/dist-cjs-BWgoUCXJ.mjs.map +1 -0
- package/dist/dist-cjs-CmZEMtO6.mjs +6 -0
- package/dist/dist-cjs-D7kEM-Mj.mjs +181 -0
- package/dist/dist-cjs-D7kEM-Mj.mjs.map +1 -0
- package/dist/dist-cjs-DFUmy89O.mjs +48 -0
- package/dist/dist-cjs-DFUmy89O.mjs.map +1 -0
- package/dist/dist-cjs-Df7144zM.mjs +209 -0
- package/dist/dist-cjs-Df7144zM.mjs.map +1 -0
- package/dist/dist-cjs-DgxjcvBN.mjs +98 -0
- package/dist/dist-cjs-DgxjcvBN.mjs.map +1 -0
- package/dist/dist-cjs-DsMdld8l.mjs +5015 -0
- package/dist/dist-cjs-DsMdld8l.mjs.map +1 -0
- package/dist/dist-cjs-Dzs5P3K0.mjs +51 -0
- package/dist/dist-cjs-Dzs5P3K0.mjs.map +1 -0
- package/dist/dist-cjs-ECMuIF57.mjs +323 -0
- package/dist/dist-cjs-ECMuIF57.mjs.map +1 -0
- package/dist/dist-cjs-lYvO8aDo.mjs +64 -0
- package/dist/dist-cjs-lYvO8aDo.mjs.map +1 -0
- package/dist/dist-cjs-qEJrwjGk.mjs +66 -0
- package/dist/dist-cjs-qEJrwjGk.mjs.map +1 -0
- package/dist/dist-cjs-x5cwlqA5.mjs +43 -0
- package/dist/dist-cjs-x5cwlqA5.mjs.map +1 -0
- package/dist/dist-gjHmorxL.mjs +27479 -0
- package/dist/dist-gjHmorxL.mjs.map +1 -0
- package/dist/effects/index.d.mts +5 -0
- package/dist/effects/index.mjs +35 -0
- package/dist/effects-CHWORCYd.mjs +811 -0
- package/dist/effects-CHWORCYd.mjs.map +1 -0
- package/dist/event-streams-D-APZ7Ke.mjs +204 -0
- package/dist/event-streams-D-APZ7Ke.mjs.map +1 -0
- package/dist/fonts/index.d.mts +2 -0
- package/dist/fonts/index.mjs +3 -0
- package/dist/fonts-DrGTBJJk.mjs +188 -0
- package/dist/fonts-DrGTBJJk.mjs.map +1 -0
- package/dist/index-B0BNPEoH.d.mts +2117 -0
- package/dist/index-B0BNPEoH.d.mts.map +1 -0
- package/dist/index-BMVVmc4G.d.mts +72 -0
- package/dist/index-BMVVmc4G.d.mts.map +1 -0
- package/dist/index-D1ZsMpke.d.mts +264 -0
- package/dist/index-D1ZsMpke.d.mts.map +1 -0
- package/dist/index-D2jDC7O5.d.mts +3643 -0
- package/dist/index-D2jDC7O5.d.mts.map +1 -0
- package/dist/index-D2wJqSl5.d.mts +114 -0
- package/dist/index-D2wJqSl5.d.mts.map +1 -0
- package/dist/index-DKFGNyMB.d.mts +309 -0
- package/dist/index-DKFGNyMB.d.mts.map +1 -0
- package/dist/index-DiSKzDGR.d.mts +65 -0
- package/dist/index-DiSKzDGR.d.mts.map +1 -0
- package/dist/index.d.mts +4425 -0
- package/dist/index.d.mts.map +1 -0
- package/dist/index.mjs +2623 -0
- package/dist/index.mjs.map +1 -0
- package/dist/package-C58KmGKw.mjs +6 -0
- package/dist/package-C58KmGKw.mjs.map +1 -0
- package/dist/preview/index.d.mts +90 -0
- package/dist/preview/index.d.mts.map +1 -0
- package/dist/preview/index.mjs +15 -0
- package/dist/preview-engine/audio.mjs +1 -0
- package/dist/preview-engine/child_process-AIL2NBWS.mjs +1 -0
- package/dist/preview-engine/chunk-24P6DAB3.mjs +1 -0
- package/dist/preview-engine/chunk-37EFVZWT.mjs +1 -0
- package/dist/preview-engine/chunk-3O5OKR6D.mjs +223 -0
- package/dist/preview-engine/chunk-47VT677S.mjs +8 -0
- package/dist/preview-engine/chunk-4BEJJKEU.mjs +315 -0
- package/dist/preview-engine/chunk-4GEWSUX5.mjs +1 -0
- package/dist/preview-engine/chunk-55CCFPUX.mjs +237 -0
- package/dist/preview-engine/chunk-5JD65JSJ.mjs +110 -0
- package/dist/preview-engine/chunk-5UP7FSGT.mjs +294 -0
- package/dist/preview-engine/chunk-5XDHHOF2.mjs +367 -0
- package/dist/preview-engine/chunk-6YJP57MZ.mjs +729 -0
- package/dist/preview-engine/chunk-6ZOXGAYA.mjs +112 -0
- package/dist/preview-engine/chunk-AOLAHYVV.mjs +529 -0
- package/dist/preview-engine/chunk-B6PLCMBM.mjs +1 -0
- package/dist/preview-engine/chunk-BJKH76OM.mjs +264 -0
- package/dist/preview-engine/chunk-BUIQ5TUH.mjs +104 -0
- package/dist/preview-engine/chunk-BVF64D6H.mjs +1 -0
- package/dist/preview-engine/chunk-CA5N7JRZ.mjs +138 -0
- package/dist/preview-engine/chunk-CNSHAFEA.mjs +1 -0
- package/dist/preview-engine/chunk-CURR5X7D.mjs +1 -0
- package/dist/preview-engine/chunk-CVGM2U4J.mjs +47 -0
- package/dist/preview-engine/chunk-CYY366IE.mjs +1 -0
- package/dist/preview-engine/chunk-D5PHI6ET.mjs +109 -0
- package/dist/preview-engine/chunk-D7MZHP2Y.mjs +275 -0
- package/dist/preview-engine/chunk-DPPH3NK2.mjs +182 -0
- package/dist/preview-engine/chunk-DPST2XLC.mjs +418 -0
- package/dist/preview-engine/chunk-DRLEOHN5.mjs +1 -0
- package/dist/preview-engine/chunk-EDIZNO3P.mjs +1 -0
- package/dist/preview-engine/chunk-EHIIT4ZR.mjs +52 -0
- package/dist/preview-engine/chunk-FKZ4XXPE.mjs +1 -0
- package/dist/preview-engine/chunk-G3HW4VER.mjs +60 -0
- package/dist/preview-engine/chunk-G76HSKOS.mjs +184 -0
- package/dist/preview-engine/chunk-GYG2IIBR.mjs +1 -0
- package/dist/preview-engine/chunk-H2F5NVQ6.mjs +63 -0
- package/dist/preview-engine/chunk-H5BPCY7N.mjs +188 -0
- package/dist/preview-engine/chunk-HAXK42HG.mjs +997 -0
- package/dist/preview-engine/chunk-HXMDPMLB.mjs +1 -0
- package/dist/preview-engine/chunk-HYBAPT6I.mjs +1 -0
- package/dist/preview-engine/chunk-I4FH6HYU.mjs +73 -0
- package/dist/preview-engine/chunk-IYVN2QEL.mjs +1 -0
- package/dist/preview-engine/chunk-JPXQPP6J.mjs +1 -0
- package/dist/preview-engine/chunk-JWNHTRED.mjs +164 -0
- package/dist/preview-engine/chunk-KZOLCZIV.mjs +103 -0
- package/dist/preview-engine/chunk-L62MRHGZ.mjs +89 -0
- package/dist/preview-engine/chunk-LEEZXHQO.mjs +117 -0
- package/dist/preview-engine/chunk-LKYN3BM2.mjs +1 -0
- package/dist/preview-engine/chunk-LP3EP33S.mjs +610 -0
- package/dist/preview-engine/chunk-M2GRYRLM.mjs +111 -0
- package/dist/preview-engine/chunk-MC7TZZLD.mjs +134 -0
- package/dist/preview-engine/chunk-MT2DZQHO.mjs +1 -0
- package/dist/preview-engine/chunk-MTJHQATU.mjs +1 -0
- package/dist/preview-engine/chunk-N4LHIPHZ.mjs +340 -0
- package/dist/preview-engine/chunk-N4PWLBZ7.mjs +5 -0
- package/dist/preview-engine/chunk-NQZKBFC6.mjs +40 -0
- package/dist/preview-engine/chunk-NWRSVVTF.mjs +186 -0
- package/dist/preview-engine/chunk-P3HBP725.mjs +1 -0
- package/dist/preview-engine/chunk-PIAJWALT.mjs +1 -0
- package/dist/preview-engine/chunk-PJ3DVG45.mjs +1 -0
- package/dist/preview-engine/chunk-QP2NI4XD.mjs +82 -0
- package/dist/preview-engine/chunk-SA3JUR6D.mjs +52 -0
- package/dist/preview-engine/chunk-SRT2OCQW.mjs +1 -0
- package/dist/preview-engine/chunk-SWD76532.mjs +98 -0
- package/dist/preview-engine/chunk-SXX7HX34.mjs +191 -0
- package/dist/preview-engine/chunk-SZ7YRPKO.mjs +3 -0
- package/dist/preview-engine/chunk-TMRLZV5X.mjs +1 -0
- package/dist/preview-engine/chunk-U446SQP3.mjs +292 -0
- package/dist/preview-engine/chunk-UDNCEHUI.mjs +141 -0
- package/dist/preview-engine/chunk-V3H7WWOT.mjs +271 -0
- package/dist/preview-engine/chunk-V7ZVVUQU.mjs +108 -0
- package/dist/preview-engine/chunk-VJGK7MLJ.mjs +3 -0
- package/dist/preview-engine/chunk-VSSB73UU.mjs +58 -0
- package/dist/preview-engine/chunk-VXUJWPIK.mjs +1 -0
- package/dist/preview-engine/chunk-XD4GKD6H.mjs +5 -0
- package/dist/preview-engine/chunk-XKO4RYKN.mjs +3 -0
- package/dist/preview-engine/chunk-XOEEGC4Z.mjs +1 -0
- package/dist/preview-engine/chunk-YAQFFQPG.mjs +1 -0
- package/dist/preview-engine/chunk-YKMBRUAE.mjs +1 -0
- package/dist/preview-engine/chunk-YSTLMWCG.mjs +1 -0
- package/dist/preview-engine/chunk-Z4ERCLNF.mjs +1 -0
- package/dist/preview-engine/chunk-ZEYUXJIV.mjs +1 -0
- package/dist/preview-engine/chunk-ZX6APG6E.mjs +117 -0
- package/dist/preview-engine/effects.mjs +1 -0
- package/dist/preview-engine/esbuild-GWV7CM7D.mjs +1 -0
- package/dist/preview-engine/fonts.mjs +1 -0
- package/dist/preview-engine/framefields.mjs +1959 -0
- package/dist/preview-engine/onnxruntime-node-56GSZEH3.mjs +1 -0
- package/dist/preview-engine/player.mjs +155 -0
- package/dist/preview-engine/renderers-2AUSIYZN.mjs +1 -0
- package/dist/preview-engine/renderers-2QN6KZJP.mjs +1 -0
- package/dist/preview-engine/renderers-32SKW7ML.mjs +1 -0
- package/dist/preview-engine/renderers-5QYK6766.mjs +1 -0
- package/dist/preview-engine/renderers-6BJA6MSU.mjs +251 -0
- package/dist/preview-engine/renderers-6QAF3LQ2.mjs +1 -0
- package/dist/preview-engine/renderers-7AO5746S.mjs +296 -0
- package/dist/preview-engine/renderers-AFYKNM6N.mjs +1 -0
- package/dist/preview-engine/renderers-AGMH5CRH.mjs +1 -0
- package/dist/preview-engine/renderers-AHSGP6LY.mjs +126 -0
- package/dist/preview-engine/renderers-ASTBICLA.mjs +1 -0
- package/dist/preview-engine/renderers-BHVPLYNN.mjs +1 -0
- package/dist/preview-engine/renderers-D7PVQFVU.mjs +1 -0
- package/dist/preview-engine/renderers-DB4ABTNA.mjs +1 -0
- package/dist/preview-engine/renderers-F2NFJI5L.mjs +1 -0
- package/dist/preview-engine/renderers-FI7YHNLY.mjs +1 -0
- package/dist/preview-engine/renderers-GBHULMPH.mjs +1 -0
- package/dist/preview-engine/renderers-GUKQUMGG.mjs +55 -0
- package/dist/preview-engine/renderers-HGT7QDY3.mjs +1 -0
- package/dist/preview-engine/renderers-HOYLA7ZK.mjs +1 -0
- package/dist/preview-engine/renderers-KKI2D3MZ.mjs +1 -0
- package/dist/preview-engine/renderers-KRAJNV4E.mjs +1 -0
- package/dist/preview-engine/renderers-KUGZKSVE.mjs +1 -0
- package/dist/preview-engine/renderers-L2EQQIOC.mjs +1 -0
- package/dist/preview-engine/renderers-LK3NRMGR.mjs +1 -0
- package/dist/preview-engine/renderers-LX654SZ3.mjs +1 -0
- package/dist/preview-engine/renderers-MCFQFYEL.mjs +1 -0
- package/dist/preview-engine/renderers-O6HOYIPS.mjs +1 -0
- package/dist/preview-engine/renderers-OEVXCGE2.mjs +1 -0
- package/dist/preview-engine/renderers-QVD6C4CS.mjs +1 -0
- package/dist/preview-engine/renderers-R3XEYD5V.mjs +248 -0
- package/dist/preview-engine/renderers-RBFWJWVM.mjs +1 -0
- package/dist/preview-engine/renderers-RX3VLVLO.mjs +1 -0
- package/dist/preview-engine/renderers-SM6JP64K.mjs +1 -0
- package/dist/preview-engine/renderers-TKMAATVS.mjs +1 -0
- package/dist/preview-engine/renderers-UGZUPONY.mjs +1 -0
- package/dist/preview-engine/renderers-UTFXZE3G.mjs +1 -0
- package/dist/preview-engine/renderers-UWPH7HBH.mjs +1 -0
- package/dist/preview-engine/renderers-UZGECFVO.mjs +1 -0
- package/dist/preview-engine/renderers-VGU3LNLT.mjs +1 -0
- package/dist/preview-engine/renderers-W3VVM5HB.mjs +1 -0
- package/dist/preview-engine/renderers-WJUTT5BB.mjs +1 -0
- package/dist/preview-engine/renderers-XA2M4YXK.mjs +1 -0
- package/dist/preview-engine/renderers-XIHRFEFQ.mjs +1 -0
- package/dist/preview-engine/renderers-XJTA5MFG.mjs +1 -0
- package/dist/preview-engine/renderers-XLTY5APF.mjs +1 -0
- package/dist/preview-engine/renderers-XZ3VXFGZ.mjs +1 -0
- package/dist/preview-engine/renderers-YKUQUCTO.mjs +124 -0
- package/dist/preview-engine/renderers-YVN3EIOP.mjs +1 -0
- package/dist/preview-engine/renderers-YWRP23SZ.mjs +125 -0
- package/dist/preview-engine/renderers-ZPWOUWZJ.mjs +120 -0
- package/dist/preview-engine/resvg-js-VMU4A77S.mjs +1 -0
- package/dist/preview-engine/server-utils-2FAIV45N.mjs +1 -0
- package/dist/preview-engine/sharp-V6ZTBNDW.mjs +1 -0
- package/dist/preview-engine/shims/fs-promises.mjs +1 -0
- package/dist/preview-engine/shims/fs.mjs +1 -0
- package/dist/preview-engine/shims/module.mjs +1 -0
- package/dist/preview-engine/shims/os.mjs +1 -0
- package/dist/preview-engine/shims/path.mjs +1 -0
- package/dist/preview-engine/shims/url.mjs +1 -0
- package/dist/preview-engine/signals.mjs +1 -0
- package/dist/preview-engine/webgpu-NSSANM4F.mjs +1 -0
- package/dist/preview-uQM210iy.mjs +2149 -0
- package/dist/preview-uQM210iy.mjs.map +1 -0
- package/dist/program-Dl510wmI.mjs +5183 -0
- package/dist/program-Dl510wmI.mjs.map +1 -0
- package/dist/renderer/index.d.mts +3 -0
- package/dist/renderer/index.mjs +6 -0
- package/dist/renderer-3BNskNuJ.mjs +3 -0
- package/dist/renderer-7DOcIxFG.mjs +288 -0
- package/dist/renderer-7DOcIxFG.mjs.map +1 -0
- package/dist/renderer-9dHlMQGX.mjs +3 -0
- package/dist/renderer-B1CvhW4p.mjs +677 -0
- package/dist/renderer-B1CvhW4p.mjs.map +1 -0
- package/dist/renderer-B2XzjK0z.mjs +3 -0
- package/dist/renderer-B80s47yo.mjs +166 -0
- package/dist/renderer-B80s47yo.mjs.map +1 -0
- package/dist/renderer-B9-QSJcG.mjs +479 -0
- package/dist/renderer-B9-QSJcG.mjs.map +1 -0
- package/dist/renderer-BAQmR0Zo.mjs +3 -0
- package/dist/renderer-BDLnExoP.mjs +127 -0
- package/dist/renderer-BDLnExoP.mjs.map +1 -0
- package/dist/renderer-BGXU6vcW.mjs +270 -0
- package/dist/renderer-BGXU6vcW.mjs.map +1 -0
- package/dist/renderer-BGvORwkQ.mjs +3 -0
- package/dist/renderer-BLikd6BK.mjs +3 -0
- package/dist/renderer-BMovYRoR.mjs +3 -0
- package/dist/renderer-BQHbp-Sp.mjs +243 -0
- package/dist/renderer-BQHbp-Sp.mjs.map +1 -0
- package/dist/renderer-BREIjsUU.mjs +252 -0
- package/dist/renderer-BREIjsUU.mjs.map +1 -0
- package/dist/renderer-BSbTJBWc.mjs +3 -0
- package/dist/renderer-BTu2EVhF.mjs +3 -0
- package/dist/renderer-BU1rwNRT.mjs +3 -0
- package/dist/renderer-BXMmISWG.mjs +499 -0
- package/dist/renderer-BXMmISWG.mjs.map +1 -0
- package/dist/renderer-BZJm3m4f.mjs +3 -0
- package/dist/renderer-B_NuVaIP.mjs +744 -0
- package/dist/renderer-B_NuVaIP.mjs.map +1 -0
- package/dist/renderer-BfJSUjPN.mjs +3 -0
- package/dist/renderer-BqyAgNt3.mjs +3 -0
- package/dist/renderer-BryTM2g7.mjs +3 -0
- package/dist/renderer-BsgIcBKH.mjs +391 -0
- package/dist/renderer-BsgIcBKH.mjs.map +1 -0
- package/dist/renderer-ByDhfrPE.mjs +422 -0
- package/dist/renderer-ByDhfrPE.mjs.map +1 -0
- package/dist/renderer-C-H680_l.mjs +3 -0
- package/dist/renderer-C17wL9QX.mjs +181 -0
- package/dist/renderer-C17wL9QX.mjs.map +1 -0
- package/dist/renderer-C2n-EHxg.mjs +1 -0
- package/dist/renderer-CB5aWAaf.mjs +343 -0
- package/dist/renderer-CB5aWAaf.mjs.map +1 -0
- package/dist/renderer-CB7lH5K8.mjs +3 -0
- package/dist/renderer-CDLrNgfo.mjs +3 -0
- package/dist/renderer-CDOUAN7X.mjs +454 -0
- package/dist/renderer-CDOUAN7X.mjs.map +1 -0
- package/dist/renderer-CH8sdfYX.mjs +387 -0
- package/dist/renderer-CH8sdfYX.mjs.map +1 -0
- package/dist/renderer-CIvaRnP_.mjs +261 -0
- package/dist/renderer-CIvaRnP_.mjs.map +1 -0
- package/dist/renderer-CMzEjdzi.mjs +369 -0
- package/dist/renderer-CMzEjdzi.mjs.map +1 -0
- package/dist/renderer-COkcU3db.mjs +3302 -0
- package/dist/renderer-COkcU3db.mjs.map +1 -0
- package/dist/renderer-CQCoggIa.mjs +3 -0
- package/dist/renderer-CQdVj2JS.mjs +3 -0
- package/dist/renderer-CQiTodg9.mjs +337 -0
- package/dist/renderer-CQiTodg9.mjs.map +1 -0
- package/dist/renderer-CV2m6k1V.mjs +3 -0
- package/dist/renderer-CYY-poLe.mjs +3 -0
- package/dist/renderer-CZgB5st8.mjs +3 -0
- package/dist/renderer-C_Ki91kc.mjs +3 -0
- package/dist/renderer-CclIvsLO.mjs +3 -0
- package/dist/renderer-Cj-whdVr.mjs +655 -0
- package/dist/renderer-Cj-whdVr.mjs.map +1 -0
- package/dist/renderer-CkykdR_D.mjs +3 -0
- package/dist/renderer-Cl1oUXMi.mjs +1143 -0
- package/dist/renderer-Cl1oUXMi.mjs.map +1 -0
- package/dist/renderer-CmApuKjS.mjs +3 -0
- package/dist/renderer-CpkiHRhh.mjs +269 -0
- package/dist/renderer-CpkiHRhh.mjs.map +1 -0
- package/dist/renderer-CszOjcRW.mjs +3 -0
- package/dist/renderer-CtVkU_GA.mjs +44 -0
- package/dist/renderer-CtVkU_GA.mjs.map +1 -0
- package/dist/renderer-Cu074POw.mjs +3 -0
- package/dist/renderer-CwQhzcUn.mjs +644 -0
- package/dist/renderer-CwQhzcUn.mjs.map +1 -0
- package/dist/renderer-CzPWB0Ss.mjs +273 -0
- package/dist/renderer-CzPWB0Ss.mjs.map +1 -0
- package/dist/renderer-D4qLmox-.mjs +3 -0
- package/dist/renderer-D6bWQtr-.mjs +3 -0
- package/dist/renderer-D6cJ6MSq.mjs +3 -0
- package/dist/renderer-D7EX8IjU.mjs +240 -0
- package/dist/renderer-D7EX8IjU.mjs.map +1 -0
- package/dist/renderer-DDp7_TUi.d.mts +10 -0
- package/dist/renderer-DDp7_TUi.d.mts.map +1 -0
- package/dist/renderer-DFKsLrUs.mjs +256 -0
- package/dist/renderer-DFKsLrUs.mjs.map +1 -0
- package/dist/renderer-DPSsf8-t.mjs +3 -0
- package/dist/renderer-DQLGnEFc.mjs +3 -0
- package/dist/renderer-DY2SVYUW.mjs +3 -0
- package/dist/renderer-DZGtBUCx.mjs +792 -0
- package/dist/renderer-DZGtBUCx.mjs.map +1 -0
- package/dist/renderer-DabG62XS.mjs +406 -0
- package/dist/renderer-DabG62XS.mjs.map +1 -0
- package/dist/renderer-DbaQLI4z.mjs +771 -0
- package/dist/renderer-DbaQLI4z.mjs.map +1 -0
- package/dist/renderer-DjI45OYC.mjs +71 -0
- package/dist/renderer-DjI45OYC.mjs.map +1 -0
- package/dist/renderer-Dm08-hAU.mjs +323 -0
- package/dist/renderer-Dm08-hAU.mjs.map +1 -0
- package/dist/renderer-DoAY5JbB.mjs +4 -0
- package/dist/renderer-Dp_FfvF-.mjs +401 -0
- package/dist/renderer-Dp_FfvF-.mjs.map +1 -0
- package/dist/renderer-Dt6fzgX5.mjs +756 -0
- package/dist/renderer-Dt6fzgX5.mjs.map +1 -0
- package/dist/renderer-DuplLRbp.mjs +3 -0
- package/dist/renderer-DvfUbZ31.mjs +3 -0
- package/dist/renderer-DxjVQV6f.mjs +311 -0
- package/dist/renderer-DxjVQV6f.mjs.map +1 -0
- package/dist/renderer-Fco4EmAu.mjs +23868 -0
- package/dist/renderer-Fco4EmAu.mjs.map +1 -0
- package/dist/renderer-HFfcJlmR.mjs +981 -0
- package/dist/renderer-HFfcJlmR.mjs.map +1 -0
- package/dist/renderer-I-Sw3JBB.mjs +145 -0
- package/dist/renderer-I-Sw3JBB.mjs.map +1 -0
- package/dist/renderer-OWQmmg4Z.mjs +697 -0
- package/dist/renderer-OWQmmg4Z.mjs.map +1 -0
- package/dist/renderer-Q_uUQipO.mjs +3 -0
- package/dist/renderer-Ryo2CEFD.mjs +586 -0
- package/dist/renderer-Ryo2CEFD.mjs.map +1 -0
- package/dist/renderer-Tp6OXWNZ.mjs +257 -0
- package/dist/renderer-Tp6OXWNZ.mjs.map +1 -0
- package/dist/renderer-UQFCgeNx.mjs +3 -0
- package/dist/renderer-WkVrkCVA.mjs +83 -0
- package/dist/renderer-WkVrkCVA.mjs.map +1 -0
- package/dist/renderer-XcmYTd6P.mjs +3818 -0
- package/dist/renderer-XcmYTd6P.mjs.map +1 -0
- package/dist/renderer-_uvdg48N.mjs +333 -0
- package/dist/renderer-_uvdg48N.mjs.map +1 -0
- package/dist/renderer-bZU_ndxf.mjs +8 -0
- package/dist/renderer-bZU_ndxf.mjs.map +1 -0
- package/dist/renderer-eMsnzJg9.mjs +3 -0
- package/dist/renderer-ho_jXJ0H.mjs +254 -0
- package/dist/renderer-ho_jXJ0H.mjs.map +1 -0
- package/dist/renderer-k2JL79kM.mjs +306 -0
- package/dist/renderer-k2JL79kM.mjs.map +1 -0
- package/dist/renderer-pHiz78e0.mjs +3 -0
- package/dist/renderer-pxXf9dvk.mjs +394 -0
- package/dist/renderer-pxXf9dvk.mjs.map +1 -0
- package/dist/renderer-vCFTm0oe.mjs +226 -0
- package/dist/renderer-vCFTm0oe.mjs.map +1 -0
- package/dist/renderer-vvpdx1vk.mjs +379 -0
- package/dist/renderer-vvpdx1vk.mjs.map +1 -0
- package/dist/renderer-x2s9LmVL.mjs +1121 -0
- package/dist/renderer-x2s9LmVL.mjs.map +1 -0
- package/dist/renderers-BWg16W-V-BXG_cjhM.mjs +49 -0
- package/dist/renderers-BWg16W-V-BXG_cjhM.mjs.map +1 -0
- package/dist/signals/index.d.mts +7 -0
- package/dist/signals/index.mjs +10 -0
- package/dist/signals-BwbdO3AN.mjs +224 -0
- package/dist/signals-BwbdO3AN.mjs.map +1 -0
- package/dist/signin-CZj4Oc5s.mjs +865 -0
- package/dist/signin-CZj4Oc5s.mjs.map +1 -0
- package/dist/sso-oidc-C0_31ThY.mjs +1051 -0
- package/dist/sso-oidc-C0_31ThY.mjs.map +1 -0
- package/dist/sts-DD4ggEXC.mjs +6 -0
- package/dist/sts-nXw8RDJI.mjs +1395 -0
- package/dist/sts-nXw8RDJI.mjs.map +1 -0
- package/package.json +173 -0
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import{a as S}from"./chunk-FKZ4XXPE.mjs";import{a as E}from"./chunk-YSTLMWCG.mjs";import{d as D}from"./chunk-6YJP57MZ.mjs";import{e as G}from"./chunk-BVF64D6H.mjs";G();G();var k=`
|
|
2
|
+
struct LutUniforms {
|
|
3
|
+
intensity : f32,
|
|
4
|
+
lutSize : f32,
|
|
5
|
+
hasSignal : f32,
|
|
6
|
+
pad : f32,
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
@group(0) @binding(0) var<uniform> u : LutUniforms;
|
|
10
|
+
@group(1) @binding(0) var tex : texture_2d<f32>;
|
|
11
|
+
@group(1) @binding(1) var samp : sampler;
|
|
12
|
+
@group(2) @binding(0) var lutTex : texture_3d<f32>;
|
|
13
|
+
@group(2) @binding(1) var lutSamp : sampler;
|
|
14
|
+
@group(3) @binding(0) var signalTex : texture_2d<f32>;
|
|
15
|
+
@group(3) @binding(1) var signalSamp : sampler;
|
|
16
|
+
|
|
17
|
+
struct VSOut {
|
|
18
|
+
@builtin(position) pos : vec4<f32>,
|
|
19
|
+
@location(0) uv : vec2<f32>,
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {
|
|
23
|
+
var pos = array<vec2<f32>, 4>(
|
|
24
|
+
vec2<f32>(-1.0, 1.0),
|
|
25
|
+
vec2<f32>(1.0, 1.0),
|
|
26
|
+
vec2<f32>(-1.0, -1.0),
|
|
27
|
+
vec2<f32>(1.0, -1.0)
|
|
28
|
+
);
|
|
29
|
+
var uv = array<vec2<f32>, 4>(
|
|
30
|
+
vec2<f32>(0.0, 0.0),
|
|
31
|
+
vec2<f32>(1.0, 0.0),
|
|
32
|
+
vec2<f32>(0.0, 1.0),
|
|
33
|
+
vec2<f32>(1.0, 1.0)
|
|
34
|
+
);
|
|
35
|
+
return VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {
|
|
39
|
+
let inputColor = textureSampleLevel(tex, samp, in.uv, 0.0);
|
|
40
|
+
|
|
41
|
+
// Coordinate adjustment to sample from texel centers
|
|
42
|
+
let uvw = inputColor.rgb * ((u.lutSize - 1.0) / u.lutSize) + vec3<f32>(0.5 / u.lutSize);
|
|
43
|
+
let mappedColor = textureSampleLevel(lutTex, lutSamp, uvw, 0.0);
|
|
44
|
+
|
|
45
|
+
var activeIntensity = u.intensity;
|
|
46
|
+
if (u.hasSignal > 0.5) {
|
|
47
|
+
activeIntensity = textureSampleLevel(signalTex, signalSamp, in.uv, 0.0).r;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
let finalRgb = inputColor.rgb + activeIntensity * (mappedColor.rgb - inputColor.rgb);
|
|
51
|
+
return vec4<f32>(finalRgb * inputColor.a, inputColor.a);
|
|
52
|
+
}
|
|
53
|
+
`,K=`
|
|
54
|
+
struct LutUniforms {
|
|
55
|
+
intensity : f32,
|
|
56
|
+
lutSize : f32,
|
|
57
|
+
hasSignal : f32,
|
|
58
|
+
pad : f32,
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
@group(0) @binding(0) var<uniform> u : LutUniforms;
|
|
62
|
+
@group(1) @binding(0) var tex : texture_2d<f32>;
|
|
63
|
+
@group(1) @binding(1) var samp : sampler;
|
|
64
|
+
@group(2) @binding(0) var lutTex : texture_1d<f32>;
|
|
65
|
+
@group(2) @binding(1) var lutSamp : sampler;
|
|
66
|
+
@group(3) @binding(0) var signalTex : texture_2d<f32>;
|
|
67
|
+
@group(3) @binding(1) var signalSamp : sampler;
|
|
68
|
+
|
|
69
|
+
struct VSOut {
|
|
70
|
+
@builtin(position) pos : vec4<f32>,
|
|
71
|
+
@location(0) uv : vec2<f32>,
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {
|
|
75
|
+
var pos = array<vec2<f32>, 4>(
|
|
76
|
+
vec2<f32>(-1.0, 1.0),
|
|
77
|
+
vec2<f32>(1.0, 1.0),
|
|
78
|
+
vec2<f32>(-1.0, -1.0),
|
|
79
|
+
vec2<f32>(1.0, -1.0)
|
|
80
|
+
);
|
|
81
|
+
var uv = array<vec2<f32>, 4>(
|
|
82
|
+
vec2<f32>(0.0, 0.0),
|
|
83
|
+
vec2<f32>(1.0, 0.0),
|
|
84
|
+
vec2<f32>(0.0, 1.0),
|
|
85
|
+
vec2<f32>(1.0, 1.0)
|
|
86
|
+
);
|
|
87
|
+
return VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {
|
|
91
|
+
let inputColor = textureSampleLevel(tex, samp, in.uv, 0.0);
|
|
92
|
+
|
|
93
|
+
let rCoord = inputColor.r * ((u.lutSize - 1.0) / u.lutSize) + (0.5 / u.lutSize);
|
|
94
|
+
let gCoord = inputColor.g * ((u.lutSize - 1.0) / u.lutSize) + (0.5 / u.lutSize);
|
|
95
|
+
let bCoord = inputColor.b * ((u.lutSize - 1.0) / u.lutSize) + (0.5 / u.lutSize);
|
|
96
|
+
|
|
97
|
+
let mappedR = textureSampleLevel(lutTex, lutSamp, rCoord, 0.0).r;
|
|
98
|
+
let mappedG = textureSampleLevel(lutTex, lutSamp, gCoord, 0.0).g;
|
|
99
|
+
let mappedB = textureSampleLevel(lutTex, lutSamp, bCoord, 0.0).b;
|
|
100
|
+
|
|
101
|
+
var activeIntensity = u.intensity;
|
|
102
|
+
if (u.hasSignal > 0.5) {
|
|
103
|
+
activeIntensity = textureSampleLevel(signalTex, signalSamp, in.uv, 0.0).r;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
let finalRgb = inputColor.rgb + activeIntensity * (vec3<f32>(mappedR, mappedG, mappedB) - inputColor.rgb);
|
|
107
|
+
return vec4<f32>(finalRgb * inputColor.a, inputColor.a);
|
|
108
|
+
}
|
|
109
|
+
`,V=new WeakMap,T=new Float32Array(4);function q(i){let e=V.get(i);if(e)return e;let a=i.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,buffer:{type:"uniform"}}]}),n=i.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"filtering"}}]}),d=i.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,texture:{viewDimension:"3d",sampleType:"float"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"filtering"}}]}),u=i.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,texture:{viewDimension:"1d",sampleType:"float"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"filtering"}}]}),o=i.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"filtering"}}]});return e={lutUniformLayout:a,singleTextureLayout:n,lutTextureLayout3D:d,lutTextureLayout1D:u,signalTextureLayout:o,pipelineCache:new Map},V.set(i,e),e}function J(i,e,a){let n=q(i),d=`lut_${a}_${e}`,u=n.pipelineCache.get(d);if(!u){let o=a==="3D"?k:K,s=i.createShaderModule({label:`lut_${a.toLowerCase()}_${e}.wgsl`,code:o}),r=a==="3D"?n.lutTextureLayout3D:n.lutTextureLayout1D;u=i.createRenderPipeline({label:`LutPipeline_${a}_${e}`,layout:i.createPipelineLayout({bindGroupLayouts:[n.lutUniformLayout,n.singleTextureLayout,r,n.signalTextureLayout]}),vertex:{module:s,entryPoint:"vs"},fragment:{module:s,entryPoint:"fs",targets:[{format:e}]},primitive:{topology:"triangle-strip"}}),n.pipelineCache.set(d,u)}return{lutPipeline:u,lutUniformLayout:n.lutUniformLayout,singleTextureLayout:n.singleTextureLayout,lutTextureLayout:a==="3D"?n.lutTextureLayout3D:n.lutTextureLayout1D,signalTextureLayout:n.signalTextureLayout}}var I=async i=>{let{ctx:e,encoder:a,pass:n,targetView:d,targetTexture:u,targetWidth:o,targetHeight:s,props:r,drawChild:F}=i,R=r.frame??0,M=r.fps||30,l=r.virtualMedia?.operation;if(l?.op!=="ApplyLUT"||!l)return;let h=r.virtualMedia.children?.[0];if(!h)return;let c=l.lutUrl;if(!c)return;n.end();let f=o,y=s,v=l.intensityHandleId?l.inputs?.[l.intensityHandleId]:null,w=!!(v?.connectionValid&&v.outputItem?.type==="Signal"),x=w?v?.outputItem?.data:null,m=1,U=!1;w?x&&typeof x=="object"&&(m=Number(x.offset??1),U=!0):v?.connectionValid&&v.outputItem?.type==="Number"?m=Number(v.outputItem.data??1):m=Number(l.intensity??1),m=Math.max(0,Math.min(10,m));let p=S.get(c,e.device);if(!p){if((r.isHeadless??(typeof window>"u"||globalThis.__IS_HEADLESS_RENDERER__))||r.forceWait)try{p=await S.getOrLoad(c,e.device)}catch(t){!(t instanceof DOMException&&t.name==="AbortError")&&!(t&&typeof t=="object"&&"name"in t&&t.name==="AbortError")&&console.error("[ApplyLUT] Failed to load LUT synchronously:",t)}else S.getOrLoad(c,e.device).catch(t=>{t instanceof DOMException&&t.name==="AbortError"||t&&typeof t=="object"&&"name"in t&&t.name==="AbortError"||console.error("[ApplyLUT] Failed to load LUT in background:",t)});if(!p&&c.startsWith("runtime://lut/")){let t=c.substring(0,c.lastIndexOf("-")+1);t&&(p=S.getAnyMatching(t,e.device))}}let b=e.renderer.getTemporaryTexture(f,y,[...r.excludeTextures||[],u]),_=b.createView();if(e.renderer.beginFrame(a,_,{r:0,g:0,b:0,a:0},f,y,"clear").end(),e.renderer.pushScissor({x:0,y:0,width:f,height:y}),e.renderer.pushIdentity(),await F(h,{...r,virtualMedia:h},_,b,f,y),e.renderer.popTransform(),e.renderer.popScissor(),!p){let L=e.renderer.beginFrame(a,d,{r:0,g:0,b:0,a:0},o,s,"load");e.renderer.drawTexture(L,b,{x:0,y:0,width:o,height:s},{opacity:l.opacity??1}),i.pass=L;return}let{lutPipeline:N,lutUniformLayout:O,singleTextureLayout:z,lutTextureLayout:H,signalTextureLayout:W}=J(e.device,e.renderer.format,p.type),P=e.renderer.samplerCache.getSampler(e.device),A=e.renderer.getTemporaryTexture(f,y,[b,u,...r.excludeTextures||[]]),C;if(U){let L=r.elapsedMs!==void 0?r.elapsedMs/1e3:R/M,t=r.virtualMedia?.metadata?.durationMs?r.virtualMedia.metadata.durationMs/1e3:r.durationMs!==void 0?r.durationMs/1e3:0;C=D.getOrCreate2DTextureView(e.device,a,x.nodeId??"lut_intensity_sig",L,t,x,f,y,r.renderId,R,M)}else C=D.getDummy1x1TextureView(e.device);T[0]=m,T[1]=p.size,T[2]=U?1:0,T[3]=0;let $=e.renderer.getTemporaryBuffer(T),g=a.beginRenderPass({colorAttachments:[{view:A.createView(),loadOp:"clear",storeOp:"store",clearValue:{r:0,g:0,b:0,a:0}}]});g.setPipeline(N),g.setBindGroup(0,e.device.createBindGroup({layout:O,entries:[{binding:0,resource:{buffer:$}}]})),g.setBindGroup(1,e.renderer.bindGroupCache.getBindGroup(e.device,z,b,P)),g.setBindGroup(2,e.device.createBindGroup({layout:H,entries:[{binding:0,resource:p.texture.createView()},{binding:1,resource:P}]})),g.setBindGroup(3,e.device.createBindGroup({layout:W,entries:[{binding:0,resource:C},{binding:1,resource:P}]})),g.draw(4),g.end();let B=e.renderer.beginFrame(a,d,{r:0,g:0,b:0,a:0},o,s,"load");e.renderer.drawTexture(B,A,{x:0,y:0,width:o,height:s},{opacity:l.opacity??1}),i.pass=B};var re=E({WebGPURenderer:I});export{re as a};
|
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
import{a as I}from"./chunk-CNSHAFEA.mjs";import{a as $}from"./chunk-YSTLMWCG.mjs";import{d as H}from"./chunk-6YJP57MZ.mjs";import{e as C}from"./chunk-BVF64D6H.mjs";C();C();var ye=`
|
|
2
|
+
struct HalftoneUniforms {
|
|
3
|
+
mode : f32, // 0 = Monochrome, 1 = CMYK
|
|
4
|
+
dotShape : f32, // 0 = Circle, 1 = Diamond, 2 = Line, 3 = Square
|
|
5
|
+
frequency : f32,
|
|
6
|
+
angle : f32,
|
|
7
|
+
|
|
8
|
+
contrast : f32,
|
|
9
|
+
invert : f32,
|
|
10
|
+
isSmooth : f32,
|
|
11
|
+
opacity : f32,
|
|
12
|
+
|
|
13
|
+
dotColor : vec4<f32>,
|
|
14
|
+
paperColor : vec4<f32>,
|
|
15
|
+
|
|
16
|
+
cyanAngle : f32,
|
|
17
|
+
magentaAngle : f32,
|
|
18
|
+
yellowAngle : f32,
|
|
19
|
+
blackAngle : f32,
|
|
20
|
+
|
|
21
|
+
hasFreqSig : f32,
|
|
22
|
+
hasAngleSig : f32,
|
|
23
|
+
hasContrastSig : f32,
|
|
24
|
+
hasCyanSig : f32,
|
|
25
|
+
|
|
26
|
+
hasMagSig : f32,
|
|
27
|
+
hasYelSig : f32,
|
|
28
|
+
hasBlkSig : f32,
|
|
29
|
+
hasOpacitySig : f32,
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
@group(0) @binding(0) var<uniform> u : HalftoneUniforms;
|
|
33
|
+
@group(1) @binding(0) var tex : texture_2d<f32>;
|
|
34
|
+
@group(1) @binding(1) var samp : sampler;
|
|
35
|
+
|
|
36
|
+
@group(2) @binding(0) var freqSigTex : texture_2d<f32>;
|
|
37
|
+
@group(2) @binding(1) var angleSigTex : texture_2d<f32>;
|
|
38
|
+
@group(2) @binding(2) var contrastSigTex : texture_2d<f32>;
|
|
39
|
+
@group(2) @binding(3) var cyanSigTex : texture_2d<f32>;
|
|
40
|
+
@group(2) @binding(4) var magSigTex : texture_2d<f32>;
|
|
41
|
+
@group(2) @binding(5) var yelSigTex : texture_2d<f32>;
|
|
42
|
+
@group(2) @binding(6) var blkSigTex : texture_2d<f32>;
|
|
43
|
+
@group(2) @binding(7) var opacitySigTex : texture_2d<f32>;
|
|
44
|
+
@group(2) @binding(8) var signalSamp : sampler;
|
|
45
|
+
|
|
46
|
+
struct VSOut {
|
|
47
|
+
@builtin(position) pos : vec4<f32>,
|
|
48
|
+
@location(0) uv : vec2<f32>,
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {
|
|
52
|
+
var pos = array<vec2<f32>, 4>(
|
|
53
|
+
vec2<f32>(-1.0, 1.0),
|
|
54
|
+
vec2<f32>(1.0, 1.0),
|
|
55
|
+
vec2<f32>(-1.0, -1.0),
|
|
56
|
+
vec2<f32>(1.0, -1.0)
|
|
57
|
+
);
|
|
58
|
+
var uv = array<vec2<f32>, 4>(
|
|
59
|
+
vec2<f32>(0.0, 0.0),
|
|
60
|
+
vec2<f32>(1.0, 0.0),
|
|
61
|
+
vec2<f32>(0.0, 1.0),
|
|
62
|
+
vec2<f32>(1.0, 1.0)
|
|
63
|
+
);
|
|
64
|
+
return VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
const PI: f32 = 3.141592653589793;
|
|
68
|
+
|
|
69
|
+
fn getCellCenterUV(
|
|
70
|
+
uv: vec2<f32>,
|
|
71
|
+
dimensions: vec2<f32>,
|
|
72
|
+
screenAngleDeg: f32,
|
|
73
|
+
freq: f32
|
|
74
|
+
) -> vec2<f32> {
|
|
75
|
+
let rad = screenAngleDeg * PI / 180.0;
|
|
76
|
+
let cosA = cos(rad);
|
|
77
|
+
let sinA = sin(rad);
|
|
78
|
+
let rot = mat2x2<f32>(cosA, -sinA, sinA, cosA);
|
|
79
|
+
let invRot = mat2x2<f32>(cosA, sinA, -sinA, cosA);
|
|
80
|
+
|
|
81
|
+
let minDim = min(dimensions.x, dimensions.y);
|
|
82
|
+
let cellSize = max(minDim / max(freq, 1.0), 1.0);
|
|
83
|
+
|
|
84
|
+
let center = dimensions * 0.5;
|
|
85
|
+
let pixelPos = (uv * dimensions) - center;
|
|
86
|
+
let rotPos = rot * pixelPos;
|
|
87
|
+
|
|
88
|
+
let cellIndex = floor(rotPos / cellSize) + vec2<f32>(0.5);
|
|
89
|
+
let cellCenterRot = cellIndex * cellSize;
|
|
90
|
+
let cellCenterPixelPos = invRot * cellCenterRot;
|
|
91
|
+
let cellCenterUV = (cellCenterPixelPos + center) / dimensions;
|
|
92
|
+
return clamp(cellCenterUV, vec2<f32>(0.0), vec2<f32>(1.0));
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
fn evalDotCoverage(
|
|
96
|
+
uv: vec2<f32>,
|
|
97
|
+
dimensions: vec2<f32>,
|
|
98
|
+
screenAngleDeg: f32,
|
|
99
|
+
freq: f32,
|
|
100
|
+
shape: f32,
|
|
101
|
+
density: f32,
|
|
102
|
+
contrastMultiplier: f32,
|
|
103
|
+
isSmooth: f32
|
|
104
|
+
) -> f32 {
|
|
105
|
+
var d = clamp((density - 0.5) * contrastMultiplier + 0.5, 0.0, 1.0);
|
|
106
|
+
if (d <= 0.0001) { return 0.0; }
|
|
107
|
+
if (d >= 0.9999) { return 1.0; }
|
|
108
|
+
|
|
109
|
+
let rad = screenAngleDeg * PI / 180.0;
|
|
110
|
+
let cosA = cos(rad);
|
|
111
|
+
let sinA = sin(rad);
|
|
112
|
+
let rot = mat2x2<f32>(cosA, -sinA, sinA, cosA);
|
|
113
|
+
|
|
114
|
+
let minDim = min(dimensions.x, dimensions.y);
|
|
115
|
+
let cellSize = max(minDim / max(freq, 1.0), 1.0);
|
|
116
|
+
|
|
117
|
+
let center = dimensions * 0.5;
|
|
118
|
+
let pixelPos = (uv * dimensions) - center;
|
|
119
|
+
let rotPos = rot * pixelPos;
|
|
120
|
+
|
|
121
|
+
let cellUV = fract(rotPos / cellSize) - vec2<f32>(0.5);
|
|
122
|
+
|
|
123
|
+
var spot: f32 = 0.0;
|
|
124
|
+
|
|
125
|
+
if (shape < 0.5) {
|
|
126
|
+
// 0: Euclidean Round Dot
|
|
127
|
+
spot = 0.5 * (1.0 - (cos(cellUV.x * 2.0 * PI) + cos(cellUV.y * 2.0 * PI)) * 0.5);
|
|
128
|
+
} else if (shape < 1.5) {
|
|
129
|
+
// 1: Diamond
|
|
130
|
+
spot = abs(cellUV.x) + abs(cellUV.y);
|
|
131
|
+
} else if (shape < 2.5) {
|
|
132
|
+
// 2: Line
|
|
133
|
+
spot = abs(cellUV.y) * 2.0;
|
|
134
|
+
} else {
|
|
135
|
+
// 3: Square
|
|
136
|
+
spot = max(abs(cellUV.x), abs(cellUV.y)) * 2.0;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
let edgeWidth = select(0.001, max(1.5 / cellSize, 0.003), isSmooth > 0.5);
|
|
140
|
+
|
|
141
|
+
return select(
|
|
142
|
+
step(spot, d),
|
|
143
|
+
smoothstep(d + edgeWidth, d - edgeWidth, spot),
|
|
144
|
+
isSmooth > 0.5
|
|
145
|
+
);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {
|
|
149
|
+
let sourceCol = textureSampleLevel(tex, samp, in.uv, 0.0);
|
|
150
|
+
if (sourceCol.a < 1e-5) {
|
|
151
|
+
return sourceCol;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
// Resolve parameter overrides or dynamic signals
|
|
155
|
+
var frequency = u.frequency;
|
|
156
|
+
if (u.hasFreqSig > 0.5) {
|
|
157
|
+
frequency = textureSampleLevel(freqSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
var baseAngle = u.angle;
|
|
161
|
+
if (u.hasAngleSig > 0.5) {
|
|
162
|
+
baseAngle = textureSampleLevel(angleSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
var contrast = u.contrast;
|
|
166
|
+
if (u.hasContrastSig > 0.5) {
|
|
167
|
+
contrast = textureSampleLevel(contrastSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
var cyanAngle = u.cyanAngle;
|
|
171
|
+
if (u.hasCyanSig > 0.5) {
|
|
172
|
+
cyanAngle = textureSampleLevel(cyanSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
var magentaAngle = u.magentaAngle;
|
|
176
|
+
if (u.hasMagSig > 0.5) {
|
|
177
|
+
magentaAngle = textureSampleLevel(magSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
var yellowAngle = u.yellowAngle;
|
|
181
|
+
if (u.hasYelSig > 0.5) {
|
|
182
|
+
yellowAngle = textureSampleLevel(yelSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
var blackAngle = u.blackAngle;
|
|
186
|
+
if (u.hasBlkSig > 0.5) {
|
|
187
|
+
blackAngle = textureSampleLevel(blkSigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
var effectOpacity = u.opacity;
|
|
191
|
+
if (u.hasOpacitySig > 0.5) {
|
|
192
|
+
effectOpacity = textureSampleLevel(opacitySigTex, signalSamp, vec2<f32>(0.5, 0.5), 0.0).r;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
let dimensions = vec2<f32>(textureDimensions(tex));
|
|
196
|
+
let unpremult = sourceCol.rgb / sourceCol.a;
|
|
197
|
+
|
|
198
|
+
var screenedRgb: vec3<f32>;
|
|
199
|
+
|
|
200
|
+
if (u.mode < 0.5) {
|
|
201
|
+
// --- Monochrome Mode ---
|
|
202
|
+
let cellCenterUV = getCellCenterUV(in.uv, dimensions, baseAngle, frequency);
|
|
203
|
+
let cellCol = textureSampleLevel(tex, samp, cellCenterUV, 0.0);
|
|
204
|
+
let cellRgb = select(cellCol.rgb, cellCol.rgb / cellCol.a, cellCol.a > 1e-5);
|
|
205
|
+
let luminance = dot(cellRgb, vec3<f32>(0.2126, 0.7152, 0.0722));
|
|
206
|
+
var inkDensity = 1.0 - luminance;
|
|
207
|
+
if (u.invert > 0.5) {
|
|
208
|
+
inkDensity = luminance;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
let coverage = evalDotCoverage(
|
|
212
|
+
in.uv,
|
|
213
|
+
dimensions,
|
|
214
|
+
baseAngle,
|
|
215
|
+
frequency,
|
|
216
|
+
u.dotShape,
|
|
217
|
+
inkDensity,
|
|
218
|
+
contrast,
|
|
219
|
+
u.isSmooth
|
|
220
|
+
);
|
|
221
|
+
|
|
222
|
+
screenedRgb = mix(u.paperColor.rgb, u.dotColor.rgb, coverage);
|
|
223
|
+
} else {
|
|
224
|
+
// --- CMYK Mode ---
|
|
225
|
+
let cellCenterUVC = getCellCenterUV(in.uv, dimensions, baseAngle + cyanAngle, frequency);
|
|
226
|
+
let colC = textureSampleLevel(tex, samp, cellCenterUVC, 0.0);
|
|
227
|
+
let rgbC = select(colC.rgb, colC.rgb / colC.a, colC.a > 1e-5);
|
|
228
|
+
let kC = 1.0 - max(max(rgbC.r, rgbC.g), rgbC.b);
|
|
229
|
+
let invKC = 1.0 - kC;
|
|
230
|
+
var densC = select(0.0, clamp((1.0 - rgbC.r - kC) / max(invKC, 0.0001), 0.0, 1.0), invKC > 0.0001);
|
|
231
|
+
|
|
232
|
+
let cellCenterUVM = getCellCenterUV(in.uv, dimensions, baseAngle + magentaAngle, frequency);
|
|
233
|
+
let colM = textureSampleLevel(tex, samp, cellCenterUVM, 0.0);
|
|
234
|
+
let rgbM = select(colM.rgb, colM.rgb / colM.a, colM.a > 1e-5);
|
|
235
|
+
let kM = 1.0 - max(max(rgbM.r, rgbM.g), rgbM.b);
|
|
236
|
+
let invKM = 1.0 - kM;
|
|
237
|
+
var densM = select(0.0, clamp((1.0 - rgbM.g - kM) / max(invKM, 0.0001), 0.0, 1.0), invKM > 0.0001);
|
|
238
|
+
|
|
239
|
+
let cellCenterUVY = getCellCenterUV(in.uv, dimensions, baseAngle + yellowAngle, frequency);
|
|
240
|
+
let colY = textureSampleLevel(tex, samp, cellCenterUVY, 0.0);
|
|
241
|
+
let rgbY = select(colY.rgb, colY.rgb / colY.a, colY.a > 1e-5);
|
|
242
|
+
let kY = 1.0 - max(max(rgbY.r, rgbY.g), rgbY.b);
|
|
243
|
+
let invKY = 1.0 - kY;
|
|
244
|
+
var densY = select(0.0, clamp((1.0 - rgbY.b - kY) / max(invKY, 0.0001), 0.0, 1.0), invKY > 0.0001);
|
|
245
|
+
|
|
246
|
+
let cellCenterUVK = getCellCenterUV(in.uv, dimensions, baseAngle + blackAngle, frequency);
|
|
247
|
+
let colK = textureSampleLevel(tex, samp, cellCenterUVK, 0.0);
|
|
248
|
+
let rgbK = select(colK.rgb, colK.rgb / colK.a, colK.a > 1e-5);
|
|
249
|
+
var densK = 1.0 - max(max(rgbK.r, rgbK.g), rgbK.b);
|
|
250
|
+
|
|
251
|
+
if (u.invert > 0.5) {
|
|
252
|
+
densC = 1.0 - densC;
|
|
253
|
+
densM = 1.0 - densM;
|
|
254
|
+
densY = 1.0 - densY;
|
|
255
|
+
densK = 1.0 - densK;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
let covC = evalDotCoverage(in.uv, dimensions, baseAngle + cyanAngle, frequency, u.dotShape, densC, contrast, u.isSmooth);
|
|
259
|
+
let covM = evalDotCoverage(in.uv, dimensions, baseAngle + magentaAngle, frequency, u.dotShape, densM, contrast, u.isSmooth);
|
|
260
|
+
let covY = evalDotCoverage(in.uv, dimensions, baseAngle + yellowAngle, frequency, u.dotShape, densY, contrast, u.isSmooth);
|
|
261
|
+
let covK = evalDotCoverage(in.uv, dimensions, baseAngle + blackAngle, frequency, u.dotShape, densK, contrast, u.isSmooth);
|
|
262
|
+
|
|
263
|
+
// Subtractive synthesis onto paper substrate
|
|
264
|
+
let outR = u.paperColor.r * (1.0 - covC) * (1.0 - covK);
|
|
265
|
+
let outG = u.paperColor.g * (1.0 - covM) * (1.0 - covK);
|
|
266
|
+
let outB = u.paperColor.b * (1.0 - covY) * (1.0 - covK);
|
|
267
|
+
|
|
268
|
+
screenedRgb = clamp(vec3<f32>(outR, outG, outB), vec3<f32>(0.0), vec3<f32>(1.0));
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
// Apply effect opacity blend
|
|
272
|
+
let finalRgb = mix(unpremult, screenedRgb, clamp(effectOpacity, 0.0, 1.0));
|
|
273
|
+
return vec4<f32>(finalRgb * sourceCol.a, sourceCol.a);
|
|
274
|
+
}
|
|
275
|
+
`,j=new WeakMap;function be(i){let e=j.get(i);if(e)return e;let n=i.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,buffer:{type:"uniform"}}]}),u=i.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"filtering"}}]}),l=i.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:2,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:3,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:4,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:5,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:6,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:7,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:8,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"filtering"}}]});return e={uniformLayout:n,singleTextureLayout:u,signalTextureLayout:l,pipelineCache:new Map},j.set(i,e),e}function Se(i,e){let n=be(i),u=`halftone_${e}`,l=n.pipelineCache.get(u);if(!l){let m=i.createShaderModule({label:`halftone_${e}.wgsl`,code:ye});l=i.createRenderPipeline({label:`HalftonePipeline_${e}`,layout:i.createPipelineLayout({bindGroupLayouts:[n.uniformLayout,n.singleTextureLayout,n.signalTextureLayout]}),vertex:{module:m,entryPoint:"vs"},fragment:{module:m,entryPoint:"fs",targets:[{format:e}]},primitive:{topology:"triangle-strip"}}),n.pipelineCache.set(u,l)}return{halftonePipeline:l,uniformLayout:n.uniformLayout,singleTextureLayout:n.singleTextureLayout,signalTextureLayout:n.signalTextureLayout}}var J=async i=>{let{ctx:e,encoder:n,pass:u,targetView:l,targetTexture:m,targetWidth:A,targetHeight:M,props:r,drawChild:Q}=i,Y=r.frame??0,_=r.fps||30,a=r.virtualMedia?.operation;if(a?.op!=="HalftoneScreen"||!a)return;let T=r.virtualMedia.children?.[0];if(!T)return;u.end();let d=A,f=M,X=a.inputs?Object.keys(a.inputs)[0]:"halftone_node",o=(c,v,k,K)=>{let me=`${c}HandleId`,E=a[me],g=E?a.inputs?.[E]:null,W=!!(g?.connectionValid&&g.outputItem?.type==="Signal"),q=W&&g?.outputItem?.data?g.outputItem.data:null,h=v,z=!1;return W?q&&(h=Math.max(k,Math.min(K,Number(q.offset??0))),z=!0):g?.connectionValid&&g.outputItem?.type==="Number"?h=Math.max(k,Math.min(K,Number(g.outputItem.data??v))):h=Math.max(k,Math.min(K,Number(a[c]??v))),{val:h,hasStaticSig:z,sd:q}},P=o("frequency",30,1,200),G=o("angle",45,0,360),U=o("contrast",1,.1,5),R=o("cyanAngle",15,0,360),L=o("magentaAngle",75,0,360),V=o("yellowAngle",0,0,360),D=o("blackAngle",45,0,360),w=o("opacity",1,0,1),y=e.renderer.getTemporaryTexture(d,f,[...r.excludeTextures||[],m]),B=y.createView();e.renderer.beginFrame(n,B,{r:0,g:0,b:0,a:0},d,f,"clear").end(),e.renderer.pushScissor({x:0,y:0,width:d,height:f}),e.renderer.pushIdentity(),await Q(T,{...r,virtualMedia:T},B,y,d,f),e.renderer.popTransform(),e.renderer.popScissor();let{halftonePipeline:Z,uniformLayout:ee,singleTextureLayout:te,signalTextureLayout:ne}=Se(e.device,e.renderer.format),F=e.renderer.samplerCache.getSampler(e.device),ae=r.elapsedMs!==void 0?r.elapsedMs/1e3:Y/_,re=r.virtualMedia?.metadata?.durationMs?r.virtualMedia.metadata.durationMs/1e3:r.durationMs!==void 0?r.durationMs/1e3:0,s=(c,v)=>c.hasStaticSig&&c.sd?H.getOrCreate2DTextureView(e.device,n,c.sd.nodeId??`${X}_${v}`,ae,re,c.sd,d,f,r.renderId,Y,_):H.getDummy1x1TextureView(e.device),ie=s(P,"freq_sig"),le=s(G,"angle_sig"),oe=s(U,"contrast_sig"),se=s(R,"cyan_sig"),ce=s(L,"mag_sig"),ge=s(V,"yel_sig"),ue=s(D,"blk_sig"),de=s(w,"opacity_sig"),fe=a.mode==="CMYK"?1:0,b=0;a.dotShape==="Diamond"?b=1:a.dotShape==="Line"?b=2:a.dotShape==="Square"&&(b=3);let S=I(a.dotColor??"#000000"),x=I(a.paperColor??"#ffffff"),t=new Float32Array(28);t[0]=fe,t[1]=b,t[2]=P.val,t[3]=G.val,t[4]=U.val,t[5]=a.invert?1:0,t[6]=a.smooth!==!1?1:0,t[7]=w.val,t[8]=S.r,t[9]=S.g,t[10]=S.b,t[11]=S.a,t[12]=x.r,t[13]=x.g,t[14]=x.b,t[15]=x.a,t[16]=R.val,t[17]=L.val,t[18]=V.val,t[19]=D.val,t[20]=P.hasStaticSig?1:0,t[21]=G.hasStaticSig?1:0,t[22]=U.hasStaticSig?1:0,t[23]=R.hasStaticSig?1:0,t[24]=L.hasStaticSig?1:0,t[25]=V.hasStaticSig?1:0,t[26]=D.hasStaticSig?1:0,t[27]=w.hasStaticSig?1:0;let pe=e.renderer.getTemporaryBuffer(t),N=e.renderer.getTemporaryTexture(d,f,[y,m,...r.excludeTextures||[]]),p=n.beginRenderPass({colorAttachments:[{view:N.createView(),loadOp:"clear",storeOp:"store",clearValue:{r:0,g:0,b:0,a:0}}]});p.setPipeline(Z),p.setBindGroup(0,e.device.createBindGroup({layout:ee,entries:[{binding:0,resource:{buffer:pe}}]})),p.setBindGroup(1,e.renderer.bindGroupCache.getBindGroup(e.device,te,y,F)),p.setBindGroup(2,e.device.createBindGroup({layout:ne,entries:[{binding:0,resource:ie},{binding:1,resource:le},{binding:2,resource:oe},{binding:3,resource:se},{binding:4,resource:ce},{binding:5,resource:ge},{binding:6,resource:ue},{binding:7,resource:de},{binding:8,resource:F}]})),p.draw(4),p.end();let O=e.renderer.beginFrame(n,l,{r:0,g:0,b:0,a:0},A,M,"load");e.renderer.drawTexture(O,N,{x:0,y:0,width:A,height:M},{opacity:1}),i.pass=O};var Pe=$({WebGPURenderer:J});export{Pe as a};
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import{a as L}from"./chunk-YSTLMWCG.mjs";import{e as P}from"./chunk-BVF64D6H.mjs";P();P();P();function R(i){let r=[...i].sort((e,d)=>e.x-d.x),n=[];for(let e of r)(n.length===0||Math.abs(e.x-n[n.length-1].x)>1e-6)&&n.push(e);let t=n.length;if(t===0)return e=>e;if(t===1)return()=>n[0].y;let c=new Float32Array(t-1),o=new Float32Array(t-1),u=new Float32Array(t-1);for(let e=0;e<t-1;e++)c[e]=n[e+1].x-n[e].x,o[e]=n[e+1].y-n[e].y,u[e]=o[e]/c[e];let s=new Float32Array(t);s[0]=u[0];for(let e=1;e<t-1;e++)s[e]=(u[e-1]+u[e])/2;s[t-1]=u[t-2];for(let e=0;e<t-1;e++){let d=u[e];if(Math.abs(d)<1e-9)s[e]=0,s[e+1]=0;else{let a=s[e]/d,l=s[e+1]/d,f=a*a,g=l*l;if(f+g>9){let b=3/Math.sqrt(f+g);s[e]=b*a*d,s[e+1]=b*l*d}}}return e=>{if(e<=n[0].x)return n[0].y;if(e>=n[t-1].x)return n[t-1].y;let d=0,a=t-2,l=0;for(;d<=a;){let h=d+a>>1;if(e>=n[h].x&&e<=n[h+1].x){l=h;break}e<n[h].x?a=h-1:d=h+1}let f=c[l],g=(e-n[l].x)/f,b=g*g,p=b*g,m=2*p-3*b+1,y=p-2*b+g,x=-2*p+3*b,_=p-b,G=n[l].y*m+f*s[l]*y+n[l+1].y*x+f*s[l+1]*_;return Math.max(0,Math.min(1,G))}}P();var Y=`
|
|
2
|
+
@group(0) @binding(0) var t_src: texture_2d<f32>;
|
|
3
|
+
@group(0) @binding(1) var<storage, read_write> bins_r: array<atomic<u32>, 256>;
|
|
4
|
+
@group(0) @binding(2) var<storage, read_write> bins_g: array<atomic<u32>, 256>;
|
|
5
|
+
@group(0) @binding(3) var<storage, read_write> bins_b: array<atomic<u32>, 256>;
|
|
6
|
+
@group(0) @binding(4) var<storage, read_write> bins_luma: array<atomic<u32>, 256>;
|
|
7
|
+
|
|
8
|
+
@compute @workgroup_size(8, 8)
|
|
9
|
+
fn main(@builtin(global_invocation_id) gid: vec3<u32>) {
|
|
10
|
+
let dims = textureDimensions(t_src, 0);
|
|
11
|
+
if (gid.x >= dims.x || gid.y >= dims.y) { return; }
|
|
12
|
+
|
|
13
|
+
let color = textureLoad(t_src, vec2<u32>(gid.x, gid.y), 0);
|
|
14
|
+
let a = color.a;
|
|
15
|
+
if (a < 1e-5) { return; }
|
|
16
|
+
|
|
17
|
+
let rgb = color.rgb / a;
|
|
18
|
+
|
|
19
|
+
let ri = u32(clamp(rgb.r * 255.0, 0.0, 255.0));
|
|
20
|
+
let gi = u32(clamp(rgb.g * 255.0, 0.0, 255.0));
|
|
21
|
+
let bi = u32(clamp(rgb.b * 255.0, 0.0, 255.0));
|
|
22
|
+
let luma = 0.2126 * rgb.r + 0.7152 * rgb.g + 0.0722 * rgb.b;
|
|
23
|
+
let lumai = u32(clamp(luma * 255.0, 0.0, 255.0));
|
|
24
|
+
|
|
25
|
+
atomicAdd(&bins_r[ri], 1u);
|
|
26
|
+
atomicAdd(&bins_g[gi], 1u);
|
|
27
|
+
atomicAdd(&bins_b[bi], 1u);
|
|
28
|
+
atomicAdd(&bins_luma[lumai], 1u);
|
|
29
|
+
}
|
|
30
|
+
`,H=new WeakMap;function J(i){let r=H.get(i);if(!r){let n=i.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.COMPUTE,texture:{sampleType:"float",viewDimension:"2d"}},{binding:1,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}},{binding:2,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}},{binding:3,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}},{binding:4,visibility:GPUShaderStage.COMPUTE,buffer:{type:"storage"}}]}),t=i.createShaderModule({label:"histogram.wgsl",code:Y});r={pipeline:i.createComputePipeline({label:"HistogramPipeline",layout:i.createPipelineLayout({bindGroupLayouts:[n]}),compute:{module:t,entryPoint:"main"}}),bindGroupLayout:n},H.set(i,r)}return r}var D=new Map,B=new Set;function N(i,r,n,t){if(!D.get(t)||B.has(t))return;B.add(t);let{pipeline:o,bindGroupLayout:u}=J(i),s=()=>i.createBuffer({size:1024,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST}),e=s(),d=s(),a=s(),l=s();r.clearBuffer(e),r.clearBuffer(d),r.clearBuffer(a),r.clearBuffer(l);let f=i.createBindGroup({layout:u,entries:[{binding:0,resource:n.createView()},{binding:1,resource:{buffer:e}},{binding:2,resource:{buffer:d}},{binding:3,resource:{buffer:a}},{binding:4,resource:{buffer:l}}]}),g=r.beginComputePass({label:"histogram-pass"});g.setPipeline(o),g.setBindGroup(0,f),g.dispatchWorkgroups(Math.ceil(n.width/8),Math.ceil(n.height/8)),g.end();let b=()=>i.createBuffer({size:1024,usage:GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST}),p=b(),m=b(),y=b(),x=b();r.copyBufferToBuffer(e,0,p,0,1024),r.copyBufferToBuffer(d,0,m,0,1024),r.copyBufferToBuffer(a,0,y,0,1024),r.copyBufferToBuffer(l,0,x,0,1024),i.queue.onSubmittedWorkDone().then(()=>Promise.all([p.mapAsync(GPUMapMode.READ),m.mapAsync(GPUMapMode.READ),y.mapAsync(GPUMapMode.READ),x.mapAsync(GPUMapMode.READ)])).then(()=>{let _=new Uint32Array(p.getMappedRange().slice(0)),G=new Uint32Array(m.getMappedRange().slice(0)),h=new Uint32Array(y.getMappedRange().slice(0)),T=new Uint32Array(x.getMappedRange().slice(0));p.unmap(),m.unmap(),y.unmap(),x.unmap(),p.destroy(),m.destroy(),y.destroy(),x.destroy(),e.destroy(),d.destroy(),a.destroy(),l.destroy(),B.delete(t);let U=D.get(t);U&&U({r:_,g:G,b:h,luma:T})}).catch(()=>{p.destroy(),m.destroy(),y.destroy(),x.destroy(),e.destroy(),d.destroy(),a.destroy(),l.destroy(),B.delete(t)})}var v=1024,I="rgba8unorm",W=v*4,K=`
|
|
31
|
+
struct VSOut {
|
|
32
|
+
@builtin(position) pos : vec4<f32>,
|
|
33
|
+
@location(0) uv : vec2<f32>,
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {
|
|
37
|
+
var pos = array<vec2<f32>, 4>(
|
|
38
|
+
vec2<f32>(-1.0, 1.0),
|
|
39
|
+
vec2<f32>(1.0, 1.0),
|
|
40
|
+
vec2<f32>(-1.0, -1.0),
|
|
41
|
+
vec2<f32>(1.0, -1.0)
|
|
42
|
+
);
|
|
43
|
+
var uv = array<vec2<f32>, 4>(
|
|
44
|
+
vec2<f32>(0.0, 0.0),
|
|
45
|
+
vec2<f32>(1.0, 0.0),
|
|
46
|
+
vec2<f32>(0.0, 1.0),
|
|
47
|
+
vec2<f32>(1.0, 1.0)
|
|
48
|
+
);
|
|
49
|
+
return VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
@group(0) @binding(0) var t_lut : texture_2d<f32>;
|
|
53
|
+
@group(0) @binding(1) var s_lut : sampler;
|
|
54
|
+
|
|
55
|
+
@group(1) @binding(0) var t_src : texture_2d<f32>;
|
|
56
|
+
@group(1) @binding(1) var s_src : sampler;
|
|
57
|
+
|
|
58
|
+
@fragment fn fs(in: VSOut) -> @location(0) vec4<f32> {
|
|
59
|
+
let src = textureSampleLevel(t_src, s_src, in.uv, 0.0);
|
|
60
|
+
if (src.a < 1e-5) { return src; }
|
|
61
|
+
|
|
62
|
+
let rgb = src.rgb / src.a;
|
|
63
|
+
|
|
64
|
+
let N = f32(${v});
|
|
65
|
+
let uv_r = (rgb.r * (N - 1.0) + 0.5) / N;
|
|
66
|
+
let uv_g = (rgb.g * (N - 1.0) + 0.5) / N;
|
|
67
|
+
let uv_b = (rgb.b * (N - 1.0) + 0.5) / N;
|
|
68
|
+
|
|
69
|
+
let r_graded = textureSampleLevel(t_lut, s_lut, vec2<f32>(uv_r, 0.5), 0.0).r;
|
|
70
|
+
let g_graded = textureSampleLevel(t_lut, s_lut, vec2<f32>(uv_g, 0.5), 0.0).g;
|
|
71
|
+
let b_graded = textureSampleLevel(t_lut, s_lut, vec2<f32>(uv_b, 0.5), 0.0).b;
|
|
72
|
+
|
|
73
|
+
let graded = vec3<f32>(r_graded, g_graded, b_graded);
|
|
74
|
+
return vec4<f32>(graded * src.a, src.a);
|
|
75
|
+
}
|
|
76
|
+
`,X=`
|
|
77
|
+
struct Uniforms {
|
|
78
|
+
mode: u32,
|
|
79
|
+
pad0: u32,
|
|
80
|
+
pad1: u32,
|
|
81
|
+
pad2: u32,
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
struct VSOut {
|
|
85
|
+
@builtin(position) pos : vec4<f32>,
|
|
86
|
+
@location(0) uv : vec2<f32>,
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
@group(0) @binding(0) var<uniform> u : Uniforms;
|
|
90
|
+
@group(0) @binding(1) var t_lut : texture_2d<f32>;
|
|
91
|
+
@group(0) @binding(2) var s_lut : sampler;
|
|
92
|
+
|
|
93
|
+
@group(1) @binding(0) var t_src : texture_2d<f32>;
|
|
94
|
+
@group(1) @binding(1) var s_src : sampler;
|
|
95
|
+
|
|
96
|
+
@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {
|
|
97
|
+
var pos = array<vec2<f32>, 4>(
|
|
98
|
+
vec2<f32>(-1.0, 1.0), vec2<f32>(1.0, 1.0),
|
|
99
|
+
vec2<f32>(-1.0, -1.0), vec2<f32>(1.0, -1.0)
|
|
100
|
+
);
|
|
101
|
+
var uv = array<vec2<f32>, 4>(
|
|
102
|
+
vec2<f32>(0.0, 0.0), vec2<f32>(1.0, 0.0),
|
|
103
|
+
vec2<f32>(0.0, 1.0), vec2<f32>(1.0, 1.0)
|
|
104
|
+
);
|
|
105
|
+
return VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
fn rgb_to_hsl(rgb: vec3<f32>) -> vec3<f32> {
|
|
109
|
+
let r = rgb.r; let g = rgb.g; let b = rgb.b;
|
|
110
|
+
let cmax = max(r, max(g, b));
|
|
111
|
+
let cmin = min(r, min(g, b));
|
|
112
|
+
let delta = cmax - cmin;
|
|
113
|
+
|
|
114
|
+
var h = 0.0;
|
|
115
|
+
var s = 0.0;
|
|
116
|
+
let l = (cmax + cmin) * 0.5;
|
|
117
|
+
|
|
118
|
+
if (delta > 1e-5) {
|
|
119
|
+
s = delta / (1.0 - abs(2.0 * l - 1.0));
|
|
120
|
+
if (cmax == r) {
|
|
121
|
+
h = ((g - b) / delta) % 6.0;
|
|
122
|
+
} else if (cmax == g) {
|
|
123
|
+
h = (b - r) / delta + 2.0;
|
|
124
|
+
} else {
|
|
125
|
+
h = (r - g) / delta + 4.0;
|
|
126
|
+
}
|
|
127
|
+
h = h / 6.0;
|
|
128
|
+
if (h < 0.0) { h = h + 1.0; }
|
|
129
|
+
}
|
|
130
|
+
return vec3<f32>(h, s, l);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
fn hsl_to_rgb(hsl: vec3<f32>) -> vec3<f32> {
|
|
134
|
+
let h = hsl.x; let s = hsl.y; let l = hsl.z;
|
|
135
|
+
let c = (1.0 - abs(2.0 * l - 1.0)) * s;
|
|
136
|
+
let x = c * (1.0 - abs((h * 6.0) % 2.0 - 1.0));
|
|
137
|
+
let m = l - c * 0.5;
|
|
138
|
+
|
|
139
|
+
var rgb = vec3<f32>(0.0);
|
|
140
|
+
let hi = u32(h * 6.0) % 6u;
|
|
141
|
+
if (hi == 0u) { rgb = vec3<f32>(c, x, 0.0); }
|
|
142
|
+
else if (hi == 1u) { rgb = vec3<f32>(x, c, 0.0); }
|
|
143
|
+
else if (hi == 2u) { rgb = vec3<f32>(0.0, c, x); }
|
|
144
|
+
else if (hi == 3u) { rgb = vec3<f32>(0.0, x, c); }
|
|
145
|
+
else if (hi == 4u) { rgb = vec3<f32>(x, 0.0, c); }
|
|
146
|
+
else { rgb = vec3<f32>(c, 0.0, x); }
|
|
147
|
+
return rgb + vec3<f32>(m);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
fn lut_sample(x: f32) -> f32 {
|
|
151
|
+
let N = f32(${v});
|
|
152
|
+
let uv_x = (x * (N - 1.0) + 0.5) / N;
|
|
153
|
+
return textureSampleLevel(t_lut, s_lut, vec2<f32>(uv_x, 0.5), 0.0).r;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
@fragment fn fs(in: VSOut) -> @location(0) vec4<f32> {
|
|
157
|
+
let src = textureSampleLevel(t_src, s_src, in.uv, 0.0);
|
|
158
|
+
if (src.a < 1e-5) { return src; }
|
|
159
|
+
|
|
160
|
+
let rgb = src.rgb / src.a;
|
|
161
|
+
let hsl = rgb_to_hsl(rgb);
|
|
162
|
+
|
|
163
|
+
var out_hsl = hsl;
|
|
164
|
+
|
|
165
|
+
if (u.mode == 0u) {
|
|
166
|
+
let adj = lut_sample(hsl.x);
|
|
167
|
+
out_hsl.x = fract(hsl.x + (adj - 0.5) * 2.0);
|
|
168
|
+
} else if (u.mode == 1u) {
|
|
169
|
+
let adj = lut_sample(hsl.x);
|
|
170
|
+
out_hsl.y = clamp(hsl.y * (adj * 2.0), 0.0, 1.0);
|
|
171
|
+
} else if (u.mode == 2u) {
|
|
172
|
+
let adj = lut_sample(hsl.z);
|
|
173
|
+
out_hsl.y = clamp(hsl.y * (adj * 2.0), 0.0, 1.0);
|
|
174
|
+
} else {
|
|
175
|
+
let adj = lut_sample(hsl.y);
|
|
176
|
+
out_hsl.y = clamp(adj, 0.0, 1.0);
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
let out_rgb = clamp(hsl_to_rgb(out_hsl), vec3<f32>(0.0), vec3<f32>(1.0));
|
|
180
|
+
return vec4<f32>(out_rgb * src.a, src.a);
|
|
181
|
+
}
|
|
182
|
+
`,O=new WeakMap,V=new WeakMap;function $(i,r){let n=O.get(i);if(!n){let t=i.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"filtering"}}]}),c=i.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"filtering"}}]}),o=i.createShaderModule({label:"curves-rgb.wgsl",code:K});n={pipeline:i.createRenderPipeline({label:"CurvesRgbPipeline",layout:i.createPipelineLayout({bindGroupLayouts:[t,c]}),vertex:{module:o,entryPoint:"vs"},fragment:{module:o,entryPoint:"fs",targets:[{format:r}]},primitive:{topology:"triangle-strip"}}),lutBindGroupLayout:t,srcBindGroupLayout:c},O.set(i,n)}return n}function Q(i,r){let n=V.get(i);if(!n){let t=i.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,buffer:{type:"uniform"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:2,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"filtering"}}]}),c=i.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.FRAGMENT,texture:{sampleType:"float"}},{binding:1,visibility:GPUShaderStage.FRAGMENT,sampler:{type:"filtering"}}]}),o=i.createShaderModule({label:"curves-hsl.wgsl",code:X});n={pipeline:i.createRenderPipeline({label:"CurvesHslPipeline",layout:i.createPipelineLayout({bindGroupLayouts:[t,c]}),vertex:{module:o,entryPoint:"vs"},fragment:{module:o,entryPoint:"fs",targets:[{format:r}]},primitive:{topology:"triangle-strip"}}),uniformLayout:t,srcBindGroupLayout:c},V.set(i,n)}return n}var ee=32,k=new WeakMap;function F(i,r,n){let t=k.get(i);t||(t=new Map,k.set(i,t));let c=t.get(r);if(c)return t.delete(r),t.set(r,c),c;let o=n();if(t.set(r,o),t.size>ee){let[u,s]=t.entries().next().value;t.delete(u),s.destroy()}return o}function re(i,r){let n=R(r.master||[{x:0,y:0},{x:1,y:1}]),t=R(r.red||[{x:0,y:0},{x:1,y:1}]),c=R(r.green||[{x:0,y:0},{x:1,y:1}]),o=R(r.blue||[{x:0,y:0},{x:1,y:1}]),u=new Uint8Array(v*4);for(let e=0;e<v;e++){let d=e/(v-1),a=n(d),l=Math.max(0,Math.min(1,t(a))),f=Math.max(0,Math.min(1,c(a))),g=Math.max(0,Math.min(1,o(a)));u[e*4+0]=Math.round(l*255),u[e*4+1]=Math.round(f*255),u[e*4+2]=Math.round(g*255),u[e*4+3]=255}let s=i.createTexture({size:[v,1,1],dimension:"2d",format:I,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST});return i.queue.writeTexture({texture:s},u,{bytesPerRow:W},[v,1,1]),s}function te(i,r){let n=R(r),t=new Uint8Array(v*4);for(let o=0;o<v;o++){let u=o/(v-1),s=Math.round(Math.max(0,Math.min(1,n(u)))*255);t[o*4+0]=s,t[o*4+1]=s,t[o*4+2]=s,t[o*4+3]=255}let c=i.createTexture({size:[v,1,1],dimension:"2d",format:I,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST});return i.queue.writeTexture({texture:c},t,{bytesPerRow:W},[v,1,1]),c}var ne={"hue-vs-hue":0,"hue-vs-sat":1,"lum-vs-sat":2,"sat-vs-sat":3},ie={"hue-vs-hue":"hueVsHue","hue-vs-sat":"hueVsSat","lum-vs-sat":"lumVsSat","sat-vs-sat":"satVsSat"},j=async i=>{let{ctx:r,encoder:n,pass:t,targetView:c,targetTexture:o,targetWidth:u,targetHeight:s,props:e,drawChild:d}=i,a=e.virtualMedia?.operation;if(a?.op!=="Curves"||!e.virtualMedia?.children?.[0])return;t.end();let l=e.virtualMedia.children[0],f=u,g=s,b=a.nodeId||"curves_fallback",p=a.curveType||"rgb",m=r.renderer.getTemporaryTexture(f,g,[...e.excludeTextures||[],o]),y=m.createView();r.renderer.beginFrame(n,y,{r:0,g:0,b:0,a:0},f,g,"clear").end(),r.renderer.pushScissor({x:0,y:0,width:f,height:g}),r.renderer.pushIdentity(),await d(l,{...e,virtualMedia:l},y,m,f,g),r.renderer.popTransform(),r.renderer.popScissor();let _=r.renderer.samplerCache.getSampler(r.device),G=r.renderer.getTemporaryTexture(f,g,[m,o,...e.excludeTextures||[]]);if(p==="rgb"){let T=JSON.stringify({curveType:p,master:a.master,red:a.red,green:a.green,blue:a.blue}),U=F(r.device,T,()=>re(r.device,a)),{pipeline:A,lutBindGroupLayout:C,srcBindGroupLayout:w}=$(r.device,r.renderer.format),S=n.beginRenderPass({colorAttachments:[{view:G.createView(),loadOp:"clear",storeOp:"store",clearValue:{r:0,g:0,b:0,a:0}}]});S.setPipeline(A),S.setBindGroup(0,r.device.createBindGroup({layout:C,entries:[{binding:0,resource:U.createView()},{binding:1,resource:_}]})),S.setBindGroup(1,r.renderer.bindGroupCache.getBindGroup(r.device,w,m,_)),S.draw(4),S.end()}else{let T=ie[p],U=a[T]||[{x:0,y:.5},{x:1,y:.5}],A=JSON.stringify({curveType:p,points:U}),C=F(r.device,A,()=>te(r.device,U)),w=new Uint32Array([ne[p]??0,0,0,0]),S=r.renderer.getTemporaryBuffer(w),{pipeline:z,uniformLayout:Z,srcBindGroupLayout:q}=Q(r.device,r.renderer.format),M=n.beginRenderPass({colorAttachments:[{view:G.createView(),loadOp:"clear",storeOp:"store",clearValue:{r:0,g:0,b:0,a:0}}]});M.setPipeline(z),M.setBindGroup(0,r.device.createBindGroup({layout:Z,entries:[{binding:0,resource:{buffer:S}},{binding:1,resource:C.createView()},{binding:2,resource:_}]})),M.setBindGroup(1,r.renderer.bindGroupCache.getBindGroup(r.device,q,m,_)),M.draw(4),M.end()}N(r.device,n,G,b);let h=r.renderer.beginFrame(n,c,{r:0,g:0,b:0,a:0},u,s,"load");r.renderer.drawTexture(h,G,{x:0,y:0,width:u,height:s},{opacity:e.opacity??1}),i.pass=h};var se=L({WebGPURenderer:j}),me=se;export{se as a,me as b};
|