1![glm](doc/logo.png) 2 3[OpenGL Mathematics](http://glm.g-truc.net/) (*GLM*) is a header only C++ mathematics library for graphics software based on the [OpenGL Shading Language (GLSL) specifications](https://www.opengl.org/registry/doc/GLSLangSpec.4.50.diff.pdf). 4 5*GLM* provides classes and functions designed and implemented with the same naming conventions and functionalities than *GLSL* so that anyone who knows *GLSL*, can use *GLM* as well in C++. 6 7This project isn't limited to *GLSL* features. An extension system, based on the *GLSL* extension conventions, provides extended capabilities: matrix transformations, quaternions, data packing, random numbers, noise, etc... 8 9This library works perfectly with *[OpenGL](https://www.opengl.org)* but it also ensures interoperability with other third party libraries and SDK. It is a good candidate for software rendering (raytracing / rasterisation), image processing, physic simulations and any development context that requires a simple and convenient mathematics library. 10 11*GLM* is written in C++98 but can take advantage of C++11 when supported by the compiler. It is a platform independent library with no dependence and it officially supports the following compilers: 12- [Apple Clang 4.0](https://developer.apple.com/library/mac/documentation/CompilerTools/Conceptual/LLVMCompilerOverview/index.html) and higher 13- [GCC](http://gcc.gnu.org/) 4.2 and higher 14- [Intel C++ Composer](https://software.intel.com/en-us/intel-compilers) XE 2013 and higher 15- [LLVM](http://llvm.org/) 3.0 and higher 16- [Visual C++](http://www.visualstudio.com/) 2010 and higher 17- [CUDA](https://developer.nvidia.com/about-cuda) 4.0 and higher (experimental) 18- Any conform C++98 or C++11 compiler 19 20For more information about *GLM*, please have a look at the [manual](http://glm.g-truc.net/0.9.7/glm-0.9.7.pdf) and the [API reference documentation](http://glm.g-truc.net/0.9.7/api/index.html). 21The source code and the documentation are licensed under the [Happy Bunny License (Modified MIT) or the MIT License](./copying.txt). 22 23Thanks for contributing to the project by [submitting issues](https://github.com/g-truc/glm/issues) for bug reports and feature requests. Any feedback is welcome at [glm@g-truc.net](mailto://glm@g-truc.net). 24 25 26```c++ 27#include <glm/vec3.hpp> // glm::vec3 28#include <glm/vec4.hpp> // glm::vec4 29#include <glm/mat4x4.hpp> // glm::mat4 30#include <glm/gtc/matrix_transform.hpp> // glm::translate, glm::rotate, glm::scale, glm::perspective 31#include <glm/gtc/constants.hpp> // glm::pi 32 33glm::mat4 camera(float Translate, glm::vec2 const & Rotate) 34{ 35 glm::mat4 Projection = glm::perspective(glm::pi<float>() * 0.25f, 4.0f / 3.0f, 0.1f, 100.f); 36 glm::mat4 View = glm::translate(glm::mat4(1.0f), glm::vec3(0.0f, 0.0f, -Translate)); 37 View = glm::rotate(View, Rotate.y, glm::vec3(-1.0f, 0.0f, 0.0f)); 38 View = glm::rotate(View, Rotate.x, glm::vec3(0.0f, 1.0f, 0.0f)); 39 glm::mat4 Model = glm::scale(glm::mat4(1.0f), glm::vec3(0.5f)); 40 return Projection * View * Model; 41} 42``` 43 44## Project Health 45 46| Service | System | Compiler | Status | 47| ------- | ------ | -------- | ------ | 48| [Drone](https://drone.io/github.com/g-truc/glm) | Linux 64 bits | GCC 4.6.3 | [![Build Status](https://drone.io/github.com/g-truc/glm/status.png)](https://drone.io/github.com/g-truc/glm/latest) | 49 50## [Lastest release](https://github.com/g-truc/glm/releases/latest) 51 52## Release notes 53 54#### [GLM 0.9.8.5](https://github.com/g-truc/glm/tree/0.9.8) - 2017-0X-XX 55##### Fixes: 56- Fixed Clang version detection from source #608 57 58#### [GLM 0.9.8.4](https://github.com/g-truc/glm/releases/tag/0.9.8.4) - 2017-01-22 59##### Fixes: 60- Fixed GTC_packing test failing on GCC x86 due to denorms #212 #577 61- Fixed POPCNT optimization build in Clang #512 62- Fixed intersectRayPlane returns true in parallel case #578 63- Fixed GCC 6.2 compiler warnings #580 64- Fixed GTX_matrix_decompose decompose #582 #448 65- Fixed GCC 4.5 and older build #566 66- Fixed Visual C++ internal error when declaring a global vec type with siwzzle expression enabled #594 67- Fixed GLM_FORCE_CXX11 with Clang and libstlc++ which wasn't using C++11 STL features. #604 68 69#### [GLM 0.9.8.3](https://github.com/g-truc/glm/releases/tag/0.9.8.3) - 2016-11-12 70##### Improvements: 71- Broader support of GLM_FORCE_UNRESTRICTED_GENTYPE #378 72 73##### Fixes: 74- Fixed Android build error with C++11 compiler but C++98 STL #284 #564 75- Fixed GTX_transform2 shear* functions #403 76- Fixed interaction between GLM_FORCE_UNRESTRICTED_GENTYPE and ortho function #568 77- Fixed bitCount with AVX on 32 bit builds #567 78- Fixed CMake find_package with version specification #572 #573 79 80#### [GLM 0.9.8.2](https://github.com/g-truc/glm/releases/tag/0.9.8.2) - 2016-11-01 81##### Improvements: 82- Added Visual C++ 15 detection 83- Added Clang 4.0 detection 84- Added warning messages when using GLM_FORCE_CXX** but the compiler 85 is known to not fully support the requested C++ version #555 86- Refactored GLM_COMPILER_VC values 87- Made quat, vec, mat type component length() static #565 88 89##### Fixes: 90- Fixed Visual C++ constexpr build error #555, #556 91 92#### [GLM 0.9.8.1](https://github.com/g-truc/glm/releases/tag/0.9.8.1) - 2016-09-25 93##### Improvements: 94- Optimized quaternion log function #554 95 96##### Fixes: 97- Fixed GCC warning filtering, replaced -pedantic by -Wpedantic 98- Fixed SIMD faceforward bug. #549 99- Fixed GCC 4.8 with C++11 compilation option #550 100- Fixed Visual Studio aligned type W4 warning #548 101- Fixed packing/unpacking function fixed for 5_6_5 and 5_5_5_1 #552 102 103#### [GLM 0.9.8.0](https://github.com/g-truc/glm/releases/tag/0.9.8.0) - 2016-09-11 104##### Features: 105- Added right and left handed projection and clip control support #447 #415 #119 106- Added compNormalize and compScale functions to GTX_component_wise 107- Added packF3x9_E1x5 and unpackF3x9_E1x5 to GTC_packing for RGB9E5 #416 108- Added (un)packHalf to GTC_packing 109- Added (un)packUnorm and (un)packSnorm to GTC_packing 110- Added 16bit pack and unpack to GTC_packing 111- Added 8bit pack and unpack to GTC_packing 112- Added missing bvec* && and || operators 113- Added iround and uround to GTC_integer, fast round on positive values 114- Added raw SIMD API 115- Added 'aligned' qualifiers 116- Added GTC_type_aligned with aligned *vec* types 117- Added GTC_functions extension 118- Added quaternion version of isnan and isinf #521 119- Added lowestBitValue to GTX_bit #536 120- Added GLM_FORCE_UNRESTRICTED_GENTYPE allowing non basic genType #543 121 122##### Improvements: 123- Improved SIMD and swizzle operators interactions with GCC and Clang #474 124- Improved GTC_random linearRand documentation 125- Improved GTC_reciprocal documentation 126- Improved GLM_FORCE_EXPLICIT_CTOR coverage #481 127- Improved OpenMP support detection for Clang, GCC, ICC and VC 128- Improved GTX_wrap for SIMD friendliness 129- Added constexpr for *vec*, *mat*, *quat* and *dual_quat* types #493 130- Added NEON instruction set detection 131- Added MIPS CPUs detection 132- Added PowerPC CPUs detection 133- Use Cuda built-in function for abs function implementation with Cuda compiler 134- Factorized GLM_COMPILER_LLVM and GLM_COMPILER_APPLE_CLANG into GLM_COMPILER_CLANG 135- No more warnings for use of long long 136- Added more information to build messages 137 138##### Fixes: 139- Fixed GTX_extended_min_max filename typo #386 140- Fixed intersectRayTriangle to not do any unintentional backface culling 141- Fixed long long warnings when using C++98 on GCC and Clang #482 142- Fixed sign with signed integer function on non-x86 architecture 143- Fixed strict aliasing warnings #473 144- Fixed missing vec1 overload to length2 and distance2 functions #431 145- Fixed GLM test '/fp:fast' and '/Za' command-line options are incompatible 146- Fixed quaterion to mat3 cast function mat3_cast from GTC_quaternion #542 147- Fixed GLM_GTX_io for Cuda #547 #546 148 149##### Deprecation: 150- Removed GLM_FORCE_SIZE_FUNC define 151- Deprecated GLM_GTX_simd_vec4 extension 152- Deprecated GLM_GTX_simd_mat4 extension 153- Deprecated GLM_GTX_simd_quat extension 154- Deprecated GLM_SWIZZLE, use GLM_FORCE_SWIZZLE instead 155- Deprecated GLM_MESSAGES, use GLM_FORCE_MESSAGES instead 156 157-------------------------------------------------------------------------------- 158#### [GLM 0.9.7.6](https://github.com/g-truc/glm/releases/tag/0.9.7.6) - 2016-07-16 159##### Improvements: 160- Added pkg-config file #509 161- Updated list of compiler versions detected 162- Improved C++ 11 STL detection #523 163 164##### Fixes: 165- Fixed STL for C++11 detection on ICC #510 166- Fixed missing vec1 overload to length2 and distance2 functions #431 167- Fixed long long warnings when using C++98 on GCC and Clang #482 168- Fixed scalar reciprocal functions (GTC_reciprocal) #520 169 170-------------------------------------------------------------------------------- 171#### [GLM 0.9.7.5](https://github.com/g-truc/glm/releases/tag/0.9.7.5) - 2016-05-24 172##### Improvements: 173- Added Visual C++ Clang toolset detection 174 175##### Fixes: 176- Fixed uaddCarry warning #497 177- Fixed roundPowerOfTwo and floorPowerOfTwo #503 178- Fixed Visual C++ SIMD instruction set automatic detection in 64 bits 179- Fixed to_string when used with GLM_FORCE_INLINE #506 180- Fixed GLM_FORCE_INLINE with binary vec4 operators 181- Fixed GTX_extended_min_max filename typo #386 182- Fixed intersectRayTriangle to not do any unintentional backface culling 183 184-------------------------------------------------------------------------------- 185#### [GLM 0.9.7.4](https://github.com/g-truc/glm/releases/tag/0.9.7.4) - 2016-03-19 186##### Fixes: 187- Fixed asinh and atanh warning with C++98 STL #484 188- Fixed polar coordinates function latitude #485 189- Fixed outerProduct defintions and operator signatures for mat2x4 and vec4 #475 190- Fixed eulerAngles precision error, returns NaN #451 191- Fixed undefined reference errors #489 192- Fixed missing GLM_PLATFORM_CYGWIN declaration #495 193- Fixed various undefined reference errors #490 194 195-------------------------------------------------------------------------------- 196#### [GLM 0.9.7.3](https://github.com/g-truc/glm/releases/tag/0.9.7.3) - 2016-02-21 197##### Improvements: 198- Added AVX512 detection 199 200##### Fixes: 201- Fixed CMake policy warning 202- Fixed GCC 6.0 detection #477 203- Fixed Clang build on Windows #479 204- Fixed 64 bits constants warnings on GCC #463 205 206-------------------------------------------------------------------------------- 207#### [GLM 0.9.7.2](https://github.com/g-truc/glm/releases/tag/0.9.7.2) - 2016-01-03 208##### Fixes: 209- Fixed GTC_round floorMultiple/ceilMultiple #412 210- Fixed GTC_packing unpackUnorm3x10_1x2 #414 211- Fixed GTC_matrix_inverse affineInverse #192 212- Fixed ICC on Linux build errors #449 213- Fixed ldexp and frexp compilation errors 214- Fixed "Declaration shadows a field" warning #468 215- Fixed 'GLM_COMPILER_VC2005 is not defined' warning #468 216- Fixed various 'X is not defined' warnings #468 217- Fixed missing unary + operator #435 218- Fixed Cygwin build errors when using C++11 #405 219 220-------------------------------------------------------------------------------- 221#### [GLM 0.9.7.1](https://github.com/g-truc/glm/releases/tag/0.9.7.1) - 2015-09-07 222##### Improvements: 223- Improved constexpr for constant functions coverage #198 224- Added to_string for quat and dual_quat in GTX_string_cast #375 225- Improved overall execution time of unit tests #396 226 227##### Fixes: 228- Fixed strict alignment warnings #235 #370 229- Fixed link errors on compilers not supported default function #377 230- Fixed compilation warnings in vec4 231- Fixed non-identity quaternions for equal vectors #234 232- Fixed excessive GTX_fast_trigonometry execution time #396 233- Fixed Visual Studio 2015 'hides class member' warnings #394 234- Fixed builtin bitscan never being used #392 235- Removed unused func_noise.* files #398 236 237-------------------------------------------------------------------------------- 238#### [GLM 0.9.7.0](https://github.com/g-truc/glm/releases/tag/0.9.7.0) - 2015-08-02 239##### Features: 240- Added GTC_color_space: convertLinearToSRGB and convertSRGBToLinear functions 241- Added 'fmod' overload to GTX_common with tests #308 242- Left handed perspective and lookAt functions #314 243- Added functions eulerAngleXYZ and extractEulerAngleXYZ #311 244- Added <glm/gtx/hash.hpp> to perform std::hash on GLM types #320 #367 245- Added <glm/gtx/wrap.hpp> for texcoord wrapping 246- Added static components and precision members to all vector and quat types #350 247- Added .gitignore #349 248- Added support of defaulted functions to GLM types, to use them in unions #366 249 250##### Improvements: 251- Changed usage of __has_include to support Intel compiler #307 252- Specialized integer implementation of YCoCg-R #310 253- Don't show status message in 'FindGLM' if 'QUIET' option is set. #317 254- Added master branch continuous integration service on Linux 64 #332 255- Clarified manual regarding angle unit in GLM, added FAQ 11 #326 256- Updated list of compiler versions 257 258##### Fixes: 259- Fixed default precision for quat and dual_quat type #312 260- Fixed (u)int64 MSB/LSB handling on BE archs #306 261- Fixed multi-line comment warning in g++. #315 262- Fixed specifier removal by 'std::make_pair<>' #333 263- Fixed perspective fovy argument documentation #327 264- Removed -m64 causing build issues on Linux 32 #331 265- Fixed isfinite with C++98 compilers #343 266- Fixed Intel compiler build error on Linux #354 267- Fixed use of libstdc++ with Clang #351 268- Fixed quaternion pow #346 269- Fixed decompose warnings #373 270- Fixed matrix conversions #371 271 272##### Deprecation: 273- Removed integer specification for 'mod' in GTC_integer #308 274- Removed GTX_multiple, replaced by GTC_round 275 276-------------------------------------------------------------------------------- 277#### [GLM 0.9.6.3](https://github.com/g-truc/glm/releases/tag/0.9.6.3) - 2015-02-15 278- Fixed Android doesn't have C++ 11 STL #284 279 280-------------------------------------------------------------------------------- 281#### [GLM 0.9.6.2](https://github.com/g-truc/glm/releases/tag/0.9.6.2) - 2015-02-15 282##### Features: 283- Added display of GLM version with other GLM_MESSAGES 284- Added ARM instruction set detection 285 286-------------------------------------------------------------------------------- 287##### Improvements: 288- Removed assert for perspective with zFar < zNear #298 289- Added Visual Studio natvis support for vec1, quat and dualqual types 290- Cleaned up C++11 feature detections 291- Clarify GLM licensing 292 293##### Fixes: 294- Fixed faceforward build #289 295- Fixed conflict with Xlib #define True 1 #293 296- Fixed decompose function VS2010 templating issues #294 297- Fixed mat4x3 = mat2x3 * mat4x2 operator #297 298- Fixed warnings in F2x11_1x10 packing function in GTC_packing #295 299- Fixed Visual Studio natvis support for vec4 #288 300- Fixed GTC_packing *pack*norm*x* build and added tests #292 301- Disabled GTX_scalar_multiplication for GCC, failing to build tests #242 302- Fixed Visual C++ 2015 constexpr errors: Disabled only partial support 303- Fixed functions not inlined with Clang #302 304- Fixed memory corruption (undefined behaviour) #303 305 306-------------------------------------------------------------------------------- 307#### [GLM 0.9.6.1](https://github.com/g-truc/glm/releases/tag/0.9.6.1) - 2014-12-10 308##### Features: 309- Added GLM_LANG_CXX14_FLAG and GLM_LANG_CXX1Z_FLAG language feature flags 310- Added C++14 detection 311 312##### Improvements: 313- Clean up GLM_MESSAGES compilation log to report only detected capabilities 314 315##### Fixes: 316- Fixed scalar uaddCarry build error with Cuda #276 317- Fixed C++11 explicit conversion operators detection #282 318- Fixed missing explicit conversion when using integer log2 with *vec1 types 319- Fixed 64 bits integer GTX_string_cast to_string on VC 32 bit compiler 320- Fixed Android build issue, STL C++11 is not supported by the NDK #284 321- Fixed unsupported _BitScanForward64 and _BitScanReverse64 in VC10 322- Fixed Visual C++ 32 bit build #283 323- Fixed GLM_FORCE_SIZE_FUNC pragma message 324- Fixed C++98 only build 325- Fixed conflict between GTX_compatibility and GTC_quaternion #286 326- Fixed C++ language restriction using GLM_FORCE_CXX** 327 328-------------------------------------------------------------------------------- 329#### [GLM 0.9.6.0](https://github.com/g-truc/glm/releases/tag/0.9.6.0) - 2014-11-30 330##### Features: 331- Exposed template vector and matrix types in 'glm' namespace #239, #244 332- Added GTX_scalar_multiplication for C++ 11 compiler only #242 333- Added GTX_range for C++ 11 compiler only #240 334- Added closestPointOnLine function for tvec2 to GTX_closest_point #238 335- Added GTC_vec1 extension, *vec1 support to *vec* types 336- Updated GTX_associated_min_max with vec1 support 337- Added support of precision and integers to linearRand #230 338- Added Integer types support to GTX_string_cast #249 339- Added vec3 slerp #237 340- Added GTX_common with isdenomal #223 341- Added GLM_FORCE_SIZE_FUNC to replace .length() by .size() #245 342- Added GLM_FORCE_NO_CTOR_INIT 343- Added 'uninitialize' to explicitly not initialize a GLM type 344- Added GTC_bitfield extension, promoted GTX_bit 345- Added GTC_integer extension, promoted GTX_bit and GTX_integer 346- Added GTC_round extension, promoted GTX_bit 347- Added GLM_FORCE_EXPLICIT_CTOR to require explicit type conversions #269 348- Added GTX_type_aligned for aligned vector, matrix and quaternion types 349 350##### Improvements: 351- Rely on C++11 to implement isinf and isnan 352- Removed GLM_FORCE_CUDA, Cuda is implicitly detected 353- Separated Apple Clang and LLVM compiler detection 354- Used pragma once 355- Undetected C++ compiler automatically compile with GLM_FORCE_CXX98 and 356 GLM_FORCE_PURE 357- Added not function (from GLSL specification) on VC12 358- Optimized bitfieldReverse and bitCount functions 359- Optimized findLSB and findMSB functions. 360- Optimized matrix-vector multiple performance with Cuda #257, #258 361- Reduced integer type redifinitions #233 362- Rewrited of GTX_fast_trigonometry #264 #265 363- Made types trivially copyable #263 364- Removed <iostream> in GLM tests 365- Used std features within GLM without redeclaring 366- Optimized cot function #272 367- Optimized sign function #272 368- Added explicit cast from quat to mat3 and mat4 #275 369 370##### Fixes: 371- Fixed std::nextafter not supported with C++11 on Android #217 372- Fixed missing value_type for dual quaternion 373- Fixed return type of dual quaternion length 374- Fixed infinite loop in isfinite function with GCC #221 375- Fixed Visual Studio 14 compiler warnings 376- Fixed implicit conversion from another tvec2 type to another tvec2 #241 377- Fixed lack of consistency of quat and dualquat constructors 378- Fixed uaddCarray #253 379- Fixed float comparison warnings #270 380 381##### Deprecation: 382- Removed degrees for function parameters 383- Removed GLM_FORCE_RADIANS, active by default 384- Removed VC 2005 / 8 and 2008 / 9 support 385- Removed GCC 3.4 to 4.3 support 386- Removed LLVM GCC support 387- Removed LLVM 2.6 to 3.1 support 388- Removed CUDA 3.0 to 3.2 support 389 390-------------------------------------------------------------------------------- 391#### [GLM 0.9.5.4 - 2014-06-21](https://github.com/g-truc/glm/releases/tag/0.9.5.4) 392- Fixed non-utf8 character #196 393- Added FindGLM install for CMake #189 394- Fixed GTX_color_space - saturation #195 395- Fixed glm::isinf and glm::isnan for with Android NDK 9d #191 396- Fixed builtin GLM_ARCH_SSE4 #204 397- Optimized Quaternion vector rotation #205 398- Fixed missing doxygen @endcond tag #211 399- Fixed instruction set detection with Clang #158 400- Fixed orientate3 function #207 401- Fixed lerp when cosTheta is close to 1 in quaternion slerp #210 402- Added GTX_io for io with <iostream> #144 403- Fixed fastDistance ambiguity #215 404- Fixed tweakedInfinitePerspective #208 and added user-defined epsilon to 405 tweakedInfinitePerspective 406- Fixed std::copy and std::vector with GLM types #214 407- Fixed strict aliasing issues #212, #152 408- Fixed std::nextafter not supported with C++11 on Android #213 409- Fixed corner cases in exp and log functions for quaternions #199 410 411-------------------------------------------------------------------------------- 412#### GLM 0.9.5.3 - 2014-04-02 413- Added instruction set auto detection with Visual C++ using _M_IX86_FP - /arch 414 compiler argument 415- Fixed GTX_raw_data code dependency 416- Fixed GCC instruction set detection 417- Added GLM_GTX_matrix_transform_2d extension (#178, #176) 418- Fixed CUDA issues (#169, #168, #183, #182) 419- Added support for all extensions but GTX_string_cast to CUDA 420- Fixed strict aliasing warnings in GCC 4.8.1 / Android NDK 9c (#152) 421- Fixed missing bitfieldInterleave definisions 422- Fixed usubBorrow (#171) 423- Fixed eulerAngle*** not consistent for right-handed coordinate system (#173) 424- Added full tests for eulerAngle*** functions (#173) 425- Added workaround for a CUDA compiler bug (#186, #185) 426 427-------------------------------------------------------------------------------- 428#### GLM 0.9.5.2 - 2014-02-08 429- Fixed initializer list ambiguity (#159, #160) 430- Fixed warnings with the Android NDK 9c 431- Fixed non power of two matrix products 432- Fixed mix function link error 433- Fixed SSE code included in GLM tests on "pure" platforms 434- Fixed undefined reference to fastInverseSqrt (#161) 435- Fixed GLM_FORCE_RADIANS with <glm/ext.hpp> build error (#165) 436- Fix dot product clamp range for vector angle functions. (#163) 437- Tentative fix for strict aliasing warning in GCC 4.8.1 / Android NDK 9c (#152) 438- Fixed GLM_GTC_constants description brief (#162) 439 440-------------------------------------------------------------------------------- 441#### GLM 0.9.5.1 - 2014-01-11 442- Fixed angle and orientedAngle that sometimes return NaN values (#145) 443- Deprecated degrees for function parameters and display a message 444- Added possible static_cast conversion of GLM types (#72) 445- Fixed error 'inverse' is not a member of 'glm' from glm::unProject (#146) 446- Fixed mismatch between some declarations and definitions 447- Fixed inverse link error when using namespace glm; (#147) 448- Optimized matrix inverse and division code (#149) 449- Added intersectRayPlane function (#153) 450- Fixed outerProduct return type (#155) 451 452-------------------------------------------------------------------------------- 453#### GLM 0.9.5.0 - 2013-12-25 454- Added forward declarations (glm/fwd.hpp) for faster compilations 455- Added per feature headers 456- Minimized GLM internal dependencies 457- Improved Intel Compiler detection 458- Added bitfieldInterleave and _mm_bit_interleave_si128 functions 459- Added GTX_scalar_relational 460- Added GTX_dual_quaternion 461- Added rotation function to GTX_quaternion (#22) 462- Added precision variation of each type 463- Added quaternion comparison functions 464- Fixed GTX_multiple for negative value 465- Removed GTX_ocl_type extension 466- Fixed post increment and decrement operators 467- Fixed perspective with zNear == 0 (#71) 468- Removed l-value swizzle operators 469- Cleaned up compiler detection code for unsupported compilers 470- Replaced C cast by C++ casts 471- Fixed .length() that should return a int and not a size_t 472- Added GLM_FORCE_SIZE_T_LENGTH and glm::length_t 473- Removed unnecessary conversions 474- Optimized packing and unpacking functions 475- Removed the normalization of the up argument of lookAt function (#114) 476- Added low precision specializations of inversesqrt 477- Fixed ldexp and frexp implementations 478- Increased assert coverage 479- Increased static_assert coverage 480- Replaced GLM traits by STL traits when possible 481- Allowed including individual core feature 482- Increased unit tests completness 483- Added creating of a quaternion from two vectors 484- Added C++11 initializer lists 485- Fixed umulExtended and imulExtended implementations for vector types (#76) 486- Fixed CUDA coverage for GTC extensions 487- Added GTX_io extension 488- Improved GLM messages enabled when defining GLM_MESSAGES 489- Hidden matrix _inverse function implementation detail into private section 490 491-------------------------------------------------------------------------------- 492#### [GLM 0.9.4.6](https://github.com/g-truc/glm/releases/tag/0.9.4.6) - 2013-09-20 493- Fixed detection to select the last known compiler if newer version #106 494- Fixed is_int and is_uint code duplication with GCC and C++11 #107 495- Fixed test suite build while using Clang in C++11 mode 496- Added c++1y mode support in CMake test suite 497- Removed ms extension mode to CMake when no using Visual C++ 498- Added pedantic mode to CMake test suite for Clang and GCC 499- Added use of GCC frontend on Unix for ICC and Visual C++ fronted on Windows 500 for ICC 501- Added compilation errors for unsupported compiler versions 502- Fixed glm::orientation with GLM_FORCE_RADIANS defined #112 503- Fixed const ref issue on assignment operator taking a scalar parameter #116 504- Fixed glm::eulerAngleY implementation #117 505 506-------------------------------------------------------------------------------- 507#### GLM 0.9.4.5 - 2013-08-12 508- Fixed CUDA support 509- Fixed inclusion of intrinsics in "pure" mode #92 510- Fixed language detection on GCC when the C++0x mode isn't enabled #95 511- Fixed issue #97: register is deprecated in C++11 512- Fixed issue #96: CUDA issues 513- Added Windows CE detection #92 514- Added missing value_ptr for quaternions #99 515 516-------------------------------------------------------------------------------- 517#### GLM 0.9.4.4 - 2013-05-29 518- Fixed slerp when costheta is close to 1 #65 519- Fixed mat4x2 value_type constructor #70 520- Fixed glm.natvis for Visual C++ 12 #82 521- Added assert in inversesqrt to detect division by zero #61 522- Fixed missing swizzle operators #86 523- Fixed CUDA warnings #86 524- Fixed GLM natvis for VC11 #82 525- Fixed GLM_GTX_multiple with negative values #79 526- Fixed glm::perspective when zNear is zero #71 527 528-------------------------------------------------------------------------------- 529#### GLM 0.9.4.3 - 2013-03-20 530- Detected qualifier for Clang 531- Fixed C++11 mode for GCC, couldn't be enabled without MS extensions 532- Fixed squad, intermediate and exp quaternion functions 533- Fixed GTX_polar_coordinates euclidean function, takes a vec2 instead of a vec3 534- Clarify the license applying on the manual 535- Added a docx copy of the manual 536- Fixed GLM_GTX_matrix_interpolation 537- Fixed isnan and isinf on Android with Clang 538- Autodetected C++ version using __cplusplus value 539- Fixed mix for bool and bvec* third parameter 540 541-------------------------------------------------------------------------------- 542#### GLM 0.9.4.2 - 2013-02-14 543- Fixed compAdd from GTX_component_wise 544- Fixed SIMD support for Intel compiler on Windows 545- Fixed isnan and isinf for CUDA compiler 546- Fixed GLM_FORCE_RADIANS on glm::perspective 547- Fixed GCC warnings 548- Fixed packDouble2x32 on Xcode 549- Fixed mix for vec4 SSE implementation 550- Fixed 0x2013 dash character in comments that cause issue in Windows 551 Japanese mode 552- Fixed documentation warnings 553- Fixed CUDA warnings 554 555-------------------------------------------------------------------------------- 556#### GLM 0.9.4.1 - 2012-12-22 557- Improved half support: -0.0 case and implicit conversions 558- Fixed Intel Composer Compiler support on Linux 559- Fixed interaction between quaternion and euler angles 560- Fixed GTC_constants build 561- Fixed GTX_multiple 562- Fixed quat slerp using mix function when cosTheta close to 1 563- Improved fvec4SIMD and fmat4x4SIMD implementations 564- Fixed assert messages 565- Added slerp and lerp quaternion functions and tests 566 567-------------------------------------------------------------------------------- 568#### GLM 0.9.4.0 - 2012-11-18 569- Added Intel Composer Compiler support 570- Promoted GTC_espilon extension 571- Promoted GTC_ulp extension 572- Removed GLM website from the source repository 573- Added GLM_FORCE_RADIANS so that all functions takes radians for arguments 574- Fixed detection of Clang and LLVM GCC on MacOS X 575- Added debugger visualizers for Visual C++ 2012 576 577-------------------------------------------------------------------------------- 578#### [GLM 0.9.3.4](https://github.com/g-truc/glm/releases/tag/0.9.3.4) - 2012-06-30 579- Added SSE4 and AVX2 detection. 580- Removed VIRTREV_xstream and the incompatibility generated with GCC 581- Fixed C++11 compiler option for GCC 582- Removed MS language extension option for GCC (not fonctionnal) 583- Fixed bitfieldExtract for vector types 584- Fixed warnings 585- Fixed SSE includes 586 587-------------------------------------------------------------------------------- 588#### GLM 0.9.3.3 - 2012-05-10 589- Fixed isinf and isnan 590- Improved compatibility with Intel compiler 591- Added CMake test build options: SIMD, C++11, fast math and MS land ext 592- Fixed SIMD mat4 test on GCC 593- Fixed perspectiveFov implementation 594- Fixed matrixCompMult for none-square matrices 595- Fixed namespace issue on stream operators 596- Fixed various warnings 597- Added VC11 support 598 599-------------------------------------------------------------------------------- 600#### GLM 0.9.3.2 - 2012-03-15 601- Fixed doxygen documentation 602- Fixed Clang version detection 603- Fixed simd mat4 /= operator 604 605-------------------------------------------------------------------------------- 606#### GLM 0.9.3.1 - 2012-01-25 607- Fixed platform detection 608- Fixed warnings 609- Removed detail code from Doxygen doc 610 611-------------------------------------------------------------------------------- 612#### GLM 0.9.3.0 - 2012-01-09 613- Added CPP Check project 614- Fixed conflict with Windows headers 615- Fixed isinf implementation 616- Fixed Boost conflict 617- Fixed warnings 618 619-------------------------------------------------------------------------------- 620#### GLM 0.9.3.B - 2011-12-12 621- Added support for Chrone Native Client 622- Added epsilon constant 623- Removed value_size function from vector types 624- Fixed roundEven on GCC 625- Improved API documentation 626- Fixed modf implementation 627- Fixed step function accuracy 628- Fixed outerProduct 629 630-------------------------------------------------------------------------------- 631#### GLM 0.9.3.A - 2011-11-11 632- Improved doxygen documentation 633- Added new swizzle operators for C++11 compilers 634- Added new swizzle operators declared as functions 635- Added GLSL 4.20 length for vector and matrix types 636- Promoted GLM_GTC_noise extension: simplex, perlin, periodic noise functions 637- Promoted GLM_GTC_random extension: linear, gaussian and various random number 638generation distribution 639- Added GLM_GTX_constants: provides useful constants 640- Added extension versioning 641- Removed many unused namespaces 642- Fixed half based type contructors 643- Added GLSL core noise functions 644 645-------------------------------------------------------------------------------- 646#### [GLM 0.9.2.7](https://github.com/g-truc/glm/releases/tag/0.9.2.7) - 2011-10-24 647- Added more swizzling constructors 648- Added missing none-squared matrix products 649 650-------------------------------------------------------------------------------- 651#### [GLM 0.9.2.6](https://github.com/g-truc/glm/releases/tag/0.9.2.6) - 2011-10-01 652- Fixed half based type build on old GCC 653- Fixed /W4 warnings on Visual C++ 654- Fixed some missing l-value swizzle operators 655 656-------------------------------------------------------------------------------- 657#### GLM 0.9.2.5 - 2011-09-20 658- Fixed floatBitToXint functions 659- Fixed pack and unpack functions 660- Fixed round functions 661 662-------------------------------------------------------------------------------- 663#### GLM 0.9.2.4 - 2011-09-03 664- Fixed extensions bugs 665 666-------------------------------------------------------------------------------- 667#### GLM 0.9.2.3 - 2011-06-08 668- Fixed build issues 669 670-------------------------------------------------------------------------------- 671#### GLM 0.9.2.2 - 2011-06-02 672- Expend matrix constructors flexibility 673- Improved quaternion implementation 674- Fixed many warnings across platforms and compilers 675 676-------------------------------------------------------------------------------- 677#### GLM 0.9.2.1 - 2011-05-24 678- Automatically detect CUDA support 679- Improved compiler detection 680- Fixed errors and warnings in VC with C++ extensions disabled 681- Fixed and tested GLM_GTX_vector_angle 682- Fixed and tested GLM_GTX_rotate_vector 683 684-------------------------------------------------------------------------------- 685#### GLM 0.9.2.0 - 2011-05-09 686- Added CUDA support 687- Added CTest test suite 688- Added GLM_GTX_ulp extension 689- Added GLM_GTX_noise extension 690- Added GLM_GTX_matrix_interpolation extension 691- Updated quaternion slerp interpolation 692 693-------------------------------------------------------------------------------- 694#### [GLM 0.9.1.3](https://github.com/g-truc/glm/releases/tag/0.9.1.3) - 2011-05-07 695- Fixed bugs 696 697-------------------------------------------------------------------------------- 698#### GLM 0.9.1.2 - 2011-04-15 699- Fixed bugs 700 701-------------------------------------------------------------------------------- 702#### GLM 0.9.1.1 - 2011-03-17 703- Fixed bugs 704 705-------------------------------------------------------------------------------- 706#### GLM 0.9.1.0 - 2011-03-03 707- Fixed bugs 708 709-------------------------------------------------------------------------------- 710#### GLM 0.9.1.B - 2011-02-13 711- Updated API documentation 712- Improved SIMD implementation 713- Fixed Linux build 714 715-------------------------------------------------------------------------------- 716#### [GLM 0.9.0.8](https://github.com/g-truc/glm/releases/tag/0.9.0.8) - 2011-02-13 717- Added quaternion product operator. 718- Clarify that GLM is a header only library. 719 720-------------------------------------------------------------------------------- 721#### GLM 0.9.1.A - 2011-01-31 722- Added SIMD support 723- Added new swizzle functions 724- Improved static assert error message with C++0x static_assert 725- New setup system 726- Reduced branching 727- Fixed trunc implementation 728 729-------------------------------------------------------------------------------- 730#### [GLM 0.9.0.7](https://github.com/g-truc/glm/releases/tag/0.9.0.7) - 2011-01-30 731- Added GLSL 4.10 packing functions 732- Added == and != operators for every types. 733 734-------------------------------------------------------------------------------- 735#### GLM 0.9.0.6 - 2010-12-21 736- Many matrices bugs fixed 737 738-------------------------------------------------------------------------------- 739#### GLM 0.9.0.5 - 2010-11-01 740- Improved Clang support 741- Fixed bugs 742 743-------------------------------------------------------------------------------- 744#### GLM 0.9.0.4 - 2010-10-04 745- Added autoexp for GLM 746- Fixed bugs 747 748-------------------------------------------------------------------------------- 749#### GLM 0.9.0.3 - 2010-08-26 750- Fixed non-squared matrix operators 751 752-------------------------------------------------------------------------------- 753#### GLM 0.9.0.2 - 2010-07-08 754- Added GLM_GTX_int_10_10_10_2 755- Fixed bugs 756 757-------------------------------------------------------------------------------- 758#### GLM 0.9.0.1 - 2010-06-21 759- Fixed extensions errors 760 761-------------------------------------------------------------------------------- 762#### GLM 0.9.0.0 - 2010-05-25 763- Objective-C support 764- Fixed warnings 765- Updated documentation 766 767-------------------------------------------------------------------------------- 768#### GLM 0.9.B.2 - 2010-04-30 769- Git transition 770- Removed experimental code from releases 771- Fixed bugs 772 773-------------------------------------------------------------------------------- 774#### GLM 0.9.B.1 - 2010-04-03 775- Based on GLSL 4.00 specification 776- Added the new core functions 777- Added some implicit conversion support 778 779-------------------------------------------------------------------------------- 780#### GLM 0.9.A.2 - 2010-02-20 781- Improved some possible errors messages 782- Improved declarations and definitions match 783 784-------------------------------------------------------------------------------- 785#### GLM 0.9.A.1 - 2010-02-09 786- Removed deprecated features 787- Internal redesign 788 789-------------------------------------------------------------------------------- 790#### GLM 0.8.4.4 final - 2010-01-25 791- Fixed warnings 792 793-------------------------------------------------------------------------------- 794#### GLM 0.8.4.3 final - 2009-11-16 795- Fixed Half float arithmetic 796- Fixed setup defines 797 798-------------------------------------------------------------------------------- 799#### GLM 0.8.4.2 final - 2009-10-19 800- Fixed Half float adds 801 802-------------------------------------------------------------------------------- 803#### GLM 0.8.4.1 final - 2009-10-05 804- Updated documentation 805- Fixed MacOS X build 806 807-------------------------------------------------------------------------------- 808#### GLM 0.8.4.0 final - 2009-09-16 809- Added GCC 4.4 and VC2010 support 810- Added matrix optimizations 811 812-------------------------------------------------------------------------------- 813#### GLM 0.8.3.5 final - 2009-08-11 814- Fixed bugs 815 816-------------------------------------------------------------------------------- 817#### GLM 0.8.3.4 final - 2009-08-10 818- Updated GLM according GLSL 1.5 spec 819- Fixed bugs 820 821-------------------------------------------------------------------------------- 822#### GLM 0.8.3.3 final - 2009-06-25 823- Fixed bugs 824 825-------------------------------------------------------------------------------- 826#### GLM 0.8.3.2 final - 2009-06-04 827- Added GLM_GTC_quaternion 828- Added GLM_GTC_type_precision 829 830-------------------------------------------------------------------------------- 831#### GLM 0.8.3.1 final - 2009-05-21 832- Fixed old extension system. 833 834-------------------------------------------------------------------------------- 835#### GLM 0.8.3.0 final - 2009-05-06 836- Added stable extensions. 837- Added new extension system. 838 839-------------------------------------------------------------------------------- 840#### GLM 0.8.2.3 final - 2009-04-01 841- Fixed bugs. 842 843-------------------------------------------------------------------------------- 844#### GLM 0.8.2.2 final - 2009-02-24 845- Fixed bugs. 846 847-------------------------------------------------------------------------------- 848#### GLM 0.8.2.1 final - 2009-02-13 849- Fixed bugs. 850 851-------------------------------------------------------------------------------- 852#### GLM 0.8.2 final - 2009-01-21 853- Fixed bugs. 854 855-------------------------------------------------------------------------------- 856#### GLM 0.8.1 final - 2008-10-30 857- Fixed bugs. 858 859-------------------------------------------------------------------------------- 860#### GLM 0.8.0 final - 2008-10-23 861- New method to use extension. 862 863-------------------------------------------------------------------------------- 864#### GLM 0.8.0 beta3 - 2008-10-10 865- Added CMake support for GLM tests. 866 867-------------------------------------------------------------------------------- 868#### GLM 0.8.0 beta2 - 2008-10-04 869- Improved half scalars and vectors support. 870 871-------------------------------------------------------------------------------- 872#### GLM 0.8.0 beta1 - 2008-09-26 873- Improved GLSL conformance 874- Added GLSL 1.30 support 875- Improved API documentation 876 877-------------------------------------------------------------------------------- 878#### GLM 0.7.6 final - 2008-08-08 879- Improved C++ standard comformance 880- Added Static assert for types checking 881 882-------------------------------------------------------------------------------- 883#### GLM 0.7.5 final - 2008-07-05 884- Added build message system with Visual Studio 885- Pedantic build with GCC 886 887-------------------------------------------------------------------------------- 888#### GLM 0.7.4 final - 2008-06-01 889- Added external dependencies system. 890 891-------------------------------------------------------------------------------- 892#### GLM 0.7.3 final - 2008-05-24 893- Fixed bugs 894- Added new extension group 895 896-------------------------------------------------------------------------------- 897#### GLM 0.7.2 final - 2008-04-27 898- Updated documentation 899- Added preprocessor options 900 901-------------------------------------------------------------------------------- 902#### GLM 0.7.1 final - 2008-03-24 903- Disabled half on GCC 904- Fixed extensions 905 906-------------------------------------------------------------------------------- 907#### GLM 0.7.0 final - 2008-03-22 908- Changed to MIT license 909- Added new documentation 910 911-------------------------------------------------------------------------------- 912#### GLM 0.6.4 - 2007-12-10 913- Fixed swizzle operators 914 915-------------------------------------------------------------------------------- 916#### GLM 0.6.3 - 2007-11-05 917- Fixed type data accesses 918- Fixed 3DSMax sdk conflict 919 920-------------------------------------------------------------------------------- 921#### GLM 0.6.2 - 2007-10-08 922- Fixed extension 923 924-------------------------------------------------------------------------------- 925#### GLM 0.6.1 - 2007-10-07 926- Fixed a namespace error 927- Added extensions 928 929-------------------------------------------------------------------------------- 930#### GLM 0.6.0 : 2007-09-16 931- Added new extension namespace mecanium 932- Added Automatic compiler detection 933 934-------------------------------------------------------------------------------- 935#### GLM 0.5.1 - 2007-02-19 936- Fixed swizzle operators 937 938-------------------------------------------------------------------------------- 939#### GLM 0.5.0 - 2007-01-06 940- Upgrated to GLSL 1.2 941- Added swizzle operators 942- Added setup settings 943 944-------------------------------------------------------------------------------- 945#### GLM 0.4.1 - 2006-05-22 946- Added OpenGL examples 947 948-------------------------------------------------------------------------------- 949#### GLM 0.4.0 - 2006-05-17 950- Added missing operators to vec* and mat* 951- Added first GLSL 1.2 features 952- Fixed windows.h before glm.h when windows.h required 953 954-------------------------------------------------------------------------------- 955#### GLM 0.3.2 - 2006-04-21 956- Fixed texcoord components access. 957- Fixed mat4 and imat4 division operators. 958 959-------------------------------------------------------------------------------- 960#### GLM 0.3.1 - 2006-03-28 961- Added GCC 4.0 support under MacOS X. 962- Added GCC 4.0 and 4.1 support under Linux. 963- Added code optimisations. 964 965-------------------------------------------------------------------------------- 966#### GLM 0.3 - 2006-02-19 967- Improved GLSL type conversion and construction compliance. 968- Added experimental extensions. 969- Added Doxygen Documentation. 970- Added code optimisations. 971- Fixed bugs. 972 973-------------------------------------------------------------------------------- 974#### GLM 0.2 - 2005-05-05 975- Improve adaptative from GLSL. 976- Add experimental extensions based on OpenGL extension process. 977- Fixe bugs. 978 979-------------------------------------------------------------------------------- 980#### GLM 0.1 - 2005-02-21 981- Add vec2, vec3, vec4 GLSL types 982- Add ivec2, ivec3, ivec4 GLSL types 983- Add bvec2, bvec3, bvec4 GLSL types 984- Add mat2, mat3, mat4 GLSL types 985- Add almost all functions 986 987