Col4< T, STRIDE > Struct Template Reference

#include <vector.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

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

Static Public Member Functions

static const Col4NullValue ()
 

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

Unstrided operator* (ValueTypeParam s, const Col4 &v)
 
Dot (const Col4 &v1, const Col4 &v2)
 
Unstrided Abs (const Col4 &v1)
 
template<typename T2 , Int S2>
MultiplicativePromotion< T, T2 >::type Dot (const Col4 &v1, const Col4< T2, S2 > &v2)
 
Unstrided Min (const Col4 &th, const Col4 &other)
 
Unstrided Max (const Col4 &th, const Col4 &other)
 
void SetMin (Col4 &th, const Col4 &other)
 
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]

Col4 ( )

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

◆ Col4() [2/9]

Col4 ( ValueTypeParam  in)
explicit

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

◆ Col4() [3/9]

Col4 ( ValueTypeParam  ix,
ValueTypeParam  iy,
ValueTypeParam  iz,
ValueTypeParam  iw 
)
explicit

Initializes all vector components individually.

◆ Col4() [4/9]

Col4 ( const Col4< T2, S2 > &  v)
explicit

Initializes components from another 4d vector.

◆ Col4() [5/9]

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

◆ Col4() [6/9]

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

◆ Col4() [7/9]

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

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]

Col4 ( ENUM_DONT_INITIALIZE  v)
explicit

Skips initialization of vector (for better speed)

◆ Col4() [9/9]

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

Member Function Documentation

◆ GetVector() [1/2]

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

Reinterprets the color as vector.

◆ GetVector() [2/2]

Vec4<T, STRIDE>& GetVector ( )

◆ GetColor3()

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

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

◆ operator=()

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

◆ 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]

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

Adds two vectors.

◆ operator+=() [2/2]

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

◆ operator-=() [1/2]

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

Subtracts two vectors.

◆ operator-=() [2/2]

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

◆ operator*=() [1/4]

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

Multiplies two vectors component-wise.

◆ operator*=() [2/4]

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

◆ operator*=() [3/4]

Col4& operator*= ( ValueTypeParam  s)

Multiplies each vector component by a scalar.

◆ operator/=()

Col4& operator/= ( ValueTypeParam  s)

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

◆ operator*() [1/3]

Unstrided operator* ( ValueTypeParam  s) const

Multiplies each vector component by a scalar.

◆ operator*() [2/3]

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

Multiplies each vector component by a scalar.

◆ operator/()

Unstrided operator/ ( ValueTypeParam  s) const

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

◆ operator*() [3/3]

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

Multiplies two vectors component-wise.

◆ operator+()

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

Adds two vectors.

◆ operator-() [1/2]

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

Subtracts vector v2 from v1.

◆ operator-() [2/2]

Unstrided operator- ( ) const

Negates vector v.

◆ operator==() [1/2]

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

◆ operator==() [2/2]

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

◆ operator!=() [1/2]

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

◆ operator!=() [2/2]

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

◆ LessThanOrEqual()

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

◆ GetHashCode()

UInt GetHashCode ( ) const

◆ IsEqual()

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

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

◆ IsZero()

BoolType IsZero ( ) const

Checks if each component is zero.

◆ SetZero()

void SetZero ( )

Sets all components to zero.

◆ GetAverage()

T GetAverage ( ) const

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

◆ GetSum()

T GetSum ( ) const

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

◆ ClampMin()

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

Set the minimum of each component.

◆ ClampMax()

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

Set the maximum of each component.

◆ Clamp01()

Unstrided Clamp01 ( ) const

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

◆ ToString()

String ToString ( const FormatStatement formatStatement) const

Returns a readable string of the content.

Parameters
[in]formatStatementNullptr or additional formatting instruction. See also format_float.
Returns
The converted result.

◆ GetMin()

T GetMin ( ) const

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

◆ GetMax()

T GetMax ( ) const

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

◆ GetRightRotated()

Col4 GetRightRotated ( Int  rots) const

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]

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

Multiplies vector by a matrix.

◆ NullValue()

static const Col4& NullValue ( )
static

Friends And Related Function Documentation

◆ operator*

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

Multiplies each vector component by a scalar.

◆ Dot [1/2]

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

Calculates dot product of v1 and v2.

◆ Abs

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]

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

Calculates dot product of v1 and v2.

◆ Min

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

Calculates the minimum of each component.

◆ Max

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

Calculates the maximum of each component.

◆ SetMin

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

Set the minimum of each component.

◆ SetMax

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]

◆ @1081

union { ... }

◆ g

T g

◆ _ypadding

T _ypadding[STRIDE]

◆ @1083

union { ... }

◆ b

T b

◆ _zpadding

T _zpadding[STRIDE]

◆ @1085

union { ... }

◆ a

T a

◆ _wpadding

T _wpadding[STRIDE]

◆ @1087

union { ... }