use super::level::QualityLevel;
#[derive(Debug, Clone, Copy)]
pub struct QualityConfig {
pub target_frame_rate: f32,
pub degrade_threshold: f32,
pub upgrade_threshold: f32,
pub max_quality: QualityLevel,
pub min_quality: QualityLevel,
pub degrade_frame_count: usize,
pub upgrade_frame_count: usize,
}
impl Default for QualityConfig {
fn default() -> Self {
Self {
target_frame_rate: 60.0,
degrade_threshold: 1.5,
upgrade_threshold: 0.7,
max_quality: QualityLevel::High,
min_quality: QualityLevel::Low,
degrade_frame_count: 5,
upgrade_frame_count: 10,
}
}
}
impl QualityConfig {
pub fn target_frame_duration(&self) -> f32 {
1.0 / self.target_frame_rate
}
pub fn degrade_frame_duration(&self) -> f32 {
self.target_frame_duration() * self.degrade_threshold
}
pub fn upgrade_frame_duration(&self) -> f32 {
self.target_frame_duration() * self.upgrade_threshold
}
pub fn normalized(self) -> Self {
Self {
degrade_threshold: self.degrade_threshold.max(1.0),
upgrade_threshold: self.upgrade_threshold.clamp(0.1, 1.0),
degrade_frame_count: self.degrade_frame_count.max(1),
upgrade_frame_count: self.upgrade_frame_count.max(1),
..self
}
}
}