From 9b5ec32f197118a4691488c2099b3a425200c114 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?charlotte=20=F0=9F=8C=B8?= Date: Wed, 22 Apr 2026 08:55:58 -0700 Subject: [PATCH 1/9] Switch where assets are registered. --- crates/processing_render/src/lib.rs | 16 +--------------- src/lib.rs | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/crates/processing_render/src/lib.rs b/crates/processing_render/src/lib.rs index dc188dc..43a500b 100644 --- a/crates/processing_render/src/lib.rs +++ b/crates/processing_render/src/lib.rs @@ -18,7 +18,7 @@ pub mod transform; use std::path::PathBuf; use bevy::{ - asset::{AssetEventSystems, io::AssetSourceBuilder}, + asset::AssetEventSystems, prelude::*, render::render_resource::{Extent3d, TextureFormat}, }; @@ -43,23 +43,9 @@ impl Plugin for ProcessingRenderPlugin { let config = app.world().resource::().clone(); - if let Some(asset_path) = config.get(ConfigKey::AssetRootPath) { - app.register_asset_source( - "assets_directory", - AssetSourceBuilder::platform_default(asset_path, None), - ); - } - let has_sketch_file = config .get(ConfigKey::SketchFileName) .is_some_and(|f| !f.is_empty()); - if has_sketch_file && let Some(sketch_path) = config.get(ConfigKey::SketchRootPath) { - app.register_asset_source( - "sketch_directory", - AssetSourceBuilder::platform_default(sketch_path, None), - ); - } - if has_sketch_file { app.add_plugins(sketch::LivecodePlugin); } diff --git a/src/lib.rs b/src/lib.rs index 55e3678..9f00d06 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -3,6 +3,7 @@ pub mod prelude; use std::num::NonZero; use bevy::app::{App, AppExit}; +use bevy::asset::{AssetApp, io::AssetSourceBuilder}; use bevy::prelude::*; use bevy::render::RenderPlugin; @@ -14,6 +15,23 @@ fn create_app(config: Config) -> App { app.insert_resource(config.clone()); + if let Some(asset_path) = config.get(ConfigKey::AssetRootPath) { + app.register_asset_source( + "assets_directory", + AssetSourceBuilder::platform_default(asset_path, None), + ); + } + if config + .get(ConfigKey::SketchFileName) + .is_some_and(|f| !f.is_empty()) + && let Some(sketch_path) = config.get(ConfigKey::SketchRootPath) + { + app.register_asset_source( + "sketch_directory", + AssetSourceBuilder::platform_default(sketch_path, None), + ); + } + #[cfg(not(target_arch = "wasm32"))] let plugins = DefaultPlugins .build() From 1d404c6e9c581925c3dc9f3d69ebc67fa1c71098 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?charlotte=20=F0=9F=8C=B8?= Date: Wed, 22 Apr 2026 10:16:31 -0700 Subject: [PATCH 2/9] Sync globals in size --- crates/processing_pyo3/src/lib.rs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/crates/processing_pyo3/src/lib.rs b/crates/processing_pyo3/src/lib.rs index e4c97c9..530bc94 100644 --- a/crates/processing_pyo3/src/lib.rs +++ b/crates/processing_pyo3/src/lib.rs @@ -793,6 +793,11 @@ mod mewnala { } } + let sys = PyModule::import(py, "sys")?; + let frame = sys.getattr("_getframe")?.call1((0,))?; + let caller_globals = frame.getattr("f_globals")?; + sync_globals(module, &caller_globals)?; + Ok(()) } From 5c6bde87ca72b1e26dadd13f87a90886a5b4c149 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?charlotte=20=F0=9F=8C=B8?= Date: Wed, 22 Apr 2026 10:18:23 -0700 Subject: [PATCH 3/9] Bevy updates. --- Cargo.lock | 555 +++++++++++++++-------------- crates/processing_input/src/lib.rs | 3 + 2 files changed, 298 insertions(+), 260 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d8abaab..5622914 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -137,7 +137,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed7572b7ba83a31e20d1b48970ee402d2e3e0537dcfe0a3ff4d6eb7508617d43" dependencies = [ "alsa-sys", - "bitflags 2.11.0", + "bitflags 2.11.1", "cfg-if 1.0.4", "libc", ] @@ -149,7 +149,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c88dbbce13b232b26250e1e2e6ac18b6a891a646b8148285036ebce260ac5c3" dependencies = [ "alsa-sys", - "bitflags 2.11.0", + "bitflags 2.11.1", "cfg-if 1.0.4", "libc", ] @@ -171,7 +171,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0f2a1bb052857d5dd49572219344a7332b31b76405648eabac5bc68978251bcd" dependencies = [ "android-properties", - "bitflags 2.11.0", + "bitflags 2.11.1", "cc", "jni 0.22.4", "libc", @@ -452,9 +452,9 @@ dependencies = [ [[package]] name = "atomicow" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f52e8890bb9844440d0c412fa74b67fd2f14e85248b6e00708059b6da9e5f8bf" +checksum = "301801c08259e328a1c7da556608c0c22687708831b22024dbd3a57ea741e6de" dependencies = [ "portable-atomic", "portable-atomic-util", @@ -518,7 +518,7 @@ checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "bevy" version = "0.19.0-dev" -source = "git+https://github.com/bevyengine/bevy?branch=main#104a8c35f8c4eee092be656cf62784d6eae0841d" +source = "git+https://github.com/bevyengine/bevy?branch=main#4dc8fb49199fea2065db519fc3f06fdadb5348e1" dependencies = [ "bevy_internal", ] @@ -526,7 +526,7 @@ dependencies = [ [[package]] name = "bevy_a11y" version = "0.19.0-dev" -source = "git+https://github.com/bevyengine/bevy?branch=main#104a8c35f8c4eee092be656cf62784d6eae0841d" +source = "git+https://github.com/bevyengine/bevy?branch=main#4dc8fb49199fea2065db519fc3f06fdadb5348e1" dependencies = [ "accesskit", "bevy_app", @@ -538,7 +538,7 @@ dependencies = [ [[package]] name = "bevy_android" version = "0.19.0-dev" -source = "git+https://github.com/bevyengine/bevy?branch=main#104a8c35f8c4eee092be656cf62784d6eae0841d" +source = "git+https://github.com/bevyengine/bevy?branch=main#4dc8fb49199fea2065db519fc3f06fdadb5348e1" dependencies = [ "android-activity", ] @@ -546,7 +546,7 @@ dependencies = [ [[package]] name = "bevy_animation" version = "0.19.0-dev" -source = "git+https://github.com/bevyengine/bevy?branch=main#104a8c35f8c4eee092be656cf62784d6eae0841d" +source = "git+https://github.com/bevyengine/bevy?branch=main#4dc8fb49199fea2065db519fc3f06fdadb5348e1" dependencies = [ "bevy_animation_macros", "bevy_app", @@ -578,7 +578,7 @@ dependencies = [ [[package]] name = "bevy_animation_macros" version = "0.19.0-dev" -source = "git+https://github.com/bevyengine/bevy?branch=main#104a8c35f8c4eee092be656cf62784d6eae0841d" +source = "git+https://github.com/bevyengine/bevy?branch=main#4dc8fb49199fea2065db519fc3f06fdadb5348e1" dependencies = [ "bevy_macro_utils", "quote", @@ -588,7 +588,7 @@ dependencies = [ [[package]] name = "bevy_anti_alias" version = "0.19.0-dev" -source = "git+https://github.com/bevyengine/bevy?branch=main#104a8c35f8c4eee092be656cf62784d6eae0841d" +source = "git+https://github.com/bevyengine/bevy?branch=main#4dc8fb49199fea2065db519fc3f06fdadb5348e1" dependencies = [ "bevy_app", "bevy_asset", @@ -609,7 +609,7 @@ dependencies = [ [[package]] name = "bevy_app" version = "0.19.0-dev" -source = "git+https://github.com/bevyengine/bevy?branch=main#104a8c35f8c4eee092be656cf62784d6eae0841d" +source = "git+https://github.com/bevyengine/bevy?branch=main#4dc8fb49199fea2065db519fc3f06fdadb5348e1" dependencies = [ "bevy_derive", "bevy_ecs", @@ -617,7 +617,6 @@ dependencies = [ "bevy_reflect", "bevy_tasks", "bevy_utils", - "cfg-if 1.0.4", "console_error_panic_hook", "ctrlc", "downcast-rs 2.0.2", @@ -631,7 +630,7 @@ dependencies = [ [[package]] name = "bevy_asset" version = "0.19.0-dev" -source = "git+https://github.com/bevyengine/bevy?branch=main#104a8c35f8c4eee092be656cf62784d6eae0841d" +source = "git+https://github.com/bevyengine/bevy?branch=main#4dc8fb49199fea2065db519fc3f06fdadb5348e1" dependencies = [ "async-broadcast", "async-channel", @@ -648,7 +647,7 @@ dependencies = [ "bevy_reflect", "bevy_tasks", "bevy_utils", - "bitflags 2.11.0", + "bitflags 2.11.1", "blake3", "crossbeam-channel", "derive_more", @@ -674,7 +673,7 @@ dependencies = [ [[package]] name = "bevy_asset_macros" version = "0.19.0-dev" -source = "git+https://github.com/bevyengine/bevy?branch=main#104a8c35f8c4eee092be656cf62784d6eae0841d" +source = "git+https://github.com/bevyengine/bevy?branch=main#4dc8fb49199fea2065db519fc3f06fdadb5348e1" dependencies = [ "bevy_macro_utils", "proc-macro2", @@ -685,7 +684,7 @@ dependencies = [ [[package]] name = "bevy_audio" version = "0.19.0-dev" -source = "git+https://github.com/bevyengine/bevy?branch=main#104a8c35f8c4eee092be656cf62784d6eae0841d" +source = "git+https://github.com/bevyengine/bevy?branch=main#4dc8fb49199fea2065db519fc3f06fdadb5348e1" dependencies = [ "bevy_app", "bevy_asset", @@ -700,7 +699,7 @@ dependencies = [ [[package]] name = "bevy_camera" version = "0.19.0-dev" -source = "git+https://github.com/bevyengine/bevy?branch=main#104a8c35f8c4eee092be656cf62784d6eae0841d" +source = "git+https://github.com/bevyengine/bevy?branch=main#4dc8fb49199fea2065db519fc3f06fdadb5348e1" dependencies = [ "bevy_app", "bevy_asset", @@ -725,7 +724,7 @@ dependencies = [ [[package]] name = "bevy_camera_controller" version = "0.19.0-dev" -source = "git+https://github.com/bevyengine/bevy?branch=main#104a8c35f8c4eee092be656cf62784d6eae0841d" +source = "git+https://github.com/bevyengine/bevy?branch=main#4dc8fb49199fea2065db519fc3f06fdadb5348e1" dependencies = [ "bevy_app", "bevy_camera", @@ -733,6 +732,7 @@ dependencies = [ "bevy_input", "bevy_log", "bevy_math", + "bevy_picking", "bevy_time", "bevy_transform", "bevy_window", @@ -741,7 +741,7 @@ dependencies = [ [[package]] name = "bevy_color" version = "0.19.0-dev" -source = "git+https://github.com/bevyengine/bevy?branch=main#104a8c35f8c4eee092be656cf62784d6eae0841d" +source = "git+https://github.com/bevyengine/bevy?branch=main#4dc8fb49199fea2065db519fc3f06fdadb5348e1" dependencies = [ "bevy_math", "bevy_reflect", @@ -756,7 +756,7 @@ dependencies = [ [[package]] name = "bevy_core_pipeline" version = "0.19.0-dev" -source = "git+https://github.com/bevyengine/bevy?branch=main#104a8c35f8c4eee092be656cf62784d6eae0841d" +source = "git+https://github.com/bevyengine/bevy?branch=main#4dc8fb49199fea2065db519fc3f06fdadb5348e1" dependencies = [ "bevy_app", "bevy_asset", @@ -776,7 +776,7 @@ dependencies = [ "bevy_transform", "bevy_utils", "bevy_window", - "bitflags 2.11.0", + "bitflags 2.11.1", "indexmap", "nonmax", ] @@ -798,7 +798,7 @@ dependencies = [ [[package]] name = "bevy_derive" version = "0.19.0-dev" -source = "git+https://github.com/bevyengine/bevy?branch=main#104a8c35f8c4eee092be656cf62784d6eae0841d" +source = "git+https://github.com/bevyengine/bevy?branch=main#4dc8fb49199fea2065db519fc3f06fdadb5348e1" dependencies = [ "bevy_macro_utils", "quote", @@ -808,7 +808,7 @@ dependencies = [ [[package]] name = "bevy_dev_tools" version = "0.19.0-dev" -source = "git+https://github.com/bevyengine/bevy?branch=main#104a8c35f8c4eee092be656cf62784d6eae0841d" +source = "git+https://github.com/bevyengine/bevy?branch=main#4dc8fb49199fea2065db519fc3f06fdadb5348e1" dependencies = [ "bevy_app", "bevy_asset", @@ -839,7 +839,7 @@ dependencies = [ [[package]] name = "bevy_diagnostic" version = "0.19.0-dev" -source = "git+https://github.com/bevyengine/bevy?branch=main#104a8c35f8c4eee092be656cf62784d6eae0841d" +source = "git+https://github.com/bevyengine/bevy?branch=main#4dc8fb49199fea2065db519fc3f06fdadb5348e1" dependencies = [ "atomic-waker", "bevy_app", @@ -856,7 +856,7 @@ dependencies = [ [[package]] name = "bevy_ecs" version = "0.19.0-dev" -source = "git+https://github.com/bevyengine/bevy?branch=main#104a8c35f8c4eee092be656cf62784d6eae0841d" +source = "git+https://github.com/bevyengine/bevy?branch=main#4dc8fb49199fea2065db519fc3f06fdadb5348e1" dependencies = [ "arrayvec", "bevy_ecs_macros", @@ -865,11 +865,10 @@ dependencies = [ "bevy_reflect", "bevy_tasks", "bevy_utils", - "bitflags 2.11.0", + "bitflags 2.11.1", "bumpalo", "concurrent-queue", "derive_more", - "downcast-rs 2.0.2", "fixedbitset", "indexmap", "log", @@ -884,7 +883,7 @@ dependencies = [ [[package]] name = "bevy_ecs_macros" version = "0.19.0-dev" -source = "git+https://github.com/bevyengine/bevy?branch=main#104a8c35f8c4eee092be656cf62784d6eae0841d" +source = "git+https://github.com/bevyengine/bevy?branch=main#4dc8fb49199fea2065db519fc3f06fdadb5348e1" dependencies = [ "bevy_macro_utils", "proc-macro2", @@ -895,7 +894,7 @@ dependencies = [ [[package]] name = "bevy_encase_derive" version = "0.19.0-dev" -source = "git+https://github.com/bevyengine/bevy?branch=main#104a8c35f8c4eee092be656cf62784d6eae0841d" +source = "git+https://github.com/bevyengine/bevy?branch=main#4dc8fb49199fea2065db519fc3f06fdadb5348e1" dependencies = [ "bevy_macro_utils", "encase_derive_impl", @@ -904,7 +903,7 @@ dependencies = [ [[package]] name = "bevy_feathers" version = "0.19.0-dev" -source = "git+https://github.com/bevyengine/bevy?branch=main#104a8c35f8c4eee092be656cf62784d6eae0841d" +source = "git+https://github.com/bevyengine/bevy?branch=main#4dc8fb49199fea2065db519fc3f06fdadb5348e1" dependencies = [ "accesskit", "bevy_a11y", @@ -914,6 +913,7 @@ dependencies = [ "bevy_color", "bevy_derive", "bevy_ecs", + "bevy_input", "bevy_input_focus", "bevy_log", "bevy_math", @@ -934,7 +934,7 @@ dependencies = [ [[package]] name = "bevy_gilrs" version = "0.19.0-dev" -source = "git+https://github.com/bevyengine/bevy?branch=main#104a8c35f8c4eee092be656cf62784d6eae0841d" +source = "git+https://github.com/bevyengine/bevy?branch=main#4dc8fb49199fea2065db519fc3f06fdadb5348e1" dependencies = [ "bevy_app", "bevy_ecs", @@ -949,7 +949,7 @@ dependencies = [ [[package]] name = "bevy_gizmos" version = "0.19.0-dev" -source = "git+https://github.com/bevyengine/bevy?branch=main#104a8c35f8c4eee092be656cf62784d6eae0841d" +source = "git+https://github.com/bevyengine/bevy?branch=main#4dc8fb49199fea2065db519fc3f06fdadb5348e1" dependencies = [ "bevy_app", "bevy_asset", @@ -971,7 +971,7 @@ dependencies = [ [[package]] name = "bevy_gizmos_macros" version = "0.19.0-dev" -source = "git+https://github.com/bevyengine/bevy?branch=main#104a8c35f8c4eee092be656cf62784d6eae0841d" +source = "git+https://github.com/bevyengine/bevy?branch=main#4dc8fb49199fea2065db519fc3f06fdadb5348e1" dependencies = [ "bevy_macro_utils", "quote", @@ -981,7 +981,7 @@ dependencies = [ [[package]] name = "bevy_gizmos_render" version = "0.19.0-dev" -source = "git+https://github.com/bevyengine/bevy?branch=main#104a8c35f8c4eee092be656cf62784d6eae0841d" +source = "git+https://github.com/bevyengine/bevy?branch=main#4dc8fb49199fea2065db519fc3f06fdadb5348e1" dependencies = [ "bevy_app", "bevy_asset", @@ -1009,7 +1009,7 @@ dependencies = [ [[package]] name = "bevy_gltf" version = "0.19.0-dev" -source = "git+https://github.com/bevyengine/bevy?branch=main#104a8c35f8c4eee092be656cf62784d6eae0841d" +source = "git+https://github.com/bevyengine/bevy?branch=main#4dc8fb49199fea2065db519fc3f06fdadb5348e1" dependencies = [ "async-lock", "base64", @@ -1044,7 +1044,7 @@ dependencies = [ [[package]] name = "bevy_image" version = "0.19.0-dev" -source = "git+https://github.com/bevyengine/bevy?branch=main#104a8c35f8c4eee092be656cf62784d6eae0841d" +source = "git+https://github.com/bevyengine/bevy?branch=main#4dc8fb49199fea2065db519fc3f06fdadb5348e1" dependencies = [ "bevy_app", "bevy_asset", @@ -1054,7 +1054,7 @@ dependencies = [ "bevy_platform", "bevy_reflect", "bevy_utils", - "bitflags 2.11.0", + "bitflags 2.11.1", "bytemuck", "futures-lite", "guillotiere", @@ -1072,7 +1072,7 @@ dependencies = [ [[package]] name = "bevy_input" version = "0.19.0-dev" -source = "git+https://github.com/bevyengine/bevy?branch=main#104a8c35f8c4eee092be656cf62784d6eae0841d" +source = "git+https://github.com/bevyengine/bevy?branch=main#4dc8fb49199fea2065db519fc3f06fdadb5348e1" dependencies = [ "bevy_app", "bevy_ecs", @@ -1088,7 +1088,7 @@ dependencies = [ [[package]] name = "bevy_input_focus" version = "0.19.0-dev" -source = "git+https://github.com/bevyengine/bevy?branch=main#104a8c35f8c4eee092be656cf62784d6eae0841d" +source = "git+https://github.com/bevyengine/bevy?branch=main#4dc8fb49199fea2065db519fc3f06fdadb5348e1" dependencies = [ "bevy_app", "bevy_ecs", @@ -1104,7 +1104,7 @@ dependencies = [ [[package]] name = "bevy_internal" version = "0.19.0-dev" -source = "git+https://github.com/bevyengine/bevy?branch=main#104a8c35f8c4eee092be656cf62784d6eae0841d" +source = "git+https://github.com/bevyengine/bevy?branch=main#4dc8fb49199fea2065db519fc3f06fdadb5348e1" dependencies = [ "bevy_a11y", "bevy_android", @@ -1162,7 +1162,7 @@ dependencies = [ [[package]] name = "bevy_light" version = "0.19.0-dev" -source = "git+https://github.com/bevyengine/bevy?branch=main#104a8c35f8c4eee092be656cf62784d6eae0841d" +source = "git+https://github.com/bevyengine/bevy?branch=main#4dc8fb49199fea2065db519fc3f06fdadb5348e1" dependencies = [ "bevy_app", "bevy_asset", @@ -1186,7 +1186,7 @@ dependencies = [ [[package]] name = "bevy_log" version = "0.19.0-dev" -source = "git+https://github.com/bevyengine/bevy?branch=main#104a8c35f8c4eee092be656cf62784d6eae0841d" +source = "git+https://github.com/bevyengine/bevy?branch=main#4dc8fb49199fea2065db519fc3f06fdadb5348e1" dependencies = [ "android_log-sys", "bevy_app", @@ -1203,7 +1203,7 @@ dependencies = [ [[package]] name = "bevy_macro_utils" version = "0.19.0-dev" -source = "git+https://github.com/bevyengine/bevy?branch=main#104a8c35f8c4eee092be656cf62784d6eae0841d" +source = "git+https://github.com/bevyengine/bevy?branch=main#4dc8fb49199fea2065db519fc3f06fdadb5348e1" dependencies = [ "proc-macro2", "quote", @@ -1214,7 +1214,7 @@ dependencies = [ [[package]] name = "bevy_material" version = "0.19.0-dev" -source = "git+https://github.com/bevyengine/bevy?branch=main#104a8c35f8c4eee092be656cf62784d6eae0841d" +source = "git+https://github.com/bevyengine/bevy?branch=main#4dc8fb49199fea2065db519fc3f06fdadb5348e1" dependencies = [ "bevy_asset", "bevy_derive", @@ -1236,7 +1236,7 @@ dependencies = [ [[package]] name = "bevy_material_macros" version = "0.19.0-dev" -source = "git+https://github.com/bevyengine/bevy?branch=main#104a8c35f8c4eee092be656cf62784d6eae0841d" +source = "git+https://github.com/bevyengine/bevy?branch=main#4dc8fb49199fea2065db519fc3f06fdadb5348e1" dependencies = [ "bevy_macro_utils", "quote", @@ -1246,7 +1246,7 @@ dependencies = [ [[package]] name = "bevy_math" version = "0.19.0-dev" -source = "git+https://github.com/bevyengine/bevy?branch=main#104a8c35f8c4eee092be656cf62784d6eae0841d" +source = "git+https://github.com/bevyengine/bevy?branch=main#4dc8fb49199fea2065db519fc3f06fdadb5348e1" dependencies = [ "approx", "arrayvec", @@ -1255,7 +1255,7 @@ dependencies = [ "glam", "itertools", "libm", - "rand 0.10.0", + "rand 0.10.1", "rand_distr", "serde", "thiserror 2.0.18", @@ -1265,7 +1265,7 @@ dependencies = [ [[package]] name = "bevy_mesh" version = "0.19.0-dev" -source = "git+https://github.com/bevyengine/bevy?branch=main#104a8c35f8c4eee092be656cf62784d6eae0841d" +source = "git+https://github.com/bevyengine/bevy?branch=main#4dc8fb49199fea2065db519fc3f06fdadb5348e1" dependencies = [ "bevy_app", "bevy_asset", @@ -1277,7 +1277,7 @@ dependencies = [ "bevy_platform", "bevy_reflect", "bevy_transform", - "bitflags 2.11.0", + "bitflags 2.11.1", "bytemuck", "derive_more", "encase", @@ -1314,7 +1314,7 @@ checksum = "bff34eb29ff4b8a8688bc7299f14fb6b597461ca80fec03ed7d22939ab33e48f" [[package]] name = "bevy_naga_reflect" version = "0.1.0" -source = "git+https://github.com/tychedelia/bevy_naga_reflect#bcede929195ed5ae67d398f26b0872e879a0aeb0" +source = "git+https://github.com/tychedelia/bevy_naga_reflect#60010545e20027c7ae2ca084b21ce014664ccd36" dependencies = [ "bevy", "naga", @@ -1323,7 +1323,7 @@ dependencies = [ [[package]] name = "bevy_pbr" version = "0.19.0-dev" -source = "git+https://github.com/bevyengine/bevy?branch=main#104a8c35f8c4eee092be656cf62784d6eae0841d" +source = "git+https://github.com/bevyengine/bevy?branch=main#4dc8fb49199fea2065db519fc3f06fdadb5348e1" dependencies = [ "arrayvec", "bevy_app", @@ -1348,7 +1348,7 @@ dependencies = [ "bevy_tasks", "bevy_transform", "bevy_utils", - "bitflags 2.11.0", + "bitflags 2.11.1", "bytemuck", "derive_more", "fixedbitset", @@ -1365,7 +1365,7 @@ dependencies = [ [[package]] name = "bevy_picking" version = "0.19.0-dev" -source = "git+https://github.com/bevyengine/bevy?branch=main#104a8c35f8c4eee092be656cf62784d6eae0841d" +source = "git+https://github.com/bevyengine/bevy?branch=main#4dc8fb49199fea2065db519fc3f06fdadb5348e1" dependencies = [ "bevy_app", "bevy_asset", @@ -1388,7 +1388,7 @@ dependencies = [ [[package]] name = "bevy_platform" version = "0.19.0-dev" -source = "git+https://github.com/bevyengine/bevy?branch=main#104a8c35f8c4eee092be656cf62784d6eae0841d" +source = "git+https://github.com/bevyengine/bevy?branch=main#4dc8fb49199fea2065db519fc3f06fdadb5348e1" dependencies = [ "critical-section", "foldhash 0.2.0", @@ -1409,7 +1409,7 @@ dependencies = [ [[package]] name = "bevy_post_process" version = "0.19.0-dev" -source = "git+https://github.com/bevyengine/bevy?branch=main#104a8c35f8c4eee092be656cf62784d6eae0841d" +source = "git+https://github.com/bevyengine/bevy?branch=main#4dc8fb49199fea2065db519fc3f06fdadb5348e1" dependencies = [ "bevy_app", "bevy_asset", @@ -1433,12 +1433,12 @@ dependencies = [ [[package]] name = "bevy_ptr" version = "0.19.0-dev" -source = "git+https://github.com/bevyengine/bevy?branch=main#104a8c35f8c4eee092be656cf62784d6eae0841d" +source = "git+https://github.com/bevyengine/bevy?branch=main#4dc8fb49199fea2065db519fc3f06fdadb5348e1" [[package]] name = "bevy_reflect" version = "0.19.0-dev" -source = "git+https://github.com/bevyengine/bevy?branch=main#104a8c35f8c4eee092be656cf62784d6eae0841d" +source = "git+https://github.com/bevyengine/bevy?branch=main#4dc8fb49199fea2065db519fc3f06fdadb5348e1" dependencies = [ "assert_type_match", "bevy_platform", @@ -1466,7 +1466,7 @@ dependencies = [ [[package]] name = "bevy_reflect_derive" version = "0.19.0-dev" -source = "git+https://github.com/bevyengine/bevy?branch=main#104a8c35f8c4eee092be656cf62784d6eae0841d" +source = "git+https://github.com/bevyengine/bevy?branch=main#4dc8fb49199fea2065db519fc3f06fdadb5348e1" dependencies = [ "bevy_macro_utils", "indexmap", @@ -1479,7 +1479,7 @@ dependencies = [ [[package]] name = "bevy_render" version = "0.19.0-dev" -source = "git+https://github.com/bevyengine/bevy?branch=main#104a8c35f8c4eee092be656cf62784d6eae0841d" +source = "git+https://github.com/bevyengine/bevy?branch=main#4dc8fb49199fea2065db519fc3f06fdadb5348e1" dependencies = [ "async-channel", "bevy_app", @@ -1505,7 +1505,7 @@ dependencies = [ "bevy_transform", "bevy_utils", "bevy_window", - "bitflags 2.11.0", + "bitflags 2.11.1", "bytemuck", "derive_more", "downcast-rs 2.0.2", @@ -1532,7 +1532,7 @@ dependencies = [ [[package]] name = "bevy_render_macros" version = "0.19.0-dev" -source = "git+https://github.com/bevyengine/bevy?branch=main#104a8c35f8c4eee092be656cf62784d6eae0841d" +source = "git+https://github.com/bevyengine/bevy?branch=main#4dc8fb49199fea2065db519fc3f06fdadb5348e1" dependencies = [ "bevy_macro_utils", "proc-macro2", @@ -1543,7 +1543,7 @@ dependencies = [ [[package]] name = "bevy_scene" version = "0.19.0-dev" -source = "git+https://github.com/bevyengine/bevy?branch=main#104a8c35f8c4eee092be656cf62784d6eae0841d" +source = "git+https://github.com/bevyengine/bevy?branch=main#4dc8fb49199fea2065db519fc3f06fdadb5348e1" dependencies = [ "bevy_app", "bevy_asset", @@ -1562,7 +1562,7 @@ dependencies = [ [[package]] name = "bevy_scene_macros" version = "0.19.0-dev" -source = "git+https://github.com/bevyengine/bevy?branch=main#104a8c35f8c4eee092be656cf62784d6eae0841d" +source = "git+https://github.com/bevyengine/bevy?branch=main#4dc8fb49199fea2065db519fc3f06fdadb5348e1" dependencies = [ "bevy_macro_utils", "proc-macro2", @@ -1573,7 +1573,7 @@ dependencies = [ [[package]] name = "bevy_shader" version = "0.19.0-dev" -source = "git+https://github.com/bevyengine/bevy?branch=main#104a8c35f8c4eee092be656cf62784d6eae0841d" +source = "git+https://github.com/bevyengine/bevy?branch=main#4dc8fb49199fea2065db519fc3f06fdadb5348e1" dependencies = [ "bevy_asset", "bevy_platform", @@ -1592,7 +1592,7 @@ dependencies = [ [[package]] name = "bevy_sprite" version = "0.19.0-dev" -source = "git+https://github.com/bevyengine/bevy?branch=main#104a8c35f8c4eee092be656cf62784d6eae0841d" +source = "git+https://github.com/bevyengine/bevy?branch=main#4dc8fb49199fea2065db519fc3f06fdadb5348e1" dependencies = [ "bevy_app", "bevy_asset", @@ -1617,7 +1617,7 @@ dependencies = [ [[package]] name = "bevy_sprite_render" version = "0.19.0-dev" -source = "git+https://github.com/bevyengine/bevy?branch=main#104a8c35f8c4eee092be656cf62784d6eae0841d" +source = "git+https://github.com/bevyengine/bevy?branch=main#4dc8fb49199fea2065db519fc3f06fdadb5348e1" dependencies = [ "bevy_app", "bevy_asset", @@ -1638,7 +1638,7 @@ dependencies = [ "bevy_text", "bevy_transform", "bevy_utils", - "bitflags 2.11.0", + "bitflags 2.11.1", "bytemuck", "derive_more", "fixedbitset", @@ -1649,7 +1649,7 @@ dependencies = [ [[package]] name = "bevy_state" version = "0.19.0-dev" -source = "git+https://github.com/bevyengine/bevy?branch=main#104a8c35f8c4eee092be656cf62784d6eae0841d" +source = "git+https://github.com/bevyengine/bevy?branch=main#4dc8fb49199fea2065db519fc3f06fdadb5348e1" dependencies = [ "bevy_app", "bevy_ecs", @@ -1664,7 +1664,7 @@ dependencies = [ [[package]] name = "bevy_state_macros" version = "0.19.0-dev" -source = "git+https://github.com/bevyengine/bevy?branch=main#104a8c35f8c4eee092be656cf62784d6eae0841d" +source = "git+https://github.com/bevyengine/bevy?branch=main#4dc8fb49199fea2065db519fc3f06fdadb5348e1" dependencies = [ "bevy_macro_utils", "quote", @@ -1674,7 +1674,7 @@ dependencies = [ [[package]] name = "bevy_tasks" version = "0.19.0-dev" -source = "git+https://github.com/bevyengine/bevy?branch=main#104a8c35f8c4eee092be656cf62784d6eae0841d" +source = "git+https://github.com/bevyengine/bevy?branch=main#4dc8fb49199fea2065db519fc3f06fdadb5348e1" dependencies = [ "async-channel", "async-executor", @@ -1692,7 +1692,7 @@ dependencies = [ [[package]] name = "bevy_text" version = "0.19.0-dev" -source = "git+https://github.com/bevyengine/bevy?branch=main#104a8c35f8c4eee092be656cf62784d6eae0841d" +source = "git+https://github.com/bevyengine/bevy?branch=main#4dc8fb49199fea2065db519fc3f06fdadb5348e1" dependencies = [ "bevy_app", "bevy_asset", @@ -1719,7 +1719,7 @@ dependencies = [ [[package]] name = "bevy_time" version = "0.19.0-dev" -source = "git+https://github.com/bevyengine/bevy?branch=main#104a8c35f8c4eee092be656cf62784d6eae0841d" +source = "git+https://github.com/bevyengine/bevy?branch=main#4dc8fb49199fea2065db519fc3f06fdadb5348e1" dependencies = [ "bevy_app", "bevy_ecs", @@ -1733,11 +1733,10 @@ dependencies = [ [[package]] name = "bevy_transform" version = "0.19.0-dev" -source = "git+https://github.com/bevyengine/bevy?branch=main#104a8c35f8c4eee092be656cf62784d6eae0841d" +source = "git+https://github.com/bevyengine/bevy?branch=main#4dc8fb49199fea2065db519fc3f06fdadb5348e1" dependencies = [ "bevy_app", "bevy_ecs", - "bevy_log", "bevy_math", "bevy_reflect", "bevy_tasks", @@ -1750,7 +1749,7 @@ dependencies = [ [[package]] name = "bevy_ui" version = "0.19.0-dev" -source = "git+https://github.com/bevyengine/bevy?branch=main#104a8c35f8c4eee092be656cf62784d6eae0841d" +source = "git+https://github.com/bevyengine/bevy?branch=main#4dc8fb49199fea2065db519fc3f06fdadb5348e1" dependencies = [ "accesskit", "bevy_a11y", @@ -1787,7 +1786,7 @@ dependencies = [ [[package]] name = "bevy_ui_render" version = "0.19.0-dev" -source = "git+https://github.com/bevyengine/bevy?branch=main#104a8c35f8c4eee092be656cf62784d6eae0841d" +source = "git+https://github.com/bevyengine/bevy?branch=main#4dc8fb49199fea2065db519fc3f06fdadb5348e1" dependencies = [ "bevy_app", "bevy_asset", @@ -1818,7 +1817,7 @@ dependencies = [ [[package]] name = "bevy_ui_widgets" version = "0.19.0-dev" -source = "git+https://github.com/bevyengine/bevy?branch=main#104a8c35f8c4eee092be656cf62784d6eae0841d" +source = "git+https://github.com/bevyengine/bevy?branch=main#4dc8fb49199fea2065db519fc3f06fdadb5348e1" dependencies = [ "accesskit", "bevy_a11y", @@ -1833,6 +1832,7 @@ dependencies = [ "bevy_reflect", "bevy_text", "bevy_ui", + "bevy_window", "parley", "smol_str", ] @@ -1840,18 +1840,19 @@ dependencies = [ [[package]] name = "bevy_utils" version = "0.19.0-dev" -source = "git+https://github.com/bevyengine/bevy?branch=main#104a8c35f8c4eee092be656cf62784d6eae0841d" +source = "git+https://github.com/bevyengine/bevy?branch=main#4dc8fb49199fea2065db519fc3f06fdadb5348e1" dependencies = [ "async-channel", "bevy_platform", "disqualified", + "indexmap", "thread_local", ] [[package]] name = "bevy_window" version = "0.19.0-dev" -source = "git+https://github.com/bevyengine/bevy?branch=main#104a8c35f8c4eee092be656cf62784d6eae0841d" +source = "git+https://github.com/bevyengine/bevy?branch=main#4dc8fb49199fea2065db519fc3f06fdadb5348e1" dependencies = [ "bevy_app", "bevy_asset", @@ -1869,7 +1870,7 @@ dependencies = [ [[package]] name = "bevy_winit" version = "0.19.0-dev" -source = "git+https://github.com/bevyengine/bevy?branch=main#104a8c35f8c4eee092be656cf62784d6eae0841d" +source = "git+https://github.com/bevyengine/bevy?branch=main#4dc8fb49199fea2065db519fc3f06fdadb5348e1" dependencies = [ "accesskit", "accesskit_winit", @@ -1890,7 +1891,6 @@ dependencies = [ "bevy_tasks", "bevy_window", "bytemuck", - "cfg-if 1.0.4", "js-sys", "tracing", "wasm-bindgen", @@ -1902,7 +1902,7 @@ dependencies = [ [[package]] name = "bevy_world_serialization" version = "0.19.0-dev" -source = "git+https://github.com/bevyengine/bevy?branch=main#104a8c35f8c4eee092be656cf62784d6eae0841d" +source = "git+https://github.com/bevyengine/bevy?branch=main#4dc8fb49199fea2065db519fc3f06fdadb5348e1" dependencies = [ "bevy_app", "bevy_asset", @@ -1987,9 +1987,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.11.0" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af" +checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3" dependencies = [ "bytemuck", "serde_core", @@ -1997,11 +1997,11 @@ dependencies = [ [[package]] name = "bitstream-io" -version = "4.9.0" +version = "4.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60d4bd9d1db2c6bdf285e223a7fa369d5ce98ec767dec949c6ca62863ce61757" +checksum = "7eff00be299a18769011411c9def0d827e8f2d7bf0c3dbf53633147a8867fd1f" dependencies = [ - "core2", + "no_std_io2", ] [[package]] @@ -2120,7 +2120,7 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b99da2f8558ca23c71f4fd15dc57c906239752dd27ff3c00a1d56b685b7cbfec" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "log", "polling", "rustix 0.38.44", @@ -2161,9 +2161,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.59" +version = "1.2.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7a4d3ec6524d28a329fc53654bbadc9bdd7b0431f5d65f1a56ffb28a1ee5283" +checksum = "43c5703da9466b66a946814e1adf53ea2c90f10063b86290cc9eb67ce3478a20" dependencies = [ "find-msvc-tools", "jobserver", @@ -2212,7 +2212,7 @@ checksum = "6f8d983286843e49675a4b7a2d174efe136dc93a18d69130dd18198a6c167601" dependencies = [ "cfg-if 1.0.4", "cpufeatures 0.3.0", - "rand_core 0.10.0", + "rand_core 0.10.1", ] [[package]] @@ -2228,9 +2228,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.6.0" +version = "4.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b193af5b67834b676abd72466a96c1024e6a6ad978a1f484bd90b85c94041351" +checksum = "1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51" dependencies = [ "clap_builder", ] @@ -2274,7 +2274,7 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81411967c50ee9a1fc11365f8c585f863a22a9697c89239c452292c40ba79b0d" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "block", "core-foundation 0.10.1", "core-graphics-types 0.2.0", @@ -2474,7 +2474,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "core-foundation 0.10.1", "libc", ] @@ -2504,15 +2504,6 @@ dependencies = [ "objc", ] -[[package]] -name = "core2" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b49ba7ef1ad6107f8824dbe97de947cbaac53c44e7f9756a1fba0d37c1eec505" -dependencies = [ - "memchr", -] - [[package]] name = "core_maths" version = "0.1.1" @@ -2538,12 +2529,12 @@ dependencies = [ [[package]] name = "coremidi" -version = "0.8.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "964eb3e10ea8b0d29c797086aab3ca730f75e06dced0cb980642fd274a5cca30" +checksum = "f32f5d3e1b800aa7ea10e9e83c87cbc1daef1397ee86cd599458b3c3b136428a" dependencies = [ "block", - "core-foundation 0.9.4", + "core-foundation 0.10.1", "core-foundation-sys 0.8.7", "coremidi-sys", ] @@ -2762,7 +2753,7 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "block2 0.6.2", "libc", "objc2 0.6.4", @@ -3069,24 +3060,24 @@ checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" [[package]] name = "font-types" -version = "0.11.2" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d9237c6d82152100c691fb77ea18037b402bcc7257d2c876a4ffac81bc22a1c" +checksum = "5b38ad915f6dadd993ced50848a8291a543bd41ca62bc10740d5e64e2ab4cfd7" dependencies = [ "bytemuck", ] [[package]] name = "fontique" -version = "0.8.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23358480a54a886d51b306718d5ca743fdfe238e5df38ef650f4e72f29c5d9e9" +checksum = "7c20b425addb8661e97fe1d51c4d8bcec3ec29ed6ad0db983976a7521276b8f7" dependencies = [ - "hashbrown 0.16.1", + "hashbrown 0.17.0", "linebender_resource_handle", "memmap2", "parlance", - "read-fonts", + "read-fonts 0.39.1", "smallvec", ] @@ -3274,16 +3265,16 @@ dependencies = [ "cfg-if 1.0.4", "libc", "r-efi 6.0.0", - "rand_core 0.10.0", + "rand_core 0.10.1", "wasip2", "wasip3", ] [[package]] name = "gif" -version = "0.14.1" +version = "0.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5df2ba84018d80c213569363bdcd0c64e6933c67fe4c1d60ecf822971a3c35e" +checksum = "ee8cfcc411d9adbbaba82fb72661cc1bcca13e8bba98b364e62b2dba8f960159" dependencies = [ "color_quant", "weezl", @@ -3343,7 +3334,7 @@ dependencies = [ "bytemuck", "encase", "libm", - "rand 0.10.0", + "rand 0.10.1", "serde_core", ] @@ -3465,7 +3456,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b89c83349105e3732062a895becfc71a8f921bb71ecbbdd8ff99263e3b53a0ca" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "gpu-descriptor-types", "hashbrown 0.15.5", ] @@ -3476,14 +3467,14 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", ] [[package]] name = "grid" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9e2d4c0a8296178d8802098410ca05d86b17a10bb5ab559b3fb404c1f948220" +checksum = "b40ca9252762c466af32d0b1002e91e4e1bc5398f77455e55474deb466355ff5" [[package]] name = "guillotiere" @@ -3511,14 +3502,14 @@ dependencies = [ [[package]] name = "harfrust" -version = "0.5.2" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9da2e5ae821f6e96664977bf974d6d6a2d6682f9ccee23e62ec1d134246845f9" +checksum = "a9ce5e848d21ba97a324266e41c70e0eb5e2577a610c1fbd546e15096f2e8e37" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "bytemuck", "core_maths", - "read-fonts", + "read-fonts 0.39.1", "smallvec", ] @@ -3553,6 +3544,15 @@ dependencies = [ "serde_core", ] +[[package]] +name = "hashbrown" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f467dd6dccf739c208452f8014c75c18bb8301b050ad1cfb27153803edb0f51" +dependencies = [ + "foldhash 0.2.0", +] + [[package]] name = "heapless" version = "0.9.2" @@ -3777,12 +3777,12 @@ checksum = "e7c5cedc30da3a610cac6b4ba17597bdf7152cf974e8aab3afb3d54455e371c8" [[package]] name = "indexmap" -version = "2.13.1" +version = "2.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45a8a2b9cb3e0b0c1803dbb0758ffac5de2f425b23c28f518faabd9d805342ff" +checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" dependencies = [ "equivalent", - "hashbrown 0.16.1", + "hashbrown 0.17.0", "serde", "serde_core", ] @@ -3799,7 +3799,7 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd5b3eaf1a28b758ac0faa5a4254e8ab2705605496f1b1f3fbbc3988ad73d199" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "inotify-sys", "libc", ] @@ -3940,9 +3940,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.94" +version = "0.3.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e04e2ef80ce82e13552136fabeef8a5ed1f985a96805761cbb9a2c34e7664d9" +checksum = "2964e92d1d9dc3364cae4d718d93f227e3abb088e747d92e0395bfdedf1c12ca" dependencies = [ "cfg-if 1.0.4", "futures-util", @@ -4002,7 +4002,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff7f53bdf698e7aa7ec916411bbdc8078135da11b66db5182675b2227f6c0d07" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", ] [[package]] @@ -4139,9 +4139,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.184" +version = "0.2.185" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48f5d2a454e16a5ea0f4ced81bd44e4cfc7bd3a507b61887c99fd3538b28e4af" +checksum = "52ff2c0fe9bc6cb6b14a0592c2ff4fa9ceb83eea9db979b0487cd054946a2b8f" [[package]] name = "libfuzzer-sys" @@ -4171,14 +4171,14 @@ checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" [[package]] name = "libredox" -version = "0.1.15" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ddbf48fd451246b1f8c2610bd3b4ac0cc6e149d89832867093ab69a17194f08" +checksum = "e02f3bb43d335493c96bf3fd3a321600bf6bd07ed34bc64118e9293bdffea46c" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "libc", "plain", - "redox_syscall 0.7.3", + "redox_syscall 0.7.4", ] [[package]] @@ -4398,9 +4398,9 @@ dependencies = [ [[package]] name = "midir" -version = "0.10.3" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b73f8737248ad37b88291a2108d9df5f991dc8555103597d586b5a29d4d703c0" +checksum = "56542e359bb7e4bd1a77cb79042be32d4af0713a9ce58160355eaf72df9db87c" dependencies = [ "alsa 0.9.1", "bitflags 1.3.2", @@ -4484,7 +4484,7 @@ checksum = "aa2630921705b9b01dcdd0b6864b9562ca3c1951eecd0f0c4f5f04f61e412647" dependencies = [ "arrayvec", "bit-set 0.9.1", - "bitflags 2.11.0", + "bitflags 2.11.1", "cfg-if 1.0.4", "cfg_aliases", "codespan-reporting 0.13.1", @@ -4560,7 +4560,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "jni-sys 0.3.1", "log", "ndk-sys", @@ -4596,7 +4596,7 @@ version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "cfg-if 1.0.4", "cfg_aliases", "libc", @@ -4608,12 +4608,21 @@ version = "0.31.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5d6d0705320c1e6ba1d912b5e37cf18071b6c2e9b7fa8215a1e8a7651966f5d3" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "cfg-if 1.0.4", "cfg_aliases", "libc", ] +[[package]] +name = "no_std_io2" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b51ed7824b6e07d354605f4abb3d9d300350701299da96642ee084f5ce631550" +dependencies = [ + "memchr", +] + [[package]] name = "nokhwa" version = "0.10.10" @@ -4717,7 +4726,7 @@ version = "8.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4d3d07927151ff8575b7087f245456e549fea62edf0ec4e565a5ee50c8402bc3" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "fsevent-sys", "inotify", "kqueue", @@ -4748,7 +4757,7 @@ version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42b8cfee0e339a0337359f3c88165702ac6e600dc01c0cc9579a92d62b08477a" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", ] [[package]] @@ -4883,7 +4892,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "block2 0.5.1", "libc", "objc2 0.5.2", @@ -4899,7 +4908,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "block2 0.6.2", "libc", "objc2 0.6.4", @@ -4920,7 +4929,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6948501a91121d6399b79abaa33a8aa4ea7857fe019f341b8c23ad6e81b79b08" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "libc", "objc2 0.6.4", "objc2-core-audio", @@ -4945,7 +4954,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "block2 0.5.1", "objc2 0.5.2", "objc2-core-location", @@ -4958,7 +4967,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73ad74d880bb43877038da939b7427bba67e9dd42004a18b809ba7d87cee241c" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "objc2 0.6.4", "objc2-foundation 0.3.2", ] @@ -4993,7 +5002,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a89f2ec274a0cf4a32642b2991e8b351a404d290da87bb6a9a9d8632490bd1c" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "objc2 0.6.4", ] @@ -5003,7 +5012,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -5015,7 +5024,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b402a653efbb5e82ce4df10683b6b28027616a2715e90009947d50b8dd298fa" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "objc2 0.6.4", "objc2-foundation 0.3.2", ] @@ -5026,7 +5035,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "block2 0.6.2", "dispatch2", "libc", @@ -5039,7 +5048,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "dispatch2", "objc2 0.6.4", "objc2-core-foundation", @@ -5086,7 +5095,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0cde0dfb48d25d2b4862161a4d5fcc0e3c24367869ad306b0c9ec0073bfed92d" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "objc2 0.6.4", "objc2-core-foundation", "objc2-core-graphics", @@ -5098,7 +5107,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d425caf1df73233f29fd8a5c3e5edbc30d2d4307870f802d18f00d83dc5141a6" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "objc2 0.6.4", "objc2-core-foundation", "objc2-core-graphics", @@ -5117,7 +5126,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "block2 0.5.1", "dispatch", "libc", @@ -5130,7 +5139,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "block2 0.6.2", "libc", "objc2 0.6.4", @@ -5143,7 +5152,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33fafba39597d6dc1fb709123dfa8289d39406734be322956a69f0931c73bb15" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "libc", "objc2-core-foundation", ] @@ -5154,7 +5163,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "objc2 0.6.4", "objc2-core-foundation", ] @@ -5177,7 +5186,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -5189,7 +5198,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0125f776a10d00af4152d74616409f0d4a2053a6f57fa5b7d6aa2854ac04794" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "block2 0.6.2", "objc2 0.6.4", "objc2-foundation 0.3.2", @@ -5201,7 +5210,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "block2 0.5.1", "objc2 0.5.2", "objc2-foundation 0.2.2", @@ -5214,7 +5223,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96c1358452b371bf9f104e21ec536d37a650eb10f7ee379fff67d2e08d537f1f" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "objc2 0.6.4", "objc2-core-foundation", "objc2-foundation 0.3.2", @@ -5237,7 +5246,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "block2 0.5.1", "objc2 0.5.2", "objc2-cloud-kit 0.2.2", @@ -5269,7 +5278,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "block2 0.5.1", "objc2 0.5.2", "objc2-core-location", @@ -5318,9 +5327,9 @@ checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" [[package]] name = "orbclient" -version = "0.3.51" +version = "0.3.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59aed3b33578edcfa1bc96a321d590d31832b6ad55a26f0313362ce687e9abd6" +checksum = "12c6933ddbbd16539a7672e697bb8d41ac3a4e99ac43eeb40c07236bd7fcb2dd" dependencies = [ "libc", "libredox", @@ -5381,27 +5390,27 @@ checksum = "4b6937eda350acc1a5d05872c3cbf99fe78619c269096e2be3d4a350058639d5" [[package]] name = "parley" -version = "0.8.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6c00ec192e1a402861526eff91a4b4690a2e5a17a4ae2deb772d72b49daf868" +checksum = "8fad031076f48f0d4d85ce1aea9b94b4e715a4d636a030a123038f8f5b5e4343" dependencies = [ "fontique", "harfrust", - "hashbrown 0.16.1", + "hashbrown 0.17.0", "icu_normalizer", "icu_properties", "icu_segmenter", "linebender_resource_handle", "parlance", "parley_data", - "skrifa", + "skrifa 0.42.0", ] [[package]] name = "parley_data" -version = "0.8.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "232313eddc02ac27f015e8f8eeb7facce8a896116df7e3eda1bfd9f600a9a39d" +checksum = "19ab9ace3fad1b9ed603ddac5b595e69931fc50263d7e04e4055015b77b02da5" dependencies = [ "icu_properties", ] @@ -5501,9 +5510,9 @@ dependencies = [ [[package]] name = "pkg-config" -version = "0.3.32" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" +checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" [[package]] name = "plain" @@ -5517,7 +5526,7 @@ version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60769b8b31b2a9f263dae2776c37b1b28ae246943cf719eb6946a1db05128a61" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "crc32fast", "fdeflate", "flate2", @@ -5546,9 +5555,9 @@ checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" [[package]] name = "portable-atomic-util" -version = "0.2.6" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "091397be61a01d4be58e7841595bd4bfedb15f1cd54977d79b8271e94ed799a3" +checksum = "c2a106d1259c23fac8e543272398ae0e3c0b8d33c88ed73d0cc71b0f1d902618" dependencies = [ "portable-atomic", ] @@ -5635,7 +5644,7 @@ dependencies = [ "processing_midi", "processing_render", "processing_webcam", - "rand 0.10.0", + "rand 0.10.1", "tracing", "tracing-subscriber", "wasm-bindgen-futures", @@ -5701,7 +5710,7 @@ dependencies = [ [[package]] name = "processing_pyo3" -version = "0.0.1" +version = "0.0.2" dependencies = [ "bevy", "png", @@ -5779,14 +5788,14 @@ dependencies = [ [[package]] name = "pxfm" -version = "0.1.28" +version = "0.1.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5a041e753da8b807c9255f28de81879c78c876392ff2469cde94799b2896b9d" +checksum = "e0c5ccf5294c6ccd63a74f1565028353830a9c2f5eb0c682c355c471726a6e3f" [[package]] name = "pyo3" version = "0.28.3" -source = "git+https://github.com/PyO3/pyo3?branch=main#df36c7165663ec70180d71495bd52031edd075d4" +source = "git+https://github.com/PyO3/pyo3?branch=main#999560aadb5d4d4bdb10670169fc9294663a6313" dependencies = [ "inventory", "libc", @@ -5800,7 +5809,7 @@ dependencies = [ [[package]] name = "pyo3-build-config" version = "0.28.3" -source = "git+https://github.com/PyO3/pyo3?branch=main#df36c7165663ec70180d71495bd52031edd075d4" +source = "git+https://github.com/PyO3/pyo3?branch=main#999560aadb5d4d4bdb10670169fc9294663a6313" dependencies = [ "target-lexicon", ] @@ -5808,7 +5817,7 @@ dependencies = [ [[package]] name = "pyo3-ffi" version = "0.28.3" -source = "git+https://github.com/PyO3/pyo3?branch=main#df36c7165663ec70180d71495bd52031edd075d4" +source = "git+https://github.com/PyO3/pyo3?branch=main#999560aadb5d4d4bdb10670169fc9294663a6313" dependencies = [ "libc", "pyo3-build-config", @@ -5817,7 +5826,7 @@ dependencies = [ [[package]] name = "pyo3-introspection" version = "0.28.3" -source = "git+https://github.com/PyO3/pyo3?branch=main#df36c7165663ec70180d71495bd52031edd075d4" +source = "git+https://github.com/PyO3/pyo3?branch=main#999560aadb5d4d4bdb10670169fc9294663a6313" dependencies = [ "anyhow", "goblin", @@ -5828,7 +5837,7 @@ dependencies = [ [[package]] name = "pyo3-macros" version = "0.28.3" -source = "git+https://github.com/PyO3/pyo3?branch=main#df36c7165663ec70180d71495bd52031edd075d4" +source = "git+https://github.com/PyO3/pyo3?branch=main#999560aadb5d4d4bdb10670169fc9294663a6313" dependencies = [ "proc-macro2", "pyo3-macros-backend", @@ -5839,7 +5848,7 @@ dependencies = [ [[package]] name = "pyo3-macros-backend" version = "0.28.3" -source = "git+https://github.com/PyO3/pyo3?branch=main#df36c7165663ec70180d71495bd52031edd075d4" +source = "git+https://github.com/PyO3/pyo3?branch=main#999560aadb5d4d4bdb10670169fc9294663a6313" dependencies = [ "heck", "proc-macro2", @@ -5900,9 +5909,9 @@ checksum = "019b4b213425016d7d84a153c4c73afb0946fbb4840e4eece7ba8848b9d6da22" [[package]] name = "rand" -version = "0.9.2" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" +checksum = "44c5af06bb1b7d3216d91932aed5265164bf384dc89cd6ba05cf59a35f5f76ea" dependencies = [ "rand_chacha", "rand_core 0.9.5", @@ -5910,13 +5919,13 @@ dependencies = [ [[package]] name = "rand" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc266eb313df6c5c09c1c7b1fbe2510961e5bcd3add930c1e31f7ed9da0feff8" +checksum = "d2e8e8bcc7961af1fdac401278c6a831614941f6164ee3bf4ce61b7edb162207" dependencies = [ "chacha20", "getrandom 0.4.2", - "rand_core 0.10.0", + "rand_core 0.10.1", ] [[package]] @@ -5940,9 +5949,9 @@ dependencies = [ [[package]] name = "rand_core" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c8d0fd677905edcbeedbf2edb6494d676f0e98d54d5cf9bda0b061cb8fb8aba" +checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69" [[package]] name = "rand_distr" @@ -5951,7 +5960,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4d431c2703ccf129de4d45253c03f49ebb22b97d6ad79ee3ecfc7e3f4862c1d8" dependencies = [ "num-traits", - "rand 0.10.0", + "rand 0.10.1", ] [[package]] @@ -5987,7 +5996,7 @@ dependencies = [ "num-traits", "paste", "profiling", - "rand 0.9.2", + "rand 0.9.4", "rand_chacha", "simd_helpers", "thiserror 2.0.18", @@ -6030,9 +6039,9 @@ dependencies = [ [[package]] name = "rayon" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f" +checksum = "fb39b166781f92d482534ef4b4b1b2568f42613b53e5b6c160e24cfbfa30926d" dependencies = [ "either", "rayon-core", @@ -6053,6 +6062,16 @@ name = "read-fonts" version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7b634fabf032fab15307ffd272149b622260f55974d9fad689292a5d33df02e5" +dependencies = [ + "bytemuck", + "font-types", +] + +[[package]] +name = "read-fonts" +version = "0.39.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32d7821ebf634094f5e5ae9d43c3109407f420f03a7a2e021d3a5d955a4f09fc" dependencies = [ "bytemuck", "core_maths", @@ -6080,16 +6099,16 @@ version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", ] [[package]] name = "redox_syscall" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce70a74e890531977d37e532c34d45e9055d2409ed08ddba14529471ed0be16" +checksum = "f450ad9c3b1da563fb6948a8e0fb0fb9269711c9c73d9ea1de5058c79c8d643a" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", ] [[package]] @@ -6156,7 +6175,7 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4147b952f3f819eca0e99527022f7d6a8d05f111aeb0a62960c74eb283bec8fc" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "once_cell", "serde", "serde_derive", @@ -6185,7 +6204,7 @@ version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "errno", "libc", "linux-raw-sys 0.4.15", @@ -6198,7 +6217,7 @@ version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "errno", "libc", "linux-raw-sys 0.12.1", @@ -6340,9 +6359,9 @@ dependencies = [ [[package]] name = "sha3" -version = "0.10.8" +version = "0.10.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" +checksum = "77fd7028345d415a4034cf8777cd4f8ab1851274233b45f84e3d955502d93874" dependencies = [ "digest", "keccak", @@ -6407,7 +6426,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7fbdfe3d2475fbd7ddd1f3e5cf8288a30eb3e5f95832829570cd88115a7434ac" dependencies = [ "bytemuck", - "read-fonts", + "read-fonts 0.37.0", +] + +[[package]] +name = "skrifa" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c844316c7318cf6ae9034ee45edd2c432076ef910fdc4bc598183b31f88d03c3" +dependencies = [ + "bytemuck", + "read-fonts 0.39.1", ] [[package]] @@ -6437,7 +6466,7 @@ version = "0.19.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "calloop", "calloop-wayland-source", "cursor-icon", @@ -6489,7 +6518,7 @@ version = "0.4.0+sdk-1.4.341.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9571ea910ebd84c86af4b3ed27f9dbdc6ad06f17c5f96146b2b671e2976744f" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", ] [[package]] @@ -6549,7 +6578,7 @@ version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "842f3cd369c2ba38966204f983eaa5e54a8e84a7d7159ed36ade2b6c335aae64" dependencies = [ - "skrifa", + "skrifa 0.40.0", "yazi", "zeno", ] @@ -6601,9 +6630,9 @@ dependencies = [ [[package]] name = "taffy" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96fb9d22ffe63c7aa8996275aa0017404b513619bb6cf6309d9f822095afb414" +checksum = "aea22054047c16c3f34d3ac473a2170be1424b1115b2a3adcf28cfb067c88859" dependencies = [ "arrayvec", "grid", @@ -6797,14 +6826,14 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.25.10+spec-1.1.0" +version = "0.25.11+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a82418ca169e235e6c399a84e395ab6debeb3bc90edc959bf0f48647c6a32d1b" +checksum = "0b59c4d22ed448339746c59b905d24568fcbb3ab65a500494f7b8c3e97739f2b" dependencies = [ "indexmap", "toml_datetime 1.1.1+spec-1.1.0", "toml_parser", - "winnow 1.0.1", + "winnow 1.0.2", ] [[package]] @@ -6813,7 +6842,7 @@ version = "1.1.2+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526" dependencies = [ - "winnow 1.0.1", + "winnow 1.0.2", ] [[package]] @@ -6926,15 +6955,15 @@ checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c" [[package]] name = "typenum" -version = "1.19.0" +version = "1.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" +checksum = "40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43de" [[package]] name = "typewit" -version = "1.15.1" +version = "1.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc19094686c694eb41b3b99dcc2f2975d4b078512fa22ae6c63f7ca318bdcff7" +checksum = "214ca0b2191785cbc06209b9ca1861e048e39b5ba33574b3cedd58363d5bb5f6" [[package]] name = "unicode-ident" @@ -6974,9 +7003,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.23.0" +version = "1.23.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ac8b6f42ead25368cf5b098aeb3dc8a1a2c05a3eee8a9a1a68c640edbfc79d9" +checksum = "ddd74a9687298c6858e9b88ec8935ec45d22e8fd5e6394fa1bd4e99a87789c76" dependencies = [ "getrandom 0.4.2", "js-sys", @@ -7062,11 +7091,11 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasip2" -version = "1.0.2+wasi-0.2.9" +version = "1.0.3+wasi-0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5" +checksum = "20064672db26d7cdc89c7798c48a0fdfac8213434a1186e5ef29fd560ae223d6" dependencies = [ - "wit-bindgen", + "wit-bindgen 0.57.1", ] [[package]] @@ -7075,14 +7104,14 @@ version = "0.4.0+wasi-0.3.0-rc-2026-01-06" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" dependencies = [ - "wit-bindgen", + "wit-bindgen 0.51.0", ] [[package]] name = "wasm-bindgen" -version = "0.2.117" +version = "0.2.118" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0551fc1bb415591e3372d0bc4780db7e587d84e2a7e79da121051c5c4b89d0b0" +checksum = "0bf938a0bacb0469e83c1e148908bd7d5a6010354cf4fb73279b7447422e3a89" dependencies = [ "cfg-if 1.0.4", "once_cell", @@ -7093,9 +7122,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.67" +version = "0.4.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03623de6905b7206edd0a75f69f747f134b7f0a2323392d664448bf2d3c5d87e" +checksum = "f371d383f2fb139252e0bfac3b81b265689bf45b6874af544ffa4c975ac1ebf8" dependencies = [ "js-sys", "wasm-bindgen", @@ -7103,9 +7132,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.117" +version = "0.2.118" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fbdf9a35adf44786aecd5ff89b4563a90325f9da0923236f6104e603c7e86be" +checksum = "eeff24f84126c0ec2db7a449f0c2ec963c6a49efe0698c4242929da037ca28ed" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -7113,9 +7142,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.117" +version = "0.2.118" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dca9693ef2bab6d4e6707234500350d8dad079eb508dca05530c85dc3a529ff2" +checksum = "9d08065faf983b2b80a79fd87d8254c409281cf7de75fc4b773019824196c904" dependencies = [ "bumpalo", "proc-macro2", @@ -7126,9 +7155,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.117" +version = "0.2.118" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39129a682a6d2d841b6c429d0c51e5cb0ed1a03829d8b3d1e69a011e62cb3d3b" +checksum = "5fd04d9e306f1907bd13c6361b5c6bfc7b3b3c095ed3f8a9246390f8dbdee129" dependencies = [ "unicode-ident", ] @@ -7161,7 +7190,7 @@ version = "0.244.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "hashbrown 0.15.5", "indexmap", "semver", @@ -7187,7 +7216,7 @@ version = "0.31.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "645c7c96bb74690c3189b5c9cb4ca1627062bb23693a4fad9d8c3de958260144" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "rustix 1.1.4", "wayland-backend", "wayland-scanner", @@ -7199,7 +7228,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "cursor-icon", "wayland-backend", ] @@ -7221,7 +7250,7 @@ version = "0.32.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "563a85523cade2429938e790815fd7319062103b9f4a2dc806e9b53b95982d8f" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "wayland-backend", "wayland-client", "wayland-scanner", @@ -7233,7 +7262,7 @@ version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b6d8cf1eb2c1c31ed1f5643c88a6e53538129d4af80030c8cabd1f9fa884d91" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "wayland-backend", "wayland-client", "wayland-protocols", @@ -7246,7 +7275,7 @@ version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eb04e52f7836d7c7976c78ca0250d61e33873c34156a2a1fc9474828ec268234" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "wayland-backend", "wayland-client", "wayland-protocols", @@ -7284,9 +7313,9 @@ checksum = "323f4da9523e9a669e1eaf9c6e763892769b1d38c623913647bfdc1532fe4549" [[package]] name = "web-sys" -version = "0.3.94" +version = "0.3.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd70027e39b12f0849461e08ffc50b9cd7688d942c1c8e3c7b22273236b4dd0a" +checksum = "4f2dfbb17949fa2088e5d39408c48368947b86f7834484e87b73de55bc14d97d" dependencies = [ "js-sys", "wasm-bindgen", @@ -7358,7 +7387,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72c239a9a747bbd379590985bac952c2e53cb19873f7072b3370c6a6a8e06837" dependencies = [ "arrayvec", - "bitflags 2.11.0", + "bitflags 2.11.1", "bytemuck", "cfg-if 1.0.4", "cfg_aliases", @@ -7390,7 +7419,7 @@ dependencies = [ "arrayvec", "bit-set 0.9.1", "bit-vec 0.9.1", - "bitflags 2.11.0", + "bitflags 2.11.1", "bytemuck", "cfg_aliases", "document-features", @@ -7461,7 +7490,7 @@ dependencies = [ "arrayvec", "ash", "bit-set 0.9.1", - "bitflags 2.11.0", + "bitflags 2.11.1", "block2 0.6.2", "bytemuck", "cfg-if 1.0.4", @@ -7520,7 +7549,7 @@ version = "29.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec2675540fb1a5cfa5ef122d3d5f390e2c75711a0b946410f2d6ac3a0f77d1f6" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "bytemuck", "js-sys", "log", @@ -8067,7 +8096,7 @@ dependencies = [ "ahash", "android-activity", "atomic-waker", - "bitflags 2.11.0", + "bitflags 2.11.1", "block2 0.5.1", "bytemuck", "calloop", @@ -8118,9 +8147,9 @@ checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945" [[package]] name = "winnow" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09dac053f1cd375980747450bfc7250c264eaae0583872e845c0c7cd578872b5" +checksum = "2ee1708bef14716a11bae175f579062d4554d95be2c6829f518df847b7b3fdd0" dependencies = [ "memchr", ] @@ -8134,6 +8163,12 @@ dependencies = [ "wit-bindgen-rust-macro", ] +[[package]] +name = "wit-bindgen" +version = "0.57.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" + [[package]] name = "wit-bindgen-core" version = "0.51.0" @@ -8183,7 +8218,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" dependencies = [ "anyhow", - "bitflags 2.11.0", + "bitflags 2.11.1", "indexmap", "log", "serde", @@ -8263,7 +8298,7 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5" dependencies = [ - "bitflags 2.11.0", + "bitflags 2.11.1", "dlib", "log", "once_cell", diff --git a/crates/processing_input/src/lib.rs b/crates/processing_input/src/lib.rs index 9452d98..56de957 100644 --- a/crates/processing_input/src/lib.rs +++ b/crates/processing_input/src/lib.rs @@ -6,6 +6,7 @@ use bevy::input::mouse::{ AccumulatedMouseMotion, AccumulatedMouseScroll, MouseButton, MouseButtonInput, MouseMotion, MouseScrollUnit, MouseWheel, }; +use bevy::input::touch::TouchPhase; use bevy::prelude::*; use bevy::window::CursorMoved; @@ -88,6 +89,8 @@ pub fn input_set_scroll(surface: Entity, x: f32, y: f32) -> error::Result<()> { x, y, window: surface, + // todo: support touchscreen + phase: TouchPhase::Moved, }); Ok(()) }) From 58809b8ec6718eecd99f4cd2c67cd24bfeb301fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?charlotte=20=F0=9F=8C=B8?= Date: Wed, 22 Apr 2026 10:20:32 -0700 Subject: [PATCH 4/9] Correct frame count. --- crates/processing_pyo3/examples/test.py | 12 ++++++++++++ crates/processing_pyo3/src/lib.rs | 3 +++ crates/processing_render/src/graphics.rs | 4 +--- crates/processing_render/src/lib.rs | 11 +++++++++++ crates/processing_render/src/time.rs | 12 +++++++++--- 5 files changed, 36 insertions(+), 6 deletions(-) create mode 100644 crates/processing_pyo3/examples/test.py diff --git a/crates/processing_pyo3/examples/test.py b/crates/processing_pyo3/examples/test.py new file mode 100644 index 0000000..5367143 --- /dev/null +++ b/crates/processing_pyo3/examples/test.py @@ -0,0 +1,12 @@ +from mewnala import * + + +def setup(): + size(200, 200) + background(100, 0, 0) + print(width) + +def draw(): + pass + +run() diff --git a/crates/processing_pyo3/src/lib.rs b/crates/processing_pyo3/src/lib.rs index 530bc94..efb1b4d 100644 --- a/crates/processing_pyo3/src/lib.rs +++ b/crates/processing_pyo3/src/lib.rs @@ -859,6 +859,9 @@ mod mewnala { graphics.begin_draw()?; } + processing::prelude::advance_frame_count() + .map_err(|e| PyRuntimeError::new_err(format!("{e}")))?; + sync_globals(module, &globals)?; dispatch_event_callbacks(&locals)?; diff --git a/crates/processing_render/src/graphics.rs b/crates/processing_render/src/graphics.rs index ccf42e4..1f691b4 100644 --- a/crates/processing_render/src/graphics.rs +++ b/crates/processing_render/src/graphics.rs @@ -201,9 +201,7 @@ pub fn create( Camera { // always load the previous frame (provides sketch like behavior) clear_color: ClearColorConfig::None, - // TODO: toggle this conditionally based on whether we need to write back MSAA - // when doing manual pixel updates - msaa_writeback: MsaaWriteback::Off, + msaa_writeback: MsaaWriteback::Auto, ..default() }, target, diff --git a/crates/processing_render/src/lib.rs b/crates/processing_render/src/lib.rs index 43a500b..27636dd 100644 --- a/crates/processing_render/src/lib.rs +++ b/crates/processing_render/src/lib.rs @@ -43,6 +43,8 @@ impl Plugin for ProcessingRenderPlugin { let config = app.world().resource::().clone(); + app.init_resource::(); + let has_sketch_file = config .get(ConfigKey::SketchFileName) .is_some_and(|f| !f.is_empty()); @@ -1393,6 +1395,15 @@ pub fn frame_count() -> error::Result { }) } +pub fn advance_frame_count() -> error::Result<()> { + app_mut(|app| { + app.world_mut() + .run_system_cached(time::advance_frame_count) + .unwrap(); + Ok(()) + }) +} + pub fn delta_time() -> error::Result { app_mut(|app| Ok(app.world_mut().run_system_cached(time::delta_secs).unwrap())) } diff --git a/crates/processing_render/src/time.rs b/crates/processing_render/src/time.rs index 4f7bcbd..180533a 100644 --- a/crates/processing_render/src/time.rs +++ b/crates/processing_render/src/time.rs @@ -1,9 +1,15 @@ -use bevy::diagnostic::FrameCount; use bevy::prelude::*; use bevy::time::Time; -pub fn frame_count(count: Option>) -> u32 { - count.map(|c| c.0).unwrap_or(0) +#[derive(Resource, Default, Debug, Clone, Copy)] +pub struct ProcessingFrame(pub u32); + +pub fn frame_count(frame: Option>) -> u32 { + frame.map(|f| f.0).unwrap_or(0) +} + +pub fn advance_frame_count(mut frame: ResMut) { + frame.0 = frame.0.wrapping_add(1); } pub fn delta_secs(time: Option>) -> f32 { From 370124f02df6e7d130e2be2cd639734763d5e10f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?charlotte=20=F0=9F=8C=B8?= Date: Wed, 22 Apr 2026 10:32:08 -0700 Subject: [PATCH 5/9] Loop / no_loop. --- crates/processing_pyo3/src/lib.rs | 69 ++++++++++++++++++++++++++++--- 1 file changed, 63 insertions(+), 6 deletions(-) diff --git a/crates/processing_pyo3/src/lib.rs b/crates/processing_pyo3/src/lib.rs index efb1b4d..3480787 100644 --- a/crates/processing_pyo3/src/lib.rs +++ b/crates/processing_pyo3/src/lib.rs @@ -41,12 +41,36 @@ use std::ffi::{CStr, CString}; use bevy::log::warn; use gltf::Gltf; -use std::cell::RefCell; +use std::cell::{Cell, RefCell}; use std::collections::HashMap; use std::env; +#[derive(Clone, Copy)] +struct LoopState { + looping: bool, + redraw_requested: bool, +} + +impl Default for LoopState { + fn default() -> Self { + Self { + looping: true, + redraw_requested: true, + } + } +} + thread_local! { static LAST_GLOBALS: RefCell>> = RefCell::new(HashMap::new()); + static LOOP_STATE: Cell = Cell::new(LoopState::default()); +} + +fn update_loop_state(f: impl FnOnce(&mut LoopState)) { + LOOP_STATE.with(|s| { + let mut state = s.get(); + f(&mut state); + s.set(state); + }); } /// Writes a new value to globals, iff the new value does not match a previous tracked value. @@ -710,9 +734,26 @@ mod mewnala { } #[pyfunction] - #[pyo3(pass_module)] - fn redraw(module: &Bound<'_, PyModule>) -> PyResult<()> { - graphics!(module).present() + fn redraw() -> PyResult<()> { + update_loop_state(|s| { + if !s.looping { + s.redraw_requested = true; + } + }); + Ok(()) + } + + #[pyfunction] + #[pyo3(name = "loop")] + fn loop_() -> PyResult<()> { + update_loop_state(|s| s.looping = true); + Ok(()) + } + + #[pyfunction] + fn no_loop() -> PyResult<()> { + update_loop_state(|s| s.looping = false); + Ok(()) } #[pyfunction] @@ -856,14 +897,28 @@ mod mewnala { if !graphics.surface.poll_events() { break; } - graphics.begin_draw()?; } + dispatch_event_callbacks(&locals)?; + + let should_draw = LOOP_STATE.with(|s| { + let state = s.get(); + state.looping || state.redraw_requested + }); + + if !should_draw { + std::thread::sleep(std::time::Duration::from_millis(16)); + continue; + } + + get_graphics_mut(module)? + .ok_or_else(|| PyRuntimeError::new_err("call size() first"))? + .begin_draw()?; + processing::prelude::advance_frame_count() .map_err(|e| PyRuntimeError::new_err(format!("{e}")))?; sync_globals(module, &globals)?; - dispatch_event_callbacks(&locals)?; draw_fn .call0() @@ -872,6 +927,8 @@ mod mewnala { get_graphics(module)? .ok_or_else(|| PyRuntimeError::new_err("call size() first"))? .end_draw()?; + + update_loop_state(|s| s.redraw_requested = false); } Ok(()) From 6e8941c42f2abe08468df04bf7ced2745aaa4349 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?charlotte=20=F0=9F=8C=B8?= Date: Wed, 22 Apr 2026 12:39:34 -0700 Subject: [PATCH 6/9] Clearify setup/draw semantics (make both optional). --- crates/processing_pyo3/src/lib.rs | 229 ++++++++++++++++++------------ 1 file changed, 140 insertions(+), 89 deletions(-) diff --git a/crates/processing_pyo3/src/lib.rs b/crates/processing_pyo3/src/lib.rs index 3480787..0bcaf5a 100644 --- a/crates/processing_pyo3/src/lib.rs +++ b/crates/processing_pyo3/src/lib.rs @@ -162,14 +162,100 @@ fn dispatch_event_callbacks(locals: &Bound<'_, PyAny>) -> PyResult<()> { Ok(()) } -/// Get a shared ref to the Graphics context, or return Ok(()) if not yet initialized. -macro_rules! graphics { - ($module:expr) => { - match get_graphics($module)? { - Some(g) => g, - None => return Ok(()), +fn create_graphics_context( + module: &Bound<'_, PyModule>, + width: u32, + height: u32, +) -> PyResult<()> { + let py = module.py(); + let env = detect_environment(py)?; + + let interactive = env != "script"; + let log_level = if interactive { Some("error") } else { None }; + + let has_existing = module + .getattr("_graphics") + .ok() + .map(|a| !a.is_none()) + .unwrap_or(false); + if has_existing { + module.setattr("_graphics", py.None())?; + } + + match env.as_str() { + "jupyter" => { + let asset_path = get_asset_root()?; + let graphics = + Graphics::new_offscreen(width, height, asset_path.as_str(), log_level)?; + module.setattr("_graphics", graphics)?; + + if !has_existing { + let code = CString::new(JUPYTER_POST_EXECUTE_CODE)?; + py.run(code.as_c_str(), None, None).map_err(|e| { + PyRuntimeError::new_err(format!("Failed to register Jupyter hooks: {e}")) + })?; + } + } + "ipython" => { + let asset_path = get_asset_root()?; + let (sketch_root, sketch_file) = get_sketch_info()?; + let graphics = Graphics::new( + width, + height, + asset_path.as_str(), + sketch_root.as_str(), + sketch_file.as_str(), + log_level, + )?; + module.setattr("_graphics", graphics)?; + + if !has_existing { + let hook_code = CString::new(REGISTER_INPUTHOOK_CODE)?; + py.run(hook_code.as_c_str(), None, None).map_err(|e| { + PyRuntimeError::new_err(format!("Failed to register inputhook: {e}")) + })?; + + let post_code = CString::new(IPYTHON_POST_EXECUTE_CODE)?; + py.run(post_code.as_c_str(), None, None).map_err(|e| { + PyRuntimeError::new_err(format!( + "Failed to register post-execute hook: {e}" + )) + })?; + } + } + _ => { + let asset_path = get_asset_root()?; + let (sketch_root, sketch_file) = get_sketch_info()?; + let graphics = Graphics::new( + width, + height, + asset_path.as_str(), + sketch_root.as_str(), + sketch_file.as_str(), + log_level, + )?; + module.setattr("_graphics", graphics)?; } - }; + } + + Ok(()) +} + +const DEFAULT_WIDTH: u32 = 100; +const DEFAULT_HEIGHT: u32 = 100; + +fn ensure_graphics(module: &Bound<'_, PyModule>) -> PyResult<()> { + if get_graphics(module)?.is_some() { + return Ok(()); + } + create_graphics_context(module, DEFAULT_WIDTH, DEFAULT_HEIGHT) +} + +macro_rules! graphics { + ($module:expr) => {{ + ensure_graphics($module)?; + get_graphics($module)?.expect("ensure_graphics guarantees Some") + }}; } fn get_asset_root() -> PyResult { @@ -518,6 +604,10 @@ mod mewnala { #[pymodule_init] fn init(module: &Bound<'_, PyModule>) -> PyResult<()> { use processing::prelude::BlendMode; + + module.add("width", super::DEFAULT_WIDTH)?; + module.add("height", super::DEFAULT_HEIGHT)?; + module.add("BLEND", PyBlendMode::from_preset(BlendMode::Blend))?; module.add("ADD", PyBlendMode::from_preset(BlendMode::Add))?; module.add("SUBTRACT", PyBlendMode::from_preset(BlendMode::Subtract))?; @@ -759,81 +849,9 @@ mod mewnala { #[pyfunction] #[pyo3(pass_module)] fn size(module: &Bound<'_, PyModule>, width: u32, height: u32) -> PyResult<()> { - let py = module.py(); - let env = detect_environment(py)?; - - let interactive = env != "script"; - let log_level = if interactive { Some("error") } else { None }; - - // Check if we already have a graphics context (i.e. size() was called before). - // Drop the old one first so the window and GPU resources are released. - let has_existing = module - .getattr("_graphics") - .ok() - .map(|a| !a.is_none()) - .unwrap_or(false); - if has_existing { - module.setattr("_graphics", py.None())?; - } - - match env.as_str() { - "jupyter" => { - let asset_path = get_asset_root()?; - let graphics = - Graphics::new_offscreen(width, height, asset_path.as_str(), log_level)?; - module.setattr("_graphics", graphics)?; - - if !has_existing { - let code = CString::new(JUPYTER_POST_EXECUTE_CODE)?; - py.run(code.as_c_str(), None, None).map_err(|e| { - PyRuntimeError::new_err(format!("Failed to register Jupyter hooks: {e}")) - })?; - } - } - "ipython" => { - let asset_path = get_asset_root()?; - let (sketch_root, sketch_file) = get_sketch_info()?; - let graphics = Graphics::new( - width, - height, - asset_path.as_str(), - sketch_root.as_str(), - sketch_file.as_str(), - log_level, - )?; - module.setattr("_graphics", graphics)?; - - if !has_existing { - let hook_code = CString::new(REGISTER_INPUTHOOK_CODE)?; - py.run(hook_code.as_c_str(), None, None).map_err(|e| { - PyRuntimeError::new_err(format!("Failed to register inputhook: {e}")) - })?; - - let post_code = CString::new(IPYTHON_POST_EXECUTE_CODE)?; - py.run(post_code.as_c_str(), None, None).map_err(|e| { - PyRuntimeError::new_err(format!( - "Failed to register post-execute hook: {e}" - )) - })?; - } - } - - // this is the default "script" mode where we assume the user will call run() to start the draw loop - _ => { - let asset_path = get_asset_root()?; - let (sketch_root, sketch_file) = get_sketch_info()?; - let graphics = Graphics::new( - width, - height, - asset_path.as_str(), - sketch_root.as_str(), - sketch_file.as_str(), - log_level, - )?; - module.setattr("_graphics", graphics)?; - } - } + create_graphics_context(module, width, height)?; + let py = module.py(); let sys = PyModule::import(py, "sys")?; let frame = sys.getattr("_getframe")?.call1((0,))?; let caller_globals = frame.getattr("f_globals")?; @@ -857,15 +875,48 @@ mod mewnala { let builtins = PyModule::import(py, "builtins")?; let locals = builtins.getattr("locals")?.call0()?; - let setup_fn = locals.get_item("setup")?; - let mut draw_fn = locals.get_item("draw")?; + let setup_fn = locals.get_item("setup").ok(); + let mut draw_fn = locals.get_item("draw").ok(); - // call setup - setup_fn.call0()?; + if let Some(ref setup) = setup_fn { + setup.call0()?; + } - let mut globals = draw_fn.getattr("__globals__")?; + ensure_graphics(module)?; + + let mut globals = if let Some(ref draw) = draw_fn { + draw.getattr("__globals__")? + } else if let Some(ref setup) = setup_fn { + setup.getattr("__globals__")? + } else { + let sys = PyModule::import(py, "sys")?; + let frame = sys.getattr("_getframe")?.call1((0,))?; + frame.getattr("f_globals")? + }; sync_globals(module, &globals)?; + // if there's no draw fn, we enter an idle loop + if draw_fn.is_none() { + get_graphics(module)? + .ok_or_else(|| PyRuntimeError::new_err("call size() first"))? + .end_draw()?; + + loop { + { + let mut graphics = get_graphics_mut(module)? + .ok_or_else(|| PyRuntimeError::new_err("call size() first"))?; + if !graphics.surface.poll_events() { + break; + } + } + dispatch_event_callbacks(&locals)?; + std::thread::sleep(std::time::Duration::from_millis(16)); + } + + return Ok(()); + } + let draw_fn_ref = draw_fn.as_mut().expect("checked above"); + // start draw loop loop { { @@ -887,8 +938,8 @@ mod mewnala { } } - draw_fn = locals.get_item("draw").unwrap().unwrap(); - globals = draw_fn.getattr("__globals__")?; + *draw_fn_ref = locals.get_item("draw").unwrap().unwrap(); + globals = draw_fn_ref.getattr("__globals__")?; reset_tracked_globals(); dbg!(locals); @@ -920,7 +971,7 @@ mod mewnala { sync_globals(module, &globals)?; - draw_fn + draw_fn_ref .call0() .map_err(|e| PyRuntimeError::new_err(format!("{e}")))?; From cb4f7f97d6fc8f21b3aeabebdba0d981fc2ffc78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?charlotte=20=F0=9F=8C=B8?= Date: Wed, 22 Apr 2026 13:19:36 -0700 Subject: [PATCH 7/9] Fixes for macos. --- crates/processing_pyo3/src/lib.rs | 24 +++++++++++------------- crates/processing_render/src/graphics.rs | 10 ++++++++++ 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/crates/processing_pyo3/src/lib.rs b/crates/processing_pyo3/src/lib.rs index 0bcaf5a..4f7aca3 100644 --- a/crates/processing_pyo3/src/lib.rs +++ b/crates/processing_pyo3/src/lib.rs @@ -162,11 +162,7 @@ fn dispatch_event_callbacks(locals: &Bound<'_, PyAny>) -> PyResult<()> { Ok(()) } -fn create_graphics_context( - module: &Bound<'_, PyModule>, - width: u32, - height: u32, -) -> PyResult<()> { +fn create_graphics_context(module: &Bound<'_, PyModule>, width: u32, height: u32) -> PyResult<()> { let py = module.py(); let env = detect_environment(py)?; @@ -185,8 +181,7 @@ fn create_graphics_context( match env.as_str() { "jupyter" => { let asset_path = get_asset_root()?; - let graphics = - Graphics::new_offscreen(width, height, asset_path.as_str(), log_level)?; + let graphics = Graphics::new_offscreen(width, height, asset_path.as_str(), log_level)?; module.setattr("_graphics", graphics)?; if !has_existing { @@ -217,9 +212,7 @@ fn create_graphics_context( let post_code = CString::new(IPYTHON_POST_EXECUTE_CODE)?; py.run(post_code.as_c_str(), None, None).map_err(|e| { - PyRuntimeError::new_err(format!( - "Failed to register post-execute hook: {e}" - )) + PyRuntimeError::new_err(format!("Failed to register post-execute hook: {e}")) })?; } } @@ -894,9 +887,15 @@ mod mewnala { frame.getattr("f_globals")? }; sync_globals(module, &globals)?; - - // if there's no draw fn, we enter an idle loop + + // no draw is defined. flush any top level code and then idle if draw_fn.is_none() { + { + let mut graphics = get_graphics_mut(module)? + .ok_or_else(|| PyRuntimeError::new_err("call size() first"))?; + graphics.surface.poll_events(); + } + get_graphics(module)? .ok_or_else(|| PyRuntimeError::new_err("call size() first"))? .end_draw()?; @@ -917,7 +916,6 @@ mod mewnala { } let draw_fn_ref = draw_fn.as_mut().expect("checked above"); - // start draw loop loop { { let mut graphics = get_graphics_mut(module)? diff --git a/crates/processing_render/src/graphics.rs b/crates/processing_render/src/graphics.rs index 1f691b4..ffbc56c 100644 --- a/crates/processing_render/src/graphics.rs +++ b/crates/processing_render/src/graphics.rs @@ -445,6 +445,16 @@ pub fn begin_draw(In(entity): In, mut state_query: Query<&mut RenderStat } pub fn flush(app: &mut App, entity: Entity) -> Result<()> { + // f there's nothing to render, skip the whole render pass. this avoids some issues on + // macos with msaa resolve where nothing is rendered + let is_empty = graphics_mut!(app, entity) + .get::() + .map(|c| c.commands.is_empty()) + .unwrap_or(true); + if is_empty { + return Ok(()); + } + graphics_mut!(app, entity).insert(Flush); app.update(); graphics_mut!(app, entity).remove::(); From 7ac76daf63e06fa519612726ead6fa20cdfebadc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?charlotte=20=F0=9F=8C=B8?= Date: Wed, 22 Apr 2026 13:22:02 -0700 Subject: [PATCH 8/9] Fmt. --- crates/processing_pyo3/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/processing_pyo3/src/lib.rs b/crates/processing_pyo3/src/lib.rs index 4f7aca3..2e889c0 100644 --- a/crates/processing_pyo3/src/lib.rs +++ b/crates/processing_pyo3/src/lib.rs @@ -887,7 +887,7 @@ mod mewnala { frame.getattr("f_globals")? }; sync_globals(module, &globals)?; - + // no draw is defined. flush any top level code and then idle if draw_fn.is_none() { { From 786f742cf8c9e0677daceb50382a72a3cb1b104c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Moon=20Dav=C3=A9?= Date: Thu, 23 Apr 2026 00:55:55 +0200 Subject: [PATCH 9/9] clippy --- crates/processing_render/src/render/primitive/shape.rs | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/crates/processing_render/src/render/primitive/shape.rs b/crates/processing_render/src/render/primitive/shape.rs index ff5674a..1ed20ef 100644 --- a/crates/processing_render/src/render/primitive/shape.rs +++ b/crates/processing_render/src/render/primitive/shape.rs @@ -252,8 +252,8 @@ pub fn build_direct_fill(mesh: &mut Mesh, builder: &ShapeBuilder, color: Color) ); } } - ShapeKind::TriangleFan => { - if vertices.len() >= 3 { + ShapeKind::TriangleFan + if vertices.len() >= 3 => { let hub = vertices[0]; for i in 1..vertices.len() - 1 { push_triangle( @@ -268,7 +268,6 @@ pub fn build_direct_fill(mesh: &mut Mesh, builder: &ShapeBuilder, color: Color) ); } } - } ShapeKind::TriangleStrip => { for i in 0..vertices.len().saturating_sub(2) { if i % 2 == 0 { @@ -372,8 +371,8 @@ pub fn build_direct_stroke( ); } } - ShapeKind::TriangleFan => { - if vertices.len() >= 3 { + ShapeKind::TriangleFan + if vertices.len() >= 3 => { let hub = vertices[0]; for i in 1..vertices.len() - 1 { stroke_polygon( @@ -386,7 +385,6 @@ pub fn build_direct_stroke( ); } } - } ShapeKind::TriangleStrip => { for i in 0..vertices.len().saturating_sub(2) { if i % 2 == 0 {