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