#[repr(C)]pub struct PostProcessParams {
pub bloom_intensity: f32,
pub bloom_threshold: f32,
pub bloom_knee: f32,
pub exposure: f32,
pub vignette: f32,
pub lut_strength: f32,
pub hdr_output: f32,
pub pq_output: f32,
pub fxaa: f32,
}Expand description
Post-process tunables resolved from the PostProcessConfig asset (or its
defaults), plus the two display-output flags the backend resolves from the
display’s EDR capability at init. Pushed verbatim to the bloom prefilter and
composite fragment shaders, so the layout must stay in sync with the
PostUniforms struct in those shaders. 36 bytes.
Fields§
§bloom_intensity: f32Additive bloom strength. 0 disables the bloom passes entirely.
bloom_threshold: f32Luminance threshold for the bloom prefilter.
bloom_knee: f32Quadratic soft-knee width below the threshold.
exposure: f32Linear exposure multiplier applied to HDR radiance before the bloom
prefilter and the composite tonemap. Resolved from exposure_ev as
2^ev, so 1.0 is neutral.
vignette: f32Vignette strength in [0, 1]. 0 disables the corner darkening.
lut_strength: f32Colour-LUT blend in [0, 1]: mix(scene, graded, lut_strength) in the
composite pass. Has no effect when no ColorLut is declared: the
renderer then binds an identity LUT, so the grade is a no-op.
hdr_output: f32HDR display output flag. 0.0 = SDR path (ACES tonemap + gamma 2.2 +
FXAA + ColorLut, output BGRA8Unorm). 1.0 = HDR EDR path (no tonemap
or gamma; the exposed HDR scene is emitted into a RGBA16Float
swapchain attached to a Display P3 EDR layer). FXAA + ColorLut are
skipped on the HDR path because both depend on display-referred
values. Stored as a float (not a uint) so the MSL shader can branch
on > 0.5 without a cast.
pq_output: f32Output-encoding flag inside the HDR branch. 0.0 = scRGB-linear
passthrough (the OS handles the encode for the panel). 1.0 =
PQ-encode (SMPTE ST 2084) in-shader so the swapchain ships
PQ-encoded values directly to an HDR10 panel. Only read when
hdr_output > 0.5; always 0.0 on the SDR path.
fxaa: f32FXAA edge-filter flag on the SDR path. 1.0 runs the composite’s
FXAA pass; 0.0 skips it (the Off anti-aliasing mode). Resolved
from PostProcessConfig.aa_mode: on for Fxaa and Taa, off for
Off. Always ignored on the HDR path, which never runs FXAA. Stored
as a float so the shader branches on > 0.5 without a cast.
Implementations§
Source§impl PostProcessParams
impl PostProcessParams
Sourcepub fn set_tunables(&mut self, tunables: PostProcessTunables)
pub fn set_tunables(&mut self, tunables: PostProcessTunables)
Overwrite the authored tunables, keeping hdr_output / pq_output.
Those two are a property of the display the backend negotiated with, not
an authored value, so a live push from the settings menu leaves them
alone.
Trait Implementations§
Source§impl Clone for PostProcessParams
impl Clone for PostProcessParams
Source§fn clone(&self) -> PostProcessParams
fn clone(&self) -> PostProcessParams
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreimpl Copy for PostProcessParams
Source§impl Debug for PostProcessParams
impl Debug for PostProcessParams
impl NoUninit for PostProcessParams
Auto Trait Implementations§
impl Freeze for PostProcessParams
impl RefUnwindSafe for PostProcessParams
impl Send for PostProcessParams
impl Sync for PostProcessParams
impl Unpin for PostProcessParams
impl UnsafeUnpin for PostProcessParams
impl UnwindSafe for PostProcessParams
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<S, T> Duplex<S> for Twhere
T: FromSample<S> + ToSample<S>,
Source§impl<S> FromSample<S> for S
impl<S> FromSample<S> for S
fn from_sample_(s: S) -> S
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 more