framefields 2.0.9 → 2.0.11
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 +17 -6
- package/dist/audio/index.d.mts +4 -4
- package/dist/audio/index.mjs +10 -10
- package/dist/{audio-BxA0sL9z.d.mts → audio-BHanw8Jb.d.mts} +3 -3
- package/dist/{audio-BxA0sL9z.d.mts.map → audio-BHanw8Jb.d.mts.map} +1 -1
- package/dist/{audio-Dev4NGPa.mjs → audio-COOMNwL5.mjs} +4 -4
- package/dist/{audio-Dev4NGPa.mjs.map → audio-COOMNwL5.mjs.map} +1 -1
- package/dist/{dist-CoSg-CWr.mjs → dist-BAVZdFEJ.mjs} +3 -3
- package/dist/{dist-CoSg-CWr.mjs.map → dist-BAVZdFEJ.mjs.map} +1 -1
- package/dist/{dist-DzUJmIHt.mjs → dist-BYqNNwsl.mjs} +2 -2
- package/dist/{dist-DzUJmIHt.mjs.map → dist-BYqNNwsl.mjs.map} +1 -1
- package/dist/{dist-B9Afsv83.mjs → dist-CbG3QxDw.mjs} +651 -2
- package/dist/dist-CbG3QxDw.mjs.map +1 -0
- package/dist/{dist-DgfykO99.mjs → dist-Cxi68OuY.mjs} +5347 -3286
- package/dist/dist-Cxi68OuY.mjs.map +1 -0
- package/dist/effects/index.d.mts +4 -4
- package/dist/effects/index.mjs +25 -25
- package/dist/{effects-hxRwxjyC.mjs → effects-DzbjFhyA.mjs} +3 -3
- package/dist/{effects-hxRwxjyC.mjs.map → effects-DzbjFhyA.mjs.map} +1 -1
- package/dist/fonts/index.d.mts +2 -2
- package/dist/fonts/index.mjs +1 -1
- package/dist/{fonts-BznIea-I.mjs → fonts-C0W6TgJk.mjs} +52 -5
- package/dist/fonts-C0W6TgJk.mjs.map +1 -0
- package/dist/{index-J9CIK_nu.d.mts → index-9B8CJowc.d.mts} +2 -2
- package/dist/{index-J9CIK_nu.d.mts.map → index-9B8CJowc.d.mts.map} +1 -1
- package/dist/{index-CvDVpaKn.d.mts → index-CDoTrMs1.d.mts} +4 -4
- package/dist/{index-CvDVpaKn.d.mts.map → index-CDoTrMs1.d.mts.map} +1 -1
- package/dist/{index-BXNNJVs8.d.mts → index-CYGpSVsf.d.mts} +2 -2
- package/dist/{index-BXNNJVs8.d.mts.map → index-CYGpSVsf.d.mts.map} +1 -1
- package/dist/{index-D1zaOwEU.d.mts → index-DDEPvMww.d.mts} +520 -71
- package/dist/index-DDEPvMww.d.mts.map +1 -0
- package/dist/{index-oodg5k9K.d.mts → index-DGJp1d30.d.mts} +3 -3
- package/dist/{index-oodg5k9K.d.mts.map → index-DGJp1d30.d.mts.map} +1 -1
- package/dist/{index-fo4E7A6C.d.mts → index-DRZu3ezy.d.mts} +3 -3
- package/dist/{index-fo4E7A6C.d.mts.map → index-DRZu3ezy.d.mts.map} +1 -1
- package/dist/{index-CQcdKyxF.d.mts → index-DnWsbbuZ.d.mts} +54 -2
- package/dist/index-DnWsbbuZ.d.mts.map +1 -0
- package/dist/index.d.mts +398 -18
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +633 -57
- 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-DZTbEON9.mjs → preview-BV2C4Fk6.mjs} +2 -2
- package/dist/{preview-DZTbEON9.mjs.map → preview-BV2C4Fk6.mjs.map} +1 -1
- package/dist/preview-engine/{chunk-VVLM6LZ3.mjs → chunk-6256GQFP.mjs} +1 -1
- package/dist/preview-engine/{chunk-VWLR2AZR.mjs → chunk-AEK5BO3J.mjs} +1 -1
- package/dist/preview-engine/{chunk-YG35X5R5.mjs → chunk-AWTH2WZO.mjs} +1 -1
- package/dist/preview-engine/{chunk-7DIAFPQP.mjs → chunk-ECPP3UG6.mjs} +1 -1
- package/dist/preview-engine/{chunk-5JD65JSJ.mjs → chunk-FGHOHCFG.mjs} +1 -1
- package/dist/preview-engine/chunk-IMV5SBQV.mjs +1 -0
- package/dist/preview-engine/chunk-IQKIHFNZ.mjs +1 -0
- package/dist/preview-engine/chunk-L3IEJZ5S.mjs +474 -0
- package/dist/preview-engine/chunk-M7NMFDJ3.mjs +3 -0
- package/dist/preview-engine/chunk-MJM3NFEC.mjs +315 -0
- package/dist/preview-engine/chunk-NFAGEP43.mjs +1448 -0
- package/dist/preview-engine/{chunk-5PPSCISJ.mjs → chunk-Q66QQI6N.mjs} +1 -1
- package/dist/preview-engine/{chunk-JAOXXYXG.mjs → chunk-QYRDQMNB.mjs} +1 -1
- package/dist/preview-engine/{chunk-XCYFPA34.mjs → chunk-RJUAM52F.mjs} +1 -1
- package/dist/preview-engine/chunk-VRGREB3V.mjs +1 -0
- package/dist/preview-engine/{chunk-AW7HNZKR.mjs → chunk-Y6HWYPKX.mjs} +1 -1
- package/dist/preview-engine/effects.mjs +1 -1
- package/dist/preview-engine/fonts.mjs +1 -1
- package/dist/preview-engine/framefields.mjs +27 -27
- package/dist/preview-engine/player.mjs +1 -1
- package/dist/preview-engine/renderers-5BV6JGTU.mjs +248 -0
- package/dist/preview-engine/renderers-7X2W6QWX.mjs +1 -0
- package/dist/preview-engine/renderers-EOJMPPAQ.mjs +1 -0
- package/dist/preview-engine/renderers-G5KQISVL.mjs +1 -0
- package/dist/preview-engine/renderers-GMX2ZQDG.mjs +1 -0
- package/dist/preview-engine/renderers-TVTQ2R74.mjs +1 -0
- package/dist/preview-engine/renderers-ZIMBODX6.mjs +1 -0
- package/dist/{program-C797QMRL.mjs → program-BmNKgzja.mjs} +281 -23
- package/dist/program-BmNKgzja.mjs.map +1 -0
- package/dist/renderer/index.d.mts +2 -2
- package/dist/renderer/index.mjs +2 -2
- package/dist/{renderer-D-4Yh-RK.mjs → renderer-1VuQTY1Z.mjs} +2 -2
- package/dist/{renderer-D-4Yh-RK.mjs.map → renderer-1VuQTY1Z.mjs.map} +1 -1
- package/dist/renderer-6oMSare3.mjs +3 -0
- package/dist/renderer-B1ComPb2.mjs +3 -0
- package/dist/{renderer-DgSO5OO0.mjs → renderer-B1YMwl2B.mjs} +1 -1
- package/dist/{renderer-9QCHY8Kh.mjs → renderer-B2ieylQ3.mjs} +2 -2
- package/dist/{renderer-9QCHY8Kh.mjs.map → renderer-B2ieylQ3.mjs.map} +1 -1
- package/dist/{renderer-CuqhAB4i.mjs → renderer-B8-kzZdP.mjs} +2 -2
- package/dist/{renderer-CuqhAB4i.mjs.map → renderer-B8-kzZdP.mjs.map} +1 -1
- package/dist/{renderer-Dn8v2o9L.mjs → renderer-B8UaFNqb.mjs} +3 -3
- package/dist/{renderer-Dn8v2o9L.mjs.map → renderer-B8UaFNqb.mjs.map} +1 -1
- package/dist/{renderer-DPpgBTlK.mjs → renderer-BDbTWSpP.mjs} +3 -3
- package/dist/{renderer-DPpgBTlK.mjs.map → renderer-BDbTWSpP.mjs.map} +1 -1
- package/dist/{renderer-CrVAvP92.mjs → renderer-BIIWCg_J.mjs} +3 -3
- package/dist/{renderer-CrVAvP92.mjs.map → renderer-BIIWCg_J.mjs.map} +1 -1
- package/dist/{renderer-5jfDUKd4.mjs → renderer-BJ1aTkZf.mjs} +3 -3
- package/dist/{renderer-5jfDUKd4.mjs.map → renderer-BJ1aTkZf.mjs.map} +1 -1
- package/dist/renderer-BQ5Bz5D0.mjs +3 -0
- package/dist/{renderer-D6Gi_h4K.mjs → renderer-BSaYG8aw.mjs} +1 -1
- package/dist/{renderer-2NQWaZd7.d.mts → renderer-BTdOMMEx.d.mts} +2 -2
- package/dist/{renderer-2NQWaZd7.d.mts.map → renderer-BTdOMMEx.d.mts.map} +1 -1
- package/dist/renderer-BZcn_iBl.mjs +3 -0
- package/dist/{renderer-DnF3aXPX.mjs → renderer-Bc04fivZ.mjs} +3 -3
- package/dist/{renderer-DnF3aXPX.mjs.map → renderer-Bc04fivZ.mjs.map} +1 -1
- package/dist/{renderer-B1UeU7lX.mjs → renderer-BfAWZziM.mjs} +193 -12
- package/dist/renderer-BfAWZziM.mjs.map +1 -0
- package/dist/{renderer-CKJb_Lky.mjs → renderer-Bfgd4N0O.mjs} +3 -3
- package/dist/{renderer-CKJb_Lky.mjs.map → renderer-Bfgd4N0O.mjs.map} +1 -1
- package/dist/{renderer-b6sZN90h.mjs → renderer-BhZZEyFX.mjs} +2 -2
- package/dist/{renderer-b6sZN90h.mjs.map → renderer-BhZZEyFX.mjs.map} +1 -1
- package/dist/{renderer-C-PfbkPu.mjs → renderer-Bhdf90Zq.mjs} +2 -2
- package/dist/{renderer-C-PfbkPu.mjs.map → renderer-Bhdf90Zq.mjs.map} +1 -1
- package/dist/renderer-Bp6sDMa6.mjs +3 -0
- package/dist/renderer-Bt7_sb_Y.mjs +3 -0
- package/dist/{renderer-CB8hMQgm.mjs → renderer-Bv21DbWy.mjs} +1 -1
- package/dist/{renderer-gT0ADXMW.mjs → renderer-Bv6q84TU.mjs} +2 -2
- package/dist/{renderer-gT0ADXMW.mjs.map → renderer-Bv6q84TU.mjs.map} +1 -1
- package/dist/renderer-C606ZPUn.mjs +3 -0
- package/dist/renderer-C9jyKn1i.mjs +3 -0
- package/dist/renderer-CERfcxgv.mjs +3 -0
- package/dist/renderer-CG5PzNkv.mjs +3 -0
- package/dist/{renderer-CpUbDJAV.mjs → renderer-CI7sG_cv.mjs} +2 -2
- package/dist/{renderer-CpUbDJAV.mjs.map → renderer-CI7sG_cv.mjs.map} +1 -1
- package/dist/renderer-CPoIMVdk.mjs +3 -0
- package/dist/{renderer-B4ecTNR7.mjs → renderer-CWTpc4ff.mjs} +2 -2
- package/dist/{renderer-B4ecTNR7.mjs.map → renderer-CWTpc4ff.mjs.map} +1 -1
- package/dist/{renderer-D3uNI10l.mjs → renderer-CXn5HAnK.mjs} +3 -3
- package/dist/{renderer-D3uNI10l.mjs.map → renderer-CXn5HAnK.mjs.map} +1 -1
- package/dist/{renderer-DCK73tcD.mjs → renderer-C_TPMHiH.mjs} +2 -2
- package/dist/{renderer-DCK73tcD.mjs.map → renderer-C_TPMHiH.mjs.map} +1 -1
- package/dist/renderer-Ca7L1EOp.mjs +3 -0
- package/dist/{renderer-6PqlYQjC.mjs → renderer-CaaOKMSd.mjs} +2 -2
- package/dist/{renderer-6PqlYQjC.mjs.map → renderer-CaaOKMSd.mjs.map} +1 -1
- package/dist/{renderer-DX38J6mK.mjs → renderer-CdciwwMI.mjs} +3 -3
- package/dist/{renderer-DX38J6mK.mjs.map → renderer-CdciwwMI.mjs.map} +1 -1
- package/dist/{renderer-DRpE3ZW4.mjs → renderer-CfC_aiew.mjs} +3 -3
- package/dist/{renderer-DRpE3ZW4.mjs.map → renderer-CfC_aiew.mjs.map} +1 -1
- package/dist/{renderer-BE4Ns0nw.mjs → renderer-ChdLYS-G.mjs} +3 -3
- package/dist/{renderer-BE4Ns0nw.mjs.map → renderer-ChdLYS-G.mjs.map} +1 -1
- package/dist/renderer-Cl6GkeHx.mjs +3 -0
- package/dist/renderer-ClcjrFyo.mjs +3 -0
- package/dist/{renderer-B8gTyU3w.mjs → renderer-CnXW28b9.mjs} +2 -2
- package/dist/{renderer-B8gTyU3w.mjs.map → renderer-CnXW28b9.mjs.map} +1 -1
- package/dist/{renderer-C2gnWTQZ.mjs → renderer-Ctk2zzfy.mjs} +3 -3
- package/dist/{renderer-C2gnWTQZ.mjs.map → renderer-Ctk2zzfy.mjs.map} +1 -1
- package/dist/{renderer-EmG34sT2.mjs → renderer-CtyD_Xju.mjs} +2 -2
- package/dist/{renderer-EmG34sT2.mjs.map → renderer-CtyD_Xju.mjs.map} +1 -1
- package/dist/renderer-CySUP_wk.mjs +3 -0
- package/dist/renderer-D2l_Odyg.mjs +3 -0
- package/dist/{renderer-CckJJHbM.mjs → renderer-D2nCGcjv.mjs} +2 -2
- package/dist/{renderer-CckJJHbM.mjs.map → renderer-D2nCGcjv.mjs.map} +1 -1
- package/dist/renderer-DCPCYySt.mjs +3 -0
- package/dist/{renderer-BgqjWI7K.mjs → renderer-DIgsilTw.mjs} +3 -3
- package/dist/{renderer-BgqjWI7K.mjs.map → renderer-DIgsilTw.mjs.map} +1 -1
- package/dist/renderer-DIkpJEOZ.mjs +3 -0
- package/dist/{renderer-CxQ5v4fJ.mjs → renderer-DML9qpmS.mjs} +2 -2
- package/dist/{renderer-CxQ5v4fJ.mjs.map → renderer-DML9qpmS.mjs.map} +1 -1
- package/dist/renderer-DNSXPkf_.mjs +3 -0
- package/dist/renderer-DP-CvZ_Z.mjs +3 -0
- package/dist/renderer-DeXb8R6h.mjs +3 -0
- package/dist/renderer-DezO-ZaP.mjs +4 -0
- package/dist/renderer-DhXe04fC.mjs +3 -0
- package/dist/{renderer-BwmZUkvd.mjs → renderer-DirxsOjq.mjs} +2 -2
- package/dist/{renderer-BwmZUkvd.mjs.map → renderer-DirxsOjq.mjs.map} +1 -1
- package/dist/{renderer-BcPpcKDI.mjs → renderer-Djlb4TLO.mjs} +3 -3
- package/dist/{renderer-BcPpcKDI.mjs.map → renderer-Djlb4TLO.mjs.map} +1 -1
- package/dist/renderer-DnH3SI7w.mjs +3 -0
- package/dist/{renderer-xp_J0ln7.mjs → renderer-DpGc-N3G.mjs} +3 -3
- package/dist/{renderer-xp_J0ln7.mjs.map → renderer-DpGc-N3G.mjs.map} +1 -1
- package/dist/renderer-Dpw4oi33.mjs +3 -0
- package/dist/{renderer-DAFyJ4dv.mjs → renderer-DxTs4Iyi.mjs} +2 -2
- package/dist/{renderer-DAFyJ4dv.mjs.map → renderer-DxTs4Iyi.mjs.map} +1 -1
- package/dist/{renderer-BXaK02qA.mjs → renderer-Dy0utCl7.mjs} +3 -3
- package/dist/{renderer-BXaK02qA.mjs.map → renderer-Dy0utCl7.mjs.map} +1 -1
- package/dist/renderer-Md-ytU0v.mjs +3 -0
- package/dist/{renderer-BTYncYDf.mjs → renderer-RKsXlF_0.mjs} +43 -43
- package/dist/{renderer-BTYncYDf.mjs.map → renderer-RKsXlF_0.mjs.map} +1 -1
- package/dist/renderer-U-bhWO9Q.mjs +3 -0
- package/dist/{renderer-CV8diddR.mjs → renderer-WSGuj_V6.mjs} +2 -2
- package/dist/{renderer-CV8diddR.mjs.map → renderer-WSGuj_V6.mjs.map} +1 -1
- package/dist/{renderer-_bygZSKk.mjs → renderer-bsWnRNpJ.mjs} +2 -2
- package/dist/{renderer-_bygZSKk.mjs.map → renderer-bsWnRNpJ.mjs.map} +1 -1
- package/dist/{renderer-lq4n1hSS.mjs → renderer-cgxO2xN6.mjs} +3 -3
- package/dist/{renderer-lq4n1hSS.mjs.map → renderer-cgxO2xN6.mjs.map} +1 -1
- package/dist/{renderer-zvtpCnqy.mjs → renderer-dncoIVdd.mjs} +1 -1
- package/dist/{renderer-BpJgfBQ8.mjs → renderer-kwmlLQOO.mjs} +3 -3
- package/dist/{renderer-BpJgfBQ8.mjs.map → renderer-kwmlLQOO.mjs.map} +1 -1
- package/dist/{renderer--vY6O19V.mjs → renderer-vqkKWqa5.mjs} +2 -2
- package/dist/{renderer--vY6O19V.mjs.map → renderer-vqkKWqa5.mjs.map} +1 -1
- package/dist/renderer-zA5okHds.mjs +3 -0
- package/dist/{renderers-CP8CFWDs-Ciap7y_j.mjs → renderers-CP8CFWDs-DwQTx8S7.mjs} +3 -3
- package/dist/{renderers-CP8CFWDs-Ciap7y_j.mjs.map → renderers-CP8CFWDs-DwQTx8S7.mjs.map} +1 -1
- package/dist/signals/index.d.mts +5 -5
- package/dist/signals/index.mjs +6 -6
- package/dist/{signals-CsxqD2AA.mjs → signals-Bv1OweKd.mjs} +3 -3
- package/dist/{signals-CsxqD2AA.mjs.map → signals-Bv1OweKd.mjs.map} +1 -1
- package/package.json +55 -55
- package/dist/dist-B9Afsv83.mjs.map +0 -1
- package/dist/dist-DgfykO99.mjs.map +0 -1
- package/dist/fonts-BznIea-I.mjs.map +0 -1
- package/dist/index-CQcdKyxF.d.mts.map +0 -1
- package/dist/index-D1zaOwEU.d.mts.map +0 -1
- package/dist/preview-engine/chunk-BUWK5RJ4.mjs +0 -997
- package/dist/preview-engine/chunk-CNSHAFEA.mjs +0 -1
- package/dist/preview-engine/chunk-OF75EHTX.mjs +0 -418
- package/dist/preview-engine/chunk-UC7CSW2A.mjs +0 -1
- package/dist/preview-engine/chunk-WQ7BFSKF.mjs +0 -3
- package/dist/preview-engine/chunk-ZJFAGIOM.mjs +0 -315
- package/dist/preview-engine/renderers-32PIFHPS.mjs +0 -1
- package/dist/preview-engine/renderers-3Y3EMRDJ.mjs +0 -1
- package/dist/preview-engine/renderers-CHJWUJVI.mjs +0 -1
- package/dist/preview-engine/renderers-CI2GXWLP.mjs +0 -1
- package/dist/preview-engine/renderers-EE2GFG7J.mjs +0 -1
- package/dist/preview-engine/renderers-LTNTQLWE.mjs +0 -248
- package/dist/preview-engine/renderers-UGZUPONY.mjs +0 -1
- package/dist/program-C797QMRL.mjs.map +0 -1
- package/dist/renderer-3uTfN95I.mjs +0 -3
- package/dist/renderer-B1UeU7lX.mjs.map +0 -1
- package/dist/renderer-B5GslTP-.mjs +0 -3
- package/dist/renderer-BUIWeIKQ.mjs +0 -3
- package/dist/renderer-B_LfC88A.mjs +0 -3
- package/dist/renderer-B_zmicsE.mjs +0 -3
- package/dist/renderer-BtNxtXkR.mjs +0 -3
- package/dist/renderer-C-sZSHtf.mjs +0 -3
- package/dist/renderer-C1zifktw.mjs +0 -3
- package/dist/renderer-CCt2XTSM.mjs +0 -3
- package/dist/renderer-CL3evUmF.mjs +0 -3
- package/dist/renderer-CMXcaArD.mjs +0 -3
- package/dist/renderer-CW9D5zCP.mjs +0 -3
- package/dist/renderer-CjY77sB_.mjs +0 -3
- package/dist/renderer-D1R7vBUl.mjs +0 -3
- package/dist/renderer-D5yawxtJ.mjs +0 -3
- package/dist/renderer-DC8jr1Ay.mjs +0 -3
- package/dist/renderer-DCv-Abvn.mjs +0 -4
- package/dist/renderer-DPLFhzaV.mjs +0 -3
- package/dist/renderer-DVsF2FDr.mjs +0 -3
- package/dist/renderer-DetDm3ep.mjs +0 -3
- package/dist/renderer-DhMhJh_G.mjs +0 -3
- package/dist/renderer-DhQld4Qt.mjs +0 -3
- package/dist/renderer-Dn3rc3ah.mjs +0 -3
- package/dist/renderer-Dw9LxE2f.mjs +0 -3
- package/dist/renderer-HvrQZw5E.mjs +0 -3
- package/dist/renderer-QdJE56ts.mjs +0 -3
- package/dist/renderer-euGyUN2O.mjs +0 -3
- package/dist/renderer-p3SmBFP9.mjs +0 -3
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { n as defineRenderer } from "./renderer-CtVkU_GA.mjs";
|
|
2
|
-
import { N as drawSvgNode } from "./dist-
|
|
2
|
+
import { N as drawSvgNode } from "./dist-Cxi68OuY.mjs";
|
|
3
3
|
|
|
4
4
|
//#region ../../nodes/node-shape-generator/dist/renderers-CpnJ1Qiz.mjs
|
|
5
5
|
/**
|
|
@@ -237,4 +237,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: ShapeGeneratorWebGPURen
|
|
|
237
237
|
|
|
238
238
|
//#endregion
|
|
239
239
|
export { ShapeGeneratorWebGPURenderer, renderers_default as default };
|
|
240
|
-
//# sourceMappingURL=renderer-
|
|
240
|
+
//# sourceMappingURL=renderer-WSGuj_V6.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-CV8diddR.mjs","names":[],"sources":["../../../nodes/node-shape-generator/dist/renderers-CpnJ1Qiz.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { drawSvgNode } from \"@framefields/webgpu-renderers\";\n\n//#region src/shared/geometry.ts\n/**\n* Scale corner radii proportionally if their sum exceeds the box dimensions (W3C CSS standard).\n*/\nfunction normalizeCornerRadii(w, h, rTL, rTR, rBR, rBL) {\n\tconst topSum = rTL + rTR;\n\tconst bottomSum = rBL + rBR;\n\tconst leftSum = rTL + rBL;\n\tconst rightSum = rTR + rBR;\n\tlet scale = 1;\n\tif (topSum > w && topSum > 0) scale = Math.min(scale, w / topSum);\n\tif (bottomSum > w && bottomSum > 0) scale = Math.min(scale, w / bottomSum);\n\tif (leftSum > h && leftSum > 0) scale = Math.min(scale, h / leftSum);\n\tif (rightSum > h && rightSum > 0) scale = Math.min(scale, h / rightSum);\n\treturn [\n\t\tMath.max(0, rTL * scale),\n\t\tMath.max(0, rTR * scale),\n\t\tMath.max(0, rBR * scale),\n\t\tMath.max(0, rBL * scale)\n\t];\n}\n/**\n* Generates an SVG path string for a rounded rectangle with 4 independent corner radii.\n*/\nfunction buildRectanglePath(w, h, rTL, rTR, rBR, rBL, strokeWidth = 0) {\n\tconst inset = strokeWidth > 0 ? strokeWidth / 2 : 0;\n\tconst x = inset;\n\tconst y = inset;\n\tconst boxW = Math.max(.1, w - strokeWidth);\n\tconst boxH = Math.max(.1, h - strokeWidth);\n\tconst [rtl, rtr, rbr, rbl] = normalizeCornerRadii(boxW, boxH, rTL, rTR, rBR, rBL);\n\treturn [\n\t\t`M ${x + rtl} ${y}`,\n\t\t`L ${x + boxW - rtr} ${y}`,\n\t\trtr > 0 ? `A ${rtr} ${rtr} 0 0 1 ${x + boxW} ${y + rtr}` : \"\",\n\t\t`L ${x + boxW} ${y + boxH - rbr}`,\n\t\trbr > 0 ? `A ${rbr} ${rbr} 0 0 1 ${x + boxW - rbr} ${y + boxH}` : \"\",\n\t\t`L ${x + rbl} ${y + boxH}`,\n\t\trbl > 0 ? `A ${rbl} ${rbl} 0 0 1 ${x} ${y + boxH - rbl}` : \"\",\n\t\t`L ${x} ${y + rtl}`,\n\t\trtl > 0 ? `A ${rtl} ${rtl} 0 0 1 ${x + rtl} ${y}` : \"\",\n\t\t\"Z\"\n\t].filter(Boolean).join(\" \");\n}\n/**\n* Generates an SVG path string for an ellipse/circle.\n*/\nfunction buildEllipsePath(w, h, strokeWidth = 0) {\n\tconst cx = w / 2;\n\tconst cy = h / 2;\n\tconst rx = Math.max(.1, (w - strokeWidth) / 2);\n\tconst ry = Math.max(.1, (h - strokeWidth) / 2);\n\treturn `M ${cx - rx} ${cy} A ${rx} ${ry} 0 1 0 ${cx + rx} ${cy} A ${rx} ${ry} 0 1 0 ${cx - rx} ${cy} Z`;\n}\n/**\n* Generates an SVG path string for a regular polygon with N sides.\n*/\nfunction buildPolygonPath(w, h, sides, strokeWidth = 0) {\n\tconst n = Math.max(3, Math.min(64, Math.floor(sides)));\n\tconst cx = w / 2;\n\tconst cy = h / 2;\n\tconst radius = Math.max(.1, Math.min(w - strokeWidth, h - strokeWidth) / 2);\n\tconst points = [];\n\tconst angleStep = 2 * Math.PI / n;\n\tconst startAngle = -Math.PI / 2;\n\tfor (let i = 0; i < n; i++) {\n\t\tconst angle = startAngle + i * angleStep;\n\t\tpoints.push({\n\t\t\tx: cx + radius * Math.cos(angle),\n\t\t\ty: cy + radius * Math.sin(angle)\n\t\t});\n\t}\n\treturn points.map((p, i) => `${i === 0 ? \"M\" : \"L\"} ${p.x.toFixed(3)} ${p.y.toFixed(3)}`).join(\" \") + \" Z\";\n}\n/**\n* Generates an SVG path string for a star with N spikes and configurable inner radius ratio.\n*/\nfunction buildStarPath(w, h, pointsCount, innerRadiusRatio, strokeWidth = 0) {\n\tconst n = Math.max(3, Math.min(64, Math.floor(pointsCount)));\n\tconst ratio = Math.max(.01, Math.min(.99, innerRadiusRatio));\n\tconst cx = w / 2;\n\tconst cy = h / 2;\n\tconst outerRadius = Math.max(.1, Math.min(w - strokeWidth, h - strokeWidth) / 2);\n\tconst innerRadius = outerRadius * ratio;\n\tconst points = [];\n\tconst totalVertices = n * 2;\n\tconst angleStep = Math.PI / n;\n\tconst startAngle = -Math.PI / 2;\n\tfor (let i = 0; i < totalVertices; i++) {\n\t\tconst r = i % 2 === 0 ? outerRadius : innerRadius;\n\t\tconst angle = startAngle + i * angleStep;\n\t\tpoints.push({\n\t\t\tx: cx + r * Math.cos(angle),\n\t\t\ty: cy + r * Math.sin(angle)\n\t\t});\n\t}\n\treturn points.map((p, i) => `${i === 0 ? \"M\" : \"L\"} ${p.x.toFixed(3)} ${p.y.toFixed(3)}`).join(\" \") + \" Z\";\n}\n/**\n* Generates an SVG path string for a parametric arrow pointing right.\n*/\nfunction buildArrowPath(w, h, headWidth, headLength, shaftWidth, strokeWidth = 0) {\n\tconst inset = strokeWidth > 0 ? strokeWidth / 2 : 0;\n\tconst boxW = Math.max(1, w - strokeWidth);\n\tconst boxH = Math.max(1, h - strokeWidth);\n\tconst cy = h / 2;\n\tconst hw = Math.min(boxH, Math.max(4, headWidth));\n\tconst hl = Math.min(boxW * .9, Math.max(4, headLength));\n\tconst sw = Math.min(hw * .95, Math.max(2, shaftWidth));\n\tconst leftX = inset;\n\tconst rightX = inset + boxW;\n\tconst headBaseX = rightX - hl;\n\tconst topShaftY = cy - sw / 2;\n\tconst bottomShaftY = cy + sw / 2;\n\tconst topHeadY = cy - hw / 2;\n\tconst bottomHeadY = cy + hw / 2;\n\treturn [\n\t\t`M ${leftX.toFixed(2)} ${topShaftY.toFixed(2)}`,\n\t\t`L ${headBaseX.toFixed(2)} ${topShaftY.toFixed(2)}`,\n\t\t`L ${headBaseX.toFixed(2)} ${topHeadY.toFixed(2)}`,\n\t\t`L ${rightX.toFixed(2)} ${cy.toFixed(2)}`,\n\t\t`L ${headBaseX.toFixed(2)} ${bottomHeadY.toFixed(2)}`,\n\t\t`L ${headBaseX.toFixed(2)} ${bottomShaftY.toFixed(2)}`,\n\t\t`L ${leftX.toFixed(2)} ${bottomShaftY.toFixed(2)}`,\n\t\t\"Z\"\n\t].join(\" \");\n}\n/**\n* Calculates linear gradient coordinate vector from an angle in degrees.\n*/\nfunction calculateLinearGradientCoords(angleDeg = 0) {\n\tconst rad = angleDeg * Math.PI / 180;\n\tconst cos = Math.cos(rad);\n\tconst sin = Math.sin(rad);\n\tconst x1 = ((.5 - cos * .5) * 100).toFixed(2);\n\tconst y1 = ((.5 - sin * .5) * 100).toFixed(2);\n\tconst x2 = ((.5 + cos * .5) * 100).toFixed(2);\n\tconst y2 = ((.5 + sin * .5) * 100).toFixed(2);\n\treturn {\n\t\tx1: `${x1}%`,\n\t\ty1: `${y1}%`,\n\t\tx2: `${x2}%`,\n\t\ty2: `${y2}%`\n\t};\n}\n/**\n* Builds the complete shape geometry path for any ShapeGenerator config.\n*/\nfunction generateShapePath(config) {\n\tconst width = Math.max(1, config.width ?? 500);\n\tconst height = Math.max(1, config.height ?? 500);\n\tconst strokeWidth = config.strokeWidth ?? 0;\n\tswitch (config.shapeType) {\n\t\tcase \"Rectangle\": return buildRectanglePath(width, height, config.radiusTL ?? 0, config.radiusTR ?? 0, config.radiusBR ?? 0, config.radiusBL ?? 0, strokeWidth);\n\t\tcase \"Ellipse\": return buildEllipsePath(width, height, strokeWidth);\n\t\tcase \"Polygon\": return buildPolygonPath(width, height, config.polygonSides ?? 5, strokeWidth);\n\t\tcase \"Star\": return buildStarPath(width, height, config.starPoints ?? 5, config.starInnerRadius ?? .5, strokeWidth);\n\t\tcase \"Arrow\": return buildArrowPath(width, height, config.arrowHeadWidth ?? 40, config.arrowHeadLength ?? 40, config.arrowShaftWidth ?? 20, strokeWidth);\n\t\tcase \"CustomPath\": return config.customPath?.trim() || buildRectanglePath(width, height, 0, 0, 0, 0, strokeWidth);\n\t\tdefault: return buildRectanglePath(width, height, 0, 0, 0, 0, strokeWidth);\n\t}\n}\n\n//#endregion\n//#region src/shared/svg-generator.ts\n/**\n* Generates an SVG string representation of the parametric shape configuration.\n*/\nfunction generateShapeSvg(config) {\n\tconst width = Math.max(1, config.width ?? 500);\n\tconst height = Math.max(1, config.height ?? 500);\n\tconst pathD = generateShapePath(config);\n\tconst fillType = config.fillType ?? \"solid\";\n\tconst fillColor = config.fillColor ?? \"#3b82f6\";\n\tconst gradientEndColor = config.gradientEndColor ?? \"#1d4ed8\";\n\tconst gradientAngle = config.gradientAngle ?? 0;\n\tconst strokeColor = config.strokeColor ?? \"#ffffff\";\n\tconst strokeWidth = Math.max(0, config.strokeWidth ?? 0);\n\tconst strokeDashArray = config.strokeDashArray?.trim();\n\tconst strokeLineCap = config.strokeLineCap ?? \"round\";\n\tconst strokeLineJoin = config.strokeLineJoin ?? \"round\";\n\tconst strokeDashOffset = config.strokeDashOffset ?? 0;\n\tconst rotation = config.rotation ?? 0;\n\tconst opacity = Math.max(0, Math.min(1, config.opacity ?? 1));\n\tconst customPathScale = config.shapeType === \"CustomPath\" ? config.customPathScale ?? 1 : 1;\n\tconst gradId = `gw_shape_grad_${Math.abs(Math.round(gradientAngle) * 31 + (fillType === \"linear\" ? 1 : 2))}`;\n\tlet defs = \"\";\n\tlet fillAttr = fillColor;\n\tif (fillType === \"none\") fillAttr = \"none\";\n\telse if (fillType === \"linear\") {\n\t\tconst coords = calculateLinearGradientCoords(gradientAngle);\n\t\tdefs = `<defs><linearGradient id=\"${gradId}\" x1=\"${coords.x1}\" y1=\"${coords.y1}\" x2=\"${coords.x2}\" y2=\"${coords.y2}\"><stop offset=\"0%\" stop-color=\"${fillColor}\"/><stop offset=\"100%\" stop-color=\"${gradientEndColor}\"/></linearGradient></defs>`;\n\t\tfillAttr = `url(#${gradId})`;\n\t} else if (fillType === \"radial\") {\n\t\tdefs = `<defs><radialGradient id=\"${gradId}\" cx=\"50%\" cy=\"50%\" r=\"50%\"><stop offset=\"0%\" stop-color=\"${fillColor}\"/><stop offset=\"100%\" stop-color=\"${gradientEndColor}\"/></radialGradient></defs>`;\n\t\tfillAttr = `url(#${gradId})`;\n\t}\n\tconst strokeAttrs = strokeWidth > 0 ? `stroke=\"${strokeColor}\" stroke-width=\"${strokeWidth}\" stroke-linecap=\"${strokeLineCap}\" stroke-linejoin=\"${strokeLineJoin}\" ${strokeDashArray ? `stroke-dasharray=\"${strokeDashArray}\"` : \"\"} ${strokeDashOffset ? `stroke-dashoffset=\"${strokeDashOffset}\"` : \"\"}` : \"stroke=\\\"none\\\"\";\n\tconst cx = width / 2;\n\tconst cy = height / 2;\n\tconst transformParts = [];\n\tif (rotation !== 0) transformParts.push(`rotate(${rotation} ${cx} ${cy})`);\n\tif (customPathScale !== 1) transformParts.push(`scale(${customPathScale})`);\n\tconst transformAttr = transformParts.length > 0 ? `transform=\"${transformParts.join(\" \")}\"` : \"\";\n\tconst opacityAttr = opacity < 1 ? `opacity=\"${opacity}\"` : \"\";\n\treturn `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 ${width} ${height}\" width=\"${width}\" height=\"${height}\">${defs}<g ${transformAttr} ${opacityAttr}><path d=\"${pathD}\" fill=\"${fillAttr}\" ${strokeAttrs} /></g></svg>`;\n}\n/**\n* Encodes the SVG into a base64 data URL for robust cross-environment rendering.\n*/\nfunction generateShapeSvgDataUrl(config) {\n\tconst svgString = generateShapeSvg(config);\n\tif (typeof Buffer !== \"undefined\") return `data:image/svg+xml;base64,${Buffer.from(svgString).toString(\"base64\")}`;\n\treturn `data:image/svg+xml;base64,${btoa(unescape(encodeURIComponent(svgString)))}`;\n}\n\n//#endregion\n//#region src/renderers/webgpu-renderer.ts\nconst ShapeGeneratorWebGPURenderer = async (args) => {\n\tconst { ctx, pass, props, targetWidth, targetHeight } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (!op || op.op !== \"ShapeGenerator\" && op.op !== \"source\") return;\n\tconst svgDataUrl = generateShapeSvgDataUrl(op);\n\tconst width = targetWidth > 0 ? targetWidth : op.width ?? 500;\n\tconst height = targetHeight > 0 ? targetHeight : op.height ?? 500;\n\tconst isHeadless = Boolean(ctx.isHeadless || typeof window === \"undefined\");\n\tawait drawSvgNode(ctx, pass, {\n\t\tsrc: svgDataUrl,\n\t\tdstRect: {\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t\twidth,\n\t\t\theight\n\t\t},\n\t\topacity: op.opacity ?? 1,\n\t\tisHeadless\n\t});\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: ShapeGeneratorWebGPURenderer });\n\n//#endregion\nexport { buildArrowPath as a, buildRectanglePath as c, generateShapePath as d, normalizeCornerRadii as f, generateShapeSvgDataUrl as i, buildStarPath as l, ShapeGeneratorWebGPURenderer as n, buildEllipsePath as o, generateShapeSvg as r, buildPolygonPath as s, renderers_default as t, calculateLinearGradientCoords as u };\n//# sourceMappingURL=renderers-CpnJ1Qiz.mjs.map"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"renderer-WSGuj_V6.mjs","names":[],"sources":["../../../nodes/node-shape-generator/dist/renderers-CpnJ1Qiz.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { drawSvgNode } from \"@framefields/webgpu-renderers\";\n\n//#region src/shared/geometry.ts\n/**\n* Scale corner radii proportionally if their sum exceeds the box dimensions (W3C CSS standard).\n*/\nfunction normalizeCornerRadii(w, h, rTL, rTR, rBR, rBL) {\n\tconst topSum = rTL + rTR;\n\tconst bottomSum = rBL + rBR;\n\tconst leftSum = rTL + rBL;\n\tconst rightSum = rTR + rBR;\n\tlet scale = 1;\n\tif (topSum > w && topSum > 0) scale = Math.min(scale, w / topSum);\n\tif (bottomSum > w && bottomSum > 0) scale = Math.min(scale, w / bottomSum);\n\tif (leftSum > h && leftSum > 0) scale = Math.min(scale, h / leftSum);\n\tif (rightSum > h && rightSum > 0) scale = Math.min(scale, h / rightSum);\n\treturn [\n\t\tMath.max(0, rTL * scale),\n\t\tMath.max(0, rTR * scale),\n\t\tMath.max(0, rBR * scale),\n\t\tMath.max(0, rBL * scale)\n\t];\n}\n/**\n* Generates an SVG path string for a rounded rectangle with 4 independent corner radii.\n*/\nfunction buildRectanglePath(w, h, rTL, rTR, rBR, rBL, strokeWidth = 0) {\n\tconst inset = strokeWidth > 0 ? strokeWidth / 2 : 0;\n\tconst x = inset;\n\tconst y = inset;\n\tconst boxW = Math.max(.1, w - strokeWidth);\n\tconst boxH = Math.max(.1, h - strokeWidth);\n\tconst [rtl, rtr, rbr, rbl] = normalizeCornerRadii(boxW, boxH, rTL, rTR, rBR, rBL);\n\treturn [\n\t\t`M ${x + rtl} ${y}`,\n\t\t`L ${x + boxW - rtr} ${y}`,\n\t\trtr > 0 ? `A ${rtr} ${rtr} 0 0 1 ${x + boxW} ${y + rtr}` : \"\",\n\t\t`L ${x + boxW} ${y + boxH - rbr}`,\n\t\trbr > 0 ? `A ${rbr} ${rbr} 0 0 1 ${x + boxW - rbr} ${y + boxH}` : \"\",\n\t\t`L ${x + rbl} ${y + boxH}`,\n\t\trbl > 0 ? `A ${rbl} ${rbl} 0 0 1 ${x} ${y + boxH - rbl}` : \"\",\n\t\t`L ${x} ${y + rtl}`,\n\t\trtl > 0 ? `A ${rtl} ${rtl} 0 0 1 ${x + rtl} ${y}` : \"\",\n\t\t\"Z\"\n\t].filter(Boolean).join(\" \");\n}\n/**\n* Generates an SVG path string for an ellipse/circle.\n*/\nfunction buildEllipsePath(w, h, strokeWidth = 0) {\n\tconst cx = w / 2;\n\tconst cy = h / 2;\n\tconst rx = Math.max(.1, (w - strokeWidth) / 2);\n\tconst ry = Math.max(.1, (h - strokeWidth) / 2);\n\treturn `M ${cx - rx} ${cy} A ${rx} ${ry} 0 1 0 ${cx + rx} ${cy} A ${rx} ${ry} 0 1 0 ${cx - rx} ${cy} Z`;\n}\n/**\n* Generates an SVG path string for a regular polygon with N sides.\n*/\nfunction buildPolygonPath(w, h, sides, strokeWidth = 0) {\n\tconst n = Math.max(3, Math.min(64, Math.floor(sides)));\n\tconst cx = w / 2;\n\tconst cy = h / 2;\n\tconst radius = Math.max(.1, Math.min(w - strokeWidth, h - strokeWidth) / 2);\n\tconst points = [];\n\tconst angleStep = 2 * Math.PI / n;\n\tconst startAngle = -Math.PI / 2;\n\tfor (let i = 0; i < n; i++) {\n\t\tconst angle = startAngle + i * angleStep;\n\t\tpoints.push({\n\t\t\tx: cx + radius * Math.cos(angle),\n\t\t\ty: cy + radius * Math.sin(angle)\n\t\t});\n\t}\n\treturn points.map((p, i) => `${i === 0 ? \"M\" : \"L\"} ${p.x.toFixed(3)} ${p.y.toFixed(3)}`).join(\" \") + \" Z\";\n}\n/**\n* Generates an SVG path string for a star with N spikes and configurable inner radius ratio.\n*/\nfunction buildStarPath(w, h, pointsCount, innerRadiusRatio, strokeWidth = 0) {\n\tconst n = Math.max(3, Math.min(64, Math.floor(pointsCount)));\n\tconst ratio = Math.max(.01, Math.min(.99, innerRadiusRatio));\n\tconst cx = w / 2;\n\tconst cy = h / 2;\n\tconst outerRadius = Math.max(.1, Math.min(w - strokeWidth, h - strokeWidth) / 2);\n\tconst innerRadius = outerRadius * ratio;\n\tconst points = [];\n\tconst totalVertices = n * 2;\n\tconst angleStep = Math.PI / n;\n\tconst startAngle = -Math.PI / 2;\n\tfor (let i = 0; i < totalVertices; i++) {\n\t\tconst r = i % 2 === 0 ? outerRadius : innerRadius;\n\t\tconst angle = startAngle + i * angleStep;\n\t\tpoints.push({\n\t\t\tx: cx + r * Math.cos(angle),\n\t\t\ty: cy + r * Math.sin(angle)\n\t\t});\n\t}\n\treturn points.map((p, i) => `${i === 0 ? \"M\" : \"L\"} ${p.x.toFixed(3)} ${p.y.toFixed(3)}`).join(\" \") + \" Z\";\n}\n/**\n* Generates an SVG path string for a parametric arrow pointing right.\n*/\nfunction buildArrowPath(w, h, headWidth, headLength, shaftWidth, strokeWidth = 0) {\n\tconst inset = strokeWidth > 0 ? strokeWidth / 2 : 0;\n\tconst boxW = Math.max(1, w - strokeWidth);\n\tconst boxH = Math.max(1, h - strokeWidth);\n\tconst cy = h / 2;\n\tconst hw = Math.min(boxH, Math.max(4, headWidth));\n\tconst hl = Math.min(boxW * .9, Math.max(4, headLength));\n\tconst sw = Math.min(hw * .95, Math.max(2, shaftWidth));\n\tconst leftX = inset;\n\tconst rightX = inset + boxW;\n\tconst headBaseX = rightX - hl;\n\tconst topShaftY = cy - sw / 2;\n\tconst bottomShaftY = cy + sw / 2;\n\tconst topHeadY = cy - hw / 2;\n\tconst bottomHeadY = cy + hw / 2;\n\treturn [\n\t\t`M ${leftX.toFixed(2)} ${topShaftY.toFixed(2)}`,\n\t\t`L ${headBaseX.toFixed(2)} ${topShaftY.toFixed(2)}`,\n\t\t`L ${headBaseX.toFixed(2)} ${topHeadY.toFixed(2)}`,\n\t\t`L ${rightX.toFixed(2)} ${cy.toFixed(2)}`,\n\t\t`L ${headBaseX.toFixed(2)} ${bottomHeadY.toFixed(2)}`,\n\t\t`L ${headBaseX.toFixed(2)} ${bottomShaftY.toFixed(2)}`,\n\t\t`L ${leftX.toFixed(2)} ${bottomShaftY.toFixed(2)}`,\n\t\t\"Z\"\n\t].join(\" \");\n}\n/**\n* Calculates linear gradient coordinate vector from an angle in degrees.\n*/\nfunction calculateLinearGradientCoords(angleDeg = 0) {\n\tconst rad = angleDeg * Math.PI / 180;\n\tconst cos = Math.cos(rad);\n\tconst sin = Math.sin(rad);\n\tconst x1 = ((.5 - cos * .5) * 100).toFixed(2);\n\tconst y1 = ((.5 - sin * .5) * 100).toFixed(2);\n\tconst x2 = ((.5 + cos * .5) * 100).toFixed(2);\n\tconst y2 = ((.5 + sin * .5) * 100).toFixed(2);\n\treturn {\n\t\tx1: `${x1}%`,\n\t\ty1: `${y1}%`,\n\t\tx2: `${x2}%`,\n\t\ty2: `${y2}%`\n\t};\n}\n/**\n* Builds the complete shape geometry path for any ShapeGenerator config.\n*/\nfunction generateShapePath(config) {\n\tconst width = Math.max(1, config.width ?? 500);\n\tconst height = Math.max(1, config.height ?? 500);\n\tconst strokeWidth = config.strokeWidth ?? 0;\n\tswitch (config.shapeType) {\n\t\tcase \"Rectangle\": return buildRectanglePath(width, height, config.radiusTL ?? 0, config.radiusTR ?? 0, config.radiusBR ?? 0, config.radiusBL ?? 0, strokeWidth);\n\t\tcase \"Ellipse\": return buildEllipsePath(width, height, strokeWidth);\n\t\tcase \"Polygon\": return buildPolygonPath(width, height, config.polygonSides ?? 5, strokeWidth);\n\t\tcase \"Star\": return buildStarPath(width, height, config.starPoints ?? 5, config.starInnerRadius ?? .5, strokeWidth);\n\t\tcase \"Arrow\": return buildArrowPath(width, height, config.arrowHeadWidth ?? 40, config.arrowHeadLength ?? 40, config.arrowShaftWidth ?? 20, strokeWidth);\n\t\tcase \"CustomPath\": return config.customPath?.trim() || buildRectanglePath(width, height, 0, 0, 0, 0, strokeWidth);\n\t\tdefault: return buildRectanglePath(width, height, 0, 0, 0, 0, strokeWidth);\n\t}\n}\n\n//#endregion\n//#region src/shared/svg-generator.ts\n/**\n* Generates an SVG string representation of the parametric shape configuration.\n*/\nfunction generateShapeSvg(config) {\n\tconst width = Math.max(1, config.width ?? 500);\n\tconst height = Math.max(1, config.height ?? 500);\n\tconst pathD = generateShapePath(config);\n\tconst fillType = config.fillType ?? \"solid\";\n\tconst fillColor = config.fillColor ?? \"#3b82f6\";\n\tconst gradientEndColor = config.gradientEndColor ?? \"#1d4ed8\";\n\tconst gradientAngle = config.gradientAngle ?? 0;\n\tconst strokeColor = config.strokeColor ?? \"#ffffff\";\n\tconst strokeWidth = Math.max(0, config.strokeWidth ?? 0);\n\tconst strokeDashArray = config.strokeDashArray?.trim();\n\tconst strokeLineCap = config.strokeLineCap ?? \"round\";\n\tconst strokeLineJoin = config.strokeLineJoin ?? \"round\";\n\tconst strokeDashOffset = config.strokeDashOffset ?? 0;\n\tconst rotation = config.rotation ?? 0;\n\tconst opacity = Math.max(0, Math.min(1, config.opacity ?? 1));\n\tconst customPathScale = config.shapeType === \"CustomPath\" ? config.customPathScale ?? 1 : 1;\n\tconst gradId = `gw_shape_grad_${Math.abs(Math.round(gradientAngle) * 31 + (fillType === \"linear\" ? 1 : 2))}`;\n\tlet defs = \"\";\n\tlet fillAttr = fillColor;\n\tif (fillType === \"none\") fillAttr = \"none\";\n\telse if (fillType === \"linear\") {\n\t\tconst coords = calculateLinearGradientCoords(gradientAngle);\n\t\tdefs = `<defs><linearGradient id=\"${gradId}\" x1=\"${coords.x1}\" y1=\"${coords.y1}\" x2=\"${coords.x2}\" y2=\"${coords.y2}\"><stop offset=\"0%\" stop-color=\"${fillColor}\"/><stop offset=\"100%\" stop-color=\"${gradientEndColor}\"/></linearGradient></defs>`;\n\t\tfillAttr = `url(#${gradId})`;\n\t} else if (fillType === \"radial\") {\n\t\tdefs = `<defs><radialGradient id=\"${gradId}\" cx=\"50%\" cy=\"50%\" r=\"50%\"><stop offset=\"0%\" stop-color=\"${fillColor}\"/><stop offset=\"100%\" stop-color=\"${gradientEndColor}\"/></radialGradient></defs>`;\n\t\tfillAttr = `url(#${gradId})`;\n\t}\n\tconst strokeAttrs = strokeWidth > 0 ? `stroke=\"${strokeColor}\" stroke-width=\"${strokeWidth}\" stroke-linecap=\"${strokeLineCap}\" stroke-linejoin=\"${strokeLineJoin}\" ${strokeDashArray ? `stroke-dasharray=\"${strokeDashArray}\"` : \"\"} ${strokeDashOffset ? `stroke-dashoffset=\"${strokeDashOffset}\"` : \"\"}` : \"stroke=\\\"none\\\"\";\n\tconst cx = width / 2;\n\tconst cy = height / 2;\n\tconst transformParts = [];\n\tif (rotation !== 0) transformParts.push(`rotate(${rotation} ${cx} ${cy})`);\n\tif (customPathScale !== 1) transformParts.push(`scale(${customPathScale})`);\n\tconst transformAttr = transformParts.length > 0 ? `transform=\"${transformParts.join(\" \")}\"` : \"\";\n\tconst opacityAttr = opacity < 1 ? `opacity=\"${opacity}\"` : \"\";\n\treturn `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 ${width} ${height}\" width=\"${width}\" height=\"${height}\">${defs}<g ${transformAttr} ${opacityAttr}><path d=\"${pathD}\" fill=\"${fillAttr}\" ${strokeAttrs} /></g></svg>`;\n}\n/**\n* Encodes the SVG into a base64 data URL for robust cross-environment rendering.\n*/\nfunction generateShapeSvgDataUrl(config) {\n\tconst svgString = generateShapeSvg(config);\n\tif (typeof Buffer !== \"undefined\") return `data:image/svg+xml;base64,${Buffer.from(svgString).toString(\"base64\")}`;\n\treturn `data:image/svg+xml;base64,${btoa(unescape(encodeURIComponent(svgString)))}`;\n}\n\n//#endregion\n//#region src/renderers/webgpu-renderer.ts\nconst ShapeGeneratorWebGPURenderer = async (args) => {\n\tconst { ctx, pass, props, targetWidth, targetHeight } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (!op || op.op !== \"ShapeGenerator\" && op.op !== \"source\") return;\n\tconst svgDataUrl = generateShapeSvgDataUrl(op);\n\tconst width = targetWidth > 0 ? targetWidth : op.width ?? 500;\n\tconst height = targetHeight > 0 ? targetHeight : op.height ?? 500;\n\tconst isHeadless = Boolean(ctx.isHeadless || typeof window === \"undefined\");\n\tawait drawSvgNode(ctx, pass, {\n\t\tsrc: svgDataUrl,\n\t\tdstRect: {\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t\twidth,\n\t\t\theight\n\t\t},\n\t\topacity: op.opacity ?? 1,\n\t\tisHeadless\n\t});\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: ShapeGeneratorWebGPURenderer });\n\n//#endregion\nexport { buildArrowPath as a, buildRectanglePath as c, generateShapePath as d, normalizeCornerRadii as f, generateShapeSvgDataUrl as i, buildStarPath as l, ShapeGeneratorWebGPURenderer as n, buildEllipsePath as o, generateShapeSvg as r, buildPolygonPath as s, renderers_default as t, calculateLinearGradientCoords as u };\n//# sourceMappingURL=renderers-CpnJ1Qiz.mjs.map"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { wt as getActiveMediaMetadata } from "./dist-CbG3QxDw.mjs";
|
|
2
2
|
import { n as defineRenderer } from "./renderer-CtVkU_GA.mjs";
|
|
3
3
|
|
|
4
4
|
//#region ../../nodes/node-resizer-scaler/dist/renderers-Bs0GSowy.mjs
|
|
@@ -320,4 +320,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: ResizerScalerWebGPURend
|
|
|
320
320
|
|
|
321
321
|
//#endregion
|
|
322
322
|
export { renderers_default as default };
|
|
323
|
-
//# sourceMappingURL=renderer-
|
|
323
|
+
//# sourceMappingURL=renderer-bsWnRNpJ.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-_bygZSKk.mjs","names":[],"sources":["../../../nodes/node-resizer-scaler/dist/renderers-Bs0GSowy.mjs"],"sourcesContent":["import { getActiveMediaMetadata } from \"@framefields/core\";\nimport { defineRenderer } from \"@framefields/node-sdk/renderer\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst RESIZER_SCALER_SHADER = `\nstruct ScalerUniforms {\n targetSize : vec2<f32>,\n srcSize : vec2<f32>,\n fitMode : f32, // 0 = Cover, 1 = Contain, 2 = Stretch, 3 = Manual\n bgMode : f32, // 0 = Solid, 1 = Blurred, 2 = Gradient, 3 = Transparent\n bgColor : vec4<f32>,\n bgColor2 : vec4<f32>, // Used for gradient mode\n blurRadius : f32,\n brightness : f32,\n zoom : f32,\n offset : vec2<f32>,\n anchor : vec2<f32>, // x: 0 (left) - 1 (right), y: 0 (top) - 1 (bottom)\n};\n\n@group(0) @binding(0) var<uniform> u : ScalerUniforms;\n@group(0) @binding(1) var s : sampler;\n@group(0) @binding(2) var t_src : texture_2d<f32>;\n\nstruct VSOut {\n @builtin(position) pos : vec4<f32>,\n @location(0) uv : vec2<f32>,\n};\n\n@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {\n\tvar pos = array<vec2<f32>, 4>(\n\t\tvec2<f32>(-1.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0),\n\t\tvec2<f32>(-1.0, -1.0),\n\t\tvec2<f32>(1.0, -1.0)\n\t);\n\tvar uv = array<vec2<f32>, 4>(\n\t\tvec2<f32>(0.0, 0.0),\n\t\tvec2<f32>(1.0, 0.0),\n\t\tvec2<f32>(0.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0)\n\t);\n\treturn VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n let uv = in.uv;\n \n // Calculate aspect ratios\n let target_ar = u.targetSize.x / u.targetSize.y;\n let src_ar = u.srcSize.x / u.srcSize.y;\n \n // Sizing logic\n var fg_uv = uv;\n var is_outside_fg = false;\n \n if (u.fitMode == 1.0) { // Contain\n if (src_ar > target_ar) {\n // Letterbox (pads top & bottom)\n let scale_y = target_ar / src_ar;\n let offset_y = (1.0 - scale_y) * u.anchor.y;\n fg_uv.y = (uv.y - offset_y) / scale_y;\n if (fg_uv.y < 0.0 || fg_uv.y > 1.0) { is_outside_fg = true; }\n } else {\n // Pillarbox (pads left & right)\n let scale_x = src_ar / target_ar;\n let offset_x = (1.0 - scale_x) * u.anchor.x;\n fg_uv.x = (uv.x - offset_x) / scale_x;\n if (fg_uv.x < 0.0 || fg_uv.x > 1.0) { is_outside_fg = true; }\n }\n } else if (u.fitMode == 0.0) { // Cover\n if (src_ar > target_ar) {\n let scale_x = target_ar / src_ar;\n let offset_x = (1.0 - scale_x) * u.anchor.x;\n fg_uv.x = uv.x * scale_x + offset_x;\n } else {\n let scale_y = src_ar / target_ar;\n let offset_y = (1.0 - scale_y) * u.anchor.y;\n fg_uv.y = uv.y * scale_y + offset_y;\n }\n } else if (u.fitMode == 3.0) { // Manual Scale & Translation\n let norm_zoom = u.zoom / 100.0;\n fg_uv = (uv - vec2<f32>(0.5)) / norm_zoom + vec2<f32>(0.5) - (u.offset / u.targetSize);\n if (fg_uv.x < 0.0 || fg_uv.x > 1.0 || fg_uv.y < 0.0 || fg_uv.y > 1.0) {\n is_outside_fg = true;\n }\n } // (fitMode == 2.0 (Stretch) uses default fg_uv without bounds check)\n\n // Output compositing\n if (!is_outside_fg) {\n return textureSampleLevel(t_src, s, fg_uv, 0.0);\n } else {\n // Render background based on mode\n if (u.bgMode == 0.0) { // Solid\n return u.bgColor;\n } else if (u.bgMode == 1.0) { // Blurred Background Copy\n // Sample cover-fitted coordinates for background\n var bg_uv = uv;\n if (src_ar > target_ar) {\n let scale_x = target_ar / src_ar;\n let offset_x = (1.0 - scale_x) * 0.5; // Always center background\n bg_uv.x = uv.x * scale_x + offset_x;\n } else {\n let scale_y = src_ar / target_ar;\n let offset_y = (1.0 - scale_y) * 0.5;\n bg_uv.y = uv.y * scale_y + offset_y;\n }\n \n // Apply gaussian blur approximation in shader\n var color = vec4<f32>(0.0);\n let blur_steps = 5.0;\n let blur_offset = u.blurRadius / (u.targetSize * blur_steps);\n \n for (var x = -2.0; x <= 2.0; x += 1.0) {\n for (var y = -2.0; y <= 2.0; y += 1.0) {\n color += textureSampleLevel(t_src, s, bg_uv + vec2<f32>(x, y) * blur_offset, 0.0);\n }\n }\n color = color / 25.0;\n \n // Apply background brightness darken effect\n return vec4<f32>(color.rgb * u.brightness, color.a);\n } else if (u.bgMode == 2.0) { // Gradient\n return mix(u.bgColor, u.bgColor2, uv.y);\n } else { // Transparent\n return vec4<f32>(0.0, 0.0, 0.0, 0.0);\n }\n }\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nfunction getDeviceLayouts(device) {\n\tlet res = deviceResourceCache.get(device);\n\tif (res) return res;\n\tconst scalerUniformLayout = device.createBindGroupLayout({ entries: [\n\t\t{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tbuffer: { type: \"uniform\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 1,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tsampler: { type: \"filtering\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 2,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t}\n\t] });\n\tres = {\n\t\tscalerUniformLayout,\n\t\ttextureSamplerLayout: scalerUniformLayout,\n\t\tpipelineCache: /* @__PURE__ */ new Map()\n\t};\n\tdeviceResourceCache.set(device, res);\n\treturn res;\n}\nfunction getScalerResources(device, format) {\n\tconst layouts = getDeviceLayouts(device);\n\tconst cacheKey = `scaler_${format}`;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst scalerModule = device.createShaderModule({\n\t\t\tlabel: `scaler_${format}.wgsl`,\n\t\t\tcode: RESIZER_SCALER_SHADER\n\t\t});\n\t\tpipeline = device.createRenderPipeline({\n\t\t\tlabel: `ResizerScalerPipeline_${format}`,\n\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [layouts.scalerUniformLayout] }),\n\t\t\tvertex: {\n\t\t\t\tmodule: scalerModule,\n\t\t\t\tentryPoint: \"vs\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule: scalerModule,\n\t\t\t\tentryPoint: \"fs\",\n\t\t\t\ttargets: [{ format }]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t});\n\t\tlayouts.pipelineCache.set(cacheKey, pipeline);\n\t}\n\treturn {\n\t\tscalerPipeline: pipeline,\n\t\tscalerUniformLayout: layouts.scalerUniformLayout\n\t};\n}\nfunction parseHexToRGBA(hex) {\n\tconst cleanHex = hex.replace(\"#\", \"\");\n\treturn [\n\t\tparseInt(cleanHex.substring(0, 2), 16) / 255,\n\t\tparseInt(cleanHex.substring(2, 4), 16) / 255,\n\t\tparseInt(cleanHex.substring(4, 6), 16) / 255,\n\t\tcleanHex.length === 8 ? parseInt(cleanHex.substring(6, 8), 16) / 255 : 1\n\t];\n}\nconst scalerData = new Float32Array(24);\nconst ResizerScalerWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetView, targetTexture, targetWidth, targetHeight, props, drawChild } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"ResizerScaler\" || !op) return;\n\tconst childMedia = props.virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tpass.end();\n\tconst childMeta = getActiveMediaMetadata(childMedia);\n\tconst srcWidth = childMeta?.width || targetWidth || 1920;\n\tconst srcHeight = childMeta?.height || targetHeight || 1080;\n\tconst tmpTex = ctx.renderer.getTemporaryTexture(srcWidth, srcHeight, [...props.excludeTextures || [], targetTexture]);\n\tconst tmpView = tmpTex.createView();\n\tctx.renderer.beginFrame(encoder, tmpView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, srcWidth, srcHeight, \"clear\").end();\n\tctx.renderer.pushScissor({\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: srcWidth,\n\t\theight: srcHeight\n\t});\n\tctx.renderer.pushIdentity();\n\tawait drawChild(childMedia, {\n\t\t...props,\n\t\tvirtualMedia: childMedia,\n\t\tcontainerWidth: srcWidth,\n\t\tcontainerHeight: srcHeight\n\t}, tmpView, tmpTex, srcWidth, srcHeight);\n\tctx.renderer.popTransform();\n\tctx.renderer.popScissor();\n\tconst { scalerPipeline: pipeline, scalerUniformLayout: uLayout } = getScalerResources(ctx.device, ctx.renderer.format);\n\tscalerData[0] = targetWidth;\n\tscalerData[1] = targetHeight;\n\tscalerData[2] = srcWidth;\n\tscalerData[3] = srcHeight;\n\tscalerData[4] = {\n\t\tcover: 0,\n\t\tcontain: 1,\n\t\tstretch: 2,\n\t\tmanual: 3\n\t}[op.fitMode ?? \"contain\"] ?? 1;\n\tscalerData[5] = {\n\t\tsolid: 0,\n\t\tblurred: 1,\n\t\tgradient: 2,\n\t\ttransparent: 3\n\t}[op.backgroundMode ?? \"solid\"] ?? 0;\n\tscalerData[6] = 0;\n\tscalerData[7] = 0;\n\tconst bgColor = parseHexToRGBA(op.backgroundColor ?? \"#000000FF\");\n\tscalerData[8] = bgColor[0];\n\tscalerData[9] = bgColor[1];\n\tscalerData[10] = bgColor[2];\n\tscalerData[11] = bgColor[3];\n\tconst bgColor2 = parseHexToRGBA(op.backgroundColor2 ?? \"#000000FF\");\n\tscalerData[12] = bgColor2[0];\n\tscalerData[13] = bgColor2[1];\n\tscalerData[14] = bgColor2[2];\n\tscalerData[15] = bgColor2[3];\n\tscalerData[16] = Number(op.blurRadius ?? 40);\n\tscalerData[17] = Number(op.backgroundBrightness ?? .6);\n\tscalerData[18] = Number(op.zoom ?? 100);\n\tscalerData[19] = 0;\n\tscalerData[20] = Number(op.offsetX ?? 0);\n\tscalerData[21] = Number(op.offsetY ?? 0);\n\tconst anchorXMap = {\n\t\tleft: 0,\n\t\tcenter: .5,\n\t\tright: 1\n\t};\n\tconst anchorYMap = {\n\t\ttop: 0,\n\t\tcenter: .5,\n\t\tbottom: 1\n\t};\n\tscalerData[22] = anchorXMap[op.anchorX ?? \"center\"] ?? .5;\n\tscalerData[23] = anchorYMap[op.anchorY ?? \"center\"] ?? .5;\n\tconst uBuffer = ctx.renderer.getTemporaryBuffer(scalerData);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst renderPass = encoder.beginRenderPass({ colorAttachments: [{\n\t\tview: targetView,\n\t\tloadOp: \"clear\",\n\t\tstoreOp: \"store\",\n\t\tclearValue: {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}\n\t}] });\n\trenderPass.setPipeline(pipeline);\n\trenderPass.setBindGroup(0, ctx.device.createBindGroup({\n\t\tlayout: uLayout,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: uBuffer }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: sampler\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: tmpView\n\t\t\t}\n\t\t]\n\t}));\n\trenderPass.draw(4);\n\trenderPass.end();\n\targs.pass = ctx.renderer.beginFrame(encoder, targetView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, targetWidth, targetHeight, \"load\");\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: ResizerScalerWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-Bs0GSowy.mjs.map"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"renderer-bsWnRNpJ.mjs","names":[],"sources":["../../../nodes/node-resizer-scaler/dist/renderers-Bs0GSowy.mjs"],"sourcesContent":["import { getActiveMediaMetadata } from \"@framefields/core\";\nimport { defineRenderer } from \"@framefields/node-sdk/renderer\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst RESIZER_SCALER_SHADER = `\nstruct ScalerUniforms {\n targetSize : vec2<f32>,\n srcSize : vec2<f32>,\n fitMode : f32, // 0 = Cover, 1 = Contain, 2 = Stretch, 3 = Manual\n bgMode : f32, // 0 = Solid, 1 = Blurred, 2 = Gradient, 3 = Transparent\n bgColor : vec4<f32>,\n bgColor2 : vec4<f32>, // Used for gradient mode\n blurRadius : f32,\n brightness : f32,\n zoom : f32,\n offset : vec2<f32>,\n anchor : vec2<f32>, // x: 0 (left) - 1 (right), y: 0 (top) - 1 (bottom)\n};\n\n@group(0) @binding(0) var<uniform> u : ScalerUniforms;\n@group(0) @binding(1) var s : sampler;\n@group(0) @binding(2) var t_src : texture_2d<f32>;\n\nstruct VSOut {\n @builtin(position) pos : vec4<f32>,\n @location(0) uv : vec2<f32>,\n};\n\n@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {\n\tvar pos = array<vec2<f32>, 4>(\n\t\tvec2<f32>(-1.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0),\n\t\tvec2<f32>(-1.0, -1.0),\n\t\tvec2<f32>(1.0, -1.0)\n\t);\n\tvar uv = array<vec2<f32>, 4>(\n\t\tvec2<f32>(0.0, 0.0),\n\t\tvec2<f32>(1.0, 0.0),\n\t\tvec2<f32>(0.0, 1.0),\n\t\tvec2<f32>(1.0, 1.0)\n\t);\n\treturn VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n let uv = in.uv;\n \n // Calculate aspect ratios\n let target_ar = u.targetSize.x / u.targetSize.y;\n let src_ar = u.srcSize.x / u.srcSize.y;\n \n // Sizing logic\n var fg_uv = uv;\n var is_outside_fg = false;\n \n if (u.fitMode == 1.0) { // Contain\n if (src_ar > target_ar) {\n // Letterbox (pads top & bottom)\n let scale_y = target_ar / src_ar;\n let offset_y = (1.0 - scale_y) * u.anchor.y;\n fg_uv.y = (uv.y - offset_y) / scale_y;\n if (fg_uv.y < 0.0 || fg_uv.y > 1.0) { is_outside_fg = true; }\n } else {\n // Pillarbox (pads left & right)\n let scale_x = src_ar / target_ar;\n let offset_x = (1.0 - scale_x) * u.anchor.x;\n fg_uv.x = (uv.x - offset_x) / scale_x;\n if (fg_uv.x < 0.0 || fg_uv.x > 1.0) { is_outside_fg = true; }\n }\n } else if (u.fitMode == 0.0) { // Cover\n if (src_ar > target_ar) {\n let scale_x = target_ar / src_ar;\n let offset_x = (1.0 - scale_x) * u.anchor.x;\n fg_uv.x = uv.x * scale_x + offset_x;\n } else {\n let scale_y = src_ar / target_ar;\n let offset_y = (1.0 - scale_y) * u.anchor.y;\n fg_uv.y = uv.y * scale_y + offset_y;\n }\n } else if (u.fitMode == 3.0) { // Manual Scale & Translation\n let norm_zoom = u.zoom / 100.0;\n fg_uv = (uv - vec2<f32>(0.5)) / norm_zoom + vec2<f32>(0.5) - (u.offset / u.targetSize);\n if (fg_uv.x < 0.0 || fg_uv.x > 1.0 || fg_uv.y < 0.0 || fg_uv.y > 1.0) {\n is_outside_fg = true;\n }\n } // (fitMode == 2.0 (Stretch) uses default fg_uv without bounds check)\n\n // Output compositing\n if (!is_outside_fg) {\n return textureSampleLevel(t_src, s, fg_uv, 0.0);\n } else {\n // Render background based on mode\n if (u.bgMode == 0.0) { // Solid\n return u.bgColor;\n } else if (u.bgMode == 1.0) { // Blurred Background Copy\n // Sample cover-fitted coordinates for background\n var bg_uv = uv;\n if (src_ar > target_ar) {\n let scale_x = target_ar / src_ar;\n let offset_x = (1.0 - scale_x) * 0.5; // Always center background\n bg_uv.x = uv.x * scale_x + offset_x;\n } else {\n let scale_y = src_ar / target_ar;\n let offset_y = (1.0 - scale_y) * 0.5;\n bg_uv.y = uv.y * scale_y + offset_y;\n }\n \n // Apply gaussian blur approximation in shader\n var color = vec4<f32>(0.0);\n let blur_steps = 5.0;\n let blur_offset = u.blurRadius / (u.targetSize * blur_steps);\n \n for (var x = -2.0; x <= 2.0; x += 1.0) {\n for (var y = -2.0; y <= 2.0; y += 1.0) {\n color += textureSampleLevel(t_src, s, bg_uv + vec2<f32>(x, y) * blur_offset, 0.0);\n }\n }\n color = color / 25.0;\n \n // Apply background brightness darken effect\n return vec4<f32>(color.rgb * u.brightness, color.a);\n } else if (u.bgMode == 2.0) { // Gradient\n return mix(u.bgColor, u.bgColor2, uv.y);\n } else { // Transparent\n return vec4<f32>(0.0, 0.0, 0.0, 0.0);\n }\n }\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nfunction getDeviceLayouts(device) {\n\tlet res = deviceResourceCache.get(device);\n\tif (res) return res;\n\tconst scalerUniformLayout = device.createBindGroupLayout({ entries: [\n\t\t{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tbuffer: { type: \"uniform\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 1,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tsampler: { type: \"filtering\" }\n\t\t},\n\t\t{\n\t\t\tbinding: 2,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\ttexture: { sampleType: \"float\" }\n\t\t}\n\t] });\n\tres = {\n\t\tscalerUniformLayout,\n\t\ttextureSamplerLayout: scalerUniformLayout,\n\t\tpipelineCache: /* @__PURE__ */ new Map()\n\t};\n\tdeviceResourceCache.set(device, res);\n\treturn res;\n}\nfunction getScalerResources(device, format) {\n\tconst layouts = getDeviceLayouts(device);\n\tconst cacheKey = `scaler_${format}`;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst scalerModule = device.createShaderModule({\n\t\t\tlabel: `scaler_${format}.wgsl`,\n\t\t\tcode: RESIZER_SCALER_SHADER\n\t\t});\n\t\tpipeline = device.createRenderPipeline({\n\t\t\tlabel: `ResizerScalerPipeline_${format}`,\n\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [layouts.scalerUniformLayout] }),\n\t\t\tvertex: {\n\t\t\t\tmodule: scalerModule,\n\t\t\t\tentryPoint: \"vs\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule: scalerModule,\n\t\t\t\tentryPoint: \"fs\",\n\t\t\t\ttargets: [{ format }]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t});\n\t\tlayouts.pipelineCache.set(cacheKey, pipeline);\n\t}\n\treturn {\n\t\tscalerPipeline: pipeline,\n\t\tscalerUniformLayout: layouts.scalerUniformLayout\n\t};\n}\nfunction parseHexToRGBA(hex) {\n\tconst cleanHex = hex.replace(\"#\", \"\");\n\treturn [\n\t\tparseInt(cleanHex.substring(0, 2), 16) / 255,\n\t\tparseInt(cleanHex.substring(2, 4), 16) / 255,\n\t\tparseInt(cleanHex.substring(4, 6), 16) / 255,\n\t\tcleanHex.length === 8 ? parseInt(cleanHex.substring(6, 8), 16) / 255 : 1\n\t];\n}\nconst scalerData = new Float32Array(24);\nconst ResizerScalerWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetView, targetTexture, targetWidth, targetHeight, props, drawChild } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"ResizerScaler\" || !op) return;\n\tconst childMedia = props.virtualMedia.children?.[0];\n\tif (!childMedia) return;\n\tpass.end();\n\tconst childMeta = getActiveMediaMetadata(childMedia);\n\tconst srcWidth = childMeta?.width || targetWidth || 1920;\n\tconst srcHeight = childMeta?.height || targetHeight || 1080;\n\tconst tmpTex = ctx.renderer.getTemporaryTexture(srcWidth, srcHeight, [...props.excludeTextures || [], targetTexture]);\n\tconst tmpView = tmpTex.createView();\n\tctx.renderer.beginFrame(encoder, tmpView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, srcWidth, srcHeight, \"clear\").end();\n\tctx.renderer.pushScissor({\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: srcWidth,\n\t\theight: srcHeight\n\t});\n\tctx.renderer.pushIdentity();\n\tawait drawChild(childMedia, {\n\t\t...props,\n\t\tvirtualMedia: childMedia,\n\t\tcontainerWidth: srcWidth,\n\t\tcontainerHeight: srcHeight\n\t}, tmpView, tmpTex, srcWidth, srcHeight);\n\tctx.renderer.popTransform();\n\tctx.renderer.popScissor();\n\tconst { scalerPipeline: pipeline, scalerUniformLayout: uLayout } = getScalerResources(ctx.device, ctx.renderer.format);\n\tscalerData[0] = targetWidth;\n\tscalerData[1] = targetHeight;\n\tscalerData[2] = srcWidth;\n\tscalerData[3] = srcHeight;\n\tscalerData[4] = {\n\t\tcover: 0,\n\t\tcontain: 1,\n\t\tstretch: 2,\n\t\tmanual: 3\n\t}[op.fitMode ?? \"contain\"] ?? 1;\n\tscalerData[5] = {\n\t\tsolid: 0,\n\t\tblurred: 1,\n\t\tgradient: 2,\n\t\ttransparent: 3\n\t}[op.backgroundMode ?? \"solid\"] ?? 0;\n\tscalerData[6] = 0;\n\tscalerData[7] = 0;\n\tconst bgColor = parseHexToRGBA(op.backgroundColor ?? \"#000000FF\");\n\tscalerData[8] = bgColor[0];\n\tscalerData[9] = bgColor[1];\n\tscalerData[10] = bgColor[2];\n\tscalerData[11] = bgColor[3];\n\tconst bgColor2 = parseHexToRGBA(op.backgroundColor2 ?? \"#000000FF\");\n\tscalerData[12] = bgColor2[0];\n\tscalerData[13] = bgColor2[1];\n\tscalerData[14] = bgColor2[2];\n\tscalerData[15] = bgColor2[3];\n\tscalerData[16] = Number(op.blurRadius ?? 40);\n\tscalerData[17] = Number(op.backgroundBrightness ?? .6);\n\tscalerData[18] = Number(op.zoom ?? 100);\n\tscalerData[19] = 0;\n\tscalerData[20] = Number(op.offsetX ?? 0);\n\tscalerData[21] = Number(op.offsetY ?? 0);\n\tconst anchorXMap = {\n\t\tleft: 0,\n\t\tcenter: .5,\n\t\tright: 1\n\t};\n\tconst anchorYMap = {\n\t\ttop: 0,\n\t\tcenter: .5,\n\t\tbottom: 1\n\t};\n\tscalerData[22] = anchorXMap[op.anchorX ?? \"center\"] ?? .5;\n\tscalerData[23] = anchorYMap[op.anchorY ?? \"center\"] ?? .5;\n\tconst uBuffer = ctx.renderer.getTemporaryBuffer(scalerData);\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tconst renderPass = encoder.beginRenderPass({ colorAttachments: [{\n\t\tview: targetView,\n\t\tloadOp: \"clear\",\n\t\tstoreOp: \"store\",\n\t\tclearValue: {\n\t\t\tr: 0,\n\t\t\tg: 0,\n\t\t\tb: 0,\n\t\t\ta: 0\n\t\t}\n\t}] });\n\trenderPass.setPipeline(pipeline);\n\trenderPass.setBindGroup(0, ctx.device.createBindGroup({\n\t\tlayout: uLayout,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: { buffer: uBuffer }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: sampler\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: tmpView\n\t\t\t}\n\t\t]\n\t}));\n\trenderPass.draw(4);\n\trenderPass.end();\n\targs.pass = ctx.renderer.beginFrame(encoder, targetView, {\n\t\tr: 0,\n\t\tg: 0,\n\t\tb: 0,\n\t\ta: 0\n\t}, targetWidth, targetHeight, \"load\");\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: ResizerScalerWebGPURenderer });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-Bs0GSowy.mjs.map"],"mappings":";;;;AAIA,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6H9B,MAAM,sCAAsC,IAAI,SAAS;AACzD,SAAS,iBAAiB,QAAQ;CACjC,IAAI,MAAM,oBAAoB,IAAI,OAAO;AACzC,KAAI,IAAK,QAAO;CAChB,MAAM,sBAAsB,OAAO,sBAAsB,EAAE,SAAS;EACnE;GACC,SAAS;GACT,YAAY,eAAe;GAC3B,QAAQ,EAAE,MAAM,WAAW;GAC3B;EACD;GACC,SAAS;GACT,YAAY,eAAe;GAC3B,SAAS,EAAE,MAAM,aAAa;GAC9B;EACD;GACC,SAAS;GACT,YAAY,eAAe;GAC3B,SAAS,EAAE,YAAY,SAAS;GAChC;EACD,EAAE,CAAC;AACJ,OAAM;EACL;EACA,sBAAsB;EACtB,+BAA+B,IAAI,KAAK;EACxC;AACD,qBAAoB,IAAI,QAAQ,IAAI;AACpC,QAAO;;AAER,SAAS,mBAAmB,QAAQ,QAAQ;CAC3C,MAAM,UAAU,iBAAiB,OAAO;CACxC,MAAM,WAAW,UAAU;CAC3B,IAAI,WAAW,QAAQ,cAAc,IAAI,SAAS;AAClD,KAAI,CAAC,UAAU;EACd,MAAM,eAAe,OAAO,mBAAmB;GAC9C,OAAO,UAAU,OAAO;GACxB,MAAM;GACN,CAAC;AACF,aAAW,OAAO,qBAAqB;GACtC,OAAO,yBAAyB;GAChC,QAAQ,OAAO,qBAAqB,EAAE,kBAAkB,CAAC,QAAQ,oBAAoB,EAAE,CAAC;GACxF,QAAQ;IACP,QAAQ;IACR,YAAY;IACZ;GACD,UAAU;IACT,QAAQ;IACR,YAAY;IACZ,SAAS,CAAC,EAAE,QAAQ,CAAC;IACrB;GACD,WAAW,EAAE,UAAU,kBAAkB;GACzC,CAAC;AACF,UAAQ,cAAc,IAAI,UAAU,SAAS;;AAE9C,QAAO;EACN,gBAAgB;EAChB,qBAAqB,QAAQ;EAC7B;;AAEF,SAAS,eAAe,KAAK;CAC5B,MAAM,WAAW,IAAI,QAAQ,KAAK,GAAG;AACrC,QAAO;EACN,SAAS,SAAS,UAAU,GAAG,EAAE,EAAE,GAAG,GAAG;EACzC,SAAS,SAAS,UAAU,GAAG,EAAE,EAAE,GAAG,GAAG;EACzC,SAAS,SAAS,UAAU,GAAG,EAAE,EAAE,GAAG,GAAG;EACzC,SAAS,WAAW,IAAI,SAAS,SAAS,UAAU,GAAG,EAAE,EAAE,GAAG,GAAG,MAAM;EACvE;;AAEF,MAAM,aAAa,IAAI,aAAa,GAAG;AACvC,MAAM,8BAA8B,OAAO,SAAS;CACnD,MAAM,EAAE,KAAK,SAAS,MAAM,YAAY,eAAe,aAAa,cAAc,OAAO,cAAc;CACvG,MAAM,KAAK,MAAM,cAAc;AAC/B,KAAI,IAAI,OAAO,mBAAmB,CAAC,GAAI;CACvC,MAAM,aAAa,MAAM,aAAa,WAAW;AACjD,KAAI,CAAC,WAAY;AACjB,MAAK,KAAK;CACV,MAAM,YAAY,uBAAuB,WAAW;CACpD,MAAM,WAAW,WAAW,SAAS,eAAe;CACpD,MAAM,YAAY,WAAW,UAAU,gBAAgB;CACvD,MAAM,SAAS,IAAI,SAAS,oBAAoB,UAAU,WAAW,CAAC,GAAG,MAAM,mBAAmB,EAAE,EAAE,cAAc,CAAC;CACrH,MAAM,UAAU,OAAO,YAAY;AACnC,KAAI,SAAS,WAAW,SAAS,SAAS;EACzC,GAAG;EACH,GAAG;EACH,GAAG;EACH,GAAG;EACH,EAAE,UAAU,WAAW,QAAQ,CAAC,KAAK;AACtC,KAAI,SAAS,YAAY;EACxB,GAAG;EACH,GAAG;EACH,OAAO;EACP,QAAQ;EACR,CAAC;AACF,KAAI,SAAS,cAAc;AAC3B,OAAM,UAAU,YAAY;EAC3B,GAAG;EACH,cAAc;EACd,gBAAgB;EAChB,iBAAiB;EACjB,EAAE,SAAS,QAAQ,UAAU,UAAU;AACxC,KAAI,SAAS,cAAc;AAC3B,KAAI,SAAS,YAAY;CACzB,MAAM,EAAE,gBAAgB,UAAU,qBAAqB,YAAY,mBAAmB,IAAI,QAAQ,IAAI,SAAS,OAAO;AACtH,YAAW,KAAK;AAChB,YAAW,KAAK;AAChB,YAAW,KAAK;AAChB,YAAW,KAAK;AAChB,YAAW,KAAK;EACf,OAAO;EACP,SAAS;EACT,SAAS;EACT,QAAQ;EACR,CAAC,GAAG,WAAW,cAAc;AAC9B,YAAW,KAAK;EACf,OAAO;EACP,SAAS;EACT,UAAU;EACV,aAAa;EACb,CAAC,GAAG,kBAAkB,YAAY;AACnC,YAAW,KAAK;AAChB,YAAW,KAAK;CAChB,MAAM,UAAU,eAAe,GAAG,mBAAmB,YAAY;AACjE,YAAW,KAAK,QAAQ;AACxB,YAAW,KAAK,QAAQ;AACxB,YAAW,MAAM,QAAQ;AACzB,YAAW,MAAM,QAAQ;CACzB,MAAM,WAAW,eAAe,GAAG,oBAAoB,YAAY;AACnE,YAAW,MAAM,SAAS;AAC1B,YAAW,MAAM,SAAS;AAC1B,YAAW,MAAM,SAAS;AAC1B,YAAW,MAAM,SAAS;AAC1B,YAAW,MAAM,OAAO,GAAG,cAAc,GAAG;AAC5C,YAAW,MAAM,OAAO,GAAG,wBAAwB,GAAG;AACtD,YAAW,MAAM,OAAO,GAAG,QAAQ,IAAI;AACvC,YAAW,MAAM;AACjB,YAAW,MAAM,OAAO,GAAG,WAAW,EAAE;AACxC,YAAW,MAAM,OAAO,GAAG,WAAW,EAAE;CACxC,MAAM,aAAa;EAClB,MAAM;EACN,QAAQ;EACR,OAAO;EACP;CACD,MAAM,aAAa;EAClB,KAAK;EACL,QAAQ;EACR,QAAQ;EACR;AACD,YAAW,MAAM,WAAW,GAAG,WAAW,aAAa;AACvD,YAAW,MAAM,WAAW,GAAG,WAAW,aAAa;CACvD,MAAM,UAAU,IAAI,SAAS,mBAAmB,WAAW;CAC3D,MAAM,UAAU,IAAI,SAAS,aAAa,WAAW,IAAI,OAAO;CAChE,MAAM,aAAa,QAAQ,gBAAgB,EAAE,kBAAkB,CAAC;EAC/D,MAAM;EACN,QAAQ;EACR,SAAS;EACT,YAAY;GACX,GAAG;GACH,GAAG;GACH,GAAG;GACH,GAAG;GACH;EACD,CAAC,EAAE,CAAC;AACL,YAAW,YAAY,SAAS;AAChC,YAAW,aAAa,GAAG,IAAI,OAAO,gBAAgB;EACrD,QAAQ;EACR,SAAS;GACR;IACC,SAAS;IACT,UAAU,EAAE,QAAQ,SAAS;IAC7B;GACD;IACC,SAAS;IACT,UAAU;IACV;GACD;IACC,SAAS;IACT,UAAU;IACV;GACD;EACD,CAAC,CAAC;AACH,YAAW,KAAK,EAAE;AAClB,YAAW,KAAK;AAChB,MAAK,OAAO,IAAI,SAAS,WAAW,SAAS,YAAY;EACxD,GAAG;EACH,GAAG;EACH,GAAG;EACH,GAAG;EACH,EAAE,aAAa,cAAc,OAAO;;AAKtC,IAAI,oBAAoB,eAAe,EAAE,gBAAgB,6BAA6B,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Jt as resolveNumber } from "./dist-CbG3QxDw.mjs";
|
|
2
2
|
import { n as defineRenderer } from "./renderer-CtVkU_GA.mjs";
|
|
3
|
-
import { C as WebGPUAudioProcessor } from "./dist-
|
|
3
|
+
import { C as WebGPUAudioProcessor } from "./dist-Cxi68OuY.mjs";
|
|
4
4
|
|
|
5
5
|
//#region ../../nodes/node-audio-noise-gate/dist/renderers-C77wd_vw.mjs
|
|
6
6
|
const PARAM_ORDER = [
|
|
@@ -286,4 +286,4 @@ var renderers_default = defineRenderer({ audioProcessor: noiseGateAudioProcessor
|
|
|
286
286
|
|
|
287
287
|
//#endregion
|
|
288
288
|
export { renderers_default as t };
|
|
289
|
-
//# sourceMappingURL=renderer-
|
|
289
|
+
//# sourceMappingURL=renderer-cgxO2xN6.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-lq4n1hSS.mjs","names":[],"sources":["../../../nodes/node-audio-noise-gate/dist/renderers-C77wd_vw.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { resolveNumber } from \"@framefields/node-sdk\";\nimport { WebGPUAudioProcessor } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/audio-processor.ts\nconst PARAM_ORDER = [\n\t\"threshold\",\n\t\"attack\",\n\t\"hold\",\n\t\"release\",\n\t\"range\"\n];\nconst NOISE_GATE_SHADER_TEMPLATE = () => `\nstruct Uniforms {\n sampleRate : f32,\n threshold : f32,\n attack : f32,\n hold : f32,\n release : f32,\n closedGain : f32,\n windowLength : f32,\n hasThresholdSig : f32,\n hasAttackSig : f32,\n hasHoldSig : f32,\n hasReleaseSig : f32,\n hasRangeSig : f32,\n baseTime : f32,\n frame : f32,\n numSamples : f32,\n numChannels : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : Uniforms;\n@group(0) @binding(1) var<storage, read> inputChannels : array<f32>;\n@group(0) @binding(2) var<storage, read_write> outputChannels : array<f32>;\n@group(0) @binding(3) var<storage, read_write> state : array<f32>;\n@group(0) @binding(4) var<storage, read> thresholdSignal : array<f32>;\n@group(0) @binding(5) var<storage, read> attackSignal : array<f32>;\n@group(0) @binding(6) var<storage, read> holdSignal : array<f32>;\n@group(0) @binding(7) var<storage, read> releaseSignal : array<f32>;\n@group(0) @binding(8) var<storage, read> rangeSignal : array<f32>;\n\nfn log10(x: f32) -> f32 {\n return log(x) * 0.4342944819032518f;\n}\n\nfn tanh(x: f32) -> f32 {\n let exp2x = exp(2.0f * x);\n return (exp2x - 1.0f) / (exp2x + 1.0f);\n}\n\nfn is_nan_or_inf(v: f32) -> bool {\n return (v != v) || (abs(v) > 3.402823466e+38f);\n}\n\n@compute @workgroup_size(1)\nfn main(@builtin(global_invocation_id) gid : vec3<u32>) {\n if (gid.x != 0u) { return; }\n\n let numSamples = u32(u.numSamples);\n let numChannels = u32(u.numChannels);\n let windowLength = u32(u.windowLength);\n\n var gateState = u32(state[0]); // 0=CLOSED, 1=ATTACK, 2=OPEN, 3=HOLD, 4=RELEASE\n if (is_nan_or_inf(state[0])) { gateState = 0u; }\n\n var currentGain = state[1];\n if (is_nan_or_inf(currentGain)) { currentGain = 0.0f; }\n\n var gainAtTransition = state[2];\n if (is_nan_or_inf(gainAtTransition)) { gainAtTransition = 0.0f; }\n\n var attackSamplesLeft = i32(state[3]);\n var holdSamplesLeft = i32(state[4]);\n var releaseSamplesLeft = i32(state[5]);\n var writeIndex = u32(state[6]);\n var sumSquares = state[7];\n if (is_nan_or_inf(sumSquares)) { sumSquares = 0.0f; }\n\n let sampleRate = u.sampleRate;\n\n for (var index = 0u; index < numSamples; index = index + 1u) {\n // 1. Dynamic Parameter Modulation & Anti-Explosion Clamping\n var effThreshold = u.threshold;\n if (u.hasThresholdSig > 0.5f) {\n effThreshold = thresholdSignal[index];\n }\n effThreshold = clamp(effThreshold, -120.0f, 0.0f);\n\n var effAttack = u.attack;\n if (u.hasAttackSig > 0.5f) {\n effAttack = attackSignal[index];\n }\n effAttack = clamp(effAttack, 0.0001f, 5.0f);\n\n var effHold = u.hold;\n if (u.hasHoldSig > 0.5f) {\n effHold = holdSignal[index];\n }\n effHold = clamp(effHold, 0.001f, 10.0f);\n\n var effRelease = u.release;\n if (u.hasReleaseSig > 0.5f) {\n effRelease = releaseSignal[index];\n }\n effRelease = clamp(effRelease, 0.01f, 10.0f);\n\n var effRange = u.closedGain;\n if (u.hasRangeSig > 0.5f) {\n let rDb = clamp(rangeSignal[index], -120.0f, 0.0f);\n effRange = select(0.0f, pow(10.0f, rDb / 20.0f), rDb > -96.0f);\n }\n effRange = clamp(effRange, 0.0f, 1.0f);\n\n // 2. Peak & RMS Window Calculation\n var peak = 0.0f;\n for (var c = 0u; c < numChannels; c = c + 1u) {\n var val = abs(inputChannels[c * numSamples + index]);\n if (is_nan_or_inf(val)) { val = 0.0f; }\n if (val > peak) {\n peak = val;\n }\n }\n\n let inputPowerSq = peak * peak;\n let oldestSq = state[8u + writeIndex];\n state[8u + writeIndex] = inputPowerSq;\n sumSquares = max(0.0f, sumSquares - oldestSq + inputPowerSq);\n writeIndex = (writeIndex + 1u) % windowLength;\n\n if (writeIndex == 0u) {\n var sum = 0.0f;\n for (var j = 0u; j < windowLength; j = j + 1u) {\n sum = sum + state[8u + j];\n }\n sumSquares = sum;\n }\n\n let rms = sqrt(sumSquares / f32(windowLength));\n let db = 20.0f * log10(max(rms, 1e-9f));\n\n let signalAboveThreshold = db >= effThreshold;\n\n if (signalAboveThreshold) {\n if (gateState == 0u || gateState == 4u) {\n gateState = 1u; // ATTACK\n gainAtTransition = currentGain;\n var samples = i32(round(effAttack * sampleRate));\n if (samples <= 0) { samples = 1; }\n attackSamplesLeft = samples;\n } else if (gateState == 3u) {\n gateState = 2u; // OPEN\n currentGain = 1.0f;\n }\n } else {\n if (gateState == 2u || gateState == 1u) {\n gateState = 3u; // HOLD\n var samples = i32(round(effHold * sampleRate));\n if (samples <= 0) { samples = 1; }\n holdSamplesLeft = samples;\n }\n }\n\n if (gateState == 0u) {\n currentGain = effRange;\n } else if (gateState == 2u) {\n currentGain = 1.0f;\n } else if (gateState == 1u) {\n var totalAttackSamples = i32(round(effAttack * sampleRate));\n if (totalAttackSamples <= 0) { totalAttackSamples = 1; }\n let progress = 1.0f - f32(attackSamplesLeft) / f32(totalAttackSamples);\n currentGain = gainAtTransition + progress * (1.0f - gainAtTransition);\n\n attackSamplesLeft = attackSamplesLeft - 1;\n if (attackSamplesLeft <= 0) {\n gateState = 2u;\n currentGain = 1.0f;\n }\n } else if (gateState == 3u) {\n currentGain = 1.0f;\n holdSamplesLeft = holdSamplesLeft - 1;\n if (holdSamplesLeft <= 0) {\n gateState = 4u; // RELEASE\n gainAtTransition = 1.0f;\n var samples = i32(round(effRelease * sampleRate));\n if (samples <= 0) { samples = 1; }\n releaseSamplesLeft = samples;\n }\n } else if (gateState == 4u) {\n var totalReleaseSamples = i32(round(effRelease * sampleRate));\n if (totalReleaseSamples <= 0) { totalReleaseSamples = 1; }\n let progress = 1.0f - f32(releaseSamplesLeft) / f32(totalReleaseSamples);\n currentGain = gainAtTransition + progress * (effRange - gainAtTransition);\n\n releaseSamplesLeft = releaseSamplesLeft - 1;\n if (releaseSamplesLeft <= 0) {\n gateState = 0u;\n currentGain = effRange;\n }\n }\n\n currentGain = clamp(currentGain, 0.0f, 1.0f);\n\n for (var c = 0u; c < numChannels; c = c + 1u) {\n let sampleIndex = c * numSamples + index;\n var inVal = inputChannels[sampleIndex];\n if (is_nan_or_inf(inVal)) { inVal = 0.0f; }\n\n var outVal = inVal * currentGain;\n if (is_nan_or_inf(outVal)) { outVal = 0.0f; }\n\n if (outVal > 1.0f) {\n outVal = 1.0f;\n } else if (outVal < -1.0f) {\n outVal = -1.0f;\n } else if (outVal > 0.9f) {\n outVal = 0.9f + 0.1f * tanh((outVal - 0.9f) / 0.1f);\n } else if (outVal < -0.9f) {\n outVal = -0.9f + 0.1f * tanh((outVal + 0.9f) / 0.1f);\n }\n\n outputChannels[sampleIndex] = outVal;\n }\n }\n\n state[0] = f32(gateState);\n state[1] = currentGain;\n state[2] = gainAtTransition;\n state[3] = f32(attackSamplesLeft);\n state[4] = f32(holdSamplesLeft);\n state[5] = f32(releaseSamplesLeft);\n state[6] = f32(writeIndex);\n state[7] = sumSquares;\n}\n`;\nconst noiseGateAudioProcessor = async (channels, sampleRate, virtualMedia, ctx) => {\n\tif (!ctx?.device) throw new Error(\"GPUDevice is required for WebGPU Noise Gate.\");\n\tconst op = virtualMedia.operation || {};\n\tconst inputs = op.inputs || {};\n\tconst threshold = resolveNumber(op.threshold, -40);\n\tconst attack = resolveNumber(op.attack, .005);\n\tconst hold = resolveNumber(op.hold, .05);\n\tconst release = resolveNumber(op.release, .1);\n\tconst range = resolveNumber(op.range, -80);\n\tconst closedGain = range <= -96 ? 0 : 10 ** (range / 20);\n\tconst isHandleConnected = (handleIdKey) => {\n\t\tconst handleId = op[handleIdKey];\n\t\tif (typeof handleId !== \"string\" || !handleId) return false;\n\t\tconst input = inputs[handleId];\n\t\treturn Boolean(input?.connectionValid && input.outputItem && (input.outputItem.type === \"Signal\" || input.outputItem.type === \"Number\"));\n\t};\n\tconst hasThresholdSig = isHandleConnected(\"thresholdHandleId\") ? 1 : 0;\n\tconst hasAttackSig = isHandleConnected(\"attackHandleId\") ? 1 : 0;\n\tconst hasHoldSig = isHandleConnected(\"holdHandleId\") ? 1 : 0;\n\tconst hasReleaseSig = isHandleConnected(\"releaseHandleId\") ? 1 : 0;\n\tconst hasRangeSig = isHandleConnected(\"rangeHandleId\") ? 1 : 0;\n\tconst numChannels = channels.length;\n\tif (numChannels === 0) return;\n\tconst numSamples = channels[0].length;\n\tif (numSamples === 0) return;\n\tconst windowLength = Math.max(1, Math.round(.01 * sampleRate));\n\tconst nodeId = op.id || \"audio-noise-gate\";\n\tconst frame = ctx.frame ?? 0;\n\tconst fps = ctx.fps ?? 24;\n\tconst stateFloatCount = 8 + windowLength;\n\tawait WebGPUAudioProcessor.process(ctx.device, nodeId, channels, sampleRate, virtualMedia, frame, fps, NOISE_GATE_SHADER_TEMPLATE, () => [\n\t\tsampleRate,\n\t\tthreshold,\n\t\tattack,\n\t\thold,\n\t\trelease,\n\t\tclosedGain,\n\t\twindowLength,\n\t\thasThresholdSig,\n\t\thasAttackSig,\n\t\thasHoldSig,\n\t\thasReleaseSig,\n\t\thasRangeSig,\n\t\t0,\n\t\tframe,\n\t\tnumSamples,\n\t\tnumChannels\n\t], 16, stateFloatCount, ctx?.renderId, true, ctx?.elapsedMs, ctx?.durationMs, void 0, void 0, PARAM_ORDER);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ audioProcessor: noiseGateAudioProcessor });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-C77wd_vw.mjs.map"],"mappings":";;;;;AAKA,MAAM,cAAc;CACnB;CACA;CACA;CACA;CACA;CACA;AACD,MAAM,mCAAmC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+NzC,MAAM,0BAA0B,OAAO,UAAU,YAAY,cAAc,QAAQ;AAClF,KAAI,CAAC,KAAK,OAAQ,OAAM,IAAI,MAAM,+CAA+C;CACjF,MAAM,KAAK,aAAa,aAAa,EAAE;CACvC,MAAM,SAAS,GAAG,UAAU,EAAE;CAC9B,MAAM,YAAY,cAAc,GAAG,WAAW,IAAI;CAClD,MAAM,SAAS,cAAc,GAAG,QAAQ,KAAK;CAC7C,MAAM,OAAO,cAAc,GAAG,MAAM,IAAI;CACxC,MAAM,UAAU,cAAc,GAAG,SAAS,GAAG;CAC7C,MAAM,QAAQ,cAAc,GAAG,OAAO,IAAI;CAC1C,MAAM,aAAa,SAAS,MAAM,IAAI,OAAO,QAAQ;CACrD,MAAM,qBAAqB,gBAAgB;EAC1C,MAAM,WAAW,GAAG;AACpB,MAAI,OAAO,aAAa,YAAY,CAAC,SAAU,QAAO;EACtD,MAAM,QAAQ,OAAO;AACrB,SAAO,QAAQ,OAAO,mBAAmB,MAAM,eAAe,MAAM,WAAW,SAAS,YAAY,MAAM,WAAW,SAAS,UAAU;;CAEzI,MAAM,kBAAkB,kBAAkB,oBAAoB,GAAG,IAAI;CACrE,MAAM,eAAe,kBAAkB,iBAAiB,GAAG,IAAI;CAC/D,MAAM,aAAa,kBAAkB,eAAe,GAAG,IAAI;CAC3D,MAAM,gBAAgB,kBAAkB,kBAAkB,GAAG,IAAI;CACjE,MAAM,cAAc,kBAAkB,gBAAgB,GAAG,IAAI;CAC7D,MAAM,cAAc,SAAS;AAC7B,KAAI,gBAAgB,EAAG;CACvB,MAAM,aAAa,SAAS,GAAG;AAC/B,KAAI,eAAe,EAAG;CACtB,MAAM,eAAe,KAAK,IAAI,GAAG,KAAK,MAAM,MAAM,WAAW,CAAC;CAC9D,MAAM,SAAS,GAAG,MAAM;CACxB,MAAM,QAAQ,IAAI,SAAS;CAC3B,MAAM,MAAM,IAAI,OAAO;CACvB,MAAM,kBAAkB,IAAI;AAC5B,OAAM,qBAAqB,QAAQ,IAAI,QAAQ,QAAQ,UAAU,YAAY,cAAc,OAAO,KAAK,kCAAkC;EACxI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,IAAI,iBAAiB,KAAK,UAAU,MAAM,KAAK,WAAW,KAAK,YAAY,KAAK,GAAG,KAAK,GAAG,YAAY;;AAK3G,IAAI,oBAAoB,eAAe,EAAE,gBAAgB,yBAAyB,CAAC"}
|
|
1
|
+
{"version":3,"file":"renderer-cgxO2xN6.mjs","names":[],"sources":["../../../nodes/node-audio-noise-gate/dist/renderers-C77wd_vw.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { resolveNumber } from \"@framefields/node-sdk\";\nimport { WebGPUAudioProcessor } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/audio-processor.ts\nconst PARAM_ORDER = [\n\t\"threshold\",\n\t\"attack\",\n\t\"hold\",\n\t\"release\",\n\t\"range\"\n];\nconst NOISE_GATE_SHADER_TEMPLATE = () => `\nstruct Uniforms {\n sampleRate : f32,\n threshold : f32,\n attack : f32,\n hold : f32,\n release : f32,\n closedGain : f32,\n windowLength : f32,\n hasThresholdSig : f32,\n hasAttackSig : f32,\n hasHoldSig : f32,\n hasReleaseSig : f32,\n hasRangeSig : f32,\n baseTime : f32,\n frame : f32,\n numSamples : f32,\n numChannels : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : Uniforms;\n@group(0) @binding(1) var<storage, read> inputChannels : array<f32>;\n@group(0) @binding(2) var<storage, read_write> outputChannels : array<f32>;\n@group(0) @binding(3) var<storage, read_write> state : array<f32>;\n@group(0) @binding(4) var<storage, read> thresholdSignal : array<f32>;\n@group(0) @binding(5) var<storage, read> attackSignal : array<f32>;\n@group(0) @binding(6) var<storage, read> holdSignal : array<f32>;\n@group(0) @binding(7) var<storage, read> releaseSignal : array<f32>;\n@group(0) @binding(8) var<storage, read> rangeSignal : array<f32>;\n\nfn log10(x: f32) -> f32 {\n return log(x) * 0.4342944819032518f;\n}\n\nfn tanh(x: f32) -> f32 {\n let exp2x = exp(2.0f * x);\n return (exp2x - 1.0f) / (exp2x + 1.0f);\n}\n\nfn is_nan_or_inf(v: f32) -> bool {\n return (v != v) || (abs(v) > 3.402823466e+38f);\n}\n\n@compute @workgroup_size(1)\nfn main(@builtin(global_invocation_id) gid : vec3<u32>) {\n if (gid.x != 0u) { return; }\n\n let numSamples = u32(u.numSamples);\n let numChannels = u32(u.numChannels);\n let windowLength = u32(u.windowLength);\n\n var gateState = u32(state[0]); // 0=CLOSED, 1=ATTACK, 2=OPEN, 3=HOLD, 4=RELEASE\n if (is_nan_or_inf(state[0])) { gateState = 0u; }\n\n var currentGain = state[1];\n if (is_nan_or_inf(currentGain)) { currentGain = 0.0f; }\n\n var gainAtTransition = state[2];\n if (is_nan_or_inf(gainAtTransition)) { gainAtTransition = 0.0f; }\n\n var attackSamplesLeft = i32(state[3]);\n var holdSamplesLeft = i32(state[4]);\n var releaseSamplesLeft = i32(state[5]);\n var writeIndex = u32(state[6]);\n var sumSquares = state[7];\n if (is_nan_or_inf(sumSquares)) { sumSquares = 0.0f; }\n\n let sampleRate = u.sampleRate;\n\n for (var index = 0u; index < numSamples; index = index + 1u) {\n // 1. Dynamic Parameter Modulation & Anti-Explosion Clamping\n var effThreshold = u.threshold;\n if (u.hasThresholdSig > 0.5f) {\n effThreshold = thresholdSignal[index];\n }\n effThreshold = clamp(effThreshold, -120.0f, 0.0f);\n\n var effAttack = u.attack;\n if (u.hasAttackSig > 0.5f) {\n effAttack = attackSignal[index];\n }\n effAttack = clamp(effAttack, 0.0001f, 5.0f);\n\n var effHold = u.hold;\n if (u.hasHoldSig > 0.5f) {\n effHold = holdSignal[index];\n }\n effHold = clamp(effHold, 0.001f, 10.0f);\n\n var effRelease = u.release;\n if (u.hasReleaseSig > 0.5f) {\n effRelease = releaseSignal[index];\n }\n effRelease = clamp(effRelease, 0.01f, 10.0f);\n\n var effRange = u.closedGain;\n if (u.hasRangeSig > 0.5f) {\n let rDb = clamp(rangeSignal[index], -120.0f, 0.0f);\n effRange = select(0.0f, pow(10.0f, rDb / 20.0f), rDb > -96.0f);\n }\n effRange = clamp(effRange, 0.0f, 1.0f);\n\n // 2. Peak & RMS Window Calculation\n var peak = 0.0f;\n for (var c = 0u; c < numChannels; c = c + 1u) {\n var val = abs(inputChannels[c * numSamples + index]);\n if (is_nan_or_inf(val)) { val = 0.0f; }\n if (val > peak) {\n peak = val;\n }\n }\n\n let inputPowerSq = peak * peak;\n let oldestSq = state[8u + writeIndex];\n state[8u + writeIndex] = inputPowerSq;\n sumSquares = max(0.0f, sumSquares - oldestSq + inputPowerSq);\n writeIndex = (writeIndex + 1u) % windowLength;\n\n if (writeIndex == 0u) {\n var sum = 0.0f;\n for (var j = 0u; j < windowLength; j = j + 1u) {\n sum = sum + state[8u + j];\n }\n sumSquares = sum;\n }\n\n let rms = sqrt(sumSquares / f32(windowLength));\n let db = 20.0f * log10(max(rms, 1e-9f));\n\n let signalAboveThreshold = db >= effThreshold;\n\n if (signalAboveThreshold) {\n if (gateState == 0u || gateState == 4u) {\n gateState = 1u; // ATTACK\n gainAtTransition = currentGain;\n var samples = i32(round(effAttack * sampleRate));\n if (samples <= 0) { samples = 1; }\n attackSamplesLeft = samples;\n } else if (gateState == 3u) {\n gateState = 2u; // OPEN\n currentGain = 1.0f;\n }\n } else {\n if (gateState == 2u || gateState == 1u) {\n gateState = 3u; // HOLD\n var samples = i32(round(effHold * sampleRate));\n if (samples <= 0) { samples = 1; }\n holdSamplesLeft = samples;\n }\n }\n\n if (gateState == 0u) {\n currentGain = effRange;\n } else if (gateState == 2u) {\n currentGain = 1.0f;\n } else if (gateState == 1u) {\n var totalAttackSamples = i32(round(effAttack * sampleRate));\n if (totalAttackSamples <= 0) { totalAttackSamples = 1; }\n let progress = 1.0f - f32(attackSamplesLeft) / f32(totalAttackSamples);\n currentGain = gainAtTransition + progress * (1.0f - gainAtTransition);\n\n attackSamplesLeft = attackSamplesLeft - 1;\n if (attackSamplesLeft <= 0) {\n gateState = 2u;\n currentGain = 1.0f;\n }\n } else if (gateState == 3u) {\n currentGain = 1.0f;\n holdSamplesLeft = holdSamplesLeft - 1;\n if (holdSamplesLeft <= 0) {\n gateState = 4u; // RELEASE\n gainAtTransition = 1.0f;\n var samples = i32(round(effRelease * sampleRate));\n if (samples <= 0) { samples = 1; }\n releaseSamplesLeft = samples;\n }\n } else if (gateState == 4u) {\n var totalReleaseSamples = i32(round(effRelease * sampleRate));\n if (totalReleaseSamples <= 0) { totalReleaseSamples = 1; }\n let progress = 1.0f - f32(releaseSamplesLeft) / f32(totalReleaseSamples);\n currentGain = gainAtTransition + progress * (effRange - gainAtTransition);\n\n releaseSamplesLeft = releaseSamplesLeft - 1;\n if (releaseSamplesLeft <= 0) {\n gateState = 0u;\n currentGain = effRange;\n }\n }\n\n currentGain = clamp(currentGain, 0.0f, 1.0f);\n\n for (var c = 0u; c < numChannels; c = c + 1u) {\n let sampleIndex = c * numSamples + index;\n var inVal = inputChannels[sampleIndex];\n if (is_nan_or_inf(inVal)) { inVal = 0.0f; }\n\n var outVal = inVal * currentGain;\n if (is_nan_or_inf(outVal)) { outVal = 0.0f; }\n\n if (outVal > 1.0f) {\n outVal = 1.0f;\n } else if (outVal < -1.0f) {\n outVal = -1.0f;\n } else if (outVal > 0.9f) {\n outVal = 0.9f + 0.1f * tanh((outVal - 0.9f) / 0.1f);\n } else if (outVal < -0.9f) {\n outVal = -0.9f + 0.1f * tanh((outVal + 0.9f) / 0.1f);\n }\n\n outputChannels[sampleIndex] = outVal;\n }\n }\n\n state[0] = f32(gateState);\n state[1] = currentGain;\n state[2] = gainAtTransition;\n state[3] = f32(attackSamplesLeft);\n state[4] = f32(holdSamplesLeft);\n state[5] = f32(releaseSamplesLeft);\n state[6] = f32(writeIndex);\n state[7] = sumSquares;\n}\n`;\nconst noiseGateAudioProcessor = async (channels, sampleRate, virtualMedia, ctx) => {\n\tif (!ctx?.device) throw new Error(\"GPUDevice is required for WebGPU Noise Gate.\");\n\tconst op = virtualMedia.operation || {};\n\tconst inputs = op.inputs || {};\n\tconst threshold = resolveNumber(op.threshold, -40);\n\tconst attack = resolveNumber(op.attack, .005);\n\tconst hold = resolveNumber(op.hold, .05);\n\tconst release = resolveNumber(op.release, .1);\n\tconst range = resolveNumber(op.range, -80);\n\tconst closedGain = range <= -96 ? 0 : 10 ** (range / 20);\n\tconst isHandleConnected = (handleIdKey) => {\n\t\tconst handleId = op[handleIdKey];\n\t\tif (typeof handleId !== \"string\" || !handleId) return false;\n\t\tconst input = inputs[handleId];\n\t\treturn Boolean(input?.connectionValid && input.outputItem && (input.outputItem.type === \"Signal\" || input.outputItem.type === \"Number\"));\n\t};\n\tconst hasThresholdSig = isHandleConnected(\"thresholdHandleId\") ? 1 : 0;\n\tconst hasAttackSig = isHandleConnected(\"attackHandleId\") ? 1 : 0;\n\tconst hasHoldSig = isHandleConnected(\"holdHandleId\") ? 1 : 0;\n\tconst hasReleaseSig = isHandleConnected(\"releaseHandleId\") ? 1 : 0;\n\tconst hasRangeSig = isHandleConnected(\"rangeHandleId\") ? 1 : 0;\n\tconst numChannels = channels.length;\n\tif (numChannels === 0) return;\n\tconst numSamples = channels[0].length;\n\tif (numSamples === 0) return;\n\tconst windowLength = Math.max(1, Math.round(.01 * sampleRate));\n\tconst nodeId = op.id || \"audio-noise-gate\";\n\tconst frame = ctx.frame ?? 0;\n\tconst fps = ctx.fps ?? 24;\n\tconst stateFloatCount = 8 + windowLength;\n\tawait WebGPUAudioProcessor.process(ctx.device, nodeId, channels, sampleRate, virtualMedia, frame, fps, NOISE_GATE_SHADER_TEMPLATE, () => [\n\t\tsampleRate,\n\t\tthreshold,\n\t\tattack,\n\t\thold,\n\t\trelease,\n\t\tclosedGain,\n\t\twindowLength,\n\t\thasThresholdSig,\n\t\thasAttackSig,\n\t\thasHoldSig,\n\t\thasReleaseSig,\n\t\thasRangeSig,\n\t\t0,\n\t\tframe,\n\t\tnumSamples,\n\t\tnumChannels\n\t], 16, stateFloatCount, ctx?.renderId, true, ctx?.elapsedMs, ctx?.durationMs, void 0, void 0, PARAM_ORDER);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ audioProcessor: noiseGateAudioProcessor });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-C77wd_vw.mjs.map"],"mappings":";;;;;AAKA,MAAM,cAAc;CACnB;CACA;CACA;CACA;CACA;CACA;AACD,MAAM,mCAAmC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+NzC,MAAM,0BAA0B,OAAO,UAAU,YAAY,cAAc,QAAQ;AAClF,KAAI,CAAC,KAAK,OAAQ,OAAM,IAAI,MAAM,+CAA+C;CACjF,MAAM,KAAK,aAAa,aAAa,EAAE;CACvC,MAAM,SAAS,GAAG,UAAU,EAAE;CAC9B,MAAM,YAAY,cAAc,GAAG,WAAW,IAAI;CAClD,MAAM,SAAS,cAAc,GAAG,QAAQ,KAAK;CAC7C,MAAM,OAAO,cAAc,GAAG,MAAM,IAAI;CACxC,MAAM,UAAU,cAAc,GAAG,SAAS,GAAG;CAC7C,MAAM,QAAQ,cAAc,GAAG,OAAO,IAAI;CAC1C,MAAM,aAAa,SAAS,MAAM,IAAI,OAAO,QAAQ;CACrD,MAAM,qBAAqB,gBAAgB;EAC1C,MAAM,WAAW,GAAG;AACpB,MAAI,OAAO,aAAa,YAAY,CAAC,SAAU,QAAO;EACtD,MAAM,QAAQ,OAAO;AACrB,SAAO,QAAQ,OAAO,mBAAmB,MAAM,eAAe,MAAM,WAAW,SAAS,YAAY,MAAM,WAAW,SAAS,UAAU;;CAEzI,MAAM,kBAAkB,kBAAkB,oBAAoB,GAAG,IAAI;CACrE,MAAM,eAAe,kBAAkB,iBAAiB,GAAG,IAAI;CAC/D,MAAM,aAAa,kBAAkB,eAAe,GAAG,IAAI;CAC3D,MAAM,gBAAgB,kBAAkB,kBAAkB,GAAG,IAAI;CACjE,MAAM,cAAc,kBAAkB,gBAAgB,GAAG,IAAI;CAC7D,MAAM,cAAc,SAAS;AAC7B,KAAI,gBAAgB,EAAG;CACvB,MAAM,aAAa,SAAS,GAAG;AAC/B,KAAI,eAAe,EAAG;CACtB,MAAM,eAAe,KAAK,IAAI,GAAG,KAAK,MAAM,MAAM,WAAW,CAAC;CAC9D,MAAM,SAAS,GAAG,MAAM;CACxB,MAAM,QAAQ,IAAI,SAAS;CAC3B,MAAM,MAAM,IAAI,OAAO;CACvB,MAAM,kBAAkB,IAAI;AAC5B,OAAM,qBAAqB,QAAQ,IAAI,QAAQ,QAAQ,UAAU,YAAY,cAAc,OAAO,KAAK,kCAAkC;EACxI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,IAAI,iBAAiB,KAAK,UAAU,MAAM,KAAK,WAAW,KAAK,YAAY,KAAK,GAAG,KAAK,GAAG,YAAY;;AAK3G,IAAI,oBAAoB,eAAe,EAAE,gBAAgB,yBAAyB,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Jt as resolveNumber, Pt as isSignal } from "./dist-CbG3QxDw.mjs";
|
|
2
2
|
import { n as defineRenderer } from "./renderer-CtVkU_GA.mjs";
|
|
3
|
-
import { C as WebGPUAudioProcessor } from "./dist-
|
|
3
|
+
import { C as WebGPUAudioProcessor } from "./dist-Cxi68OuY.mjs";
|
|
4
4
|
|
|
5
5
|
//#region ../../nodes/node-stereo-panning/dist/renderers-Dc15sLt-.mjs
|
|
6
6
|
const PARAM_ORDER = ["pan"];
|
|
@@ -96,4 +96,4 @@ var renderers_default = defineRenderer({ audioProcessor: stereoPanningAudioProce
|
|
|
96
96
|
|
|
97
97
|
//#endregion
|
|
98
98
|
export { renderers_default as t };
|
|
99
|
-
//# sourceMappingURL=renderer-
|
|
99
|
+
//# sourceMappingURL=renderer-kwmlLQOO.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-
|
|
1
|
+
{"version":3,"file":"renderer-kwmlLQOO.mjs","names":[],"sources":["../../../nodes/node-stereo-panning/dist/renderers-Dc15sLt-.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { isSignal, resolveNumber } from \"@framefields/node-sdk\";\nimport { WebGPUAudioProcessor } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/audio-processor.ts\nconst PARAM_ORDER = [\"pan\"];\nconst PANNING_SHADER_TEMPLATE = () => `\nstruct Uniforms {\n sampleRate : f32,\n pan : f32,\n hasPanSig : f32,\n baseTime : f32,\n frame : f32,\n numSamples : f32,\n numChannels : f32,\n pad1 : f32,\n};\n\n@group(0) @binding(0) var<uniform> u : Uniforms;\n@group(0) @binding(1) var<storage, read> inputChannels : array<f32>;\n@group(0) @binding(2) var<storage, read_write> outputChannels : array<f32>;\n@group(0) @binding(3) var<storage, read_write> state : array<f32>;\n@group(0) @binding(4) var<storage, read> panSignal : array<f32>;\n\n@compute @workgroup_size(1)\nfn main(@builtin(global_invocation_id) gid : vec3<u32>) {\n if (gid.x != 0u) { return; }\n\n let numSamples = u32(u.numSamples);\n let numChannels = u32(u.numChannels);\n\n for (var index = 0u; index < numSamples; index = index + 1u) {\n var currentPan = u.pan;\n if (u.hasPanSig > 0.5f) {\n currentPan = panSignal[index];\n }\n let clampedPan = max(-1.0f, min(1.0f, currentPan));\n var leftGain = 1.0f;\n var rightGain = 1.0f;\n\n if (clampedPan < 0.0f) {\n rightGain = 1.0f + clampedPan;\n } else if (clampedPan > 0.0f) {\n leftGain = 1.0f - clampedPan;\n }\n\n if (numChannels > 1u) {\n outputChannels[index] = inputChannels[index] * leftGain;\n outputChannels[numSamples + index] = inputChannels[numSamples + index] * rightGain;\n } else {\n outputChannels[index] = inputChannels[index] * leftGain;\n }\n }\n\n // Dummy reference to prevent state binding from being optimized out\n state[0] = state[0];\n}\n`;\nconst stereoPanningAudioProcessor = async (channels, sampleRate, node, ctx) => {\n\tif (!ctx?.device) throw new Error(\"GPUDevice is required for WebGPU Stereo Panning.\");\n\tconst op = node.operation || {};\n\tconst inputs = op.inputs || {};\n\tconst pan = resolveNumber(op.pan, 0);\n\tconst clampedPan = Math.max(-1, Math.min(1, pan));\n\tconst isHandleConnected = (handleIdKey) => {\n\t\tconst handleId = op[handleIdKey];\n\t\tif (typeof handleId !== \"string\" || !handleId) return false;\n\t\tconst input = inputs[handleId];\n\t\treturn Boolean(input?.connectionValid && input.outputItem && (input.outputItem.type === \"Signal\" || input.outputItem.type === \"Number\"));\n\t};\n\tconst hasPanSig = isSignal(op.pan) || isSignal(op.signals?.pan) || isHandleConnected(\"panHandleId\") ? 1 : 0;\n\tif (channels.length === 0) return;\n\tconst numSamples = channels[0].length;\n\tif (numSamples === 0) return;\n\tif (channels.length === 1) {\n\t\tconst rightChannel = new Float32Array(numSamples);\n\t\trightChannel.set(channels[0]);\n\t\tchannels.push(rightChannel);\n\t}\n\tconst numChannels = channels.length;\n\tconst nodeId = op.id || \"stereo-panning\";\n\tconst frame = ctx.frame ?? 0;\n\tconst fps = ctx.fps ?? 24;\n\tawait WebGPUAudioProcessor.process(ctx.device, nodeId, channels, sampleRate, node, frame, fps, PANNING_SHADER_TEMPLATE, () => [\n\t\tsampleRate,\n\t\tclampedPan,\n\t\thasPanSig,\n\t\t0,\n\t\tframe,\n\t\tnumSamples,\n\t\tnumChannels,\n\t\t0\n\t], 8, 1, ctx?.renderId, true, ctx?.elapsedMs, ctx?.durationMs, void 0, void 0, PARAM_ORDER);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ audioProcessor: stereoPanningAudioProcessor });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-Dc15sLt-.mjs.map"],"mappings":";;;;;AAKA,MAAM,cAAc,CAAC,MAAM;AAC3B,MAAM,gCAAgC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoDtC,MAAM,8BAA8B,OAAO,UAAU,YAAY,MAAM,QAAQ;AAC9E,KAAI,CAAC,KAAK,OAAQ,OAAM,IAAI,MAAM,mDAAmD;CACrF,MAAM,KAAK,KAAK,aAAa,EAAE;CAC/B,MAAM,SAAS,GAAG,UAAU,EAAE;CAC9B,MAAM,MAAM,cAAc,GAAG,KAAK,EAAE;CACpC,MAAM,aAAa,KAAK,IAAI,IAAI,KAAK,IAAI,GAAG,IAAI,CAAC;CACjD,MAAM,qBAAqB,gBAAgB;EAC1C,MAAM,WAAW,GAAG;AACpB,MAAI,OAAO,aAAa,YAAY,CAAC,SAAU,QAAO;EACtD,MAAM,QAAQ,OAAO;AACrB,SAAO,QAAQ,OAAO,mBAAmB,MAAM,eAAe,MAAM,WAAW,SAAS,YAAY,MAAM,WAAW,SAAS,UAAU;;CAEzI,MAAM,YAAY,SAAS,GAAG,IAAI,IAAI,SAAS,GAAG,SAAS,IAAI,IAAI,kBAAkB,cAAc,GAAG,IAAI;AAC1G,KAAI,SAAS,WAAW,EAAG;CAC3B,MAAM,aAAa,SAAS,GAAG;AAC/B,KAAI,eAAe,EAAG;AACtB,KAAI,SAAS,WAAW,GAAG;EAC1B,MAAM,eAAe,IAAI,aAAa,WAAW;AACjD,eAAa,IAAI,SAAS,GAAG;AAC7B,WAAS,KAAK,aAAa;;CAE5B,MAAM,cAAc,SAAS;CAC7B,MAAM,SAAS,GAAG,MAAM;CACxB,MAAM,QAAQ,IAAI,SAAS;CAC3B,MAAM,MAAM,IAAI,OAAO;AACvB,OAAM,qBAAqB,QAAQ,IAAI,QAAQ,QAAQ,UAAU,YAAY,MAAM,OAAO,KAAK,+BAA+B;EAC7H;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,GAAG,GAAG,KAAK,UAAU,MAAM,KAAK,WAAW,KAAK,YAAY,KAAK,GAAG,KAAK,GAAG,YAAY;;AAK5F,IAAI,oBAAoB,eAAe,EAAE,gBAAgB,6BAA6B,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { n as defineRenderer } from "./renderer-CtVkU_GA.mjs";
|
|
2
|
-
import {
|
|
2
|
+
import { rt as signalRegistry } from "./dist-Cxi68OuY.mjs";
|
|
3
3
|
|
|
4
4
|
//#region ../../nodes/node-noise-generator/dist/renderers-D0MBBQTB.mjs
|
|
5
5
|
const NOISE_SHADER = `
|
|
@@ -476,4 +476,4 @@ var renderers_default = defineRenderer({ WebGPURenderer: NoiseWebGPURenderer });
|
|
|
476
476
|
|
|
477
477
|
//#endregion
|
|
478
478
|
export { NoiseWebGPURenderer, renderers_default as default };
|
|
479
|
-
//# sourceMappingURL=renderer
|
|
479
|
+
//# sourceMappingURL=renderer-vqkKWqa5.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer--vY6O19V.mjs","names":[],"sources":["../../../nodes/node-noise-generator/dist/renderers-D0MBBQTB.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { signalRegistry } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst NOISE_SHADER = `\nstruct NoiseUniforms {\n noiseType : f32, // 0 = Perlin, 1 = Simplex, 2 = Voronoi\n outputType : f32, // 0 = Image, 1 = Video\n time : f32,\n _padding : f32,\n \n scale : f32,\n octaves : f32,\n persistence : f32,\n lacunarity : f32,\n \n speed : f32,\n hasSignal_scale : f32,\n hasSignal_octaves : f32,\n hasSignal_persistence : f32,\n \n hasSignal_lacunarity : f32,\n hasSignal_speed : f32,\n _pad2 : f32,\n _pad3 : f32,\n\n colorStart : vec4<f32>,\n colorEnd : vec4<f32>,\n};\n\n@group(0) @binding(0) var<uniform> u : NoiseUniforms;\n\n@group(1) @binding(0) var scaleTex : texture_2d<f32>;\n@group(1) @binding(1) var octavesTex : texture_2d<f32>;\n@group(1) @binding(2) var persistenceTex : texture_2d<f32>;\n@group(1) @binding(3) var lacunarityTex : texture_2d<f32>;\n@group(1) @binding(4) var speedTex : texture_2d<f32>;\n@group(1) @binding(5) var sigSamp : sampler;\n\nstruct VSOut {\n @builtin(position) pos : vec4<f32>,\n @location(0) uv : vec2<f32>,\n};\n\n@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {\n var pos = array<vec2<f32>, 4>(\n vec2<f32>(-1.0, 1.0),\n vec2<f32>(1.0, 1.0),\n vec2<f32>(-1.0, -1.0),\n vec2<f32>(1.0, -1.0)\n );\n var uv = array<vec2<f32>, 4>(\n vec2<f32>(0.0, 0.0),\n vec2<f32>(1.0, 0.0),\n vec2<f32>(0.0, 1.0),\n vec2<f32>(1.0, 1.0)\n );\n return VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);\n}\n\nfn hash3(p: vec3<f32>) -> vec3<f32> {\n var p3 = fract(p * vec3<f32>(0.1031, 0.11369, 0.13787));\n p3 += dot(p3, p3.yzx + 19.19);\n return fract((p3.xxy + p3.yzz) * p3.zyx) * 2.0 - 1.0;\n}\n\nfn perlin3d(p: vec3<f32>) -> f32 {\n let pi = floor(p);\n let pf = fract(p);\n \n let w = pf * pf * (3.0 - 2.0 * pf);\n \n let g000 = hash3(pi + vec3<f32>(0.0, 0.0, 0.0));\n let g100 = hash3(pi + vec3<f32>(1.0, 0.0, 0.0));\n let g010 = hash3(pi + vec3<f32>(0.0, 1.0, 0.0));\n let g110 = hash3(pi + vec3<f32>(1.0, 1.0, 0.0));\n let g001 = hash3(pi + vec3<f32>(0.0, 0.0, 1.0));\n let g101 = hash3(pi + vec3<f32>(1.0, 0.0, 1.0));\n let g011 = hash3(pi + vec3<f32>(0.0, 1.0, 1.0));\n let g111 = hash3(pi + vec3<f32>(1.0, 1.0, 1.0));\n \n let n000 = dot(g000, pf - vec3<f32>(0.0, 0.0, 0.0));\n let n100 = dot(g100, pf - vec3<f32>(1.0, 0.0, 0.0));\n let n010 = dot(g010, pf - vec3<f32>(0.0, 1.0, 0.0));\n let n110 = dot(g110, pf - vec3<f32>(1.0, 1.0, 0.0));\n let n001 = dot(g001, pf - vec3<f32>(0.0, 0.0, 1.0));\n let n101 = dot(g101, pf - vec3<f32>(1.0, 0.0, 1.0));\n let n011 = dot(g011, pf - vec3<f32>(0.0, 1.0, 1.0));\n let n111 = dot(g111, pf - vec3<f32>(1.0, 1.0, 1.0));\n \n let n_x00 = mix(n000, n100, w.x);\n let n_x10 = mix(n010, n110, w.x);\n let n_y0 = mix(n_x00, n_x10, w.y);\n \n let n_x01 = mix(n001, n101, w.x);\n let n_x11 = mix(n011, n111, w.x);\n let n_y1 = mix(n_x01, n_x11, w.y);\n \n return mix(n_y0, n_y1, w.z) * 0.5 + 0.5; // Map to [0, 1]\n}\n\nfn simplex3d(v: vec3<f32>) -> f32 {\n let skew = (v.x + v.y + v.z) * (1.0 / 3.0);\n let i = floor(v + skew);\n let unskew = (i.x + i.y + i.z) * (1.0 / 6.0);\n let x0 = v - i + unskew;\n \n var i1 = vec3<f32>(0.0);\n var i2 = vec3<f32>(0.0);\n \n if (x0.x >= x0.y) {\n if (x0.y >= x0.z) {\n i1 = vec3<f32>(1.0, 0.0, 0.0);\n i2 = vec3<f32>(1.0, 1.0, 0.0);\n } else if (x0.x >= x0.z) {\n i1 = vec3<f32>(1.0, 0.0, 0.0);\n i2 = vec3<f32>(1.0, 0.0, 1.0);\n } else {\n i1 = vec3<f32>(0.0, 0.0, 1.0);\n i2 = vec3<f32>(1.0, 0.0, 1.0);\n }\n } else {\n if (x0.y < x0.z) {\n i1 = vec3<f32>(0.0, 0.0, 1.0);\n i2 = vec3<f32>(0.0, 1.0, 1.0);\n } else if (x0.x < x0.z) {\n i1 = vec3<f32>(0.0, 1.0, 0.0);\n i2 = vec3<f32>(0.0, 1.0, 1.0);\n } else {\n i1 = vec3<f32>(0.0, 1.0, 0.0);\n i2 = vec3<f32>(1.0, 1.0, 0.0);\n }\n }\n \n let x1 = x0 - i1 + (1.0 / 6.0);\n let x2 = x0 - i2 + (1.0 / 3.0);\n let x3 = x0 - 1.0 + 0.5;\n \n var m = vec4<f32>(\n dot(x0, x0),\n dot(x1, x1),\n dot(x2, x2),\n dot(x3, x3)\n );\n m = max(0.6 - m, vec4<f32>(0.0));\n m = m * m;\n m = m * m;\n \n let g0 = dot(hash3(i + vec3<f32>(0.0)), x0);\n let g1 = dot(hash3(i + i1), x1);\n let g2 = dot(hash3(i + i2), x2);\n let g3 = dot(hash3(i + vec3<f32>(1.0)), x3);\n \n let n = dot(m, vec4<f32>(g0, g1, g2, g3));\n return 32.0 * n * 0.5 + 0.5;\n}\n\nfn voronoi3d(p: vec3<f32>) -> f32 {\n let pi = floor(p);\n let pf = fract(p);\n var min_dist = 8.0;\n \n for (var k = -1; k <= 1; k++) {\n for (var j = -1; j <= 1; j++) {\n for (var i = -1; i <= 1; i++) {\n let g = vec3<f32>(f32(i), f32(j), f32(k));\n let o = hash3(pi + g) * 0.5 + 0.5;\n let r = g + o - pf;\n let d = dot(r, r);\n if (d < min_dist) {\n min_dist = d;\n }\n }\n }\n }\n return clamp(sqrt(min_dist), 0.0, 1.0);\n}\n\nfn fbm_perlin(p: vec3<f32>, octaves: i32, persistence: f32, lacunarity: f32) -> f32 {\n var value = 0.0;\n var amp = 1.0;\n var freq = 1.0;\n var total_amp = 0.0;\n for (var i = 0; i < 8; i++) {\n if (i >= octaves) { break; }\n value += amp * perlin3d(p * freq);\n total_amp += amp;\n freq *= lacunarity;\n amp *= persistence;\n }\n return value / total_amp;\n}\n\nfn fbm_simplex(p: vec3<f32>, octaves: i32, persistence: f32, lacunarity: f32) -> f32 {\n var value = 0.0;\n var amp = 1.0;\n var freq = 1.0;\n var total_amp = 0.0;\n for (var i = 0; i < 8; i++) {\n if (i >= octaves) { break; }\n value += amp * simplex3d(p * freq);\n total_amp += amp;\n freq *= lacunarity;\n amp *= persistence;\n }\n return value / total_amp;\n}\n\nfn fbm_voronoi(p: vec3<f32>, octaves: i32, persistence: f32, lacunarity: f32) -> f32 {\n var value = 0.0;\n var amp = 1.0;\n var freq = 1.0;\n var total_amp = 0.0;\n for (var i = 0; i < 8; i++) {\n if (i >= octaves) { break; }\n value += amp * voronoi3d(p * freq);\n total_amp += amp;\n freq *= lacunarity;\n amp *= persistence;\n }\n return value / total_amp;\n}\n\nfn get_field(val: f32, hasSig: f32, tex: texture_2d<f32>, samp: sampler, uv: vec2<f32>) -> f32 {\n if (hasSig > 0.5) {\n return textureSampleLevel(tex, samp, uv, 0.0).r;\n }\n return val;\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n let scale = get_field(u.scale, u.hasSignal_scale, scaleTex, sigSamp, in.uv);\n let octaves_f = get_field(u.octaves, u.hasSignal_octaves, octavesTex, sigSamp, in.uv);\n let octaves = i32(clamp(octaves_f, 1.0, 8.0));\n let persistence = get_field(u.persistence, u.hasSignal_persistence, persistenceTex, sigSamp, in.uv);\n let lacunarity = get_field(u.lacunarity, u.hasSignal_lacunarity, lacunarityTex, sigSamp, in.uv);\n let speed = get_field(u.speed, u.hasSignal_speed, speedTex, sigSamp, in.uv);\n\n let isVideo = u.outputType > 0.5;\n let z_coord = select(0.0, u.time * speed, isVideo);\n \n let coord = vec3<f32>(in.uv * scale, z_coord);\n \n var n_val = 0.0;\n if (u.noiseType < 0.5) {\n n_val = fbm_perlin(coord, octaves, persistence, lacunarity);\n } else if (u.noiseType < 1.5) {\n n_val = fbm_simplex(coord, octaves, persistence, lacunarity);\n } else {\n n_val = fbm_voronoi(coord, octaves, persistence, lacunarity);\n }\n \n return mix(u.colorStart, u.colorEnd, clamp(n_val, 0.0, 1.0));\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nconst noiseUniformData = new Float32Array(24);\nfunction getDeviceLayouts(device) {\n\tlet res = deviceResourceCache.get(device);\n\tif (res) return res;\n\tres = {\n\t\tuniformLayout: device.createBindGroupLayout({ entries: [{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tbuffer: { type: \"uniform\" }\n\t\t}] }),\n\t\tsignalsLayout: device.createBindGroupLayout({ entries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 4,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 5,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\tsampler: { type: \"filtering\" }\n\t\t\t}\n\t\t] }),\n\t\tpipelineCache: /* @__PURE__ */ new Map()\n\t};\n\tdeviceResourceCache.set(device, res);\n\treturn res;\n}\nfunction getNoiseResources(device, format) {\n\tconst layouts = getDeviceLayouts(device);\n\tconst cacheKey = `noise_${format}`;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst noiseModule = device.createShaderModule({\n\t\t\tlabel: `noise_${format}.wgsl`,\n\t\t\tcode: NOISE_SHADER\n\t\t});\n\t\tpipeline = device.createRenderPipeline({\n\t\t\tlabel: `NoiseGeneratorPipeline_${format}`,\n\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [layouts.uniformLayout, layouts.signalsLayout] }),\n\t\t\tvertex: {\n\t\t\t\tmodule: noiseModule,\n\t\t\t\tentryPoint: \"vs\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule: noiseModule,\n\t\t\t\tentryPoint: \"fs\",\n\t\t\t\ttargets: [{ format }]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t});\n\t\tlayouts.pipelineCache.set(cacheKey, pipeline);\n\t}\n\treturn {\n\t\tnoisePipeline: pipeline,\n\t\tuniformLayout: layouts.uniformLayout,\n\t\tsignalsLayout: layouts.signalsLayout\n\t};\n}\nfunction hexToRgba(hex) {\n\tlet h = hex.replace(\"#\", \"\");\n\tif (h.length === 3 || h.length === 4) h = h.split(\"\").map((c) => c + c).join(\"\");\n\tconst r = parseInt(h.substring(0, 2), 16) / 255;\n\tconst g = parseInt(h.substring(2, 4), 16) / 255;\n\tconst b = parseInt(h.substring(4, 6), 16) / 255;\n\tlet a = 1;\n\tif (h.length === 8) a = parseInt(h.substring(6, 8), 16) / 255;\n\treturn [\n\t\tr,\n\t\tg,\n\t\tb,\n\t\ta\n\t];\n}\nfunction resolveNoiseField(op, fieldName, defaultValue) {\n\tconst handleId = op[`${fieldName}HandleId`];\n\tconst signalInput = handleId ? op.inputs?.[handleId] : null;\n\tconst hasSignal = !!(signalInput?.connectionValid && (signalInput.outputItem?.type === \"Signal\" || signalInput.outputItem?.type === \"Numeric\"));\n\tconst sd = hasSignal ? signalInput?.outputItem?.data : null;\n\tlet value = defaultValue;\n\tif (!hasSignal) if (signalInput?.connectionValid && signalInput.outputItem?.type === \"Number\") value = Number(signalInput.outputItem.data ?? defaultValue);\n\telse value = Number(op[fieldName] ?? defaultValue);\n\telse if (sd && typeof sd === \"object\" && \"offset\" in sd) value = Number(sd.offset ?? defaultValue);\n\treturn {\n\t\thasSignal,\n\t\tsd,\n\t\tvalue\n\t};\n}\nconst NoiseWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"NoiseGenerator\" || !op) return;\n\tconst { noisePipeline: pipeline, uniformLayout: uLayout, signalsLayout: sigLayout } = getNoiseResources(ctx.device, ctx.renderer.format);\n\tconst frame = props.frame ?? 0;\n\tconst fps = props.fps || 30;\n\tconst scaleInfo = resolveNoiseField(op, \"scale\", 10);\n\tconst octavesInfo = resolveNoiseField(op, \"octaves\", 4);\n\tconst persistenceInfo = resolveNoiseField(op, \"persistence\", .5);\n\tconst lacunarityInfo = resolveNoiseField(op, \"lacunarity\", 2);\n\tconst speedInfo = resolveNoiseField(op, \"speed\", 1);\n\tconst noiseTypeVal = op.noiseType === \"Simplex\" ? 1 : op.noiseType === \"Voronoi\" ? 2 : 0;\n\tconst outputTypeVal = op.outputType === \"Video\" ? 1 : 0;\n\tconst elapsedSeconds = props.elapsedMs !== void 0 ? props.elapsedMs / 1e3 : frame / fps;\n\tconst durationSeconds = props.virtualMedia?.metadata?.durationMs ? props.virtualMedia.metadata.durationMs / 1e3 : props.durationMs !== void 0 ? props.durationMs / 1e3 : 0;\n\tconst colorStartVal = hexToRgba(op.colorStart ?? \"#000000\");\n\tconst colorEndVal = hexToRgba(op.colorEnd ?? \"#ffffff\");\n\tnoiseUniformData[0] = noiseTypeVal;\n\tnoiseUniformData[1] = outputTypeVal;\n\tnoiseUniformData[2] = elapsedSeconds;\n\tnoiseUniformData[3] = 0;\n\tnoiseUniformData[4] = scaleInfo.value;\n\tnoiseUniformData[5] = octavesInfo.value;\n\tnoiseUniformData[6] = persistenceInfo.value;\n\tnoiseUniformData[7] = lacunarityInfo.value;\n\tnoiseUniformData[8] = speedInfo.value;\n\tnoiseUniformData[9] = scaleInfo.hasSignal ? 1 : 0;\n\tnoiseUniformData[10] = octavesInfo.hasSignal ? 1 : 0;\n\tnoiseUniformData[11] = persistenceInfo.hasSignal ? 1 : 0;\n\tnoiseUniformData[12] = lacunarityInfo.hasSignal ? 1 : 0;\n\tnoiseUniformData[13] = speedInfo.hasSignal ? 1 : 0;\n\tnoiseUniformData[14] = 0;\n\tnoiseUniformData[15] = 0;\n\tnoiseUniformData[16] = colorStartVal[0];\n\tnoiseUniformData[17] = colorStartVal[1];\n\tnoiseUniformData[18] = colorStartVal[2];\n\tnoiseUniformData[19] = colorStartVal[3];\n\tnoiseUniformData[20] = colorEndVal[0];\n\tnoiseUniformData[21] = colorEndVal[1];\n\tnoiseUniformData[22] = colorEndVal[2];\n\tnoiseUniformData[23] = colorEndVal[3];\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(noiseUniformData);\n\tconst signalFields = [\n\t\t{\n\t\t\tname: \"scale\",\n\t\t\tinfo: scaleInfo\n\t\t},\n\t\t{\n\t\t\tname: \"octaves\",\n\t\t\tinfo: octavesInfo\n\t\t},\n\t\t{\n\t\t\tname: \"persistence\",\n\t\t\tinfo: persistenceInfo\n\t\t},\n\t\t{\n\t\t\tname: \"lacunarity\",\n\t\t\tinfo: lacunarityInfo\n\t\t},\n\t\t{\n\t\t\tname: \"speed\",\n\t\t\tinfo: speedInfo\n\t\t}\n\t];\n\tconst signalViews = [];\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tfor (const f of signalFields) if (!!(f.info.hasSignal && f.info.sd)) {\n\t\tconst view = signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, f.info.sd.nodeId ?? `noise_${f.name}_sig`, elapsedSeconds, durationSeconds, f.info.sd, targetWidth, targetHeight, props.renderId, frame, fps);\n\t\tsignalViews.push(view);\n\t} else signalViews.push(signalRegistry.getDummy1x1TextureView(ctx.device));\n\tpass.setPipeline(pipeline);\n\tpass.setBindGroup(0, ctx.device.createBindGroup({\n\t\tlayout: uLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: uniformBuffer }\n\t\t}]\n\t}));\n\tpass.setBindGroup(1, ctx.device.createBindGroup({\n\t\tlayout: sigLayout,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: signalViews[0]\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: signalViews[1]\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: persistenceInfo.hasSignal ? signalViews[2] : signalViews[2]\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tresource: signalViews[3]\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 4,\n\t\t\t\tresource: signalViews[4]\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 5,\n\t\t\t\tresource: sampler\n\t\t\t}\n\t\t]\n\t}));\n\tpass.draw(4);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: NoiseWebGPURenderer });\n\n//#endregion\nexport { NoiseWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-D0MBBQTB.mjs.map"],"mappings":";;;;AAIA,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2PrB,MAAM,sCAAsC,IAAI,SAAS;AACzD,MAAM,mBAAmB,IAAI,aAAa,GAAG;AAC7C,SAAS,iBAAiB,QAAQ;CACjC,IAAI,MAAM,oBAAoB,IAAI,OAAO;AACzC,KAAI,IAAK,QAAO;AAChB,OAAM;EACL,eAAe,OAAO,sBAAsB,EAAE,SAAS,CAAC;GACvD,SAAS;GACT,YAAY,eAAe;GAC3B,QAAQ,EAAE,MAAM,WAAW;GAC3B,CAAC,EAAE,CAAC;EACL,eAAe,OAAO,sBAAsB,EAAE,SAAS;GACtD;IACC,SAAS;IACT,YAAY,eAAe;IAC3B,SAAS,EAAE,YAAY,SAAS;IAChC;GACD;IACC,SAAS;IACT,YAAY,eAAe;IAC3B,SAAS,EAAE,YAAY,SAAS;IAChC;GACD;IACC,SAAS;IACT,YAAY,eAAe;IAC3B,SAAS,EAAE,YAAY,SAAS;IAChC;GACD;IACC,SAAS;IACT,YAAY,eAAe;IAC3B,SAAS,EAAE,YAAY,SAAS;IAChC;GACD;IACC,SAAS;IACT,YAAY,eAAe;IAC3B,SAAS,EAAE,YAAY,SAAS;IAChC;GACD;IACC,SAAS;IACT,YAAY,eAAe;IAC3B,SAAS,EAAE,MAAM,aAAa;IAC9B;GACD,EAAE,CAAC;EACJ,+BAA+B,IAAI,KAAK;EACxC;AACD,qBAAoB,IAAI,QAAQ,IAAI;AACpC,QAAO;;AAER,SAAS,kBAAkB,QAAQ,QAAQ;CAC1C,MAAM,UAAU,iBAAiB,OAAO;CACxC,MAAM,WAAW,SAAS;CAC1B,IAAI,WAAW,QAAQ,cAAc,IAAI,SAAS;AAClD,KAAI,CAAC,UAAU;EACd,MAAM,cAAc,OAAO,mBAAmB;GAC7C,OAAO,SAAS,OAAO;GACvB,MAAM;GACN,CAAC;AACF,aAAW,OAAO,qBAAqB;GACtC,OAAO,0BAA0B;GACjC,QAAQ,OAAO,qBAAqB,EAAE,kBAAkB,CAAC,QAAQ,eAAe,QAAQ,cAAc,EAAE,CAAC;GACzG,QAAQ;IACP,QAAQ;IACR,YAAY;IACZ;GACD,UAAU;IACT,QAAQ;IACR,YAAY;IACZ,SAAS,CAAC,EAAE,QAAQ,CAAC;IACrB;GACD,WAAW,EAAE,UAAU,kBAAkB;GACzC,CAAC;AACF,UAAQ,cAAc,IAAI,UAAU,SAAS;;AAE9C,QAAO;EACN,eAAe;EACf,eAAe,QAAQ;EACvB,eAAe,QAAQ;EACvB;;AAEF,SAAS,UAAU,KAAK;CACvB,IAAI,IAAI,IAAI,QAAQ,KAAK,GAAG;AAC5B,KAAI,EAAE,WAAW,KAAK,EAAE,WAAW,EAAG,KAAI,EAAE,MAAM,GAAG,CAAC,KAAK,MAAM,IAAI,EAAE,CAAC,KAAK,GAAG;CAChF,MAAM,IAAI,SAAS,EAAE,UAAU,GAAG,EAAE,EAAE,GAAG,GAAG;CAC5C,MAAM,IAAI,SAAS,EAAE,UAAU,GAAG,EAAE,EAAE,GAAG,GAAG;CAC5C,MAAM,IAAI,SAAS,EAAE,UAAU,GAAG,EAAE,EAAE,GAAG,GAAG;CAC5C,IAAI,IAAI;AACR,KAAI,EAAE,WAAW,EAAG,KAAI,SAAS,EAAE,UAAU,GAAG,EAAE,EAAE,GAAG,GAAG;AAC1D,QAAO;EACN;EACA;EACA;EACA;EACA;;AAEF,SAAS,kBAAkB,IAAI,WAAW,cAAc;CACvD,MAAM,WAAW,GAAG,GAAG,UAAU;CACjC,MAAM,cAAc,WAAW,GAAG,SAAS,YAAY;CACvD,MAAM,YAAY,CAAC,EAAE,aAAa,oBAAoB,YAAY,YAAY,SAAS,YAAY,YAAY,YAAY,SAAS;CACpI,MAAM,KAAK,YAAY,aAAa,YAAY,OAAO;CACvD,IAAI,QAAQ;AACZ,KAAI,CAAC,UAAW,KAAI,aAAa,mBAAmB,YAAY,YAAY,SAAS,SAAU,SAAQ,OAAO,YAAY,WAAW,QAAQ,aAAa;KACrJ,SAAQ,OAAO,GAAG,cAAc,aAAa;UACzC,MAAM,OAAO,OAAO,YAAY,YAAY,GAAI,SAAQ,OAAO,GAAG,UAAU,aAAa;AAClG,QAAO;EACN;EACA;EACA;EACA;;AAEF,MAAM,sBAAsB,OAAO,SAAS;CAC3C,MAAM,EAAE,KAAK,SAAS,MAAM,aAAa,cAAc,UAAU;CACjE,MAAM,KAAK,MAAM,cAAc;AAC/B,KAAI,IAAI,OAAO,oBAAoB,CAAC,GAAI;CACxC,MAAM,EAAE,eAAe,UAAU,eAAe,SAAS,eAAe,cAAc,kBAAkB,IAAI,QAAQ,IAAI,SAAS,OAAO;CACxI,MAAM,QAAQ,MAAM,SAAS;CAC7B,MAAM,MAAM,MAAM,OAAO;CACzB,MAAM,YAAY,kBAAkB,IAAI,SAAS,GAAG;CACpD,MAAM,cAAc,kBAAkB,IAAI,WAAW,EAAE;CACvD,MAAM,kBAAkB,kBAAkB,IAAI,eAAe,GAAG;CAChE,MAAM,iBAAiB,kBAAkB,IAAI,cAAc,EAAE;CAC7D,MAAM,YAAY,kBAAkB,IAAI,SAAS,EAAE;CACnD,MAAM,eAAe,GAAG,cAAc,YAAY,IAAI,GAAG,cAAc,YAAY,IAAI;CACvF,MAAM,gBAAgB,GAAG,eAAe,UAAU,IAAI;CACtD,MAAM,iBAAiB,MAAM,cAAc,KAAK,IAAI,MAAM,YAAY,MAAM,QAAQ;CACpF,MAAM,kBAAkB,MAAM,cAAc,UAAU,aAAa,MAAM,aAAa,SAAS,aAAa,MAAM,MAAM,eAAe,KAAK,IAAI,MAAM,aAAa,MAAM;CACzK,MAAM,gBAAgB,UAAU,GAAG,cAAc,UAAU;CAC3D,MAAM,cAAc,UAAU,GAAG,YAAY,UAAU;AACvD,kBAAiB,KAAK;AACtB,kBAAiB,KAAK;AACtB,kBAAiB,KAAK;AACtB,kBAAiB,KAAK;AACtB,kBAAiB,KAAK,UAAU;AAChC,kBAAiB,KAAK,YAAY;AAClC,kBAAiB,KAAK,gBAAgB;AACtC,kBAAiB,KAAK,eAAe;AACrC,kBAAiB,KAAK,UAAU;AAChC,kBAAiB,KAAK,UAAU,YAAY,IAAI;AAChD,kBAAiB,MAAM,YAAY,YAAY,IAAI;AACnD,kBAAiB,MAAM,gBAAgB,YAAY,IAAI;AACvD,kBAAiB,MAAM,eAAe,YAAY,IAAI;AACtD,kBAAiB,MAAM,UAAU,YAAY,IAAI;AACjD,kBAAiB,MAAM;AACvB,kBAAiB,MAAM;AACvB,kBAAiB,MAAM,cAAc;AACrC,kBAAiB,MAAM,cAAc;AACrC,kBAAiB,MAAM,cAAc;AACrC,kBAAiB,MAAM,cAAc;AACrC,kBAAiB,MAAM,YAAY;AACnC,kBAAiB,MAAM,YAAY;AACnC,kBAAiB,MAAM,YAAY;AACnC,kBAAiB,MAAM,YAAY;CACnC,MAAM,gBAAgB,IAAI,SAAS,mBAAmB,iBAAiB;CACvE,MAAM,eAAe;EACpB;GACC,MAAM;GACN,MAAM;GACN;EACD;GACC,MAAM;GACN,MAAM;GACN;EACD;GACC,MAAM;GACN,MAAM;GACN;EACD;GACC,MAAM;GACN,MAAM;GACN;EACD;GACC,MAAM;GACN,MAAM;GACN;EACD;CACD,MAAM,cAAc,EAAE;CACtB,MAAM,UAAU,IAAI,SAAS,aAAa,WAAW,IAAI,OAAO;AAChE,MAAK,MAAM,KAAK,aAAc,KAAI,CAAC,EAAE,EAAE,KAAK,aAAa,EAAE,KAAK,KAAK;EACpE,MAAM,OAAO,eAAe,yBAAyB,IAAI,QAAQ,SAAS,EAAE,KAAK,GAAG,UAAU,SAAS,EAAE,KAAK,OAAO,gBAAgB,iBAAiB,EAAE,KAAK,IAAI,aAAa,cAAc,MAAM,UAAU,OAAO,IAAI;AACvN,cAAY,KAAK,KAAK;OAChB,aAAY,KAAK,eAAe,uBAAuB,IAAI,OAAO,CAAC;AAC1E,MAAK,YAAY,SAAS;AAC1B,MAAK,aAAa,GAAG,IAAI,OAAO,gBAAgB;EAC/C,QAAQ;EACR,SAAS,CAAC;GACT,SAAS;GACT,UAAU,EAAE,QAAQ,eAAe;GACnC,CAAC;EACF,CAAC,CAAC;AACH,MAAK,aAAa,GAAG,IAAI,OAAO,gBAAgB;EAC/C,QAAQ;EACR,SAAS;GACR;IACC,SAAS;IACT,UAAU,YAAY;IACtB;GACD;IACC,SAAS;IACT,UAAU,YAAY;IACtB;GACD;IACC,SAAS;IACT,UAAU,gBAAgB,YAAY,YAAY,KAAK,YAAY;IACnE;GACD;IACC,SAAS;IACT,UAAU,YAAY;IACtB;GACD;IACC,SAAS;IACT,UAAU,YAAY;IACtB;GACD;IACC,SAAS;IACT,UAAU;IACV;GACD;EACD,CAAC,CAAC;AACH,MAAK,KAAK,EAAE;;AAKb,IAAI,oBAAoB,eAAe,EAAE,gBAAgB,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"renderer-vqkKWqa5.mjs","names":[],"sources":["../../../nodes/node-noise-generator/dist/renderers-D0MBBQTB.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { signalRegistry } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/webgpu-renderer.ts\nconst NOISE_SHADER = `\nstruct NoiseUniforms {\n noiseType : f32, // 0 = Perlin, 1 = Simplex, 2 = Voronoi\n outputType : f32, // 0 = Image, 1 = Video\n time : f32,\n _padding : f32,\n \n scale : f32,\n octaves : f32,\n persistence : f32,\n lacunarity : f32,\n \n speed : f32,\n hasSignal_scale : f32,\n hasSignal_octaves : f32,\n hasSignal_persistence : f32,\n \n hasSignal_lacunarity : f32,\n hasSignal_speed : f32,\n _pad2 : f32,\n _pad3 : f32,\n\n colorStart : vec4<f32>,\n colorEnd : vec4<f32>,\n};\n\n@group(0) @binding(0) var<uniform> u : NoiseUniforms;\n\n@group(1) @binding(0) var scaleTex : texture_2d<f32>;\n@group(1) @binding(1) var octavesTex : texture_2d<f32>;\n@group(1) @binding(2) var persistenceTex : texture_2d<f32>;\n@group(1) @binding(3) var lacunarityTex : texture_2d<f32>;\n@group(1) @binding(4) var speedTex : texture_2d<f32>;\n@group(1) @binding(5) var sigSamp : sampler;\n\nstruct VSOut {\n @builtin(position) pos : vec4<f32>,\n @location(0) uv : vec2<f32>,\n};\n\n@vertex fn vs(@builtin(vertex_index) vi: u32) -> VSOut {\n var pos = array<vec2<f32>, 4>(\n vec2<f32>(-1.0, 1.0),\n vec2<f32>(1.0, 1.0),\n vec2<f32>(-1.0, -1.0),\n vec2<f32>(1.0, -1.0)\n );\n var uv = array<vec2<f32>, 4>(\n vec2<f32>(0.0, 0.0),\n vec2<f32>(1.0, 0.0),\n vec2<f32>(0.0, 1.0),\n vec2<f32>(1.0, 1.0)\n );\n return VSOut(vec4<f32>(pos[vi], 0.0, 1.0), uv[vi]);\n}\n\nfn hash3(p: vec3<f32>) -> vec3<f32> {\n var p3 = fract(p * vec3<f32>(0.1031, 0.11369, 0.13787));\n p3 += dot(p3, p3.yzx + 19.19);\n return fract((p3.xxy + p3.yzz) * p3.zyx) * 2.0 - 1.0;\n}\n\nfn perlin3d(p: vec3<f32>) -> f32 {\n let pi = floor(p);\n let pf = fract(p);\n \n let w = pf * pf * (3.0 - 2.0 * pf);\n \n let g000 = hash3(pi + vec3<f32>(0.0, 0.0, 0.0));\n let g100 = hash3(pi + vec3<f32>(1.0, 0.0, 0.0));\n let g010 = hash3(pi + vec3<f32>(0.0, 1.0, 0.0));\n let g110 = hash3(pi + vec3<f32>(1.0, 1.0, 0.0));\n let g001 = hash3(pi + vec3<f32>(0.0, 0.0, 1.0));\n let g101 = hash3(pi + vec3<f32>(1.0, 0.0, 1.0));\n let g011 = hash3(pi + vec3<f32>(0.0, 1.0, 1.0));\n let g111 = hash3(pi + vec3<f32>(1.0, 1.0, 1.0));\n \n let n000 = dot(g000, pf - vec3<f32>(0.0, 0.0, 0.0));\n let n100 = dot(g100, pf - vec3<f32>(1.0, 0.0, 0.0));\n let n010 = dot(g010, pf - vec3<f32>(0.0, 1.0, 0.0));\n let n110 = dot(g110, pf - vec3<f32>(1.0, 1.0, 0.0));\n let n001 = dot(g001, pf - vec3<f32>(0.0, 0.0, 1.0));\n let n101 = dot(g101, pf - vec3<f32>(1.0, 0.0, 1.0));\n let n011 = dot(g011, pf - vec3<f32>(0.0, 1.0, 1.0));\n let n111 = dot(g111, pf - vec3<f32>(1.0, 1.0, 1.0));\n \n let n_x00 = mix(n000, n100, w.x);\n let n_x10 = mix(n010, n110, w.x);\n let n_y0 = mix(n_x00, n_x10, w.y);\n \n let n_x01 = mix(n001, n101, w.x);\n let n_x11 = mix(n011, n111, w.x);\n let n_y1 = mix(n_x01, n_x11, w.y);\n \n return mix(n_y0, n_y1, w.z) * 0.5 + 0.5; // Map to [0, 1]\n}\n\nfn simplex3d(v: vec3<f32>) -> f32 {\n let skew = (v.x + v.y + v.z) * (1.0 / 3.0);\n let i = floor(v + skew);\n let unskew = (i.x + i.y + i.z) * (1.0 / 6.0);\n let x0 = v - i + unskew;\n \n var i1 = vec3<f32>(0.0);\n var i2 = vec3<f32>(0.0);\n \n if (x0.x >= x0.y) {\n if (x0.y >= x0.z) {\n i1 = vec3<f32>(1.0, 0.0, 0.0);\n i2 = vec3<f32>(1.0, 1.0, 0.0);\n } else if (x0.x >= x0.z) {\n i1 = vec3<f32>(1.0, 0.0, 0.0);\n i2 = vec3<f32>(1.0, 0.0, 1.0);\n } else {\n i1 = vec3<f32>(0.0, 0.0, 1.0);\n i2 = vec3<f32>(1.0, 0.0, 1.0);\n }\n } else {\n if (x0.y < x0.z) {\n i1 = vec3<f32>(0.0, 0.0, 1.0);\n i2 = vec3<f32>(0.0, 1.0, 1.0);\n } else if (x0.x < x0.z) {\n i1 = vec3<f32>(0.0, 1.0, 0.0);\n i2 = vec3<f32>(0.0, 1.0, 1.0);\n } else {\n i1 = vec3<f32>(0.0, 1.0, 0.0);\n i2 = vec3<f32>(1.0, 1.0, 0.0);\n }\n }\n \n let x1 = x0 - i1 + (1.0 / 6.0);\n let x2 = x0 - i2 + (1.0 / 3.0);\n let x3 = x0 - 1.0 + 0.5;\n \n var m = vec4<f32>(\n dot(x0, x0),\n dot(x1, x1),\n dot(x2, x2),\n dot(x3, x3)\n );\n m = max(0.6 - m, vec4<f32>(0.0));\n m = m * m;\n m = m * m;\n \n let g0 = dot(hash3(i + vec3<f32>(0.0)), x0);\n let g1 = dot(hash3(i + i1), x1);\n let g2 = dot(hash3(i + i2), x2);\n let g3 = dot(hash3(i + vec3<f32>(1.0)), x3);\n \n let n = dot(m, vec4<f32>(g0, g1, g2, g3));\n return 32.0 * n * 0.5 + 0.5;\n}\n\nfn voronoi3d(p: vec3<f32>) -> f32 {\n let pi = floor(p);\n let pf = fract(p);\n var min_dist = 8.0;\n \n for (var k = -1; k <= 1; k++) {\n for (var j = -1; j <= 1; j++) {\n for (var i = -1; i <= 1; i++) {\n let g = vec3<f32>(f32(i), f32(j), f32(k));\n let o = hash3(pi + g) * 0.5 + 0.5;\n let r = g + o - pf;\n let d = dot(r, r);\n if (d < min_dist) {\n min_dist = d;\n }\n }\n }\n }\n return clamp(sqrt(min_dist), 0.0, 1.0);\n}\n\nfn fbm_perlin(p: vec3<f32>, octaves: i32, persistence: f32, lacunarity: f32) -> f32 {\n var value = 0.0;\n var amp = 1.0;\n var freq = 1.0;\n var total_amp = 0.0;\n for (var i = 0; i < 8; i++) {\n if (i >= octaves) { break; }\n value += amp * perlin3d(p * freq);\n total_amp += amp;\n freq *= lacunarity;\n amp *= persistence;\n }\n return value / total_amp;\n}\n\nfn fbm_simplex(p: vec3<f32>, octaves: i32, persistence: f32, lacunarity: f32) -> f32 {\n var value = 0.0;\n var amp = 1.0;\n var freq = 1.0;\n var total_amp = 0.0;\n for (var i = 0; i < 8; i++) {\n if (i >= octaves) { break; }\n value += amp * simplex3d(p * freq);\n total_amp += amp;\n freq *= lacunarity;\n amp *= persistence;\n }\n return value / total_amp;\n}\n\nfn fbm_voronoi(p: vec3<f32>, octaves: i32, persistence: f32, lacunarity: f32) -> f32 {\n var value = 0.0;\n var amp = 1.0;\n var freq = 1.0;\n var total_amp = 0.0;\n for (var i = 0; i < 8; i++) {\n if (i >= octaves) { break; }\n value += amp * voronoi3d(p * freq);\n total_amp += amp;\n freq *= lacunarity;\n amp *= persistence;\n }\n return value / total_amp;\n}\n\nfn get_field(val: f32, hasSig: f32, tex: texture_2d<f32>, samp: sampler, uv: vec2<f32>) -> f32 {\n if (hasSig > 0.5) {\n return textureSampleLevel(tex, samp, uv, 0.0).r;\n }\n return val;\n}\n\n@fragment fn fs(in : VSOut) -> @location(0) vec4<f32> {\n let scale = get_field(u.scale, u.hasSignal_scale, scaleTex, sigSamp, in.uv);\n let octaves_f = get_field(u.octaves, u.hasSignal_octaves, octavesTex, sigSamp, in.uv);\n let octaves = i32(clamp(octaves_f, 1.0, 8.0));\n let persistence = get_field(u.persistence, u.hasSignal_persistence, persistenceTex, sigSamp, in.uv);\n let lacunarity = get_field(u.lacunarity, u.hasSignal_lacunarity, lacunarityTex, sigSamp, in.uv);\n let speed = get_field(u.speed, u.hasSignal_speed, speedTex, sigSamp, in.uv);\n\n let isVideo = u.outputType > 0.5;\n let z_coord = select(0.0, u.time * speed, isVideo);\n \n let coord = vec3<f32>(in.uv * scale, z_coord);\n \n var n_val = 0.0;\n if (u.noiseType < 0.5) {\n n_val = fbm_perlin(coord, octaves, persistence, lacunarity);\n } else if (u.noiseType < 1.5) {\n n_val = fbm_simplex(coord, octaves, persistence, lacunarity);\n } else {\n n_val = fbm_voronoi(coord, octaves, persistence, lacunarity);\n }\n \n return mix(u.colorStart, u.colorEnd, clamp(n_val, 0.0, 1.0));\n}\n`;\nconst deviceResourceCache = /* @__PURE__ */ new WeakMap();\nconst noiseUniformData = new Float32Array(24);\nfunction getDeviceLayouts(device) {\n\tlet res = deviceResourceCache.get(device);\n\tif (res) return res;\n\tres = {\n\t\tuniformLayout: device.createBindGroupLayout({ entries: [{\n\t\t\tbinding: 0,\n\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\tbuffer: { type: \"uniform\" }\n\t\t}] }),\n\t\tsignalsLayout: device.createBindGroupLayout({ entries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 4,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\ttexture: { sampleType: \"float\" }\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 5,\n\t\t\t\tvisibility: GPUShaderStage.FRAGMENT,\n\t\t\t\tsampler: { type: \"filtering\" }\n\t\t\t}\n\t\t] }),\n\t\tpipelineCache: /* @__PURE__ */ new Map()\n\t};\n\tdeviceResourceCache.set(device, res);\n\treturn res;\n}\nfunction getNoiseResources(device, format) {\n\tconst layouts = getDeviceLayouts(device);\n\tconst cacheKey = `noise_${format}`;\n\tlet pipeline = layouts.pipelineCache.get(cacheKey);\n\tif (!pipeline) {\n\t\tconst noiseModule = device.createShaderModule({\n\t\t\tlabel: `noise_${format}.wgsl`,\n\t\t\tcode: NOISE_SHADER\n\t\t});\n\t\tpipeline = device.createRenderPipeline({\n\t\t\tlabel: `NoiseGeneratorPipeline_${format}`,\n\t\t\tlayout: device.createPipelineLayout({ bindGroupLayouts: [layouts.uniformLayout, layouts.signalsLayout] }),\n\t\t\tvertex: {\n\t\t\t\tmodule: noiseModule,\n\t\t\t\tentryPoint: \"vs\"\n\t\t\t},\n\t\t\tfragment: {\n\t\t\t\tmodule: noiseModule,\n\t\t\t\tentryPoint: \"fs\",\n\t\t\t\ttargets: [{ format }]\n\t\t\t},\n\t\t\tprimitive: { topology: \"triangle-strip\" }\n\t\t});\n\t\tlayouts.pipelineCache.set(cacheKey, pipeline);\n\t}\n\treturn {\n\t\tnoisePipeline: pipeline,\n\t\tuniformLayout: layouts.uniformLayout,\n\t\tsignalsLayout: layouts.signalsLayout\n\t};\n}\nfunction hexToRgba(hex) {\n\tlet h = hex.replace(\"#\", \"\");\n\tif (h.length === 3 || h.length === 4) h = h.split(\"\").map((c) => c + c).join(\"\");\n\tconst r = parseInt(h.substring(0, 2), 16) / 255;\n\tconst g = parseInt(h.substring(2, 4), 16) / 255;\n\tconst b = parseInt(h.substring(4, 6), 16) / 255;\n\tlet a = 1;\n\tif (h.length === 8) a = parseInt(h.substring(6, 8), 16) / 255;\n\treturn [\n\t\tr,\n\t\tg,\n\t\tb,\n\t\ta\n\t];\n}\nfunction resolveNoiseField(op, fieldName, defaultValue) {\n\tconst handleId = op[`${fieldName}HandleId`];\n\tconst signalInput = handleId ? op.inputs?.[handleId] : null;\n\tconst hasSignal = !!(signalInput?.connectionValid && (signalInput.outputItem?.type === \"Signal\" || signalInput.outputItem?.type === \"Numeric\"));\n\tconst sd = hasSignal ? signalInput?.outputItem?.data : null;\n\tlet value = defaultValue;\n\tif (!hasSignal) if (signalInput?.connectionValid && signalInput.outputItem?.type === \"Number\") value = Number(signalInput.outputItem.data ?? defaultValue);\n\telse value = Number(op[fieldName] ?? defaultValue);\n\telse if (sd && typeof sd === \"object\" && \"offset\" in sd) value = Number(sd.offset ?? defaultValue);\n\treturn {\n\t\thasSignal,\n\t\tsd,\n\t\tvalue\n\t};\n}\nconst NoiseWebGPURenderer = async (args) => {\n\tconst { ctx, encoder, pass, targetWidth, targetHeight, props } = args;\n\tconst op = props.virtualMedia?.operation;\n\tif (op?.op !== \"NoiseGenerator\" || !op) return;\n\tconst { noisePipeline: pipeline, uniformLayout: uLayout, signalsLayout: sigLayout } = getNoiseResources(ctx.device, ctx.renderer.format);\n\tconst frame = props.frame ?? 0;\n\tconst fps = props.fps || 30;\n\tconst scaleInfo = resolveNoiseField(op, \"scale\", 10);\n\tconst octavesInfo = resolveNoiseField(op, \"octaves\", 4);\n\tconst persistenceInfo = resolveNoiseField(op, \"persistence\", .5);\n\tconst lacunarityInfo = resolveNoiseField(op, \"lacunarity\", 2);\n\tconst speedInfo = resolveNoiseField(op, \"speed\", 1);\n\tconst noiseTypeVal = op.noiseType === \"Simplex\" ? 1 : op.noiseType === \"Voronoi\" ? 2 : 0;\n\tconst outputTypeVal = op.outputType === \"Video\" ? 1 : 0;\n\tconst elapsedSeconds = props.elapsedMs !== void 0 ? props.elapsedMs / 1e3 : frame / fps;\n\tconst durationSeconds = props.virtualMedia?.metadata?.durationMs ? props.virtualMedia.metadata.durationMs / 1e3 : props.durationMs !== void 0 ? props.durationMs / 1e3 : 0;\n\tconst colorStartVal = hexToRgba(op.colorStart ?? \"#000000\");\n\tconst colorEndVal = hexToRgba(op.colorEnd ?? \"#ffffff\");\n\tnoiseUniformData[0] = noiseTypeVal;\n\tnoiseUniformData[1] = outputTypeVal;\n\tnoiseUniformData[2] = elapsedSeconds;\n\tnoiseUniformData[3] = 0;\n\tnoiseUniformData[4] = scaleInfo.value;\n\tnoiseUniformData[5] = octavesInfo.value;\n\tnoiseUniformData[6] = persistenceInfo.value;\n\tnoiseUniformData[7] = lacunarityInfo.value;\n\tnoiseUniformData[8] = speedInfo.value;\n\tnoiseUniformData[9] = scaleInfo.hasSignal ? 1 : 0;\n\tnoiseUniformData[10] = octavesInfo.hasSignal ? 1 : 0;\n\tnoiseUniformData[11] = persistenceInfo.hasSignal ? 1 : 0;\n\tnoiseUniformData[12] = lacunarityInfo.hasSignal ? 1 : 0;\n\tnoiseUniformData[13] = speedInfo.hasSignal ? 1 : 0;\n\tnoiseUniformData[14] = 0;\n\tnoiseUniformData[15] = 0;\n\tnoiseUniformData[16] = colorStartVal[0];\n\tnoiseUniformData[17] = colorStartVal[1];\n\tnoiseUniformData[18] = colorStartVal[2];\n\tnoiseUniformData[19] = colorStartVal[3];\n\tnoiseUniformData[20] = colorEndVal[0];\n\tnoiseUniformData[21] = colorEndVal[1];\n\tnoiseUniformData[22] = colorEndVal[2];\n\tnoiseUniformData[23] = colorEndVal[3];\n\tconst uniformBuffer = ctx.renderer.getTemporaryBuffer(noiseUniformData);\n\tconst signalFields = [\n\t\t{\n\t\t\tname: \"scale\",\n\t\t\tinfo: scaleInfo\n\t\t},\n\t\t{\n\t\t\tname: \"octaves\",\n\t\t\tinfo: octavesInfo\n\t\t},\n\t\t{\n\t\t\tname: \"persistence\",\n\t\t\tinfo: persistenceInfo\n\t\t},\n\t\t{\n\t\t\tname: \"lacunarity\",\n\t\t\tinfo: lacunarityInfo\n\t\t},\n\t\t{\n\t\t\tname: \"speed\",\n\t\t\tinfo: speedInfo\n\t\t}\n\t];\n\tconst signalViews = [];\n\tconst sampler = ctx.renderer.samplerCache.getSampler(ctx.device);\n\tfor (const f of signalFields) if (!!(f.info.hasSignal && f.info.sd)) {\n\t\tconst view = signalRegistry.getOrCreate2DTextureView(ctx.device, encoder, f.info.sd.nodeId ?? `noise_${f.name}_sig`, elapsedSeconds, durationSeconds, f.info.sd, targetWidth, targetHeight, props.renderId, frame, fps);\n\t\tsignalViews.push(view);\n\t} else signalViews.push(signalRegistry.getDummy1x1TextureView(ctx.device));\n\tpass.setPipeline(pipeline);\n\tpass.setBindGroup(0, ctx.device.createBindGroup({\n\t\tlayout: uLayout,\n\t\tentries: [{\n\t\t\tbinding: 0,\n\t\t\tresource: { buffer: uniformBuffer }\n\t\t}]\n\t}));\n\tpass.setBindGroup(1, ctx.device.createBindGroup({\n\t\tlayout: sigLayout,\n\t\tentries: [\n\t\t\t{\n\t\t\t\tbinding: 0,\n\t\t\t\tresource: signalViews[0]\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 1,\n\t\t\t\tresource: signalViews[1]\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 2,\n\t\t\t\tresource: persistenceInfo.hasSignal ? signalViews[2] : signalViews[2]\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 3,\n\t\t\t\tresource: signalViews[3]\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 4,\n\t\t\t\tresource: signalViews[4]\n\t\t\t},\n\t\t\t{\n\t\t\t\tbinding: 5,\n\t\t\t\tresource: sampler\n\t\t\t}\n\t\t]\n\t}));\n\tpass.draw(4);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ WebGPURenderer: NoiseWebGPURenderer });\n\n//#endregion\nexport { NoiseWebGPURenderer as n, renderers_default as t };\n//# sourceMappingURL=renderers-D0MBBQTB.mjs.map"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Jt as resolveNumber, Xt as resolveString } from "./dist-CbG3QxDw.mjs";
|
|
2
2
|
import { n as defineRenderer } from "./renderer-CtVkU_GA.mjs";
|
|
3
|
-
import { i as AudioSignalComputePipeline, nt as
|
|
3
|
+
import { i as AudioSignalComputePipeline, nt as shaderStore, rt as signalRegistry } from "./dist-Cxi68OuY.mjs";
|
|
4
4
|
|
|
5
5
|
//#region ../../nodes/node-audio-signal-extractor/dist/renderers-CP8CFWDs.mjs
|
|
6
6
|
const audioSignalExtractorAudioProcessor = async (channels, sampleRate, virtualMedia, ctx) => {
|
|
@@ -49,4 +49,4 @@ var renderers_default = defineRenderer({ audioProcessor: audioSignalExtractorAud
|
|
|
49
49
|
|
|
50
50
|
//#endregion
|
|
51
51
|
export { renderers_default as t };
|
|
52
|
-
//# sourceMappingURL=renderers-CP8CFWDs-
|
|
52
|
+
//# sourceMappingURL=renderers-CP8CFWDs-DwQTx8S7.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderers-CP8CFWDs-
|
|
1
|
+
{"version":3,"file":"renderers-CP8CFWDs-DwQTx8S7.mjs","names":[],"sources":["../../../nodes/node-audio-signal-extractor/dist/renderers-CP8CFWDs.mjs"],"sourcesContent":["import { defineRenderer } from \"@framefields/node-sdk/renderer\";\nimport { resolveNumber, resolveString } from \"@framefields/node-sdk\";\nimport { AudioSignalComputePipeline, shaderStore, signalRegistry } from \"@framefields/webgpu-renderers\";\n\n//#region src/renderers/audio-processor.ts\nconst audioSignalExtractorAudioProcessor = async (channels, sampleRate, virtualMedia, ctx) => {\n\tif (!ctx?.device) return;\n\tif (!channels || channels.length === 0 || channels[0].length === 0) return;\n\tconst op = virtualMedia.operation || {};\n\tconst nodeId = op.nodeId || op.id || \"audio-signal-extractor\";\n\tconst fps = ctx.fps ?? 24;\n\tconst mode = resolveString(op.extractionMode, \"\");\n\tconst curveStr = resolveString(op.curve, \"\");\n\tconst config = {\n\t\textractionMode: mode || void 0,\n\t\tattackMs: resolveNumber(op.attackMs, 10),\n\t\treleaseMs: resolveNumber(op.releaseMs, 120),\n\t\tsensitivity: resolveNumber(op.sensitivity, 1),\n\t\tnoiseFloorDb: resolveNumber(op.noiseFloorDb, -45),\n\t\tdynamicRangeDb: resolveNumber(op.dynamicRangeDb, 36),\n\t\tsmoothing: resolveNumber(op.smoothing, .15),\n\t\tcurve: curveStr || void 0,\n\t\tbeatThreshold: resolveNumber(op.beatThreshold, .55),\n\t\tbeatDecayMs: resolveNumber(op.beatDecayMs, 80)\n\t};\n\tconst signals = await AudioSignalComputePipeline.extractFeatures(ctx.device, channels, sampleRate, fps, config, 512);\n\tsignalRegistry.registerBuffer(ctx.device, nodeId, signals.primaryBuffer, ctx.renderId);\n\tsignalRegistry.registerBuffer(ctx.device, `${nodeId}_beat`, signals.beatBuffer, ctx.renderId);\n\tsignalRegistry.registerBuffer(ctx.device, `${nodeId}_bass`, signals.bassBuffer, ctx.renderId);\n\tsignalRegistry.registerBuffer(ctx.device, `${nodeId}_energy`, signals.energyBuffer, ctx.renderId);\n\tsignalRegistry.registerTexture(ctx.device, nodeId, signals.texture, signals.textureView, ctx.renderId);\n\tsignalRegistry.registerTexture(ctx.device, `${nodeId}_beat`, signals.texture, signals.textureView, ctx.renderId);\n\tsignalRegistry.registerTexture(ctx.device, `${nodeId}_bass`, signals.texture, signals.textureView, ctx.renderId);\n\tsignalRegistry.registerTexture(ctx.device, `${nodeId}_energy`, signals.texture, signals.textureView, ctx.renderId);\n\tconst fnName = `signal_${nodeId.replace(/[^a-zA-Z0-9]/g, \"_\")}`;\n\tconst wgsl = `\nfn ${fnName}(t: f32, x: f32, y: f32, z: f32, i: u32, n: u32, frame: u32, color: vec4f, t_elapsed: f32, duration: f32) -> f32 {\n return 0.0f;\n}\n`;\n\tshaderStore.register(nodeId, {\n\t\twgsl,\n\t\tname: fnName,\n\t\toutputType: \"f32\",\n\t\tfnParams: []\n\t}, ctx.renderId);\n};\n\n//#endregion\n//#region src/renderers/index.ts\nvar renderers_default = defineRenderer({ audioProcessor: audioSignalExtractorAudioProcessor });\n\n//#endregion\nexport { renderers_default as t };\n//# sourceMappingURL=renderers-CP8CFWDs.mjs.map"],"mappings":";;;;;AAKA,MAAM,qCAAqC,OAAO,UAAU,YAAY,cAAc,QAAQ;AAC7F,KAAI,CAAC,KAAK,OAAQ;AAClB,KAAI,CAAC,YAAY,SAAS,WAAW,KAAK,SAAS,GAAG,WAAW,EAAG;CACpE,MAAM,KAAK,aAAa,aAAa,EAAE;CACvC,MAAM,SAAS,GAAG,UAAU,GAAG,MAAM;CACrC,MAAM,MAAM,IAAI,OAAO;CACvB,MAAM,OAAO,cAAc,GAAG,gBAAgB,GAAG;CACjD,MAAM,WAAW,cAAc,GAAG,OAAO,GAAG;CAC5C,MAAM,SAAS;EACd,gBAAgB,QAAQ,KAAK;EAC7B,UAAU,cAAc,GAAG,UAAU,GAAG;EACxC,WAAW,cAAc,GAAG,WAAW,IAAI;EAC3C,aAAa,cAAc,GAAG,aAAa,EAAE;EAC7C,cAAc,cAAc,GAAG,cAAc,IAAI;EACjD,gBAAgB,cAAc,GAAG,gBAAgB,GAAG;EACpD,WAAW,cAAc,GAAG,WAAW,IAAI;EAC3C,OAAO,YAAY,KAAK;EACxB,eAAe,cAAc,GAAG,eAAe,IAAI;EACnD,aAAa,cAAc,GAAG,aAAa,GAAG;EAC9C;CACD,MAAM,UAAU,MAAM,2BAA2B,gBAAgB,IAAI,QAAQ,UAAU,YAAY,KAAK,QAAQ,IAAI;AACpH,gBAAe,eAAe,IAAI,QAAQ,QAAQ,QAAQ,eAAe,IAAI,SAAS;AACtF,gBAAe,eAAe,IAAI,QAAQ,GAAG,OAAO,QAAQ,QAAQ,YAAY,IAAI,SAAS;AAC7F,gBAAe,eAAe,IAAI,QAAQ,GAAG,OAAO,QAAQ,QAAQ,YAAY,IAAI,SAAS;AAC7F,gBAAe,eAAe,IAAI,QAAQ,GAAG,OAAO,UAAU,QAAQ,cAAc,IAAI,SAAS;AACjG,gBAAe,gBAAgB,IAAI,QAAQ,QAAQ,QAAQ,SAAS,QAAQ,aAAa,IAAI,SAAS;AACtG,gBAAe,gBAAgB,IAAI,QAAQ,GAAG,OAAO,QAAQ,QAAQ,SAAS,QAAQ,aAAa,IAAI,SAAS;AAChH,gBAAe,gBAAgB,IAAI,QAAQ,GAAG,OAAO,QAAQ,QAAQ,SAAS,QAAQ,aAAa,IAAI,SAAS;AAChH,gBAAe,gBAAgB,IAAI,QAAQ,GAAG,OAAO,UAAU,QAAQ,SAAS,QAAQ,aAAa,IAAI,SAAS;CAClH,MAAM,SAAS,UAAU,OAAO,QAAQ,iBAAiB,IAAI;CAC7D,MAAM,OAAO;KACT,OAAO;;;;AAIX,aAAY,SAAS,QAAQ;EAC5B;EACA,MAAM;EACN,YAAY;EACZ,UAAU,EAAE;EACZ,EAAE,IAAI,SAAS;;AAKjB,IAAI,oBAAoB,eAAe,EAAE,gBAAgB,oCAAoC,CAAC"}
|
package/dist/signals/index.d.mts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import "../chunk-GMkBE123.mjs";
|
|
2
|
-
import {
|
|
3
|
-
import "../index-
|
|
4
|
-
import "../renderer-
|
|
5
|
-
import { i as _default, n as AudioSignalOptions, r as ExtractedAudioSignalsBundle, t as AudioSignal } from "../audio-
|
|
6
|
-
import { i as index_d_exports, n as index_d_exports$1, r as index_d_exports$3, t as index_d_exports$2 } from "../index-
|
|
2
|
+
import { Fi as sineSignal, Gn as Signal, Gr as computed, Kr as cosineSignal, M as SignalRegistryResource, Ni as signal, Pi as signalBuilder, R as buildWGSLSignalFn, Wt as FrameSignal, X as signalRegistry, Yn as SignalContext, ar as SineSignalOptions, ir as SignalValue, j as SignalRegistry, s as AudioSignalComputePipeline, v as MasterAudioEntry } from "../index-DDEPvMww.mjs";
|
|
3
|
+
import "../index-9B8CJowc.mjs";
|
|
4
|
+
import "../renderer-BTdOMMEx.mjs";
|
|
5
|
+
import { i as _default, n as AudioSignalOptions, r as ExtractedAudioSignalsBundle, t as AudioSignal } from "../audio-BHanw8Jb.mjs";
|
|
6
|
+
import { i as index_d_exports, n as index_d_exports$1, r as index_d_exports$3, t as index_d_exports$2 } from "../index-DGJp1d30.mjs";
|
|
7
7
|
export { AudioSignal, AudioSignalComputePipeline, index_d_exports as AudioSignalExtractorNode, AudioSignalOptions, ExtractedAudioSignalsBundle, FrameSignal, MasterAudioEntry, Signal, SignalContext, index_d_exports$1 as SignalGateNode, index_d_exports$2 as SignalMathNode, index_d_exports$3 as SignalNode, SignalRegistry, SignalRegistryResource, SignalValue, SineSignalOptions, buildWGSLSignalFn, computed, cosineSignal, _default as modulateRenderer, signal, signalBuilder, signalRegistry, sineSignal };
|
package/dist/signals/index.mjs
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import "../chunk-GMkBE123.mjs";
|
|
2
|
-
import {
|
|
3
|
-
import { i as AudioSignalComputePipeline,
|
|
4
|
-
import "../renderers-CP8CFWDs-
|
|
5
|
-
import { i as dist_exports, n as dist_exports$1, r as dist_exports$3, t as dist_exports$2 } from "../signals-
|
|
6
|
-
import { t as renderers_default } from "../renderer-
|
|
2
|
+
import { H as Signal, en as signal, ft as computed, nn as sineSignal, pt as cosineSignal, tn as signalBuilder } from "../dist-CbG3QxDw.mjs";
|
|
3
|
+
import { i as AudioSignalComputePipeline, rt as signalRegistry, v as SignalRegistry, w as buildWGSLSignalFn } from "../dist-Cxi68OuY.mjs";
|
|
4
|
+
import "../renderers-CP8CFWDs-DwQTx8S7.mjs";
|
|
5
|
+
import { i as dist_exports, n as dist_exports$1, r as dist_exports$3, t as dist_exports$2 } from "../signals-Bv1OweKd.mjs";
|
|
6
|
+
import { t as renderers_default } from "../renderer-CaaOKMSd.mjs";
|
|
7
7
|
import "../renderer-bZU_ndxf.mjs";
|
|
8
|
-
import { t as AudioSignal } from "../audio-
|
|
8
|
+
import { t as AudioSignal } from "../audio-COOMNwL5.mjs";
|
|
9
9
|
|
|
10
10
|
export { AudioSignal, AudioSignalComputePipeline, dist_exports as AudioSignalExtractorNode, Signal, dist_exports$1 as SignalGateNode, dist_exports$2 as SignalMathNode, dist_exports$3 as SignalNode, SignalRegistry, buildWGSLSignalFn, computed, cosineSignal, renderers_default as modulateRenderer, signal, signalBuilder, signalRegistry, sineSignal };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { r as __exportAll } from "./chunk-GMkBE123.mjs";
|
|
2
|
-
import {
|
|
3
|
-
import { r as SignalResultSchema } from "./dist-
|
|
2
|
+
import { I as MultiOutputGenericSchema, W as SignalDataSchema, mt as createOutputItemSchema } from "./dist-CbG3QxDw.mjs";
|
|
3
|
+
import { r as SignalResultSchema } from "./dist-BYqNNwsl.mjs";
|
|
4
4
|
import { z } from "zod";
|
|
5
5
|
|
|
6
6
|
//#region ../../nodes/node-audio-signal-extractor/dist/index.mjs
|
|
@@ -221,4 +221,4 @@ const SignalMathResultSchema = MultiOutputGenericSchema(createOutputItemSchema(z
|
|
|
221
221
|
|
|
222
222
|
//#endregion
|
|
223
223
|
export { dist_exports$3 as i, dist_exports$1 as n, dist_exports$2 as r, dist_exports as t };
|
|
224
|
-
//# sourceMappingURL=signals-
|
|
224
|
+
//# sourceMappingURL=signals-Bv1OweKd.mjs.map
|