Fixed GLM_FORCE_SIZE_FUNC support overlook #245. Added uninitiallized constructor to quaternion. Fixed lack of conscistency or quaternion constructors with other types. Various uninitilized constructor optimizations
This commit is contained in:
@@ -36,10 +36,10 @@ namespace glm
|
||||
typename genType::row_type const & x
|
||||
)
|
||||
{
|
||||
assert(index >= 0 && index < m[0].length());
|
||||
assert(index >= 0 && static_cast<detail::component_count_t>(index) < detail::component_count(m[0]));
|
||||
|
||||
genType Result = m;
|
||||
for(length_t i = 0; i < m.length(); ++i)
|
||||
for(detail::component_count_t i = 0; i < detail::component_count(m); ++i)
|
||||
Result[i][index] = x[i];
|
||||
return Result;
|
||||
}
|
||||
@@ -51,10 +51,10 @@ namespace glm
|
||||
length_t const & index
|
||||
)
|
||||
{
|
||||
assert(index >= 0 && index < m[0].length());
|
||||
assert(index >= 0 && static_cast<detail::component_count_t>(index) < detail::component_count(m[0]));
|
||||
|
||||
typename genType::row_type Result;
|
||||
for(length_t i = 0; i < m.length(); ++i)
|
||||
for(detail::component_count_t i = 0; i < detail::component_count(m); ++i)
|
||||
Result[i] = m[i][index];
|
||||
return Result;
|
||||
}
|
||||
@@ -67,7 +67,7 @@ namespace glm
|
||||
typename genType::col_type const & x
|
||||
)
|
||||
{
|
||||
assert(index >= 0 && index < m.length());
|
||||
assert(index >= 0 && static_cast<detail::component_count_t>(index) < detail::component_count(m));
|
||||
|
||||
genType Result = m;
|
||||
Result[index] = x;
|
||||
@@ -81,7 +81,7 @@ namespace glm
|
||||
length_t const & index
|
||||
)
|
||||
{
|
||||
assert(index >= 0 && index < m.length());
|
||||
assert(index >= 0 && static_cast<detail::component_count_t>(index) < detail::component_count(m));
|
||||
|
||||
return m[index];
|
||||
}
|
||||
|
||||
@@ -58,7 +58,7 @@ namespace glm
|
||||
template <typename T, precision P>
|
||||
struct tquat
|
||||
{
|
||||
enum ctor{null};
|
||||
enum ctor{_null};
|
||||
|
||||
typedef T value_type;
|
||||
typedef tvec4<bool, P> bool_type;
|
||||
@@ -74,19 +74,20 @@ namespace glm
|
||||
GLM_FUNC_DECL GLM_CONSTEXPR length_t length() const;
|
||||
#endif//GLM_FORCE_SIZE_FUNC
|
||||
|
||||
// Constructors
|
||||
//////////////////////////////////////
|
||||
// Implicit basic constructors
|
||||
|
||||
GLM_FUNC_DECL tquat();
|
||||
template <typename U, precision Q>
|
||||
GLM_FUNC_DECL explicit tquat(
|
||||
tquat<U, Q> const & q);
|
||||
GLM_FUNC_DECL tquat(
|
||||
T const & s,
|
||||
tvec3<T, P> const & v);
|
||||
GLM_FUNC_DECL tquat(
|
||||
T const & w,
|
||||
T const & x,
|
||||
T const & y,
|
||||
T const & z);
|
||||
GLM_FUNC_DECL tquat(tquat<T, P> const & q);
|
||||
template <precision Q>
|
||||
GLM_FUNC_DECL tquat(tquat<T, Q> const & q);
|
||||
|
||||
//////////////////////////////////////
|
||||
// Explicit basic constructors
|
||||
|
||||
GLM_FUNC_DECL explicit tquat(ctor);
|
||||
GLM_FUNC_DECL explicit tquat(T const & s, tvec3<T, P> const & v);
|
||||
GLM_FUNC_DECL tquat(T const & w, T const & x, T const & y, T const & z);
|
||||
|
||||
// Convertions
|
||||
|
||||
|
||||
@@ -68,10 +68,9 @@ namespace detail
|
||||
{}
|
||||
|
||||
template <typename T, precision P>
|
||||
template <typename U, precision Q>
|
||||
GLM_FUNC_QUALIFIER tquat<T, P>::tquat
|
||||
(
|
||||
tquat<U, Q> const & q
|
||||
tquat<T, P> const & q
|
||||
) :
|
||||
x(q.x),
|
||||
y(q.y),
|
||||
@@ -79,6 +78,22 @@ namespace detail
|
||||
w(q.w)
|
||||
{}
|
||||
|
||||
template <typename T, precision P>
|
||||
template <precision Q>
|
||||
GLM_FUNC_QUALIFIER tquat<T, P>::tquat
|
||||
(
|
||||
tquat<T, Q> const & q
|
||||
) :
|
||||
x(q.x),
|
||||
y(q.y),
|
||||
z(q.z),
|
||||
w(q.w)
|
||||
{}
|
||||
|
||||
template <typename T, precision P>
|
||||
GLM_FUNC_QUALIFIER tquat<T, P>::tquat(ctor)
|
||||
{}
|
||||
|
||||
template <typename T, precision P>
|
||||
GLM_FUNC_QUALIFIER tquat<T, P>::tquat
|
||||
(
|
||||
@@ -731,7 +746,7 @@ namespace detail
|
||||
T biggestVal = sqrt(fourBiggestSquaredMinus1 + T(1)) * T(0.5);
|
||||
T mult = static_cast<T>(0.25) / biggestVal;
|
||||
|
||||
tquat<T, P> Result;
|
||||
tquat<T, P> Result(tquat<T, P>::_null);
|
||||
switch(biggestIndex)
|
||||
{
|
||||
case 0:
|
||||
@@ -804,16 +819,16 @@ namespace detail
|
||||
tvec3<T, P> const & v
|
||||
)
|
||||
{
|
||||
tquat<T, P> result;
|
||||
tquat<T, P> Result(tquat<T, P>::_null);
|
||||
|
||||
T const a(angle);
|
||||
T const s = glm::sin(a * static_cast<T>(0.5));
|
||||
|
||||
result.w = glm::cos(a * static_cast<T>(0.5));
|
||||
result.x = v.x * s;
|
||||
result.y = v.y * s;
|
||||
result.z = v.z * s;
|
||||
return result;
|
||||
Result.w = glm::cos(a * static_cast<T>(0.5));
|
||||
Result.x = v.x * s;
|
||||
Result.y = v.y * s;
|
||||
Result.z = v.z * s;
|
||||
return Result;
|
||||
}
|
||||
|
||||
template <typename T, precision P>
|
||||
@@ -823,8 +838,8 @@ namespace detail
|
||||
tquat<T, P> const & y
|
||||
)
|
||||
{
|
||||
tvec4<bool, P> Result;
|
||||
for(length_t i = 0; i < x.length(); ++i)
|
||||
tvec4<bool, P> Result(tvec4<bool, P>::_null);
|
||||
for(detail::component_count_t i = 0; i < detail::component_count(x); ++i)
|
||||
Result[i] = x[i] < y[i];
|
||||
return Result;
|
||||
}
|
||||
@@ -836,8 +851,8 @@ namespace detail
|
||||
tquat<T, P> const & y
|
||||
)
|
||||
{
|
||||
tvec4<bool, P> Result;
|
||||
for(length_t i = 0; i < x.length(); ++i)
|
||||
tvec4<bool, P> Result(tvec4<bool, P>::_null);
|
||||
for(detail::component_count_t i = 0; i < detail::component_count(x); ++i)
|
||||
Result[i] = x[i] <= y[i];
|
||||
return Result;
|
||||
}
|
||||
@@ -849,8 +864,8 @@ namespace detail
|
||||
tquat<T, P> const & y
|
||||
)
|
||||
{
|
||||
tvec4<bool, P> Result;
|
||||
for(length_t i = 0; i < x.length(); ++i)
|
||||
tvec4<bool, P> Result(tvec4<bool, P>::_null);
|
||||
for(detail::component_count_t i = 0; i < detail::component_count(x); ++i)
|
||||
Result[i] = x[i] > y[i];
|
||||
return Result;
|
||||
}
|
||||
@@ -862,8 +877,8 @@ namespace detail
|
||||
tquat<T, P> const & y
|
||||
)
|
||||
{
|
||||
tvec4<bool, P> Result;
|
||||
for(length_t i = 0; i < x.length(); ++i)
|
||||
tvec4<bool, P> Result(tvec4<bool, P>::_null);
|
||||
for(detail::component_count_t i = 0; i < detail::component_count(x); ++i)
|
||||
Result[i] = x[i] >= y[i];
|
||||
return Result;
|
||||
}
|
||||
@@ -875,8 +890,8 @@ namespace detail
|
||||
tquat<T, P> const & y
|
||||
)
|
||||
{
|
||||
tvec4<bool, P> Result;
|
||||
for(length_t i = 0; i < x.length(); ++i)
|
||||
tvec4<bool, P> Result(tvec4<bool, P>::_null);
|
||||
for(detail::component_count_t i = 0; i < detail::component_count(x); ++i)
|
||||
Result[i] = x[i] == y[i];
|
||||
return Result;
|
||||
}
|
||||
@@ -888,8 +903,8 @@ namespace detail
|
||||
tquat<T, P> const & y
|
||||
)
|
||||
{
|
||||
tvec4<bool, P> Result;
|
||||
for(length_t i = 0; i < x.length(); ++i)
|
||||
tvec4<bool, P> Result(tvec4<bool, P>::_null);
|
||||
for(detail::component_count_t i = 0; i < detail::component_count(x); ++i)
|
||||
Result[i] = x[i] != y[i];
|
||||
return Result;
|
||||
}
|
||||
|
||||
@@ -227,8 +227,8 @@ namespace glm
|
||||
template<typename T, precision P, template<typename, precision> class vecType>
|
||||
GLM_FUNC_QUALIFIER vecType<T, P> next_float(vecType<T, P> const & x)
|
||||
{
|
||||
vecType<T, P> Result;
|
||||
for(length_t i = 0; i < Result.length(); ++i)
|
||||
vecType<T, P> Result(vecType<T, P>::_null);
|
||||
for(detail::component_count_t i = 0; i < detail::component_count(Result); ++i)
|
||||
Result[i] = next_float(x[i]);
|
||||
return Result;
|
||||
}
|
||||
@@ -262,8 +262,8 @@ namespace glm
|
||||
template<typename T, precision P, template<typename, precision> class vecType>
|
||||
GLM_FUNC_QUALIFIER vecType<T, P> prev_float(vecType<T, P> const & x)
|
||||
{
|
||||
vecType<T, P> Result;
|
||||
for(length_t i = 0; i < Result.length(); ++i)
|
||||
vecType<T, P> Result(vecType<T, P>::_null);
|
||||
for(detail::component_count_t i = 0; i < detail::component_count(Result); ++i)
|
||||
Result[i] = prev_float(x[i]);
|
||||
return Result;
|
||||
}
|
||||
@@ -280,8 +280,8 @@ namespace glm
|
||||
template<typename T, precision P, template<typename, precision> class vecType>
|
||||
GLM_FUNC_QUALIFIER vecType<T, P> next_float(vecType<T, P> const & x, vecType<uint, P> const & ulps)
|
||||
{
|
||||
vecType<T, P> Result;
|
||||
for(length_t i = 0; i < Result.length(); ++i)
|
||||
vecType<T, P> Result(vecType<T, P>::_null);
|
||||
for(detail::component_count_t i = 0; i < detail::component_count(Result); ++i)
|
||||
Result[i] = next_float(x[i], ulps[i]);
|
||||
return Result;
|
||||
}
|
||||
@@ -298,8 +298,8 @@ namespace glm
|
||||
template<typename T, precision P, template<typename, precision> class vecType>
|
||||
GLM_FUNC_QUALIFIER vecType<T, P> prev_float(vecType<T, P> const & x, vecType<uint, P> const & ulps)
|
||||
{
|
||||
vecType<T, P> Result;
|
||||
for(length_t i = 0; i < Result.length(); ++i)
|
||||
vecType<T, P> Result(vecType<T, P>::_null);
|
||||
for(detail::component_count_t i = 0; i < detail::component_count(Result); ++i)
|
||||
Result[i] = prev_float(x[i], ulps[i]);
|
||||
return Result;
|
||||
}
|
||||
@@ -338,8 +338,8 @@ namespace glm
|
||||
template<typename T, precision P, template<typename, precision> class vecType>
|
||||
GLM_FUNC_QUALIFIER vecType<uint, P> float_distance(vecType<T, P> const & x, vecType<T, P> const & y)
|
||||
{
|
||||
vecType<uint, P> Result;
|
||||
for(length_t i = 0; i < Result.length(); ++i)
|
||||
vecType<uint, P> Result(vecType<T, P>::_null);
|
||||
for(detail::component_count_t i = 0; i < detail::component_count(Result); ++i)
|
||||
Result[i] = float_distance(x[i], y[i]);
|
||||
return Result;
|
||||
}
|
||||
|
||||
162
glm/gtc/vec1.hpp
Normal file
162
glm/gtc/vec1.hpp
Normal file
@@ -0,0 +1,162 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
/// OpenGL Mathematics (glm.g-truc.net)
|
||||
///
|
||||
/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)
|
||||
/// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
/// of this software and associated documentation files (the "Software"), to deal
|
||||
/// in the Software without restriction, including without limitation the rights
|
||||
/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
/// copies of the Software, and to permit persons to whom the Software is
|
||||
/// furnished to do so, subject to the following conditions:
|
||||
///
|
||||
/// The above copyright notice and this permission notice shall be included in
|
||||
/// all copies or substantial portions of the Software.
|
||||
///
|
||||
/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
/// THE SOFTWARE.
|
||||
///
|
||||
/// @ref gtx_vec1
|
||||
/// @file glm/gtx/vec1.hpp
|
||||
/// @date 2010-02-08 / 2011-06-07
|
||||
/// @author Christophe Riccio
|
||||
///
|
||||
/// @see core (dependence)
|
||||
///
|
||||
/// @defgroup gtx_vec1 GLM_GTX_vec1
|
||||
/// @ingroup gtx
|
||||
///
|
||||
/// @brief Add vec1, ivec1, uvec1 and bvec1 types.
|
||||
/// <glm/gtx/vec1.hpp> need to be included to use these functionalities.
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#pragma once
|
||||
|
||||
// Dependency:
|
||||
#include "../glm.hpp"
|
||||
#include "../detail/type_vec1.hpp"
|
||||
|
||||
#if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
|
||||
# pragma message("GLM: GLM_GTX_vec1 extension included")
|
||||
#endif
|
||||
|
||||
namespace glm
|
||||
{
|
||||
//! 1 component vector of high precision floating-point numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
/// @see gtx_vec1 extension.
|
||||
typedef highp_vec1_t highp_vec1;
|
||||
|
||||
//! 1 component vector of medium precision floating-point numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
/// @see gtx_vec1 extension.
|
||||
typedef mediump_vec1_t mediump_vec1;
|
||||
|
||||
//! 1 component vector of low precision floating-point numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
/// @see gtx_vec1 extension.
|
||||
typedef lowp_vec1_t lowp_vec1;
|
||||
|
||||
//! 1 component vector of high precision signed integer numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
/// @see gtx_vec1 extension.
|
||||
typedef highp_ivec1_t highp_ivec1;
|
||||
|
||||
//! 1 component vector of medium precision signed integer numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
/// @see gtx_vec1 extension.
|
||||
typedef mediump_ivec1_t mediump_ivec1;
|
||||
|
||||
//! 1 component vector of low precision signed integer numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
/// @see gtx_vec1 extension.
|
||||
typedef lowp_ivec1_t lowp_ivec1;
|
||||
|
||||
//! 1 component vector of high precision unsigned integer numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
/// @see gtx_vec1 extension.
|
||||
typedef highp_uvec1_t highp_uvec1;
|
||||
|
||||
//! 1 component vector of medium precision unsigned integer numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
/// @see gtx_vec1 extension.
|
||||
typedef mediump_uvec1_t mediump_uvec1;
|
||||
|
||||
//! 1 component vector of low precision unsigned integer numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
/// @see gtx_vec1 extension.
|
||||
typedef lowp_uvec1_t lowp_uvec1;
|
||||
|
||||
//! 1 component vector of high precision boolean.
|
||||
//! There is no guarantee on the actual precision.
|
||||
/// @see gtx_vec1 extension.
|
||||
typedef highp_bvec1_t highp_bvec1;
|
||||
|
||||
//! 1 component vector of medium precision boolean.
|
||||
//! There is no guarantee on the actual precision.
|
||||
/// @see gtx_vec1 extension.
|
||||
typedef mediump_bvec1_t mediump_bvec1;
|
||||
|
||||
//! 1 component vector of low precision boolean.
|
||||
//! There is no guarantee on the actual precision.
|
||||
/// @see gtx_vec1 extension.
|
||||
typedef lowp_bvec1_t lowp_bvec1;
|
||||
|
||||
//////////////////////////
|
||||
// vec1 definition
|
||||
|
||||
#if(defined(GLM_PRECISION_HIGHP_BOOL))
|
||||
typedef highp_bvec1 bvec1;
|
||||
#elif(defined(GLM_PRECISION_MEDIUMP_BOOL))
|
||||
typedef mediump_bvec1 bvec1;
|
||||
#elif(defined(GLM_PRECISION_LOWP_BOOL))
|
||||
typedef lowp_bvec1 bvec1;
|
||||
#else
|
||||
/// 1 component vector of boolean.
|
||||
/// @see gtx_vec1 extension.
|
||||
typedef highp_bvec1 bvec1;
|
||||
#endif//GLM_PRECISION
|
||||
|
||||
#if(defined(GLM_PRECISION_HIGHP_FLOAT))
|
||||
typedef highp_vec1 vec1;
|
||||
#elif(defined(GLM_PRECISION_MEDIUMP_FLOAT))
|
||||
typedef mediump_vec1 vec1;
|
||||
#elif(defined(GLM_PRECISION_LOWP_FLOAT))
|
||||
typedef lowp_vec1 vec1;
|
||||
#else
|
||||
/// 1 component vector of floating-point numbers.
|
||||
/// @see gtx_vec1 extension.
|
||||
typedef highp_vec1 vec1;
|
||||
#endif//GLM_PRECISION
|
||||
|
||||
#if(defined(GLM_PRECISION_HIGHP_INT))
|
||||
typedef highp_ivec1 ivec1;
|
||||
#elif(defined(GLM_PRECISION_MEDIUMP_INT))
|
||||
typedef mediump_ivec1 ivec1;
|
||||
#elif(defined(GLM_PRECISION_LOWP_INT))
|
||||
typedef lowp_ivec1 ivec1;
|
||||
#else
|
||||
/// 1 component vector of signed integer numbers.
|
||||
/// @see gtx_vec1 extension.
|
||||
typedef highp_ivec1 ivec1;
|
||||
#endif//GLM_PRECISION
|
||||
|
||||
#if(defined(GLM_PRECISION_HIGHP_UINT))
|
||||
typedef highp_uvec1 uvec1;
|
||||
#elif(defined(GLM_PRECISION_MEDIUMP_UINT))
|
||||
typedef mediump_uvec1 uvec1;
|
||||
#elif(defined(GLM_PRECISION_LOWP_UINT))
|
||||
typedef lowp_uvec1 uvec1;
|
||||
#else
|
||||
/// 1 component vector of unsigned integer numbers.
|
||||
/// @see gtx_vec1 extension.
|
||||
typedef highp_uvec1 uvec1;
|
||||
#endif//GLM_PRECISION
|
||||
|
||||
}// namespace glm
|
||||
|
||||
#include "vec1.inl"
|
||||
27
glm/gtc/vec1.inl
Normal file
27
glm/gtc/vec1.inl
Normal file
@@ -0,0 +1,27 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
/// OpenGL Mathematics (glm.g-truc.net)
|
||||
///
|
||||
/// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)
|
||||
/// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
/// of this software and associated documentation files (the "Software"), to deal
|
||||
/// in the Software without restriction, including without limitation the rights
|
||||
/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
/// copies of the Software, and to permit persons to whom the Software is
|
||||
/// furnished to do so, subject to the following conditions:
|
||||
///
|
||||
/// The above copyright notice and this permission notice shall be included in
|
||||
/// all copies or substantial portions of the Software.
|
||||
///
|
||||
/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
/// THE SOFTWARE.
|
||||
///
|
||||
/// @ref gtx_vec1
|
||||
/// @file glm/gtx/vec1.inl
|
||||
/// @date 2013-03-16 / 2013-03-16
|
||||
/// @author Christophe Riccio
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
Reference in New Issue
Block a user