diff options
Diffstat (limited to 'racer-tracer/src/renderer.rs')
| -rw-r--r-- | racer-tracer/src/renderer.rs | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/racer-tracer/src/renderer.rs b/racer-tracer/src/renderer.rs index 162dc4b..0c351c9 100644 --- a/racer-tracer/src/renderer.rs +++ b/racer-tracer/src/renderer.rs @@ -3,10 +3,18 @@ use std::{sync::RwLock, time::Duration}; use synchronoise::SignalEvent; use crate::{ - camera::Camera, config::Config, error::TracerError, geometry::Hittable, image::Image, ray::Ray, - vec3::Color, vec3::Vec3, + camera::Camera, + config::{Config, Renderer as ConfigRenderer}, + error::TracerError, + geometry::Hittable, + image::Image, + ray::Ray, + vec3::Color, + vec3::Vec3, }; +use self::{cpu::CpuRenderer, cpu_scaled::CpuRendererScaled}; + pub mod cpu; pub mod cpu_scaled; @@ -44,8 +52,18 @@ pub struct RenderData<'a> { pub scene: &'a dyn Hittable, pub config: &'a Config, pub cancel_event: Option<&'a SignalEvent>, + pub buffer_updated: Option<&'a SignalEvent>, } pub trait Renderer: Send + Sync { fn render(&self, render_data: RenderData) -> Result<(), TracerError>; } + +impl From<&ConfigRenderer> for &dyn Renderer { + fn from(r: &ConfigRenderer) -> Self { + match r { + ConfigRenderer::Cpu => &CpuRenderer {} as &dyn Renderer, + ConfigRenderer::CpuPreview => &CpuRendererScaled {} as &dyn Renderer, + } + } +} |
