summaryrefslogtreecommitdiff
path: root/racer-tracer/src/renderer.rs
diff options
context:
space:
mode:
Diffstat (limited to 'racer-tracer/src/renderer.rs')
-rw-r--r--racer-tracer/src/renderer.rs22
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,
+ }
+ }
+}