OpenGL Mathematics

GLSL + Optional features = OpenGL Mathematics (GLM) A C++ mathematics library for graphics programming OpenGL Mathematics (GLM) is a header only C++ mathematics library for graphics software based on the OpenGL Shading Language (GLSL) specification. GLM provides classes and functions designed and implemented with the same naming conventions and functionalities than GLSL so that when a programmer knows GLSL, he knows GLM as well which makes it really easy to use. This project isn't limited to GLSL features. An extension system, based on the GLSL extension conventions, provides extended capabilities: matrix transformations, quaternions, half-based types, random numbers, procedural noise functions, etc... This library works perfectly with OpenGL but it also ensures interoperability with third party libraries and SDKs. It is a good candidate for software rendering (Raytracing / Rasterisation), image processing, physic simulations and any context that requires a simple and convenient mathematics library. 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 officially supports the following compilers: Clang 2.6 and higher CUDA 3.0 and higher GCC 3.4 and higher LLVM 2.3 through GCC 4.2 front-end and higher Visual C++ 2005 and higher Any conform C++98 or C++11 compiler The source code is licenced under the MIT license. For more information about GLM, please have a look at the manual and the API reference documentation. Thanks for contributing to the project by submitting tickets for bug reports and feature requests. (SF.net account required). Any feedback is welcome at glm@g-truc.net. ### 10/05/2012 - GLM 0.9.3.3 released Nearly two months since the previous release of a GLM revision gave enough time to fix few things reported. Most importantly, this revision should provide a better compatibility with Intel C++ compiler. Changelog: Fixed isinf and isnan Improved compatibility with Intel compiler Added CMake test build options: SIMD, C++11, fast math and MS land ext Fixed SIMD mat4 test on GCC Fixed perspectiveFov implementation Fixed matrixCompMult for none-square matrices Fixed namespace issue on stream operators Fixed various warnings Added VC11 support If you encounter bugs, don't hesitate to report them. Download: GLM 0.9.3.3 (zip) Download: GLM 0.9.3.3 (7z) Link: Submit a bug report Link: GLM 0.9.3 Manual Link: GLM 0.9.3 API ### 15/03/2012 - GLM 0.9.3.2 released Just a regular revision fixing the only three minor issues reported since last release. Download: GLM 0.9.3.2 (zip) Download: GLM 0.9.3.2 (7z) Link: Submit a bug report Link: GLM 0.9.3 Manual Link: GLM 0.9.3 API ### 10/03/2012 - GLM on GitHub After years of using SourceForge.net, GLM is moving to GitHub, as least for its repository. GitHub provides easy ways to clone the repository and submit pull requests which seems a definity advantage for the community contribution. It also allows to download snapshots of every branches. Link: Browse GLM repository on GitHub Download: GLM master branch snapshot Download: GLM 0.9.3 branch snapshot Download: GLM 0.9.4 branch snapshot ### 25/01/2012 - GLM 0.9.3.1 released GLM 0.9.3.1 fixes some platforms detection issues and warnings. Download: GLM 0.9.3.1 (zip) Download: GLM 0.9.3.1 (7z) Link: Submit a bug report Link: GLM 0.9.3 Manual Link: GLM 0.9.3 API ### 09/01/2012 - GLM 0.9.3.0 released GLM 0.9.3.0 is finally released. Since the branch 0.9.2, the test bench and the Doxygen API documentation has been expended significantly leading to an even more reliable implementation and hopefully an even smoother development experience. For the feature set, the GLSL noise functions are added, based on the implementation of webgl-noise. Some users might prefer the promoted GLM_GTC_noise extension also based on webgl-noise but with a different interface and three noise methods: Perlin noise, periodic noise and simplex noise. 2D simplex noise with GLM_GTC_noise Additionally, the random number generation functions (GLM_GTC_random) which provides various interesting distributions as illustrated below. Also reaching GLM tool box, the new experimental extension GLM_GTX_constants provides a set of constants. Spherical random distribution with GLM_GTC_random Finally, swizzle operators are a challenging task to implement but thanks to the effort of many contributors, GLM 0.9.3.0 provides something interesting, but admittably not perfect. The new implementation is a great improvement considering the incompatibilities with some external libraries in GLM 0.9.2.7. GLM 0.9.3 provides two implemetanations, one for C++ 98 compilers and one for C++ 11 compilers providing an implemetnation closer to what GLSL does. Indeed the C++ 98 implementation is compatible with C++ 11 compilers. Implementation for C++ 98 compilers: // To declare before including glm.hpp, to use the swizzle operators #define GLM_SWIZZLE #include <glm/glm.hpp> void example_cpp98() { glm::vec4 a = glm::vec4(2, 0, 0, 0); glm::vec4 b = glm::vec4(0, 2, 0, 0); glm::vec3 c = vec4((a.zyx() + b.xyz()).xyz() * 0.5f, 1.0f); glm::vec2 d = glm::normalize(glm::vec2(c.yz())); a.xyzw() = d.xyxy(); } Implementation for C++ 11 compilers: // To declare before including glm.hpp, to use the swizzle operators #define GLM_SWIZZLE #include <glm/glm.hpp> void example_cpp11() { glm::vec4 a = glm::vec4(2, 0, 0, 0); glm::vec4 b = glm::vec4(0, 2, 0, 0); glm::vec4 c = glm::vec4((a.zyx() + b.xyz()).xyz * 0.5f, 1.0f); // Before being pasted to a function, a swizzle operator needs to be cast into // a vector either explicitly or with the operator () glm::vec2 d = glm::normalize(glm::vec2(c.yz)); // glm::vec2 d = glm::normalize(c.yz()); // Equivalent code a.xyzw = d.xyxy; } Download: GLM 0.9.3.0 (zip) Download: GLM 0.9.3.0 (7z) Link: Submit a bug report Link: GLM 0.9.3 Manual Link: GLM 0.9.3 API ### 12/12/2011 - GLM 0.9.3 beta released GLM 0.9.3 beta fixes various bugs and add support for Chrome Native Client Download: GLM 0.9.3.B (zip) Download: GLM 0.9.3.B (7z) Link: Submit a bug report Link: GLM 0.9.3 Manual Link: GLM 0.9.3 API ### 11/11/2011 - GLM 0.9.3 alpha released GLM 0.9.3 is making progress which is illustrated by the release of this first alpha. Changelog: Improved doxygen documentation Added new swizzle operators for C++11 compilers Added new swizzle operators declared as functions Added GLSL 4.20 length for vector and matrix types Added GLSL core noise functions Promoted GLM_GTC_noise extension: simplex, perlin, periodic noise functions Promoted GLM_GTC_random extension: linear, gaussian and various random number generation distribution Added GLM_GTX_constants: provides usefull constants Fixed half based type contructors Download: GLM 0.9.3.A (zip) Download: GLM 0.9.3.A (7z) Link: Submit a bug report Link: GLM 0.9.3 Manual Link: GLM 0.9.3 API ### 24/10/2011 - GLM 0.9.2.7 released This revision fixes two problems: First, it adds all matrix products for all possible combinations of none-squared matrices. Thanks to Grant James who has provide the code for that. #include <glm/glm.hpp> void kueken() { glm::mat3x2 m1; glm::mat2x3 n1; ... glm::mat2x2 P = m1 * n1; // Valid before GLM 0.9.2.7 glm::mat3x2 m2; glm::mat4x3 n2; ... glm::mat4x2 P2 = m2 * n2; // Fixed in GLM 0.9.2.7 glm::mat4x3 m3; glm::mat4x4 n3; ... glm::mat4x3 P3 = m3 * n3; // Fixed in GLM 0.9.2.7 ... } This support is actually pretty useful as soon as we are interested in optimizing the matrix storage. It also fixes vector contructors which can take multiple parameters that may be swizzle operands. Download: GLM 0.9.2.7 (zip) Download: GLM 0.9.2.7 (7z) Link: Submit a bug report ### 01/10/2011 - GLM 0.9.2.6 released Half based vector types have been fixed on GCC 4.4 and below, missing l-value swizzle operations added and a couple of other bugs squeezed down. Finally, all the Visual C++ /W4 warnings should have been removed. However, for this to happen, it is required to build with the Visual C++ language extension disabled (/Za). Download: GLM 0.9.2.6 (zip) Download: GLM 0.9.2.6 (7z) Link: Submit a bug report ### 20/09/2011 - GLM 0.9.2.5 released This update fixes some major core issues including the implementation of round, floatBitToXint, pack and unpack functions. Download: GLM 0.9.2.5 (zip) Download: GLM 0.9.2.5 (7z) Link: Submit a bug report ### 03/09/2011 - GLM 0.9.2.4 released Fixed bugs and warnings reported by GLM users. Thanks! Download: GLM 0.9.2.4 (zip) Download: GLM 0.9.2.4 (7z) Link: Submit a bug report ### 08/06/2011 - GLM 0.9.2.3 released This version only fixes a couple of major bugs introduced in GLM 0.9.2.2. Download: GLM 0.9.2.3 (zip) Download: GLM 0.9.2.3 (7z) Link: Submit a bug report ### 02/06/2011 - GLM 0.9.2.2 released The main improvement of this version comes from the extended number of matrix constructors so that a programmer can used different scalar types for each parameter. #include <glm/glm.hpp> // Create an identity matrix glm::mat3 m( 1, 0.0, 0, 0.0, 1.0, 0.0f, 0, 0.0, 1.0f); The quaternion implementation has been updated as well, fixing the various slerp implementation flavours (mix, shortMix and fastMix) and providing more completeness: Added interaction with GLM_GTX_epsilon and missing lowp_quat, mediump_quat and highp_quat but also none square matrix equivalents. Finally, some efforts have been put to remove warnings across all supported compilers. Download: GLM 0.9.2.2 (zip) Download: GLM 0.9.2.2 (7z) Link: Submit a bug report ### 24/05/2011 - GLM 0.9.2.1 released GLM 0.9.2.1 significantly improves compiler detection which allows CUDA to be automatically recognized when GLM is used inside a CUDA kernel. By conscequence, GLM_FORCE_CUDA is no longer required to be declared. It fixed a couple of bugs, including Visual C++ supprot when Visual C++ extensions are disabled and fixed implementations of GLM_GTX_vector_angle and GLM_GTX_rotate_vector extensions. Download: GLM 0.9.2.1 (zip) Download: GLM 0.9.2.1 (7z) Link: Submit a bug report ### 09/05/2011 - GLM 0.9.2.0 released GLM 0.9.2.0 provides many exciting features which first of all is the CUDA copiler support so that GLM can be used within a CUDA kernel. This is possible only by defining GLM_FORCE_CUDA before including glm/glm.hpp in the CUDA Kernel source code. New experimental extensions are also available. GLM_GTX_noise is based on the work by Stefan Gustavson and Ashima Arts on WebGL-noise which adds perlin and simplex noise functions in a pure computational way. If everything goes well, this extension will be promoted to GLM core as implementation of the GLSL noise functions. GLM_GTX_ulp provides functions to evaluate the number of ULPs between two floating-point values which gives a way to mesure the accuracy of a function compare to a reference function. In the future, this extension could be used to update the documentation of function and gives the level of accuracy they provide. Finally, GLM_GTX_matrix_interpolation is an extension developed by Ghenadii Ursachi to extract axis and angle of a 4 by 4 matrix but also directly interpolate between two matrices. This extension works only on linear transformed matrices. Last but not least: with the version 0.9.2, GLM supports CTest to manage GLM test suite which makes tests much easier to maintain. The number of tests have significantly increase, even if a lot more tests are necessary. GLM 0.9.2 is not backward compatible with GLM 0.9.1 with only one point: Quaternion SLERP interpolation! In GLM 0.9.1 the function 'mix' always interpolate using the short rotation path but it's no longer the case. The function 'shortMix' has to be called for short path interpolation. 'fastMix' will interpolate two quaternions using a normalized linear quaternion interpolation with non-constant rotation speed. Download: GLM 0.9.2.0 (zip) Download: GLM 0.9.2.0 (7z) Link: Submit a bug report ### 07/05/2011 - GLM 0.9.1.3 released Various bugs fixed with GLM 0.9.1.3. Download: GLM 0.9.1.3 (zip) Download: GLM 0.9.1.3 (7z) Link: Submit a bug report ### 15/04/2011 - GLM 0.9.1.2 released Bug fixes Only for GLM 0.9.1.2. Download: GLM 0.9.1.2 (zip) Download: GLM 0.9.1.2 (7z) Link: Submit a bug report ### 17/03/2011 - GLM 0.9.1.1 released GLM 0.9.1.1 fixes some bugs, warnings on Clang C++ and clean up a bit the code. If you have uncounter any issue with GLM 0.9.1.0, please download this revision. Finally, the work has started for GLM 0.9.2 so if you have requests don't forget to submit them! Download: GLM 0.9.1.1 (zip) Download: GLM 0.9.1.1 (7z) Link: Submit a bug report ### 03/03/2011 - GLM 0.9.1.0 final released Finally, GLM 0.9.1 branch is reaching the status of stable with GLM 0.9.1.0. From GLM 0.9.1 beta, mainly bugs has been fixed. GLM has evolved on many sides since GLM 0.9.0: Improved documentation (manual and doxygen), better test framework, simplified setup/options/configration of GLM and new experimental SIMD API. GLM 0.9.1.0 is not 100% backward compatile with GLM 0.9.0.8 but mainly advanced usages should be affected by the differencies. Have a look at the GLM manual for more information on how to use GLM 0.9.1. Download: GLM 0.9.1.0 (zip) Download: GLM 0.9.1.0 (7z) Link: GLM 0.9.1 manual Link: Submit a bug report ### 13/02/2011 - GLM 0.9.0.8 and GLM 0.9.1 beta released The stable version, GLM 0.9.0.8, adds the operator * for quaternion products and deprecated the cross function previously used for the same purpose. Also, it clarifies that GLM is a header only library when a user try to build it. Once more, there is nothing to build. The development version, GLM 0.9.1 beta, provides an improved API documentation by Alfonse Reinheart, author of a great OpenGL tutorial which uses GLM. This version also improves the SIMD extensions and it fixes many bugs. Download: GLM 0.9.1.B (zip) Download: GLM 0.9.1.B (7z) Link: GLM 0.9.1 manual Download: GLM 0.9.0.8 (zip) Download: GLM 0.9.0.8 (7z) Link: GLM 0.9.0 manual Link: Submit a bug report ### 31/01/2011 - GLM 0.9.1 alpha released This new version of GLM is bringing a lot of improvements and maybe too many considering the development time it has required: API exposing SIMD implementation but also some new, safe and feature complet swizzling functions and a new setup API. All this is described in the largely updated GLM manual. With the new setup system, GLM detects automatically the compiler settings to adapt its implementation to the flag set at build time. It will automatically enable C++0x features, SSE optimizations and the display configuration informations at build-time. The automatic setup can be overdrive by the GLM user. The SIMD API maintly focus on vec4 and mat4 implementations that are embodied by the types simdVec4 and simdMat4. The implemention cover most of the common functions, the geometry functions and the matrix functions as described in the GLSL specifications. Because it is hight inefficient to access individual components of a SIMD register, the simdVec4 doesn't allow it. To reflect this constraint, the simdVec4 has to be converted to vec4 first which would be effectively handle by the compiler thank to the function simdCast. Furthermore, GLM provides some specials functions like simdDot4 that returns a simdVec4 instead of a float with the duplicated dot product value in each components and ensure that no unnecessary component manipulations are performed (typically __m128 to float and float to __m128). This implementation can probably be improve in many ways so don't hesitate to send me some feedbacks. GLM 0.9.1 is not 100% backward compatible with GLM 0.9.0 but mostly advanced usages should be concerned by this compatibility issues. Download: GLM 0.9.1.A (zip, 2.7 MB) Download: GLM 0.9.1.A (7z, 1.7 MB) Link: Link: ### 30/01/2011 - GLM 0.9.0.7 released GLM 0.9.0.7 provides 2 main changes: GLSL 4.10 packing functions but also == and != operators for every types. Download: GLM 0.9.0.7 (zip, 1.4 MB) Download: GLM 0.9.0.7 (7z, 832 KB) Link: Submit a bug report ### 21/12/2010 - GLM 0.9.0.6 released GLM 0.9.0.6 is a new update of GLM built over GLM's user bug reports. It mainly fixes issues regarding non-squared matrices but also provides multiple extensions corrections as well. I expect to release GLM 0.9.1.0 in Junuary but I might continue to update GLM 0.9.0.X as there are minor incompatibilities. Download: GLM 0.9.0.6 (zip, 2.2 MB) Download: GLM 0.9.0.6 (7z, 1.6 MB) Link: Submit a bug report ### 01/11/2010 - GLM 0.9.0.5 released GLM 0.9.0.5 fixes the usual set of bugs, some allowing a better Clang support. Download: GLM 0.9.0.5 (zip, 2.2 MB) Download: GLM 0.9.0.5 (7z, 1.6 MB) Link: Submit a bug report ### 04/10/2010 - GLM 0.9.0.4 released GLM 0.9.0.4 revision mainly fixes bugs. It also contains a contribution by Arnaud Masserann, a autoexp.dat file to make GLM looks nicer in Visual Studio debugger. To take advantage of this file, edit ${VISUALSTUDIO_DIRECTORY}/common7/packages/debugger/autoexp.dat file and add the content of the file util/autoexp.txt included in GLM 0.9.0.4. Download: GLM 0.9.0.4 (zip, 1.5 MB) Download: GLM 0.9.0.4 (7z, 1.2 MB) Link: Submit a bug report ### 26/08/2010 - GLM 0.9.0.3 released GLM 0.9.0.3 fixes major issues on non-squared matrices. Download: GLM 0.9.0.3 (zip, 1.2 MB) Download: GLM 0.9.0.3 (7z, 684 KB) Link: Submit a bug report ### 08/07/2010 - GLM 0.9.0.2 released Second update of GLM 0.9.0 with more bug fixes. It also contains a new extension called GLM_GTX_int_10_10_10_2 to use GLM with OpenGL and GL_ARB_vertex_type_2_10_10_10_rev. Download: GLM 0.9.0.2 (zip, 809 KB) Download: GLM 0.9.0.2 (7z, 651 KB) Link: Submit a bug report ### 21/06/2010 - GLM 0.9.0.1 released This revision only fixes few extensions bugs. Download: GLM 0.9.0.1 (zip, 714 KB) Download: GLM 0.9.0.1 (7z, 556 KB) Link: Submit a bug report ### 25/05/2010 - GLM 0.9.0.0 released GLM 0.9.0.0 is finally available! It brings various API changes from GLM 0.8.4.X branch which makes it not backward compatible. GLM is now compatible with Objective C++ to be used for MacOS X and iPhone projects. To continue making GLM a better library, 2 mailing lists have been created for users and developers. Download: GLM 0.9.0.0 (zip, 1.0 MB) Download: GLM 0.9.0.0 (7z, 514 KB) Mailing list: Register to GLM mailing list for users Mailing list: Register to GLM mailing list for developers Link: Submit a bug report ### 30/04/2010 - GLM 0.9 Beta 2 released GLM 0.9 Beta 2 is available and should be the last development release of GLM 0.9. The code has been moved from a SVN to Git repository which branching efficiency allowed to remove all the experimental code from this release. Various bug fixes and manual updates have been done too. Download: GLM 0.9.B.2 (zip, 1.07 MB) Download: GLM 0.9.B.2 (7z, 555 KB) ### 03/04/2010 - GLM 0.9 Beta 1 released A new development version of GLM 0.9 is available. This version is based on GLSL 4.0 and supports the new common and integer functions. Also a long and frequently asked feature has been implemented: inplicit conversions. However, the rules defining implicit conversions by GLSL 4.0 are quite weaked and can't really be apply in C++. Reaching the beta status, this new features close the feature list of GLM 0.9. Further development releases may happen before the final release. Download: GLM 0.9.B.1 (zip, 964 KB) Download: GLM 0.9.B.1 (7z, 414 KB) ### 20/02/2010 - GLM 0.9 Alpha 2 released This update fixes some problem of Alpha 1 but also brings some improvements in case of errors when using GLM to provide more relevant messages. Download: GLM 0.9.A.2 (zip, 1.3 MB) Download: GLM 0.9.A.2 (7z, 726 KB) ### 09/02/2010 - GLM 0.9 Alpha 1 released First step until a major release for GLM with this first alpha of GLM 0.9. This version brings a large internal redesign to improve the library reliability and optimized some parts. It removed the deprecated features and API which implies that GLM 0.9 isn't backward compatible. For most users the build issues when upgrading to GLM 0.9 should be reduced especially if they follow the deprecation policy. This release is still UNSTABLE and not recommanded for commertial products. Download: GLM 0.9.A.1 (zip, 950 KB) Download: GLM 0.9.A.1 (7z, 391 KB) Link: Full changelog ### 25/01/2010 - GLM 0.8.4.4 released This update just removes some warnings By the way, if you have questions about GLM, a good place for those is the OpenGL.org Toolkits forum. Download: GLM 0.8.4.4 (zip, 1.1 MB) Download: GLM 0.8.4.4 (7z, 479 KB) Link: Full changelog ### 16/11/2009 - GLM 0.8.4.3 released This version fixed half scalars and half vectors arithmetics. This is a really slow practice that should be avoid. Half floating point value should be use only to store GPU data. GPUs have native support for half values, not x86 CPUs. Download: GLM 0.8.4.3 (zip, 1.1 MB) Download: GLM 0.8.4.3 (7z, 463 KB) Link: Full changelog ### 19/10/2009 - GLM 0.8.4.2 released This version is a really minor updates, fixing single issue with half float types. Download: GLM 0.8.4.2 (zip, 1.1 MB) Download: GLM 0.8.4.2 (7z, 443 KB) Link: Full changelog ### 05/10/2009 - GLM 0.8.4.1 released This version fixes few bugs and provides an major update of the manual thanks to Damian Trebilco. Download: GLM 0.8.4.1 (zip, 1.1 MB) Download: GLM 0.8.4.1 (7z, 443 KB) Link: Full changelog ### 16/09/2009 - GLM 0.8.4.0 released This new version mainly adds support for Visual Studio 2010 and GCC 4.4. It also provides various code optimization, bug fixes and an extension. Download: GLM 0.8.4.0 (zip, 1.1 MB) Download: GLM 0.8.4.0 (7z, 439 KB) Link: Full changelog ### 11/08/2009 - GLM 0.8.3.5 released Fixed extension bugs introduced by core update. Download: GLM 0.8.3.5 (zip, 971 KB) Download: GLM 0.8.3.5 (7z, 405 KB) Link: Full changelog ### 10/08/2009 - GLM 0.8.3.4 released Fixed varius bugs. Move determinant fonction to core following GLSL 1.5 specification. Download: GLM 0.8.3.4 (zip, 971 KB) Download: GLM 0.8.3.4 (7z, 405 KB) Link: Full changelog ### 25/06/2009 - GLM 0.8.3.3 released Fixed varius bugs. Download: GLM 0.8.3.3 (zip, 971 KB) Download: GLM 0.8.3.3 (7z, 405 KB) Link: Full changelog ### 04/06/2009 - GLM 0.8.3.2 released Add GLM_GTC_quaternion and GLM_GTC_type_precision extensions both subset of GLM_GTX_quaternion and GLM_GTX_number_precision Download: GLM 0.8.3.2 (zip, 971 KB) Download: GLM 0.8.3.2 (7z, 405 KB) Link: Full changelog ### 21/05/2009 - GLM 0.8.3.1 released The old way to use extensions have been fixed and GLM_GTX_bit extension gets updated with more functions to manipulate bit fields. Download: GLM 0.8.3.1 (zip, 954 KB) Download: GLM 0.8.3.1 (7z, 402 KB) Link: Full changelog ### 06/05/2009 - GLM 0.8.3.0 released This version brings to main changed: Stable extensions and a new extension system. The first stable GLM extensions are: GLM_GTC_double_float and GLM_GTC_half_float for higher and lower vectors and matrices floating point precision. GLM_GTC_matrix_operation provides determinant and inverse matrix calculation. GLM_GTC_matrix_transform allows to build scale, rotate and translate matrices and GLM_GTC_matrix_projection provides varius functions to build projection matrices. Few stable extensions yet but the number is going to grow with the next release! Both GLM 0.8.2.x extensions use method are deprecated (but still working) and replace by a new one. If you wnat to use GLM_GTC_half_float just include "glm/gtc/half_float.hpp" and it is going to be included in GLM namespace. Finally, quite some file have been renamed, using "hpp" instead of ".h". Old file have been deprecated but are still available so that GLM 0.8.3.0 is fully compatible with GLM 0.8.2.x. Download: GLM 0.8.3.0 (zip, 896 KB) Download: GLM 0.8.3.0 (7z, 359 KB) Link: Code samples page Link: Manual Link: Full changelog ### 01/04/2009 - GLM 0.8.2.3 released Download: GLM 0.8.2.3 (zip, 963 KB) Download: GLM 0.8.2.3 (7z, 381 KB) Link: Manual Link: Full changelog ### 13/02/2009 - GLM 0.8.2.1 released A new release is available and inogurate a patch number. The goal of this patch number is to release faster fixes from bug reports. Download: GLM 0.8.2.1 (zip, 963 KB) Download: GLM 0.8.2.1 (7z, 381 KB) Link: Manual Link: Full changelog ### 21/01/2009 - GLM 0.8.2 released This release only fixes bugs. Left sided swizzle operators, quaternion operators, vectors access operators for the main onces. Download: GLM 0.8.2 (zip, 963 KB) Download: GLM 0.8.2 (7z, 381 KB) Link: Manual Link: Full changelog ### 19/11/2008 - GLM current developments Some artifacts have been added to the tracker to give a picture of what you could expect for the next releases. If you need something else you can add some artifacts to the tracker. Any comment on added entries is welcome. Furthermore, no more release of GLM 0.7.x will be done. Please upgrade to GLM 0.8.1. Finally, a pack of programmable oriented OpenGL samples using GLM is under development and planed to be release in December. Link: Tracker ### 30/10/2008 - GLM 0.8.1 released GLM 0.8.1 is released. This new version mainly fixes 64 bit integers with GCC and various bugs. Download: GLM 0.8.1 (zip, 938 KB) Download: GLM 0.8.1 (7z, 372 KB) Link: GLM 0.8.1 Manual Link: Full changelog ### 23/10/2008 - GLM 0.8.0 final released GLM 0.8.0 is released. This new version is now based on GLSL 1.30 specification which provided new functions and precision qualifiers. Beyond this, lot of changes have been done to make GLM easier to use, easier to develop, more reliable, more conform to C++ ISO98 standard and GLSL specifications. It involves that GLM 0.8.x is not backward compatible with GLM 0.7.x... However, an application port from GLM 0.7.x to GLM 0.8.x isn't a huge work and actually for some, it won’t be work at all. On GLM core side, based on GLSL features, vector types can't be automatically cast to pointer anymore for code safety purposes. Vector constructors require a single scalar parameter of the exact number of components. On GLM extension side, the mechanism to use them has changed. The old [__]***GTX way doesn't exist anymore. Have a look on the manual for more information. Have a look on the manual and the changelog for more information. Don't forget to send your feedback and enjoy! Download: GLM 0.8.0 (zip, 936 KB) Download: GLM 0.8.0 (7z, 370 KB) Link: GLM 0.8.0 Manual Link: Full changelog Link: Post a comment ### 22/10/2008 - A Humus demo to feature GLM 0.8.0 Ambient aperture lighting Humus demo have been updated to use GLM as math library. Download: Updated demo + all sources (zip, 2.38 MB) Download: Original demo (zip, 1.40 MB) Link: Post a comment ### 18/10/2008 - Webside updated As you can see the website get a little update to prepare GLM 0.8.0 final release. GLM 0.8.0 final should be release during the week. ### 10/10/2008 - GLM 0.8.0 beta 3 released This release fixes some bugs and add few features though extensions. The development is now based on CMake to make easier cross platform tests and project management. Download: GLM 0.8.0 Beta 3 (zip, 819 KB) Download: GLM 0.8.0 Beta 3 (7z, 345 KB) Link: Full changelog Link: Post a comment ### 04/10/2008 - GLM 0.8.0 beta 2 released This release mainly improves half float vectors support. By default the low precission vectors are based on float numbers not on half numbers It also provides new setup options. GLM_USE_ONLY_XYZW to disable multiple names to access to a single vector component. GLM_USE_ANONYMOUS_UNION to allow multiple component names on half vectors with Visual C++. Various bugs and updates of extensions have been done too. Final release is coming... Download: GLM 0.8.0 Beta 2 (zip, 798 KB) Download: GLM 0.8.0 Beta 2 (7z, 327 KB) Link: Full changelog Link: Post a comment ### 26/09/2008 - GLM 0.8.0 beta 1 released GLM have been updated to support GLSL 1.30. API documentation had significant improvements to make easier finding of GLSL functions and types. GLM 0.8.x is NOT backward compatible with GLM 0.7.x. Upgrade to GLM 0.8.x could involve build errors for the following cases: A lot of improvements have been made to increase the conformance with GLSL specification. Lot of GLSL 1.30 features were already exposed in extensions that have been deleted. The extension syntaxe based on ARB convension is no long used. Due to the number of changes GLM 0.8.0 is release as beta first. The final release is schedule for october. Download: GLM 0.8.0 Beta 1 (zip, 786 KB) Download: GLM 0.8.0 Beta 1 (7z, 321 KB) Link: Full changelog Link: Post a comment ### 08/08/2008 - GLM 0.7.6 released GLM 0.7.6 provides a better C++ conformance so that you can build GLM with –pedantic G++ parameter or without Visual Studio extensions. To make GLM more reliable, BOOST_STATIC_ASSERT are used according developer wishes. Download: GLM 0.7.6 (zip, 907 KB) Download: GLM 0.7.6 (7z, 387 KB) Link: Full changelog Link: Manual ### 05/07/2008 - GLM 0.7.5 released GLM 0.7.5 is available and introduces a new build messsage system to get information of GLM build configuration with Visual Studio. This mechanism is documented in section 6 of GLM manual. Also, GLM can be built with GCC pedantic options. Download: GLM 0.7.5 (zip, 852 KB) Download: GLM 0.7.5 (7z, 366 KB) Link: Full changelog Link: Manual ### 01/06/2008 - GLM 0.7.4 released GLM 0.7.4 introduces a new system to manage external dependencies. It allows developing extension using external dependencies like GLEW, Boost, etc. without making required those dependencies for GLM programmer that doesn't need those external dependent extensions. The mechanism is described into the updated manual. Download: GLM 0.7.4 (zip, 859 KB) Download: GLM 0.7.4 (7z, 372 KB) Link: Full changelog Link: Manual ### 24/05/2008 - GLM 0.7.3 released GLM 0.7.3 is released. This version fixes few bugs and add few extensions Download: GLM 0.7.3 (zip, 1.8 MB) Download: GLM 0.7.3 (7z, 635 KB) Link: Full changelog ### 27/04/2008 - GLM 0.7.2 released GLM 0.7.2 is released. The documentation have been completed again and several issues handle with precompiler options. #define GLM_SWIZZLE GLM_SWIZZLE_FUNC allows to use swizzle operators with internal functions. For example, glm::vec3(1, 2, 3).zyx is replaced by glm::vec3(1, 2, 3)._zyx() with this option. #define GLM_FORCE_NO_HALF allows to include all extensions (#include "glm/glmext.h") without any support of half-precision floating-point numbers. #define GLM_AUTO_CAST GLM_DISABLE allows to disable automatic cast (eg: glLoadMatrixf(glm::mat4(1.0))) which could involve unfortunate issues in some cases. More information on these topic are available in GLM manual section 5 "Known issues". Download: GLM 0.7.2 (zip, 1.8 MB) Download: GLM 0.7.2 (7z, 635 KB) Download: Full changelog ### 24/03/2008 - GLM 0.7.1 released GLM 0.7.1 is available under MIT license. It fixes bugs with GCC. Download: GLM 0.7.1 (zip, 1.8 MB) Download: GLM 0.7.1 (7z, 635 KB) Download: Full changelog ### 22/03/2008 - GLM 0.7.0 released GLM 0.7.0 is available under MIT license. LGPL lisence have been discard due to an issue of use for console development. This release contains a lot better documentation based on Doxygen. Lot of bugs have been fixed and the documentation completed. Thanks to all people that has contributed thought bug reports and ideas to make this version a lot better! Download: GLM 0.7.0 (zip, 1.8 MB) Download: GLM 0.7.0 (7z, 635 KB) Download: Full changelog ### 10/12/2007 - GLM 0.6.4 released GLM 0.6.4 is available and fixes some swizzle operator issues. Download: GLM 0.6.4 (zip, 1.7 MB) Download: GLM 0.6.4 (7z, 612 KB) Download: Full changelog ### 05/11/2007 - GLM 0.6.3 released GLM 0.6.3 fixes accesses of matrices and a 3DSMax SDK conflict. Download: GLM 0.6.3 (zip, 1.8 MB) Download: GLM 0.6.3 (7z, 633 KB) Download: Full changelog ### 08/10/2007 - GLM 0.6.2 released GLM 0.6.2 fixes an error on an extension. Download: GLM 0.6.2 (zip, 1.8 MB) Download: GLM 0.6.2 (7z, 632 KB) Download: Full changelog ### 07/10/2007 - GLM 0.6.1 released GLM 0.6.1 is a minor update that fix an issue on extension namespace and add two more extensions. Download: GLM 0.6.1 (zip, 1.8 MB) Download: GLM 0.6.1 (7z, 632 KB) Download: Full changelog ### 16/09/2007 - GLM 0.6.0 released GLM 0.6.0 is available. For this release, work focus on extensions. A new mecanisum allows to integrate GLM extensions as it is actually done for GLSL extension by vendors. Lot of new extensions have been added. Download: GLM 0.6.0 (zip, 1.8 MB) Download: GLM 0.6.0 (7z, 666 KB) Download: Raytracer v1.0 (exe) Download: Raytracer v1.0 (zip) Download: Full changelog ### 19/02/2007 - GLM 0.5.1 released This release fixes some issues with swizzle operators. Download: GLM 0.5.1 (zip, 2.3 MB) Download: GLM 0.5.1 (7z, 789 KB) ### 26/01/2007 - Cattmull Clark subdivision sample A new sample is available. It's an update of Philip Rideout's Catmull Clark subdivision program that uses GLM. Released with pleasant permission of Philip Rideout. Download: CatmullClark sample (zip, 605 KB) ### 06/01/2007 - GLM 0.5.0 released This release include GLSL 1.2 new feature in the core implementation. Also, it includes swizzle read and write operators and a custom options system to setup GLM. It includes some new extensions to extend GLSL features but they remain experimental. The next release should provide the first stable extensions. The GLM 0.5.0 packages contain some basic samples and some documentation. The ray tracer sample has been updated to GLM 0.5.0. Except for specific cases, especially with extensions, GLM 0.5 is backward compatible. Now, GLM development is taking advantages of SourceForge.net services: a bug tracker system and the development source code is publicly available on SF.net SVN server. Download: GLM 0.5.0 (zip, 2.4 MB) Download: GLM 0.5.0 (7z, 843 KB) Download: Raytracer b3.0 (exe, 751 KB) Download: Raytracer b3.0 (zip, 1.1 MB) ### 22/05/2006 - GLM 0.4.1 released A GLM update is available. It simply includes some examples for a sweet start with GLM. The examples show how to use GLM with OpenGL intermediate mode and OpenGL vertex arrays. Also, they show how to use GLM extensions to replace GLU and OpenGL function witch could slightly increase performances by decreasing the number of OpenGL states changes. Download: GLM 0.4.1 (zip, 1.6 MB) Download: GLM 0.4.1 (7z, 521 KB) ### 17/05/2006 - GLM 0.4.0 released Groove This release introduces first GLSL 1.2 features as planed. Also, various new extensions have been added and updated. Finally, it's not anymore required to include windows.h before glm.h when windows.h is required. The number of features of GLM, including extensions, start to really increase the compilation time. That's why it's recommended to use precompiled headers. Download: GLM 0.4.0 ### 23/04/2006 - Roadmap for the years Version 0.4 will complete matrices and vectors operators and will add GLSL 1.2 features. First, conversions simplifications will be integrated. Then, 4 per 3 matrices and outer product will be available from extensions. The transpose function is already available from extension. Version 0.5 will integrate GLSL 1.2 features to GLM core. Version 0.6 will add swizzle operators in reading and writing. (eg: vec3 v1(1.0, 2.0, 3.0); vec3 v2 = v1.xxx; v1.zyx = v;). ### 22/04/2006 - GLM 0.3.2 released This release corrects two main bugs. First, a bug of the imat4 and mat4 division operators and other correct the vectors components access from texture coordinate way. Download: GLM 0.3.2 ### 28/03/2006 - GLM 0.3.1 released This update adds GCC 4.0 support for MacOS X and Linux and GCC 4.1 under Linux. Also, its provides some optimisations. Further release will prodive GLSL 1.2 compliances. Download: GLM 0.3.1 ### 19/02/2006 - GLM 0.3 released A new release of GLM is now available. It improves GLSL data type conversion and construction compliance. Also, It's adds extensions like some to manage double-precision and half-precision float numbers. Finally a Doxygen documentation has been added. This new release have been tested under Visual C++ 7.1, Visual C++ 8.0, GCC 3.2.3 et GCC 3.4.2. Download: GLM 0.3 Download: Raytrace Documentation: Online documentation ### 06/05/2005 - GLM 0.2 released A new release of GLM is now available. A few bugs have been fixed, the portability of GLSL into C++ has been improved, and new experimental extensions have been implemented, enhancing GLSL features. Project now supports quaternions, adds new features to handle colors, vectors and matrices. For example, GLM allows base colors changing, vector projected operations, and 2D/3D transforms. To demo the features of this new version, a sample program is included. It is a simple Ray Tracer supporting reflected and refracted rays, three lights types (point, directionnal and spot), two objects types (sphere, plan), using all of the GLM possibilities. ### 04/05/2005 - English pages The english section of this site is now available. ### 21/02/2005 - GLM 0.1 is available This is the first public availability of GLM. This library supports part of GLSL specifications : All vectors and matrices types, and all the operators and associated functions. For now, there isn't detailed documentation, but you can freely have a look on GLSL specifications. Consider any incoherence with GLM as an error. Keep in mind the library is included in the namespace "glm". This project is multi platform and was successfully tested under Visual C++ 7.1, MinGW 3.4 and GCC 3.4. Download: GLM 0.1 User Release Download: GLM 0.1 Contributor Release Documentation: GLSL 1.10.59 specifications Copyright © 2005 - 2012G-Truc Creation