Add a convenience method for creating a scene proxy with an empty scene.
This makes animation rendering loops a bit easier for users.
This commit is contained in:
parent
d5a12e0e9f
commit
89ca998fa8
|
@ -180,7 +180,6 @@ dependencies = [
|
|||
"pathfinder_gl 0.1.0",
|
||||
"pathfinder_gpu 0.1.0",
|
||||
"pathfinder_renderer 0.1.0",
|
||||
"pretty_env_logger 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"sdl2 0.32.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"sdl2-sys 0.32.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
|
|
@ -143,7 +143,7 @@ impl<W> DemoApp<W> where W: Window {
|
|||
viewport.size());
|
||||
let camera = Camera::new(options.mode, scene_metadata.view_box, viewport.size());
|
||||
|
||||
let scene_proxy = SceneProxy::new(built_svg.scene, executor);
|
||||
let scene_proxy = SceneProxy::from_scene(built_svg.scene, executor);
|
||||
|
||||
let ground_program = GroundProgram::new(&renderer.device, resources);
|
||||
let ground_vertex_array = GroundVertexArray::new(&renderer.device,
|
||||
|
|
|
@ -74,7 +74,7 @@ fn main() {
|
|||
canvas.stroke_path(path);
|
||||
|
||||
// Render the canvas to screen.
|
||||
let scene = SceneProxy::new(canvas.into_scene(), RayonExecutor);
|
||||
let scene = SceneProxy::from_scene(canvas.into_scene(), RayonExecutor);
|
||||
scene.build_and_render(&mut renderer, RenderOptions::default());
|
||||
window.gl_swap_window();
|
||||
|
||||
|
|
|
@ -6,7 +6,6 @@ edition = "2018"
|
|||
|
||||
[dependencies]
|
||||
gl = "0.6"
|
||||
pretty_env_logger = "0.3"
|
||||
sdl2 = "0.32"
|
||||
sdl2-sys = "0.32"
|
||||
|
||||
|
|
|
@ -37,8 +37,6 @@ const CIRCLE_THICKNESS: f32 = 16.0;
|
|||
const COLOR_CYCLE_SPEED: f32 = 0.0025;
|
||||
|
||||
fn main() {
|
||||
pretty_env_logger::init();
|
||||
|
||||
// Set up SDL2.
|
||||
let sdl_context = sdl2::init().unwrap();
|
||||
let video = sdl_context.video().unwrap();
|
||||
|
@ -87,7 +85,7 @@ fn main() {
|
|||
|
||||
struct MoireRenderer {
|
||||
renderer: Renderer<GLDevice>,
|
||||
scene: Option<SceneProxy>,
|
||||
scene: SceneProxy,
|
||||
frame: i32,
|
||||
window_size: Point2DI32,
|
||||
drawable_size: Point2DI32,
|
||||
|
@ -100,7 +98,7 @@ impl MoireRenderer {
|
|||
-> MoireRenderer {
|
||||
MoireRenderer {
|
||||
renderer,
|
||||
scene: None,
|
||||
scene: SceneProxy::new(RayonExecutor),
|
||||
frame: 0,
|
||||
window_size,
|
||||
drawable_size,
|
||||
|
@ -138,16 +136,9 @@ impl MoireRenderer {
|
|||
self.draw_circles(&mut canvas, outer_center);
|
||||
self.draw_circles(&mut canvas, inner_center);
|
||||
|
||||
// Build scene if necessary.
|
||||
// TODO(pcwalton): Allow the user to build an empty scene proxy so they don't have to do this.
|
||||
match self.scene {
|
||||
None => self.scene = Some(SceneProxy::new(canvas.into_scene(), RayonExecutor)),
|
||||
Some(ref mut scene) => scene.replace_scene(canvas.into_scene()),
|
||||
}
|
||||
|
||||
// Render the scene.
|
||||
self.scene.as_mut().unwrap().build_and_render(&mut self.renderer,
|
||||
RenderOptions::default());
|
||||
// Build and render scene.
|
||||
self.scene.replace_scene(canvas.into_scene());
|
||||
self.scene.build_and_render(&mut self.renderer, RenderOptions::default());
|
||||
|
||||
self.frame += 1;
|
||||
}
|
||||
|
|
|
@ -62,7 +62,7 @@ fn main() {
|
|||
canvas.stroke_text("Goodbye Pathfinder!", Point2DF32::new(32.0, 96.0));
|
||||
|
||||
// Render the canvas to screen.
|
||||
let scene = SceneProxy::new(canvas.into_scene(), RayonExecutor);
|
||||
let scene = SceneProxy::from_scene(canvas.into_scene(), RayonExecutor);
|
||||
scene.build_and_render(&mut renderer, RenderOptions::default());
|
||||
window.gl_swap_window();
|
||||
|
||||
|
|
|
@ -369,14 +369,12 @@ impl Contour {
|
|||
let rotation = Transform2DF32::from_rotation(angle);
|
||||
segment = segment.transform(&scale.post_mul(&rotation).post_mul(&translation));
|
||||
|
||||
/*
|
||||
println!("angle={} start_angle={} end_angle={} sweep_angle={} segment={:?}",
|
||||
debug!("angle={} start_angle={} end_angle={} sweep_angle={} segment={:?}",
|
||||
angle,
|
||||
start_angle,
|
||||
end_angle,
|
||||
sweep_angle,
|
||||
segment);
|
||||
*/
|
||||
|
||||
if first_segment {
|
||||
self.push_full_segment(&segment, true);
|
||||
|
|
|
@ -36,7 +36,12 @@ pub struct SceneProxy {
|
|||
}
|
||||
|
||||
impl SceneProxy {
|
||||
pub fn new<E>(scene: Scene, executor: E) -> SceneProxy where E: Executor + Send + 'static {
|
||||
pub fn new<E>(executor: E) -> SceneProxy where E: Executor + Send + 'static {
|
||||
SceneProxy::from_scene(Scene::new(), executor)
|
||||
}
|
||||
|
||||
pub fn from_scene<E>(scene: Scene, executor: E) -> SceneProxy
|
||||
where E: Executor + Send + 'static {
|
||||
let (main_to_worker_sender, main_to_worker_receiver) = mpsc::channel();
|
||||
thread::spawn(move || scene_thread(scene, executor, main_to_worker_receiver));
|
||||
SceneProxy { sender: main_to_worker_sender }
|
||||
|
|
Loading…
Reference in New Issue