Make RawInput.max_texture_side an Option

This commit is contained in:
Emil Ernerfeldt 2022-02-22 13:21:28 +01:00
parent 76f564428b
commit 745f209c61
5 changed files with 21 additions and 9 deletions

View file

@ -144,7 +144,7 @@ impl State {
start_time: instant::Instant::now(), start_time: instant::Instant::now(),
egui_input: egui::RawInput { egui_input: egui::RawInput {
pixels_per_point: Some(pixels_per_point), pixels_per_point: Some(pixels_per_point),
max_texture_side, max_texture_side: Some(max_texture_side),
..Default::default() ..Default::default()
}, },
pointer_pos_in_points: None, pointer_pos_in_points: None,

View file

@ -79,7 +79,7 @@ impl ContextImpl {
/// Load fonts unless already loaded. /// Load fonts unless already loaded.
fn update_fonts_mut(&mut self) { fn update_fonts_mut(&mut self) {
let pixels_per_point = self.input.pixels_per_point(); let pixels_per_point = self.input.pixels_per_point();
let max_texture_side = self.input.raw.max_texture_side; let max_texture_side = self.input.max_texture_side;
if let Some(font_definitions) = self.memory.new_font_definitions.take() { if let Some(font_definitions) = self.memory.new_font_definitions.take() {
let fonts = Fonts::new(pixels_per_point, max_texture_side, font_definitions); let fonts = Fonts::new(pixels_per_point, max_texture_side, font_definitions);

View file

@ -33,7 +33,7 @@ pub struct RawInput {
/// Ask your graphics drivers about this. This corresponds to `GL_MAX_TEXTURE_SIZE`. /// Ask your graphics drivers about this. This corresponds to `GL_MAX_TEXTURE_SIZE`.
/// ///
/// The default is a very small (but very portable) 2048. /// The default is a very small (but very portable) 2048.
pub max_texture_side: usize, pub max_texture_side: Option<usize>,
/// Monotonically increasing time, in seconds. Relative to whatever. Used for animations. /// Monotonically increasing time, in seconds. Relative to whatever. Used for animations.
/// If `None` is provided, egui will assume a time delta of `predicted_dt` (default 1/60 seconds). /// If `None` is provided, egui will assume a time delta of `predicted_dt` (default 1/60 seconds).
@ -69,7 +69,7 @@ impl Default for RawInput {
Self { Self {
screen_rect: None, screen_rect: None,
pixels_per_point: None, pixels_per_point: None,
max_texture_side: 2048, max_texture_side: None,
time: None, time: None,
predicted_dt: 1.0 / 60.0, predicted_dt: 1.0 / 60.0,
modifiers: Modifiers::default(), modifiers: Modifiers::default(),
@ -89,7 +89,7 @@ impl RawInput {
RawInput { RawInput {
screen_rect: self.screen_rect.take(), screen_rect: self.screen_rect.take(),
pixels_per_point: self.pixels_per_point.take(), pixels_per_point: self.pixels_per_point.take(),
max_texture_side: self.max_texture_side, max_texture_side: self.max_texture_side.take(),
time: self.time.take(), time: self.time.take(),
predicted_dt: self.predicted_dt, predicted_dt: self.predicted_dt,
modifiers: self.modifiers, modifiers: self.modifiers,
@ -115,7 +115,7 @@ impl RawInput {
self.screen_rect = screen_rect.or(self.screen_rect); self.screen_rect = screen_rect.or(self.screen_rect);
self.pixels_per_point = pixels_per_point.or(self.pixels_per_point); self.pixels_per_point = pixels_per_point.or(self.pixels_per_point);
self.max_texture_side = max_texture_side; // use latest self.max_texture_side = max_texture_side.or(self.max_texture_side);
self.time = time; // use latest time self.time = time; // use latest time
self.predicted_dt = predicted_dt; // use latest dt self.predicted_dt = predicted_dt; // use latest dt
self.modifiers = modifiers; // use latest self.modifiers = modifiers; // use latest
@ -509,7 +509,7 @@ impl RawInput {
.on_hover_text( .on_hover_text(
"Also called HDPI factor.\nNumber of physical pixels per each logical pixel.", "Also called HDPI factor.\nNumber of physical pixels per each logical pixel.",
); );
ui.label(format!("max_texture_side: {}", max_texture_side)); ui.label(format!("max_texture_side: {:?}", max_texture_side));
if let Some(time) = time { if let Some(time) = time {
ui.label(format!("time: {:.3} s", time)); ui.label(format!("time: {:.3} s", time));
} else { } else {

View file

@ -49,6 +49,11 @@ pub struct InputState {
/// Also known as device pixel ratio, > 1 for high resolution screens. /// Also known as device pixel ratio, > 1 for high resolution screens.
pub pixels_per_point: f32, pub pixels_per_point: f32,
/// Maximum size of one side of a texture.
///
/// This depends on the backend.
pub max_texture_side: usize,
/// Time in seconds. Relative to whatever. Used for animation. /// Time in seconds. Relative to whatever. Used for animation.
pub time: f64, pub time: f64,
@ -82,6 +87,7 @@ impl Default for InputState {
zoom_factor_delta: 1.0, zoom_factor_delta: 1.0,
screen_rect: Rect::from_min_size(Default::default(), vec2(10_000.0, 10_000.0)), screen_rect: Rect::from_min_size(Default::default(), vec2(10_000.0, 10_000.0)),
pixels_per_point: 1.0, pixels_per_point: 1.0,
max_texture_side: 2048,
time: 0.0, time: 0.0,
unstable_dt: 1.0 / 6.0, unstable_dt: 1.0 / 6.0,
predicted_dt: 1.0 / 6.0, predicted_dt: 1.0 / 6.0,
@ -134,6 +140,7 @@ impl InputState {
zoom_factor_delta, zoom_factor_delta,
screen_rect, screen_rect,
pixels_per_point: new.pixels_per_point.unwrap_or(self.pixels_per_point), pixels_per_point: new.pixels_per_point.unwrap_or(self.pixels_per_point),
max_texture_side: new.max_texture_side.unwrap_or(self.max_texture_side),
time, time,
unstable_dt, unstable_dt,
predicted_dt: new.predicted_dt, predicted_dt: new.predicted_dt,
@ -714,6 +721,7 @@ impl InputState {
zoom_factor_delta, zoom_factor_delta,
screen_rect, screen_rect,
pixels_per_point, pixels_per_point,
max_texture_side,
time, time,
unstable_dt, unstable_dt,
predicted_dt, predicted_dt,
@ -746,9 +754,13 @@ impl InputState {
ui.label(format!("zoom_factor_delta: {:4.2}x", zoom_factor_delta)); ui.label(format!("zoom_factor_delta: {:4.2}x", zoom_factor_delta));
ui.label(format!("screen_rect: {:?} points", screen_rect)); ui.label(format!("screen_rect: {:?} points", screen_rect));
ui.label(format!( ui.label(format!(
"{:?} physical pixels for each logical point", "{} physical pixels for each logical point",
pixels_per_point pixels_per_point
)); ));
ui.label(format!(
"max texture size (on each side): {}",
max_texture_side
));
ui.label(format!("time: {:.3} s", time)); ui.label(format!("time: {:.3} s", time));
ui.label(format!( ui.label(format!(
"time since previous frame: {:.1} ms", "time since previous frame: {:.1} ms",

View file

@ -214,7 +214,7 @@ impl AppRunner {
textures_delta: Default::default(), textures_delta: Default::default(),
}; };
runner.input.raw.max_texture_side = runner.painter.max_texture_side(); runner.input.raw.max_texture_side = Some(runner.painter.max_texture_side());
{ {
runner runner