diff --git a/CMakeLists.txt b/CMakeLists.txt index cb03700f..b67c3a3b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,6 +14,11 @@ if(NOT GLM_TEST_ENABLE) message(STATUS "GLM is a header only library, no need to build it. Set the option GLM_TEST_ENABLE with ON to build and run the test bench") endif() +option(GLM_PERF_ENABLE "GLM perf" OFF) +if(GLM_PERF_ENABLE) + add_definitions(-DGLM_TEST_ENABLE_PERF) +endif() + if(("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") OR ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") OR (("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel") AND UNIX)) option(GLM_TEST_ENABLE_CXX_98 "Enable C++ 98" OFF) option(GLM_TEST_ENABLE_CXX_0X "Enable C++ 0x" OFF) diff --git a/glm/gtc/quaternion.hpp b/glm/gtc/quaternion.hpp index b31428d1..5c8ed128 100644 --- a/glm/gtc/quaternion.hpp +++ b/glm/gtc/quaternion.hpp @@ -82,7 +82,6 @@ namespace glm // Implicit basic constructors GLM_FUNC_DECL tquat(); - GLM_FUNC_DECL tquat(tquat const & q); template GLM_FUNC_DECL tquat(tquat const & q); diff --git a/glm/gtc/quaternion.inl b/glm/gtc/quaternion.inl index b86b2f51..f214eff3 100644 --- a/glm/gtc/quaternion.inl +++ b/glm/gtc/quaternion.inl @@ -86,11 +86,6 @@ namespace detail # endif {} - template - GLM_FUNC_QUALIFIER tquat::tquat(tquat const & q) - : x(q.x), y(q.y), z(q.z), w(q.w) - {} - template template GLM_FUNC_QUALIFIER tquat::tquat(tquat const & q) diff --git a/glm/gtx/dual_quaternion.hpp b/glm/gtx/dual_quaternion.hpp index 803a9f84..4e6b724e 100644 --- a/glm/gtx/dual_quaternion.hpp +++ b/glm/gtx/dual_quaternion.hpp @@ -75,7 +75,6 @@ namespace glm // Implicit basic constructors GLM_FUNC_DECL tdualquat(); - GLM_FUNC_DECL tdualquat(tdualquat const & d); template GLM_FUNC_DECL tdualquat(tdualquat const & d); diff --git a/glm/gtx/dual_quaternion.inl b/glm/gtx/dual_quaternion.inl index 31b2c8d9..bde0b52d 100644 --- a/glm/gtx/dual_quaternion.inl +++ b/glm/gtx/dual_quaternion.inl @@ -53,11 +53,6 @@ namespace glm # endif {} - template - GLM_FUNC_QUALIFIER tdualquat::tdualquat(tdualquat const & d) - : real(d.real), dual(d.dual) - {} - template template GLM_FUNC_QUALIFIER tdualquat::tdualquat(tdualquat const & d) diff --git a/readme.txt b/readme.txt index c3993d72..aeec6c4e 100644 --- a/readme.txt +++ b/readme.txt @@ -58,15 +58,6 @@ Features: - Added GTC_integer extension, promoted GTX_bit - Added GTC_round extension, promoted GTX_bit -Deprecation: -- Removed degrees for function parameters -- Removed GLM_FORCE_RADIANS, active by default -- Removed VC 2005 / 8 and 2008 / 9 support -- Removed GCC 3.4 to 4.5 support -- Removed LLVM GCC support -- Removed LLVM 2.6 to 2.9 support -- Removed CUDA 3.0 to 4.0 support - Improvements: - Rely on C++11 to implement isinf and isnan - Removed GLM_FORCE_CUDA, Cuda is implicitly detected @@ -79,7 +70,8 @@ Improvements: - Optimized bitfieldReverse and bitCount functions - Optimized matrix-vector multiple performance with Cuda #257, #258 - Reduced integer type redifinitions #233 -- Rewrite of GTX_fast_trigonometry #264 #265 +- Rewrited of GTX_fast_trigonometry #264 #265 +- Made types trivially copyable #263 Fixes: - Fixed std::nextafter not supported with C++11 on Android #217 @@ -90,6 +82,15 @@ Fixes: - Fixed implicit conversion from another tvec2 type to another tvec2 #241 - Fixed lack of consistency of quat and dualquat constructors +Deprecation: +- Removed degrees for function parameters +- Removed GLM_FORCE_RADIANS, active by default +- Removed VC 2005 / 8 and 2008 / 9 support +- Removed GCC 3.4 to 4.5 support +- Removed LLVM GCC support +- Removed LLVM 2.6 to 2.9 support +- Removed CUDA 3.0 to 4.0 support + ================================================================================ GLM 0.9.5.4: 2014-06-21 -------------------------------------------------------------------------------- diff --git a/test/core/core_func_common.cpp b/test/core/core_func_common.cpp index 61256f30..528d665d 100644 --- a/test/core/core_func_common.cpp +++ b/test/core/core_func_common.cpp @@ -1018,7 +1018,6 @@ int main() int Error(0); Error += sign::test(); - Error += sign::perf(); Error += test_floor(); Error += test_modf(); Error += test_floatBitsToInt(); @@ -1032,6 +1031,10 @@ int main() Error += test_isnan(); Error += test_isinf(); +# ifdef GLM_TEST_ENABLE_PERF + Error += sign::perf(); +# endif + return Error; } diff --git a/test/core/core_func_integer.cpp b/test/core/core_func_integer.cpp index 2d241c92..b07d08c9 100644 --- a/test/core/core_func_integer.cpp +++ b/test/core/core_func_integer.cpp @@ -1321,11 +1321,8 @@ int main() int Error = 0; Error += ::bitCount::test(); - Error += ::bitCount::perf(); Error += ::bitfieldReverse::test(); - Error += ::bitfieldReverse::perf(); Error += ::findMSB::test(); - Error += ::findMSB::perf(); Error += ::findLSB::test(); Error += ::umulExtended::test(); Error += ::imulExtended::test(); @@ -1334,5 +1331,11 @@ int main() Error += ::bitfieldInsert::test(); Error += ::bitfieldExtract::test(); +# ifdef GLM_TEST_ENABLE_PERF + Error += ::bitCount::perf(); + Error += ::bitfieldReverse::perf(); + Error += ::findMSB::perf(); +# endif + return Error; } diff --git a/test/core/core_func_matrix.cpp b/test/core/core_func_matrix.cpp index 11ea854f..14f52545 100644 --- a/test/core/core_func_matrix.cpp +++ b/test/core/core_func_matrix.cpp @@ -240,11 +240,15 @@ int main() Error += test_transpose(); Error += test_determinant(); Error += test_inverse(); + +# ifdef GLM_TEST_ENABLE_PERF for(std::size_t i = 0; i < 1; ++i) { Error += test_inverse_perf(i, "mat4"); Error += test_inverse_perf(i, "dmat4"); } +# endif + return Error; } diff --git a/test/core/core_type_vec4.cpp b/test/core/core_type_vec4.cpp index e373dbad..3bd25f40 100644 --- a/test/core/core_type_vec4.cpp +++ b/test/core/core_type_vec4.cpp @@ -425,8 +425,11 @@ int main() std::size_t const Size(1000000); - Error += test_vec4_perf_AoS(Size); - Error += test_vec4_perf_SoA(Size); +# ifdef GLM_TEST_ENABLE_PERF + Error += test_vec4_perf_AoS(Size); + Error += test_vec4_perf_SoA(Size); +# endif + Error += test_vec4_ctor(); Error += test_vec4_size(); Error += test_vec4_operators(); diff --git a/test/gtc/gtc_bitfield.cpp b/test/gtc/gtc_bitfield.cpp index 6c112a26..b203c749 100644 --- a/test/gtc/gtc_bitfield.cpp +++ b/test/gtc/gtc_bitfield.cpp @@ -637,7 +637,9 @@ int main() Error += ::bitfieldInterleave::test(); //Error += ::bitRevert::test(); - Error += ::mask::perf(); +# ifdef GLM_TEST_ENABLE_PERF + Error += ::mask::perf(); +# endif return Error; } diff --git a/test/gtc/gtc_quaternion.cpp b/test/gtc/gtc_quaternion.cpp index a78d06cf..6f897e9f 100644 --- a/test/gtc/gtc_quaternion.cpp +++ b/test/gtc/gtc_quaternion.cpp @@ -273,6 +273,20 @@ int test_quat_ctr() { int Error(0); +#if (GLM_LANG & GLM_LANG_CXX11_FLAG) || (GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC12) +// Error += std::is_trivially_default_constructible::value ? 0 : 1; +// Error += std::is_trivially_default_constructible::value ? 0 : 1; +// Error += std::is_trivially_copy_assignable::value ? 0 : 1; +// Error += std::is_trivially_copy_assignable::value ? 0 : 1; + Error += std::is_trivially_copyable::value ? 0 : 1; + Error += std::is_trivially_copyable::value ? 0 : 1; + + Error += std::has_trivial_copy_constructor::value ? 0 : 1; + Error += std::has_trivial_copy_constructor::value ? 0 : 1; + Error += std::is_copy_constructible::value ? 0 : 1; + Error += std::is_copy_constructible::value ? 0 : 1; +#endif + # if GLM_HAS_INITIALIZER_LISTS { glm::quat A{0, 1, 2, 3}; diff --git a/test/gtc/gtc_round.cpp b/test/gtc/gtc_round.cpp index 1550e7ac..13137b3f 100644 --- a/test/gtc/gtc_round.cpp +++ b/test/gtc/gtc_round.cpp @@ -299,7 +299,10 @@ int main() Error += isPowerOfTwo::test(); Error += ceilPowerOfTwo::test(); - Error += ceilPowerOfTwo::perf(); + +# ifdef GLM_TEST_ENABLE_PERF + Error += ceilPowerOfTwo::perf(); +# endif return Error; } diff --git a/test/gtx/gtx_fast_trigonometry.cpp b/test/gtx/gtx_fast_trigonometry.cpp index 9a18db53..d8d84ce6 100644 --- a/test/gtx/gtx_fast_trigonometry.cpp +++ b/test/gtx/gtx_fast_trigonometry.cpp @@ -31,6 +31,7 @@ namespace fastCos const std::clock_t time_default = timestamp3 - timestamp2; std::printf("fastCos Time %d clocks\n", static_cast(time_fast)); std::printf("cos Time %d clocks\n", static_cast(time_default)); + return time_fast < time_default ? 0 : 1; } }//namespace fastCos @@ -53,6 +54,7 @@ namespace fastSin const std::clock_t time_default = timestamp3 - timestamp2; std::printf("fastSin Time %d clocks\n", static_cast(time_fast)); std::printf("sin Time %d clocks\n", static_cast(time_default)); + return time_fast < time_default ? 0 : 1; } }//namespace fastSin @@ -75,6 +77,7 @@ namespace fastTan const std::clock_t time_default = timestamp3 - timestamp2; std::printf("fastTan Time %d clocks\n", static_cast(time_fast)); std::printf("tan Time %d clocks\n", static_cast(time_default)); + return time_fast < time_default ? 0 : 1; } }//namespace fastTan @@ -97,6 +100,7 @@ namespace fastAcos const std::clock_t time_default = timestamp3 - timestamp2; std::printf("fastAcos Time %d clocks\n", static_cast(time_fast)); std::printf("acos Time %d clocks\n", static_cast(time_default)); + return time_fast < time_default ? 0 : 1; } }//namespace fastAcos @@ -119,6 +123,7 @@ namespace fastAsin const std::clock_t time_default = timestamp3 - timestamp2; std::printf("fastAsin Time %d clocks\n", static_cast(time_fast)); std::printf("asin Time %d clocks\n", static_cast(time_default)); + return time_fast < time_default ? 0 : 1; } }//namespace fastAsin @@ -141,6 +146,7 @@ namespace fastAtan const std::clock_t time_default = timestamp3 - timestamp2; std::printf("fastAtan Time %d clocks\n", static_cast(time_fast)); std::printf("atan Time %d clocks\n", static_cast(time_default)); + return time_fast < time_default ? 0 : 1; } }//namespace fastAtan @@ -149,12 +155,14 @@ int main() { int Error(0); - Error += ::fastCos::perf(); - Error += ::fastSin::perf(); - Error += ::fastTan::perf(); - Error += ::fastAcos::perf(); - Error += ::fastAsin::perf(); - Error += ::fastAtan::perf(); +# ifdef GLM_TEST_ENABLE_PERF + Error += ::fastCos::perf(); + Error += ::fastSin::perf(); + Error += ::fastTan::perf(); + Error += ::fastAcos::perf(); + Error += ::fastAsin::perf(); + Error += ::fastAtan::perf(); +# endif return Error; }