Skip to content

feat(rendering): add BloomFilter with a soft-knee threshold, a downsample chain and an additive glow - #751

Merged
Exoridus merged 3 commits into
nextfrom
feat/bloom-render-pass
Sep 16, 2026
Merged

Exoridus merged 3 commits into
nextfrom
feat/bloom-render-pass

Conversation

@Exoridus

@Exoridus Exoridus commented Sep 16, 2026

Copy link
Copy Markdown
Owner

BloomFilter: bright regions bleed a soft glow, in today's sRGB path, on both backends with identical output on a discrete GPU. Tone mapping is deliberately not part of it; grading is the existing LUT filter.

Options threshold (Rec. 709 luma at the middle of a soft knee, default 0.8), intensity (default 1; 0 returns the source through one blit without borrowing a target), strength (Gaussian sigma in logical units, exactly as BlurFilter defines it), levels (halvings before the blur, a cost knob clamped 1..5, stopping early when a dimension would hit one pixel) and quality. Passes: one new shader pair extracts the excess over the threshold straight into the half-resolution first level and emits it as premultiplied colour with zero alpha, so the glow is pure added light and a translucent glowing sprite keeps its alpha; sprite blits halve down the chain; BlurFilter runs on the smallest level with the sigma scaled from the measured size ratio; the blurred level alone is blitted back up into cleared targets; the composite is one target pass, source then glow additive, the shape DropShadowFilter uses. Intermediates are borrowed from the backend's render-texture pool and released on every path. getOutputBounds adds the chain's reach, scaled for a declared resolution below one.

Parity scene filter/bloom-halo: max channel delta 0 across WebGL2 and WebGPU on the RTX 5070 Ti; the software rasterizer on CI rounds the half-resolution blits a step apart between its GL and Dawn paths, so the scene declares a narrow tolerance with that reason at the scene. Browser tests in both lanes: dark stays dark, the halo falls off with distance, intensity 0 returns the source, a higher threshold lets less through, a uniform bright field reads the same at one and three levels, and a half-transparent glowing sprite over an opaque backdrop keeps its alpha while the backdrop under the halo only gets brighter. Example, guide section and API reference added; allocation gate green; IIFE bundle +0.95 KB inside its budget.

@Exoridus
Exoridus enabled auto-merge (squash) September 16, 2026 01:50
@codecov

codecov Bot commented Sep 16, 2026

Copy link
Copy Markdown

Bundle Report

Changes will increase total bundle size by 195.5kB (0.37%) ⬆️. This is within the configured threshold ✅

Detailed changes
Bundle name Size Change
exo-esm-esm 1.27MB 12.01kB (0.95%) ⬆️
exo-esm-modules-esm 3.66MB 34.16kB (0.94%) ⬆️
exo-iife-min-Exo-iife 1.27MB 12.01kB (0.95%) ⬆️
site-server-esm 34.07MB 40.62kB (0.12%) ⬆️
exo-full-iife-Exo-iife 5.5MB 43.25kB (0.79%) ⬆️
exojs-physics-esm 275.16kB 4.67kB (1.73%) ⬆️
exo-iife-Exo-iife 3.55MB 33.19kB (0.94%) ⬆️
exo-full-iife-min-Exo-iife 2.0MB 15.57kB (0.79%) ⬆️

Affected Assets, Files, and Routes:

view changes for bundle: exo-esm-esm

Assets Changed:

Asset Name Size Change Total Size Change (%)
exo.esm.js 12.01kB 1.27MB 0.95%

Files in exo.esm.js:

  • ./src/rendering/filters/BloomFilter.ts → Total Size: 10.17kB

  • ./src/rendering/filters/shaders/bloom-threshold.frag → Total Size: 698 bytes

  • ./src/rendering/filters/shaders/bloom-threshold.wgsl → Total Size: 768 bytes

view changes for bundle: exo-iife-min-Exo-iife

Assets Changed:

Asset Name Size Change Total Size Change (%)
exo.iife.min.js 12.01kB 1.27MB 0.95%

Files in exo.iife.min.js:

  • ./src/rendering/filters/shaders/bloom-threshold.wgsl → Total Size: 769 bytes

  • ./src/rendering/filters/shaders/bloom-threshold.frag → Total Size: 699 bytes

  • ./src/rendering/filters/BloomFilter.ts → Total Size: 10.43kB

view changes for bundle: exojs-physics-esm

Assets Changed:

Asset Name Size Change Total Size Change (%)
PhysicsWorld.js 2.15kB 45.22kB 4.99%
PhysicsBody.js 553 bytes 20.06kB 2.84%
Collider.js 399 bytes 9.75kB 4.27%
broadphase/AabbTreeBroadPhase.js 1.33kB 7.56kB 21.33% ⚠️
joints/Joint.js 239 bytes 2.21kB 12.13% ⚠️
view changes for bundle: site-server-esm

Assets Changed:

