Open Search
    Col4< T, STRIDE > Struct Template Reference

    #include <col4.h>

    Detailed Description

    template<typename T, Int STRIDE = 1>
    struct maxon::Col4< T, STRIDE >

    A color consisting of three components R, G, B and an alpha.

    Public Types

    template<typename U >
    using Rebind = Col4< U, STRIDE >
     
    using VectorStrideType = std::integral_constant< Int, STRIDE >
     
    using ValueType = T
     
    using ValueTypeParam = typename ByValueParam< T >::type
     
    using Unstrided = Col4< T, 1 >
     
    using BoolType = decltype(T()==T())
     

    Public Member Functions

    constexpr Col4 ()
     
    constexpr Col4 (ValueTypeParam in)
     
    constexpr Col4 (ValueTypeParam ix, ValueTypeParam iy, ValueTypeParam iz, ValueTypeParam iw)
     
    template<typename T2 , Int S2>
    constexpr Col4 (const Col4< T2, S2 > &v)
     
    template<typename T2 , Int S2>
    constexpr Col4 (const Vec4< T2, S2 > &v)
     
    template<Int S2>
    constexpr Col4 (const Col4< T, S2 > &v)
     
    template<typename T2 , Int S2>
    constexpr Col4 (const Col3< T2, S2 > &v, T iw=T(1))
     
    constexpr Col4 (ENUM_DONT_INITIALIZE v)
     
    constexpr const Vec4< T, STRIDE > & GetVector () const
     
    constexpr Vec4< T, STRIDE > & GetVector ()
     
    constexpr const Col3< T, STRIDE > & GetColor3 () const
     
    constexpr MAXON_IMPLICIT Col4 (const typename std::conditional< STRIDE==1, DummyParamType, Col4 >::type &src)
     
    constexpr Col4operator= (const typename std::conditional< STRIDE==1, DummyParamType, Col4 >::type &src)
     
    T & operator[] (Int l)
     
    ValueTypeParam operator[] (Int l) const
     
    template<typename T2 , Int S2>
    constexpr Col4operator+= (const Col4< T2, S2 > &v)
     
    constexpr Col4operator+= (const Col4 &v)
     
    template<typename T2 , Int S2>
    constexpr Col4operator-= (const Col4< T2, S2 > &v)
     
    constexpr Col4operator-= (const Col4 &v)
     
    template<typename T2 , Int S2>
    constexpr Col4operator*= (const Col4< T2, S2 > &v)
     
    constexpr Col4operator*= (const Col4 &v)
     
    constexpr Col4operator*= (ValueTypeParam s)
     
    constexpr Col4operator/= (ValueTypeParam s)
     
    constexpr Unstrided operator* (ValueTypeParam s) const
     
    template<typename S >
    constexpr Col4< typename MultiplicativePromotion< T, S, STD_IS_REPLACEMENT(scalar, S)>::type, 1 > operator* (S s) const
     
    constexpr Unstrided operator/ (ValueTypeParam s) const
     
    constexpr Unstrided operator* (const Col4 &v) const
     
    constexpr Unstrided operator+ (const Col4 &v) const
     
    constexpr Unstrided operator- (const Col4 &v) const
     
    constexpr Unstrided operator- () const
     
    template<typename T2 , Int S2>
    constexpr BoolType operator== (const Col4< T2, S2 > &v) const
     
    constexpr BoolType operator== (const Col4 &v) const
     
    template<typename T2 , Int S2>
    constexpr BoolType operator!= (const Col4< T2, S2 > &v) const
     
    constexpr BoolType operator!= (const Col4 &v) const
     
    constexpr BoolType operator<= (const Col4 &v) const
     
    constexpr BoolType operator>= (const Col4 &v) const
     
    constexpr BoolType operator< (const Col4 &v) const
     
    constexpr BoolType operator> (const Col4 &v) const
     
    constexpr HashInt GetHashCode () const
     
    UniqueHash GetUniqueHashCode () const
     
    constexpr BoolType IsEqual (const Col4 &other, ValueTypeParam epsilon) const
     
    constexpr BoolType IsZero () const
     
    constexpr void SetZero ()
     
    constexpr T GetAverage () const
     
    constexpr T GetSum () const
     
    constexpr void ClampMin (const Col4 &other=Col4())
     
    constexpr void ClampMax (const Col4 &other)
     
    constexpr Unstrided Clamp01 () const
     
    String ToString (const FormatStatement *formatStatement=nullptr) const
     
    constexpr T GetMin () const
     
    constexpr T GetMax () const
     
    constexpr Col4 GetRightRotated (Int rots) const
     
    template<typename V >
    constexpr Col4operator*= (const SqrMat4< V > &m)
     

    Static Public Member Functions

    static MAXON_ATTRIBUTE_FORCE_INLINE const Col4DefaultValue ()
     

    Public Attributes

    union {
       T   r
     
       T   _xpadding [STRIDE]
     
    }; 
     
    union {
       T   g
     
       T   _ypadding [STRIDE]
     
    }; 
     
    union {
       T   b
     
       T   _zpadding [STRIDE]
     
    }; 
     
    union {
       T   a
     
       T   _wpadding [STRIDE]
     
    }; 
     

    Friends

    constexpr friend Unstrided operator* (ValueTypeParam s, const Col4 &v)
     
    constexpr friend T Dot (const Col4 &v1, const Col4 &v2)
     
    constexpr friend Unstrided Abs (const Col4 &v1)
     
    template<typename T2 , Int S2>
    constexpr friend MultiplicativePromotion< T, T2 >::type Dot (const Col4 &v1, const Col4< T2, S2 > &v2)
     
    constexpr friend Unstrided Min (const Col4 &th, const Col4 &other)
     
    constexpr friend Unstrided Max (const Col4 &th, const Col4 &other)
     
    constexpr friend void SetMin (Col4 &th, const Col4 &other)
     
    constexpr friend void SetMax (Col4 &th, const Col4 &other)
     

    Member Typedef Documentation

    ◆ Rebind

    using Rebind = Col4<U, STRIDE>

    ◆ VectorStrideType

    using VectorStrideType = std::integral_constant<Int, STRIDE>

    ◆ ValueType

    using ValueType = T

    ◆ ValueTypeParam

    using ValueTypeParam = typename ByValueParam<T>::type

    ◆ Unstrided

    using Unstrided = Col4<T, 1>

    ◆ BoolType

    using BoolType = decltype(T() == T())

    The type returned by comparisons. If the template argument for T is a SIMD type, this will be a SIMD type, too, which contains the per-element results.

    Constructor & Destructor Documentation

    ◆ Col4() [1/9]

    constexpr Col4 ( )
    constexpr

    Initializes all color components with 0.0 and the alpha with 1.0.

    ◆ Col4() [2/9]

    constexpr Col4 ( ValueTypeParam  in)
    explicitconstexpr

    Initializes all color components with a scalar and the alpha with 1.0.

    ◆ Col4() [3/9]

    constexpr Col4 ( ValueTypeParam  ix,
    ValueTypeParam  iy,
    ValueTypeParam  iz,
    ValueTypeParam  iw 
    )
    explicitconstexpr

    Initializes all vector components individually.

    ◆ Col4() [4/9]

    constexpr Col4 ( const Col4< T2, S2 > &  v)
    explicitconstexpr

    Initializes components from another 4d vector.

    ◆ Col4() [5/9]

    constexpr Col4 ( const Vec4< T2, S2 > &  v)
    explicitconstexpr

    ◆ Col4() [6/9]

    constexpr Col4 ( const Col4< T, S2 > &  v)
    constexpr

    ◆ Col4() [7/9]

    constexpr Col4 ( const Col3< T2, S2 > &  v,
    iw = T(1) 
    )
    explicitconstexpr

    Initializes components from a 3d vector and add an additional value for the a-component. The default value for the alpha is 1.0.

    ◆ Col4() [8/9]

    constexpr Col4 ( ENUM_DONT_INITIALIZE  v)
    explicitconstexpr

    Skips initialization of vector (for better speed)

    ◆ Col4() [9/9]

    constexpr MAXON_IMPLICIT Col4 ( const typename std::conditional< STRIDE==1, DummyParamType, Col4< T, STRIDE > >::type src)
    constexpr

    Member Function Documentation

    ◆ GetVector() [1/2]

    constexpr const Vec4<T, STRIDE>& GetVector ( ) const
    constexpr

    Reinterprets the color as vector.

    ◆ GetVector() [2/2]

    constexpr Vec4<T, STRIDE>& GetVector ( )
    constexpr

    ◆ GetColor3()

    constexpr const Col3<T, STRIDE>& GetColor3 ( ) const
    constexpr

    Gets the r/g/b components as a color without alpha.

    ◆ operator=()

    constexpr Col4& operator= ( const typename std::conditional< STRIDE==1, DummyParamType, Col4< T, STRIDE > >::type src)
    constexpr

    ◆ operator[]() [1/2]

    T& operator[] ( Int  l)

    Accesses vector component: index 0 is 'r', index 1 is 'g', index 2 is 'b'. All other values must not be used and will crash.

    ◆ operator[]() [2/2]

    ValueTypeParam operator[] ( Int  l) const

    Accesses vector component: index 0 is 'r', index 1 is 'g', index 2 is 'b'. All other values must not be used and will crash.

    ◆ operator+=() [1/2]

    constexpr Col4& operator+= ( const Col4< T2, S2 > &  v)
    constexpr

    Adds two vectors.

    ◆ operator+=() [2/2]

    constexpr Col4& operator+= ( const Col4< T, STRIDE > &  v)
    constexpr

    ◆ operator-=() [1/2]

    constexpr Col4& operator-= ( const Col4< T2, S2 > &  v)
    constexpr

    Subtracts two vectors.

    ◆ operator-=() [2/2]

    constexpr Col4& operator-= ( const Col4< T, STRIDE > &  v)
    constexpr

    ◆ operator*=() [1/4]

    constexpr Col4& operator*= ( const Col4< T2, S2 > &  v)
    constexpr

    Multiplies two vectors component-wise.

    ◆ operator*=() [2/4]

    constexpr Col4& operator*= ( const Col4< T, STRIDE > &  v)
    constexpr

    ◆ operator*=() [3/4]

    constexpr Col4& operator*= ( ValueTypeParam  s)
    constexpr

    Multiplies each vector component by a scalar.

    ◆ operator/=()

    constexpr Col4& operator/= ( ValueTypeParam  s)
    constexpr

    Divides each vector component by a scalar. The passed argument is checked for 0.0.

    ◆ operator*() [1/3]

    constexpr Unstrided operator* ( ValueTypeParam  s) const
    constexpr

    Multiplies each vector component by a scalar.

    ◆ operator*() [2/3]

    constexpr Col4<typename MultiplicativePromotion<T, S, STD_IS_REPLACEMENT(scalar, S)>::type, 1> operator* ( s) const
    constexpr

    Multiplies each vector component by a scalar.

    ◆ operator/()

    constexpr Unstrided operator/ ( ValueTypeParam  s) const
    constexpr

    Divides each vector component by a scalar. The scalar value is tested for 0.0.

    ◆ operator*() [3/3]

    constexpr Unstrided operator* ( const Col4< T, STRIDE > &  v) const
    constexpr

    Multiplies two vectors component-wise.

    ◆ operator+()

    constexpr Unstrided operator+ ( const Col4< T, STRIDE > &  v) const
    constexpr

    Adds two vectors.

    ◆ operator-() [1/2]

    constexpr Unstrided operator- ( const Col4< T, STRIDE > &  v) const
    constexpr

    Subtracts vector v2 from v1.

    ◆ operator-() [2/2]

    constexpr Unstrided operator- ( ) const
    constexpr

    Negates vector v.

    ◆ operator==() [1/2]

    constexpr BoolType operator== ( const Col4< T2, S2 > &  v) const
    constexpr

    ◆ operator==() [2/2]

    constexpr BoolType operator== ( const Col4< T, STRIDE > &  v) const
    constexpr

    ◆ operator!=() [1/2]

    constexpr BoolType operator!= ( const Col4< T2, S2 > &  v) const
    constexpr

    ◆ operator!=() [2/2]

    constexpr BoolType operator!= ( const Col4< T, STRIDE > &  v) const
    constexpr

    ◆ operator<=()

    constexpr BoolType operator<= ( const Col4< T, STRIDE > &  v) const
    constexpr

    Compares this color with v. Note that this doesn't define a total order but just a partial order, so for a pair of colors it can happen that neither {v <= w} nor {v >= w}.

    Parameters
    [in]vComparison color.
    Returns
    True if this.c <= v.c for all components c of the colors, false otherwise.

    ◆ operator>=()

    constexpr BoolType operator>= ( const Col4< T, STRIDE > &  v) const
    constexpr

    Compares this color with v. Note that this doesn't define a total order but just a partial order, so for a pair of colors it can happen that neither {v <= w} nor {v >= w}.

    Parameters
    [in]vComparison color.
    Returns
    True if this.c >= v.c for all components c of the colors, false otherwise.

    ◆ operator<()

    constexpr BoolType operator< ( const Col4< T, STRIDE > &  v) const
    constexpr

    Compares this color with v. Note that this doesn't define a total order but just a partial order, so for a pair of colors it can happen that neither {v < w} nor {v > w} nor {v == w}. Also note that {v < w} is not the same as {v <= w && v != w}.

    Parameters
    [in]vComparison color.
    Returns
    True if this.c < v.c for all components c of the colors, false otherwise.

    ◆ operator>()

    constexpr BoolType operator> ( const Col4< T, STRIDE > &  v) const
    constexpr

    Compares this color with v. Note that this doesn't define a total order but just a partial order, so for a pair of colors it can happen that neither {v < w} nor {v > w} nor {v == w}. Also note that {v > w} is not the same as {v >= w && v != w}.

    Parameters
    [in]vComparison color.
    Returns
    True if this.c > v.c for all components c of the colors, false otherwise.

    ◆ GetHashCode()

    constexpr HashInt GetHashCode ( ) const
    constexpr

    ◆ GetUniqueHashCode()

    UniqueHash GetUniqueHashCode ( ) const

    ◆ IsEqual()

    constexpr BoolType IsEqual ( const Col4< T, STRIDE > &  other,
    ValueTypeParam  epsilon 
    ) const
    constexpr

    Tests component-wise if the difference is no bigger than 'epsilon'.

    ◆ IsZero()

    constexpr BoolType IsZero ( ) const
    constexpr

    Checks if each component is zero.

    ◆ SetZero()

    constexpr void SetZero ( )
    constexpr

    Sets all components to zero.

    ◆ GetAverage()

    constexpr T GetAverage ( ) const
    constexpr

    Calculates the average value of 'r', 'g', 'b' and 'a'.

    ◆ GetSum()

    constexpr T GetSum ( ) const
    constexpr

    Calculates the sum of 'r', 'g', 'b' and 'a'.

    ◆ ClampMin()

    constexpr void ClampMin ( const Col4< T, STRIDE > &  other = Col4< T, STRIDE >())
    constexpr

    Set the minimum of each component.

    ◆ ClampMax()

    constexpr void ClampMax ( const Col4< T, STRIDE > &  other)
    constexpr

    Set the maximum of each component.

    ◆ Clamp01()

    constexpr Unstrided Clamp01 ( ) const
    constexpr

    Returns a vector that is clamped to the range [0.0 .. 1.0].

    ◆ ToString()

    String ToString ( const FormatStatement formatStatement = nullptr) const

    Returns a readable string of the content.

    Parameters
    [in]formatStatementNullptr or additional formatting instruction. See also Formatting Floating point values.
    Returns
    The converted result.

    ◆ GetMin()

    constexpr T GetMin ( ) const
    constexpr

    Returns the minimum of 'r', 'g', 'b' and 'a'.

    ◆ GetMax()

    constexpr T GetMax ( ) const
    constexpr

    Returns the maximum of 'r', 'g', 'b' and 'a'.

    ◆ GetRightRotated()

    constexpr Col4 GetRightRotated ( Int  rots) const
    constexpr

    Returns a vector where the components have been rotated to the right (in the usual (r, g, b, a)-representation). E.g., with a value of 1 for rots, the result will be (a, r, g, b).

    Parameters
    [in]rotsNumber of rotations, may be negative. The result depends only on the number modulo 4.
    Returns
    Vector with rotated components.

    ◆ operator*=() [4/4]

    constexpr Col4& operator*= ( const SqrMat4< V > &  m)
    constexpr

    Multiplies vector by a matrix.

    ◆ DefaultValue()

    static MAXON_ATTRIBUTE_FORCE_INLINE const Col4& DefaultValue ( )
    static

    Friends And Related Function Documentation

    ◆ operator*

    constexpr friend Unstrided operator* ( ValueTypeParam  s,
    const Col4< T, STRIDE > &  v 
    )
    friend

    Multiplies each vector component by a scalar.

    ◆ Dot [1/2]

    constexpr friend T Dot ( const Col4< T, STRIDE > &  v1,
    const Col4< T, STRIDE > &  v2 
    )
    friend

    Calculates dot product of v1 and v2.

    ◆ Abs

    constexpr friend Unstrided Abs ( const Col4< T, STRIDE > &  v1)
    friend

    Returns the vector with absolute value for each entry

    Parameters
    [in]v1input vector to work on
    Returns
    component wise absolute value vector of input vector

    ◆ Dot [2/2]

    constexpr friend MultiplicativePromotion<T, T2>::type Dot ( const Col4< T, STRIDE > &  v1,
    const Col4< T2, S2 > &  v2 
    )
    friend

    Calculates dot product of v1 and v2.

    ◆ Min

    constexpr friend Unstrided Min ( const Col4< T, STRIDE > &  th,
    const Col4< T, STRIDE > &  other 
    )
    friend

    Calculates the minimum of each component.

    ◆ Max

    constexpr friend Unstrided Max ( const Col4< T, STRIDE > &  th,
    const Col4< T, STRIDE > &  other 
    )
    friend

    Calculates the maximum of each component.

    ◆ SetMin

    constexpr friend void SetMin ( Col4< T, STRIDE > &  th,
    const Col4< T, STRIDE > &  other 
    )
    friend

    Set the minimum of each component.

    ◆ SetMax

    constexpr friend void SetMax ( Col4< T, STRIDE > &  th,
    const Col4< T, STRIDE > &  other 
    )
    friend

    Set the maximum of each component.

    Member Data Documentation

    ◆ r

    T r

    ◆ _xpadding

    T _xpadding[STRIDE]

    ◆ 

    union { ... }

    ◆ g

    T g

    ◆ _ypadding

    T _ypadding[STRIDE]

    ◆ 

    union { ... }

    ◆ b

    T b

    ◆ _zpadding

    T _zpadding[STRIDE]

    ◆ 

    union { ... }

    ◆ a

    T a

    ◆ _wpadding

    T _wpadding[STRIDE]

    ◆ 

    union { ... }