pub enum TransferFunction {
Show 15 variants
ACESCCT,
ARRIlog3,
ARRIlog4,
AppleLog,
AppleLog2,
CLog3,
DaVinciIntermediate,
FLog2,
Gamma24,
HLG,
Linear,
PQ,
Rec709,
SLog3,
VLog,
}Variants§
ACESCCT
ARRIlog3
ARRIlog4
AppleLog
AppleLog2
CLog3
DaVinciIntermediate
FLog2
Gamma24
HLG
Linear
PQ
Rec709
SLog3
VLog
Implementations§
Source§impl TransferFunction
impl TransferFunction
Sourcepub fn name(&self) -> &'static str
pub fn name(&self) -> &'static str
Examples found in repository?
examples/gpu_validate.rs (line 137)
6fn main() {
7 // Step 1: Initialize preview GPU context
8 println!("== GPU Preview Pipeline Validation ==");
9 println!();
10
11 println!("[1/4] Initializing wgpu device...");
12 let context = match mcraw_tui::preview::pipeline::device::PreviewGpuContext::new() {
13 Ok(ctx) => {
14 println!(" ✓ Device created");
15 println!(" ✓ Queue acquired");
16 ctx
17 }
18 Err(e) => {
19 println!(" ✗ FAILED: {}", e);
20 std::process::exit(1);
21 }
22 };
23
24 println!();
25 println!("[2/4] Creating compute pipeline + compiling WGSL shader...");
26 let ctx_arc = std::sync::Arc::new(context);
27 let mut pipeline = match mcraw_tui::preview::pipeline::GpuPreviewPipeline::new().init(ctx_arc.clone()) {
28 Ok(p) => {
29 println!(" ✓ SHADER COMPILED — all 15 OETFs loaded");
30 println!(" ✓ Pipeline cache pre-warmed with default combo");
31 p
32 }
33 Err(e) => {
34 println!(" ✗ FAILED: {}", e);
35 std::process::exit(1);
36 }
37 };
38
39 println!();
40 println!("[3/4] Processing synthetic 256x128 Bayer frame...");
41
42 // Generate a synthetic RGGB Bayer frame: gradient + checkerboard
43 const W: u32 = 256;
44 const H: u32 = 128;
45 let mut bayer: Vec<u16> = Vec::with_capacity((W * H) as usize);
46 for y in 0..H {
47 for x in 0..W {
48 let phase = (y & 1) * 2 + (x & 1); // 0=RGGB
49 let val = match phase {
50 0 | 3 => { // R or B — saturated
51 let r = ((x as f32 / W as f32) * 0.8 + 0.1) * 65535.0;
52 r as u16
53 }
54 1 | 2 => { // G
55 let g = 0.5 * 65535.0 + ((y as f32 / H as f32) * 0.3 - 0.15) * 65535.0;
56 g as u16
57 }
58 _ => unreachable!(),
59 };
60 bayer.push(val);
61 }
62 }
63 println!(" ✓ Synthetic Bayer frame: {}x{}", W, H);
64
65 // Build PreviewParams for Rec709 + sRGB display
66 use mcraw_tui::preview::pipeline::params::PreviewParams;
67 let params = PreviewParams {
68 width: W,
69 height: H,
70 bayer_width: W,
71 bayer_height: H,
72 black_level: 64.0,
73 white_level: 4095.0,
74 exposure: 1.0,
75 wb_r: 1.0, wb_g: 1.0, wb_b: 1.0,
76 contrast: 1.0,
77 saturation: 1.0,
78 shadows: 0.0,
79 highlights: 0.0,
80 _align0: 0.0, _align1: 0.0,
81 ccm_row0: [1.0, 0.0, 0.0, 0.0],
82 ccm_row1: [0.0, 1.0, 0.0, 0.0],
83 ccm_row2: [0.0, 0.0, 1.0, 0.0],
84 color_space: 0,
85 transfer: 1, // sRGB
86 adjust_enabled: 0,
87 bayer_phase: 0,
88 compute_histogram: 0,
89 _pad0: 0, _pad1: 0, _pad2: 0, _pad3: 0, _pad4: 0, _pad5: 0, _pad6: 0,
90 };
91
92 let start = std::time::Instant::now();
93 match pipeline.process_and_readback(&bayer, ¶ms) {
94 Ok((rgba, out_w, out_h)) => {
95 let elapsed = start.elapsed();
96 println!(" ✓ GPU process + readback: {}x{} → {} bytes in {:?} ({:.0} fps)",
97 out_w, out_h, rgba.len(), elapsed, 1.0 / elapsed.as_secs_f64());
98 // Validate output
99 let expected_pixels = (out_w * out_h) as usize;
100 if rgba.len() == expected_pixels * 4 {
101 println!(" ✓ Output buffer size correct: {} RGBA pixels", expected_pixels);
102 } else {
103 println!(" ✗ Size mismatch: got {} bytes, expected {}", rgba.len(), expected_pixels * 4);
104 std::process::exit(1);
105 }
106 // Check a few pixels aren't all zero
107 let non_zero = rgba.iter().filter(|&&b| b != 0).count();
108 if non_zero > 0 {
109 println!(" ✓ Output has {} non-zero bytes (image content verified)", non_zero);
110 } else {
111 println!(" ✗ All output bytes are zero — pipeline produced black frame");
112 std::process::exit(1);
113 }
114 }
115 Err(e) => {
116 println!(" ✗ FAILED: {}", e);
117 std::process::exit(1);
118 }
119 }
120
121 println!();
122 println!("[4/4] Testing all 15 transfer function combinations...");
123
124 use mcraw_tui::preview::pipeline::params::transfer_to_u32;
125 use mcraw_tui::color::TransferFunction;
126
127 let mut passed = 0u32;
128 let mut failed = 0u32;
129 for tf in TransferFunction::all() {
130 let mut params = params.clone();
131 params.transfer = transfer_to_u32(tf);
132 let start = std::time::Instant::now();
133 match pipeline.process_and_readback(&bayer, ¶ms) {
134 Ok((_, _, _)) => {
135 let elapsed = start.elapsed();
136 if elapsed.as_millis() < 5000 {
137 println!(" ✓ {:<20} {:>6?}", tf.name(), elapsed);
138 passed += 1;
139 } else {
140 println!(" ✗ {:<20} timed out", tf.name());
141 failed += 1;
142 }
143 }
144 Err(e) => {
145 println!(" ✗ {:<20} {}", tf.name(), e);
146 failed += 1;
147 }
148 }
149 }
150
151 println!();
152 println!("== RESULTS ==");
153 println!(" ✓ GPU device init: PASS");
154 println!(" ✓ WGSL compilation: PASS");
155 println!(" ✓ Synthetic frame: PASS");
156 println!(" ✓ OETF variants: {}/15 passed, {}/15 failed", passed, failed);
157
158 if failed == 0 {
159 println!();
160 println!(" 🎉 All checks passed — pipeline is fully functional on this GPU!");
161 0
162 } else {
163 println!();
164 println!(" ⚠ {} OETF variants failed — see above for details", failed);
165 1
166 };
167}Sourcepub fn process(&self, pixels: &mut [f32])
pub fn process(&self, pixels: &mut [f32])
Apply the OETF (linear → log) for the selected transfer function.
Source-of-truth references for each branch:
| Variant | Spec / document |
|---|---|
Rec709 | ITU-R BT.709-6 OETF |
SLog3 | Sony “S-Log3 Technical Specification” (Sept 2014) — canonical form: code = (420 + 261.5×log₁₀((x+0.01)/0.19)) / 1023, knee at 0.01125, black code 95, 18% grey code 420 |
VLog | Panasonic “V-Log/V-Gamut Reference Manual” (2014) — 5.6x+0.125 / 0.241514*log10(x+0.00873)+0.598206, knee at 0.01 |
ARRIlog3 | ARRI “LogC-3 Logarithmic Color Space” spec (2020), EI 800 variant |
ARRIlog4 | ARRI “LogC4 Encoding Function” (Cooper & Brendel, 2022; ALEV4 / Alexa 35), EI-independent |
CLog3 | Canon Cinema EOS C-Log3 characteristics (2016) — three-segment with negative-side graft |
FLog2 | Fujifilm “F-Log2 Data Sheet” (2021) — Fujifilm-internal anchor at 0.000889 |
AppleLog/AppleLog2 | Apple “Apple Log Profile White Paper” (Sept 2023) — R0=-0.05641088, C=47.28711236 |
ACESCCT | AMPAS ACEScc specification (TB-2022-002), knee at 2^-7 = 0.0078125, log slope 17.52 |
PQ | ITU-R BT.2100-2 ST.2084 PQ (2022) — m1=0.1593017578125, m2=78.84375, c1=0.8359375, c2=18.8515625, c3=18.6875 |
HLG | ITU-R BT.2100-2 HLG OETF (2022) — knee at 1/12, a=0.17883277, b=0.28466892, c=0.55991073 |
DaVinciIntermediate | Blackmagic “DaVinci YRGB Intermediate” — knee at 0.00262409, log slope 0.07329248 |
Gamma24 | Display gamma 1/2.4 (Rec.1886 EOTF approximation) |
Linear | identity |
Sourcepub fn all() -> &'static [TransferFunction]
pub fn all() -> &'static [TransferFunction]
Examples found in repository?
examples/gpu_validate.rs (line 129)
6fn main() {
7 // Step 1: Initialize preview GPU context
8 println!("== GPU Preview Pipeline Validation ==");
9 println!();
10
11 println!("[1/4] Initializing wgpu device...");
12 let context = match mcraw_tui::preview::pipeline::device::PreviewGpuContext::new() {
13 Ok(ctx) => {
14 println!(" ✓ Device created");
15 println!(" ✓ Queue acquired");
16 ctx
17 }
18 Err(e) => {
19 println!(" ✗ FAILED: {}", e);
20 std::process::exit(1);
21 }
22 };
23
24 println!();
25 println!("[2/4] Creating compute pipeline + compiling WGSL shader...");
26 let ctx_arc = std::sync::Arc::new(context);
27 let mut pipeline = match mcraw_tui::preview::pipeline::GpuPreviewPipeline::new().init(ctx_arc.clone()) {
28 Ok(p) => {
29 println!(" ✓ SHADER COMPILED — all 15 OETFs loaded");
30 println!(" ✓ Pipeline cache pre-warmed with default combo");
31 p
32 }
33 Err(e) => {
34 println!(" ✗ FAILED: {}", e);
35 std::process::exit(1);
36 }
37 };
38
39 println!();
40 println!("[3/4] Processing synthetic 256x128 Bayer frame...");
41
42 // Generate a synthetic RGGB Bayer frame: gradient + checkerboard
43 const W: u32 = 256;
44 const H: u32 = 128;
45 let mut bayer: Vec<u16> = Vec::with_capacity((W * H) as usize);
46 for y in 0..H {
47 for x in 0..W {
48 let phase = (y & 1) * 2 + (x & 1); // 0=RGGB
49 let val = match phase {
50 0 | 3 => { // R or B — saturated
51 let r = ((x as f32 / W as f32) * 0.8 + 0.1) * 65535.0;
52 r as u16
53 }
54 1 | 2 => { // G
55 let g = 0.5 * 65535.0 + ((y as f32 / H as f32) * 0.3 - 0.15) * 65535.0;
56 g as u16
57 }
58 _ => unreachable!(),
59 };
60 bayer.push(val);
61 }
62 }
63 println!(" ✓ Synthetic Bayer frame: {}x{}", W, H);
64
65 // Build PreviewParams for Rec709 + sRGB display
66 use mcraw_tui::preview::pipeline::params::PreviewParams;
67 let params = PreviewParams {
68 width: W,
69 height: H,
70 bayer_width: W,
71 bayer_height: H,
72 black_level: 64.0,
73 white_level: 4095.0,
74 exposure: 1.0,
75 wb_r: 1.0, wb_g: 1.0, wb_b: 1.0,
76 contrast: 1.0,
77 saturation: 1.0,
78 shadows: 0.0,
79 highlights: 0.0,
80 _align0: 0.0, _align1: 0.0,
81 ccm_row0: [1.0, 0.0, 0.0, 0.0],
82 ccm_row1: [0.0, 1.0, 0.0, 0.0],
83 ccm_row2: [0.0, 0.0, 1.0, 0.0],
84 color_space: 0,
85 transfer: 1, // sRGB
86 adjust_enabled: 0,
87 bayer_phase: 0,
88 compute_histogram: 0,
89 _pad0: 0, _pad1: 0, _pad2: 0, _pad3: 0, _pad4: 0, _pad5: 0, _pad6: 0,
90 };
91
92 let start = std::time::Instant::now();
93 match pipeline.process_and_readback(&bayer, ¶ms) {
94 Ok((rgba, out_w, out_h)) => {
95 let elapsed = start.elapsed();
96 println!(" ✓ GPU process + readback: {}x{} → {} bytes in {:?} ({:.0} fps)",
97 out_w, out_h, rgba.len(), elapsed, 1.0 / elapsed.as_secs_f64());
98 // Validate output
99 let expected_pixels = (out_w * out_h) as usize;
100 if rgba.len() == expected_pixels * 4 {
101 println!(" ✓ Output buffer size correct: {} RGBA pixels", expected_pixels);
102 } else {
103 println!(" ✗ Size mismatch: got {} bytes, expected {}", rgba.len(), expected_pixels * 4);
104 std::process::exit(1);
105 }
106 // Check a few pixels aren't all zero
107 let non_zero = rgba.iter().filter(|&&b| b != 0).count();
108 if non_zero > 0 {
109 println!(" ✓ Output has {} non-zero bytes (image content verified)", non_zero);
110 } else {
111 println!(" ✗ All output bytes are zero — pipeline produced black frame");
112 std::process::exit(1);
113 }
114 }
115 Err(e) => {
116 println!(" ✗ FAILED: {}", e);
117 std::process::exit(1);
118 }
119 }
120
121 println!();
122 println!("[4/4] Testing all 15 transfer function combinations...");
123
124 use mcraw_tui::preview::pipeline::params::transfer_to_u32;
125 use mcraw_tui::color::TransferFunction;
126
127 let mut passed = 0u32;
128 let mut failed = 0u32;
129 for tf in TransferFunction::all() {
130 let mut params = params.clone();
131 params.transfer = transfer_to_u32(tf);
132 let start = std::time::Instant::now();
133 match pipeline.process_and_readback(&bayer, ¶ms) {
134 Ok((_, _, _)) => {
135 let elapsed = start.elapsed();
136 if elapsed.as_millis() < 5000 {
137 println!(" ✓ {:<20} {:>6?}", tf.name(), elapsed);
138 passed += 1;
139 } else {
140 println!(" ✗ {:<20} timed out", tf.name());
141 failed += 1;
142 }
143 }
144 Err(e) => {
145 println!(" ✗ {:<20} {}", tf.name(), e);
146 failed += 1;
147 }
148 }
149 }
150
151 println!();
152 println!("== RESULTS ==");
153 println!(" ✓ GPU device init: PASS");
154 println!(" ✓ WGSL compilation: PASS");
155 println!(" ✓ Synthetic frame: PASS");
156 println!(" ✓ OETF variants: {}/15 passed, {}/15 failed", passed, failed);
157
158 if failed == 0 {
159 println!();
160 println!(" 🎉 All checks passed — pipeline is fully functional on this GPU!");
161 0
162 } else {
163 println!();
164 println!(" ⚠ {} OETF variants failed — see above for details", failed);
165 1
166 };
167}pub fn next(self) -> Self
pub fn prev(self) -> Self
pub fn is_log_bypass(&self) -> bool
pub fn requires_10bit(&self) -> bool
Trait Implementations§
Source§impl Clone for TransferFunction
impl Clone for TransferFunction
Source§fn clone(&self) -> TransferFunction
fn clone(&self) -> TransferFunction
Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreimpl Copy for TransferFunction
Source§impl Debug for TransferFunction
impl Debug for TransferFunction
impl Eq for TransferFunction
Source§impl From<TransferFunction> for Transfer
impl From<TransferFunction> for Transfer
Source§fn from(tf: TransferFunction) -> Self
fn from(tf: TransferFunction) -> Self
Converts to this type from the input type.
Source§impl PartialEq for TransferFunction
impl PartialEq for TransferFunction
Source§fn eq(&self, other: &TransferFunction) -> bool
fn eq(&self, other: &TransferFunction) -> bool
Tests for
self and other values to be equal, and is used by ==.impl StructuralPartialEq for TransferFunction
Auto Trait Implementations§
impl Freeze for TransferFunction
impl RefUnwindSafe for TransferFunction
impl Send for TransferFunction
impl Sync for TransferFunction
impl Unpin for TransferFunction
impl UnsafeUnpin for TransferFunction
impl UnwindSafe for TransferFunction
Blanket Implementations§
Source§impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for Swhere
T: Real + Zero + Arithmetics + Clone,
Swp: WhitePoint<T>,
Dwp: WhitePoint<T>,
D: AdaptFrom<S, Swp, Dwp, T>,
impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for Swhere
T: Real + Zero + Arithmetics + Clone,
Swp: WhitePoint<T>,
Dwp: WhitePoint<T>,
D: AdaptFrom<S, Swp, Dwp, T>,
Source§fn adapt_into_using<M>(self, method: M) -> Dwhere
M: TransformMatrix<T>,
fn adapt_into_using<M>(self, method: M) -> Dwhere
M: TransformMatrix<T>,
Convert the source color to the destination color using the specified
method.
Source§fn adapt_into(self) -> D
fn adapt_into(self) -> D
Convert the source color to the destination color using the bradford
method by default.
Source§impl<T, C> ArraysFrom<C> for Twhere
C: IntoArrays<T>,
impl<T, C> ArraysFrom<C> for Twhere
C: IntoArrays<T>,
Source§fn arrays_from(colors: C) -> T
fn arrays_from(colors: C) -> T
Cast a collection of colors into a collection of arrays.
Source§impl<T, C> ArraysInto<C> for Twhere
C: FromArrays<T>,
impl<T, C> ArraysInto<C> for Twhere
C: FromArrays<T>,
Source§fn arrays_into(self) -> C
fn arrays_into(self) -> C
Cast this collection of arrays into a collection of colors.
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
Mutably borrows from an owned value. Read more
Source§impl<WpParam, T, U> Cam16IntoUnclamped<WpParam, T> for Uwhere
T: FromCam16Unclamped<WpParam, U>,
impl<WpParam, T, U> Cam16IntoUnclamped<WpParam, T> for Uwhere
T: FromCam16Unclamped<WpParam, U>,
Source§type Scalar = <T as FromCam16Unclamped<WpParam, U>>::Scalar
type Scalar = <T as FromCam16Unclamped<WpParam, U>>::Scalar
The number type that’s used in
parameters when converting.Source§fn cam16_into_unclamped(
self,
parameters: BakedParameters<WpParam, <U as Cam16IntoUnclamped<WpParam, T>>::Scalar>,
) -> T
fn cam16_into_unclamped( self, parameters: BakedParameters<WpParam, <U as Cam16IntoUnclamped<WpParam, T>>::Scalar>, ) -> T
Converts
self into C, using the provided parameters.Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T, C> ComponentsFrom<C> for Twhere
C: IntoComponents<T>,
impl<T, C> ComponentsFrom<C> for Twhere
C: IntoComponents<T>,
Source§fn components_from(colors: C) -> T
fn components_from(colors: C) -> T
Cast a collection of colors into a collection of color components.
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
Compare self to
key and return true if they are equal.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
Causes
self to use its Binary implementation when Debug-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
Causes
self to use its Display implementation when
Debug-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
Causes
self to use its LowerExp implementation when
Debug-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
Causes
self to use its LowerHex implementation when
Debug-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
Causes
self to use its Octal implementation when Debug-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
Causes
self to use its Pointer implementation when
Debug-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
Causes
self to use its UpperExp implementation when
Debug-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
Causes
self to use its UpperHex implementation when
Debug-formatted.Source§impl<T> FromAngle<T> for T
impl<T> FromAngle<T> for T
Source§fn from_angle(angle: T) -> T
fn from_angle(angle: T) -> T
Performs a conversion from
angle.Source§impl<T, U> FromStimulus<U> for Twhere
U: IntoStimulus<T>,
impl<T, U> FromStimulus<U> for Twhere
U: IntoStimulus<T>,
Source§fn from_stimulus(other: U) -> T
fn from_stimulus(other: U) -> T
Converts
other into Self, while performing the appropriate scaling,
rounding and clamping.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, U> IntoAngle<U> for Twhere
U: FromAngle<T>,
impl<T, U> IntoAngle<U> for Twhere
U: FromAngle<T>,
Source§fn into_angle(self) -> U
fn into_angle(self) -> U
Performs a conversion into
T.Source§impl<WpParam, T, U> IntoCam16Unclamped<WpParam, T> for Uwhere
T: Cam16FromUnclamped<WpParam, U>,
impl<WpParam, T, U> IntoCam16Unclamped<WpParam, T> for Uwhere
T: Cam16FromUnclamped<WpParam, U>,
Source§type Scalar = <T as Cam16FromUnclamped<WpParam, U>>::Scalar
type Scalar = <T as Cam16FromUnclamped<WpParam, U>>::Scalar
The number type that’s used in
parameters when converting.Source§fn into_cam16_unclamped(
self,
parameters: BakedParameters<WpParam, <U as IntoCam16Unclamped<WpParam, T>>::Scalar>,
) -> T
fn into_cam16_unclamped( self, parameters: BakedParameters<WpParam, <U as IntoCam16Unclamped<WpParam, T>>::Scalar>, ) -> T
Converts
self into C, using the provided parameters.Source§impl<T, U> IntoColor<U> for Twhere
U: FromColor<T>,
impl<T, U> IntoColor<U> for Twhere
U: FromColor<T>,
Source§fn into_color(self) -> U
fn into_color(self) -> U
Convert into T with values clamped to the color defined bounds Read more
Source§impl<T, U> IntoColorUnclamped<U> for Twhere
U: FromColorUnclamped<T>,
impl<T, U> IntoColorUnclamped<U> for Twhere
U: FromColorUnclamped<T>,
Source§fn into_color_unclamped(self) -> U
fn into_color_unclamped(self) -> U
Convert into T. The resulting color might be invalid in its color space Read more
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>
Converts
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>
Converts
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<T> IntoStimulus<T> for T
impl<T> IntoStimulus<T> for T
Source§fn into_stimulus(self) -> T
fn into_stimulus(self) -> T
Converts
self into T, while performing the appropriate scaling,
rounding and clamping.Source§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Pipes by value. This is generally the method you want to use. Read more
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
Borrows
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
Mutably borrows
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
Borrows
self, then passes self.as_ref() into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
Mutably borrows
self, then passes self.as_mut() into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
Borrows
self, then passes self.deref() into the pipe function.Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Immutable access to the
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
Mutable access to the
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
Immutable access to the
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
Mutable access to the
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Immutable access to the
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Mutable access to the
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
Calls
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
Calls
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
Calls
.tap_borrow() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
Calls
.tap_borrow_mut() only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
Calls
.tap_ref() only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
Calls
.tap_ref_mut() only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
Calls
.tap_deref() only in debug builds, and is erased in release
builds.Source§impl<T, C> TryComponentsInto<C> for Twhere
C: TryFromComponents<T>,
impl<T, C> TryComponentsInto<C> for Twhere
C: TryFromComponents<T>,
Source§type Error = <C as TryFromComponents<T>>::Error
type Error = <C as TryFromComponents<T>>::Error
The error for when
try_into_colors fails to cast.Source§fn try_components_into(self) -> Result<C, <T as TryComponentsInto<C>>::Error>
fn try_components_into(self) -> Result<C, <T as TryComponentsInto<C>>::Error>
Try to cast this collection of color components into a collection of
colors. Read more
Source§impl<T, U> TryIntoColor<U> for Twhere
U: TryFromColor<T>,
impl<T, U> TryIntoColor<U> for Twhere
U: TryFromColor<T>,
Source§fn try_into_color(self) -> Result<U, OutOfBounds<U>>
fn try_into_color(self) -> Result<U, OutOfBounds<U>>
Convert into T, returning ok if the color is inside of its defined
range, otherwise an
OutOfBounds error is returned which contains
the unclamped color. Read moreSource§impl<C, U> UintsFrom<C> for Uwhere
C: IntoUints<U>,
impl<C, U> UintsFrom<C> for Uwhere
C: IntoUints<U>,
Source§fn uints_from(colors: C) -> U
fn uints_from(colors: C) -> U
Cast a collection of colors into a collection of unsigned integers.
Source§impl<C, U> UintsInto<C> for Uwhere
C: FromUints<U>,
impl<C, U> UintsInto<C> for Uwhere
C: FromUints<U>,
Source§fn uints_into(self) -> C
fn uints_into(self) -> C
Cast this collection of unsigned integers into a collection of colors.