core: Adjust culling area based on letterbox setting
This commit is contained in:
parent
01aca9f861
commit
44e9185a5f
|
@ -163,6 +163,7 @@ pub struct Player {
|
||||||
transform_stack: TransformStack,
|
transform_stack: TransformStack,
|
||||||
view_matrix: Matrix,
|
view_matrix: Matrix,
|
||||||
inverse_view_matrix: Matrix,
|
inverse_view_matrix: Matrix,
|
||||||
|
view_bounds: BoundingBox,
|
||||||
|
|
||||||
storage: Storage,
|
storage: Storage,
|
||||||
|
|
||||||
|
@ -252,6 +253,7 @@ impl Player {
|
||||||
transform_stack: TransformStack::new(),
|
transform_stack: TransformStack::new(),
|
||||||
view_matrix: Default::default(),
|
view_matrix: Default::default(),
|
||||||
inverse_view_matrix: Default::default(),
|
inverse_view_matrix: Default::default(),
|
||||||
|
view_bounds: Default::default(),
|
||||||
|
|
||||||
rng: SmallRng::seed_from_u64(chrono::Utc::now().timestamp_millis() as u64),
|
rng: SmallRng::seed_from_u64(chrono::Utc::now().timestamp_millis() as u64),
|
||||||
|
|
||||||
|
@ -528,6 +530,11 @@ impl Player {
|
||||||
self.letterbox = letterbox
|
self.letterbox = letterbox
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn should_letterbox(&self) -> bool {
|
||||||
|
self.letterbox == Letterbox::On
|
||||||
|
|| (self.letterbox == Letterbox::Fullscreen && self.user_interface.is_fullscreen())
|
||||||
|
}
|
||||||
|
|
||||||
pub fn movie_width(&self) -> u32 {
|
pub fn movie_width(&self) -> u32 {
|
||||||
self.movie_width
|
self.movie_width
|
||||||
}
|
}
|
||||||
|
@ -882,14 +889,6 @@ impl Player {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn render(&mut self) {
|
pub fn render(&mut self) {
|
||||||
let view_bounds = BoundingBox {
|
|
||||||
x_min: Twips::new(0),
|
|
||||||
y_min: Twips::new(0),
|
|
||||||
x_max: Twips::from_pixels(self.movie_width.into()),
|
|
||||||
y_max: Twips::from_pixels(self.movie_height.into()),
|
|
||||||
valid: true,
|
|
||||||
};
|
|
||||||
|
|
||||||
self.renderer.begin_frame(self.background_color.clone());
|
self.renderer.begin_frame(self.background_color.clone());
|
||||||
|
|
||||||
let (renderer, transform_stack) = (&mut self.renderer, &mut self.transform_stack);
|
let (renderer, transform_stack) = (&mut self.renderer, &mut self.transform_stack);
|
||||||
|
@ -898,6 +897,8 @@ impl Player {
|
||||||
matrix: self.view_matrix,
|
matrix: self.view_matrix,
|
||||||
..Default::default()
|
..Default::default()
|
||||||
});
|
});
|
||||||
|
|
||||||
|
let view_bounds = self.view_bounds.clone();
|
||||||
self.gc_arena.mutate(|_gc_context, gc_root| {
|
self.gc_arena.mutate(|_gc_context, gc_root| {
|
||||||
let root_data = gc_root.0.read();
|
let root_data = gc_root.0.read();
|
||||||
let mut render_context = RenderContext {
|
let mut render_context = RenderContext {
|
||||||
|
@ -915,7 +916,10 @@ impl Player {
|
||||||
});
|
});
|
||||||
transform_stack.pop();
|
transform_stack.pop();
|
||||||
|
|
||||||
|
if self.should_letterbox() {
|
||||||
self.draw_letterbox();
|
self.draw_letterbox();
|
||||||
|
}
|
||||||
|
|
||||||
self.renderer.end_frame();
|
self.renderer.end_frame();
|
||||||
self.needs_render = false;
|
self.needs_render = false;
|
||||||
}
|
}
|
||||||
|
@ -1100,6 +1104,28 @@ impl Player {
|
||||||
};
|
};
|
||||||
self.inverse_view_matrix = self.view_matrix;
|
self.inverse_view_matrix = self.view_matrix;
|
||||||
self.inverse_view_matrix.invert();
|
self.inverse_view_matrix.invert();
|
||||||
|
|
||||||
|
self.view_bounds = if self.should_letterbox() {
|
||||||
|
// No letterbox: movie area
|
||||||
|
BoundingBox {
|
||||||
|
x_min: Twips::new(0),
|
||||||
|
y_min: Twips::new(0),
|
||||||
|
x_max: Twips::from_pixels(f64::from(self.movie_width)),
|
||||||
|
y_max: Twips::from_pixels(f64::from(self.movie_height)),
|
||||||
|
valid: true,
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// No letterbox: full visible stage area
|
||||||
|
let margin_width = f64::from(margin_width / scale);
|
||||||
|
let margin_height = f64::from(margin_height / scale);
|
||||||
|
BoundingBox {
|
||||||
|
x_min: Twips::from_pixels(-margin_width),
|
||||||
|
y_min: Twips::from_pixels(-margin_height),
|
||||||
|
x_max: Twips::from_pixels(f64::from(self.movie_width) + margin_width),
|
||||||
|
y_max: Twips::from_pixels(f64::from(self.movie_height) + margin_height),
|
||||||
|
valid: true,
|
||||||
|
}
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Runs the closure `f` with an `UpdateContext`.
|
/// Runs the closure `f` with an `UpdateContext`.
|
||||||
|
@ -1328,12 +1354,6 @@ impl Player {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn draw_letterbox(&mut self) {
|
fn draw_letterbox(&mut self) {
|
||||||
if self.letterbox == Letterbox::Off
|
|
||||||
|| (self.letterbox == Letterbox::Fullscreen && !self.user_interface.is_fullscreen())
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
let black = Color::from_rgb(0, 255);
|
let black = Color::from_rgb(0, 255);
|
||||||
let viewport_width = self.viewport_width as f32;
|
let viewport_width = self.viewport_width as f32;
|
||||||
let viewport_height = self.viewport_height as f32;
|
let viewport_height = self.viewport_height as f32;
|
||||||
|
|
Loading…
Reference in New Issue