GLM 0.9.5.2
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
glmCreateTestGTC(gtx_associated_min_max)
|
||||
glmCreateTestGTC(gtx_bit)
|
||||
glmCreateTestGTC(gtx_closest_point)
|
||||
glmCreateTestGTC(gtx_color_space_YCoCg)
|
||||
glmCreateTestGTC(gtx_color_space)
|
||||
glmCreateTestGTC(gtx_compatibility)
|
||||
glmCreateTestGTC(gtx_component_wise)
|
||||
glmCreateTestGTC(gtx_euler_angle)
|
||||
glmCreateTestGTC(gtx_extend)
|
||||
glmCreateTestGTC(gtx_extented_min_max)
|
||||
glmCreateTestGTC(gtx_fast_exponential)
|
||||
glmCreateTestGTC(gtx_fast_square_root)
|
||||
glmCreateTestGTC(gtx_fast_trigonometry)
|
||||
glmCreateTestGTC(gtx_gradient_paint)
|
||||
glmCreateTestGTC(gtx_handed_coordinate_space)
|
||||
glmCreateTestGTC(gtx_inertia)
|
||||
glmCreateTestGTC(gtx_integer)
|
||||
glmCreateTestGTC(gtx_intersect)
|
||||
glmCreateTestGTC(gtx_io)
|
||||
glmCreateTestGTC(gtx_log_base)
|
||||
glmCreateTestGTC(gtx_matrix_cross_product)
|
||||
glmCreateTestGTC(gtx_matrix_interpolation)
|
||||
glmCreateTestGTC(gtx_matrix_major_storage)
|
||||
glmCreateTestGTC(gtx_matrix_operation)
|
||||
glmCreateTestGTC(gtx_matrix_query)
|
||||
glmCreateTestGTC(gtx_multiple)
|
||||
glmCreateTestGTC(gtx_norm)
|
||||
glmCreateTestGTC(gtx_normal)
|
||||
glmCreateTestGTC(gtx_normalize_dot)
|
||||
glmCreateTestGTC(gtx_number_precision)
|
||||
glmCreateTestGTC(gtx_orthonormalize)
|
||||
glmCreateTestGTC(gtx_optimum_pow)
|
||||
glmCreateTestGTC(gtx_perpendicular)
|
||||
glmCreateTestGTC(gtx_polar_coordinates)
|
||||
glmCreateTestGTC(gtx_projection)
|
||||
glmCreateTestGTC(gtx_quaternion)
|
||||
glmCreateTestGTC(gtx_dual_quaternion)
|
||||
glmCreateTestGTC(gtx_rotate_normalized_axis)
|
||||
glmCreateTestGTC(gtx_rotate_vector)
|
||||
glmCreateTestGTC(gtx_scalar_relational)
|
||||
glmCreateTestGTC(gtx_simd_vec4)
|
||||
glmCreateTestGTC(gtx_simd_mat4)
|
||||
glmCreateTestGTC(gtx_spline)
|
||||
glmCreateTestGTC(gtx_string_cast)
|
||||
glmCreateTestGTC(gtx_vector_angle)
|
||||
glmCreateTestGTC(gtx_vector_query)
|
||||
@@ -0,0 +1,19 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2013-10-25
|
||||
// Updated : 2013-10-25
|
||||
// Licence : This source is under MIT licence
|
||||
// File : test/gtx/associated_min_max.cpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define GLM_FORCE_RADIANS
|
||||
#include <glm/gtc/type_precision.hpp>
|
||||
#include <glm/gtx/associated_min_max.hpp>
|
||||
|
||||
int main()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
return Error;
|
||||
}
|
||||
@@ -0,0 +1,515 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2010-09-16
|
||||
// Updated : 2010-09-16
|
||||
// Licence : This source is under MIT licence
|
||||
// File : test/gtx/bit.cpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define GLM_FORCE_RADIANS
|
||||
#include <glm/gtx/bit.hpp>
|
||||
#include <glm/gtc/type_precision.hpp>
|
||||
|
||||
#if(GLM_ARCH != GLM_ARCH_PURE)
|
||||
# include <glm/detail/intrinsic_integer.hpp>
|
||||
#endif
|
||||
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
#include <ctime>
|
||||
|
||||
enum result
|
||||
{
|
||||
SUCCESS,
|
||||
FAIL,
|
||||
ASSERT,
|
||||
STATIC_ASSERT
|
||||
};
|
||||
|
||||
namespace bitRevert
|
||||
{
|
||||
template <typename genType>
|
||||
struct type
|
||||
{
|
||||
genType Value;
|
||||
genType Return;
|
||||
result Result;
|
||||
};
|
||||
|
||||
typedef type<glm::uint64> typeU64;
|
||||
|
||||
#if(((GLM_COMPILER & GLM_COMPILER_GCC) == GLM_COMPILER_GCC) && (GLM_COMPILER < GLM_COMPILER_GCC44))
|
||||
typeU64 const Data64[] =
|
||||
{
|
||||
{0xffffffffffffffffLLU, 0xffffffffffffffffLLU, SUCCESS},
|
||||
{0x0000000000000000LLU, 0x0000000000000000LLU, SUCCESS},
|
||||
{0xf000000000000000LLU, 0x000000000000000fLLU, SUCCESS},
|
||||
};
|
||||
#else
|
||||
typeU64 const Data64[] =
|
||||
{
|
||||
{0xffffffffffffffff, 0xffffffffffffffff, SUCCESS},
|
||||
{0x0000000000000000, 0x0000000000000000, SUCCESS},
|
||||
{0xf000000000000000, 0x000000000000000f, SUCCESS},
|
||||
};
|
||||
#endif
|
||||
|
||||
int test()
|
||||
{
|
||||
glm::uint32 count = sizeof(Data64) / sizeof(typeU64);
|
||||
|
||||
for(glm::uint32 i = 0; i < count; ++i)
|
||||
{
|
||||
glm::uint64 Return = glm::bitRevert(
|
||||
Data64[i].Value);
|
||||
|
||||
bool Compare = Data64[i].Return == Return;
|
||||
|
||||
if(Data64[i].Result == SUCCESS && Compare)
|
||||
continue;
|
||||
else if(Data64[i].Result == FAIL && !Compare)
|
||||
continue;
|
||||
|
||||
std::cout << "glm::extractfield test fail on test " << i << std::endl;
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
}//bitRevert
|
||||
|
||||
namespace bitfieldInterleave
|
||||
{
|
||||
inline glm::uint64 fastBitfieldInterleave(glm::uint32 x, glm::uint32 y)
|
||||
{
|
||||
glm::uint64 REG1;
|
||||
glm::uint64 REG2;
|
||||
|
||||
REG1 = x;
|
||||
REG1 = ((REG1 << 16) | REG1) & glm::uint64(0x0000FFFF0000FFFF);
|
||||
REG1 = ((REG1 << 8) | REG1) & glm::uint64(0x00FF00FF00FF00FF);
|
||||
REG1 = ((REG1 << 4) | REG1) & glm::uint64(0x0F0F0F0F0F0F0F0F);
|
||||
REG1 = ((REG1 << 2) | REG1) & glm::uint64(0x3333333333333333);
|
||||
REG1 = ((REG1 << 1) | REG1) & glm::uint64(0x5555555555555555);
|
||||
|
||||
REG2 = y;
|
||||
REG2 = ((REG2 << 16) | REG2) & glm::uint64(0x0000FFFF0000FFFF);
|
||||
REG2 = ((REG2 << 8) | REG2) & glm::uint64(0x00FF00FF00FF00FF);
|
||||
REG2 = ((REG2 << 4) | REG2) & glm::uint64(0x0F0F0F0F0F0F0F0F);
|
||||
REG2 = ((REG2 << 2) | REG2) & glm::uint64(0x3333333333333333);
|
||||
REG2 = ((REG2 << 1) | REG2) & glm::uint64(0x5555555555555555);
|
||||
|
||||
return REG1 | (REG2 << 1);
|
||||
}
|
||||
|
||||
inline glm::uint64 interleaveBitfieldInterleave(glm::uint32 x, glm::uint32 y)
|
||||
{
|
||||
glm::uint64 REG1;
|
||||
glm::uint64 REG2;
|
||||
|
||||
REG1 = x;
|
||||
REG2 = y;
|
||||
|
||||
REG1 = ((REG1 << 16) | REG1) & glm::uint64(0x0000FFFF0000FFFF);
|
||||
REG2 = ((REG2 << 16) | REG2) & glm::uint64(0x0000FFFF0000FFFF);
|
||||
|
||||
REG1 = ((REG1 << 8) | REG1) & glm::uint64(0x00FF00FF00FF00FF);
|
||||
REG2 = ((REG2 << 8) | REG2) & glm::uint64(0x00FF00FF00FF00FF);
|
||||
|
||||
REG1 = ((REG1 << 4) | REG1) & glm::uint64(0x0F0F0F0F0F0F0F0F);
|
||||
REG2 = ((REG2 << 4) | REG2) & glm::uint64(0x0F0F0F0F0F0F0F0F);
|
||||
|
||||
REG1 = ((REG1 << 2) | REG1) & glm::uint64(0x3333333333333333);
|
||||
REG2 = ((REG2 << 2) | REG2) & glm::uint64(0x3333333333333333);
|
||||
|
||||
REG1 = ((REG1 << 1) | REG1) & glm::uint64(0x5555555555555555);
|
||||
REG2 = ((REG2 << 1) | REG2) & glm::uint64(0x5555555555555555);
|
||||
|
||||
return REG1 | (REG2 << 1);
|
||||
}
|
||||
|
||||
inline glm::uint64 loopBitfieldInterleave(glm::uint32 x, glm::uint32 y)
|
||||
{
|
||||
static glm::uint64 const Mask[5] =
|
||||
{
|
||||
0x5555555555555555,
|
||||
0x3333333333333333,
|
||||
0x0F0F0F0F0F0F0F0F,
|
||||
0x00FF00FF00FF00FF,
|
||||
0x0000FFFF0000FFFF
|
||||
};
|
||||
|
||||
glm::uint64 REG1 = x;
|
||||
glm::uint64 REG2 = y;
|
||||
for(int i = 4; i >= 0; --i)
|
||||
{
|
||||
REG1 = ((REG1 << (1 << i)) | REG1) & Mask[i];
|
||||
REG2 = ((REG2 << (1 << i)) | REG2) & Mask[i];
|
||||
}
|
||||
|
||||
return REG1 | (REG2 << 1);
|
||||
}
|
||||
|
||||
#if(GLM_ARCH != GLM_ARCH_PURE)
|
||||
inline glm::uint64 sseBitfieldInterleave(glm::uint32 x, glm::uint32 y)
|
||||
{
|
||||
GLM_ALIGN(16) glm::uint32 const Array[4] = {x, 0, y, 0};
|
||||
|
||||
__m128i const Mask4 = _mm_set1_epi32(0x0000FFFF);
|
||||
__m128i const Mask3 = _mm_set1_epi32(0x00FF00FF);
|
||||
__m128i const Mask2 = _mm_set1_epi32(0x0F0F0F0F);
|
||||
__m128i const Mask1 = _mm_set1_epi32(0x33333333);
|
||||
__m128i const Mask0 = _mm_set1_epi32(0x55555555);
|
||||
|
||||
__m128i Reg1;
|
||||
__m128i Reg2;
|
||||
|
||||
// REG1 = x;
|
||||
// REG2 = y;
|
||||
Reg1 = _mm_load_si128((__m128i*)Array);
|
||||
|
||||
//REG1 = ((REG1 << 16) | REG1) & glm::uint64(0x0000FFFF0000FFFF);
|
||||
//REG2 = ((REG2 << 16) | REG2) & glm::uint64(0x0000FFFF0000FFFF);
|
||||
Reg2 = _mm_slli_si128(Reg1, 2);
|
||||
Reg1 = _mm_or_si128(Reg2, Reg1);
|
||||
Reg1 = _mm_and_si128(Reg1, Mask4);
|
||||
|
||||
//REG1 = ((REG1 << 8) | REG1) & glm::uint64(0x00FF00FF00FF00FF);
|
||||
//REG2 = ((REG2 << 8) | REG2) & glm::uint64(0x00FF00FF00FF00FF);
|
||||
Reg2 = _mm_slli_si128(Reg1, 1);
|
||||
Reg1 = _mm_or_si128(Reg2, Reg1);
|
||||
Reg1 = _mm_and_si128(Reg1, Mask3);
|
||||
|
||||
//REG1 = ((REG1 << 4) | REG1) & glm::uint64(0x0F0F0F0F0F0F0F0F);
|
||||
//REG2 = ((REG2 << 4) | REG2) & glm::uint64(0x0F0F0F0F0F0F0F0F);
|
||||
Reg2 = _mm_slli_epi32(Reg1, 4);
|
||||
Reg1 = _mm_or_si128(Reg2, Reg1);
|
||||
Reg1 = _mm_and_si128(Reg1, Mask2);
|
||||
|
||||
//REG1 = ((REG1 << 2) | REG1) & glm::uint64(0x3333333333333333);
|
||||
//REG2 = ((REG2 << 2) | REG2) & glm::uint64(0x3333333333333333);
|
||||
Reg2 = _mm_slli_epi32(Reg1, 2);
|
||||
Reg1 = _mm_or_si128(Reg2, Reg1);
|
||||
Reg1 = _mm_and_si128(Reg1, Mask1);
|
||||
|
||||
//REG1 = ((REG1 << 1) | REG1) & glm::uint64(0x5555555555555555);
|
||||
//REG2 = ((REG2 << 1) | REG2) & glm::uint64(0x5555555555555555);
|
||||
Reg2 = _mm_slli_epi32(Reg1, 1);
|
||||
Reg1 = _mm_or_si128(Reg2, Reg1);
|
||||
Reg1 = _mm_and_si128(Reg1, Mask0);
|
||||
|
||||
//return REG1 | (REG2 << 1);
|
||||
Reg2 = _mm_slli_epi32(Reg1, 1);
|
||||
Reg2 = _mm_srli_si128(Reg2, 8);
|
||||
Reg1 = _mm_or_si128(Reg1, Reg2);
|
||||
|
||||
GLM_ALIGN(16) glm::uint64 Result[2];
|
||||
_mm_store_si128((__m128i*)Result, Reg1);
|
||||
|
||||
return Result[0];
|
||||
}
|
||||
|
||||
inline glm::uint64 sseUnalignedBitfieldInterleave(glm::uint32 x, glm::uint32 y)
|
||||
{
|
||||
glm::uint32 const Array[4] = {x, 0, y, 0};
|
||||
|
||||
__m128i const Mask4 = _mm_set1_epi32(0x0000FFFF);
|
||||
__m128i const Mask3 = _mm_set1_epi32(0x00FF00FF);
|
||||
__m128i const Mask2 = _mm_set1_epi32(0x0F0F0F0F);
|
||||
__m128i const Mask1 = _mm_set1_epi32(0x33333333);
|
||||
__m128i const Mask0 = _mm_set1_epi32(0x55555555);
|
||||
|
||||
__m128i Reg1;
|
||||
__m128i Reg2;
|
||||
|
||||
// REG1 = x;
|
||||
// REG2 = y;
|
||||
Reg1 = _mm_loadu_si128((__m128i*)Array);
|
||||
|
||||
//REG1 = ((REG1 << 16) | REG1) & glm::uint64(0x0000FFFF0000FFFF);
|
||||
//REG2 = ((REG2 << 16) | REG2) & glm::uint64(0x0000FFFF0000FFFF);
|
||||
Reg2 = _mm_slli_si128(Reg1, 2);
|
||||
Reg1 = _mm_or_si128(Reg2, Reg1);
|
||||
Reg1 = _mm_and_si128(Reg1, Mask4);
|
||||
|
||||
//REG1 = ((REG1 << 8) | REG1) & glm::uint64(0x00FF00FF00FF00FF);
|
||||
//REG2 = ((REG2 << 8) | REG2) & glm::uint64(0x00FF00FF00FF00FF);
|
||||
Reg2 = _mm_slli_si128(Reg1, 1);
|
||||
Reg1 = _mm_or_si128(Reg2, Reg1);
|
||||
Reg1 = _mm_and_si128(Reg1, Mask3);
|
||||
|
||||
//REG1 = ((REG1 << 4) | REG1) & glm::uint64(0x0F0F0F0F0F0F0F0F);
|
||||
//REG2 = ((REG2 << 4) | REG2) & glm::uint64(0x0F0F0F0F0F0F0F0F);
|
||||
Reg2 = _mm_slli_epi32(Reg1, 4);
|
||||
Reg1 = _mm_or_si128(Reg2, Reg1);
|
||||
Reg1 = _mm_and_si128(Reg1, Mask2);
|
||||
|
||||
//REG1 = ((REG1 << 2) | REG1) & glm::uint64(0x3333333333333333);
|
||||
//REG2 = ((REG2 << 2) | REG2) & glm::uint64(0x3333333333333333);
|
||||
Reg2 = _mm_slli_epi32(Reg1, 2);
|
||||
Reg1 = _mm_or_si128(Reg2, Reg1);
|
||||
Reg1 = _mm_and_si128(Reg1, Mask1);
|
||||
|
||||
//REG1 = ((REG1 << 1) | REG1) & glm::uint64(0x5555555555555555);
|
||||
//REG2 = ((REG2 << 1) | REG2) & glm::uint64(0x5555555555555555);
|
||||
Reg2 = _mm_slli_epi32(Reg1, 1);
|
||||
Reg1 = _mm_or_si128(Reg2, Reg1);
|
||||
Reg1 = _mm_and_si128(Reg1, Mask0);
|
||||
|
||||
//return REG1 | (REG2 << 1);
|
||||
Reg2 = _mm_slli_epi32(Reg1, 1);
|
||||
Reg2 = _mm_srli_si128(Reg2, 8);
|
||||
Reg1 = _mm_or_si128(Reg1, Reg2);
|
||||
|
||||
glm::uint64 Result[2];
|
||||
_mm_storeu_si128((__m128i*)Result, Reg1);
|
||||
|
||||
return Result[0];
|
||||
}
|
||||
#endif//(GLM_ARCH != GLM_ARCH_PURE)
|
||||
|
||||
int test()
|
||||
{
|
||||
glm::uint32 x_max = 1 << 11;
|
||||
glm::uint32 y_max = 1 << 10;
|
||||
|
||||
// ALU
|
||||
std::vector<glm::uint64> Data(x_max * y_max);
|
||||
std::vector<glm::u32vec2> Param(x_max * y_max);
|
||||
for(glm::uint32 i = 0; i < Param.size(); ++i)
|
||||
Param[i] = glm::u32vec2(i % x_max, i / y_max);
|
||||
|
||||
{
|
||||
for(glm::uint32 y = 0; y < (1 << 10); ++y)
|
||||
for(glm::uint32 x = 0; x < (1 << 10); ++x)
|
||||
{
|
||||
glm::uint64 A = glm::bitfieldInterleave(x, y);
|
||||
glm::uint64 B = fastBitfieldInterleave(x, y);
|
||||
glm::uint64 C = loopBitfieldInterleave(x, y);
|
||||
glm::uint64 D = interleaveBitfieldInterleave(x, y);
|
||||
|
||||
assert(A == B);
|
||||
assert(A == C);
|
||||
assert(A == D);
|
||||
|
||||
# if(GLM_ARCH != GLM_ARCH_PURE)
|
||||
glm::uint64 E = sseBitfieldInterleave(x, y);
|
||||
glm::uint64 F = sseUnalignedBitfieldInterleave(x, y);
|
||||
assert(A == E);
|
||||
assert(A == F);
|
||||
|
||||
__m128i G = glm::detail::_mm_bit_interleave_si128(_mm_set_epi32(0, y, 0, x));
|
||||
glm::uint64 Result[2];
|
||||
_mm_storeu_si128((__m128i*)Result, G);
|
||||
assert(A == Result[0]);
|
||||
# endif//(GLM_ARCH != GLM_ARCH_PURE)
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
for(glm::uint8 y = 0; y < 127; ++y)
|
||||
for(glm::uint8 x = 0; x < 127; ++x)
|
||||
{
|
||||
glm::uint64 A(glm::bitfieldInterleave(glm::uint8(x), glm::uint8(y)));
|
||||
glm::uint64 B(glm::bitfieldInterleave(glm::uint16(x), glm::uint16(y)));
|
||||
glm::uint64 C(glm::bitfieldInterleave(glm::uint32(x), glm::uint32(y)));
|
||||
|
||||
glm::int64 D(glm::bitfieldInterleave(glm::int8(x), glm::int8(y)));
|
||||
glm::int64 E(glm::bitfieldInterleave(glm::int16(x), glm::int16(y)));
|
||||
glm::int64 F(glm::bitfieldInterleave(glm::int32(x), glm::int32(y)));
|
||||
|
||||
assert(D == E);
|
||||
assert(D == F);
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
std::clock_t LastTime = std::clock();
|
||||
|
||||
for(std::size_t i = 0; i < Data.size(); ++i)
|
||||
Data[i] = glm::bitfieldInterleave(Param[i].x, Param[i].y);
|
||||
|
||||
std::clock_t Time = std::clock() - LastTime;
|
||||
|
||||
std::cout << "glm::bitfieldInterleave Time " << Time << " clocks" << std::endl;
|
||||
}
|
||||
|
||||
{
|
||||
std::clock_t LastTime = std::clock();
|
||||
|
||||
for(std::size_t i = 0; i < Data.size(); ++i)
|
||||
Data[i] = fastBitfieldInterleave(Param[i].x, Param[i].y);
|
||||
|
||||
std::clock_t Time = std::clock() - LastTime;
|
||||
|
||||
std::cout << "fastBitfieldInterleave Time " << Time << " clocks" << std::endl;
|
||||
}
|
||||
|
||||
{
|
||||
std::clock_t LastTime = std::clock();
|
||||
|
||||
for(std::size_t i = 0; i < Data.size(); ++i)
|
||||
Data[i] = loopBitfieldInterleave(Param[i].x, Param[i].y);
|
||||
|
||||
std::clock_t Time = std::clock() - LastTime;
|
||||
|
||||
std::cout << "loopBitfieldInterleave Time " << Time << " clocks" << std::endl;
|
||||
}
|
||||
|
||||
{
|
||||
std::clock_t LastTime = std::clock();
|
||||
|
||||
for(std::size_t i = 0; i < Data.size(); ++i)
|
||||
Data[i] = interleaveBitfieldInterleave(Param[i].x, Param[i].y);
|
||||
|
||||
std::clock_t Time = std::clock() - LastTime;
|
||||
|
||||
std::cout << "interleaveBitfieldInterleave Time " << Time << " clocks" << std::endl;
|
||||
}
|
||||
|
||||
# if(GLM_ARCH != GLM_ARCH_PURE)
|
||||
{
|
||||
std::clock_t LastTime = std::clock();
|
||||
|
||||
for(std::size_t i = 0; i < Data.size(); ++i)
|
||||
Data[i] = sseBitfieldInterleave(Param[i].x, Param[i].y);
|
||||
|
||||
std::clock_t Time = std::clock() - LastTime;
|
||||
|
||||
std::cout << "sseBitfieldInterleave Time " << Time << " clocks" << std::endl;
|
||||
}
|
||||
|
||||
{
|
||||
std::clock_t LastTime = std::clock();
|
||||
|
||||
for(std::size_t i = 0; i < Data.size(); ++i)
|
||||
Data[i] = sseUnalignedBitfieldInterleave(Param[i].x, Param[i].y);
|
||||
|
||||
std::clock_t Time = std::clock() - LastTime;
|
||||
|
||||
std::cout << "sseUnalignedBitfieldInterleave Time " << Time << " clocks" << std::endl;
|
||||
}
|
||||
# endif//(GLM_ARCH != GLM_ARCH_PURE)
|
||||
|
||||
{
|
||||
std::clock_t LastTime = std::clock();
|
||||
|
||||
for(std::size_t i = 0; i < Data.size(); ++i)
|
||||
Data[i] = glm::bitfieldInterleave(Param[i].x, Param[i].y, Param[i].x);
|
||||
|
||||
std::clock_t Time = std::clock() - LastTime;
|
||||
|
||||
std::cout << "glm::detail::bitfieldInterleave Time " << Time << " clocks" << std::endl;
|
||||
}
|
||||
|
||||
# if(GLM_ARCH != GLM_ARCH_PURE)
|
||||
{
|
||||
// SIMD
|
||||
std::vector<__m128i> SimdData(x_max * y_max);
|
||||
std::vector<__m128i> SimdParam(x_max * y_max);
|
||||
for(int i = 0; i < SimdParam.size(); ++i)
|
||||
SimdParam[i] = _mm_set_epi32(i % x_max, 0, i / y_max, 0);
|
||||
|
||||
std::clock_t LastTime = std::clock();
|
||||
|
||||
for(std::size_t i = 0; i < SimdData.size(); ++i)
|
||||
SimdData[i] = glm::detail::_mm_bit_interleave_si128(SimdParam[i]);
|
||||
|
||||
std::clock_t Time = std::clock() - LastTime;
|
||||
|
||||
std::cout << "_mm_bit_interleave_si128 Time " << Time << " clocks" << std::endl;
|
||||
}
|
||||
# endif//(GLM_ARCH != GLM_ARCH_PURE)
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
namespace bitfieldInterleave3
|
||||
{
|
||||
template <typename PARAM, typename RET>
|
||||
inline RET refBitfieldInterleave(PARAM x, PARAM y, PARAM z)
|
||||
{
|
||||
RET Result = 0;
|
||||
for(RET i = 0; i < sizeof(PARAM) * 8; ++i)
|
||||
{
|
||||
Result |= ((RET(x) & (RET(1U) << i)) << ((i << 1) + 0));
|
||||
Result |= ((RET(y) & (RET(1U) << i)) << ((i << 1) + 1));
|
||||
Result |= ((RET(z) & (RET(1U) << i)) << ((i << 1) + 2));
|
||||
}
|
||||
return Result;
|
||||
}
|
||||
|
||||
int test()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
glm::uint16 x_max = 1 << 11;
|
||||
glm::uint16 y_max = 1 << 11;
|
||||
glm::uint16 z_max = 1 << 11;
|
||||
|
||||
for(glm::uint16 z = 0; z < z_max; z += 27)
|
||||
for(glm::uint16 y = 0; y < y_max; y += 27)
|
||||
for(glm::uint16 x = 0; x < x_max; x += 27)
|
||||
{
|
||||
glm::uint64 ResultA = refBitfieldInterleave<glm::uint16, glm::uint64>(x, y, z);
|
||||
glm::uint64 ResultB = glm::bitfieldInterleave(x, y, z);
|
||||
Error += ResultA == ResultB ? 0 : 1;
|
||||
}
|
||||
|
||||
return Error;
|
||||
}
|
||||
}
|
||||
|
||||
namespace bitfieldInterleave4
|
||||
{
|
||||
template <typename PARAM, typename RET>
|
||||
inline RET loopBitfieldInterleave(PARAM x, PARAM y, PARAM z, PARAM w)
|
||||
{
|
||||
RET const v[4] = {x, y, z, w};
|
||||
RET Result = 0;
|
||||
for(RET i = 0; i < sizeof(PARAM) * 8; i++)
|
||||
{
|
||||
Result |= ((((v[0] >> i) & 1U)) << ((i << 2) + 0));
|
||||
Result |= ((((v[1] >> i) & 1U)) << ((i << 2) + 1));
|
||||
Result |= ((((v[2] >> i) & 1U)) << ((i << 2) + 2));
|
||||
Result |= ((((v[3] >> i) & 1U)) << ((i << 2) + 3));
|
||||
}
|
||||
return Result;
|
||||
}
|
||||
|
||||
int test()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
glm::uint16 x_max = 1 << 11;
|
||||
glm::uint16 y_max = 1 << 11;
|
||||
glm::uint16 z_max = 1 << 11;
|
||||
glm::uint16 w_max = 1 << 11;
|
||||
|
||||
for(glm::uint16 w = 0; w < w_max; w += 27)
|
||||
for(glm::uint16 z = 0; z < z_max; z += 27)
|
||||
for(glm::uint16 y = 0; y < y_max; y += 27)
|
||||
for(glm::uint16 x = 0; x < x_max; x += 27)
|
||||
{
|
||||
glm::uint64 ResultA = loopBitfieldInterleave<glm::uint16, glm::uint64>(x, y, z, w);
|
||||
glm::uint64 ResultB = glm::bitfieldInterleave(x, y, z, w);
|
||||
Error += ResultA == ResultB ? 0 : 1;
|
||||
}
|
||||
|
||||
return Error;
|
||||
}
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
Error += ::bitfieldInterleave3::test();
|
||||
Error += ::bitfieldInterleave4::test();
|
||||
Error += ::bitfieldInterleave::test();
|
||||
Error += ::bitRevert::test();
|
||||
|
||||
return Error;
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2013-10-25
|
||||
// Updated : 2013-10-25
|
||||
// Licence : This source is under MIT licence
|
||||
// File : test/gtx/associated_min_max.cpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define GLM_FORCE_RADIANS
|
||||
#include <glm/gtc/type_precision.hpp>
|
||||
#include <glm/gtx/associated_min_max.hpp>
|
||||
|
||||
int main()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
return Error;
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2013-10-25
|
||||
// Updated : 2013-10-25
|
||||
// Licence : This source is under MIT licence
|
||||
// File : test/gtx/color_space.cpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define GLM_FORCE_RADIANS
|
||||
#include <glm/gtc/type_precision.hpp>
|
||||
#include <glm/gtx/color_space.hpp>
|
||||
|
||||
int main()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
return Error;
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2013-10-25
|
||||
// Updated : 2013-10-25
|
||||
// Licence : This source is under MIT licence
|
||||
// File : test/gtx/color_space_YCoCg.cpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define GLM_FORCE_RADIANS
|
||||
#include <glm/gtc/type_precision.hpp>
|
||||
#include <glm/gtx/color_space_YCoCg.hpp>
|
||||
|
||||
int main()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
return Error;
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2013-10-25
|
||||
// Updated : 2013-10-25
|
||||
// Licence : This source is under MIT licence
|
||||
// File : test/gtx/compatibility.cpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define GLM_FORCE_RADIANS
|
||||
#include <glm/gtc/type_precision.hpp>
|
||||
#include <glm/gtx/compatibility.hpp>
|
||||
|
||||
int main()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
return Error;
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2013-10-25
|
||||
// Updated : 2013-10-25
|
||||
// Licence : This source is under MIT licence
|
||||
// File : test/gtx/component_wise.cpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define GLM_FORCE_RADIANS
|
||||
#include <glm/gtc/type_precision.hpp>
|
||||
#include <glm/gtx/component_wise.hpp>
|
||||
|
||||
int main()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
return Error;
|
||||
}
|
||||
@@ -0,0 +1,175 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2013-02-10
|
||||
// Updated : 2013-02-11
|
||||
// Licence : This source is under MIT licence
|
||||
// File : test/gtc/gtc_dual_quaternion.cpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define GLM_FORCE_RADIANS
|
||||
#include <glm/gtx/dual_quaternion.hpp>
|
||||
#include <glm/gtc/matrix_transform.hpp>
|
||||
#include <glm/gtc/epsilon.hpp>
|
||||
#include <glm/gtx/euler_angles.hpp>
|
||||
#include <glm/vector_relational.hpp>
|
||||
|
||||
#include <iostream>
|
||||
|
||||
int myrand()
|
||||
{
|
||||
static int holdrand = 1;
|
||||
return (((holdrand = holdrand * 214013L + 2531011L) >> 16) & 0x7fff);
|
||||
}
|
||||
|
||||
float myfrand() // returns values from -1 to 1 inclusive
|
||||
{
|
||||
return float(double(myrand()) / double( 0x7ffff )) * 2.0f - 1.0f;
|
||||
}
|
||||
|
||||
int test_dquat_type()
|
||||
{
|
||||
glm::dvec3 vA;
|
||||
glm::dquat dqA,dqB;
|
||||
glm::ddualquat C(dqA,dqB);
|
||||
glm::ddualquat B(dqA);
|
||||
glm::ddualquat D(dqA,vA);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int test_scalars() {
|
||||
float const Epsilon = 0.0001f;
|
||||
|
||||
int Error(0);
|
||||
|
||||
glm::quat src_q1 = glm::quat(1.0f,2.0f,3.0f,4.0f);
|
||||
glm::quat src_q2 = glm::quat(5.0f,6.0f,7.0f,8.0f);
|
||||
glm::dualquat src1(src_q1,src_q2);
|
||||
|
||||
{
|
||||
glm::dualquat dst1 = src1 * 2.0f;
|
||||
glm::dualquat dst2 = 2.0f * src1;
|
||||
glm::dualquat dst3 = src1;
|
||||
dst3 *= 2.0f;
|
||||
glm::dualquat dstCmp(src_q1 * 2.0f,src_q2 * 2.0f);
|
||||
Error += glm::all(glm::epsilonEqual(dst1.real,dstCmp.real, Epsilon)) && glm::all(glm::epsilonEqual(dst1.dual,dstCmp.dual, Epsilon)) ? 0 : 1;
|
||||
Error += glm::all(glm::epsilonEqual(dst2.real,dstCmp.real, Epsilon)) && glm::all(glm::epsilonEqual(dst2.dual,dstCmp.dual, Epsilon)) ? 0 : 1;
|
||||
Error += glm::all(glm::epsilonEqual(dst3.real,dstCmp.real, Epsilon)) && glm::all(glm::epsilonEqual(dst3.dual,dstCmp.dual, Epsilon)) ? 0 : 1;
|
||||
}
|
||||
|
||||
{
|
||||
glm::dualquat dst1 = src1 / 2.0f;
|
||||
glm::dualquat dst2 = src1;
|
||||
dst2 /= 2.0f;
|
||||
glm::dualquat dstCmp(src_q1 / 2.0f,src_q2 / 2.0f);
|
||||
Error += glm::all(glm::epsilonEqual(dst1.real,dstCmp.real, Epsilon)) && glm::all(glm::epsilonEqual(dst1.dual,dstCmp.dual, Epsilon)) ? 0 : 1;
|
||||
Error += glm::all(glm::epsilonEqual(dst2.real,dstCmp.real, Epsilon)) && glm::all(glm::epsilonEqual(dst2.dual,dstCmp.dual, Epsilon)) ? 0 : 1;
|
||||
}
|
||||
return Error;
|
||||
}
|
||||
|
||||
int test_inverse()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
float const Epsilon = 0.0001f;
|
||||
|
||||
glm::dualquat dqid;
|
||||
glm::mat4x4 mid(1.0f);
|
||||
|
||||
for (int j = 0; j < 100; ++j)
|
||||
{
|
||||
glm::mat4x4 rot = glm::yawPitchRoll(myfrand() * 360.0f, myfrand() * 360.0f, myfrand() * 360.0f);
|
||||
glm::vec3 vt = glm::vec3(myfrand() * 10.0f, myfrand() * 10.0f, myfrand() * 10.0f);
|
||||
|
||||
glm::mat4x4 m = glm::translate(mid, vt) * rot;
|
||||
|
||||
glm::quat qr = glm::quat_cast(m);
|
||||
|
||||
glm::dualquat dq(qr);
|
||||
|
||||
glm::dualquat invdq = glm::inverse(dq);
|
||||
|
||||
glm::dualquat r1 = invdq * dq;
|
||||
glm::dualquat r2 = dq * invdq;
|
||||
|
||||
Error += glm::all(glm::epsilonEqual(r1.real, dqid.real, Epsilon)) && glm::all(glm::epsilonEqual(r1.dual, dqid.dual, Epsilon)) ? 0 : 1;
|
||||
Error += glm::all(glm::epsilonEqual(r2.real, dqid.real, Epsilon)) && glm::all(glm::epsilonEqual(r2.dual, dqid.dual, Epsilon)) ? 0 : 1;
|
||||
|
||||
// testing commutative property
|
||||
glm::dualquat r ( glm::quat( myfrand() * glm::pi<float>() * 2.0f, myfrand(), myfrand(), myfrand() ),
|
||||
glm::vec3(myfrand() * 10.0f, myfrand() * 10.0f, myfrand() * 10.0f) );
|
||||
glm::dualquat riq = (r * invdq) * dq;
|
||||
glm::dualquat rqi = (r * dq) * invdq;
|
||||
|
||||
Error += glm::all(glm::epsilonEqual(riq.real, rqi.real, Epsilon)) && glm::all(glm::epsilonEqual(riq.dual, rqi.dual, Epsilon)) ? 0 : 1;
|
||||
}
|
||||
|
||||
return Error;
|
||||
}
|
||||
|
||||
int test_mul()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
float const Epsilon = 0.0001f;
|
||||
|
||||
glm::mat4x4 mid(1.0f);
|
||||
|
||||
for (int j = 0; j < 100; ++j) {
|
||||
// generate random rotations and translations and compare transformed by matrix and dualquats random points
|
||||
glm::vec3 vt1 = glm::vec3(myfrand() * 10.0f, myfrand() * 10.0f, myfrand() * 10.0f);
|
||||
glm::vec3 vt2 = glm::vec3(myfrand() * 10.0f, myfrand() * 10.0f, myfrand() * 10.0f);
|
||||
|
||||
glm::mat4x4 rot1 = glm::yawPitchRoll(myfrand() * 360.0f, myfrand() * 360.0f, myfrand() * 360.0f);
|
||||
glm::mat4x4 rot2 = glm::yawPitchRoll(myfrand() * 360.0f, myfrand() * 360.0f, myfrand() * 360.0f);
|
||||
glm::mat4x4 m1 = glm::translate(mid, vt1) * rot1;
|
||||
glm::mat4x4 m2 = glm::translate(mid, vt2) * rot2;
|
||||
glm::mat4x4 m3 = m2 * m1;
|
||||
glm::mat4x4 m4 = m1 * m2;
|
||||
|
||||
glm::quat qrot1 = glm::quat_cast(rot1);
|
||||
glm::quat qrot2 = glm::quat_cast(rot2);
|
||||
|
||||
glm::dualquat dq1 = glm::dualquat(qrot1,vt1);
|
||||
glm::dualquat dq2 = glm::dualquat(qrot2,vt2);
|
||||
glm::dualquat dq3 = dq2 * dq1;
|
||||
glm::dualquat dq4 = dq1 * dq2;
|
||||
|
||||
for (int i = 0; i < 100; ++i) {
|
||||
glm::vec4 src_pt = glm::vec4(myfrand() * 4.0f, myfrand() * 5.0f, myfrand() * 3.0f,1.0f);
|
||||
// test both multiplication orders
|
||||
glm::vec4 dst_pt_m3 = m3 * src_pt;
|
||||
glm::vec4 dst_pt_dq3 = dq3 * src_pt;
|
||||
|
||||
glm::vec4 dst_pt_m3_i = glm::inverse(m3) * src_pt;
|
||||
glm::vec4 dst_pt_dq3_i = src_pt * dq3;
|
||||
|
||||
glm::vec4 dst_pt_m4 = m4 * src_pt;
|
||||
glm::vec4 dst_pt_dq4 = dq4 * src_pt;
|
||||
|
||||
glm::vec4 dst_pt_m4_i = glm::inverse(m4) * src_pt;
|
||||
glm::vec4 dst_pt_dq4_i = src_pt * dq4;
|
||||
|
||||
Error += glm::all(glm::epsilonEqual(dst_pt_m3, dst_pt_dq3, Epsilon)) ? 0 : 1;
|
||||
Error += glm::all(glm::epsilonEqual(dst_pt_m4, dst_pt_dq4, Epsilon)) ? 0 : 1;
|
||||
Error += glm::all(glm::epsilonEqual(dst_pt_m3_i, dst_pt_dq3_i, Epsilon)) ? 0 : 1;
|
||||
Error += glm::all(glm::epsilonEqual(dst_pt_m4_i, dst_pt_dq4_i, Epsilon)) ? 0 : 1;
|
||||
}
|
||||
}
|
||||
|
||||
return Error;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
Error += test_dquat_type();
|
||||
Error += test_scalars();
|
||||
Error += test_inverse();
|
||||
Error += test_mul();
|
||||
|
||||
//std::cout << "Errors count: " << Error << std::endl;
|
||||
return Error;
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2013-10-25
|
||||
// Updated : 2014-01-11
|
||||
// Licence : This source is under MIT licence
|
||||
// File : test/gtx/euler_angle.cpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// Code sample from Filippo Ramaciotti
|
||||
|
||||
#define GLM_FORCE_RADIANS
|
||||
#include <glm/gtc/matrix_transform.hpp>
|
||||
#include <glm/gtx/string_cast.hpp>
|
||||
#include <glm/gtx/euler_angles.hpp>
|
||||
#include <iostream>
|
||||
|
||||
using namespace glm;
|
||||
|
||||
int main()
|
||||
{
|
||||
f32 first = 1.046f;
|
||||
f32 second = 0.52f;
|
||||
f32 third = -0.785f;
|
||||
|
||||
fmat4 rotationEuler = eulerAngleYXZ(first, second, third);
|
||||
|
||||
fmat4 rotationInvertedY = eulerAngleY(-1.f*first) * eulerAngleX(second) * eulerAngleZ(third);
|
||||
fmat4 rotationDumb = glm::fmat4();
|
||||
rotationDumb = rotate(rotationDumb, first, glm::fvec3(0,1,0));
|
||||
rotationDumb = rotate(rotationDumb, second, glm::fvec3(1,0,0));
|
||||
rotationDumb = rotate(rotationDumb, third, glm::fvec3(0,0,1));
|
||||
|
||||
std::cout << glm::to_string(fmat3(rotationEuler)) << std::endl;
|
||||
std::cout << glm::to_string(fmat3(rotationDumb)) << std::endl;
|
||||
std::cout << glm::to_string(fmat3(rotationInvertedY )) << std::endl;
|
||||
|
||||
std::cout <<"\nRESIDUAL\n";
|
||||
std::cout << glm::to_string(fmat3(rotationEuler-(rotationDumb))) << std::endl;
|
||||
std::cout << glm::to_string(fmat3(rotationEuler-(rotationInvertedY ))) << std::endl;
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2013-10-25
|
||||
// Updated : 2013-10-25
|
||||
// Licence : This source is under MIT licence
|
||||
// File : test/gtx/extend.cpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define GLM_FORCE_RADIANS
|
||||
#include <glm/gtc/type_precision.hpp>
|
||||
#include <glm/gtx/extend.hpp>
|
||||
|
||||
int main()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
return Error;
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2013-10-25
|
||||
// Updated : 2013-10-25
|
||||
// Licence : This source is under MIT licence
|
||||
// File : test/gtx/associated_min_max.cpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define GLM_FORCE_RADIANS
|
||||
#include <glm/gtc/type_precision.hpp>
|
||||
#include <glm/gtx/associated_min_max.hpp>
|
||||
|
||||
int main()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
return Error;
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2013-10-25
|
||||
// Updated : 2013-10-25
|
||||
// Licence : This source is under MIT licence
|
||||
// File : test/gtx/associated_min_max.cpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define GLM_FORCE_RADIANS
|
||||
#include <glm/gtc/type_precision.hpp>
|
||||
#include <glm/gtx/fast_exponential.hpp>
|
||||
|
||||
int main()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
return Error;
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2013-10-25
|
||||
// Updated : 2013-10-25
|
||||
// Licence : This source is under MIT licence
|
||||
// File : test/gtx/fast_square_root.cpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define GLM_FORCE_RADIANS
|
||||
#include <glm/gtx/fast_square_root.hpp>
|
||||
#include <glm/gtc/type_precision.hpp>
|
||||
#include <glm/gtc/epsilon.hpp>
|
||||
#include <glm/vector_relational.hpp>
|
||||
|
||||
int test_fastInverseSqrt()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
Error += glm::epsilonEqual(glm::fastInverseSqrt(1.0f), 1.0f, 0.01f) ? 0 : 1;
|
||||
Error += glm::epsilonEqual(glm::fastInverseSqrt(1.0), 1.0, 0.01) ? 0 : 1;
|
||||
Error += glm::all(glm::epsilonEqual(glm::fastInverseSqrt(glm::vec2(1.0f)), glm::vec2(1.0f), 0.01f)) ? 0 : 1;
|
||||
Error += glm::all(glm::epsilonEqual(glm::fastInverseSqrt(glm::dvec3(1.0)), glm::dvec3(1.0), 0.01)) ? 0 : 1;
|
||||
Error += glm::all(glm::epsilonEqual(glm::fastInverseSqrt(glm::dvec4(1.0)), glm::dvec4(1.0), 0.01)) ? 0 : 1;
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
Error += test_fastInverseSqrt();
|
||||
|
||||
return Error;
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2013-10-25
|
||||
// Updated : 2013-10-25
|
||||
// Licence : This source is under MIT licence
|
||||
// File : test/gtx/fast_trigonometry.cpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define GLM_FORCE_RADIANS
|
||||
#include <glm/gtc/type_precision.hpp>
|
||||
#include <glm/gtx/fast_trigonometry.hpp>
|
||||
|
||||
int main()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
return Error;
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2011-10-13
|
||||
// Updated : 2011-10-13
|
||||
// Licence : This source is under MIT licence
|
||||
// File : test/gtx/gradient_paint.cpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define GLM_FORCE_RADIANS
|
||||
#include <glm/gtx/gradient_paint.hpp>
|
||||
|
||||
int test_radialGradient()
|
||||
{
|
||||
int Error = 0;
|
||||
|
||||
float Gradient = glm::radialGradient(glm::vec2(0), 1.0f, glm::vec2(1), glm::vec2(0.5));
|
||||
Error += Gradient != 0.0f ? 0 : 1;
|
||||
|
||||
return Error;
|
||||
}
|
||||
|
||||
int test_linearGradient()
|
||||
{
|
||||
int Error = 0;
|
||||
|
||||
float Gradient = glm::linearGradient(glm::vec2(0), glm::vec2(1), glm::vec2(0.5));
|
||||
Error += Gradient != 0.0f ? 0 : 1;
|
||||
|
||||
return Error;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
int Error = 0;
|
||||
|
||||
Error += test_radialGradient();
|
||||
Error += test_linearGradient();
|
||||
|
||||
return Error;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2013-10-25
|
||||
// Updated : 2013-10-25
|
||||
// Licence : This source is under MIT licence
|
||||
// File : test/gtx/handed_coordinate_space.cpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define GLM_FORCE_RADIANS
|
||||
#include <glm/gtc/type_precision.hpp>
|
||||
#include <glm/gtx/handed_coordinate_space.hpp>
|
||||
|
||||
int main()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
return Error;
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2013-10-25
|
||||
// Updated : 2013-10-25
|
||||
// Licence : This source is under MIT licence
|
||||
// File : test/gtx/inertia.cpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define GLM_FORCE_RADIANS
|
||||
#include <glm/gtc/type_precision.hpp>
|
||||
#include <glm/gtx/inertia.hpp>
|
||||
|
||||
int main()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
return Error;
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2013-10-25
|
||||
// Updated : 2013-10-25
|
||||
// Licence : This source is under MIT licence
|
||||
// File : test/gtx/associated_min_max.cpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include <glm/gtc/type_precision.hpp>
|
||||
#include <glm/gtx/associated_min_max.hpp>
|
||||
|
||||
int main()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
return Error;
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2011-10-11
|
||||
// Updated : 2011-10-11
|
||||
// Licence : This source is under MIT licence
|
||||
// File : test/gtx/gtx_integer.cpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define GLM_FORCE_RADIANS
|
||||
#include <glm/gtc/epsilon.hpp>
|
||||
#include <glm/gtx/integer.hpp>
|
||||
#include <cstdio>
|
||||
/*
|
||||
int test_floor_log2()
|
||||
{
|
||||
int Error = 0;
|
||||
|
||||
for(std::size_t i = 1; i < 1000000; ++i)
|
||||
{
|
||||
glm::uint A = glm::floor_log2(glm::uint(i));
|
||||
glm::uint B = glm::uint(glm::floor(glm::log2(double(i)))); // Will fail with float, lack of accuracy
|
||||
|
||||
Error += A == B ? 0 : 1;
|
||||
assert(!Error);
|
||||
}
|
||||
|
||||
return Error;
|
||||
}
|
||||
*/
|
||||
int test_log2()
|
||||
{
|
||||
int Error = 0;
|
||||
|
||||
for(std::size_t i = 1; i < 24; ++i)
|
||||
{
|
||||
glm::uint A = glm::log2(glm::uint(1 << i));
|
||||
glm::uint B = glm::uint(glm::log2(double(1 << i)));
|
||||
|
||||
//Error += glm::equalEpsilon(double(A), B, 1.0) ? 0 : 1;
|
||||
Error += glm::abs(double(A) - B) <= 24 ? 0 : 1;
|
||||
assert(!Error);
|
||||
|
||||
printf("Log2(%d) Error: %d, %d\n", 1 << i, A, B);
|
||||
}
|
||||
|
||||
printf("log2 error: %d\n", Error);
|
||||
|
||||
return Error;
|
||||
}
|
||||
|
||||
int test_nlz()
|
||||
{
|
||||
int Error = 0;
|
||||
|
||||
for(glm::uint i = 1; i < glm::uint(33); ++i)
|
||||
Error += glm::nlz(i) == glm::uint(31u) - glm::findMSB(i) ? 0 : 1;
|
||||
//printf("%d, %d\n", glm::nlz(i), 31u - glm::findMSB(i));
|
||||
|
||||
return Error;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
int Error = 0;
|
||||
|
||||
Error += test_nlz();
|
||||
// Error += test_floor_log2();
|
||||
Error += test_log2();
|
||||
|
||||
return Error;
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2013-10-25
|
||||
// Updated : 2013-10-25
|
||||
// Licence : This source is under MIT licence
|
||||
// File : test/gtx/intersect.cpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define GLM_FORCE_RADIANS
|
||||
#include <glm/gtc/type_precision.hpp>
|
||||
#include <glm/gtx/intersect.hpp>
|
||||
|
||||
int main()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
return Error;
|
||||
}
|
||||
@@ -0,0 +1,140 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2013-11-22
|
||||
// Updated : 2013-11-22
|
||||
// Licence : This source is under MIT licence
|
||||
// File : test/gtx/io.cpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define GLM_FORCE_RADIANS
|
||||
#include <glm/gtc/type_precision.hpp>
|
||||
#include <glm/gtx/io.hpp>
|
||||
#include <iostream>
|
||||
#include <typeinfo>
|
||||
|
||||
namespace {
|
||||
|
||||
template <typename CTy, typename CTr>
|
||||
std::basic_ostream<CTy,CTr>&
|
||||
operator<<(std::basic_ostream<CTy,CTr>& os, glm::precision const& a)
|
||||
{
|
||||
typename std::basic_ostream<CTy,CTr>::sentry const cerberus(os);
|
||||
|
||||
if (cerberus) {
|
||||
switch (a) {
|
||||
case glm::highp: os << "hi"; break;
|
||||
case glm::mediump: os << "md"; break;
|
||||
case glm::lowp: os << "lo"; break;
|
||||
}
|
||||
}
|
||||
|
||||
return os;
|
||||
}
|
||||
|
||||
} // namespace {
|
||||
|
||||
template <typename T, glm::precision P, typename OS>
|
||||
int test_io_vec(OS& os)
|
||||
{
|
||||
os << '\n'
|
||||
<< typeid(OS).name()
|
||||
<< '\n';
|
||||
|
||||
glm::detail::tvec2<T,P> const v2(0, 1);
|
||||
glm::detail::tvec3<T,P> const v3(2, 3, 4);
|
||||
glm::detail::tvec4<T,P> const v4(5, 6, 7, 8);
|
||||
|
||||
os << "vec2<" << typeid(T).name() << ',' << P << ">: " << v2 << '\n'
|
||||
<< "vec3<" << typeid(T).name() << ',' << P << ">: " << v3 << '\n'
|
||||
<< "vec4<" << typeid(T).name() << ',' << P << ">: " << v4 << '\n';
|
||||
|
||||
glm::io::precision_guard const iopg;
|
||||
|
||||
glm::io::precision() = 2;
|
||||
glm::io::value_width() = 1 + 2 + 1 + glm::io::precision();
|
||||
|
||||
os << "vec2<" << typeid(T).name() << ',' << P << ">: " << v2 << '\n'
|
||||
<< "vec3<" << typeid(T).name() << ',' << P << ">: " << v3 << '\n'
|
||||
<< "vec4<" << typeid(T).name() << ',' << P << ">: " << v4 << '\n';
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
template <typename T, glm::precision P, typename OS>
|
||||
int test_io_mat(OS& os)
|
||||
{
|
||||
os << '\n'
|
||||
<< typeid(OS).name()
|
||||
<< '\n';
|
||||
|
||||
glm::detail::tvec2<T,P> const v2_1( 0, 1);
|
||||
glm::detail::tvec2<T,P> const v2_2( 2, 3);
|
||||
glm::detail::tvec2<T,P> const v2_3( 4, 5);
|
||||
glm::detail::tvec2<T,P> const v2_4( 6, 7);
|
||||
glm::detail::tvec3<T,P> const v3_1( 8, 9, 10);
|
||||
glm::detail::tvec3<T,P> const v3_2(11, 12, 13);
|
||||
glm::detail::tvec3<T,P> const v3_3(14, 15, 16);
|
||||
glm::detail::tvec3<T,P> const v3_4(17, 18, 19);
|
||||
glm::detail::tvec4<T,P> const v4_1(20, 21, 22, 23);
|
||||
glm::detail::tvec4<T,P> const v4_2(24, 25, 26, 27);
|
||||
glm::detail::tvec4<T,P> const v4_3(28, 29, 30, 31);
|
||||
glm::detail::tvec4<T,P> const v4_4(32, 33, 34, 35);
|
||||
|
||||
#if 0
|
||||
os << "mat2x2<" << typeid(T).name() << ',' << P << ">: " << glm::detail::tmat2x2<T,P>(v2_1, v2_2) << '\n'
|
||||
<< "mat2x3<" << typeid(T).name() << ',' << P << ">: " << glm::detail::tmat2x3<T,P>(v3_1, v3_2) << '\n'
|
||||
<< "mat2x4<" << typeid(T).name() << ',' << P << ">: " << glm::detail::tmat2x4<T,P>(v4_1, v4_2) << '\n'
|
||||
<< "mat3x2<" << typeid(T).name() << ',' << P << ">: " << glm::detail::tmat3x2<T,P>(v2_1, v2_2, v2_3) << '\n'
|
||||
<< "mat3x3<" << typeid(T).name() << ',' << P << ">: " << glm::detail::tmat3x3<T,P>(v3_1, v3_2, v3_3) << '\n'
|
||||
<< "mat3x4<" << typeid(T).name() << ',' << P << ">: " << glm::detail::tmat3x4<T,P>(v4_1, v4_2, v4_3) << '\n'
|
||||
<< "mat4x2<" << typeid(T).name() << ',' << P << ">: " << glm::detail::tmat4x2<T,P>(v2_1, v2_2, v2_3, v2_4) << '\n'
|
||||
<< "mat4x3<" << typeid(T).name() << ',' << P << ">: " << glm::detail::tmat4x3<T,P>(v3_1, v3_2, v3_3, v3_4) << '\n'
|
||||
<< "mat4x4<" << typeid(T).name() << ',' << P << ">: " << glm::detail::tmat4x4<T,P>(v4_1, v4_2, v4_3, v4_4) << '\n';
|
||||
#endif
|
||||
|
||||
glm::io::precision_guard const iopg;
|
||||
|
||||
glm::io::precision() = 2;
|
||||
glm::io::value_width() = 1 + 2 + 1 + glm::io::precision();
|
||||
|
||||
os << "mat2x2<" << typeid(T).name() << ',' << P << ">: " << glm::detail::tmat2x2<T,P>(v2_1, v2_2) << '\n'
|
||||
<< "mat2x3<" << typeid(T).name() << ',' << P << ">: " << glm::detail::tmat2x3<T,P>(v3_1, v3_2) << '\n'
|
||||
<< "mat2x4<" << typeid(T).name() << ',' << P << ">: " << glm::detail::tmat2x4<T,P>(v4_1, v4_2) << '\n'
|
||||
<< "mat3x2<" << typeid(T).name() << ',' << P << ">: " << glm::detail::tmat3x2<T,P>(v2_1, v2_2, v2_3) << '\n'
|
||||
<< "mat3x3<" << typeid(T).name() << ',' << P << ">: " << glm::detail::tmat3x3<T,P>(v3_1, v3_2, v3_3) << '\n'
|
||||
<< "mat3x4<" << typeid(T).name() << ',' << P << ">: " << glm::detail::tmat3x4<T,P>(v4_1, v4_2, v4_3) << '\n'
|
||||
<< "mat4x2<" << typeid(T).name() << ',' << P << ">: " << glm::detail::tmat4x2<T,P>(v2_1, v2_2, v2_3, v2_4) << '\n'
|
||||
<< "mat4x3<" << typeid(T).name() << ',' << P << ">: " << glm::detail::tmat4x3<T,P>(v3_1, v3_2, v3_3, v3_4) << '\n'
|
||||
<< "mat4x4<" << typeid(T).name() << ',' << P << ">: " << glm::detail::tmat4x4<T,P>(v4_1, v4_2, v4_3, v4_4) << '\n';
|
||||
|
||||
os << glm::io::column_major
|
||||
<< "mat2x2<" << typeid(T).name() << ',' << P << ">: " << glm::detail::tmat2x2<T,P>(v2_1, v2_2) << '\n'
|
||||
<< "mat2x3<" << typeid(T).name() << ',' << P << ">: " << glm::detail::tmat2x3<T,P>(v3_1, v3_2) << '\n'
|
||||
<< "mat2x4<" << typeid(T).name() << ',' << P << ">: " << glm::detail::tmat2x4<T,P>(v4_1, v4_2) << '\n'
|
||||
<< "mat3x2<" << typeid(T).name() << ',' << P << ">: " << glm::detail::tmat3x2<T,P>(v2_1, v2_2, v2_3) << '\n'
|
||||
<< "mat3x3<" << typeid(T).name() << ',' << P << ">: " << glm::detail::tmat3x3<T,P>(v3_1, v3_2, v3_3) << '\n'
|
||||
<< "mat3x4<" << typeid(T).name() << ',' << P << ">: " << glm::detail::tmat3x4<T,P>(v4_1, v4_2, v4_3) << '\n'
|
||||
<< "mat4x2<" << typeid(T).name() << ',' << P << ">: " << glm::detail::tmat4x2<T,P>(v2_1, v2_2, v2_3, v2_4) << '\n'
|
||||
<< "mat4x3<" << typeid(T).name() << ',' << P << ">: " << glm::detail::tmat4x3<T,P>(v3_1, v3_2, v3_3, v3_4) << '\n'
|
||||
<< "mat4x4<" << typeid(T).name() << ',' << P << ">: " << glm::detail::tmat4x4<T,P>(v4_1, v4_2, v4_3, v4_4) << '\n';
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
Error += test_io_vec<float, glm::highp>(std::cout);
|
||||
Error += test_io_vec<float, glm::highp>(std::wcout);
|
||||
Error += test_io_vec<int, glm::mediump>(std::cout);
|
||||
Error += test_io_vec<int, glm::mediump>(std::wcout);
|
||||
Error += test_io_vec<glm::uint, glm::lowp>(std::cout);
|
||||
Error += test_io_vec<glm::uint, glm::lowp>(std::wcout);
|
||||
|
||||
Error += test_io_mat<float, glm::highp>(std::cout);
|
||||
Error += test_io_mat<float, glm::lowp>(std::wcout);
|
||||
|
||||
return Error;
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2013-10-25
|
||||
// Updated : 2013-10-25
|
||||
// Licence : This source is under MIT licence
|
||||
// File : test/gtx/log_base.cpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define GLM_FORCE_RADIANS
|
||||
#include <glm/gtc/type_precision.hpp>
|
||||
#include <glm/gtx/log_base.hpp>
|
||||
|
||||
int main()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
return Error;
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2013-10-25
|
||||
// Updated : 2013-10-25
|
||||
// Licence : This source is under MIT licence
|
||||
// File : test/gtx/matrix_cross_product.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define GLM_FORCE_RADIANS
|
||||
#include <glm/gtc/type_precision.hpp>
|
||||
#include <glm/gtx/matrix_cross_product.hpp>
|
||||
|
||||
int main()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
return Error;
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2012-09-19
|
||||
// Updated : 2012-09-19
|
||||
// Licence : This source is under MIT licence
|
||||
// File : test/gtx/matrix_interpolation.cpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define GLM_FORCE_RADIANS
|
||||
#include <glm/gtx/matrix_interpolation.hpp>
|
||||
|
||||
int main()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
return Error;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2013-10-25
|
||||
// Updated : 2013-10-25
|
||||
// Licence : This source is under MIT licence
|
||||
// File : test/gtx/matrix_major_storage.cpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define GLM_FORCE_RADIANS
|
||||
#include <glm/gtc/type_precision.hpp>
|
||||
#include <glm/gtx/matrix_major_storage.hpp>
|
||||
|
||||
int main()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
return Error;
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2013-10-25
|
||||
// Updated : 2013-10-25
|
||||
// Licence : This source is under MIT licence
|
||||
// File : test/gtx/matrix_operation.cpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define GLM_FORCE_RADIANS
|
||||
#include <glm/gtc/type_precision.hpp>
|
||||
#include <glm/gtx/matrix_operation.hpp>
|
||||
|
||||
int main()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
return Error;
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2011-11-22
|
||||
// Updated : 2011-11-22
|
||||
// Licence : This source is under MIT licence
|
||||
// File : test/gtx/matrix_query.cpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define GLM_FORCE_RADIANS
|
||||
#include <glm/gtx/matrix_query.hpp>
|
||||
|
||||
int test_isNull()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
bool TestA = glm::isNull(glm::mat4(0), 0.00001f);
|
||||
Error += TestA ? 0 : 1;
|
||||
|
||||
return Error;
|
||||
}
|
||||
|
||||
int test_isIdentity()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
{
|
||||
bool TestA = glm::isIdentity(glm::mat2(1), 0.00001f);
|
||||
Error += TestA ? 0 : 1;
|
||||
}
|
||||
{
|
||||
bool TestA = glm::isIdentity(glm::mat3(1), 0.00001f);
|
||||
Error += TestA ? 0 : 1;
|
||||
}
|
||||
{
|
||||
bool TestA = glm::isIdentity(glm::mat4(1), 0.00001f);
|
||||
Error += TestA ? 0 : 1;
|
||||
}
|
||||
|
||||
return Error;
|
||||
}
|
||||
|
||||
int test_isNormalized()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
bool TestA = glm::isNormalized(glm::mat4(1), 0.00001f);
|
||||
Error += TestA ? 0 : 1;
|
||||
|
||||
return Error;
|
||||
}
|
||||
|
||||
int test_isOrthogonal()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
bool TestA = glm::isOrthogonal(glm::mat4(1), 0.00001f);
|
||||
Error += TestA ? 0 : 1;
|
||||
|
||||
return Error;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
Error += test_isNull();
|
||||
Error += test_isIdentity();
|
||||
Error += test_isNormalized();
|
||||
Error += test_isOrthogonal();
|
||||
|
||||
return Error;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2013-10-25
|
||||
// Updated : 2013-10-25
|
||||
// Licence : This source is under MIT licence
|
||||
// File : test/gtx/associated_min_max.cpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include <glm/gtc/type_precision.hpp>
|
||||
#include <glm/gtx/associated_min_max.hpp>
|
||||
|
||||
int main()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
return Error;
|
||||
}
|
||||
@@ -0,0 +1,116 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2012-11-19
|
||||
// Updated : 2012-11-19
|
||||
// Licence : This source is under MIT licence
|
||||
// File : test/gtx/gtx_multiple.cpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define GLM_FORCE_RADIANS
|
||||
#include <glm/gtx/multiple.hpp>
|
||||
|
||||
int test_higher_int()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
Error += glm::higherMultiple(-5, 4) == -4 ? 0 : 1;
|
||||
Error += glm::higherMultiple(-4, 4) == -4 ? 0 : 1;
|
||||
Error += glm::higherMultiple(-3, 4) == 0 ? 0 : 1;
|
||||
Error += glm::higherMultiple(-2, 4) == 0 ? 0 : 1;
|
||||
Error += glm::higherMultiple(-1, 4) == 0 ? 0 : 1;
|
||||
Error += glm::higherMultiple(0, 4) == 0 ? 0 : 1;
|
||||
Error += glm::higherMultiple(1, 4) == 4 ? 0 : 1;
|
||||
Error += glm::higherMultiple(2, 4) == 4 ? 0 : 1;
|
||||
Error += glm::higherMultiple(3, 4) == 4 ? 0 : 1;
|
||||
Error += glm::higherMultiple(4, 4) == 4 ? 0 : 1;
|
||||
Error += glm::higherMultiple(5, 4) == 8 ? 0 : 1;
|
||||
Error += glm::higherMultiple(6, 4) == 8 ? 0 : 1;
|
||||
Error += glm::higherMultiple(7, 4) == 8 ? 0 : 1;
|
||||
Error += glm::higherMultiple(8, 4) == 8 ? 0 : 1;
|
||||
Error += glm::higherMultiple(9, 4) == 12 ? 0 : 1;
|
||||
|
||||
return Error;
|
||||
}
|
||||
|
||||
int test_Lower_int()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
Error += glm::lowerMultiple(-5, 4) == -8 ? 0 : 1;
|
||||
Error += glm::lowerMultiple(-4, 4) == -4 ? 0 : 1;
|
||||
Error += glm::lowerMultiple(-3, 4) == -4 ? 0 : 1;
|
||||
Error += glm::lowerMultiple(-2, 4) == -4 ? 0 : 1;
|
||||
Error += glm::lowerMultiple(-1, 4) == -4 ? 0 : 1;
|
||||
Error += glm::lowerMultiple(0, 4) == 0 ? 0 : 1;
|
||||
Error += glm::lowerMultiple(1, 4) == 0 ? 0 : 1;
|
||||
Error += glm::lowerMultiple(2, 4) == 0 ? 0 : 1;
|
||||
Error += glm::lowerMultiple(3, 4) == 0 ? 0 : 1;
|
||||
Error += glm::lowerMultiple(4, 4) == 4 ? 0 : 1;
|
||||
Error += glm::lowerMultiple(5, 4) == 4 ? 0 : 1;
|
||||
Error += glm::lowerMultiple(6, 4) == 4 ? 0 : 1;
|
||||
Error += glm::lowerMultiple(7, 4) == 4 ? 0 : 1;
|
||||
Error += glm::lowerMultiple(8, 4) == 8 ? 0 : 1;
|
||||
Error += glm::lowerMultiple(9, 4) == 8 ? 0 : 1;
|
||||
|
||||
return Error;
|
||||
}
|
||||
|
||||
int test_higher_double()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
Error += glm::higherMultiple(-9.0, 4.0) == -8.0 ? 0 : 1;
|
||||
Error += glm::higherMultiple(-5.0, 4.0) == -4.0 ? 0 : 1;
|
||||
Error += glm::higherMultiple(-4.0, 4.0) == -4.0 ? 0 : 1;
|
||||
Error += glm::higherMultiple(-3.0, 4.0) == 0.0 ? 0 : 1;
|
||||
Error += glm::higherMultiple(-2.0, 4.0) == 0.0 ? 0 : 1;
|
||||
Error += glm::higherMultiple(-1.0, 4.0) == 0.0 ? 0 : 1;
|
||||
Error += glm::higherMultiple(0.0, 4.0) == 0.0 ? 0 : 1;
|
||||
Error += glm::higherMultiple(1.0, 4.0) == 4.0 ? 0 : 1;
|
||||
Error += glm::higherMultiple(2.0, 4.0) == 4.0 ? 0 : 1;
|
||||
Error += glm::higherMultiple(3.0, 4.0) == 4.0 ? 0 : 1;
|
||||
Error += glm::higherMultiple(4.0, 4.0) == 4.0 ? 0 : 1;
|
||||
Error += glm::higherMultiple(5.0, 4.0) == 8.0 ? 0 : 1;
|
||||
Error += glm::higherMultiple(6.0, 4.0) == 8.0 ? 0 : 1;
|
||||
Error += glm::higherMultiple(7.0, 4.0) == 8.0 ? 0 : 1;
|
||||
Error += glm::higherMultiple(8.0, 4.0) == 8.0 ? 0 : 1;
|
||||
Error += glm::higherMultiple(9.0, 4.0) == 12.0 ? 0 : 1;
|
||||
|
||||
return Error;
|
||||
}
|
||||
|
||||
int test_Lower_double()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
Error += glm::lowerMultiple(-5.0, 4.0) == -8.0 ? 0 : 1;
|
||||
Error += glm::lowerMultiple(-4.0, 4.0) == -4.0 ? 0 : 1;
|
||||
Error += glm::lowerMultiple(-3.0, 4.0) == -4.0 ? 0 : 1;
|
||||
Error += glm::lowerMultiple(-2.0, 4.0) == -4.0 ? 0 : 1;
|
||||
Error += glm::lowerMultiple(-1.0, 4.0) == -4.0 ? 0 : 1;
|
||||
Error += glm::lowerMultiple(0.0, 4.0) == 0.0 ? 0 : 1;
|
||||
Error += glm::lowerMultiple(1.0, 4.0) == 0.0 ? 0 : 1;
|
||||
Error += glm::lowerMultiple(2.0, 4.0) == 0.0 ? 0 : 1;
|
||||
Error += glm::lowerMultiple(3.0, 4.0) == 0.0 ? 0 : 1;
|
||||
Error += glm::lowerMultiple(4.0, 4.0) == 4.0 ? 0 : 1;
|
||||
Error += glm::lowerMultiple(5.0, 4.0) == 4.0 ? 0 : 1;
|
||||
Error += glm::lowerMultiple(6.0, 4.0) == 4.0 ? 0 : 1;
|
||||
Error += glm::lowerMultiple(7.0, 4.0) == 4.0 ? 0 : 1;
|
||||
Error += glm::lowerMultiple(8.0, 4.0) == 8.0 ? 0 : 1;
|
||||
Error += glm::lowerMultiple(9.0, 4.0) == 8.0 ? 0 : 1;
|
||||
|
||||
return Error;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
Error += test_higher_int();
|
||||
Error += test_Lower_int();
|
||||
Error += test_higher_double();
|
||||
Error += test_Lower_double();
|
||||
|
||||
return Error;
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2013-10-25
|
||||
// Updated : 2013-10-25
|
||||
// Licence : This source is under MIT licence
|
||||
// File : test/gtx/norm.cpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define GLM_FORCE_RADIANS
|
||||
#include <glm/gtc/type_precision.hpp>
|
||||
#include <glm/gtx/norm.hpp>
|
||||
|
||||
int main()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
return Error;
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2013-10-25
|
||||
// Updated : 2013-10-25
|
||||
// Licence : This source is under MIT licence
|
||||
// File : test/gtx/normal.cpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define GLM_FORCE_RADIANS
|
||||
#include <glm/gtc/type_precision.hpp>
|
||||
#include <glm/gtx/normal.hpp>
|
||||
|
||||
int main()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
return Error;
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2013-10-25
|
||||
// Updated : 2013-10-25
|
||||
// Licence : This source is under MIT licence
|
||||
// File : test/gtx/normalize_dot.cpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define GLM_FORCE_RADIANS
|
||||
#include <glm/gtc/type_precision.hpp>
|
||||
#include <glm/gtx/normalize_dot.hpp>
|
||||
|
||||
int main()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
return Error;
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2013-10-25
|
||||
// Updated : 2013-10-25
|
||||
// Licence : This source is under MIT licence
|
||||
// File : test/gtx/number_precision.cpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define GLM_FORCE_RADIANS
|
||||
#include <glm/gtc/type_precision.hpp>
|
||||
#include <glm/gtx/number_precision.hpp>
|
||||
|
||||
int main()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
return Error;
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2013-10-25
|
||||
// Updated : 2013-10-25
|
||||
// Licence : This source is under MIT licence
|
||||
// File : test/gtx/optimum_pow.cpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define GLM_FORCE_RADIANS
|
||||
#include <glm/glm.hpp>
|
||||
#include <glm/gtc/type_precision.hpp>
|
||||
#include <glm/gtx/optimum_pow.hpp>
|
||||
|
||||
int main()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
return Error;
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2013-10-25
|
||||
// Updated : 2013-10-25
|
||||
// Licence : This source is under MIT licence
|
||||
// File : test/gtx/orthonormalize.cpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define GLM_FORCE_RADIANS
|
||||
#include <glm/glm.hpp>
|
||||
#include <glm/gtc/type_precision.hpp>
|
||||
#include <glm/gtx/orthonormalize.hpp>
|
||||
|
||||
int main()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
return Error;
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2013-10-25
|
||||
// Updated : 2013-10-25
|
||||
// Licence : This source is under MIT licence
|
||||
// File : test/gtx/perpendicular.cpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define GLM_FORCE_RADIANS
|
||||
#include <glm/glm.hpp>
|
||||
#include <glm/gtc/type_precision.hpp>
|
||||
#include <glm/gtx/perpendicular.hpp>
|
||||
|
||||
int main()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
return Error;
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2013-10-25
|
||||
// Updated : 2013-10-25
|
||||
// Licence : This source is under MIT licence
|
||||
// File : test/gtx/polar_coordinates.cpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define GLM_FORCE_RADIANS
|
||||
#include <glm/glm.hpp>
|
||||
#include <glm/gtc/type_precision.hpp>
|
||||
#include <glm/gtx/polar_coordinates.hpp>
|
||||
|
||||
int main()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
return Error;
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2013-10-25
|
||||
// Updated : 2013-10-25
|
||||
// Licence : This source is under MIT licence
|
||||
// File : test/gtx/projection.cpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define GLM_FORCE_RADIANS
|
||||
#include <glm/glm.hpp>
|
||||
#include <glm/gtc/type_precision.hpp>
|
||||
#include <glm/gtx/projection.hpp>
|
||||
|
||||
int main()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
return Error;
|
||||
}
|
||||
@@ -0,0 +1,99 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2011-05-25
|
||||
// Updated : 2011-05-31
|
||||
// Licence : This source is under MIT licence
|
||||
// File : test/gtx/quaternion.cpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define GLM_FORCE_RADIANS
|
||||
#include <glm/gtc/epsilon.hpp>
|
||||
#include <glm/gtc/type_ptr.hpp>
|
||||
#include <glm/gtc/matrix_transform.hpp>
|
||||
#include <glm/gtx/transform.hpp>
|
||||
#include <glm/gtx/quaternion.hpp>
|
||||
#include <glm/ext.hpp>
|
||||
|
||||
int test_quat_fastMix()
|
||||
{
|
||||
int Error = 0;
|
||||
|
||||
glm::quat A = glm::angleAxis(0.0f, glm::vec3(0, 0, 1));
|
||||
glm::quat B = glm::angleAxis(glm::pi<float>() * 0.5f, glm::vec3(0, 0, 1));
|
||||
glm::quat C = glm::fastMix(A, B, 0.5f);
|
||||
glm::quat D = glm::angleAxis(glm::pi<float>() * 0.25f, glm::vec3(0, 0, 1));
|
||||
|
||||
Error += glm::epsilonEqual(C.x, D.x, 0.01f) ? 0 : 1;
|
||||
Error += glm::epsilonEqual(C.y, D.y, 0.01f) ? 0 : 1;
|
||||
Error += glm::epsilonEqual(C.z, D.z, 0.01f) ? 0 : 1;
|
||||
Error += glm::epsilonEqual(C.w, D.w, 0.01f) ? 0 : 1;
|
||||
|
||||
return Error;
|
||||
}
|
||||
|
||||
int test_quat_shortMix()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
glm::quat A = glm::angleAxis(0.0f, glm::vec3(0, 0, 1));
|
||||
glm::quat B = glm::angleAxis(glm::pi<float>() * 0.5f, glm::vec3(0, 0, 1));
|
||||
glm::quat C = glm::shortMix(A, B, 0.5f);
|
||||
glm::quat D = glm::angleAxis(glm::pi<float>() * 0.25f, glm::vec3(0, 0, 1));
|
||||
|
||||
Error += glm::epsilonEqual(C.x, D.x, 0.01f) ? 0 : 1;
|
||||
Error += glm::epsilonEqual(C.y, D.y, 0.01f) ? 0 : 1;
|
||||
Error += glm::epsilonEqual(C.z, D.z, 0.01f) ? 0 : 1;
|
||||
Error += glm::epsilonEqual(C.w, D.w, 0.01f) ? 0 : 1;
|
||||
|
||||
return Error;
|
||||
}
|
||||
|
||||
int test_orientation()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
{
|
||||
glm::quat q(1.0f, 0.0f, 0.0f, 1.0f);
|
||||
float p = glm::roll(q);
|
||||
}
|
||||
|
||||
{
|
||||
glm::quat q(1.0f, 0.0f, 0.0f, 1.0f);
|
||||
float p = glm::pitch(q);
|
||||
}
|
||||
|
||||
{
|
||||
glm::quat q(1.0f, 0.0f, 0.0f, 1.0f);
|
||||
float p = glm::yaw(q);
|
||||
}
|
||||
|
||||
return Error;
|
||||
}
|
||||
|
||||
int test_rotation()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
glm::vec3 v(1, 0, 0);
|
||||
glm::vec3 u(0, 1, 0);
|
||||
|
||||
glm::quat Rotation = glm::rotation(v, u);
|
||||
|
||||
float Angle = glm::angle(Rotation);
|
||||
|
||||
Error += glm::abs(Angle - glm::pi<float>() * 0.5f) < glm::epsilon<float>() ? 0 : 1;
|
||||
|
||||
return Error;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
Error += test_rotation();
|
||||
Error += test_quat_fastMix();
|
||||
Error += test_quat_shortMix();
|
||||
|
||||
return Error;
|
||||
}
|
||||
@@ -0,0 +1,99 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2011-05-31
|
||||
// Updated : 2011-05-31
|
||||
// Licence : This source is under MIT licence
|
||||
// File : test/gtx/random.cpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include <glm/glm.hpp>
|
||||
#include <glm/gtx/random.hpp>
|
||||
#include <glm/gtx/epsilon.hpp>
|
||||
#include <iostream>
|
||||
|
||||
int test_signedRand1()
|
||||
{
|
||||
int Error = 0;
|
||||
|
||||
{
|
||||
float ResultFloat = 0.0f;
|
||||
double ResultDouble = 0.0f;
|
||||
for(std::size_t i = 0; i < 100000; ++i)
|
||||
{
|
||||
ResultFloat += glm::signedRand1<float>();
|
||||
ResultDouble += glm::signedRand1<double>();
|
||||
}
|
||||
|
||||
Error += glm::equalEpsilon(ResultFloat, 0.0f, 0.0001f);
|
||||
Error += glm::equalEpsilon(ResultDouble, 0.0, 0.0001);
|
||||
}
|
||||
|
||||
return Error;
|
||||
}
|
||||
|
||||
int test_normalizedRand2()
|
||||
{
|
||||
int Error = 0;
|
||||
|
||||
{
|
||||
std::size_t Max = 100000;
|
||||
float ResultFloat = 0.0f;
|
||||
double ResultDouble = 0.0f;
|
||||
for(std::size_t i = 0; i < Max; ++i)
|
||||
{
|
||||
ResultFloat += glm::length(glm::normalizedRand2<float>());
|
||||
ResultDouble += glm::length(glm::normalizedRand2<double>());
|
||||
}
|
||||
|
||||
Error += glm::equalEpsilon(ResultFloat, float(Max), 0.000001f) ? 0 : 1;
|
||||
Error += glm::equalEpsilon(ResultDouble, double(Max), 0.000001) ? 0 : 1;
|
||||
assert(!Error);
|
||||
}
|
||||
|
||||
return Error;
|
||||
}
|
||||
|
||||
int test_normalizedRand3()
|
||||
{
|
||||
int Error = 0;
|
||||
|
||||
{
|
||||
std::size_t Max = 100000;
|
||||
float ResultFloatA = 0.0f;
|
||||
float ResultFloatB = 0.0f;
|
||||
float ResultFloatC = 0.0f;
|
||||
double ResultDoubleA = 0.0f;
|
||||
double ResultDoubleB = 0.0f;
|
||||
double ResultDoubleC = 0.0f;
|
||||
for(std::size_t i = 0; i < Max; ++i)
|
||||
{
|
||||
ResultFloatA += glm::length(glm::normalizedRand3<float>());
|
||||
ResultDoubleA += glm::length(glm::normalizedRand3<double>());
|
||||
ResultFloatB += glm::length(glm::normalizedRand3(2.0f, 2.0f));
|
||||
ResultDoubleB += glm::length(glm::normalizedRand3(2.0, 2.0));
|
||||
ResultFloatC += glm::length(glm::normalizedRand3(1.0f, 3.0f));
|
||||
ResultDoubleC += glm::length(glm::normalizedRand3(1.0, 3.0));
|
||||
}
|
||||
|
||||
Error += glm::equalEpsilon(ResultFloatA, float(Max), 0.0001f) ? 0 : 1;
|
||||
Error += glm::equalEpsilon(ResultDoubleA, double(Max), 0.0001) ? 0 : 1;
|
||||
Error += glm::equalEpsilon(ResultFloatB, float(Max * 2), 0.0001f) ? 0 : 1;
|
||||
Error += glm::equalEpsilon(ResultDoubleB, double(Max * 2), 0.0001) ? 0 : 1;
|
||||
Error += (ResultFloatC >= float(Max) && ResultFloatC <= float(Max * 3)) ? 0 : 1;
|
||||
Error += (ResultDoubleC >= double(Max) && ResultDoubleC <= double(Max * 3)) ? 0 : 1;
|
||||
}
|
||||
|
||||
return Error;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
int Error = 0;
|
||||
|
||||
Error += test_signedRand1();
|
||||
Error += test_normalizedRand2();
|
||||
Error += test_normalizedRand3();
|
||||
|
||||
return Error;
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
/// OpenGL Mathematics (glm.g-truc.net)
|
||||
///
|
||||
/// Copyright (c) 2005 - 2012 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_rotate_normalized_axis
|
||||
/// @file test/gtx/rotate_normalized_axis.cpp
|
||||
/// @date 2012-12-13 / 2012-12-13
|
||||
/// @author Christophe Riccio
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define GLM_FORCE_RADIANS
|
||||
#include <glm/glm.hpp>
|
||||
#include <glm/gtx/rotate_normalized_axis.hpp>
|
||||
|
||||
int main()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
return Error;
|
||||
}
|
||||
@@ -0,0 +1,85 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2011-05-16
|
||||
// Updated : 2011-05-16
|
||||
// Licence : This source is under MIT licence
|
||||
// File : test/gtx/rotate_vector.cpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define GLM_FORCE_RADIANS
|
||||
#include <glm/gtc/constants.hpp>
|
||||
#include <glm/gtx/rotate_vector.hpp>
|
||||
|
||||
int test_rotate()
|
||||
{
|
||||
int Error = 0;
|
||||
|
||||
glm::vec2 A = glm::rotate(glm::vec2(1, 0), glm::pi<float>() * 0.5f);
|
||||
glm::vec3 B = glm::rotate(glm::vec3(1, 0, 0), glm::pi<float>() * 0.5f, glm::vec3(0, 0, 1));
|
||||
glm::vec4 C = glm::rotate(glm::vec4(1, 0, 0, 1), glm::pi<float>() * 0.5f, glm::vec3(0, 0, 1));
|
||||
glm::vec3 D = glm::rotateX(glm::vec3(1, 0, 0), glm::pi<float>() * 0.5f);
|
||||
glm::vec4 E = glm::rotateX(glm::vec4(1, 0, 0, 1), glm::pi<float>() * 0.5f);
|
||||
glm::vec3 F = glm::rotateY(glm::vec3(1, 0, 0), glm::pi<float>() * 0.5f);
|
||||
glm::vec4 G = glm::rotateY(glm::vec4(1, 0, 0, 1), glm::pi<float>() * 0.5f);
|
||||
glm::vec3 H = glm::rotateZ(glm::vec3(1, 0, 0), glm::pi<float>() * 0.5f);
|
||||
glm::vec4 I = glm::rotateZ(glm::vec4(1, 0, 0,1 ), glm::pi<float>() * 0.5f);
|
||||
glm::mat4 O = glm::orientation(glm::normalize(glm::vec3(1)), glm::vec3(0, 0, 1));
|
||||
|
||||
return Error;
|
||||
}
|
||||
|
||||
int test_rotateX()
|
||||
{
|
||||
int Error = 0;
|
||||
|
||||
glm::vec3 D = glm::rotateX(glm::vec3(1, 0, 0), glm::pi<float>() * 0.5f);
|
||||
glm::vec4 E = glm::rotateX(glm::vec4(1, 0, 0, 1), glm::pi<float>() * 0.5f);
|
||||
|
||||
return Error;
|
||||
}
|
||||
|
||||
int test_rotateY()
|
||||
{
|
||||
int Error = 0;
|
||||
|
||||
glm::vec3 F = glm::rotateY(glm::vec3(1, 0, 0), glm::pi<float>() * 0.5f);
|
||||
glm::vec4 G = glm::rotateY(glm::vec4(1, 0, 0, 1), glm::pi<float>() * 0.5f);
|
||||
|
||||
return Error;
|
||||
}
|
||||
|
||||
|
||||
int test_rotateZ()
|
||||
{
|
||||
int Error = 0;
|
||||
|
||||
glm::vec3 H = glm::rotateZ(glm::vec3(1, 0, 0), glm::pi<float>() * 0.5f);
|
||||
glm::vec4 I = glm::rotateZ(glm::vec4(1, 0, 0,1 ), glm::pi<float>() * 0.5f);
|
||||
|
||||
return Error;
|
||||
}
|
||||
|
||||
int test_orientation()
|
||||
{
|
||||
int Error = 0;
|
||||
|
||||
glm::mat4 O = glm::orientation(glm::normalize(glm::vec3(1)), glm::vec3(0, 0, 1));
|
||||
|
||||
return Error;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
int Error = 0;
|
||||
|
||||
Error += test_rotate();
|
||||
Error += test_rotateX();
|
||||
Error += test_rotateY();
|
||||
Error += test_rotateZ();
|
||||
Error += test_orientation();
|
||||
|
||||
return Error;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,180 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2013-02-04
|
||||
// Updated : 2013-02-04
|
||||
// Licence : This source is under MIT licence
|
||||
// File : test/gtx/gtx_scalar_relational.cpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define GLM_FORCE_RADIANS
|
||||
#include <glm/glm.hpp>
|
||||
#include <glm/gtx/scalar_relational.hpp>
|
||||
#include <cstdio>
|
||||
|
||||
int test_lessThan()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
Error += glm::lessThan(0, 1) ? 0 : 1;
|
||||
Error += glm::lessThan(1, 0) ? 1 : 0;
|
||||
Error += glm::lessThan(0, 0) ? 1 : 0;
|
||||
Error += glm::lessThan(1, 1) ? 1 : 0;
|
||||
Error += glm::lessThan(0.0f, 1.0f) ? 0 : 1;
|
||||
Error += glm::lessThan(1.0f, 0.0f) ? 1 : 0;
|
||||
Error += glm::lessThan(0.0f, 0.0f) ? 1 : 0;
|
||||
Error += glm::lessThan(1.0f, 1.0f) ? 1 : 0;
|
||||
Error += glm::lessThan(0.0, 1.0) ? 0 : 1;
|
||||
Error += glm::lessThan(1.0, 0.0) ? 1 : 0;
|
||||
Error += glm::lessThan(0.0, 0.0) ? 1 : 0;
|
||||
Error += glm::lessThan(1.0, 1.0) ? 1 : 0;
|
||||
|
||||
return Error;
|
||||
}
|
||||
|
||||
int test_lessThanEqual()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
Error += glm::lessThanEqual(0, 1) ? 0 : 1;
|
||||
Error += glm::lessThanEqual(1, 0) ? 1 : 0;
|
||||
Error += glm::lessThanEqual(0, 0) ? 0 : 1;
|
||||
Error += glm::lessThanEqual(1, 1) ? 0 : 1;
|
||||
Error += glm::lessThanEqual(0.0f, 1.0f) ? 0 : 1;
|
||||
Error += glm::lessThanEqual(1.0f, 0.0f) ? 1 : 0;
|
||||
Error += glm::lessThanEqual(0.0f, 0.0f) ? 0 : 1;
|
||||
Error += glm::lessThanEqual(1.0f, 1.0f) ? 0 : 1;
|
||||
Error += glm::lessThanEqual(0.0, 1.0) ? 0 : 1;
|
||||
Error += glm::lessThanEqual(1.0, 0.0) ? 1 : 0;
|
||||
Error += glm::lessThanEqual(0.0, 0.0) ? 0 : 1;
|
||||
Error += glm::lessThanEqual(1.0, 1.0) ? 0 : 1;
|
||||
|
||||
return Error;
|
||||
}
|
||||
|
||||
int test_greaterThan()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
Error += glm::greaterThan(0, 1) ? 1 : 0;
|
||||
Error += glm::greaterThan(1, 0) ? 0 : 1;
|
||||
Error += glm::greaterThan(0, 0) ? 1 : 0;
|
||||
Error += glm::greaterThan(1, 1) ? 1 : 0;
|
||||
Error += glm::greaterThan(0.0f, 1.0f) ? 1 : 0;
|
||||
Error += glm::greaterThan(1.0f, 0.0f) ? 0 : 1;
|
||||
Error += glm::greaterThan(0.0f, 0.0f) ? 1 : 0;
|
||||
Error += glm::greaterThan(1.0f, 1.0f) ? 1 : 0;
|
||||
Error += glm::greaterThan(0.0, 1.0) ? 1 : 0;
|
||||
Error += glm::greaterThan(1.0, 0.0) ? 0 : 1;
|
||||
Error += glm::greaterThan(0.0, 0.0) ? 1 : 0;
|
||||
Error += glm::greaterThan(1.0, 1.0) ? 1 : 0;
|
||||
|
||||
return Error;
|
||||
}
|
||||
|
||||
int test_greaterThanEqual()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
Error += glm::greaterThanEqual(0, 1) ? 1 : 0;
|
||||
Error += glm::greaterThanEqual(1, 0) ? 0 : 1;
|
||||
Error += glm::greaterThanEqual(0, 0) ? 0 : 1;
|
||||
Error += glm::greaterThanEqual(1, 1) ? 0 : 1;
|
||||
Error += glm::greaterThanEqual(0.0f, 1.0f) ? 1 : 0;
|
||||
Error += glm::greaterThanEqual(1.0f, 0.0f) ? 0 : 1;
|
||||
Error += glm::greaterThanEqual(0.0f, 0.0f) ? 0 : 1;
|
||||
Error += glm::greaterThanEqual(1.0f, 1.0f) ? 0 : 1;
|
||||
Error += glm::greaterThanEqual(0.0, 1.0) ? 1 : 0;
|
||||
Error += glm::greaterThanEqual(1.0, 0.0) ? 0 : 1;
|
||||
Error += glm::greaterThanEqual(0.0, 0.0) ? 0 : 1;
|
||||
Error += glm::greaterThanEqual(1.0, 1.0) ? 0 : 1;
|
||||
|
||||
return Error;
|
||||
}
|
||||
|
||||
int test_equal()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
Error += glm::equal(0, 1) ? 1 : 0;
|
||||
Error += glm::equal(1, 0) ? 1 : 0;
|
||||
Error += glm::equal(0, 0) ? 0 : 1;
|
||||
Error += glm::equal(1, 1) ? 0 : 1;
|
||||
Error += glm::equal(0.0f, 1.0f) ? 1 : 0;
|
||||
Error += glm::equal(1.0f, 0.0f) ? 1 : 0;
|
||||
Error += glm::equal(0.0f, 0.0f) ? 0 : 1;
|
||||
Error += glm::equal(1.0f, 1.0f) ? 0 : 1;
|
||||
Error += glm::equal(0.0, 1.0) ? 1 : 0;
|
||||
Error += glm::equal(1.0, 0.0) ? 1 : 0;
|
||||
Error += glm::equal(0.0, 0.0) ? 0 : 1;
|
||||
Error += glm::equal(1.0, 1.0) ? 0 : 1;
|
||||
|
||||
return Error;
|
||||
}
|
||||
|
||||
int test_notEqual()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
Error += glm::notEqual(0, 1) ? 0 : 1;
|
||||
Error += glm::notEqual(1, 0) ? 0 : 1;
|
||||
Error += glm::notEqual(0, 0) ? 1 : 0;
|
||||
Error += glm::notEqual(1, 1) ? 1 : 0;
|
||||
Error += glm::notEqual(0.0f, 1.0f) ? 0 : 1;
|
||||
Error += glm::notEqual(1.0f, 0.0f) ? 0 : 1;
|
||||
Error += glm::notEqual(0.0f, 0.0f) ? 1 : 0;
|
||||
Error += glm::notEqual(1.0f, 1.0f) ? 1 : 0;
|
||||
Error += glm::notEqual(0.0, 1.0) ? 0 : 1;
|
||||
Error += glm::notEqual(1.0, 0.0) ? 0 : 1;
|
||||
Error += glm::notEqual(0.0, 0.0) ? 1 : 0;
|
||||
Error += glm::notEqual(1.0, 1.0) ? 1 : 0;
|
||||
|
||||
return Error;
|
||||
}
|
||||
|
||||
int test_any()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
Error += glm::any(true) ? 0 : 1;
|
||||
Error += glm::any(false) ? 1 : 0;
|
||||
|
||||
return Error;
|
||||
}
|
||||
|
||||
int test_all()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
Error += glm::all(true) ? 0 : 1;
|
||||
Error += glm::all(false) ? 1 : 0;
|
||||
|
||||
return Error;
|
||||
}
|
||||
|
||||
int test_not()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
Error += glm::not_(true) ? 1 : 0;
|
||||
Error += glm::not_(false) ? 0 : 1;
|
||||
|
||||
return Error;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
int Error = 0;
|
||||
|
||||
Error += test_lessThan();
|
||||
Error += test_lessThanEqual();
|
||||
Error += test_greaterThan();
|
||||
Error += test_greaterThanEqual();
|
||||
Error += test_equal();
|
||||
Error += test_notEqual();
|
||||
Error += test_any();
|
||||
Error += test_all();
|
||||
Error += test_not();
|
||||
|
||||
return Error;
|
||||
}
|
||||
@@ -0,0 +1,305 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2010-09-16
|
||||
// Updated : 2010-09-16
|
||||
// Licence : This source is under MIT licence
|
||||
// File : test/gtx/simd-mat4.cpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define GLM_FORCE_RADIANS
|
||||
#include <glm/glm.hpp>
|
||||
#include <glm/gtc/matrix_transform.hpp>
|
||||
#include <glm/gtc/quaternion.hpp>
|
||||
#include <glm/gtc/random.hpp>
|
||||
#include <glm/gtx/simd_vec4.hpp>
|
||||
#include <glm/gtx/simd_mat4.hpp>
|
||||
#include <iostream>
|
||||
#include <cstdio>
|
||||
#include <ctime>
|
||||
#include <vector>
|
||||
|
||||
#if(GLM_ARCH != GLM_ARCH_PURE)
|
||||
|
||||
std::vector<float> test_detA(std::vector<glm::mat4> const & Data)
|
||||
{
|
||||
std::vector<float> Test(Data.size());
|
||||
|
||||
std::clock_t TimeStart = clock();
|
||||
|
||||
for(std::size_t i = 0; i < Test.size() - 1; ++i)
|
||||
Test[i] = glm::determinant(Data[i]);
|
||||
|
||||
std::clock_t TimeEnd = clock();
|
||||
printf("Det A: %ld\n", TimeEnd - TimeStart);
|
||||
|
||||
return Test;
|
||||
}
|
||||
|
||||
std::vector<float> test_detB(std::vector<glm::mat4> const & Data)
|
||||
{
|
||||
std::vector<float> Test(Data.size());
|
||||
|
||||
std::clock_t TimeStart = clock();
|
||||
|
||||
for(std::size_t i = 0; i < Test.size() - 1; ++i)
|
||||
{
|
||||
_mm_prefetch((char*)&Data[i + 1], _MM_HINT_T0);
|
||||
glm::simdMat4 m(Data[i]);
|
||||
glm::simdVec4 d(glm::detail::sse_slow_det_ps((__m128 const * const)&m));
|
||||
glm::vec4 v;//(d);
|
||||
Test[i] = v.x;
|
||||
}
|
||||
|
||||
std::clock_t TimeEnd = clock();
|
||||
printf("Det B: %ld\n", TimeEnd - TimeStart);
|
||||
|
||||
return Test;
|
||||
}
|
||||
|
||||
std::vector<float> test_detC(std::vector<glm::mat4> const & Data)
|
||||
{
|
||||
std::vector<float> Test(Data.size());
|
||||
|
||||
std::clock_t TimeStart = clock();
|
||||
|
||||
for(std::size_t i = 0; i < Test.size() - 1; ++i)
|
||||
{
|
||||
_mm_prefetch((char*)&Data[i + 1], _MM_HINT_T0);
|
||||
glm::simdMat4 m(Data[i]);
|
||||
glm::simdVec4 d(glm::detail::sse_det_ps((__m128 const * const)&m));
|
||||
glm::vec4 v;//(d);
|
||||
Test[i] = v.x;
|
||||
}
|
||||
|
||||
std::clock_t TimeEnd = clock();
|
||||
printf("Det C: %ld\n", TimeEnd - TimeStart);
|
||||
|
||||
return Test;
|
||||
}
|
||||
|
||||
std::vector<float> test_detD(std::vector<glm::mat4> const & Data)
|
||||
{
|
||||
std::vector<float> Test(Data.size());
|
||||
|
||||
std::clock_t TimeStart = clock();
|
||||
|
||||
for(std::size_t i = 0; i < Test.size() - 1; ++i)
|
||||
{
|
||||
_mm_prefetch((char*)&Data[i + 1], _MM_HINT_T0);
|
||||
glm::simdMat4 m(Data[i]);
|
||||
glm::simdVec4 d(glm::detail::sse_detd_ps((__m128 const * const)&m));
|
||||
glm::vec4 v;//(d);
|
||||
Test[i] = v.x;
|
||||
}
|
||||
|
||||
std::clock_t TimeEnd = clock();
|
||||
printf("Det D: %ld\n", TimeEnd - TimeStart);
|
||||
|
||||
return Test;
|
||||
}
|
||||
|
||||
void test_invA(std::vector<glm::mat4> const & Data, std::vector<glm::mat4> & Out)
|
||||
{
|
||||
//std::vector<float> Test(Data.size());
|
||||
Out.resize(Data.size());
|
||||
|
||||
std::clock_t TimeStart = clock();
|
||||
|
||||
for(std::size_t i = 0; i < Out.size() - 1; ++i)
|
||||
{
|
||||
Out[i] = glm::inverse(Data[i]);
|
||||
}
|
||||
|
||||
std::clock_t TimeEnd = clock();
|
||||
printf("Inv A: %ld\n", TimeEnd - TimeStart);
|
||||
}
|
||||
|
||||
void test_invC(std::vector<glm::mat4> const & Data, std::vector<glm::mat4> & Out)
|
||||
{
|
||||
//std::vector<float> Test(Data.size());
|
||||
Out.resize(Data.size());
|
||||
|
||||
std::clock_t TimeStart = clock();
|
||||
|
||||
for(std::size_t i = 0; i < Out.size() - 1; ++i)
|
||||
{
|
||||
_mm_prefetch((char*)&Data[i + 1], _MM_HINT_T0);
|
||||
glm::simdMat4 m(Data[i]);
|
||||
glm::simdMat4 o;
|
||||
glm::detail::sse_inverse_fast_ps((__m128 const * const)&m, (__m128 *)&o);
|
||||
Out[i] = *(glm::mat4*)&o;
|
||||
}
|
||||
|
||||
std::clock_t TimeEnd = clock();
|
||||
printf("Inv C: %ld\n", TimeEnd - TimeStart);
|
||||
}
|
||||
|
||||
void test_invD(std::vector<glm::mat4> const & Data, std::vector<glm::mat4> & Out)
|
||||
{
|
||||
//std::vector<float> Test(Data.size());
|
||||
Out.resize(Data.size());
|
||||
|
||||
std::clock_t TimeStart = clock();
|
||||
|
||||
for(std::size_t i = 0; i < Out.size() - 1; ++i)
|
||||
{
|
||||
_mm_prefetch((char*)&Data[i + 1], _MM_HINT_T0);
|
||||
glm::simdMat4 m(Data[i]);
|
||||
glm::simdMat4 o;
|
||||
glm::detail::sse_inverse_ps((__m128 const * const)&m, (__m128 *)&o);
|
||||
Out[i] = *(glm::mat4*)&o;
|
||||
}
|
||||
|
||||
std::clock_t TimeEnd = clock();
|
||||
printf("Inv D: %ld\n", TimeEnd - TimeStart);
|
||||
}
|
||||
|
||||
void test_mulA(std::vector<glm::mat4> const & Data, std::vector<glm::mat4> & Out)
|
||||
{
|
||||
//std::vector<float> Test(Data.size());
|
||||
Out.resize(Data.size());
|
||||
|
||||
std::clock_t TimeStart = clock();
|
||||
|
||||
for(std::size_t i = 0; i < Out.size() - 1; ++i)
|
||||
{
|
||||
Out[i] = Data[i] * Data[i];
|
||||
}
|
||||
|
||||
std::clock_t TimeEnd = clock();
|
||||
printf("Mul A: %ld\n", TimeEnd - TimeStart);
|
||||
}
|
||||
|
||||
void test_mulD(std::vector<glm::mat4> const & Data, std::vector<glm::mat4> & Out)
|
||||
{
|
||||
//std::vector<float> Test(Data.size());
|
||||
Out.resize(Data.size());
|
||||
|
||||
std::clock_t TimeStart = clock();
|
||||
|
||||
for(std::size_t i = 0; i < Out.size() - 1; ++i)
|
||||
{
|
||||
_mm_prefetch((char*)&Data[i + 1], _MM_HINT_T0);
|
||||
glm::simdMat4 m(Data[i]);
|
||||
glm::simdMat4 o;
|
||||
glm::detail::sse_mul_ps((__m128 const * const)&m, (__m128 const * const)&m, (__m128*)&o);
|
||||
Out[i] = *(glm::mat4*)&o;
|
||||
}
|
||||
|
||||
std::clock_t TimeEnd = clock();
|
||||
printf("Mul D: %ld\n", TimeEnd - TimeStart);
|
||||
}
|
||||
|
||||
int test_compute_glm()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int test_compute_gtx()
|
||||
{
|
||||
std::vector<glm::vec4> Output(1000000);
|
||||
|
||||
std::clock_t TimeStart = clock();
|
||||
|
||||
for(std::size_t k = 0; k < Output.size(); ++k)
|
||||
{
|
||||
float i = float(k) / 1000.f + 0.001f;
|
||||
glm::vec3 A = glm::normalize(glm::vec3(i));
|
||||
glm::vec3 B = glm::cross(A, glm::normalize(glm::vec3(1, 1, 2)));
|
||||
glm::mat4 C = glm::rotate(glm::mat4(1.0f), i, B);
|
||||
glm::mat4 D = glm::scale(C, glm::vec3(0.8f, 1.0f, 1.2f));
|
||||
glm::mat4 E = glm::translate(D, glm::vec3(1.4f, 1.2f, 1.1f));
|
||||
glm::mat4 F = glm::perspective(i, 1.5f, 0.1f, 1000.f);
|
||||
glm::mat4 G = glm::inverse(F * E);
|
||||
glm::vec3 H = glm::unProject(glm::vec3(i), G, F, E[3]);
|
||||
glm::vec3 I = glm::any(glm::isnan(glm::project(H, G, F, E[3]))) ? glm::vec3(2) : glm::vec3(1);
|
||||
glm::mat4 J = glm::lookAt(glm::normalize(glm::max(B, glm::vec3(0.001f))), H, I);
|
||||
glm::mat4 K = glm::transpose(J);
|
||||
glm::quat L = glm::normalize(glm::quat_cast(K));
|
||||
glm::vec4 M = L * glm::smoothstep(K[3], J[3], glm::vec4(i));
|
||||
glm::mat4 N = glm::mat4(glm::normalize(glm::max(M, glm::vec4(0.001f))), K[3], J[3], glm::vec4(i));
|
||||
glm::mat4 O = N * glm::inverse(N);
|
||||
glm::vec4 P = O * glm::reflect(N[3], glm::vec4(A, 1.0f));
|
||||
glm::vec4 Q = glm::vec4(glm::dot(M, P));
|
||||
glm::vec4 R = glm::quat(Q.w, glm::vec3(Q)) * P;
|
||||
Output[k] = R;
|
||||
}
|
||||
|
||||
std::clock_t TimeEnd = clock();
|
||||
printf("test_compute_gtx: %ld\n", TimeEnd - TimeStart);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
int Error = 0;
|
||||
|
||||
std::vector<glm::mat4> Data(64 * 64 * 1);
|
||||
for(std::size_t i = 0; i < Data.size(); ++i)
|
||||
Data[i] = glm::mat4(
|
||||
glm::vec4(glm::linearRand(glm::vec4(-2.0f), glm::vec4(2.0f))),
|
||||
glm::vec4(glm::linearRand(glm::vec4(-2.0f), glm::vec4(2.0f))),
|
||||
glm::vec4(glm::linearRand(glm::vec4(-2.0f), glm::vec4(2.0f))),
|
||||
glm::vec4(glm::linearRand(glm::vec4(-2.0f), glm::vec4(2.0f))));
|
||||
|
||||
{
|
||||
std::vector<glm::mat4> TestInvA;
|
||||
test_invA(Data, TestInvA);
|
||||
}
|
||||
{
|
||||
std::vector<glm::mat4> TestInvC;
|
||||
test_invC(Data, TestInvC);
|
||||
}
|
||||
{
|
||||
std::vector<glm::mat4> TestInvD;
|
||||
test_invD(Data, TestInvD);
|
||||
}
|
||||
|
||||
{
|
||||
std::vector<glm::mat4> TestA;
|
||||
test_mulA(Data, TestA);
|
||||
}
|
||||
{
|
||||
std::vector<glm::mat4> TestD;
|
||||
test_mulD(Data, TestD);
|
||||
}
|
||||
|
||||
{
|
||||
std::vector<float> TestDetA = test_detA(Data);
|
||||
std::vector<float> TestDetB = test_detB(Data);
|
||||
std::vector<float> TestDetD = test_detD(Data);
|
||||
std::vector<float> TestDetC = test_detC(Data);
|
||||
|
||||
for(std::size_t i = 0; i < TestDetA.size(); ++i)
|
||||
if(TestDetA[i] != TestDetB[i] && TestDetC[i] != TestDetB[i] && TestDetC[i] != TestDetD[i])
|
||||
return 1;
|
||||
}
|
||||
|
||||
// shuffle test
|
||||
glm::simdVec4 A(1.0f, 2.0f, 3.0f, 4.0f);
|
||||
glm::simdVec4 B(5.0f, 6.0f, 7.0f, 8.0f);
|
||||
//__m128 C = _mm_shuffle_ps(A.Data, B.Data, _MM_SHUFFLE(1, 0, 1, 0));
|
||||
|
||||
Error += test_compute_glm();
|
||||
Error += test_compute_gtx();
|
||||
|
||||
float Det = glm::determinant(glm::simdMat4(1.0));
|
||||
Error += Det == 1.0f ? 0 : 1;
|
||||
|
||||
glm::simdMat4 D = glm::matrixCompMult(glm::simdMat4(1.0), glm::simdMat4(1.0));
|
||||
|
||||
return Error;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
int main()
|
||||
{
|
||||
int Error = 0;
|
||||
|
||||
return Error;
|
||||
}
|
||||
|
||||
#endif//(GLM_ARCH != GLM_ARCH_PURE)
|
||||
@@ -0,0 +1,50 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2010-09-16
|
||||
// Updated : 2010-09-16
|
||||
// Licence : This source is under MIT licence
|
||||
// File : test/gtx/simd-vec4.cpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define GLM_FORCE_RADIANS
|
||||
#include <glm/glm.hpp>
|
||||
#include <glm/gtx/simd_vec4.hpp>
|
||||
#include <cstdio>
|
||||
|
||||
#if(GLM_ARCH != GLM_ARCH_PURE)
|
||||
|
||||
int main()
|
||||
{
|
||||
glm::simdVec4 A1(0.0f, 0.1f, 0.2f, 0.3f);
|
||||
glm::simdVec4 B1(0.4f, 0.5f, 0.6f, 0.7f);
|
||||
glm::simdVec4 C1 = A1 + B1;
|
||||
glm::simdVec4 D1 = A1.swizzle<glm::X, glm::Z, glm::Y, glm::W>();
|
||||
glm::simdVec4 E1(glm::vec4(1.0f));
|
||||
glm::vec4 F1 = glm::vec4_cast(E1);
|
||||
//glm::vec4 G1(E1);
|
||||
|
||||
//printf("A1(%2.3f, %2.3f, %2.3f, %2.3f)\n", A1.x, A1.y, A1.z, A1.w);
|
||||
//printf("B1(%2.3f, %2.3f, %2.3f, %2.3f)\n", B1.x, B1.y, B1.z, B1.w);
|
||||
//printf("C1(%2.3f, %2.3f, %2.3f, %2.3f)\n", C1.x, C1.y, C1.z, C1.w);
|
||||
//printf("D1(%2.3f, %2.3f, %2.3f, %2.3f)\n", D1.x, D1.y, D1.z, D1.w);
|
||||
|
||||
__m128 value = _mm_set1_ps(0.0f);
|
||||
__m128 data = _mm_cmpeq_ps(value, value);
|
||||
__m128 add0 = _mm_add_ps(data, data);
|
||||
|
||||
glm::simdVec4 GNI(add0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
int main()
|
||||
{
|
||||
int Error = 0;
|
||||
|
||||
return Error;
|
||||
}
|
||||
|
||||
#endif//(GLM_ARCH != GLM_ARCH_PURE)
|
||||
@@ -0,0 +1,108 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2013-10-25
|
||||
// Updated : 2013-10-25
|
||||
// Licence : This source is under MIT licence
|
||||
// File : test/gtx/associated_min_max.cpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define GLM_FORCE_RADIANS
|
||||
#include <glm/glm.hpp>
|
||||
#include <glm/gtc/type_precision.hpp>
|
||||
#include <glm/gtx/spline.hpp>
|
||||
|
||||
namespace catmullRom
|
||||
{
|
||||
int test()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
glm::vec2 Result2 = glm::catmullRom(
|
||||
glm::vec2(0.0f, 0.0f),
|
||||
glm::vec2(1.0f, 0.0f),
|
||||
glm::vec2(1.0f, 1.0f),
|
||||
glm::vec2(0.0f, 1.0f), 0.5f);
|
||||
|
||||
glm::vec3 Result3 = glm::catmullRom(
|
||||
glm::vec3(0.0f, 0.0f, 0.0f),
|
||||
glm::vec3(1.0f, 0.0f, 0.0f),
|
||||
glm::vec3(1.0f, 1.0f, 0.0f),
|
||||
glm::vec3(0.0f, 1.0f, 0.0f), 0.5f);
|
||||
|
||||
glm::vec4 Result4 = glm::catmullRom(
|
||||
glm::vec4(0.0f, 0.0f, 0.0f, 1.0f),
|
||||
glm::vec4(1.0f, 0.0f, 0.0f, 1.0f),
|
||||
glm::vec4(1.0f, 1.0f, 0.0f, 1.0f),
|
||||
glm::vec4(0.0f, 1.0f, 0.0f, 1.0f), 0.5f);
|
||||
|
||||
return Error;
|
||||
}
|
||||
}//catmullRom
|
||||
|
||||
namespace hermite
|
||||
{
|
||||
int test()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
glm::vec2 Result2 = glm::hermite(
|
||||
glm::vec2(0.0f, 0.0f),
|
||||
glm::vec2(1.0f, 0.0f),
|
||||
glm::vec2(1.0f, 1.0f),
|
||||
glm::vec2(0.0f, 1.0f), 0.5f);
|
||||
|
||||
glm::vec3 Result3 = glm::hermite(
|
||||
glm::vec3(0.0f, 0.0f, 0.0f),
|
||||
glm::vec3(1.0f, 0.0f, 0.0f),
|
||||
glm::vec3(1.0f, 1.0f, 0.0f),
|
||||
glm::vec3(0.0f, 1.0f, 0.0f), 0.5f);
|
||||
|
||||
glm::vec4 Result4 = glm::hermite(
|
||||
glm::vec4(0.0f, 0.0f, 0.0f, 1.0f),
|
||||
glm::vec4(1.0f, 0.0f, 0.0f, 1.0f),
|
||||
glm::vec4(1.0f, 1.0f, 0.0f, 1.0f),
|
||||
glm::vec4(0.0f, 1.0f, 0.0f, 1.0f), 0.5f);
|
||||
|
||||
return Error;
|
||||
}
|
||||
}//catmullRom
|
||||
|
||||
namespace cubic
|
||||
{
|
||||
int test()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
glm::vec2 Result2 = glm::cubic(
|
||||
glm::vec2(0.0f, 0.0f),
|
||||
glm::vec2(1.0f, 0.0f),
|
||||
glm::vec2(1.0f, 1.0f),
|
||||
glm::vec2(0.0f, 1.0f), 0.5f);
|
||||
|
||||
glm::vec3 Result3 = glm::cubic(
|
||||
glm::vec3(0.0f, 0.0f, 0.0f),
|
||||
glm::vec3(1.0f, 0.0f, 0.0f),
|
||||
glm::vec3(1.0f, 1.0f, 0.0f),
|
||||
glm::vec3(0.0f, 1.0f, 0.0f), 0.5f);
|
||||
|
||||
glm::vec4 Result = glm::cubic(
|
||||
glm::vec4(0.0f, 0.0f, 0.0f, 1.0f),
|
||||
glm::vec4(1.0f, 0.0f, 0.0f, 1.0f),
|
||||
glm::vec4(1.0f, 1.0f, 0.0f, 1.0f),
|
||||
glm::vec4(0.0f, 1.0f, 0.0f, 1.0f), 0.5f);
|
||||
|
||||
return Error;
|
||||
}
|
||||
}//catmullRom
|
||||
|
||||
int main()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
Error += catmullRom::test();
|
||||
Error += hermite::test();
|
||||
Error += cubic::test();
|
||||
|
||||
return Error;
|
||||
}
|
||||
@@ -0,0 +1,90 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2011-09-01
|
||||
// Updated : 2011-09-01
|
||||
// Licence : This source is under MIT licence
|
||||
// File : test/gtx/string_cast.cpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define GLM_FORCE_RADIANS
|
||||
#include <glm/glm.hpp>
|
||||
#include <glm/gtx/string_cast.hpp>
|
||||
#include <iostream>
|
||||
#include <limits>
|
||||
|
||||
int test_string_cast_scalar()
|
||||
{
|
||||
int Error = 0;
|
||||
|
||||
float B1(1.0);
|
||||
std::string B2 = glm::to_string(B1);
|
||||
Error += B2 != std::string("float(1.000000)") ? 1 : 0;
|
||||
|
||||
double C1(1.0);
|
||||
std::string C2 = glm::to_string(C1);
|
||||
Error += C2 != std::string("double(1.000000)") ? 1 : 0;
|
||||
|
||||
return Error;
|
||||
}
|
||||
|
||||
int test_string_cast_vector()
|
||||
{
|
||||
int Error = 0;
|
||||
|
||||
glm::vec2 A1(1, 2);
|
||||
std::string A2 = glm::to_string(A1);
|
||||
Error += A2 != std::string("fvec2(1.000000, 2.000000)") ? 1 : 0;
|
||||
|
||||
glm::vec3 B1(1, 2, 3);
|
||||
std::string B2 = glm::to_string(B1);
|
||||
Error += B2 != std::string("fvec3(1.000000, 2.000000, 3.000000)") ? 1 : 0;
|
||||
|
||||
glm::vec4 C1(1, 2, 3, 4);
|
||||
std::string C2 = glm::to_string(C1);
|
||||
Error += C2 != std::string("fvec4(1.000000, 2.000000, 3.000000, 4.000000)") ? 1 : 0;
|
||||
|
||||
glm::ivec2 D1(1, 2);
|
||||
std::string D2 = glm::to_string(D1);
|
||||
Error += D2 != std::string("ivec2(1, 2)") ? 1 : 0;
|
||||
|
||||
glm::ivec3 E1(1, 2, 3);
|
||||
std::string E2 = glm::to_string(E1);
|
||||
Error += E2 != std::string("ivec3(1, 2, 3)") ? 1 : 0;
|
||||
|
||||
glm::ivec4 F1(1, 2, 3, 4);
|
||||
std::string F2 = glm::to_string(F1);
|
||||
Error += F2 != std::string("ivec4(1, 2, 3, 4)") ? 1 : 0;
|
||||
|
||||
glm::dvec2 J1(1, 2);
|
||||
std::string J2 = glm::to_string(J1);
|
||||
Error += J2 != std::string("dvec2(1.000000, 2.000000)") ? 1 : 0;
|
||||
|
||||
glm::dvec3 K1(1, 2, 3);
|
||||
std::string K2 = glm::to_string(K1);
|
||||
Error += K2 != std::string("dvec3(1.000000, 2.000000, 3.000000)") ? 1 : 0;
|
||||
|
||||
glm::dvec4 L1(1, 2, 3, 4);
|
||||
std::string L2 = glm::to_string(L1);
|
||||
Error += L2 != std::string("dvec4(1.000000, 2.000000, 3.000000, 4.000000)") ? 1 : 0;
|
||||
|
||||
return Error;
|
||||
}
|
||||
|
||||
int test_string_cast_matrix()
|
||||
{
|
||||
int Error = 0;
|
||||
|
||||
return Error;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
int Error = 0;
|
||||
Error += test_string_cast_scalar();
|
||||
Error += test_string_cast_vector();
|
||||
Error += test_string_cast_matrix();
|
||||
return Error;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,69 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2011-05-15
|
||||
// Updated : 2011-05-15
|
||||
// Licence : This source is under MIT licence
|
||||
// File : test/gtx/vector_angle.cpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define GLM_FORCE_RADIANS
|
||||
#include <glm/gtc/constants.hpp>
|
||||
#include <glm/gtx/vector_angle.hpp>
|
||||
#include <iostream>
|
||||
#include <limits>
|
||||
|
||||
int test_angle()
|
||||
{
|
||||
int Error = 0;
|
||||
|
||||
float AngleA = glm::angle(glm::vec2(1, 0), glm::normalize(glm::vec2(1, 1)));
|
||||
Error += glm::epsilonEqual(AngleA, glm::pi<float>() * 0.25f, 0.01f) ? 0 : 1;
|
||||
float AngleB = glm::angle(glm::vec3(1, 0, 0), glm::normalize(glm::vec3(1, 1, 0)));
|
||||
Error += glm::epsilonEqual(AngleB, glm::pi<float>() * 0.25f, 0.01f) ? 0 : 1;
|
||||
float AngleC = glm::angle(glm::vec4(1, 0, 0, 0), glm::normalize(glm::vec4(1, 1, 0, 0)));
|
||||
Error += glm::epsilonEqual(AngleC, glm::pi<float>() * 0.25f, 0.01f) ? 0 : 1;
|
||||
|
||||
return Error;
|
||||
}
|
||||
|
||||
int test_orientedAngle_vec2()
|
||||
{
|
||||
int Error = 0;
|
||||
|
||||
float AngleA = glm::orientedAngle(glm::vec2(1, 0), glm::normalize(glm::vec2(1, 1)));
|
||||
Error += AngleA == glm::pi<float>() * 0.25f ? 0 : 1;
|
||||
float AngleB = glm::orientedAngle(glm::vec2(0, 1), glm::normalize(glm::vec2(1, 1)));
|
||||
Error += AngleB == -glm::pi<float>() * 0.25f ? 0 : 1;
|
||||
float AngleC = glm::orientedAngle(glm::normalize(glm::vec2(1, 1)), glm::vec2(0, 1));
|
||||
Error += AngleC == glm::pi<float>() * 0.25f ? 0 : 1;
|
||||
|
||||
return Error;
|
||||
}
|
||||
|
||||
int test_orientedAngle_vec3()
|
||||
{
|
||||
int Error = 0;
|
||||
|
||||
float AngleA = glm::orientedAngle(glm::vec3(1, 0, 0), glm::normalize(glm::vec3(1, 1, 0)), glm::vec3(0, 0, 1));
|
||||
Error += AngleA == glm::pi<float>() * 0.25f ? 0 : 1;
|
||||
float AngleB = glm::orientedAngle(glm::vec3(0, 1, 0), glm::normalize(glm::vec3(1, 1, 0)), glm::vec3(0, 0, 1));
|
||||
Error += AngleB == -glm::pi<float>() * 0.25f ? 0 : 1;
|
||||
float AngleC = glm::orientedAngle(glm::normalize(glm::vec3(1, 1, 0)), glm::vec3(0, 1, 0), glm::vec3(0, 0, 1));
|
||||
Error += AngleC == glm::pi<float>() * 0.25f ? 0 : 1;
|
||||
|
||||
return Error;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
Error += test_angle();
|
||||
Error += test_orientedAngle_vec2();
|
||||
Error += test_orientedAngle_vec3();
|
||||
|
||||
return Error;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,89 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2011-11-23
|
||||
// Updated : 2011-11-23
|
||||
// Licence : This source is under MIT licence
|
||||
// File : test/gtx/vector_query.cpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define GLM_FORCE_RADIANS
|
||||
#include <glm/glm.hpp>
|
||||
#include <glm/gtx/vector_query.hpp>
|
||||
|
||||
int test_areCollinear()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
{
|
||||
bool TestA = glm::areCollinear(glm::vec2(-1), glm::vec2(1), 0.00001f);
|
||||
Error += TestA ? 0 : 1;
|
||||
}
|
||||
|
||||
{
|
||||
bool TestA = glm::areCollinear(glm::vec3(-1), glm::vec3(1), 0.00001f);
|
||||
Error += TestA ? 0 : 1;
|
||||
}
|
||||
|
||||
{
|
||||
bool TestA = glm::areCollinear(glm::vec4(-1), glm::vec4(1), 0.00001f);
|
||||
Error += TestA ? 0 : 1;
|
||||
}
|
||||
|
||||
return Error;
|
||||
}
|
||||
|
||||
int test_areOrthogonal()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
bool TestA = glm::areOrthogonal(glm::vec2(1, 0), glm::vec2(0, 1), 0.00001f);
|
||||
Error += TestA ? 0 : 1;
|
||||
|
||||
return Error;
|
||||
}
|
||||
|
||||
int test_isNormalized()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
bool TestA = glm::isNormalized(glm::vec4(1, 0, 0, 0), 0.00001f);
|
||||
Error += TestA ? 0 : 1;
|
||||
|
||||
return Error;
|
||||
}
|
||||
|
||||
int test_isNull()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
bool TestA = glm::isNull(glm::vec4(0), 0.00001f);
|
||||
Error += TestA ? 0 : 1;
|
||||
|
||||
return Error;
|
||||
}
|
||||
|
||||
int test_areOrthonormal()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
bool TestA = glm::areOrthonormal(glm::vec2(1, 0), glm::vec2(0, 1), 0.00001f);
|
||||
Error += TestA ? 0 : 1;
|
||||
|
||||
return Error;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
int Error(0);
|
||||
|
||||
Error += test_areCollinear();
|
||||
Error += test_areOrthogonal();
|
||||
Error += test_isNormalized();
|
||||
Error += test_isNull();
|
||||
Error += test_areOrthonormal();
|
||||
|
||||
return Error;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user