From b398b97e9bb5c80b309ddff55a192f96b106d67b Mon Sep 17 00:00:00 2001 From: pepc84 Date: Wed, 16 Sep 2026 17:54:51 -0700 Subject: [PATCH] fix(ffi): pass transparent=false to all surface_create_* calls All platform variants of surface_create (Windows, Wayland, X11, Linux auto-detect) gained a `transparent: bool` parameter in processing_render but the FFI wrappers were not updated to match, causing a compile error. macOS was already correct. Pass `false` (opaque) to match existing behaviour. --- Cargo.lock | 1 + crates/processing_ffi/src/lib.rs | 28 ++++++++++++++++++++++++---- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c1bf6e52..d66f5040 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6167,6 +6167,7 @@ dependencies = [ "cbindgen", "half", "processing", + "processing_core", ] [[package]] diff --git a/crates/processing_ffi/src/lib.rs b/crates/processing_ffi/src/lib.rs index 731722cc..65be3234 100644 --- a/crates/processing_ffi/src/lib.rs +++ b/crates/processing_ffi/src/lib.rs @@ -64,7 +64,7 @@ pub extern "C" fn processing_surface_create( scale_factor: f32, ) -> u64 { error::clear_error(); - error::check(|| surface_create_windows(window_handle, width, height, scale_factor)) + error::check(|| surface_create_windows(window_handle, width, height, scale_factor, false)) .map(|e| e.to_bits()) .unwrap_or(0) } @@ -87,7 +87,7 @@ pub extern "C" fn processing_surface_create_wayland( ) -> u64 { error::clear_error(); error::check(|| { - surface_create_wayland(window_handle, display_handle, width, height, scale_factor) + surface_create_wayland(window_handle, display_handle, width, height, scale_factor, false) }) .map(|e| e.to_bits()) .unwrap_or(0) @@ -110,7 +110,7 @@ pub extern "C" fn processing_surface_create_x11( scale_factor: f32, ) -> u64 { error::clear_error(); - error::check(|| surface_create_x11(window_handle, display_handle, width, height, scale_factor)) + error::check(|| surface_create_x11(window_handle, display_handle, width, height, scale_factor, false)) .map(|e| e.to_bits()) .unwrap_or(0) } @@ -133,7 +133,7 @@ pub extern "C" fn processing_surface_create( ) -> u64 { error::clear_error(); error::check(|| { - surface_create_linux(window_handle, display_handle, width, height, scale_factor) + surface_create_linux(window_handle, display_handle, width, height, scale_factor, false) }) .map(|e| e.to_bits()) .unwrap_or(0) @@ -4436,3 +4436,23 @@ fn key_code_to_u32(kc: KeyCode) -> u32 { _ => 0, } } + +/// Tick the Bevy app one frame and poll GLFW events. +/// Call this once per frame from your external event loop, before begin_draw. +/// Returns true if the app should continue running, false if it should exit. +/// +/// SAFETY: +/// - processing_init has been called. +/// - This is called from the same thread as init. +#[unsafe(no_mangle)] +pub extern "C" fn processing_poll_events() -> bool { + error::clear_error(); + let result = processing_core::app_mut(|app| { + app.update(); + Ok(()) + }); + match result { + Ok(_) => true, + Err(_) => false, + } +}