pub struct PerformancePolicy {
pub target_fps: Option<f32>,
pub min_render_scale: f32,
pub max_render_scale: f32,
pub allow_dynamic_resolution: bool,
pub allow_shadow_reduction: bool,
pub allow_volume_quality_reduction: bool,
pub allow_effect_throttling: bool,
}Expand description
Controls what quality reductions the viewport is allowed to apply under load.
Set once via crate::ViewportRenderer::set_performance_policy. The internal
adaptation controller reads target_fps and adjusts render scale within
[min_render_scale, max_render_scale] when allow_dynamic_resolution is true.
Pass-specific flags (allow_shadow_reduction, allow_volume_quality_reduction,
allow_effect_throttling) gate concrete quality reductions that kick in when
the previous frame missed the target budget.
Fields§
§target_fps: Option<f32>Target frames per second. None means uncapped; missed_budget is always false.
min_render_scale: f32Lower bound for dynamic render scale (e.g. 0.5 = half resolution).
max_render_scale: f32Upper bound for dynamic render scale (1.0 = native).
allow_dynamic_resolution: boolAllow the viewport to adjust render scale automatically when budget is exceeded.
When false, the internal controller is inactive and render scale can be
set manually via crate::ViewportRenderer::set_render_scale.
allow_shadow_reduction: boolAllow the viewport to skip the shadow pass under load.
When true and the previous frame exceeded the target budget, the shadow depth
pass is skipped entirely. Shadows reappear as soon as the frame is within budget.
allow_volume_quality_reduction: boolAllow the viewport to reduce volume raymarch quality under load.
When true and the previous frame exceeded the target budget, the per-volume
step size is doubled (half the number of samples), reducing GPU cost at the
cost of coarser volume appearance.
allow_effect_throttling: boolAllow the viewport to skip non-essential HDR effect passes under load.
When true and the previous frame exceeded the target budget, the SSAO,
contact shadow, and bloom passes are skipped for that frame.
Trait Implementations§
Source§impl Clone for PerformancePolicy
impl Clone for PerformancePolicy
Source§fn clone(&self) -> PerformancePolicy
fn clone(&self) -> PerformancePolicy
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for PerformancePolicy
impl Debug for PerformancePolicy
Source§impl Default for PerformancePolicy
impl Default for PerformancePolicy
Source§impl PartialEq for PerformancePolicy
impl PartialEq for PerformancePolicy
impl Copy for PerformancePolicy
impl StructuralPartialEq for PerformancePolicy
Auto Trait Implementations§
impl Freeze for PerformancePolicy
impl RefUnwindSafe for PerformancePolicy
impl Send for PerformancePolicy
impl Sync for PerformancePolicy
impl Unpin for PerformancePolicy
impl UnsafeUnpin for PerformancePolicy
impl UnwindSafe for PerformancePolicy
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.