1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
use super::canvas_renderer::*;
use flo_canvas::*;
use flo_render::*;
use futures::prelude::*;
pub fn render_canvas_offscreen<'a, DrawStream, RenderContext>(context: &'a mut RenderContext, width: usize, height: usize, scale: f32, actions: DrawStream) -> impl 'a+Future<Output=Vec<u8>>
where
DrawStream: 'a+Stream<Item=Draw>,
RenderContext: 'a+OffscreenRenderContext {
async move {
let actions = Box::pin(actions);
let mut actions = actions.ready_chunks(10000);
let mut render_target = context.create_render_target(width, height);
let mut renderer = CanvasRenderer::new();
renderer.set_viewport(0.0..(width as f32), 0.0..(height as f32), width as f32, height as f32, scale);
while let Some(drawing) = actions.next().await {
let rendering = renderer.draw(drawing.into_iter());
let rendering = rendering.collect::<Vec<_>>().await;
render_target.render(rendering);
}
render_target.realize()
}
}