@@ -337,28 +337,33 @@ where
337
337
338
338
// The hue base is the `1`, `2/6`, `4/6` or 0 part of the hue equation,
339
339
// except it's multiplied by 6 here.
340
- let hue_base = x. clone ( ) . select ( T :: from_f64 ( -4.0 ) , T :: zero ( ) )
341
- * z. clone ( ) . select ( T :: one ( ) , -T :: one ( ) )
342
- + & six;
340
+ let hue_base = x. clone ( ) . select (
341
+ z. clone ( ) . select ( T :: from_f64 ( -4.0 ) , T :: from_f64 ( 4.0 ) ) ,
342
+ T :: zero ( ) ,
343
+ ) + & six;
343
344
344
345
// Each of these is a part of `G - B`, `B - R`, `R - G` or 0 from the
345
346
// hue equation. They become positive, negative or 0, depending on which
346
347
// branch we should be in. This makes the sum of all three combine as
347
348
// expected.
348
- let red_m = x. clone ( ) . select ( red, T :: zero ( ) ) * y. clone ( ) . select ( T :: one ( ) , -T :: one ( ) ) ;
349
- let green_m = y. clone ( ) . select ( green, T :: zero ( ) ) * z. clone ( ) . select ( T :: one ( ) , -T :: one ( ) ) ;
350
- let blue_m = z. select ( blue, T :: zero ( ) ) * y. select ( -T :: one ( ) , T :: one ( ) ) ;
349
+ let red_m = x
350
+ . clone ( )
351
+ . select ( y. clone ( ) . select ( red. clone ( ) , -red) , T :: zero ( ) ) ;
352
+ let green_m = y
353
+ . clone ( )
354
+ . select ( z. clone ( ) . select ( green. clone ( ) , -green) , T :: zero ( ) ) ;
355
+ let blue_m = z. select ( y. select ( -blue. clone ( ) , blue) , T :: zero ( ) ) ;
351
356
352
357
// This is the hue equation parts combined. The hue base is the constant
353
358
// and the RGB components are masked so up to two of them are non-zero.
354
359
// Once again, this is multiplied by 6, so the chroma isn't multiplied
355
360
// before dividing.
356
361
//
357
362
// We also avoid dividing by 0 for non-SIMD values.
358
- let hue = chroma . eq ( & T :: zero ( ) ) . lazy_select (
359
- || T :: zero ( ) ,
360
- || hue_base + ( red_m + green_m + blue_m) / & chroma,
361
- ) ;
363
+ let hue = lazy_select ! {
364
+ if chroma . eq ( & T :: zero ( ) ) => T :: zero( ) ,
365
+ else => hue_base + ( red_m + green_m + blue_m) / & chroma,
366
+ } ;
362
367
363
368
// hue will always be within [0, 12) (it's multiplied by 6, compared to
364
369
// the paper), so we can subtract by 6 instead of using % to get it
0 commit comments