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
|
@@ -1848,7 +1848,157 @@ declare const TransitionSchema: z.ZodObject<{
|
|
|
1848
1848
|
durationFrames: z.ZodNumber;
|
|
1849
1849
|
}, z.core.$strip>;
|
|
1850
1850
|
type TransitionType = z.infer<typeof TransitionTypeSchema>;
|
|
1851
|
-
|
|
1851
|
+
//#endregion
|
|
1852
|
+
//#region src/utils/color.d.ts
|
|
1853
|
+
/**
|
|
1854
|
+
* CSS color parsing, perceptual mixing and authoring helpers, shared by the
|
|
1855
|
+
* schema evaluator (color tracks), the GPU renderers (fills) and the public
|
|
1856
|
+
* `Color` helper. Pure and dependency-free.
|
|
1857
|
+
*
|
|
1858
|
+
* Every helper returns a CSS string any color prop accepts: `#rrggbb`, or
|
|
1859
|
+
* `#rrggbbaa` when not fully opaque.
|
|
1860
|
+
*/
|
|
1861
|
+
/** Straight (non-premultiplied) sRGB, each channel 0..1. */
|
|
1862
|
+
type Rgba = [r: number, g: number, b: number, a: number];
|
|
1863
|
+
/** sRGB (0..1) → OKLab [L, a, b]. */
|
|
1864
|
+
declare function rgbToOklab(r: number, g: number, b: number): [number, number, number];
|
|
1865
|
+
/** OKLab → sRGB (0..1, clamped to gamut). */
|
|
1866
|
+
declare function oklabToRgb(L: number, a: number, b: number): [number, number, number];
|
|
1867
|
+
/**
|
|
1868
|
+
* Parses any CSS color this engine accepts: hex (3/4/6/8), `rgb()`/`rgba()`,
|
|
1869
|
+
* `hsl()`/`hsla()`, `oklch()`, `oklab()` (comma or space syntax, `/ alpha`)
|
|
1870
|
+
* and common named colors. Returns `null` when the string is not a color.
|
|
1871
|
+
*/
|
|
1872
|
+
declare function parseCssColor(input: string): Rgba | null;
|
|
1873
|
+
/** Formats straight sRGB as `#rrggbb` (or `#rrggbbaa` when translucent). */
|
|
1874
|
+
declare function formatHex([r, g, b, a]: Rgba): string;
|
|
1875
|
+
/**
|
|
1876
|
+
* Mixes two colors perceptually (in OKLab), `t` = 0 → `a`, 1 → `b`.
|
|
1877
|
+
* Midpoints keep their lightness and saturation instead of going muddy
|
|
1878
|
+
* the way a plain sRGB lerp does.
|
|
1879
|
+
*/
|
|
1880
|
+
declare function mixColors(a: string, b: string, t: number): string;
|
|
1881
|
+
interface ColorStopLike {
|
|
1882
|
+
offset: number;
|
|
1883
|
+
color: string;
|
|
1884
|
+
}
|
|
1885
|
+
/** Samples a multi-stop gradient (stops in any order) at `t` ∈ [0, 1]. */
|
|
1886
|
+
declare function sampleColorStops(stops: readonly (string | ColorStopLike)[], t: number): string;
|
|
1887
|
+
/** Bare color strings become evenly spaced stops; result is sorted by offset. */
|
|
1888
|
+
declare function normalizeColorStops(stops: readonly (string | ColorStopLike)[]): ColorStopLike[];
|
|
1889
|
+
/**
|
|
1890
|
+
* Authoring helpers for colors. Every function returns a hex string, so the
|
|
1891
|
+
* result drops straight into any color prop or keyframe.
|
|
1892
|
+
*
|
|
1893
|
+
* ```ts
|
|
1894
|
+
* Color.oklch(0.7, 0.15, 250) // perceptual: equal L reads equally bright
|
|
1895
|
+
* Color.hsl(212, 0.95, 0.74)
|
|
1896
|
+
* Color.mix("#ff5a1f", "#1f6bff", 0.5) // OKLab, no muddy midpoint
|
|
1897
|
+
* const wave = Color.ramp(["#3b82f6", "#8b5cf6", "#ec4899"]);
|
|
1898
|
+
* wave(0.5) // sample a gradient
|
|
1899
|
+
* Color.lighten("#ff5a1f", 0.1), Color.alpha("#000", 0.4)
|
|
1900
|
+
* ```
|
|
1901
|
+
*/
|
|
1902
|
+
declare const Color$1: {
|
|
1903
|
+
/** Parses any supported CSS color to straight sRGB 0..1, or null. */
|
|
1904
|
+
readonly parse: typeof parseCssColor;
|
|
1905
|
+
/** Normalizes any supported CSS color to hex. */
|
|
1906
|
+
readonly hex: (c: string) => string;
|
|
1907
|
+
/** `r, g, b` in 0..255, `a` in 0..1. */
|
|
1908
|
+
readonly rgb: (r: number, g: number, b: number, a?: number) => string;
|
|
1909
|
+
/** Hue in degrees; saturation and lightness in 0..1. */
|
|
1910
|
+
readonly hsl: (h: number, s: number, l: number, a?: number) => string;
|
|
1911
|
+
/**
|
|
1912
|
+
* Perceptual lightness 0..1, chroma ~0..0.37, hue in degrees. Colors with
|
|
1913
|
+
* the same `l` look equally bright, which makes balanced palettes easy.
|
|
1914
|
+
*/
|
|
1915
|
+
readonly oklch: (l: number, c: number, h: number, a?: number) => string;
|
|
1916
|
+
/** Perceptual (OKLab) mix; `t` = 0 → `a`, 1 → `b`. */
|
|
1917
|
+
readonly mix: typeof mixColors;
|
|
1918
|
+
/** A gradient sampler: `Color.ramp(["#f00", "#00f"])(0.25)`. */
|
|
1919
|
+
readonly ramp: (stops: readonly (string | ColorStopLike)[]) => (t: number) => string;
|
|
1920
|
+
/** `n` evenly spaced swatches along a gradient. */
|
|
1921
|
+
readonly steps: (stops: readonly (string | ColorStopLike)[], n: number) => string[];
|
|
1922
|
+
/** Raises perceptual lightness by `amount` (0..1). */
|
|
1923
|
+
readonly lighten: (c: string, amount: number) => string;
|
|
1924
|
+
readonly darken: (c: string, amount: number) => string;
|
|
1925
|
+
/** Scales chroma: 0 = grey, 1 = unchanged, >1 = more vivid. */
|
|
1926
|
+
readonly saturate: (c: string, factor: number) => string;
|
|
1927
|
+
/** Rotates hue by `degrees`, keeping perceptual lightness. */
|
|
1928
|
+
readonly rotate: (c: string, degrees: number) => string;
|
|
1929
|
+
/** Replaces alpha. */
|
|
1930
|
+
readonly alpha: (c: string, a: number) => string;
|
|
1931
|
+
/** WCAG relative-luminance contrast ratio (1..21). ≥ 4.5 for body text. */
|
|
1932
|
+
readonly contrast: (a: string, b: string) => number;
|
|
1933
|
+
/** Black or white, whichever reads better on `background`. */
|
|
1934
|
+
readonly readableOn: (background: string) => string;
|
|
1935
|
+
};
|
|
1936
|
+
//#endregion
|
|
1937
|
+
//#region src/utils/gradient.d.ts
|
|
1938
|
+
type GradientType = "linear" | "radial" | "conic";
|
|
1939
|
+
interface ParsedGradientStop {
|
|
1940
|
+
/** 0..1 along the gradient line / radius / turn. */
|
|
1941
|
+
offset: number;
|
|
1942
|
+
/** Straight sRGB 0..1. */
|
|
1943
|
+
color: Rgba;
|
|
1944
|
+
}
|
|
1945
|
+
interface ParsedGradient {
|
|
1946
|
+
type: GradientType;
|
|
1947
|
+
/** Linear: CSS angle in degrees (0 = to top, 90 = to right, 180 = to bottom). */
|
|
1948
|
+
angle: number;
|
|
1949
|
+
/** Radial / conic center as a fraction of the box (0.5, 0.5 = middle). */
|
|
1950
|
+
center: [number, number];
|
|
1951
|
+
/** Radial: circle or ellipse sized to the farthest corner, or explicit px radii. */
|
|
1952
|
+
shape: "circle" | "ellipse";
|
|
1953
|
+
radius?: [number, number];
|
|
1954
|
+
/** Conic: start angle in degrees (0 = top, clockwise). */
|
|
1955
|
+
from: number;
|
|
1956
|
+
stops: ParsedGradientStop[];
|
|
1957
|
+
}
|
|
1958
|
+
/** Gradients this renderer draws at most this many stops (extra ones are resampled). */
|
|
1959
|
+
declare const MAX_GRADIENT_STOPS = 8;
|
|
1960
|
+
declare function isCssGradient(value: unknown): value is string;
|
|
1961
|
+
/** Parses a CSS gradient string; `null` when it is not one this engine draws. */
|
|
1962
|
+
declare function parseCssGradient(input: string): ParsedGradient | null;
|
|
1963
|
+
/** Up to MAX_GRADIENT_STOPS stops: longer lists are resampled evenly. */
|
|
1964
|
+
declare function limitGradientStops(stops: ParsedGradientStop[]): ParsedGradientStop[];
|
|
1965
|
+
/**
|
|
1966
|
+
* Stops as OKLab + alpha for the GPU. A transparent stop borrows its
|
|
1967
|
+
* neighbor's color, so fading to `transparent` keeps the hue instead of
|
|
1968
|
+
* passing through grey (CSS premultiplied interpolation does the same).
|
|
1969
|
+
*/
|
|
1970
|
+
declare function gradientStopsToOklab(stops: ParsedGradientStop[]): Array<[number, number, number, number]>;
|
|
1971
|
+
type StopInput = string | {
|
|
1972
|
+
color: string;
|
|
1973
|
+
offset: number;
|
|
1974
|
+
};
|
|
1975
|
+
/**
|
|
1976
|
+
* Writes CSS gradient strings for `background` / `fill`:
|
|
1977
|
+
*
|
|
1978
|
+
* ```ts
|
|
1979
|
+
* Layer.box({ background: Gradient.linear(["#ff5a1f", "#7c3aed"], 135) })
|
|
1980
|
+
* Layer.shape("circle", { fill: Gradient.radial(["#fff", "transparent"]) })
|
|
1981
|
+
* Gradient.conic(["red", "yellow", "lime", "aqua", "blue", "magenta", "red"])
|
|
1982
|
+
* ```
|
|
1983
|
+
* Plain strings work too: `"linear-gradient(to right, #000, #fff 80%)"`.
|
|
1984
|
+
*/
|
|
1985
|
+
declare const Gradient: {
|
|
1986
|
+
/** `angle` in degrees: 0 = bottom→top, 90 = left→right, 180 = top→bottom (default). */
|
|
1987
|
+
readonly linear: (stops: readonly StopInput[], angle?: number) => string;
|
|
1988
|
+
/** Ellipse to the farthest corner, centered unless `at` ([0..1, 0..1]) says otherwise. */
|
|
1989
|
+
readonly radial: (stops: readonly StopInput[], options?: {
|
|
1990
|
+
at?: [number, number];
|
|
1991
|
+
circle?: boolean;
|
|
1992
|
+
radius?: number;
|
|
1993
|
+
}) => string;
|
|
1994
|
+
/** A sweep around `at`, starting at `from` degrees (0 = top, clockwise). */
|
|
1995
|
+
readonly conic: (stops: readonly StopInput[], options?: {
|
|
1996
|
+
from?: number;
|
|
1997
|
+
at?: [number, number];
|
|
1998
|
+
}) => string;
|
|
1999
|
+
readonly parse: typeof parseCssGradient;
|
|
2000
|
+
readonly is: typeof isCssGradient;
|
|
2001
|
+
};
|
|
1852
2002
|
//#endregion
|
|
1853
2003
|
//#region src/utils/is-equal.d.ts
|
|
1854
2004
|
/**
|
|
@@ -2205,6 +2355,7 @@ declare class QuadPipeline {
|
|
|
2205
2355
|
type ShapeFillType = "solid" | "linear" | "radial" | "none";
|
|
2206
2356
|
interface ShapeFillConfig {
|
|
2207
2357
|
type?: ShapeFillType;
|
|
2358
|
+
/** A color, or a CSS gradient string (linear/radial/conic, any stops) laid over the shape's bounds. */
|
|
2208
2359
|
color?: Color | string;
|
|
2209
2360
|
color2?: Color | string;
|
|
2210
2361
|
startX?: number;
|
|
@@ -2225,6 +2376,8 @@ declare class ShapeFillPipeline {
|
|
|
2225
2376
|
constructor(device: GPUDevice, format: GPUTextureFormat);
|
|
2226
2377
|
resetPools(): void;
|
|
2227
2378
|
draw(pass: GPURenderPassEncoder, transformStack: TransformStack, vertices: Float32Array, fill: ShapeFillConfig, bounds: Rect, surfaceWidth: number, surfaceHeight: number, opts?: DrawOpts): void;
|
|
2379
|
+
/** The `type: "linear" | "radial"` two-color fill (color → color2). */
|
|
2380
|
+
private packTwoColorGradient;
|
|
2228
2381
|
destroy(): void;
|
|
2229
2382
|
}
|
|
2230
2383
|
//#endregion
|
|
@@ -2262,7 +2415,9 @@ interface Color {
|
|
|
2262
2415
|
b: number;
|
|
2263
2416
|
a: number;
|
|
2264
2417
|
}
|
|
2265
|
-
type BlendMode = "normal" | "multiply" | "screen" | "overlay" | "darken" | "lighten" | "color-dodge" | "color-burn" | "hard-light" | "soft-light" | "difference" | "exclusion" | "hue" | "saturation" | "color" | "luminosity" | "mask-in" | "mask-out" | "source-over" | "source-in" | "source-out" | "source-atop" | "destination-over" | "destination-in" | "destination-out" | "destination-atop" | "lighter" | "copy" | "xor"
|
|
2418
|
+
type BlendMode = "normal" | "multiply" | "screen" | "overlay" | "darken" | "lighten" | "color-dodge" | "color-burn" | "hard-light" | "soft-light" | "difference" | "exclusion" | "hue" | "saturation" | "color" | "luminosity" | "mask-in" | "mask-out" | "source-over" | "source-in" | "source-out" | "source-atop" | "destination-over" | "destination-in" | "destination-out" | "destination-atop" | "lighter" | "copy" | "xor"
|
|
2419
|
+
/** Keeps the base where the overlay is bright (luma matte). */ | "luma-in"
|
|
2420
|
+
/** Keeps the base where the overlay is dark (inverted luma matte). */ | "luma-out";
|
|
2266
2421
|
interface DrawOpts {
|
|
2267
2422
|
opacity?: number;
|
|
2268
2423
|
blendMode?: GPUBlendFactor | BlendMode;
|
|
@@ -2343,7 +2498,7 @@ declare class Renderer2D {
|
|
|
2343
2498
|
*
|
|
2344
2499
|
* Supports:
|
|
2345
2500
|
* - Hex: #RGB, #RGBA, #RRGGBB, #RRGGBBAA
|
|
2346
|
-
* - Functional: rgb(
|
|
2501
|
+
* - Functional: rgb()/rgba(), hsl()/hsla(), oklch(), oklab() (comma or space syntax)
|
|
2347
2502
|
* - Named: black, white, red, green, blue, yellow, transparent, etc.
|
|
2348
2503
|
* - Color objects pass through unchanged.
|
|
2349
2504
|
*
|
|
@@ -2953,6 +3108,123 @@ declare const Camera3D: {
|
|
|
2953
3108
|
isBoxInFrustum(min: Vec3, max: Vec3, planes: FrustumPlanes): boolean;
|
|
2954
3109
|
};
|
|
2955
3110
|
//#endregion
|
|
3111
|
+
//#region src/math3d/environment3d.d.ts
|
|
3112
|
+
/**
|
|
3113
|
+
* "neutral" (default, Khronos PBR Neutral): colors as authored, highlights
|
|
3114
|
+
* rolled off: right for products, brands and UI. "agx": filmic, desaturates
|
|
3115
|
+
* hot highlights gracefully. "aces": punchy film contrast, shifts hues.
|
|
3116
|
+
*/
|
|
3117
|
+
type ToneMapping = "neutral" | "agx" | "aces" | "none";
|
|
3118
|
+
type EnvironmentPreset = "studio" | "soft" | "sunset" | "night" | "neutral";
|
|
3119
|
+
interface Environment3DFog {
|
|
3120
|
+
/** Display color surfaces fade into; match the background for a seamless horizon. */
|
|
3121
|
+
color: string;
|
|
3122
|
+
/** Distance from the camera (px) where fog starts. */
|
|
3123
|
+
start: number;
|
|
3124
|
+
/** Distance where fog reaches `opacity`. */
|
|
3125
|
+
end: number;
|
|
3126
|
+
/** Max fog coverage 0..1. Default 1. */
|
|
3127
|
+
opacity?: number;
|
|
3128
|
+
}
|
|
3129
|
+
interface Environment3DOptions {
|
|
3130
|
+
preset?: EnvironmentPreset;
|
|
3131
|
+
/** Overrides the preset's sky (above), horizon and ground colors. */
|
|
3132
|
+
top?: string;
|
|
3133
|
+
horizon?: string;
|
|
3134
|
+
bottom?: string;
|
|
3135
|
+
/** Scales the whole environment's light. Default 1. */
|
|
3136
|
+
intensity?: number;
|
|
3137
|
+
/** Strength of the studio softboxes reflected in glossy surfaces. */
|
|
3138
|
+
softboxes?: number;
|
|
3139
|
+
/** Turns the environment around the vertical axis, degrees. */
|
|
3140
|
+
rotation?: number;
|
|
3141
|
+
/** Exposure in stops: +1 doubles brightness. Default 0. */
|
|
3142
|
+
exposure?: number;
|
|
3143
|
+
/** Default "neutral". */
|
|
3144
|
+
toneMapping?: ToneMapping;
|
|
3145
|
+
fog?: Environment3DFog;
|
|
3146
|
+
}
|
|
3147
|
+
/** Where a shadow-casting light's depth map lives, for the lit shaders. */
|
|
3148
|
+
interface ShadowUniformInfo {
|
|
3149
|
+
/** Light view-projection (world → shadow clip). */
|
|
3150
|
+
matrix: ArrayLike<number>;
|
|
3151
|
+
/** Index of the casting light among the packed (non-ambient) lights. */
|
|
3152
|
+
lightIndex: number;
|
|
3153
|
+
/** Shadow map size in texels. */
|
|
3154
|
+
mapSize: number;
|
|
3155
|
+
/** Blur radius in texels. */
|
|
3156
|
+
softness: number;
|
|
3157
|
+
/** Depth bias in NDC. */
|
|
3158
|
+
bias: number;
|
|
3159
|
+
/** Pushes the lookup along the normal, world px. */
|
|
3160
|
+
normalOffset: number;
|
|
3161
|
+
/** 0 = invisible shadows, 1 = fully dark. */
|
|
3162
|
+
darkness: number;
|
|
3163
|
+
}
|
|
3164
|
+
//#endregion
|
|
3165
|
+
//#region src/math3d/light3d.d.ts
|
|
3166
|
+
type LightKind = "ambient" | "directional" | "point" | "spot";
|
|
3167
|
+
interface Light3DOptions {
|
|
3168
|
+
id?: string;
|
|
3169
|
+
lightType?: LightKind;
|
|
3170
|
+
type?: LightKind;
|
|
3171
|
+
color?: string | [number, number, number] | [number, number, number, number] | {
|
|
3172
|
+
r: number;
|
|
3173
|
+
g: number;
|
|
3174
|
+
b: number;
|
|
3175
|
+
a?: number;
|
|
3176
|
+
} | unknown;
|
|
3177
|
+
intensity?: number;
|
|
3178
|
+
x?: number;
|
|
3179
|
+
y?: number;
|
|
3180
|
+
z?: number;
|
|
3181
|
+
position?: [number, number, number];
|
|
3182
|
+
targetX?: number;
|
|
3183
|
+
targetY?: number;
|
|
3184
|
+
targetZ?: number;
|
|
3185
|
+
target?: [number, number, number];
|
|
3186
|
+
direction?: [number, number, number];
|
|
3187
|
+
radius?: number;
|
|
3188
|
+
decay?: number;
|
|
3189
|
+
angle?: number;
|
|
3190
|
+
penumbra?: number;
|
|
3191
|
+
/** Directional or spot: render a shadow map (the first such light wins). */
|
|
3192
|
+
castShadow?: boolean;
|
|
3193
|
+
/** Shadow edge blur in shadow-map texels (default 2). */
|
|
3194
|
+
shadowSoftness?: number;
|
|
3195
|
+
/** 0..1, how dark shadows get (default 1). */
|
|
3196
|
+
shadowDarkness?: number;
|
|
3197
|
+
}
|
|
3198
|
+
interface GPULightData {
|
|
3199
|
+
/** xyz = position, w = type (0=ambient, 1=directional, 2=point, 3=spot) */
|
|
3200
|
+
posType: [number, number, number, number];
|
|
3201
|
+
/** xyz = normalized direction, w = radius */
|
|
3202
|
+
dirRadius: [number, number, number, number];
|
|
3203
|
+
/** rgb = linear color, w = intensity */
|
|
3204
|
+
colorIntensity: [number, number, number, number];
|
|
3205
|
+
/** x = cos(outer), y = cos(inner), z = decay, w = 0 */
|
|
3206
|
+
spotParams: [number, number, number, number];
|
|
3207
|
+
}
|
|
3208
|
+
declare const Light3D: {
|
|
3209
|
+
/**
|
|
3210
|
+
* Computes the 3x3 normal matrix (stored in 4x4 layout) from a 4x4 Model matrix.
|
|
3211
|
+
* Evaluates N = (M^-1)^T to preserve true orthogonal surface normals under non-uniform scaling.
|
|
3212
|
+
*/
|
|
3213
|
+
computeNormalMatrix(modelMatrix: Mat4): Mat4;
|
|
3214
|
+
/**
|
|
3215
|
+
* Converts high-level light options into uniform data ready for GPU packing.
|
|
3216
|
+
*/
|
|
3217
|
+
processLight(opt: Light3DOptions): GPULightData;
|
|
3218
|
+
/**
|
|
3219
|
+
* Packs active scene lights into a Float32Array matching WGSL LightsUniforms layout.
|
|
3220
|
+
*/
|
|
3221
|
+
packLightsUniforms(lights: Light3DOptions[], environment?: Environment3DOptions | null, shadow?: ShadowUniformInfo | null): Float32Array;
|
|
3222
|
+
/** Index (among non-ambient lights) of the light that should cast shadows, or -1. */
|
|
3223
|
+
shadowCasterIndex(lights: Light3DOptions[]): number;
|
|
3224
|
+
/** Fills params.zw and the appended physical-shading block (offset 136 on). */
|
|
3225
|
+
packPhysicalBlock(buffer: Float32Array, lights: Light3DOptions[], environment?: Environment3DOptions | null, shadow?: ShadowUniformInfo | null): void;
|
|
3226
|
+
};
|
|
3227
|
+
//#endregion
|
|
2956
3228
|
//#region src/math3d/path3d.d.ts
|
|
2957
3229
|
interface Path3DPoint {
|
|
2958
3230
|
/** Position in 3D world space [x, y, z] */
|
|
@@ -3046,59 +3318,6 @@ declare class Path3D {
|
|
|
3046
3318
|
static circle(options: CirclePathOptions): Path3D;
|
|
3047
3319
|
}
|
|
3048
3320
|
//#endregion
|
|
3049
|
-
//#region src/math3d/light3d.d.ts
|
|
3050
|
-
type LightKind = "ambient" | "directional" | "point" | "spot";
|
|
3051
|
-
interface Light3DOptions {
|
|
3052
|
-
id?: string;
|
|
3053
|
-
lightType?: LightKind;
|
|
3054
|
-
type?: LightKind;
|
|
3055
|
-
color?: string | [number, number, number] | [number, number, number, number] | {
|
|
3056
|
-
r: number;
|
|
3057
|
-
g: number;
|
|
3058
|
-
b: number;
|
|
3059
|
-
a?: number;
|
|
3060
|
-
} | unknown;
|
|
3061
|
-
intensity?: number;
|
|
3062
|
-
x?: number;
|
|
3063
|
-
y?: number;
|
|
3064
|
-
z?: number;
|
|
3065
|
-
position?: [number, number, number];
|
|
3066
|
-
targetX?: number;
|
|
3067
|
-
targetY?: number;
|
|
3068
|
-
targetZ?: number;
|
|
3069
|
-
target?: [number, number, number];
|
|
3070
|
-
direction?: [number, number, number];
|
|
3071
|
-
radius?: number;
|
|
3072
|
-
decay?: number;
|
|
3073
|
-
angle?: number;
|
|
3074
|
-
penumbra?: number;
|
|
3075
|
-
}
|
|
3076
|
-
interface GPULightData {
|
|
3077
|
-
/** xyz = position, w = type (0=ambient, 1=directional, 2=point, 3=spot) */
|
|
3078
|
-
posType: [number, number, number, number];
|
|
3079
|
-
/** xyz = normalized direction, w = radius */
|
|
3080
|
-
dirRadius: [number, number, number, number];
|
|
3081
|
-
/** rgb = linear color, w = intensity */
|
|
3082
|
-
colorIntensity: [number, number, number, number];
|
|
3083
|
-
/** x = cos(outer), y = cos(inner), z = decay, w = 0 */
|
|
3084
|
-
spotParams: [number, number, number, number];
|
|
3085
|
-
}
|
|
3086
|
-
declare const Light3D: {
|
|
3087
|
-
/**
|
|
3088
|
-
* Computes the 3x3 normal matrix (stored in 4x4 layout) from a 4x4 Model matrix.
|
|
3089
|
-
* Evaluates N = (M^-1)^T to preserve true orthogonal surface normals under non-uniform scaling.
|
|
3090
|
-
*/
|
|
3091
|
-
computeNormalMatrix(modelMatrix: Mat4): Mat4;
|
|
3092
|
-
/**
|
|
3093
|
-
* Converts high-level light options into uniform data ready for GPU packing.
|
|
3094
|
-
*/
|
|
3095
|
-
processLight(opt: Light3DOptions): GPULightData;
|
|
3096
|
-
/**
|
|
3097
|
-
* Packs active scene lights into a Float32Array matching WGSL LightsUniforms layout.
|
|
3098
|
-
*/
|
|
3099
|
-
packLightsUniforms(lights: Light3DOptions[]): Float32Array;
|
|
3100
|
-
};
|
|
3101
|
-
//#endregion
|
|
3102
3321
|
//#region src/loaders/types.d.ts
|
|
3103
3322
|
interface Mesh3DData {
|
|
3104
3323
|
id?: string;
|
|
@@ -3146,6 +3365,20 @@ interface Material3D {
|
|
|
3146
3365
|
shading?: "lit" | "unlit" | "toon";
|
|
3147
3366
|
/** Toon shading: the color multiplier of the shadowed side. */
|
|
3148
3367
|
shadeColor?: [number, number, number];
|
|
3368
|
+
/** Linear-ish emissive color 0..1 (glTF emissiveFactor). */
|
|
3369
|
+
emissive?: [number, number, number];
|
|
3370
|
+
/** Emissive multiplier (glTF KHR_materials_emissive_strength). */
|
|
3371
|
+
emissiveStrength?: number;
|
|
3372
|
+
/** Encoded tangent-space normal map (glTF convention: +Y up / OpenGL). */
|
|
3373
|
+
normalTextureBuffer?: Uint8Array;
|
|
3374
|
+
normalScale?: number;
|
|
3375
|
+
/** Encoded map: G = roughness, B = metallic (glTF). */
|
|
3376
|
+
metallicRoughnessTextureBuffer?: Uint8Array;
|
|
3377
|
+
/** Encoded map: R = ambient occlusion. */
|
|
3378
|
+
occlusionTextureBuffer?: Uint8Array;
|
|
3379
|
+
occlusionStrength?: number;
|
|
3380
|
+
/** Encoded emissive color map (multiplies `emissive`). */
|
|
3381
|
+
emissiveTextureBuffer?: Uint8Array;
|
|
3149
3382
|
}
|
|
3150
3383
|
/** A scene-graph node: its rest transform and parent (glTF node semantics). */
|
|
3151
3384
|
interface ModelNode3D {
|
|
@@ -3262,6 +3495,34 @@ declare class AudioMeshDeformPipeline {
|
|
|
3262
3495
|
destroy(): void;
|
|
3263
3496
|
}
|
|
3264
3497
|
//#endregion
|
|
3498
|
+
//#region src/renderer3d/bloom-pipeline.d.ts
|
|
3499
|
+
/**
|
|
3500
|
+
* Bloom: light that spills past bright pixels, the way a lens and film do.
|
|
3501
|
+
*
|
|
3502
|
+
* A mip chain at half, quarter, … resolution: a soft-knee threshold picks the
|
|
3503
|
+
* bright parts (emissive surfaces, hot speculars), 13-tap downsamples spread
|
|
3504
|
+
* them, tent-filtered upsamples add every level back up (wide and tight glow
|
|
3505
|
+
* together), and the result is added over the source. Works on premultiplied
|
|
3506
|
+
* color: glow over a transparent pixel raises its alpha, so a bloomed 3D
|
|
3507
|
+
* layer still glows when composited over the 2D layers below.
|
|
3508
|
+
*/
|
|
3509
|
+
interface BloomOptions {
|
|
3510
|
+
/** Glow strength. Default 0.2. */
|
|
3511
|
+
intensity?: number;
|
|
3512
|
+
/**
|
|
3513
|
+
* Brightness where glow starts. With an HDR source (3D scenes) it is scene
|
|
3514
|
+
* radiance, default 2.5 = only light well past white (emissive ≳ 3,
|
|
3515
|
+
* hot speculars). Without one it is display brightness, default 0.85.
|
|
3516
|
+
*/
|
|
3517
|
+
threshold?: number;
|
|
3518
|
+
/** Soft transition below the threshold, 0..1. Default 0.4. */
|
|
3519
|
+
knee?: number;
|
|
3520
|
+
/** Glow spread: mip levels used, 1..8. Default 6. */
|
|
3521
|
+
radius?: number;
|
|
3522
|
+
/** Tints the glow (CSS-free rgb 0..1). Default white. */
|
|
3523
|
+
tint?: [number, number, number];
|
|
3524
|
+
}
|
|
3525
|
+
//#endregion
|
|
3265
3526
|
//#region src/renderer3d/glass-pipeline.d.ts
|
|
3266
3527
|
/**
|
|
3267
3528
|
* @file renderer3d/glass-pipeline.ts
|
|
@@ -3303,9 +3564,39 @@ declare class GlassPipeline {
|
|
|
3303
3564
|
draw(pass: GPURenderPassEncoder, cameraBindGroup: GPUBindGroup, backdropTexture: GPUTexture, sampler: GPUSampler, data: GlassUniformData): void;
|
|
3304
3565
|
destroy(): void;
|
|
3305
3566
|
}
|
|
3567
|
+
//#endregion
|
|
3568
|
+
//#region src/renderer3d/surface-params.d.ts
|
|
3569
|
+
/** Physically based surface inputs every 3D draw (quad, text, mesh) accepts. */
|
|
3570
|
+
interface SurfaceParams {
|
|
3571
|
+
/** Microsurface roughness 0 (mirror) .. 1 (chalk). Physical scenes default to 0.5. */
|
|
3572
|
+
roughness?: number;
|
|
3573
|
+
/** 0 = dielectric (plastic, paint, wood), 1 = metal. */
|
|
3574
|
+
metallic?: number;
|
|
3575
|
+
/** Light the surface gives off (a CSS color), added on top of lighting. */
|
|
3576
|
+
emissive?: string | Color | [number, number, number];
|
|
3577
|
+
/** Emissive multiplier; values above 1 glow past white and feed bloom. Default 1. */
|
|
3578
|
+
emissiveIntensity?: number;
|
|
3579
|
+
/** Casts into a `castShadow` light's shadow map (meshes default on, quads off). */
|
|
3580
|
+
castShadow?: boolean;
|
|
3581
|
+
}
|
|
3582
|
+
/** Floats appended to each 3D model uniform block: pbr vec4 + emissive vec4. */
|
|
3583
|
+
|
|
3306
3584
|
//#endregion
|
|
3307
3585
|
//#region src/renderer3d/mesh3d-pipeline.d.ts
|
|
3308
|
-
|
|
3586
|
+
/** A mesh material's extra maps (glTF conventions); absent maps are neutral. */
|
|
3587
|
+
interface MeshMaterialMaps {
|
|
3588
|
+
/** Tangent-space normal map (+Y up). */
|
|
3589
|
+
normal?: GPUTexture;
|
|
3590
|
+
normalScale?: number;
|
|
3591
|
+
/** G = roughness, B = metallic; multiplies the roughness / metallic factors. */
|
|
3592
|
+
metallicRoughness?: GPUTexture;
|
|
3593
|
+
/** R = ambient occlusion. */
|
|
3594
|
+
occlusion?: GPUTexture;
|
|
3595
|
+
occlusionStrength?: number;
|
|
3596
|
+
/** Multiplies the emissive color. */
|
|
3597
|
+
emissive?: GPUTexture;
|
|
3598
|
+
}
|
|
3599
|
+
interface MeshUniformData extends SurfaceParams {
|
|
3309
3600
|
modelMatrix: Float32Array | number[];
|
|
3310
3601
|
normalMatrix?: Float32Array | number[];
|
|
3311
3602
|
colorTint?: [number, number, number, number];
|
|
@@ -3315,8 +3606,12 @@ interface MeshUniformData {
|
|
|
3315
3606
|
isSkinned?: boolean;
|
|
3316
3607
|
skinningMatrices?: Float32Array;
|
|
3317
3608
|
material?: "lit" | "unlit" | "toon";
|
|
3609
|
+
/** Screen-space track matte: the mesh shows where this texture's alpha does. */
|
|
3610
|
+
matte?: GPUTexture;
|
|
3318
3611
|
/** Toon shading: the shadowed side's color multiplier. */
|
|
3319
3612
|
shadeColor?: [number, number, number];
|
|
3613
|
+
/** Normal / metallic-roughness / occlusion / emissive maps. */
|
|
3614
|
+
maps?: MeshMaterialMaps;
|
|
3320
3615
|
/** Texels with alpha below this are discarded (glTF MASK). */
|
|
3321
3616
|
alphaCutoff?: number;
|
|
3322
3617
|
shininess?: number;
|
|
@@ -3335,6 +3630,9 @@ declare class Mesh3DPipeline {
|
|
|
3335
3630
|
private device;
|
|
3336
3631
|
pipelineSingle: GPURenderPipeline;
|
|
3337
3632
|
pipelineMrt: GPURenderPipeline;
|
|
3633
|
+
private bloomVariants;
|
|
3634
|
+
/** Depth only (skinning included): draws a caster into a shadow map. */
|
|
3635
|
+
pipelineShadow: GPURenderPipeline;
|
|
3338
3636
|
cameraLayout: GPUBindGroupLayout;
|
|
3339
3637
|
modelLayout: GPUBindGroupLayout;
|
|
3340
3638
|
textureLayout: GPUBindGroupLayout;
|
|
@@ -3342,12 +3640,17 @@ declare class Mesh3DPipeline {
|
|
|
3342
3640
|
private modelPool;
|
|
3343
3641
|
private skinningPool;
|
|
3344
3642
|
defaultWhiteTexture: GPUTexture;
|
|
3643
|
+
/** (0.5, 0.5, 1): an unperturbed tangent-space normal. */
|
|
3644
|
+
private flatNormalTexture;
|
|
3345
3645
|
private defaultSkinningBuffer;
|
|
3346
3646
|
private modelData;
|
|
3347
3647
|
constructor(device: GPUDevice, format: GPUTextureFormat, depthFormat?: GPUTextureFormat, cameraLayout?: GPUBindGroupLayout, lightsLayout?: GPUBindGroupLayout, /** Samples per pixel of the pass this draws into (MSAA). */
|
|
3348
3648
|
sampleCount?: number);
|
|
3349
3649
|
resetPools(): void;
|
|
3350
|
-
|
|
3650
|
+
private packModel;
|
|
3651
|
+
draw(pass: GPURenderPassEncoder, cameraBindGroup: GPUBindGroup, lightsBindGroup: GPUBindGroup, meshBuffers: GPUMeshBuffers, texture: GPUTexture | undefined, sampler: GPUSampler, data: MeshUniformData, useMrt?: boolean, useBloom?: boolean): void;
|
|
3652
|
+
/** Draws the mesh into a shadow map (`lightCameraBindGroup` holds the light's view-projection). */
|
|
3653
|
+
drawShadow(pass: GPURenderPassEncoder, lightCameraBindGroup: GPUBindGroup, meshBuffers: GPUMeshBuffers, data: MeshUniformData): void;
|
|
3351
3654
|
destroy(): void;
|
|
3352
3655
|
}
|
|
3353
3656
|
//#endregion
|
|
@@ -3376,8 +3679,55 @@ declare class MotionBlurPipeline {
|
|
|
3376
3679
|
destroy(): void;
|
|
3377
3680
|
}
|
|
3378
3681
|
//#endregion
|
|
3379
|
-
//#region src/renderer3d/
|
|
3380
|
-
|
|
3682
|
+
//#region src/renderer3d/primitive-geometry.d.ts
|
|
3683
|
+
/**
|
|
3684
|
+
* Procedural solids built as real meshes (one draw call each), centered on
|
|
3685
|
+
* the origin in the 3D world's convention: x right, y down, z away from a
|
|
3686
|
+
* default camera. "Top" is therefore -y.
|
|
3687
|
+
*/
|
|
3688
|
+
interface PrimitiveSurface {
|
|
3689
|
+
/** Diffuse color (hex or rgb()). Default white, so a node `color` tints it. */
|
|
3690
|
+
color?: string;
|
|
3691
|
+
material?: "lit" | "unlit" | "toon";
|
|
3692
|
+
shininess?: number;
|
|
3693
|
+
roughness?: number;
|
|
3694
|
+
metallic?: number;
|
|
3695
|
+
}
|
|
3696
|
+
interface RoundedBoxGeometryOptions extends PrimitiveSurface {
|
|
3697
|
+
type: "roundedBox";
|
|
3698
|
+
width: number;
|
|
3699
|
+
height: number;
|
|
3700
|
+
depth: number;
|
|
3701
|
+
/** Corner and edge radius, clamped to half the smallest side. Default 0 (a sharp box). */
|
|
3702
|
+
radius?: number;
|
|
3703
|
+
/** Segments per rounded quarter (default 4). */
|
|
3704
|
+
segments?: number;
|
|
3705
|
+
/**
|
|
3706
|
+
* Scale of the top (-y) face against the bottom along x and z: 0.9 draws
|
|
3707
|
+
* a keycap-like frustum. Default 1.
|
|
3708
|
+
*/
|
|
3709
|
+
taper?: number;
|
|
3710
|
+
}
|
|
3711
|
+
interface SphereGeometryOptions extends PrimitiveSurface {
|
|
3712
|
+
type: "sphere";
|
|
3713
|
+
radius: number;
|
|
3714
|
+
/** Segments around the equator (default 32); rings are half of it. */
|
|
3715
|
+
segments?: number;
|
|
3716
|
+
}
|
|
3717
|
+
interface CylinderGeometryOptions extends PrimitiveSurface {
|
|
3718
|
+
type: "cylinder";
|
|
3719
|
+
/** Radius of the top (-y) cap; defaults to `radius`. */
|
|
3720
|
+
radiusTop?: number;
|
|
3721
|
+
/** Radius of the bottom (+y) cap; defaults to `radius`. */
|
|
3722
|
+
radiusBottom?: number;
|
|
3723
|
+
radius?: number;
|
|
3724
|
+
height: number;
|
|
3725
|
+
/** Segments around (default 32). */
|
|
3726
|
+
segments?: number;
|
|
3727
|
+
/** Leave the caps off (a tube). */
|
|
3728
|
+
openEnded?: boolean;
|
|
3729
|
+
}
|
|
3730
|
+
interface ModelUniformData extends SurfaceParams {
|
|
3381
3731
|
modelMatrix: Float32Array | number[];
|
|
3382
3732
|
normalMatrix?: Float32Array | number[];
|
|
3383
3733
|
colorTint?: [number, number, number, number];
|
|
@@ -3391,19 +3741,24 @@ interface ModelUniformData {
|
|
|
3391
3741
|
/** Fraction of the texture the layer covers, [u, v] (default the whole texture) */
|
|
3392
3742
|
textureExtent?: [number, number];
|
|
3393
3743
|
material?: "lit" | "unlit";
|
|
3744
|
+
/** Screen-space track matte: the layer shows where this texture's alpha does. */
|
|
3745
|
+
matte?: GPUTexture;
|
|
3394
3746
|
shininess?: number;
|
|
3395
3747
|
roughness?: number;
|
|
3396
3748
|
specularIntensity?: number;
|
|
3397
3749
|
ambientIntensity?: number;
|
|
3398
3750
|
metallic?: number;
|
|
3399
3751
|
}
|
|
3400
|
-
type MaterialUniformData = Pick<ModelUniformData, "material" | "shininess" | "roughness" | "specularIntensity" | "ambientIntensity" | "metallic">;
|
|
3752
|
+
type MaterialUniformData = Pick<ModelUniformData, "material" | "shininess" | "roughness" | "specularIntensity" | "ambientIntensity" | "metallic" | "emissive" | "emissiveIntensity">;
|
|
3401
3753
|
/** [shininess, specularIntensity, ambientIntensity, materialMode] as the 3D shaders' lighting reads them. */
|
|
3402
3754
|
|
|
3403
3755
|
declare class Quad3DPipeline {
|
|
3404
3756
|
private device;
|
|
3405
3757
|
pipelineSingle: GPURenderPipeline;
|
|
3406
3758
|
pipelineMrt: GPURenderPipeline;
|
|
3759
|
+
private bloomVariants;
|
|
3760
|
+
/** Depth-only, alpha-tested: draws a caster into a shadow map. */
|
|
3761
|
+
pipelineShadow: GPURenderPipeline;
|
|
3407
3762
|
cameraLayout: GPUBindGroupLayout;
|
|
3408
3763
|
modelLayout: GPUBindGroupLayout;
|
|
3409
3764
|
textureLayout: GPUBindGroupLayout;
|
|
@@ -3415,10 +3770,20 @@ declare class Quad3DPipeline {
|
|
|
3415
3770
|
constructor(device: GPUDevice, format: GPUTextureFormat, depthFormat?: GPUTextureFormat, /** Samples per pixel of the pass this draws into (MSAA). */
|
|
3416
3771
|
sampleCount?: number);
|
|
3417
3772
|
resetPools(): void;
|
|
3418
|
-
|
|
3773
|
+
private packModel;
|
|
3774
|
+
private textureBindGroup;
|
|
3775
|
+
draw(pass: GPURenderPassEncoder, cameraBindGroup: GPUBindGroup, lightsBindGroup: GPUBindGroup, texture: GPUTexture, sampler: GPUSampler, data: ModelUniformData, useMrt?: boolean, useBloom?: boolean): void;
|
|
3776
|
+
/** Draws the quad into a shadow map (`lightCameraBindGroup` holds the light's view-projection). */
|
|
3777
|
+
drawShadow(pass: GPURenderPassEncoder, lightCameraBindGroup: GPUBindGroup, texture: GPUTexture, sampler: GPUSampler, data: ModelUniformData): void;
|
|
3419
3778
|
destroy(): void;
|
|
3420
3779
|
}
|
|
3421
3780
|
//#endregion
|
|
3781
|
+
//#region src/renderer3d/shadow-frustum.d.ts
|
|
3782
|
+
interface Aabb {
|
|
3783
|
+
min: Vec3;
|
|
3784
|
+
max: Vec3;
|
|
3785
|
+
}
|
|
3786
|
+
//#endregion
|
|
3422
3787
|
//#region src/renderer3d/slug3d-pipeline.d.ts
|
|
3423
3788
|
interface Slug3DUniformData extends MaterialUniformData {
|
|
3424
3789
|
/** Paragraph px to world */
|
|
@@ -3430,12 +3795,15 @@ interface Slug3DUniformData extends MaterialUniformData {
|
|
|
3430
3795
|
twoSided: boolean;
|
|
3431
3796
|
/** Fraction of the distance to the eye the glyphs slide toward it, to stack on their plane */
|
|
3432
3797
|
depthPull: number;
|
|
3798
|
+
/** Screen-space track matte: the text shows where this texture's alpha does. */
|
|
3799
|
+
matte?: GPUTexture;
|
|
3433
3800
|
}
|
|
3434
3801
|
/** Slug glyphs in the 3D pass: depth-tested, lit and resolution independent. */
|
|
3435
3802
|
declare class Slug3DPipeline {
|
|
3436
3803
|
private device;
|
|
3437
3804
|
private pipelineSingle;
|
|
3438
3805
|
private pipelineMrt;
|
|
3806
|
+
private bloomVariants;
|
|
3439
3807
|
private modelLayout;
|
|
3440
3808
|
private fontLayout;
|
|
3441
3809
|
private modelPool;
|
|
@@ -3445,14 +3813,14 @@ declare class Slug3DPipeline {
|
|
|
3445
3813
|
constructor(device: GPUDevice, format: GPUTextureFormat, depthFormat: GPUTextureFormat, cameraLayout: GPUBindGroupLayout, lightsLayout: GPUBindGroupLayout, /** Samples per pixel of the pass this draws into (MSAA). */
|
|
3446
3814
|
sampleCount?: number);
|
|
3447
3815
|
resetPools(): void;
|
|
3448
|
-
draw(pass: GPURenderPassEncoder, cameraBindGroup: GPUBindGroup, lightsBindGroup: GPUBindGroup, font: SlugFont, instances: Float32Array, instanceCount: number, data: Slug3DUniformData, useMrt?: boolean): void;
|
|
3816
|
+
draw(pass: GPURenderPassEncoder, cameraBindGroup: GPUBindGroup, lightsBindGroup: GPUBindGroup, font: SlugFont, instances: Float32Array, instanceCount: number, data: Slug3DUniformData, useMrt?: boolean, useBloom?: boolean): void;
|
|
3449
3817
|
/** A font's textures live as long as the font: bind them once, not per draw. */
|
|
3450
3818
|
private fontBindGroup;
|
|
3451
3819
|
destroy(): void;
|
|
3452
3820
|
}
|
|
3453
3821
|
//#endregion
|
|
3454
3822
|
//#region src/renderer3d/renderer3d.d.ts
|
|
3455
|
-
interface DrawQuad3DOpts {
|
|
3823
|
+
interface DrawQuad3DOpts extends SurfaceParams {
|
|
3456
3824
|
/** 3D world position [x, y, z] */
|
|
3457
3825
|
position: [number, number, number];
|
|
3458
3826
|
/** Layer surface width */
|
|
@@ -3495,8 +3863,18 @@ interface DrawQuad3DOpts {
|
|
|
3495
3863
|
ambientIntensity?: number;
|
|
3496
3864
|
/** Metallic factor [0, 1] */
|
|
3497
3865
|
metallic?: number;
|
|
3866
|
+
/**
|
|
3867
|
+
* Screen-space track matte, the size of the pass: the layer shows where
|
|
3868
|
+
* this texture's alpha does and keeps its place in the depth buffer.
|
|
3869
|
+
*/
|
|
3870
|
+
matte?: GPUTexture;
|
|
3498
3871
|
}
|
|
3499
|
-
interface DrawMesh3DOpts {
|
|
3872
|
+
interface DrawMesh3DOpts extends SurfaceParams {
|
|
3873
|
+
/**
|
|
3874
|
+
* Screen-space track matte, the size of the pass: the layer shows where
|
|
3875
|
+
* this texture's alpha does and keeps its place in the depth buffer.
|
|
3876
|
+
*/
|
|
3877
|
+
matte?: GPUTexture;
|
|
3500
3878
|
/** 3D world position [x, y, z] */
|
|
3501
3879
|
position?: Vec3;
|
|
3502
3880
|
/** Euler rotations in degrees [rx, ry, rz] */
|
|
@@ -3523,6 +3901,8 @@ interface DrawMesh3DOpts {
|
|
|
3523
3901
|
material?: "lit" | "unlit" | "toon";
|
|
3524
3902
|
/** Toon shading: the shadowed side's color multiplier */
|
|
3525
3903
|
shadeColor?: [number, number, number];
|
|
3904
|
+
/** Normal / metallic-roughness / occlusion / emissive maps (see `materialMaps`). */
|
|
3905
|
+
maps?: MeshMaterialMaps;
|
|
3526
3906
|
/** Discard texels whose alpha is below this (glTF MASK) */
|
|
3527
3907
|
alphaCutoff?: number;
|
|
3528
3908
|
/** Texture addressing outside [0, 1] */
|
|
@@ -3545,6 +3925,32 @@ interface DrawMesh3DOpts {
|
|
|
3545
3925
|
sampleRate?: number;
|
|
3546
3926
|
};
|
|
3547
3927
|
}
|
|
3928
|
+
/** Scene-wide world settings for a 3D pass. */
|
|
3929
|
+
interface Scene3DWorld {
|
|
3930
|
+
/** Present = physically based shading (see `Environment3DOptions`). */
|
|
3931
|
+
environment?: Environment3DOptions | null;
|
|
3932
|
+
/** From `renderShadowMap`, when a light casts shadows. */
|
|
3933
|
+
shadow?: ShadowUniformInfo | null;
|
|
3934
|
+
}
|
|
3935
|
+
/** Something that can fall into a shadow map. */
|
|
3936
|
+
type ShadowCaster3D = {
|
|
3937
|
+
kind: "mesh";
|
|
3938
|
+
mesh: Mesh3DData;
|
|
3939
|
+
buffers?: GPUMeshBuffers;
|
|
3940
|
+
opts: DrawMesh3DOpts;
|
|
3941
|
+
} | {
|
|
3942
|
+
kind: "quad";
|
|
3943
|
+
texture: GPUTexture;
|
|
3944
|
+
opts: DrawQuad3DOpts;
|
|
3945
|
+
};
|
|
3946
|
+
interface ShadowMapOptions3D {
|
|
3947
|
+
/** Texels per side. Default 2048. */
|
|
3948
|
+
mapSize?: number;
|
|
3949
|
+
/** Edge blur in texels. Default 2.5. */
|
|
3950
|
+
softness?: number;
|
|
3951
|
+
/** 0..1. Default 1. */
|
|
3952
|
+
darkness?: number;
|
|
3953
|
+
}
|
|
3548
3954
|
declare class Renderer3D {
|
|
3549
3955
|
private device;
|
|
3550
3956
|
format: GPUTextureFormat;
|
|
@@ -3557,18 +3963,27 @@ declare class Renderer3D {
|
|
|
3557
3963
|
private cameraPool;
|
|
3558
3964
|
private lightsPool;
|
|
3559
3965
|
private cameraUniformBindGroupCache;
|
|
3560
|
-
private lightsUniformBindGroupCache;
|
|
3561
3966
|
private samplerCache;
|
|
3562
3967
|
private depthTexture;
|
|
3563
3968
|
private linearDepthTexture;
|
|
3564
3969
|
private msaaColorTexture;
|
|
3565
3970
|
private msaaLinearDepthTexture;
|
|
3971
|
+
private msaaHdrTexture;
|
|
3972
|
+
private hdrTexture;
|
|
3973
|
+
/** Whether the current pass also writes HDR radiance (bloom). */
|
|
3974
|
+
private passWritesHdr;
|
|
3566
3975
|
private cameraUniformData;
|
|
3567
3976
|
private meshBuffersCache;
|
|
3568
3977
|
private materialTextures;
|
|
3978
|
+
private materialMapCache;
|
|
3569
3979
|
/** Parsed models by source and load options: a model file is read once, not every frame. */
|
|
3570
3980
|
private modelCache;
|
|
3571
3981
|
private lastCameraPose;
|
|
3982
|
+
private shadowTexture;
|
|
3983
|
+
private placeholderShadowTexture;
|
|
3984
|
+
private shadowSampler;
|
|
3985
|
+
private meshBounds;
|
|
3986
|
+
private bloomPipeline;
|
|
3572
3987
|
private lastCameraBuffer;
|
|
3573
3988
|
/**
|
|
3574
3989
|
* Samples per pixel in the 3D pass. Mesh silhouettes (extruded text,
|
|
@@ -3580,11 +3995,27 @@ declare class Renderer3D {
|
|
|
3580
3995
|
resetPools(): void;
|
|
3581
3996
|
getOrCreateDepthTexture(width: number, height: number): GPUTexture;
|
|
3582
3997
|
private getOrCreateMsaaTexture;
|
|
3998
|
+
/** The HDR radiance target the last `beginPass(…, writeHdr)` drew into. */
|
|
3999
|
+
hdrSource(): GPUTexture | null;
|
|
4000
|
+
private getOrCreateHdrTexture;
|
|
3583
4001
|
getOrCreateLinearDepthTexture(width: number, height: number): GPUTexture;
|
|
3584
4002
|
packCameraUniforms(camera: Camera3DPose, surfaceWidth: number, surfaceHeight: number, time?: number): GPUBuffer;
|
|
3585
4003
|
createCameraBindGroup(cameraBuffer: GPUBuffer): GPUBindGroup;
|
|
3586
|
-
getOrCreateLightsBuffer(lights?: Light3DOptions[]): GPUBuffer;
|
|
3587
|
-
|
|
4004
|
+
getOrCreateLightsBuffer(lights?: Light3DOptions[], world?: Scene3DWorld): GPUBuffer;
|
|
4005
|
+
/** Lights uniform + shadow map + comparison sampler (group 3 of every lit shader). */
|
|
4006
|
+
private createLightsBindGroup;
|
|
4007
|
+
/** Local bounds of a mesh, computed once. */
|
|
4008
|
+
private meshAabb;
|
|
4009
|
+
/** World bounds of a mesh or quad draw, for fitting shadow frusta. */
|
|
4010
|
+
worldBounds(item: ShadowCaster3D): Aabb;
|
|
4011
|
+
/**
|
|
4012
|
+
* Renders the shadow map for `light` (a directional or spot light with
|
|
4013
|
+
* `castShadow`) from `casters`, fitting its frustum around them and deep
|
|
4014
|
+
* enough for `receivers`. Pass the result to `beginPass` as `world.shadow`.
|
|
4015
|
+
*/
|
|
4016
|
+
renderShadowMap(encoder: GPUCommandEncoder, light: Light3DOptions, lightIndex: number, casters: ShadowCaster3D[], receivers: Aabb[], options?: ShadowMapOptions3D): ShadowUniformInfo | null;
|
|
4017
|
+
beginPass(encoder: GPUCommandEncoder, colorTargetView: GPUTextureView, surfaceWidth: number, surfaceHeight: number, camera: Camera3DPose, loadOp?: GPULoadOp, clearColor?: GPUColor, linearDepthTargetView?: GPUTextureView, lights?: Light3DOptions[], world?: Scene3DWorld, /** Also write unclamped scene radiance (`hdrTexture()`), the bloom source. */
|
|
4018
|
+
writeHdr?: boolean): {
|
|
3588
4019
|
pass: GPURenderPassEncoder;
|
|
3589
4020
|
cameraBindGroup: GPUBindGroup;
|
|
3590
4021
|
cameraBuffer: GPUBuffer;
|
|
@@ -3604,6 +4035,8 @@ declare class Renderer3D {
|
|
|
3604
4035
|
*/
|
|
3605
4036
|
drawSlugText(pass: GPURenderPassEncoder, cameraBindGroup: GPUBindGroup, lightsBindGroup: GPUBindGroup, batches: SlugGlyphBatch[], opts: DrawQuad3DOpts, stackBase?: number, useMrt?: boolean): void;
|
|
3606
4037
|
drawTextureQuad(pass: GPURenderPassEncoder, cameraBindGroup: GPUBindGroup, lightsBindGroup: GPUBindGroup, texture: GPUTexture, opts: DrawQuad3DOpts, useMrt?: boolean): void;
|
|
4038
|
+
/** T(pos) * Rz * Ry * Rx * S, or the draw's precomputed model matrix. */
|
|
4039
|
+
private meshModelMatrix;
|
|
3607
4040
|
getOrCreateMeshBuffers(mesh: Mesh3DData): GPUMeshBuffers;
|
|
3608
4041
|
deformMesh(encoder: GPUCommandEncoder, mesh: Mesh3DData, audioDeform: {
|
|
3609
4042
|
config: MeshAudioDeformConfig;
|
|
@@ -3618,14 +4051,30 @@ declare class Renderer3D {
|
|
|
3618
4051
|
* chain (a character's 2K maps are drawn a few hundred pixels tall).
|
|
3619
4052
|
*/
|
|
3620
4053
|
materialTexture(material: Material3D): Promise<GPUTexture | undefined>;
|
|
4054
|
+
/**
|
|
4055
|
+
* The material's normal, metallic-roughness, occlusion and emissive maps
|
|
4056
|
+
* on the GPU (each decoded once); absent maps are left out.
|
|
4057
|
+
*/
|
|
4058
|
+
materialMaps(material: Material3D): Promise<MeshMaterialMaps>;
|
|
3621
4059
|
private uploadMaterialTexture;
|
|
4060
|
+
/** Decodes an encoded image into a texture with a full mip chain. */
|
|
4061
|
+
private uploadImage;
|
|
4062
|
+
/** Writes `source` with bloom into `dest` (see `BloomOptions`). */
|
|
4063
|
+
applyBloom(encoder: GPUCommandEncoder, source: GPUTexture, dest: GPUTexture, options?: BloomOptions, /** Scene radiance to threshold (from a `writeHdr` pass); default `source`. */
|
|
4064
|
+
hdrSource?: GPUTexture | null): void;
|
|
3622
4065
|
applyDepthOfField(encoder: GPUCommandEncoder, sourceColorTex: GPUTexture, depthTex: GPUTexture, destView: GPUTextureView, cameraBuffer: GPUBuffer): void;
|
|
3623
4066
|
destroy(): void;
|
|
3624
4067
|
}
|
|
3625
4068
|
declare function loadModel3D(srcOrData: string | ArrayBuffer | Uint8Array, format?: "obj" | "fbx" | "gltf" | "glb" | "stl" | "ply" | "vox" | "3ds" | "off" | "auto", options?: LoadModelOptions): Model3DData;
|
|
3626
4069
|
//#endregion
|
|
3627
|
-
//#region src/renderer3d/shadow-
|
|
4070
|
+
//#region src/renderer3d/shadow-depth.d.ts
|
|
4071
|
+
/** Shadow maps: a depth32float target rendered from a light's point of view. */
|
|
3628
4072
|
|
|
4073
|
+
/**
|
|
4074
|
+
* @deprecated A texture holder only; nothing renders into it. Shadows are
|
|
4075
|
+
* drawn by `Renderer3D.renderShadowMap` (a `castShadow` directional or spot
|
|
4076
|
+
* light in the scene).
|
|
4077
|
+
*/
|
|
3629
4078
|
declare class ShadowPipeline {
|
|
3630
4079
|
shadowDepthTexture: GPUTexture;
|
|
3631
4080
|
shadowDepthView: GPUTextureView;
|
|
@@ -3668,5 +4117,5 @@ declare class SSAOPipeline {
|
|
|
3668
4117
|
//#endregion
|
|
3669
4118
|
//#region src/renderer3d/text-extruder.d.ts
|
|
3670
4119
|
//#endregion
|
|
3671
|
-
export {
|
|
3672
|
-
//# sourceMappingURL=index-
|
|
4120
|
+
export { AnimationTypeSchema as $, SignalGateDataSchema as $n, formatHex as $r, HandleTypeVal as $t, ShadowPipeline as A, rgbToOklab as Ai, NormalRelightingOptions as An, VideoSpatialPropsSchema as Ar, DetectedObject as At, initHeadlessWebGPU as B, ProgrammaticSignal as Bn, WritableSignal as Br, FileAssetSchema as Bt, NodeAnimationTrack3D as C, registerSignalDependency as Ci, NodeProcessorParams as Cn, TransitionSchema as Cr, DataForType as Ct, Renderer3D as D, resolveNumber as Di, NodeValidationFn as Dn, VideoAnimationSchema as Dr, DataTypes as Dt, Renderer2D as E, resolveMediaMimeType as Ei, NodeRunFunction as En, VideoAnimation as Er, DataTypeVal as Et, SlugPipeline as F, sineSignal as Fi, OutputItem as Fn, VirtualMediaDataSchema as Fr, ExportResultSchema as Ft, lutStore as G, Signal as Gn, computed as Gr, GPUTextureBinding as Gt, loadFBX as H, RenderDiagnostic as Hn, appendOperation as Hr, FileDataSchema as Ht, SphereGeometryOptions as I, stampResult as Ii, OutputItemSchema as In, VisionConfig as Ir, ExtendedLayer as It, parseOBJ as J, SignalChannelMetaSchema as Jn, createVirtualMedia as Jr, GeneratorSignalDataSchema as Jt, parseFBX as K, SignalBuilderConfig as Kn, cosineSignal as Kr, GateSignalOptions as Kt, WebGPUAudioProcessor as L, takeRenderDiagnostics as Li, ParsedGradient as Ln, VisionNodeSpec as Lr, ExtendedLayerSchema as Lt, SignalRegistryResource as M, serializeSignalData as Mi, ObjectBoundingBox as Mn, VideoTextPropsSchema as Mr, EffectConfig as Mt, Skeleton3D as N, signal as Ni, OpticalFlowOptions as Nn, VideoTimingPropsSchema as Nr, EffectConfigValue as Nt, RoundedBoxGeometryOptions as O, resolveParam as Oi, NodeVisualConfig as On, VideoLayerType as Or, DeflickerOptions as Ot, SlugFontCache as P, signalBuilder as Pi, Output$1 as Pn, VirtualMediaData as Pr, ExportResult as Pt, AnimationType as Q, SignalGateData as Qn, findSourceAsset as Qr, HandleType as Qt, buildWGSLSignalFn as R, timeSignal as Ri, ParsedGradientStop as Rn, VisionTask as Rr, FaceLandmarksOptions as Rt, MotionBlurPipeline as S, progressSignal as Si, NodeProcessorContext as Sn, TrackedObject as Sr, DEFAULT_MEDIA_DIMENSION as St, RenderContextValue as T, resolveBoolean as Ti, NodeResultSchema as Tn, TransitionTypeSchema as Tr, DataTypeEnum as Tt, loadModel3D as U, Rgba as Un, checkNodeResultCache as Ur, FrameContext as Ut, inputStore as V, ProgrammaticSignalOptions as Vn, XYPosition as Vr, FileData as Vt, loadOBJ as W, SegmentationOptions as Wn, computeVideoCropRenderProps as Wr, FrameSignal as Wt, signalRegistry as X, SignalData as Xn, deserializeSignalData as Xr, Gradient as Xt, shaderStore as Y, SignalContext as Yn, dataTypeColors as Yr, GlobalCompositeOperation as Yt, textureCache as Z, SignalDataSchema as Zn, extractSvgDimensions as Zr, GradientType as Zt, LoadModelOptions as _, normalizeColorStops as _i, ModerationUnrefundableError as _n, TextSpan as _r, ConnectedInput as _t, AudioMeshDeformPipeline as a, getFingerprint as ai, MAX_GRADIENT_STOPS as an, SineSignalOptions as ar, BaseMediaOperationPropsSchema as at, Mesh3DData as b, parseCssGradient as bi, NodeMetadata as bn, TimelineTransform as br, DEFAULT_DURATION_MS as bt, BlendMode as c, getRenderFingerprint as ci, MediaMetadataSchema as cn, SourceOperationSchema as cr, CAPTION_LAYER_DEFAULTS as ct, CylinderGeometryOptions as d, isCssGradient as di, MediaService as dn, TensorData as dr, CannyOptions as dt, frameArraySignal as ei, JsonArray as en, SignalMathData as er, AnyOutputUnion as et, EffectPipeline as f, isEqual as fi, MediaSourceDescriptor as fn, TensorDimensions as fr, Color$1 as ft, Light3DOptions as g, mixColors as gi, ModerationError as gn, TextOperationSchema as gr, ConfigSchemaRegistry as gt, Light3D as h, limitGradientStops as hi, MeshAudioDeformConfig as hn, TensorPipelineConfig as hr, ConfigHandleSchema as ht, AudioLatentTrackCache as i, getFileDataMetadata as ii, Landmark3D as in, SignalValue as ir, BaseMediaOperationProps as it, SignalRegistry as j, sampleColorStops as ji, NormalizedLandmarkList as jn, VideoStylePropsSchema as jr, Effect as jt, SSAOPipeline as k, resolveString as ki, NodeVisualConfigSchema as kn, VideoLayerTypeSchema as kr, DepthNormalsOptions as kt, Bone3D as l, gradientStopsToOklab as li, MediaOperation as ln, StorageService as lr, COMPOSITE_OPERATIONS as lt, GlassPipeline as m, isVirtualMediaData as mi, MediaSourceSchema as mn, TensorNode as mr, ConfigHandle as mt, AudioLatentData as n, generateId as ni, JsonValue as nn, SignalStats as nr, AudioExtractorSignalData as nt, AudioSignalComputeConfig as o, getLeafMediaType as oi, MIME_TYPES as on, SingleOutputGeneric as or, BaseVideoLayerProps as ot, GPULightData as p, isSignal as pi, MediaSourceInput as pn, TensorFormat as pr, ColorStopLike as pt, parseMTL as q, SignalChannelMeta as qn, createOutputItemSchema as qr, GeneratorSignalData as qt, AudioLatentEngine as r, getActiveMediaMetadata as ri, JsonValueSchema as rn, SignalStatsSchema as rr, AudioExtractorSignalDataSchema as rt, AudioSignalComputePipeline as s, getMediaType as si, MediaMetadata as sn, SingleOutputGenericSchema as sr, BaseVideoLayerPropsSchema as st, AnimationClip3D as t, frameSignal as ti, JsonObject as tn, SignalMathDataSchema as tr, AnyOutputUnionSchema as tt, Camera3D as u, hasOnlySingleSource as ui, MediaOperationSchema as un, TEXT_LAYER_DEFAULTS as ur, COMPOSITOR_DEFAULTS as ut, MasterAudioEntry as v, oklabToRgb as vi, MultiOutputGeneric as vn, TextSpanMark as vr, ControlNetConditioningOutputs as vt, Path3D as w, reportRenderDiagnostic as wi, NodeResult as wn, TransitionType as wr, DataType as wt, Model3DData as x, programmaticSignal as xi, NodeMetadataSchema as xn, TimelineTransformSchema as xr, DEFAULT_FPS as xt, Material3D as y, parseCssColor as yi, MultiOutputGenericSchema as yn, TimelineSegmentSchema as yr, DATA_TYPE_EXTENSIONS as yt, ensureDevice as z, updateClockSignals as zi, PoseSkeletonOptions as zn, VisionVariant as zr, FileAsset as zt };
|
|
4121
|
+
//# sourceMappingURL=index-DDEPvMww.d.mts.map
|