Asset Name Size Change Total Size Change (%)
chunks/_astro_data-layer-content_DLCp09Ua.mjs (New) 7.81MB 7.81MB 100.0% 🚀
chunks/example-sources_DCSEJmFf.mjs (New) 1.59MB 1.59MB 100.0% 🚀
chunks/bench-profiles_DluUr6jj.mjs (New) 364.07kB 364.07kB 100.0% 🚀
prerender-entry.BcRdRMg3.mjs (New) 231.17kB 231.17kB 100.0% 🚀
chunks/backend-comparison_Cus93OAB.mjs (New) 199.19kB 199.19kB 100.0% 🚀
chunks/audio-effects_WXJ6GyUg.mjs (New) 157.49kB 157.49kB 100.0% 🚀
chunks/writing-your-own-transition_DObYXqd4.mjs (New) 155.46kB 155.46kB 100.0% 🚀
chunks/text_CyLUFLsS.mjs (New) 152.43kB 152.43kB 100.0% 🚀
chunks/animation_CeLUix5E.mjs (New) 142.19kB 142.19kB 100.0% 🚀
chunks/infinite-maps_Cx6lBgey.mjs (New) 141.61kB 141.61kB 100.0% 🚀
chunks/spatial-audio_D0MQ0Hui.mjs (New) 137.74kB 137.74kB 100.0% 🚀
chunks/filters_qC_P3C9g.mjs (New) 120.05kB 120.05kB 100.0% 🚀
chunks/custom-mesh-shaders_Cd_0XvTC.mjs (New) 111.48kB 111.48kB 100.0% 🚀
chunks/audio-basics_DUmBz2CS.mjs (New) 109.42kB 109.42kB 100.0% 🚀
chunks/loading-and-resources_wZ12xfwm.mjs (New) 104.46kB 104.46kB 100.0% 🚀
chunks/graphics_8P9tkUm7.mjs (New) 102.13kB 102.13kB 100.0% 🚀
chunks/application_AQQ-wkLR.mjs (New) 101.56kB 101.56kB 100.0% 🚀
chunks/gamepad_ClSlp5IM.mjs (New) 99.98kB 99.98kB 100.0% 🚀
chunks/ui-and-widgets_BuPnvRJO.mjs (New) 97.2kB 97.2kB 100.0% 🚀
chunks/particles_Cpvj5APB.mjs (New) 94.61kB 94.61kB 100.0% 🚀
chunks/immediate-mode_PKQoCHR2.mjs (New) 92.77kB 92.77kB 100.0% 🚀
chunks/beat-detection_Bk0tRIIO.mjs (New) 83.95kB 83.95kB 100.0% 🚀
chunks/gameplay-collision_DxLuiPV0.mjs (New) 78.98kB 78.98kB 100.0% 🚀
chunks/render-targets_BytGKLBB.mjs (New) 72.46kB 72.46kB 100.0% 🚀
chunks/mouse-and-pointer_B_dcsB3Q.mjs (New) 71.45kB 71.45kB 100.0% 🚀
chunks/ExampleBrowser_C1k3gm-p.mjs (New) 69.05kB 69.05kB 100.0% 🚀
chunks/debugging-and-inspection_CJ1UVlC2.mjs (New) 67.4kB 67.4kB 100.0% 🚀
chunks/sprites_BEQwnl4L.mjs (New) 65.21kB 65.21kB 100.0% 🚀
chunks/_virtual_astro_get-image_D1tRDjKB.mjs (New) 54.78kB 54.78kB 100.0% 🚀
chunks/keyboard-and-actions_D-0kHIQT.mjs (New) 52.98kB 52.98kB 100.0% 🚀
chunks/AppShell__EI7KXtK.mjs (New) 50.01kB 50.01kB 100.0% 🚀
chunks/audio-reactive-visualization_C9KcovjD.mjs (New) 44.6kB 44.6kB 100.0% 🚀
chunks/troubleshooting_BiYIWk6U.mjs (New) 44.55kB 44.55kB 100.0% 🚀
chunks/scene-graph_ENmQ2pTT.mjs (New) 43.01kB 43.01kB 100.0% 🚀
chunks/custom-renderers_oiLZZojS.mjs (New) 42.4kB 42.4kB 100.0% 🚀
chunks/resize-dpr-and-canvas_CeJjCrCw.mjs (New) 39.66kB 39.66kB 100.0% 🚀
chunks/BenchFullResultsPage_CZcAu9ta.mjs (New) 36.11kB 36.11kB 100.0% 🚀
chunks/scenes-and-lifecycle_DL61XQ5q.mjs (New) 35.13kB 35.13kB 100.0% 🚀
chunks/EditorCode_DsDlN0_B.mjs (New) 30.66kB 30.66kB 100.0% 🚀
chunks/performance_CRVCr1nh.mjs (New) 29.36kB 29.36kB 100.0% 🚀
chunks/retained-containers_wg4J72Zq.mjs (New) 25.49kB 25.49kB 100.0% 🚀
chunks/_astro_content_DuvYwu0n.mjs (New) 24.59kB 24.59kB 100.0% 🚀
chunks/DocsLayout_DY2bBvdU.mjs (New) 23.91kB 23.91kB 100.0% 🚀
chunks/build-orb-dodge_HCoqqY87.mjs (New) 23.02kB 23.02kB 100.0% 🚀
chunks/your-first-scene_BUX4lni_.mjs (New) 21.01kB 21.01kB 100.0% 🚀
chunks/BenchmarksPage_DFoVv4Jk.mjs (New) 18.57kB 18.57kB 100.0% 🚀
chunks/post-processing_COJg42PT.mjs (New) 17.44kB 17.44kB 100.0% 🚀
chunks/HomePage_BAPATO14.mjs (New) 17.0kB 17.0kB 100.0% 🚀
chunks/coordinates-and-views_DEWfDbXU.mjs (New) 15.95kB 15.95kB 100.0% 🚀
chunks/ApiSymbolPage_U-HpIlr0.mjs (New) 15.45kB 15.45kB 100.0% 🚀
chunks/GuideChapterPage_DlXY5FA5.mjs (New) 13.16kB 13.16kB 100.0% 🚀
chunks/cinematics_B6NoWbdq.mjs (New) 12.7kB 12.7kB 100.0% 🚀
chunks/ApiAllPage_BdFmXDFH.mjs (New) 12.06kB 12.06kB 100.0% 🚀
chunks/pause-menu_DER_2Gof.mjs (New) 10.73kB 10.73kB 100.0% 🚀
chunks/game-feel_C1vb6Ja9.mjs (New) 10.15kB 10.15kB 100.0% 🚀
chunks/audio-reactive-scene_D1LvC4vF.mjs (New) 10.11kB 10.11kB 100.0% 🚀
chunks/hud-overlay_B-aCokZw.mjs (New) 9.69kB 9.69kB 100.0% 🚀
chunks/ui-patterns_QTg5PkkD.mjs (New) 9.06kB 9.06kB 100.0% 🚀
chunks/camera-follow-and-parallax_DnFvQ31f.mjs (New) 9.0kB 9.0kB 100.0% 🚀
chunks/GuideIndexPage_CFN-unvQ.mjs (New) 8.4kB 8.4kB 100.0% 🚀
chunks/ApiIndexPage_CL_ksn1A.mjs (New) 8.32kB 8.32kB 100.0% 🚀
chunks/split-screen_oN73gLma.mjs (New) 7.96kB 7.96kB 100.0% 🚀
_astro/BenchmarksPage.BQpYbRZ5.css (New) 7.83kB 7.83kB 100.0% 🚀
chunks/content-modules_BsO60_Uz.mjs (New) 6.77kB 6.77kB 100.0% 🚀
chunks/sharp_CnJuWbxC.mjs (New) 5.37kB 5.37kB 100.0% 🚀
chunks/ExamplePreview_zmLRJPnP.mjs (New) 3.15kB 3.15kB 100.0% 🚀
chunks/TryIt_DFi468Qy.mjs (New) 2.81kB 2.81kB 100.0% 🚀
chunks/GuidePartRedirect_CPHwOV77.mjs (New) 1.94kB 1.94kB 100.0% 🚀
chunks/index_DgPs63BJ.mjs (New) 1.61kB 1.61kB 100.0% 🚀
chunks/index_DsxuP7Gh.mjs (New) 1.61kB 1.61kB 100.0% 🚀
chunks/index_Cnbx3fEZ.mjs (New) 1.44kB 1.44kB 100.0% 🚀
chunks/index_fJuAiU5Q.mjs (New) 1.44kB 1.44kB 100.0% 🚀
chunks/index_CW_GvHGT.mjs (New) 1.41kB 1.41kB 100.0% 🚀
chunks/index_DRL8PT8h.mjs (New) 1.41kB 1.41kB 100.0% 🚀
chunks/_symbol__IACatxy-.mjs (New) 1.41kB 1.41kB 100.0% 🚀
chunks/_symbol__NlwMwaxb.mjs (New) 1.41kB 1.41kB 100.0% 🚀
chunks/index_BiDJqcIY.mjs (New) 1.03kB 1.03kB 100.0% 🚀
chunks/index_lJnXZxO9.mjs (New) 1.03kB 1.03kB 100.0% 🚀
chunks/index_Blyo0CFF.mjs (New) 992 bytes 992 bytes 100.0% 🚀
chunks/index_CVfDbmiF.mjs (New) 992 bytes 992 bytes 100.0% 🚀
chunks/index_BHSu48VR.mjs (New) 957 bytes 957 bytes 100.0% 🚀
chunks/index_ZZ9yZl3S.mjs (New) 957 bytes 957 bytes 100.0% 🚀
chunks/index_CzNr8Uv7.mjs (New) 935 bytes 935 bytes 100.0% 🚀
chunks/index_r109hoPR.mjs (New) 935 bytes 935 bytes 100.0% 🚀
chunks/all_DLQpKrYm.mjs (New) 919 bytes 919 bytes 100.0% 🚀
chunks/all_pRFiqC-G.mjs (New) 919 bytes 919 bytes 100.0% 🚀
chunks/index_Dv15mTy9.mjs (New) 897 bytes 897 bytes 100.0% 🚀
chunks/index_RXhOr1Fh.mjs (New) 897 bytes 897 bytes 100.0% 🚀
chunks/audio-reactive-visualization_B3C92VUJ.mjs (New) 381 bytes 381 bytes 100.0% 🚀
chunks/writing-your-own-transition_DVHzB0Tx.mjs (New) 381 bytes 381 bytes 100.0% 🚀
chunks/camera-follow-and-parallax_C2JNKtrf.mjs (New) 379 bytes 379 bytes 100.0% 🚀
chunks/debugging-and-inspection_Dl7X2qcC.mjs (New) 377 bytes 377 bytes 100.0% 🚀
chunks/resize-dpr-and-canvas_BX4O2ta9.mjs (New) 377 bytes 377 bytes 100.0% 🚀
chunks/coordinates-and-views_B-maGODq.mjs (New) 369 bytes 369 bytes 100.0% 🚀
chunks/loading-and-resources_BmCun6fk.mjs (New) 368 bytes 368 bytes 100.0% 🚀
chunks/audio-reactive-scene_fgJhzoWK.mjs (New) 367 bytes 367 bytes 100.0% 🚀
chunks/retained-containers_BRdW5R0x.mjs (New) 367 bytes 367 bytes 100.0% 🚀
chunks/scenes-and-lifecycle_Dq9iDRGr.mjs (New) 367 bytes 367 bytes 100.0% 🚀
chunks/your-first-scene_C5LHDnSK.mjs (New) 367 bytes 367 bytes 100.0% 🚀
chunks/backend-comparison_C4xQB6gQ.mjs (New) 365 bytes 365 bytes 100.0% 🚀
chunks/custom-mesh-shaders_BT6MgMdP.mjs (New) 365 bytes 365 bytes 100.0% 🚀
chunks/keyboard-and-actions_CjdQAH_M.mjs (New) 365 bytes 365 bytes 100.0% 🚀
chunks/gameplay-collision_Bnbv7Hf1.mjs (New) 363 bytes 363 bytes 100.0% 🚀
chunks/custom-renderers_Dtr2z4rX.mjs (New) 361 bytes 361 bytes 100.0% 🚀
chunks/mouse-and-pointer_CANKkEDk.mjs (New) 359 bytes 359 bytes 100.0% 🚀
chunks/troubleshooting_DUbMcMzZ.mjs (New) 358 bytes 358 bytes 100.0% 🚀
chunks/build-orb-dodge_BngFlCi3.mjs (New) 357 bytes 357 bytes 100.0% 🚀
chunks/immediate-mode_B1WuSwDB.mjs (New) 357 bytes 357 bytes 100.0% 🚀
chunks/post-processing_DwEMyxNM.mjs (New) 357 bytes 357 bytes 100.0% 🚀
chunks/render-targets_XrTsE9jd.mjs (New) 357 bytes 357 bytes 100.0% 🚀
chunks/infinite-maps_NYHoBwOn.mjs (New) 355 bytes 355 bytes 100.0% 🚀
chunks/ui-and-widgets_DxnVVFp3.mjs (New) 355 bytes 355 bytes 100.0% 🚀
chunks/beat-detection_D8OpcOVh.mjs (New) 353 bytes 353 bytes 100.0% 🚀
chunks/audio-effects_BEDiptNQ.mjs (New) 351 bytes 351 bytes 100.0% 🚀
chunks/performance_B_bQQ85L.mjs (New) 351 bytes 351 bytes 100.0% 🚀
chunks/spatial-audio_CQNnY9Sl.mjs (New) 351 bytes 351 bytes 100.0% 🚀
chunks/split-screen_CZZuBoPW.mjs (New) 351 bytes 351 bytes 100.0% 🚀
chunks/application_Dsh0ADsm.mjs (New) 349 bytes 349 bytes 100.0% 🚀
chunks/audio-basics_Cz941cPd.mjs (New) 349 bytes 349 bytes 100.0% 🚀
chunks/hud-overlay_BgyketQg.mjs (New) 349 bytes 349 bytes 100.0% 🚀
chunks/scene-graph_nPkompHM.mjs (New) 349 bytes 349 bytes 100.0% 🚀
chunks/ui-patterns_3dvq1yoz.mjs (New) 349 bytes 349 bytes 100.0% 🚀
chunks/animation_BTf_SEi4.mjs (New) 347 bytes 347 bytes 100.0% 🚀
chunks/cinematics_Do82qfg3.mjs (New) 347 bytes 347 bytes 100.0% 🚀
chunks/pause-menu_B_G3t3LU.mjs (New) 347 bytes 347 bytes 100.0% 🚀
chunks/game-feel_t__Soitv.mjs (New) 345 bytes 345 bytes 100.0% 🚀
chunks/graphics_CajDmjqz.mjs (New) 345 bytes 345 bytes 100.0% 🚀
chunks/particles_Bsbeqh-w.mjs (New) 345 bytes 345 bytes 100.0% 🚀
chunks/sprites_YoqoraGQ.mjs (New) 343 bytes 343 bytes 100.0% 🚀
chunks/filters_D6mmKZ92.mjs (New) 341 bytes 341 bytes 100.0% 🚀
chunks/gamepad_DErg2wAc.mjs (New) 339 bytes 339 bytes 100.0% 🚀
chunks/text_B9qgU2e1.mjs (New) 337 bytes 337 bytes 100.0% 🚀
chunks/_astro_data-layer-content_CpOhO8zj.mjs (Deleted) -7.76MB 0 bytes -100.0% 🗑️
chunks/example-sources_D1xhuWWb.mjs (Deleted) -1.58MB 0 bytes -100.0% 🗑️
chunks/bench-profiles_DT8UmwSE.mjs (Deleted) -363.3kB 0 bytes -100.0% 🗑️
prerender-entry.DsRATGCm.mjs (Deleted) -232.96kB 0 bytes -100.0% 🗑️
chunks/backend-comparison_p9Nr0gX3.mjs (Deleted) -199.19kB 0 bytes -100.0% 🗑️
chunks/audio-effects_BQ7S0yrK.mjs (Deleted) -157.49kB 0 bytes -100.0% 🗑️
chunks/writing-your-own-transition_CQYSyyvQ.mjs (Deleted) -155.46kB 0 bytes -100.0% 🗑️
chunks/text_BGBnMCgd.mjs (Deleted) -152.43kB 0 bytes -100.0% 🗑️
chunks/animation_BpGK0YFI.mjs (Deleted) -142.19kB 0 bytes -100.0% 🗑️
chunks/infinite-maps_CI9ku00e.mjs (Deleted) -141.61kB 0 bytes -100.0% 🗑️
chunks/spatial-audio_YhngOhqZ.mjs (Deleted) -137.74kB 0 bytes -100.0% 🗑️
chunks/custom-mesh-shaders_aolJcqzP.mjs (Deleted) -111.48kB 0 bytes -100.0% 🗑️
chunks/filters_DhVOI54P.mjs (Deleted) -110.35kB 0 bytes -100.0% 🗑️
chunks/audio-basics_iwql1dAr.mjs (Deleted) -109.42kB 0 bytes -100.0% 🗑️
chunks/loading-and-resources_-zVxpYwH.mjs (Deleted) -104.46kB 0 bytes -100.0% 🗑️
chunks/graphics_92Fh1ysa.mjs (Deleted) -102.13kB 0 bytes -100.0% 🗑️
chunks/application_BNDGvPg3.mjs (Deleted) -101.56kB 0 bytes -100.0% 🗑️
chunks/gamepad_qHmIy8Nr.mjs (Deleted) -99.98kB 0 bytes -100.0% 🗑️
chunks/ui-and-widgets_CF2Cx6TH.mjs (Deleted) -97.2kB 0 bytes -100.0% 🗑️
chunks/particles_DFI3Mw6s.mjs (Deleted) -94.61kB 0 bytes -100.0% 🗑️
chunks/immediate-mode_4WsjsU6m.mjs (Deleted) -92.77kB 0 bytes -100.0% 🗑️
chunks/beat-detection_DwQOgTyo.mjs (Deleted) -83.95kB 0 bytes -100.0% 🗑️
chunks/gameplay-collision_AZ_BRgFO.mjs (Deleted) -78.98kB 0 bytes -100.0% 🗑️
chunks/mouse-and-pointer_C0oZ1z8C.mjs (Deleted) -71.45kB 0 bytes -100.0% 🗑️
chunks/ExampleBrowser_LI5sMBxn.mjs (Deleted) -69.05kB 0 bytes -100.0% 🗑️
chunks/debugging-and-inspection_BPj-2Yol.mjs (Deleted) -67.4kB 0 bytes -100.0% 🗑️
chunks/sprites_BMP91ym9.mjs (Deleted) -65.21kB 0 bytes -100.0% 🗑️
chunks/render-targets_xGDSTa8z.mjs (Deleted) -59.28kB 0 bytes -100.0% 🗑️
chunks/_virtual_astro_get-image_DlsCB1pX.mjs (Deleted) -54.78kB 0 bytes -100.0% 🗑️
chunks/keyboard-and-actions_CKhMX5db.mjs (Deleted) -52.98kB 0 bytes -100.0% 🗑️
chunks/AppShell_CE8yl84_.mjs (Deleted) -49.85kB 0 bytes -100.0% 🗑️
chunks/audio-reactive-visualization_buQ-BIZP.mjs (Deleted) -44.6kB 0 bytes -100.0% 🗑️
chunks/troubleshooting_Cq1BV9ce.mjs (Deleted) -44.55kB 0 bytes -100.0% 🗑️
chunks/scene-graph_DJjq8yO6.mjs (Deleted) -43.01kB 0 bytes -100.0% 🗑️
chunks/custom-renderers_DGRhAJgN.mjs (Deleted) -42.4kB 0 bytes -100.0% 🗑️
chunks/resize-dpr-and-canvas_BDj13NvV.mjs (Deleted) -39.66kB 0 bytes -100.0% 🗑️
chunks/BenchFullResultsPage_DeT1EY70.mjs (Deleted) -36.23kB 0 bytes -100.0% 🗑️
chunks/BenchmarksPage_BXS4Lj07.mjs (Deleted) -35.6kB 0 bytes -100.0% 🗑️
chunks/scenes-and-lifecycle_R0qR1MZj.mjs (Deleted) -35.13kB 0 bytes -100.0% 🗑️
chunks/EditorCode_Dz3G54au.mjs (Deleted) -30.66kB 0 bytes -100.0% 🗑️
chunks/performance_VVoubon6.mjs (Deleted) -29.36kB 0 bytes -100.0% 🗑️
chunks/retained-containers_CnYohNjO.mjs (Deleted) -25.49kB 0 bytes -100.0% 🗑️
chunks/_astro_content_TB_Wp5lG.mjs (Deleted) -24.59kB 0 bytes -100.0% 🗑️
chunks/DocsLayout_CxNJ1tNn.mjs (Deleted) -23.91kB 0 bytes -100.0% 🗑️
chunks/build-orb-dodge_DTxeSdXQ.mjs (Deleted) -23.02kB 0 bytes -100.0% 🗑️
chunks/your-first-scene_BgeyQm1o.mjs (Deleted) -21.01kB 0 bytes -100.0% 🗑️
chunks/post-processing_Db0Z62tr.mjs (Deleted) -17.44kB 0 bytes -100.0% 🗑️
chunks/HomePage_C8BNQDKf.mjs (Deleted) -17.0kB 0 bytes -100.0% 🗑️
chunks/coordinates-and-views_D7K9oyFM.mjs (Deleted) -15.95kB 0 bytes -100.0% 🗑️
chunks/ApiSymbolPage_BQIVEfO_.mjs (Deleted) -15.45kB 0 bytes -100.0% 🗑️
chunks/BenchMethodologyPage_CaLVSrjK.mjs (Deleted) -14.86kB 0 bytes -100.0% 🗑️
_astro/BenchmarksPage.BYgjV7Un.css (Deleted) -14.0kB 0 bytes -100.0% 🗑️
chunks/GuideChapterPage_DzrCw5Eb.mjs (Deleted) -13.16kB 0 bytes -100.0% 🗑️
chunks/cinematics_Cw9QsvlM.mjs (Deleted) -12.7kB 0 bytes -100.0% 🗑️
chunks/ApiAllPage_BmiIvqU0.mjs (Deleted) -12.06kB 0 bytes -100.0% 🗑️
chunks/pause-menu_CjOWJkI0.mjs (Deleted) -10.73kB 0 bytes -100.0% 🗑️
chunks/game-feel_D9rEwDEQ.mjs (Deleted) -10.15kB 0 bytes -100.0% 🗑️
chunks/audio-reactive-scene_BOeU4ZjZ.mjs (Deleted) -10.11kB 0 bytes -100.0% 🗑️
chunks/hud-overlay_D5fyK3hx.mjs (Deleted) -9.69kB 0 bytes -100.0% 🗑️
chunks/ui-patterns_VnmkGRMK.mjs (Deleted) -9.06kB 0 bytes -100.0% 🗑️
chunks/camera-follow-and-parallax_Dlo4nIRe.mjs (Deleted) -9.0kB 0 bytes -100.0% 🗑️
chunks/GuideIndexPage_D-kr8pQB.mjs (Deleted) -8.4kB 0 bytes -100.0% 🗑️
chunks/ApiIndexPage_BxpuIjMt.mjs (Deleted) -8.32kB 0 bytes -100.0% 🗑️
chunks/split-screen_DYcLQpKU.mjs (Deleted) -7.96kB 0 bytes -100.0% 🗑️
chunks/content-modules_CKabfthl.mjs (Deleted) -6.77kB 0 bytes -100.0% 🗑️
chunks/sharp_BKe_2EUq.mjs (Deleted) -5.37kB 0 bytes -100.0% 🗑️
chunks/ExamplePreview_CQm1p3oZ.mjs (Deleted) -3.15kB 0 bytes -100.0% 🗑️
chunks/TryIt_BO1B2W9U.mjs (Deleted) -2.81kB 0 bytes -100.0% 🗑️
chunks/GuidePartRedirect_COYZ3WGk.mjs (Deleted) -1.94kB 0 bytes -100.0% 🗑️
chunks/index_DIfoeIev.mjs (Deleted) -1.61kB 0 bytes -100.0% 🗑️
chunks/index_DuhyR2Pp.mjs (Deleted) -1.61kB 0 bytes -100.0% 🗑️
chunks/index_BIAqiF9E.mjs (Deleted) -1.44kB 0 bytes -100.0% 🗑️
chunks/index_Ck6c5GyG.mjs (Deleted) -1.44kB 0 bytes -100.0% 🗑️
chunks/index_BCF0cjyJ.mjs (Deleted) -1.41kB 0 bytes -100.0% 🗑️
chunks/index_DWHiIpg4.mjs (Deleted) -1.41kB 0 bytes -100.0% 🗑️
chunks/_symbol__6XGkWky3.mjs (Deleted) -1.41kB 0 bytes -100.0% 🗑️
chunks/_symbol__CzT6T_FL.mjs (Deleted) -1.41kB 0 bytes -100.0% 🗑️
chunks/index_BMo1ZL2X.mjs (Deleted) -1.08kB 0 bytes -100.0% 🗑️
chunks/index_Dtan6yux.mjs (Deleted) -1.08kB 0 bytes -100.0% 🗑️
chunks/index_DQoPEnsf.mjs (Deleted) -1.03kB 0 bytes -100.0% 🗑️
chunks/index_uMhzrZtF.mjs (Deleted) -1.03kB 0 bytes -100.0% 🗑️
chunks/index_DD37mAkN.mjs (Deleted) -992 bytes 0 bytes -100.0% 🗑️
chunks/index_TcStoHAU.mjs (Deleted) -992 bytes 0 bytes -100.0% 🗑️
chunks/index_CHSAZR3K.mjs (Deleted) -957 bytes 0 bytes -100.0% 🗑️
chunks/index_DCM4Ga_T.mjs (Deleted) -957 bytes 0 bytes -100.0% 🗑️
chunks/index_BbzkabKv.mjs (Deleted) -935 bytes 0 bytes -100.0% 🗑️
chunks/index_BvL7ayzL.mjs (Deleted) -935 bytes 0 bytes -100.0% 🗑️
chunks/all_BLVBHIc2.mjs (Deleted) -919 bytes 0 bytes -100.0% 🗑️
chunks/all_BaC3RMID.mjs (Deleted) -919 bytes 0 bytes -100.0% 🗑️
chunks/index_CHhA3Pfh.mjs (Deleted) -897 bytes 0 bytes -100.0% 🗑️
chunks/index_DCjitynC.mjs (Deleted) -897 bytes 0 bytes -100.0% 🗑️
chunks/audio-reactive-visualization_hOKzn2op.mjs (Deleted) -381 bytes 0 bytes -100.0% 🗑️
chunks/writing-your-own-transition_DmSlb8dH.mjs (Deleted) -381 bytes 0 bytes -100.0% 🗑️
chunks/camera-follow-and-parallax_CwY2mM_z.mjs (Deleted) -379 bytes 0 bytes -100.0% 🗑️
chunks/debugging-and-inspection_C6noTwKC.mjs (Deleted) -377 bytes 0 bytes -100.0% 🗑️
chunks/resize-dpr-and-canvas_B_Y3e5se.mjs (Deleted) -377 bytes 0 bytes -100.0% 🗑️
chunks/coordinates-and-views_DI04u3UI.mjs (Deleted) -369 bytes 0 bytes -100.0% 🗑️
chunks/loading-and-resources_CRTIw_Gv.mjs (Deleted) -368 bytes 0 bytes -100.0% 🗑️
chunks/audio-reactive-scene_CKq4MKEW.mjs (Deleted) -367 bytes 0 bytes -100.0% 🗑️
chunks/retained-containers_BJl0SI5H.mjs (Deleted) -367 bytes 0 bytes -100.0% 🗑️
chunks/scenes-and-lifecycle_B5RRIljr.mjs (Deleted) -367 bytes 0 bytes -100.0% 🗑️
chunks/your-first-scene_BM8UwXWS.mjs (Deleted) -367 bytes 0 bytes -100.0% 🗑️
chunks/backend-comparison_BCcJ3Y_Z.mjs (Deleted) -365 bytes 0 bytes -100.0% 🗑️
chunks/custom-mesh-shaders_Cst76Atz.mjs (Deleted) -365 bytes 0 bytes -100.0% 🗑️
chunks/keyboard-and-actions_CVt59_rE.mjs (Deleted) -365 bytes 0 bytes -100.0% 🗑️
chunks/gameplay-collision_CMxBkybf.mjs (Deleted) -363 bytes 0 bytes -100.0% 🗑️
chunks/custom-renderers_BpzUMMVx.mjs (Deleted) -361 bytes 0 bytes -100.0% 🗑️
chunks/mouse-and-pointer_BDyatimq.mjs (Deleted) -359 bytes 0 bytes -100.0% 🗑️
chunks/troubleshooting_CR2oLOQk.mjs (Deleted) -358 bytes 0 bytes -100.0% 🗑️
chunks/build-orb-dodge_BSAUacI_.mjs (Deleted) -357 bytes 0 bytes -100.0% 🗑️
chunks/immediate-mode_BTSfKwqh.mjs (Deleted) -357 bytes 0 bytes -100.0% 🗑️
chunks/post-processing_DT0vR6_0.mjs (Deleted) -357 bytes 0 bytes -100.0% 🗑️
chunks/render-targets_CmsruxJY.mjs (Deleted) -357 bytes 0 bytes -100.0% 🗑️
chunks/infinite-maps_AMhxnAZS.mjs (Deleted) -355 bytes 0 bytes -100.0% 🗑️
chunks/ui-and-widgets_Bl0Jva3S.mjs (Deleted) -355 bytes 0 bytes -100.0% 🗑️
chunks/beat-detection_CaVwN70P.mjs (Deleted) -353 bytes 0 bytes -100.0% 🗑️
chunks/audio-effects_W_CNAVjs.mjs (Deleted) -351 bytes 0 bytes -100.0% 🗑️
chunks/performance_DuhJoK89.mjs (Deleted) -351 bytes 0 bytes -100.0% 🗑️
chunks/spatial-audio_C7oNGz94.mjs (Deleted) -351 bytes 0 bytes -100.0% 🗑️
chunks/split-screen_BJqvLUyY.mjs (Deleted) -351 bytes 0 bytes -100.0% 🗑️
chunks/application_C-ssjlDB.mjs (Deleted) -349 bytes 0 bytes -100.0% 🗑️
chunks/audio-basics_C8h3bafd.mjs (Deleted) -349 bytes 0 bytes -100.0% 🗑️
chunks/hud-overlay_DaooOBmW.mjs (Deleted) -349 bytes 0 bytes -100.0% 🗑️
chunks/scene-graph_DgjJ6ReL.mjs (Deleted) -349 bytes 0 bytes -100.0% 🗑️
chunks/ui-patterns_ds5idfGS.mjs (Deleted) -349 bytes 0 bytes -100.0% 🗑️
chunks/animation_Cy1TQZ7a.mjs (Deleted) -347 bytes 0 bytes -100.0% 🗑️
chunks/cinematics_DLvQqXUQ.mjs (Deleted) -347 bytes 0 bytes -100.0% 🗑️
chunks/pause-menu_D19u_rvs.mjs (Deleted) -347 bytes 0 bytes -100.0% 🗑️
chunks/game-feel_Bik_F2TZ.mjs (Deleted) -345 bytes 0 bytes -100.0% 🗑️
chunks/graphics_CbBXRaA3.mjs (Deleted) -345 bytes 0 bytes -100.0% 🗑️
chunks/particles_B0h5jbP5.mjs (Deleted) -345 bytes 0 bytes -100.0% 🗑️
chunks/sprites_BaepZDLS.mjs (Deleted) -343 bytes 0 bytes -100.0% 🗑️
chunks/filters_J4InA3qX.mjs (Deleted) -341 bytes 0 bytes -100.0% 🗑️
chunks/gamepad_zcu9NT2m.mjs (Deleted) -339 bytes 0 bytes -100.0% 🗑️
chunks/text_DavINqop.mjs (Deleted) -337 bytes 0 bytes -100.0% 🗑️
_astro/BenchMethodologyPage.Y335Zj9A.css (Deleted) -162 bytes 0 bytes -100.0% 🗑️

