Krita Source Code Documentation
Loading...
Searching...
No Matches
CFVividLight< T, ClampPolicy > Struct Template Reference

#include <KoCompositeOpFunctions.h>

+ Inheritance diagram for CFVividLight< T, ClampPolicy >:

Static Public Member Functions

static T composeChannel (T src, T dst)
 
- Static Public Member Functions inherited from KoClampedSourceCompositeOpGenericFunctorBase< T >
static T clampDestinationChannelValue (T value)
 
static T clampSourceChannelValue (T value)
 

Detailed Description

template<class T, template< typename > typename ClampPolicy>
struct CFVividLight< T, ClampPolicy >

Definition at line 533 of file KoCompositeOpFunctions.h.

Member Function Documentation

◆ composeChannel()

template<class T , template< typename > typename ClampPolicy>
static T CFVividLight< T, ClampPolicy >::composeChannel ( T src,
T dst )
inlinestatic

Definition at line 534 of file KoCompositeOpFunctions.h.

534 {
535 using namespace Arithmetic;
536 using clamp_policy = ClampPolicy<T>;
537 using composite_type = typename KoColorSpaceMathsTraits<T>::compositetype;
538
539 if (src < halfValue<T>()) {
540 if (isZeroValueStrict(src)) {
541 return isUnitValueClampedStrict(dst) ? clamp_policy::clampResultAllowNegative(dst) : zeroValue<T>();
542 }
543
544 // min(1,max(0,1-(1-dst) / (2*src)))
545 composite_type src2 = composite_type(src) + src;
546 composite_type dsti = inv(dst);
547 return clamp_policy::clampResult(
548 unitValue<T>() -
549 clamp_policy::fixInfiniteAfterDivision(
550 divideInCompositeSpace<T>(dsti, src2)
551 )
552 );
553 }
554
555 if (isUnitValueStrict(src)) {
556 return isZeroValueClampedStrict(dst) ? zeroValue<T>() : unitValue<T>();
557 }
558
559 // min(1,max(0, dst / (2*(1-src)))
560 composite_type srci2 = inv(src);
561 srci2 += srci2;
562 return clamp_policy::clampResultAllowNegative(
563 clamp_policy::fixInfiniteAfterDivision(
564 divideInCompositeSpace<T>(composite_type(dst), srci2)
565 )
566 );
567 }
bool isUnitValueStrict(T value)
bool isUnitValueClampedStrict(T value)
bool isZeroValueStrict(T value)
bool isZeroValueClampedStrict(T value)

The documentation for this struct was generated from the following file: