/////////////////////////////////////////////////////////////////////////////////////////////////// // OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net) /////////////////////////////////////////////////////////////////////////////////////////////////// // Created : 2005-12-21 // Updated : 2010-02-07 // Licence : This source is under MIT licence // File : glm/gtc/half_float.inl /////////////////////////////////////////////////////////////////////////////////////////////////// namespace glm{ namespace detail{ #ifndef _MSC_EXTENSIONS ////////////////////////////////////// // hvec2 GLM_FUNC_QUALIFIER tvec2::size_type tvec2::value_size() { return 2; } ////////////////////////////////////// // Accesses GLM_FUNC_QUALIFIER thalf & tvec2::operator[](tvec2::size_type i) { assert(/*i >= tvec2::size_type(0) && */i < tvec2::value_size()); return (&x)[i]; } GLM_FUNC_QUALIFIER thalf const & tvec2::operator[](tvec2::size_type i) const { assert(/*i >= tvec2::size_type(0) && */i < tvec2::value_size()); return (&x)[i]; } ////////////////////////////////////// // Implicit basic constructors GLM_FUNC_QUALIFIER tvec2::tvec2() : x(thalf(0.f)), y(thalf(0.f)) {} GLM_FUNC_QUALIFIER tvec2::tvec2 ( tvec2 const & v ) : x(v.x), y(v.y) {} ////////////////////////////////////// // Explicit basic constructors GLM_FUNC_QUALIFIER tvec2::tvec2 ( thalf const & s ) : x(s), y(s) {} GLM_FUNC_QUALIFIER tvec2::tvec2 ( thalf const & s1, thalf const & s2 ) : x(s1), y(s2) {} ////////////////////////////////////// // Swizzle constructors GLM_FUNC_QUALIFIER tvec2::tvec2 ( tref2 const & r ) : x(r.x), y(r.y) {} ////////////////////////////////////// // Convertion scalar constructors template GLM_FUNC_QUALIFIER tvec2::tvec2 ( U const & x ) : x(thalf(x)), y(thalf(x)) {} template GLM_FUNC_QUALIFIER tvec2::tvec2 ( U const & x, V const & y ) : x(thalf(x)), y(thalf(y)) {} ////////////////////////////////////// // Convertion vector constructors template GLM_FUNC_QUALIFIER tvec2::tvec2 ( tvec2 const & v ) : x(thalf(v.x)), y(thalf(v.y)) {} template GLM_FUNC_QUALIFIER tvec2::tvec2 ( tvec3 const & v ) : x(thalf(v.x)), y(thalf(v.y)) {} template GLM_FUNC_QUALIFIER tvec2::tvec2 ( tvec4 const & v ) : x(thalf(v.x)), y(thalf(v.y)) {} ////////////////////////////////////// // Unary arithmetic operators GLM_FUNC_QUALIFIER tvec2 & tvec2::operator= ( tvec2 const & v ) { this->x = v.x; this->y = v.y; return *this; } GLM_FUNC_QUALIFIER tvec2 & tvec2::operator+= ( thalf const & s ) { this->x += s; this->y += s; return *this; } GLM_FUNC_QUALIFIER tvec2 & tvec2::operator+= ( tvec2 const & v ) { this->x += v.x; this->y += v.y; return *this; } GLM_FUNC_QUALIFIER tvec2 & tvec2::operator-= ( thalf const & s ) { this->x -= s; this->y -= s; return *this; } GLM_FUNC_QUALIFIER tvec2 & tvec2::operator-= ( tvec2 const & v ) { this->x -= v.x; this->y -= v.y; return *this; } GLM_FUNC_QUALIFIER tvec2& tvec2::operator*= ( thalf const & s ) { this->x *= s; this->y *= s; return *this; } GLM_FUNC_QUALIFIER tvec2 & tvec2::operator*= ( tvec2 const & v ) { this->x *= v.x; this->y *= v.y; return *this; } GLM_FUNC_QUALIFIER tvec2 & tvec2::operator/= ( thalf const & s ) { this->x /= s; this->y /= s; return *this; } GLM_FUNC_QUALIFIER tvec2 & tvec2::operator/= ( tvec2 const & v ) { this->x /= v.x; this->y /= v.y; return *this; } GLM_FUNC_QUALIFIER tvec2 & tvec2::operator++() { ++this->x; ++this->y; return *this; } GLM_FUNC_QUALIFIER tvec2& tvec2::operator--() { --this->x; --this->y; return *this; } ////////////////////////////////////// // Swizzle operators GLM_FUNC_QUALIFIER thalf tvec2::swizzle(comp x) const { return (*this)[x]; } GLM_FUNC_QUALIFIER tvec2 tvec2::swizzle(comp x, comp y) const { return tvec2( (*this)[x], (*this)[y]); } GLM_FUNC_QUALIFIER tvec3 tvec2::swizzle(comp x, comp y, comp z) const { return tvec3( (*this)[x], (*this)[y], (*this)[z]); } GLM_FUNC_QUALIFIER tvec4 tvec2::swizzle(comp x, comp y, comp z, comp w) const { return tvec4( (*this)[x], (*this)[y], (*this)[z], (*this)[w]); } GLM_FUNC_QUALIFIER tref2 tvec2::swizzle(comp x, comp y) { return tref2( (*this)[x], (*this)[y]); } ////////////////////////////////////// // hvec3 GLM_FUNC_QUALIFIER tvec3::size_type tvec3::value_size() { return 3; } ////////////////////////////////////// // Accesses GLM_FUNC_QUALIFIER thalf & tvec3::operator[] ( tvec3::size_type i ) { assert(/*i >= tvec3::size_type(0) &&*/ i < tvec3::value_size()); return (&x)[i]; } GLM_FUNC_QUALIFIER thalf const & tvec3::operator[] ( tvec3::size_type i ) const { assert(/*i >= tvec3::size_type(0) &&*/ i < tvec3::value_size()); return (&x)[i]; } ////////////////////////////////////// // Implicit basic constructors GLM_FUNC_QUALIFIER tvec3::tvec3() : x(thalf(0)), y(thalf(0)), z(thalf(0)) {} GLM_FUNC_QUALIFIER tvec3::tvec3 ( tvec3 const & v ) : x(v.x), y(v.y), z(v.z) {} ////////////////////////////////////// // Explicit basic constructors GLM_FUNC_QUALIFIER tvec3::tvec3 ( thalf const & s ) : x(s), y(s), z(s) {} GLM_FUNC_QUALIFIER tvec3::tvec3 ( thalf const & s0, thalf const & s1, thalf const & s2 ) : x(s0), y(s1), z(s2) {} ////////////////////////////////////// // Swizzle constructors GLM_FUNC_QUALIFIER tvec3::tvec3 ( tref3 const & r ) : x(r.x), y(r.y), z(r.z) {} ////////////////////////////////////// // Convertion scalar constructors template GLM_FUNC_QUALIFIER tvec3::tvec3 ( U const & x ) : x(thalf(x)), y(thalf(x)), z(thalf(x)) {} template GLM_FUNC_QUALIFIER tvec3::tvec3 ( A const & x, B const & y, C const & z ) : x(thalf(x)), y(thalf(y)), z(thalf(z)) {} ////////////////////////////////////// // Convertion vector constructors template GLM_FUNC_QUALIFIER tvec3::tvec3 ( tvec2 const & v, B const & s ) : x(thalf(v.x)), y(thalf(v.y)), z(thalf(s)) {} template GLM_FUNC_QUALIFIER tvec3::tvec3 ( A const & s, tvec2 const & v ) : x(thalf(s)), y(thalf(v.x)), z(thalf(v.y)) {} template GLM_FUNC_QUALIFIER tvec3::tvec3 ( tvec3 const & v ) : x(thalf(v.x)), y(thalf(v.y)), z(thalf(v.z)) {} template GLM_FUNC_QUALIFIER tvec3::tvec3 ( tvec4 const & v ) : x(thalf(v.x)), y(thalf(v.y)), z(thalf(v.z)) {} ////////////////////////////////////// // Unary arithmetic operators GLM_FUNC_QUALIFIER tvec3 & tvec3::operator= ( tvec3 const & v ) { this->x = v.x; this->y = v.y; this->z = v.z; return *this; } GLM_FUNC_QUALIFIER tvec3 & tvec3::operator+= ( thalf const & s ) { this->x += s; this->y += s; this->z += s; return *this; } GLM_FUNC_QUALIFIER tvec3 & tvec3::operator+= ( tvec3 const & v ) { this->x += v.x; this->y += v.y; this->z += v.z; return *this; } GLM_FUNC_QUALIFIER tvec3 & tvec3::operator-= ( thalf const & s ) { this->x -= s; this->y -= s; this->z -= s; return *this; } GLM_FUNC_QUALIFIER tvec3 & tvec3::operator-= ( tvec3 const & v ) { this->x -= v.x; this->y -= v.y; this->z -= v.z; return *this; } GLM_FUNC_QUALIFIER tvec3 & tvec3::operator*= ( thalf const & s ) { this->x *= s; this->y *= s; this->z *= s; return *this; } GLM_FUNC_QUALIFIER tvec3 & tvec3::operator*= ( tvec3 const & v ) { this->x *= v.x; this->y *= v.y; this->z *= v.z; return *this; } GLM_FUNC_QUALIFIER tvec3 & tvec3::operator/= ( thalf const & s ) { this->x /= s; this->y /= s; this->z /= s; return *this; } GLM_FUNC_QUALIFIER tvec3 & tvec3::operator/= ( tvec3 const & v ) { this->x /= v.x; this->y /= v.y; this->z /= v.z; return *this; } GLM_FUNC_QUALIFIER tvec3 & tvec3::operator++() { ++this->x; ++this->y; ++this->z; return *this; } GLM_FUNC_QUALIFIER tvec3 & tvec3::operator--() { --this->x; --this->y; --this->z; return *this; } ////////////////////////////////////// // Swizzle operators GLM_FUNC_QUALIFIER thalf tvec3::swizzle(comp x) const { return (*this)[x]; } GLM_FUNC_QUALIFIER tvec2 tvec3::swizzle(comp x, comp y) const { return tvec2( (*this)[x], (*this)[y]); } GLM_FUNC_QUALIFIER tvec3 tvec3::swizzle(comp x, comp y, comp z) const { return tvec3( (*this)[x], (*this)[y], (*this)[z]); } GLM_FUNC_QUALIFIER tvec4 tvec3::swizzle(comp x, comp y, comp z, comp w) const { return tvec4( (*this)[x], (*this)[y], (*this)[z], (*this)[w]); } GLM_FUNC_QUALIFIER tref3 tvec3::swizzle(comp x, comp y, comp z) { return tref3( (*this)[x], (*this)[y], (*this)[z]); } ////////////////////////////////////// // hvec4 GLM_FUNC_QUALIFIER tvec4::size_type tvec4::value_size() { return 4; } ////////////////////////////////////// // Accesses GLM_FUNC_QUALIFIER thalf & tvec4::operator[] ( tvec4::size_type i ) { assert(/*i >= tvec4::size_type(0) && */i < tvec4::value_size()); return (&x)[i]; } GLM_FUNC_QUALIFIER thalf const & tvec4::operator[] ( tvec4::size_type i ) const { assert(/*i >= tvec4::size_type(0) && */i < tvec4::value_size()); return (&x)[i]; } ////////////////////////////////////// // Implicit basic constructors GLM_FUNC_QUALIFIER tvec4::tvec4() : x(thalf(0)), y(thalf(0)), z(thalf(0)), w(thalf(0)) {} GLM_FUNC_QUALIFIER tvec4::tvec4 ( tvec4 const & v ) : x(v.x), y(v.y), z(v.z), w(v.w) {} ////////////////////////////////////// // Explicit basic constructors GLM_FUNC_QUALIFIER tvec4::tvec4 ( thalf const & s ) : x(s), y(s), z(s), w(s) {} GLM_FUNC_QUALIFIER tvec4::tvec4 ( thalf const & s1, thalf const & s2, thalf const & s3, thalf const & s4 ) : x(s1), y(s2), z(s3), w(s4) {} ////////////////////////////////////// // Swizzle constructors GLM_FUNC_QUALIFIER tvec4::tvec4 ( tref4 const & r ) : x(r.x), y(r.y), z(r.z), w(r.w) {} ////////////////////////////////////// // Convertion scalar constructors template GLM_FUNC_QUALIFIER tvec4::tvec4 ( U const & x ) : x(thalf(x)), y(thalf(x)), z(thalf(x)), w(thalf(x)) {} template GLM_FUNC_QUALIFIER tvec4::tvec4 ( A const & x, B const & y, C const & z, D const & w ) : x(thalf(x)), y(thalf(y)), z(thalf(z)), w(thalf(w)) {} ////////////////////////////////////// // Convertion vector constructors template GLM_FUNC_QUALIFIER tvec4::tvec4 ( tvec2 const & v, B const & s1, C const & s2 ) : x(thalf(v.x)), y(thalf(v.y)), z(thalf(s1)), w(thalf(s2)) {} template GLM_FUNC_QUALIFIER tvec4::tvec4 ( A const & s1, tvec2 const & v, C const & s2 ) : x(thalf(s1)), y(thalf(v.x)), z(thalf(v.y)), w(thalf(s2)) {} template GLM_FUNC_QUALIFIER tvec4::tvec4 ( A const & s1, B const & s2, tvec2 const & v ) : x(thalf(s1)), y(thalf(s2)), z(thalf(v.x)), w(thalf(v.y)) {} template GLM_FUNC_QUALIFIER tvec4::tvec4 ( tvec3 const & v, B const & s ) : x(thalf(v.x)), y(thalf(v.y)), z(thalf(v.z)), w(thalf(s)) {} template GLM_FUNC_QUALIFIER tvec4::tvec4 ( A const & s, tvec3 const & v ) : x(thalf(s)), y(thalf(v.x)), z(thalf(v.y)), w(thalf(v.z)) {} template GLM_FUNC_QUALIFIER tvec4::tvec4 ( tvec2 const & v1, tvec2 const & v2 ) : x(thalf(v1.x)), y(thalf(v1.y)), z(thalf(v2.x)), w(thalf(v2.y)) {} template GLM_FUNC_QUALIFIER tvec4::tvec4 ( tvec4 const & v ) : x(thalf(v.x)), y(thalf(v.y)), z(thalf(v.z)), w(thalf(v.w)) {} ////////////////////////////////////// // Unary arithmetic operators GLM_FUNC_QUALIFIER tvec4& tvec4::operator= ( tvec4 const & v ) { this->x = v.x; this->y = v.y; this->z = v.z; this->w = v.w; return *this; } GLM_FUNC_QUALIFIER tvec4& tvec4::operator+= ( thalf const & s ) { this->x += s; this->y += s; this->z += s; this->w += s; return *this; } GLM_FUNC_QUALIFIER tvec4& tvec4::operator+= ( tvec4 const & v ) { this->x += v.x; this->y += v.y; this->z += v.z; this->w += v.w; return *this; } GLM_FUNC_QUALIFIER tvec4& tvec4::operator-= ( thalf const & s ) { this->x -= s; this->y -= s; this->z -= s; this->w -= s; return *this; } GLM_FUNC_QUALIFIER tvec4& tvec4::operator-= ( tvec4 const & v ) { this->x -= v.x; this->y -= v.y; this->z -= v.z; this->w -= v.w; return *this; } GLM_FUNC_QUALIFIER tvec4& tvec4::operator*= ( thalf const & s ) { this->x *= s; this->y *= s; this->z *= s; this->w *= s; return *this; } GLM_FUNC_QUALIFIER tvec4& tvec4::operator*= ( tvec4 const & v ) { this->x *= v.x; this->y *= v.y; this->z *= v.z; this->w *= v.w; return *this; } GLM_FUNC_QUALIFIER tvec4& tvec4::operator/= ( thalf const & s ) { this->x /= s; this->y /= s; this->z /= s; this->w /= s; return *this; } GLM_FUNC_QUALIFIER tvec4& tvec4::operator/= ( tvec4 const & v ) { this->x /= v.x; this->y /= v.y; this->z /= v.z; this->w /= v.w; return *this; } GLM_FUNC_QUALIFIER tvec4& tvec4::operator++() { ++this->x; ++this->y; ++this->z; ++this->w; return *this; } GLM_FUNC_QUALIFIER tvec4& tvec4::operator--() { --this->x; --this->y; --this->z; --this->w; return *this; } ////////////////////////////////////// // Swizzle operators GLM_FUNC_QUALIFIER thalf tvec4::swizzle(comp x) const { return (*this)[x]; } GLM_FUNC_QUALIFIER tvec2 tvec4::swizzle(comp x, comp y) const { return tvec2( (*this)[x], (*this)[y]); } GLM_FUNC_QUALIFIER tvec3 tvec4::swizzle(comp x, comp y, comp z) const { return tvec3( (*this)[x], (*this)[y], (*this)[z]); } GLM_FUNC_QUALIFIER tvec4 tvec4::swizzle(comp x, comp y, comp z, comp w) const { return tvec4( (*this)[x], (*this)[y], (*this)[z], (*this)[w]); } GLM_FUNC_QUALIFIER tref4 tvec4::swizzle(comp x, comp y, comp z, comp w) { return tref4( (*this)[x], (*this)[y], (*this)[z], (*this)[w]); } #endif//_MSC_EXTENSIONS }//namespace detail }//namespace glm