this repo has no description
3
fork

Configure Feed

Select the types of activity you want to include in your feed.

๐Ÿ‘ฉโ€๐Ÿ’ปโ€ Add EngineControl::Ignore and EngineControll:RenderFromCanvas(Canvas)

+37 -12
+37 -12
src/video/engine.rs
··· 1 1 use super::{context::Context, hooks::milliseconds_to_timestamp, Video}; 2 2 use crate::rendering::stringify_svg; 3 - use crate::SVGRenderable; 3 + use crate::{Canvas, SVGRenderable}; 4 4 use anyhow::Result; 5 5 use measure_time::debug_time; 6 6 use std::sync::mpsc::SyncSender; ··· 48 48 49 49 let control = controller(&context); 50 50 51 - if control.stop_rendering_beforehand() { 52 - println!( 53 - "Stopping rendering as requested before frame {}", 54 - context.frame 55 - ); 51 + let (stop_before, stop_after, skip_rendering, skip_hooks) = ( 52 + control.stop_rendering_beforehand(), 53 + control.stop_rendering_afterwards(), 54 + !control.render_this_one(), 55 + !control.run_hooks_on_this_one(), 56 + ); 57 + 58 + if stop_before { 56 59 break; 60 + } 61 + 62 + if skip_hooks { 63 + continue; 64 + } 65 + 66 + if let EngineControl::RenderFromCanvas(new_canvas) = control { 67 + canvas = new_canvas; 57 68 } 58 69 59 70 if context.marker() != "" { ··· 112 123 } 113 124 } 114 125 115 - if control.render_this_one() 116 - && context.frame != previous_rendered_frame 117 - { 126 + if !skip_rendering && context.frame != previous_rendered_frame { 118 127 output.send(( 119 128 Duration::from_millis(context.ms as _), 120 129 stringify_svg(canvas.render_to_svg( ··· 131 140 previous_rendered_frame = context.frame; 132 141 } 133 142 134 - if control.stop_rendering_afterwards() { 143 + if stop_after { 135 144 println!( 136 145 "Stopping rendering as requested after frame {}", 137 146 context.frame ··· 150 159 &self, 151 160 frame_no: usize, 152 161 ) -> Result<(Duration, String)> { 162 + debug_time!("render_single_frame"); 153 163 let (tx, rx) = std::sync::mpsc::sync_channel::<(Duration, String)>(2); 154 164 155 165 self.render(tx, |ctx| { ··· 186 196 187 197 /// Tells the rendering engine what to do with a frame 188 198 pub enum EngineControl { 199 + /// Don't run hooks or anything on this frame 200 + Ignore, 189 201 /// Skip to the next frame, don't render this one 190 202 Skip, 191 203 /// Render this frame as usual ··· 194 206 Finish, 195 207 /// Don't render this frame and stop rendering 196 208 Stop, 209 + /// Set canvas and then render this frame 210 + RenderFromCanvas(Canvas), 197 211 } 198 212 199 213 impl EngineControl { 200 214 pub fn render_this_one(&self) -> bool { 201 215 match self { 202 - EngineControl::Render | EngineControl::Finish => true, 203 - EngineControl::Skip | EngineControl::Stop => false, 216 + EngineControl::RenderFromCanvas(_) 217 + | EngineControl::Render 218 + | EngineControl::Finish => true, 219 + EngineControl::Ignore | EngineControl::Skip | EngineControl::Stop => { 220 + false 221 + } 222 + } 223 + } 224 + 225 + pub fn run_hooks_on_this_one(&self) -> bool { 226 + match self { 227 + EngineControl::Ignore => false, 228 + _ => true, 204 229 } 205 230 } 206 231