Files in chunks/filters_qC_P3C9g.mjs:

  • ./src/content/guide/effects/filters.mdx → Total Size: 119.51kB

App Routes Affected:

App Route Size Change Total Size Change (%)
/de/benchmarks/methodology (Deleted) -1.08kB 0 bytes -100.0% 🗑️
/en/benchmarks/methodology (Deleted) -1.08kB 0 bytes -100.0% 🗑️
view changes for bundle: exo-full-iife-min-Exo-iife

Assets Changed:

Asset Name Size Change Total Size Change (%)
exo.full.iife.min.js 15.57kB 2.0MB 0.79%
view changes for bundle: exo-esm-modules-esm

Assets Changed:

Asset Name Size Change Total Size Change (%)
rendering/webgpu/WebGpuBackend.js 4.25kB 96.03kB 4.63%
rendering/webgl2/WebGl2Backend.js 4.04kB 83.5kB 5.09% ⚠️
rendering/webgpu/WebGpuMeshRenderer.js 1.86kB 76.16kB 2.5%
rendering/webgl2/WebGl2MeshRenderer.js 427 bytes 36.89kB 1.17%
index.js 161 bytes 21.89kB 0.74%
rendering/webgpu/WebGpuPassCoordinator.js 2.31kB 14.75kB 18.54% ⚠️
rendering/webgpu/userUniforms.js 209 bytes 11.79kB 1.8%
rendering/filters/BloomFilter.js (New) 10.88kB 10.88kB 100.0% 🚀
rendering/webgpu/WebGpuStencilClipper.js 48 bytes 9.5kB 0.51%
rendering/material/MaterialKey.js 82 bytes 8.87kB 0.93%
rendering/RenderTarget.js 1.19kB 6.5kB 22.48% ⚠️
rendering/texture/RenderTexture.js 85 bytes 4.36kB 1.99%
rendering/MultiRenderTarget.js 57 bytes 3.63kB 1.59%
rendering/texture/DepthTexture.js (New) 3.28kB 3.28kB 100.0% 🚀
rendering/material/MeshMaterial.js 710 bytes 2.23kB 46.71% ⚠️
rendering/webgpu/stencilState.js 877 bytes 2.12kB 70.67% ⚠️
rendering/filters/shaders/bloom-threshold.frag.js (New) 1.95kB 1.95kB 100.0% 🚀
rendering/filters/shaders/bloom-threshold.wgsl.js (New) 1.75kB 1.75kB 100.0% 🚀

