flutter_wgpu_texture_core 0.2.1

Core trait and scene registry for flutter_wgpu_texture
Documentation
/// Arguments passed to [`Scene::render`] on every frame.
pub struct SceneRenderArgs<'a> {
    pub device: &'a wgpu::Device,
    pub queue: &'a wgpu::Queue,
    pub view: &'a wgpu::TextureView,
    pub width: u32,
    pub height: u32,
    pub dt: f32,
    pub animation_running: bool,
    pub clear_color: [f32; 4],
}

/// Trait that all renderable scenes must implement.
///
/// The plugin plumbing calls [`Scene::render`] every frame after managing the
/// present target. Everything else — shaders, pipelines, buffers, uniforms —
/// stays inside the scene implementation.
///
/// To register a scene so the plugin can instantiate it by name, use
/// [`register_scene`](crate::register_scene) inside a `#[ctor::ctor]` function:
///
/// ```rust,no_run
/// use flutter_wgpu_texture_core::{Scene, SceneRenderArgs, register_scene};
///
/// struct MyScene;
/// impl Scene for MyScene {
///     fn render(&mut self, args: &SceneRenderArgs, encoder: &mut wgpu::CommandEncoder)
///         -> Result<(), String> { Ok(()) }
/// }
///
/// #[ctor::ctor]
/// fn _register() {
///     register_scene("my_scene", |device, _w, _h| Ok(Box::new(MyScene)));
/// }
/// ```
pub trait Scene: Send {
    /// Render a single frame into `args.view`.
    fn render(
        &mut self,
        args: &SceneRenderArgs,
        encoder: &mut wgpu::CommandEncoder,
    ) -> Result<(), String>;

    /// Called when the surface is resized. Re-create any size-dependent GPU
    /// resources (e.g. depth textures) here.
    fn resize(&mut self, device: &wgpu::Device, width: u32, height: u32) {
        let _ = (device, width, height);
    }

    fn set_float_param(&mut self, _key: &str, _value: f32) {}
    fn set_bool_param(&mut self, _key: &str, _value: bool) {}
    fn set_vec4_param(&mut self, _key: &str, _value: [f32; 4]) {}
    fn invoke_command(&mut self, _command: &str, _payload: &str) -> Result<(), String> {
        Ok(())
    }
}