diff options
Diffstat (limited to 'racer-tracer/src/image.rs')
| -rw-r--r-- | racer-tracer/src/image.rs | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/racer-tracer/src/image.rs b/racer-tracer/src/image.rs index 48e81ee..502a15a 100644 --- a/racer-tracer/src/image.rs +++ b/racer-tracer/src/image.rs @@ -15,3 +15,82 @@ impl Image { } } } + +// TODO: SubImage and Image can probably be the same struct +impl From<&Image> for SubImage { + fn from(image: &Image) -> Self { + SubImage { + x: 0, + y: 0, + width: image.width, + height: image.height, + samples: image.samples_per_pixel, + screen_width: image.width, + screen_height: image.height, + } + } +} + +pub struct SubImage { + pub x: usize, + pub y: usize, + pub screen_width: usize, + pub screen_height: usize, + pub width: usize, + pub height: usize, + pub samples: usize, +} + +pub trait QuadSplit { + fn quad_split(&self) -> [SubImage; 4]; +} + +impl QuadSplit for SubImage { + fn quad_split(&self) -> [SubImage; 4] { + let half_w = self.width / 2; + let half_h = self.height / 2; + + [ + // Top Left + SubImage { + x: self.x, + y: self.y, + width: half_w, + height: half_h, + samples: self.samples, + screen_width: self.screen_width, + screen_height: self.screen_height, + }, + // Top Right + SubImage { + x: self.x + half_w, + y: self.y, + width: half_w, + height: half_h, + samples: self.samples, + screen_width: self.screen_width, + screen_height: self.screen_height, + }, + // Bottom Left + SubImage { + x: self.x, + y: self.y + half_h, + width: half_w, + height: half_h, + samples: self.samples, + screen_width: self.screen_width, + screen_height: self.screen_height, + }, + // Bottom Right + SubImage { + x: self.x + half_w, + y: self.y + half_h, + width: half_w, + height: half_h, + samples: self.samples, + screen_width: self.screen_width, + screen_height: self.screen_height, + }, + ] + } +} |
