Added time parameter to shader evaluation.

It's not used right now, but in the future I want shaders to be
able to vary over time and have motion blur.  This serves as a
nice little reminder by putting it in the API.
This commit is contained in:
Nathan Vegdahl 2017-08-08 14:48:22 -07:00
parent 6f5984a379
commit e2a417884d
2 changed files with 18 additions and 4 deletions

View File

@ -10,7 +10,12 @@ use surface::SurfaceIntersectionData;
pub trait SurfaceShader: Debug + Sync {
/// Takes the result of a surface intersection and returns the surface
/// closure to be evaluated at that intersection point.
fn shade(&self, data: &SurfaceIntersectionData, wavelength: f32) -> SurfaceClosureUnion;
fn shade(
&self,
data: &SurfaceIntersectionData,
time: f32,
wavelength: f32,
) -> SurfaceClosureUnion;
}
/// Clearly we must eat this brownie before the world ends, lest it
@ -37,8 +42,13 @@ pub enum SimpleSurfaceShader {
}
impl SurfaceShader for SimpleSurfaceShader {
fn shade(&self, data: &SurfaceIntersectionData, wavelength: f32) -> SurfaceClosureUnion {
let _ = data; // Silence "unused" compiler warning
fn shade(
&self,
data: &SurfaceIntersectionData,
time: f32,
wavelength: f32,
) -> SurfaceClosureUnion {
let _ = (data, time); // Silence "unused" compiler warning
match *self {
SimpleSurfaceShader::Emit { color } => {

View File

@ -249,7 +249,11 @@ impl<'a> Surface for TriangleMesh<'a> {
// Fill in intersection data
isects[r.id as usize] = SurfaceIntersection::Hit {
intersection_data: intersection_data,
closure: shader.shade(&intersection_data, wr.wavelength),
closure: shader.shade(
&intersection_data,
wr.time,
wr.wavelength,
),
};
r.max_t = t;
}