Added identity experiment #765

This commit is contained in:
Groove 2018-07-25 23:27:57 +02:00
parent 8f0b7c1373
commit afde3b4645

View File

@ -1,6 +1,6 @@
#include <glm/gtc/quaternion.hpp> #include <glm/gtc/quaternion.hpp>
#include <glm/gtc/epsilon.hpp> #include <glm/ext/vector_relational.hpp>
#include <glm/vector_relational.hpp> #include <glm/glm.hpp>
#include <vector> #include <vector>
int test_quat_angle() int test_quat_angle()
@ -319,39 +319,57 @@ static int test_constexpr()
using namespace glm; using namespace glm;
/* enum genTypeEnum
template<template<length_t C, length_t R, typename T, qualifier Q> class matType>
struct init_mat
{ {
static matType<C, R, T, Q> identity() GENTYPE_VEC,
{ GENTYPE_MAT,
return matType<C, R, T, Q>(1, 0, 0, 0); GENTYPE_QUAT
}
}; };
*/
template<typename T, qualifier Q> template <typename genType>
struct init_quat struct genTypeTrait
{};
template <typename T>
struct genTypeTrait<tquat<T> >
{ {
static tquat<T, Q> identity() static const genTypeEnum GENTYPE = GENTYPE_QUAT;
};
template <length_t C, length_t R, typename T>
struct genTypeTrait<mat<C, R, T> >
{
static const genTypeEnum GENTYPE = GENTYPE_MAT;
};
template<typename genType, genTypeEnum type>
struct init_gentype
{
};
template<typename genType>
struct init_gentype<genType, GENTYPE_QUAT>
{
static genType identity()
{ {
return tquat<T, Q>(1, 0, 0, 0); return genType(1, 0, 0, 0);
} }
}; };
template<typename genType> template<typename genType>
struct init struct init_gentype<genType, GENTYPE_MAT>
{ {
static genType identity() static genType identity()
{ {
return init_quat<typename genType::value_type, highp>::identity(); return genType(1);
} }
}; };
template<typename genType> template<typename genType>
inline genType identity() inline genType identity()
{ {
return init<genType>::identity(); //return init_gentype<genType, genType::GENTYPE>::identity();
return init_gentype<genType, genTypeTrait<genType>::GENTYPE>::identity();
} }
int test_identity() int test_identity()
@ -363,6 +381,14 @@ int test_identity()
Error += glm::all(glm::equal(Q, glm::quat(1, 0, 0, 0), 0.0001f)) ? 0 : 1; Error += glm::all(glm::equal(Q, glm::quat(1, 0, 0, 0), 0.0001f)) ? 0 : 1;
Error += glm::any(glm::notEqual(Q, glm::quat(1, 0, 0, 0), 0.0001f)) ? 1 : 0; Error += glm::any(glm::notEqual(Q, glm::quat(1, 0, 0, 0), 0.0001f)) ? 1 : 0;
glm::mat4 const M = identity<glm::mat4x4>();
glm::mat4 const N(1.0f);
Error += glm::all(glm::equal(M[0], N[0], 0.0001f)) ? 0 : 1;
Error += glm::all(glm::equal(M[1], N[1], 0.0001f)) ? 0 : 1;
Error += glm::all(glm::equal(M[2], N[2], 0.0001f)) ? 0 : 1;
Error += glm::all(glm::equal(M[3], N[3], 0.0001f)) ? 0 : 1;
return Error; return Error;
} }