Files in rendering/filters/BloomFilter.js:

  • ./src/rendering/filters/BloomFilter.ts → Total Size: 10.17kB

Files in rendering/filters/shaders/bloom-threshold.frag.js:

  • ./src/rendering/filters/shaders/bloom-threshold.frag → Total Size: 1.85kB

Files in rendering/filters/shaders/bloom-threshold.wgsl.js:

  • ./src/rendering/filters/shaders/bloom-threshold.wgsl → Total Size: 1.65kB
view changes for bundle: exo-iife-Exo-iife

Assets Changed:

Asset Name Size Change Total Size Change (%)
exo.iife.js 33.19kB 3.55MB 0.94%

Files in exo.iife.js:

  • ./src/rendering/filters/BloomFilter.ts → Total Size: 10.43kB

  • ./src/rendering/filters/shaders/bloom-threshold.wgsl → Total Size: 1.65kB

  • ./src/rendering/filters/shaders/bloom-threshold.frag → Total Size: 1.86kB

view changes for bundle: exo-full-iife-Exo-iife

Assets Changed:

Asset Name Size Change Total Size Change (%)
exo.full.iife.js 43.25kB 5.5MB 0.79%

@codecov

codecov Bot commented Sep 16, 2026

Copy link
Copy Markdown

❌ 1 Tests Failed:

Tests completed Failed Passed Skipped
14242 1 14241 15
View the top 1 failed test(s) by shortest run time
test/rendering/parity/matrix.test.ts > filter/bloom-halo > cross-backend-parity
Stack Traces | 1.07s run time
AssertionError: backends differ by 2 on at least one channel
 ❯ .../rendering/parity/runner.ts:93:55

To view more test analytics, go to the Test Analytics Dashboard
📋 Got 3 mins? Take this short survey to help us improve Test Analytics.

@Exoridus
Exoridus merged commit b07d968 into next Sep 16, 2026
17 checks passed
@Exoridus
Exoridus deleted the feat/bloom-render-pass branch September 16, 2026 02:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant