From b1b8b18256cf38a710b736acbbbdb22fa0a49dce Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Thu, 2 Jun 2011 10:47:25 +0100 Subject: [PATCH 1/3] Added doc for GLM 0.9.2.2 release --- doc/about.html | 4 +- doc/code.html | 4 +- doc/download.html | 30 ++++++------ doc/glm-0.9.2.pdf | Bin 362163 -> 363472 bytes doc/goodies.html | 4 +- doc/index.html | 116 ++++++++++++++++++++++++++-------------------- doc/src/data.xml | 10 ++-- doc/src/news.xsl | 5 +- doc/src/util.xsl | 30 ++++++------ 9 files changed, 109 insertions(+), 94 deletions(-) diff --git a/doc/about.html b/doc/about.html index 3ba3953d..126961e9 100644 --- a/doc/about.html +++ b/doc/about.html @@ -11,8 +11,8 @@ ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })(); -
OpenGL Mathematics
GLSL + Optional features = OpenGL Mathematics (GLM)
A C++ mathematics library for graphics programming


+
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.

diff --git a/doc/code.html b/doc/code.html index 5a742173..bd08be2e 100644 --- a/doc/code.html +++ b/doc/code.html @@ -11,8 +11,8 @@ ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })(); -
OpenGL Mathematics
GLSL + Optional features = OpenGL Mathematics (GLM)
A C++ mathematics library for graphics programming


Compute a triangle normal:
  • #include <glm/glm.hpp>
  • void computeNormal(triangle & Triangle) +
    OpenGL Mathematics
    GLSL + Optional features = OpenGL Mathematics (GLM)
    A C++ mathematics library for graphics programming


    Compute a triangle normal:
    • #include <glm/glm.hpp>
    • void computeNormal(triangle & Triangle)
    • {
    • diff --git a/doc/download.html b/doc/download.html index a09a6bf9..232239b5 100644 --- a/doc/download.html +++ b/doc/download.html @@ -11,20 +11,21 @@ ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })(); -
      OpenGL Mathematics
      GLSL + Optional features = OpenGL Mathematics (GLM)
      A C++ mathematics library for graphics programming


      Current release
      24/05/2010: - GLM 0.9.2.1 +
      OpenGL Mathematics
      GLSL + Optional features = OpenGL Mathematics (GLM)
      A C++ mathematics library for graphics programming


      Current release
      02/06/2011: + GLM 0.9.2.2 (3.4 MB) -
      _________________

      GLM - zip files
      24/05/2010: GLM 0.9.2.1 (3.4 MB) -
      08/05/2010: GLM 0.9.2.0 (3.4 MB) -
      07/05/2010: GLM 0.9.1.3 (3.4 MB) -
      12/04/2010: GLM 0.9.1.2 (3.4 MB) -
      17/03/2010: GLM 0.9.1.1 (3.4 MB) -
      03/03/2010: GLM 0.9.1.0 (3.4 MB) -
      13/02/2010: GLM 0.9.1.B (3.4 MB) -
      13/02/2010: GLM 0.9.0.8 (3.3 MB) -
      31/01/2010: GLM 0.9.1.A (3.0 MB) -
      30/01/2010: GLM 0.9.0.7 (1.4 MB) +
      _________________

      GLM - zip files
      02/06/2011: GLM 0.9.2.2 (3.4 MB) +
      24/05/2011: GLM 0.9.2.1 (3.4 MB) +
      08/05/2011: GLM 0.9.2.0 (3.4 MB) +
      07/05/2011: GLM 0.9.1.3 (3.4 MB) +
      12/04/2011: GLM 0.9.1.2 (3.4 MB) +
      17/03/2011: GLM 0.9.1.1 (3.4 MB) +
      03/03/2011: GLM 0.9.1.0 (3.4 MB) +
      13/02/2011: GLM 0.9.1.B (3.4 MB) +
      13/02/2011: GLM 0.9.0.8 (3.3 MB) +
      31/01/2011: GLM 0.9.1.A (3.0 MB) +
      30/01/2011: GLM 0.9.0.7 (1.4 MB)
      21/12/2010: GLM 0.9.0.6 (2.2 MB)
      01/11/2010: GLM 0.9.0.5 (2.2 MB)
      04/10/2010: GLM 0.9.0.4 (1.5 MB) @@ -74,7 +75,8 @@
      02/19/2006: GLM 0.3.0.0 (945 KB)
      05/05/2005: GLM 0.2.0.0 (194 KB)
      02/21/2005: GLM 0.1.0.0 (29.2 KB) -
      _________________

      GLM - 7z files
      24/05/2011: GLM 0.9.2.1 (2.1 MB) +
      _________________

      GLM - 7z files
      02/06/2011: GLM 0.9.2.2 (2.1 MB) +
      24/05/2011: GLM 0.9.2.1 (2.1 MB)
      08/05/2011: GLM 0.9.2.0 (2.1 MB)
      07/05/2011: GLM 0.9.1.3 (2.1 MB)
      12/04/2011: GLM 0.9.1.2 (2.1 MB) diff --git a/doc/glm-0.9.2.pdf b/doc/glm-0.9.2.pdf index 8cd8b88efc014aea08d2a207983e3e74f73e88c5..79a797313ce70ba8c9ccc319224518804410f80b 100644 GIT binary patch delta 33871 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 CJO)Vs delta 32844 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
      OpenGL Mathematics
      GLSL + Optional features = OpenGL Mathematics (GLM)
      A C++ mathematics library for graphics programming


      16/10/2008
      GLM Logo

      Download: 2560x1600
      Download: 1920x1200
      Download: 1600x1000
      Download: 1280x0800
      Download: 1024x0640

      _________________

      16/10/2008
      GLM Font

      Download: Font (.otf)

      _________________

      _________________

      Copyright © 2005 - 2011G-Truc Creation
      \ No newline at end of file +
      OpenGL Mathematics
      GLSL + Optional features = OpenGL Mathematics (GLM)
      A C++ mathematics library for graphics programming


      16/10/2008
      GLM Logo

      Download: 2560x1600
      Download: 1920x1200
      Download: 1600x1000
      Download: 1280x0800
      Download: 1024x0640

      _________________

      16/10/2008
      GLM Font

      Download: Font (.otf)

      _________________

      _________________

      Copyright © 2005 - 2011G-Truc Creation
      \ No newline at end of file diff --git a/doc/index.html b/doc/index.html index d9be58a6..e3875896 100644 --- a/doc/index.html +++ b/doc/index.html @@ -11,8 +11,8 @@ ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })(); -
      OpenGL Mathematics
      GLSL + Optional features = OpenGL Mathematics (GLM)
      A C++ mathematics library for graphics programming


      +
      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.

      @@ -33,7 +33,21 @@

      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. -


      24/05/2011 - GLM 0.9.2.1 released

      +


      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.

      @@ -106,7 +120,7 @@ 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. -


      30/01/2011 - GLM 0.9.0.7 released


      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. @@ -148,9 +162,9 @@

      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


      20/02/2010 - GLM 0.9 Alpha 2 released

      Groove

      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


      09/02/2010 - GLM 0.9 Alpha 1 released

      Groove

      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. @@ -159,32 +173,32 @@ 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


      25/01/2010 - GLM 0.8.4.4 released

      Groove

      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


      16/11/2009 - GLM 0.8.4.3 released

      Groove

      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


      19/10/2009 - GLM 0.8.4.2 released

      Groove

      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


      05/10/2009 - GLM 0.8.4.1 released

      Groove

      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


      16/09/2009 - GLM 0.8.4.0 released

      Groove

      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


      11/08/2009 - GLM 0.8.3.5 released

      Groove

      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


      10/08/2009 - GLM 0.8.3.4 released

      Groove

      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


      25/06/2009 - GLM 0.8.3.3 released

      Groove

      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


      04/06/2009 - GLM 0.8.3.2 released

      Groove

      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


      21/05/2009 - GLM 0.8.3.1 released

      Groove

      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


      06/05/2009 - GLM 0.8.3.0 released

      Groove

      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! @@ -192,11 +206,11 @@ 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


      13/02/2009 - GLM 0.8.2.1 released


      01/04/2009 - GLM 0.8.2.3 released


      13/02/2009 - GLM 0.8.2.1 released

      Groove

      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


      21/01/2009 - GLM 0.8.2 released

      Groove

      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


      19/11/2008 - GLM current developments

      Groove

      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. @@ -204,9 +218,9 @@ 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

      +

      Link: Tracker

      30/10/2008 - GLM 0.8.1 released

      Groove

      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


      23/10/2008 - GLM 0.8.0 final released

      Groove

      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. @@ -218,39 +232,39 @@ 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


      22/10/2008 - A Humus demo to feature GLM 0.8.0

      Groove

      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


      18/10/2008 - Webside updated

      Groove

      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

      +


      10/10/2008 - GLM 0.8.0 beta 3 released

      Groove

      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


      04/10/2008 - GLM 0.8.0 beta 2 released

      Groove

      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


      26/09/2008 - GLM 0.8.0 beta 1 released

      Groove

      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


      08/08/2008 - GLM 0.7.6 released

      Groove

      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


      05/07/2008 - GLM 0.7.5 released

      Groove

      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


      01/06/2008 - GLM 0.7.4 released

      Groove

      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


      24/05/2008 - GLM 0.7.3 released

      Groove

      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


      27/04/2008 - GLM 0.7.2 released

      Groove

      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. @@ -260,25 +274,25 @@ #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


      24/03/2008 - GLM 0.7.1 released

      Groove

      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


      22/03/2008 - GLM 0.7.0 released

      Groove

      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


      10/12/2007 - GLM 0.6.4 released

      Groove

      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


      05/11/2007 - GLM 0.6.3 released

      Groove

      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


      08/10/2007 - GLM 0.6.2 released

      Groove

      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


      07/10/2007 - GLM 0.6.1 released

      Groove

      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


      16/09/2007 - GLM 0.6.0 released

      Groove

      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


      19/02/2007 - GLM 0.5.1 released

      Groove

      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


      26/01/2007 - Cattmull Clark subdivision sample

      Groove

      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


      06/01/2007 - GLM 0.5.0 released

      Groove

      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. @@ -286,39 +300,39 @@ 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


      22/05/2006 - GLM 0.4.1 released

      Groove

      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


      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

      +

      Download: GLM 0.4.0

      23/04/2006 - Roadmap for the years

      Groove

      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

      +


      22/04/2006 - GLM 0.3.2 released

      Groove

      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

      +

      Download: GLM 0.3.2

      28/03/2006 - GLM 0.3.1 released

      Groove

      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

      +

      Download: GLM 0.3.1

      19/02/2006 - GLM 0.3 released

      Groove

      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

      +

      Download: GLM 0.3
      Download: Raytrace
      Documentation: Online documentation

      06/05/2005 - GLM 0.2 released

      Groove

      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

      +


      04/05/2005 - English pages

      Groove

      The english section of this site is now available. -


      21/02/2005 - GLM 0.1 is available

      +


      21/02/2005 - GLM 0.1 is available

      Groove

      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". diff --git a/doc/src/data.xml b/doc/src/data.xml index fdfaa64a..0a53ba5a 100644 --- a/doc/src/data.xml +++ b/doc/src/data.xml @@ -3,7 +3,7 @@

      - + @@ -65,7 +65,7 @@
      - + @@ -154,9 +154,9 @@ - + - The main improvement of this version comes from the extented number of matrix contructors so that a programmer can used diffent scalar types for each parameter. + 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. @@ -183,7 +183,7 @@ - The quaternion implementation has been updated as well, fixing the various slerp implementation flavour (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. + 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. diff --git a/doc/src/news.xsl b/doc/src/news.xsl index 59c736f6..3ae1682a 100644 --- a/doc/src/news.xsl +++ b/doc/src/news.xsl @@ -60,10 +60,7 @@
      - - - - +

      diff --git a/doc/src/util.xsl b/doc/src/util.xsl index d33980f8..fbcc86f7 100644 --- a/doc/src/util.xsl +++ b/doc/src/util.xsl @@ -171,20 +171,22 @@ - - - - - - - - - - - - - - + + + + + + + + + + + + + + + +
      From 852ada9c3d2970814c42e40417684f8a92decae3 Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Thu, 2 Jun 2011 12:51:52 +0100 Subject: [PATCH 2/3] Typo --- glm/core/func_common.hpp | 8 +------- glm/core/func_exponential.hpp | 4 ---- glm/core/setup.hpp | 3 +-- readme.txt | 8 ++++---- 4 files changed, 6 insertions(+), 17 deletions(-) diff --git a/glm/core/func_common.hpp b/glm/core/func_common.hpp index ec564bf8..1af20fad 100644 --- a/glm/core/func_common.hpp +++ b/glm/core/func_common.hpp @@ -14,14 +14,9 @@ namespace glm { - namespace test{ - void main_core_func_common(); - }//namespace test - namespace core{ namespace function{ - //! Define common functions from Section 8.3 of GLSL 1.30.8 specification. Included in glm namespace. - namespace common{ + namespace common{ //!< Define common functions from Section 8.3 of GLSL 1.30.8 specification. Included in glm namespace. /// \addtogroup core_funcs ///@{ @@ -330,7 +325,6 @@ namespace glm genType ldexp(genType const & x, genIType const & exp); ///@} - }//namespace common }//namespace function }//namespace core diff --git a/glm/core/func_exponential.hpp b/glm/core/func_exponential.hpp index 7871397f..c3bc0bd2 100644 --- a/glm/core/func_exponential.hpp +++ b/glm/core/func_exponential.hpp @@ -12,10 +12,6 @@ namespace glm { - namespace test{ - void main_core_func_exponential(); - }//namespace test - namespace core{ namespace function{ //! Define all exponential functions from Section 8.2 of GLSL 1.30.8 specification. Included in glm namespace. diff --git a/glm/core/setup.hpp b/glm/core/setup.hpp index 28a89b52..e3a569ec 100644 --- a/glm/core/setup.hpp +++ b/glm/core/setup.hpp @@ -17,8 +17,7 @@ #define GLM_VERSION_MAJOR 0 #define GLM_VERSION_MINOR 9 #define GLM_VERSION_PATCH 2 -#define GLM_VERSION_REVISION 2 - +#define GLM_VERSION_REVISION 3 /////////////////////////////////////////////////////////////////////////////////////////////////// // Compiler diff --git a/readme.txt b/readme.txt index 33f5726a..7413a3f8 100644 --- a/readme.txt +++ b/readme.txt @@ -1,13 +1,13 @@ ================================================================================ -G-Truc Creation +OpenGL Mathematics (GLM) -------------------------------------------------------------------------------- -www.g-truc.net +glm.g-truc.net glm@g-truc.net ================================================================================ The MIT License -------------------------------------------------------------------------------- -Copyright (c) 2005 - 2011 G-Truc Creation +Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -37,7 +37,7 @@ More informations in GLM manual: http://glm.g-truc.net/glm-0.9.2.pdf ================================================================================ -GLM 0.9.2.2: 2011-06-XX +GLM 0.9.2.2: 2011-06-02 -------------------------------------------------------------------------------- - Expend matrix constructors flexibility - Improved quaternion implementation From ebba087843af60c134be0ab10f46f3ff526c5403 Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Thu, 2 Jun 2011 13:06:24 +0100 Subject: [PATCH 3/3] typos --- glm/core/func_geometric.hpp | 7 +- glm/core/func_integer.hpp | 4 - glm/core/func_matrix.hpp | 4 - glm/core/func_noise.hpp | 4 - glm/core/func_packing.hpp | 4 - glm/core/func_trigonometric.hpp | 4 - glm/core/func_vector_relational.hpp | 4 - glm/core/type_half.hpp | 95 +++--- glm/core/type_int.hpp | 117 ++++--- glm/core/type_mat2x2.hpp | 449 +++++++++++++------------ glm/core/type_mat2x3.hpp | 361 ++++++++++----------- glm/core/type_mat2x4.hpp | 359 ++++++++++---------- glm/core/type_mat3x2.hpp | 371 +++++++++++---------- glm/core/type_mat3x3.hpp | 456 +++++++++++++------------- glm/core/type_mat3x4.hpp | 370 +++++++++++---------- glm/core/type_mat4x2.hpp | 386 +++++++++++----------- glm/core/type_mat4x3.hpp | 384 +++++++++++----------- glm/core/type_mat4x4.hpp | 464 +++++++++++++------------- glm/core/type_vec1.hpp | 230 +++++++------ glm/core/type_vec2.hpp | 413 ++++++++++++----------- glm/core/type_vec3.hpp | 462 +++++++++++++------------- glm/core/type_vec4.hpp | 486 ++++++++++++++-------------- 22 files changed, 2650 insertions(+), 2784 deletions(-) diff --git a/glm/core/func_geometric.hpp b/glm/core/func_geometric.hpp index c82d1043..bf572338 100644 --- a/glm/core/func_geometric.hpp +++ b/glm/core/func_geometric.hpp @@ -12,14 +12,9 @@ namespace glm { - namespace test{ - void main_core_func_geometric(); - }//namespace test - namespace core{ namespace function{ - //! Define all geometric functions from Section 8.4 of GLSL 1.30.8 specification. Included in glm namespace. - namespace geometric{ + namespace geometric{ //!< Define all geometric functions from Section 8.4 of GLSL 1.30.8 specification. Included in glm namespace. /// \addtogroup core_funcs ///@{ diff --git a/glm/core/func_integer.hpp b/glm/core/func_integer.hpp index b411b580..f75593a9 100644 --- a/glm/core/func_integer.hpp +++ b/glm/core/func_integer.hpp @@ -12,10 +12,6 @@ namespace glm { - namespace test{ - void main_core_func_integer(); - }//namespace test - namespace core{ namespace function{ //! Define integer functions from Section 8.8 of GLSL 4.00.8 specification. diff --git a/glm/core/func_matrix.hpp b/glm/core/func_matrix.hpp index 6a60b475..14f0b91d 100644 --- a/glm/core/func_matrix.hpp +++ b/glm/core/func_matrix.hpp @@ -12,10 +12,6 @@ namespace glm { - namespace test{ - void main_core_func_matrix(); - }//namespace test - namespace core{ namespace function{ //! Define all matrix functions from Section 8.5 of GLSL 1.30.8 specification. Included in glm namespace. diff --git a/glm/core/func_noise.hpp b/glm/core/func_noise.hpp index b76ec4b4..181ccee6 100644 --- a/glm/core/func_noise.hpp +++ b/glm/core/func_noise.hpp @@ -12,10 +12,6 @@ namespace glm { - namespace test{ - void main_core_func_noise(); - }//namespace test - namespace core{ namespace function{ // Define all noise functions from Section 8.9 of GLSL 1.30.8 specification. Included in glm namespace. diff --git a/glm/core/func_packing.hpp b/glm/core/func_packing.hpp index 3b427785..8f589e69 100644 --- a/glm/core/func_packing.hpp +++ b/glm/core/func_packing.hpp @@ -12,10 +12,6 @@ namespace glm { - namespace test{ - void main_core_func_packing(); - }//namespace test - namespace core{ namespace function{ //! Define packing functions from section 8.4 floating-point pack and unpack functions of GLSL 4.00.8 specification diff --git a/glm/core/func_trigonometric.hpp b/glm/core/func_trigonometric.hpp index 34e62579..aa34ebe7 100644 --- a/glm/core/func_trigonometric.hpp +++ b/glm/core/func_trigonometric.hpp @@ -12,10 +12,6 @@ namespace glm { - namespace test{ - void main_core_func_trigonometric(); - }//namespace test - namespace core{ namespace function{ //! Define Angle and trigonometry functions diff --git a/glm/core/func_vector_relational.hpp b/glm/core/func_vector_relational.hpp index d290defd..ffdc1a26 100644 --- a/glm/core/func_vector_relational.hpp +++ b/glm/core/func_vector_relational.hpp @@ -14,10 +14,6 @@ namespace glm { - namespace test{ - void main_core_func_vector_relational(); - }//namespace test - namespace core{ namespace function{ //! Define vector relational functions from Section 8.6 of GLSL 1.30.8 specification. diff --git a/glm/core/type_half.hpp b/glm/core/type_half.hpp index 00a90157..620c76ac 100644 --- a/glm/core/type_half.hpp +++ b/glm/core/type_half.hpp @@ -12,74 +12,65 @@ #include -namespace glm +namespace glm{ +namespace detail { - namespace test + typedef short hdata; + + float toFloat32(hdata value); + hdata toFloat16(float const & value); + + ///16-bit floating point type. + /// \ingroup gtc_half_float + class thalf { - bool main_type_half(); - - }//namespace test - - namespace detail - { - typedef short hdata; - - float toFloat32(hdata value); - hdata toFloat16(float const & value); - - ///16-bit floating point type. - /// \ingroup gtc_half_float - class thalf - { - public: - // Constructors - GLM_FUNC_DECL thalf(); - GLM_FUNC_DECL thalf(thalf const & s); + public: + // Constructors + GLM_FUNC_DECL thalf(); + GLM_FUNC_DECL thalf(thalf const & s); - template - GLM_FUNC_DECL explicit thalf(U const & s); + template + GLM_FUNC_DECL explicit thalf(U const & s); - // Cast - //operator float(); - GLM_FUNC_DECL operator float() const; - //operator double(); - //operator double() const; + // Cast + //operator float(); + GLM_FUNC_DECL operator float() const; + //operator double(); + //operator double() const; - // Unary updatable operators - GLM_FUNC_DECL thalf& operator= (thalf const & s); - GLM_FUNC_DECL thalf& operator+=(thalf const & s); - GLM_FUNC_DECL thalf& operator-=(thalf const & s); - GLM_FUNC_DECL thalf& operator*=(thalf const & s); - GLM_FUNC_DECL thalf& operator/=(thalf const & s); - GLM_FUNC_DECL thalf& operator++(); - GLM_FUNC_DECL thalf& operator--(); + // Unary updatable operators + GLM_FUNC_DECL thalf& operator= (thalf const & s); + GLM_FUNC_DECL thalf& operator+=(thalf const & s); + GLM_FUNC_DECL thalf& operator-=(thalf const & s); + GLM_FUNC_DECL thalf& operator*=(thalf const & s); + GLM_FUNC_DECL thalf& operator/=(thalf const & s); + GLM_FUNC_DECL thalf& operator++(); + GLM_FUNC_DECL thalf& operator--(); - GLM_FUNC_DECL float toFloat() const{return toFloat32(data);} + GLM_FUNC_DECL float toFloat() const{return toFloat32(data);} - GLM_FUNC_DECL hdata _data() const{return data;} + GLM_FUNC_DECL hdata _data() const{return data;} - private: - hdata data; - }; + private: + hdata data; + }; - thalf operator+ (thalf const & s1, thalf const & s2); + thalf operator+ (thalf const & s1, thalf const & s2); - thalf operator- (thalf const & s1, thalf const & s2); + thalf operator- (thalf const & s1, thalf const & s2); - thalf operator* (thalf const & s1, thalf const & s2); + thalf operator* (thalf const & s1, thalf const & s2); - thalf operator/ (thalf const & s1, thalf const & s2); + thalf operator/ (thalf const & s1, thalf const & s2); - // Unary constant operators - thalf operator- (thalf const & s); + // Unary constant operators + thalf operator- (thalf const & s); - thalf operator-- (thalf const & s, int); - - thalf operator++ (thalf const & s, int); - - }//namespace detail + thalf operator-- (thalf const & s, int); + thalf operator++ (thalf const & s, int); +}//namespace detail }//namespace glm #include "type_half.inl" diff --git a/glm/core/type_int.hpp b/glm/core/type_int.hpp index 59abf8a4..eb4ed513 100644 --- a/glm/core/type_int.hpp +++ b/glm/core/type_int.hpp @@ -13,71 +13,66 @@ #include "setup.hpp" #include "_detail.hpp" -namespace glm +namespace glm{ +namespace detail { - namespace detail - { - typedef signed short lowp_int_t; - typedef signed int mediump_int_t; - typedef sint64 highp_int_t; + typedef signed short lowp_int_t; + typedef signed int mediump_int_t; + typedef sint64 highp_int_t; - typedef unsigned short lowp_uint_t; - typedef unsigned int mediump_uint_t; - typedef uint64 highp_uint_t; + typedef unsigned short lowp_uint_t; + typedef unsigned int mediump_uint_t; + typedef uint64 highp_uint_t; - GLM_DETAIL_IS_INT(signed char); - GLM_DETAIL_IS_INT(signed short); - GLM_DETAIL_IS_INT(signed int); - GLM_DETAIL_IS_INT(signed long); - GLM_DETAIL_IS_INT(highp_int_t); + GLM_DETAIL_IS_INT(signed char); + GLM_DETAIL_IS_INT(signed short); + GLM_DETAIL_IS_INT(signed int); + GLM_DETAIL_IS_INT(signed long); + GLM_DETAIL_IS_INT(highp_int_t); - GLM_DETAIL_IS_UINT(unsigned char); - GLM_DETAIL_IS_UINT(unsigned short); - GLM_DETAIL_IS_UINT(unsigned int); - GLM_DETAIL_IS_UINT(unsigned long); - GLM_DETAIL_IS_UINT(highp_uint_t); - } - //namespace detail + GLM_DETAIL_IS_UINT(unsigned char); + GLM_DETAIL_IS_UINT(unsigned short); + GLM_DETAIL_IS_UINT(unsigned int); + GLM_DETAIL_IS_UINT(unsigned long); + GLM_DETAIL_IS_UINT(highp_uint_t); +}//namespace detail - namespace core{ - namespace type{ +namespace core{ +namespace type{ +namespace precision //!< Namespace for precision stuff. +{ + //! Low precision signed integer. + //! There is no guarantee on the actual precision. + //! From GLSL 1.30.8 specification. + //! \ingroup core_precision + typedef detail::lowp_int_t lowp_int; + //! Medium precision signed integer. + //! There is no guarantee on the actual precision. + //! From GLSL 1.30.8 specification. + //! \ingroup core_precision + typedef detail::mediump_int_t mediump_int; + //! High precision signed integer. + //! There is no guarantee on the actual precision. + //! From GLSL 1.30.8 specification. + //! \ingroup core_precision + typedef detail::highp_int_t highp_int; - ///namespace for precision stuff. - namespace precision - { - //! Low precision signed integer. - //! There is no guarantee on the actual precision. - //! From GLSL 1.30.8 specification. - //! \ingroup core_precision - typedef detail::lowp_int_t lowp_int; - //! Medium precision signed integer. - //! There is no guarantee on the actual precision. - //! From GLSL 1.30.8 specification. - //! \ingroup core_precision - typedef detail::mediump_int_t mediump_int; - //! High precision signed integer. - //! There is no guarantee on the actual precision. - //! From GLSL 1.30.8 specification. - //! \ingroup core_precision - typedef detail::highp_int_t highp_int; - - //! Low precision unsigned integer. - //! There is no guarantee on the actual precision. - //! From GLSL 1.30.8 specification. - //! \ingroup core_precision - typedef detail::lowp_uint_t lowp_uint; - //! Medium precision unsigned integer. - //! There is no guarantee on the actual precision. - //! From GLSL 1.30.8 specification. - //! \ingroup core_precision - typedef detail::mediump_uint_t mediump_uint; - //! High precision unsigned integer. - //! There is no guarantee on the actual precision. - //! From GLSL 1.30.8 specification. - //! \ingroup core_precision - typedef detail::highp_uint_t highp_uint; - } - //namespace precision + //! Low precision unsigned integer. + //! There is no guarantee on the actual precision. + //! From GLSL 1.30.8 specification. + //! \ingroup core_precision + typedef detail::lowp_uint_t lowp_uint; + //! Medium precision unsigned integer. + //! There is no guarantee on the actual precision. + //! From GLSL 1.30.8 specification. + //! \ingroup core_precision + typedef detail::mediump_uint_t mediump_uint; + //! High precision unsigned integer. + //! There is no guarantee on the actual precision. + //! From GLSL 1.30.8 specification. + //! \ingroup core_precision + typedef detail::highp_uint_t highp_uint; +}//namespace precision #if(!defined(GLM_PRECISION_HIGHP_INT) && !defined(GLM_PRECISION_MEDIUMP_INT) && !defined(GLM_PRECISION_LOWP_INT)) typedef precision::mediump_int int_t; @@ -107,8 +102,8 @@ namespace glm //! From GLSL 1.30.8 specification section 4.1.3 Integers. typedef uint_t uint; - }//namespace type - }//namespace core +}//namespace type +}//namespace core }//namespace glm #endif//glm_core_type_int diff --git a/glm/core/type_mat2x2.hpp b/glm/core/type_mat2x2.hpp index 9ae7cd13..82092fc6 100644 --- a/glm/core/type_mat2x2.hpp +++ b/glm/core/type_mat2x2.hpp @@ -12,276 +12,267 @@ #include "type_mat.hpp" -namespace glm +namespace glm{ +namespace detail { - namespace test + template struct tvec1; + template struct tvec2; + template struct tvec3; + template struct tvec4; + template struct tmat2x2; + template struct tmat2x3; + template struct tmat2x4; + template struct tmat3x2; + template struct tmat3x3; + template struct tmat3x4; + template struct tmat4x2; + template struct tmat4x3; + template struct tmat4x4; + + //! \brief Template for 2 * 2 matrix of floating-point numbers. + //! \ingroup core_template + template + struct tmat2x2 { - void main_mat2x2(); - }//namespace test + enum ctor{null}; + typedef T value_type; + typedef std::size_t size_type; + typedef tvec2 col_type; + typedef tvec2 row_type; + static GLM_FUNC_DECL size_type col_size(); + static GLM_FUNC_DECL size_type row_size(); - namespace detail - { - template struct tvec1; - template struct tvec2; - template struct tvec3; - template struct tvec4; - template struct tmat2x2; - template struct tmat2x3; - template struct tmat2x4; - template struct tmat3x2; - template struct tmat3x3; - template struct tmat3x4; - template struct tmat4x2; - template struct tmat4x3; - template struct tmat4x4; + typedef tmat2x2 type; + typedef tmat2x2 transpose_type; - //! \brief Template for 2 * 2 matrix of floating-point numbers. - //! \ingroup core_template - template - struct tmat2x2 - { - enum ctor{null}; - typedef T value_type; - typedef std::size_t size_type; - typedef tvec2 col_type; - typedef tvec2 row_type; - static GLM_FUNC_DECL size_type col_size(); - static GLM_FUNC_DECL size_type row_size(); + public: + // Implementation detail + GLM_FUNC_DECL tmat2x2 _inverse() const; - typedef tmat2x2 type; - typedef tmat2x2 transpose_type; + private: + ////////////////////////////////////// + // Data + col_type value[2]; - public: - // Implementation detail - GLM_FUNC_DECL tmat2x2 _inverse() const; + public: + ////////////////////////////////////// + // Constructors + GLM_FUNC_DECL tmat2x2(); + GLM_FUNC_DECL tmat2x2( + tmat2x2 const & m); - private: - ////////////////////////////////////// - // Data - col_type value[2]; + GLM_FUNC_DECL explicit tmat2x2( + ctor Null); + GLM_FUNC_DECL explicit tmat2x2( + value_type const & x); + GLM_FUNC_DECL explicit tmat2x2( + value_type const & x1, value_type const & y1, + value_type const & x2, value_type const & y2); + GLM_FUNC_DECL explicit tmat2x2( + col_type const & v1, + col_type const & v2); - public: - ////////////////////////////////////// - // Constructors - GLM_FUNC_DECL tmat2x2(); - GLM_FUNC_DECL tmat2x2( - tmat2x2 const & m); - - GLM_FUNC_DECL explicit tmat2x2( - ctor Null); - GLM_FUNC_DECL explicit tmat2x2( - value_type const & x); - GLM_FUNC_DECL explicit tmat2x2( - value_type const & x1, value_type const & y1, - value_type const & x2, value_type const & y2); - GLM_FUNC_DECL explicit tmat2x2( - col_type const & v1, - col_type const & v2); - - ////////////////////////////////////// - // Conversions - template - GLM_FUNC_DECL explicit tmat2x2( - U const & x); + ////////////////////////////////////// + // Conversions + template + GLM_FUNC_DECL explicit tmat2x2( + U const & x); - template - GLM_FUNC_DECL explicit tmat2x2( - U const & x1, V const & y1, - M const & x2, N const & y2); + template + GLM_FUNC_DECL explicit tmat2x2( + U const & x1, V const & y1, + M const & x2, N const & y2); - template - GLM_FUNC_DECL explicit tmat2x2( - tvec2 const & v1, - tvec2 const & v2); + template + GLM_FUNC_DECL explicit tmat2x2( + tvec2 const & v1, + tvec2 const & v2); - ////////////////////////////////////// - // Matrix conversions - template - GLM_FUNC_DECL explicit tmat2x2(tmat2x2 const & m); + ////////////////////////////////////// + // Matrix conversions + template + GLM_FUNC_DECL explicit tmat2x2(tmat2x2 const & m); - GLM_FUNC_DECL explicit tmat2x2(tmat3x3 const & x); - GLM_FUNC_DECL explicit tmat2x2(tmat4x4 const & x); - GLM_FUNC_DECL explicit tmat2x2(tmat2x3 const & x); - GLM_FUNC_DECL explicit tmat2x2(tmat3x2 const & x); - GLM_FUNC_DECL explicit tmat2x2(tmat2x4 const & x); - GLM_FUNC_DECL explicit tmat2x2(tmat4x2 const & x); - GLM_FUNC_DECL explicit tmat2x2(tmat3x4 const & x); - GLM_FUNC_DECL explicit tmat2x2(tmat4x3 const & x); + GLM_FUNC_DECL explicit tmat2x2(tmat3x3 const & x); + GLM_FUNC_DECL explicit tmat2x2(tmat4x4 const & x); + GLM_FUNC_DECL explicit tmat2x2(tmat2x3 const & x); + GLM_FUNC_DECL explicit tmat2x2(tmat3x2 const & x); + GLM_FUNC_DECL explicit tmat2x2(tmat2x4 const & x); + GLM_FUNC_DECL explicit tmat2x2(tmat4x2 const & x); + GLM_FUNC_DECL explicit tmat2x2(tmat3x4 const & x); + GLM_FUNC_DECL explicit tmat2x2(tmat4x3 const & x); - ////////////////////////////////////// - // Accesses + ////////////////////////////////////// + // Accesses - GLM_FUNC_DECL col_type & operator[](size_type i); - GLM_FUNC_DECL col_type const & operator[](size_type i) const; + GLM_FUNC_DECL col_type & operator[](size_type i); + GLM_FUNC_DECL col_type const & operator[](size_type i) const; - // Unary updatable operators - GLM_FUNC_DECL tmat2x2 & operator=(tmat2x2 const & m); - template - GLM_FUNC_DECL tmat2x2 & operator=(tmat2x2 const & m); - template - GLM_FUNC_DECL tmat2x2 & operator+=(U const & s); - template - GLM_FUNC_DECL tmat2x2 & operator+=(tmat2x2 const & m); - template - GLM_FUNC_DECL tmat2x2 & operator-=(U const & s); - template - GLM_FUNC_DECL tmat2x2 & operator-=(tmat2x2 const & m); - template - GLM_FUNC_DECL tmat2x2 & operator*=(U const & s); - template - GLM_FUNC_DECL tmat2x2 & operator*=(tmat2x2 const & m); - template - GLM_FUNC_DECL tmat2x2 & operator/=(U const & s); - template - GLM_FUNC_DECL tmat2x2 & operator/=(tmat2x2 const & m); - GLM_FUNC_DECL tmat2x2 & operator++(); - GLM_FUNC_DECL tmat2x2 & operator--(); - }; + // Unary updatable operators + GLM_FUNC_DECL tmat2x2 & operator=(tmat2x2 const & m); + template + GLM_FUNC_DECL tmat2x2 & operator=(tmat2x2 const & m); + template + GLM_FUNC_DECL tmat2x2 & operator+=(U const & s); + template + GLM_FUNC_DECL tmat2x2 & operator+=(tmat2x2 const & m); + template + GLM_FUNC_DECL tmat2x2 & operator-=(U const & s); + template + GLM_FUNC_DECL tmat2x2 & operator-=(tmat2x2 const & m); + template + GLM_FUNC_DECL tmat2x2 & operator*=(U const & s); + template + GLM_FUNC_DECL tmat2x2 & operator*=(tmat2x2 const & m); + template + GLM_FUNC_DECL tmat2x2 & operator/=(U const & s); + template + GLM_FUNC_DECL tmat2x2 & operator/=(tmat2x2 const & m); + GLM_FUNC_DECL tmat2x2 & operator++(); + GLM_FUNC_DECL tmat2x2 & operator--(); + }; - // Binary operators - template - tmat2x2 operator+ ( - tmat2x2 const & m, - typename tmat2x2::value_type const & s); + // Binary operators + template + tmat2x2 operator+ ( + tmat2x2 const & m, + typename tmat2x2::value_type const & s); - template - tmat2x2 operator+ ( - typename tmat2x2::value_type const & s, - tmat2x2 const & m); + template + tmat2x2 operator+ ( + typename tmat2x2::value_type const & s, + tmat2x2 const & m); - template - tmat2x2 operator+ ( - tmat2x2 const & m1, - tmat2x2 const & m2); + template + tmat2x2 operator+ ( + tmat2x2 const & m1, + tmat2x2 const & m2); - template - tmat2x2 operator- ( - tmat2x2 const & m, - typename tmat2x2::value_type const & s); + template + tmat2x2 operator- ( + tmat2x2 const & m, + typename tmat2x2::value_type const & s); - template - tmat2x2 operator- ( - typename tmat2x2::value_type const & s, - tmat2x2 const & m); + template + tmat2x2 operator- ( + typename tmat2x2::value_type const & s, + tmat2x2 const & m); - template - tmat2x2 operator- ( - tmat2x2 const & m1, - tmat2x2 const & m2); + template + tmat2x2 operator- ( + tmat2x2 const & m1, + tmat2x2 const & m2); - template - tmat2x2 operator* ( - tmat2x2 const & m, - typename tmat2x2::value_type const & s); + template + tmat2x2 operator* ( + tmat2x2 const & m, + typename tmat2x2::value_type const & s); - template - tmat2x2 operator* ( - typename tmat2x2::value_type const & s, - tmat2x2 const & m); + template + tmat2x2 operator* ( + typename tmat2x2::value_type const & s, + tmat2x2 const & m); - template - typename tmat2x2::col_type operator* ( - tmat2x2 const & m, - typename tmat2x2::row_type const & v); + template + typename tmat2x2::col_type operator* ( + tmat2x2 const & m, + typename tmat2x2::row_type const & v); - template - typename tmat2x2::row_type operator* ( - typename tmat2x2::col_type const & v, - tmat2x2 const & m); + template + typename tmat2x2::row_type operator* ( + typename tmat2x2::col_type const & v, + tmat2x2 const & m); - template - tmat2x2 operator* ( - tmat2x2 const & m1, - tmat2x2 const & m2); + template + tmat2x2 operator* ( + tmat2x2 const & m1, + tmat2x2 const & m2); - template - tmat2x2 operator/ ( - tmat2x2 const & m, - typename tmat2x2::value_type const & s); + template + tmat2x2 operator/ ( + tmat2x2 const & m, + typename tmat2x2::value_type const & s); - template - tmat2x2 operator/ ( - typename tmat2x2::value_type const & s, - tmat2x2 const & m); + template + tmat2x2 operator/ ( + typename tmat2x2::value_type const & s, + tmat2x2 const & m); - template - typename tmat2x2::col_type operator/ ( - tmat2x2 const & m, - typename tmat2x2::row_type const & v); + template + typename tmat2x2::col_type operator/ ( + tmat2x2 const & m, + typename tmat2x2::row_type const & v); - template - typename tmat2x2::row_type operator/ ( - typename tmat2x2::col_type const & v, - tmat2x2 const & m); + template + typename tmat2x2::row_type operator/ ( + typename tmat2x2::col_type const & v, + tmat2x2 const & m); - template - tmat2x2 operator/ ( - tmat2x2 const & m1, - tmat2x2 const & m2); + template + tmat2x2 operator/ ( + tmat2x2 const & m1, + tmat2x2 const & m2); - // Unary constant operators - template - tmat2x2 const operator- ( - tmat2x2 const & m); + // Unary constant operators + template + tmat2x2 const operator- ( + tmat2x2 const & m); - template - tmat2x2 const operator-- ( - tmat2x2 const & m, - int); + template + tmat2x2 const operator-- ( + tmat2x2 const & m, + int); - template - tmat2x2 const operator++ ( - tmat2x2 const & m, - int); + template + tmat2x2 const operator++ ( + tmat2x2 const & m, + int); +} //namespace detail - } //namespace detail +namespace core{ +namespace type{ +namespace precision +{ + //! 2 columns of 2 components matrix of low precision floating-point numbers. + //! There is no guarantee on the actual precision. + //! From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers + //! \ingroup core_precision + typedef detail::tmat2x2 lowp_mat2; - namespace core{ - namespace type{ + //! 2 columns of 2 components matrix of medium precision floating-point numbers. + //! There is no guarantee on the actual precision. + //! From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers + //! \ingroup core_precision + typedef detail::tmat2x2 mediump_mat2; - namespace precision - { - //! 2 columns of 2 components matrix of low precision floating-point numbers. - //! There is no guarantee on the actual precision. - //! From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers - //! \ingroup core_precision - typedef detail::tmat2x2 lowp_mat2; + //! 2 columns of 2 components matrix of high precision floating-point numbers. + //! There is no guarantee on the actual precision. + //! From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers + //! \ingroup core_precision + typedef detail::tmat2x2 highp_mat2; - //! 2 columns of 2 components matrix of medium precision floating-point numbers. - //! There is no guarantee on the actual precision. - //! From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers - //! \ingroup core_precision - typedef detail::tmat2x2 mediump_mat2; + //! 2 columns of 2 components matrix of low precision floating-point numbers. + //! There is no guarantee on the actual precision. + //! From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers + //! \ingroup core_precision + typedef detail::tmat2x2 lowp_mat2x2; - //! 2 columns of 2 components matrix of high precision floating-point numbers. - //! There is no guarantee on the actual precision. - //! From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers - //! \ingroup core_precision - typedef detail::tmat2x2 highp_mat2; + //! 2 columns of 2 components matrix of medium precision floating-point numbers. + //! There is no guarantee on the actual precision. + //! From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers + //! \ingroup core_precision + typedef detail::tmat2x2 mediump_mat2x2; - //! 2 columns of 2 components matrix of low precision floating-point numbers. - //! There is no guarantee on the actual precision. - //! From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers - //! \ingroup core_precision - typedef detail::tmat2x2 lowp_mat2x2; + //! 2 columns of 2 components matrix of high precision floating-point numbers. + //! There is no guarantee on the actual precision. + //! From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers + //! \ingroup core_precision + typedef detail::tmat2x2 highp_mat2x2; - //! 2 columns of 2 components matrix of medium precision floating-point numbers. - //! There is no guarantee on the actual precision. - //! From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers - //! \ingroup core_precision - typedef detail::tmat2x2 mediump_mat2x2; - - //! 2 columns of 2 components matrix of high precision floating-point numbers. - //! There is no guarantee on the actual precision. - //! From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers - //! \ingroup core_precision - typedef detail::tmat2x2 highp_mat2x2; - } - //namespace precision - - }//namespace type - }//namespace core -} //namespace glm +}//namespace precision +}//namespace type +}//namespace core +}//namespace glm #ifndef GLM_EXTERNAL_TEMPLATE #include "type_mat2x2.inl" diff --git a/glm/core/type_mat2x3.hpp b/glm/core/type_mat2x3.hpp index 4ff621e1..caf3bea5 100644 --- a/glm/core/type_mat2x3.hpp +++ b/glm/core/type_mat2x3.hpp @@ -12,222 +12,213 @@ #include "type_mat.hpp" -namespace glm +namespace glm{ +namespace detail { - namespace test + template struct tvec1; + template struct tvec2; + template struct tvec3; + template struct tvec4; + template struct tmat2x2; + template struct tmat2x3; + template struct tmat2x4; + template struct tmat3x2; + template struct tmat3x3; + template struct tmat3x4; + template struct tmat4x2; + template struct tmat4x3; + template struct tmat4x4; + + //! \brief Template for 2 columns and 3 rows matrix of floating-point numbers. + //! \ingroup core_template + template + struct tmat2x3 { - void main_mat2x3(); - }//namespace test + enum ctor{null}; + typedef T value_type; + typedef std::size_t size_type; + typedef tvec3 col_type; + typedef tvec2 row_type; + static GLM_FUNC_DECL size_type col_size(); + static GLM_FUNC_DECL size_type row_size(); - namespace detail - { - template struct tvec1; - template struct tvec2; - template struct tvec3; - template struct tvec4; - template struct tmat2x2; - template struct tmat2x3; - template struct tmat2x4; - template struct tmat3x2; - template struct tmat3x3; - template struct tmat3x4; - template struct tmat4x2; - template struct tmat4x3; - template struct tmat4x4; + typedef tmat2x3 type; + typedef tmat3x2 transpose_type; - //! \brief Template for 2 columns and 3 rows matrix of floating-point numbers. - //! \ingroup core_template - template - struct tmat2x3 - { - enum ctor{null}; - typedef T value_type; - typedef std::size_t size_type; - typedef tvec3 col_type; - typedef tvec2 row_type; - static GLM_FUNC_DECL size_type col_size(); - static GLM_FUNC_DECL size_type row_size(); + private: + // Data + col_type value[2]; - typedef tmat2x3 type; - typedef tmat3x2 transpose_type; + public: + // Constructors + GLM_FUNC_DECL tmat2x3(); + GLM_FUNC_DECL tmat2x3(tmat2x3 const & m); - private: - // Data - col_type value[2]; - - public: - // Constructors - GLM_FUNC_DECL tmat2x3(); - GLM_FUNC_DECL tmat2x3(tmat2x3 const & m); - - GLM_FUNC_DECL explicit tmat2x3( - ctor); - GLM_FUNC_DECL explicit tmat2x3( - value_type const & s); - GLM_FUNC_DECL explicit tmat2x3( - value_type const & x0, value_type const & y0, value_type const & z0, - value_type const & x1, value_type const & y1, value_type const & z1); - GLM_FUNC_DECL explicit tmat2x3( - col_type const & v0, - col_type const & v1); + GLM_FUNC_DECL explicit tmat2x3( + ctor); + GLM_FUNC_DECL explicit tmat2x3( + value_type const & s); + GLM_FUNC_DECL explicit tmat2x3( + value_type const & x0, value_type const & y0, value_type const & z0, + value_type const & x1, value_type const & y1, value_type const & z1); + GLM_FUNC_DECL explicit tmat2x3( + col_type const & v0, + col_type const & v1); - ////////////////////////////////////// - // Conversions - template - GLM_FUNC_DECL explicit tmat2x3( - U const & x); + ////////////////////////////////////// + // Conversions + template + GLM_FUNC_DECL explicit tmat2x3( + U const & x); - template - GLM_FUNC_DECL explicit tmat2x3( - X1 const & x1, Y1 const & y1, Z1 const & z1, - X2 const & x2, Y2 const & y2, Z2 const & z2); + template + GLM_FUNC_DECL explicit tmat2x3( + X1 const & x1, Y1 const & y1, Z1 const & z1, + X2 const & x2, Y2 const & y2, Z2 const & z2); - template - GLM_FUNC_DECL explicit tmat2x3( - tvec3 const & v1, - tvec3 const & v2); + template + GLM_FUNC_DECL explicit tmat2x3( + tvec3 const & v1, + tvec3 const & v2); - ////////////////////////////////////// - // Matrix conversion - template - GLM_FUNC_DECL explicit tmat2x3(tmat2x3 const & m); + ////////////////////////////////////// + // Matrix conversion + template + GLM_FUNC_DECL explicit tmat2x3(tmat2x3 const & m); - GLM_FUNC_DECL explicit tmat2x3(tmat2x2 const & x); - GLM_FUNC_DECL explicit tmat2x3(tmat3x3 const & x); - GLM_FUNC_DECL explicit tmat2x3(tmat4x4 const & x); - GLM_FUNC_DECL explicit tmat2x3(tmat2x4 const & x); - GLM_FUNC_DECL explicit tmat2x3(tmat3x2 const & x); - GLM_FUNC_DECL explicit tmat2x3(tmat3x4 const & x); - GLM_FUNC_DECL explicit tmat2x3(tmat4x2 const & x); - GLM_FUNC_DECL explicit tmat2x3(tmat4x3 const & x); + GLM_FUNC_DECL explicit tmat2x3(tmat2x2 const & x); + GLM_FUNC_DECL explicit tmat2x3(tmat3x3 const & x); + GLM_FUNC_DECL explicit tmat2x3(tmat4x4 const & x); + GLM_FUNC_DECL explicit tmat2x3(tmat2x4 const & x); + GLM_FUNC_DECL explicit tmat2x3(tmat3x2 const & x); + GLM_FUNC_DECL explicit tmat2x3(tmat3x4 const & x); + GLM_FUNC_DECL explicit tmat2x3(tmat4x2 const & x); + GLM_FUNC_DECL explicit tmat2x3(tmat4x3 const & x); - // Accesses - col_type & operator[](size_type i); - col_type const & operator[](size_type i) const; + // Accesses + col_type & operator[](size_type i); + col_type const & operator[](size_type i) const; - // Unary updatable operators - GLM_FUNC_DECL tmat2x3 & operator= (tmat2x3 const & m); - template - GLM_FUNC_DECL tmat2x3 & operator= (tmat2x3 const & m); - template - GLM_FUNC_DECL tmat2x3 & operator+= (U const & s); - template - GLM_FUNC_DECL tmat2x3 & operator+= (tmat2x3 const & m); - template - GLM_FUNC_DECL tmat2x3 & operator-= (U const & s); - template - GLM_FUNC_DECL tmat2x3 & operator-= (tmat2x3 const & m); - template - GLM_FUNC_DECL tmat2x3 & operator*= (U const & s); - template - GLM_FUNC_DECL tmat2x3 & operator*= (tmat2x3 const & m); - template - GLM_FUNC_DECL tmat2x3 & operator/= (U const & s); + // Unary updatable operators + GLM_FUNC_DECL tmat2x3 & operator= (tmat2x3 const & m); + template + GLM_FUNC_DECL tmat2x3 & operator= (tmat2x3 const & m); + template + GLM_FUNC_DECL tmat2x3 & operator+= (U const & s); + template + GLM_FUNC_DECL tmat2x3 & operator+= (tmat2x3 const & m); + template + GLM_FUNC_DECL tmat2x3 & operator-= (U const & s); + template + GLM_FUNC_DECL tmat2x3 & operator-= (tmat2x3 const & m); + template + GLM_FUNC_DECL tmat2x3 & operator*= (U const & s); + template + GLM_FUNC_DECL tmat2x3 & operator*= (tmat2x3 const & m); + template + GLM_FUNC_DECL tmat2x3 & operator/= (U const & s); - GLM_FUNC_DECL tmat2x3 & operator++ (); - GLM_FUNC_DECL tmat2x3 & operator-- (); - }; + GLM_FUNC_DECL tmat2x3 & operator++ (); + GLM_FUNC_DECL tmat2x3 & operator-- (); + }; - // Binary operators - template - tmat2x3 operator+ ( - tmat2x3 const & m, - typename tmat2x3::value_type const & s); + // Binary operators + template + tmat2x3 operator+ ( + tmat2x3 const & m, + typename tmat2x3::value_type const & s); - template - tmat2x3 operator+ ( - tmat2x3 const & m1, - tmat2x3 const & m2); + template + tmat2x3 operator+ ( + tmat2x3 const & m1, + tmat2x3 const & m2); - template - tmat2x3 operator- ( - tmat2x3 const & m, - typename tmat2x3::value_type const & s); + template + tmat2x3 operator- ( + tmat2x3 const & m, + typename tmat2x3::value_type const & s); - template - tmat2x3 operator- ( - tmat2x3 const & m1, - tmat2x3 const & m2); + template + tmat2x3 operator- ( + tmat2x3 const & m1, + tmat2x3 const & m2); - template - tmat2x3 operator* ( - tmat2x3 const & m, - typename tmat2x3::value_type const & s); + template + tmat2x3 operator* ( + tmat2x3 const & m, + typename tmat2x3::value_type const & s); - template - tmat2x3 operator* ( - typename tmat2x3::value_type const & s, - tmat2x3 const & m); + template + tmat2x3 operator* ( + typename tmat2x3::value_type const & s, + tmat2x3 const & m); - template - typename tmat2x3::col_type operator* ( - tmat2x3 const & m, - typename tmat2x3::row_type const & v); + template + typename tmat2x3::col_type operator* ( + tmat2x3 const & m, + typename tmat2x3::row_type const & v); - template - typename tmat2x3::row_type operator* ( - typename tmat2x3::col_type const & v, - tmat2x3 const & m); + template + typename tmat2x3::row_type operator* ( + typename tmat2x3::col_type const & v, + tmat2x3 const & m); - template - tmat3x3 operator* ( - tmat2x3 const & m1, - tmat3x2 const & m2); + template + tmat3x3 operator* ( + tmat2x3 const & m1, + tmat3x2 const & m2); - template - tmat2x3 operator/ ( - tmat2x3 const & m, - typename tmat2x3::value_type const & s); + template + tmat2x3 operator/ ( + tmat2x3 const & m, + typename tmat2x3::value_type const & s); - template - tmat2x3 operator/ ( - typename tmat2x3::value_type const & s, - tmat2x3 const & m); + template + tmat2x3 operator/ ( + typename tmat2x3::value_type const & s, + tmat2x3 const & m); - // Unary constant operators - template - tmat2x3 const operator- ( - tmat2x3 const & m); + // Unary constant operators + template + tmat2x3 const operator- ( + tmat2x3 const & m); - template - tmat2x3 const operator-- ( - tmat2x3 const & m, - int); + template + tmat2x3 const operator-- ( + tmat2x3 const & m, + int); - template - tmat2x3 const operator++ ( - tmat2x3 const & m, - int); + template + tmat2x3 const operator++ ( + tmat2x3 const & m, + int); - } //namespace detail +} //namespace detail - namespace core{ - namespace type{ - - namespace precision - { - //! 2 columns of 3 components matrix of low precision floating-point numbers. - //! There is no guarantee on the actual precision. - //! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers) - //! \ingroup core_precision - typedef detail::tmat2x3 lowp_mat2x3; - //! 2 columns of 3 components matrix of medium precision floating-point numbers. - //! There is no guarantee on the actual precision. - //! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers) - //! \ingroup core_precision - typedef detail::tmat2x3 mediump_mat2x3; - //! 2 columns of 3 components matrix of high precision floating-point numbers. - //! There is no guarantee on the actual precision. - //! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers) - //! \ingroup core_precision - typedef detail::tmat2x3 highp_mat2x3; - } - //namespace precision - - }//namespace type - }//namespace core -} //namespace glm +namespace core{ +namespace type{ +namespace precision +{ + //! 2 columns of 3 components matrix of low precision floating-point numbers. + //! There is no guarantee on the actual precision. + //! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers) + //! \ingroup core_precision + typedef detail::tmat2x3 lowp_mat2x3; + //! 2 columns of 3 components matrix of medium precision floating-point numbers. + //! There is no guarantee on the actual precision. + //! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers) + //! \ingroup core_precision + typedef detail::tmat2x3 mediump_mat2x3; + //! 2 columns of 3 components matrix of high precision floating-point numbers. + //! There is no guarantee on the actual precision. + //! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers) + //! \ingroup core_precision + typedef detail::tmat2x3 highp_mat2x3; +}//namespace precision +}//namespace type +}//namespace core +}//namespace glm #ifndef GLM_EXTERNAL_TEMPLATE #include "type_mat2x3.inl" diff --git a/glm/core/type_mat2x4.hpp b/glm/core/type_mat2x4.hpp index cf21c6f8..c14dea0f 100644 --- a/glm/core/type_mat2x4.hpp +++ b/glm/core/type_mat2x4.hpp @@ -12,220 +12,211 @@ #include "type_mat.hpp" -namespace glm +namespace glm{ +namespace detail { - namespace test + template struct tvec1; + template struct tvec2; + template struct tvec3; + template struct tvec4; + template struct tmat2x2; + template struct tmat2x3; + template struct tmat2x4; + template struct tmat3x2; + template struct tmat3x3; + template struct tmat3x4; + template struct tmat4x2; + template struct tmat4x3; + template struct tmat4x4; + + //! Template for 2 columns and 4 rows matrix of floating-point numbers. + //! \ingroup core_template + template + struct tmat2x4 { - void main_mat2x4(); - }//namespace test + enum ctor{null}; + typedef T value_type; + typedef std::size_t size_type; + typedef tvec4 col_type; + typedef tvec2 row_type; + static GLM_FUNC_DECL size_type col_size(); + static GLM_FUNC_DECL size_type row_size(); - namespace detail - { - template struct tvec1; - template struct tvec2; - template struct tvec3; - template struct tvec4; - template struct tmat2x2; - template struct tmat2x3; - template struct tmat2x4; - template struct tmat3x2; - template struct tmat3x3; - template struct tmat3x4; - template struct tmat4x2; - template struct tmat4x3; - template struct tmat4x4; + typedef tmat2x4 type; + typedef tmat4x2 transpose_type; - //! Template for 2 columns and 4 rows matrix of floating-point numbers. - //! \ingroup core_template - template - struct tmat2x4 - { - enum ctor{null}; - typedef T value_type; - typedef std::size_t size_type; - typedef tvec4 col_type; - typedef tvec2 row_type; - static GLM_FUNC_DECL size_type col_size(); - static GLM_FUNC_DECL size_type row_size(); + private: + // Data + col_type value[2]; - typedef tmat2x4 type; - typedef tmat4x2 transpose_type; + public: + // Constructors + GLM_FUNC_DECL tmat2x4(); + GLM_FUNC_DECL tmat2x4(tmat2x4 const & m); - private: - // Data - col_type value[2]; - - public: - // Constructors - GLM_FUNC_DECL tmat2x4(); - GLM_FUNC_DECL tmat2x4(tmat2x4 const & m); - - GLM_FUNC_DECL explicit tmat2x4( - ctor); - GLM_FUNC_DECL explicit tmat2x4( - value_type const & s); - GLM_FUNC_DECL explicit tmat2x4( - value_type const & x0, value_type const & y0, value_type const & z0, value_type const & w0, - value_type const & x1, value_type const & y1, value_type const & z1, value_type const & w1); - GLM_FUNC_DECL explicit tmat2x4( - col_type const & v0, - col_type const & v1); + GLM_FUNC_DECL explicit tmat2x4( + ctor); + GLM_FUNC_DECL explicit tmat2x4( + value_type const & s); + GLM_FUNC_DECL explicit tmat2x4( + value_type const & x0, value_type const & y0, value_type const & z0, value_type const & w0, + value_type const & x1, value_type const & y1, value_type const & z1, value_type const & w1); + GLM_FUNC_DECL explicit tmat2x4( + col_type const & v0, + col_type const & v1); - ////////////////////////////////////// - // Conversions - template - GLM_FUNC_DECL explicit tmat2x4( - U const & x); + ////////////////////////////////////// + // Conversions + template + GLM_FUNC_DECL explicit tmat2x4( + U const & x); - template < - typename X1, typename Y1, typename Z1, typename W1, - typename X2, typename Y2, typename Z2, typename W2> - GLM_FUNC_DECL explicit tmat2x4( - X1 const & x1, Y1 const & y1, Z1 const & z1, W1 const & w1, - X2 const & x2, Y2 const & y2, Z2 const & z2, W2 const & w2); + template < + typename X1, typename Y1, typename Z1, typename W1, + typename X2, typename Y2, typename Z2, typename W2> + GLM_FUNC_DECL explicit tmat2x4( + X1 const & x1, Y1 const & y1, Z1 const & z1, W1 const & w1, + X2 const & x2, Y2 const & y2, Z2 const & z2, W2 const & w2); - template - GLM_FUNC_DECL explicit tmat2x4( - tvec4 const & v1, - tvec4 const & v2); + template + GLM_FUNC_DECL explicit tmat2x4( + tvec4 const & v1, + tvec4 const & v2); - ////////////////////////////////////// - // Matrix conversions - template - GLM_FUNC_DECL explicit tmat2x4(tmat2x4 const & m); + ////////////////////////////////////// + // Matrix conversions + template + GLM_FUNC_DECL explicit tmat2x4(tmat2x4 const & m); - GLM_FUNC_DECL explicit tmat2x4(tmat2x2 const & x); - GLM_FUNC_DECL explicit tmat2x4(tmat3x3 const & x); - GLM_FUNC_DECL explicit tmat2x4(tmat4x4 const & x); - GLM_FUNC_DECL explicit tmat2x4(tmat2x3 const & x); - GLM_FUNC_DECL explicit tmat2x4(tmat3x2 const & x); - GLM_FUNC_DECL explicit tmat2x4(tmat3x4 const & x); - GLM_FUNC_DECL explicit tmat2x4(tmat4x2 const & x); - GLM_FUNC_DECL explicit tmat2x4(tmat4x3 const & x); + GLM_FUNC_DECL explicit tmat2x4(tmat2x2 const & x); + GLM_FUNC_DECL explicit tmat2x4(tmat3x3 const & x); + GLM_FUNC_DECL explicit tmat2x4(tmat4x4 const & x); + GLM_FUNC_DECL explicit tmat2x4(tmat2x3 const & x); + GLM_FUNC_DECL explicit tmat2x4(tmat3x2 const & x); + GLM_FUNC_DECL explicit tmat2x4(tmat3x4 const & x); + GLM_FUNC_DECL explicit tmat2x4(tmat4x2 const & x); + GLM_FUNC_DECL explicit tmat2x4(tmat4x3 const & x); - // Accesses - GLM_FUNC_DECL col_type & operator[](size_type i); - GLM_FUNC_DECL col_type const & operator[](size_type i) const; + // Accesses + GLM_FUNC_DECL col_type & operator[](size_type i); + GLM_FUNC_DECL col_type const & operator[](size_type i) const; - // Unary updatable operators - GLM_FUNC_DECL tmat2x4& operator= (tmat2x4 const & m); - template - GLM_FUNC_DECL tmat2x4& operator= (tmat2x4 const & m); - template - GLM_FUNC_DECL tmat2x4& operator+= (U const & s); - template - GLM_FUNC_DECL tmat2x4& operator+= (tmat2x4 const & m); - template - GLM_FUNC_DECL tmat2x4& operator-= (U const & s); - template - GLM_FUNC_DECL tmat2x4& operator-= (tmat2x4 const & m); - template - GLM_FUNC_DECL tmat2x4& operator*= (U const & s); - template - GLM_FUNC_DECL tmat2x4& operator*= (tmat2x4 const & m); - template - GLM_FUNC_DECL tmat2x4& operator/= (U const & s); + // Unary updatable operators + GLM_FUNC_DECL tmat2x4& operator= (tmat2x4 const & m); + template + GLM_FUNC_DECL tmat2x4& operator= (tmat2x4 const & m); + template + GLM_FUNC_DECL tmat2x4& operator+= (U const & s); + template + GLM_FUNC_DECL tmat2x4& operator+= (tmat2x4 const & m); + template + GLM_FUNC_DECL tmat2x4& operator-= (U const & s); + template + GLM_FUNC_DECL tmat2x4& operator-= (tmat2x4 const & m); + template + GLM_FUNC_DECL tmat2x4& operator*= (U const & s); + template + GLM_FUNC_DECL tmat2x4& operator*= (tmat2x4 const & m); + template + GLM_FUNC_DECL tmat2x4& operator/= (U const & s); - GLM_FUNC_DECL tmat2x4& operator++ (); - GLM_FUNC_DECL tmat2x4& operator-- (); - }; + GLM_FUNC_DECL tmat2x4& operator++ (); + GLM_FUNC_DECL tmat2x4& operator-- (); + }; - // Binary operators - template - tmat2x4 operator+ ( - tmat2x4 const & m, - typename tmat2x4::value_type const & s); + // Binary operators + template + tmat2x4 operator+ ( + tmat2x4 const & m, + typename tmat2x4::value_type const & s); - template - tmat2x4 operator+ ( - tmat2x4 const & m1, - tmat2x4 const & m2); + template + tmat2x4 operator+ ( + tmat2x4 const & m1, + tmat2x4 const & m2); - template - tmat2x4 operator- ( - tmat2x4 const & m, - typename tmat2x4::value_type const & s); + template + tmat2x4 operator- ( + tmat2x4 const & m, + typename tmat2x4::value_type const & s); - template - tmat2x4 operator- ( - tmat2x4 const & m1, - tmat2x4 const & m2); + template + tmat2x4 operator- ( + tmat2x4 const & m1, + tmat2x4 const & m2); - template - tmat2x4 operator* ( - tmat2x4 const & m, - typename tmat2x4::value_type const & s); + template + tmat2x4 operator* ( + tmat2x4 const & m, + typename tmat2x4::value_type const & s); - template - tmat2x4 operator* ( - typename tmat2x4::value_type const & s, - tmat2x4 const & m); + template + tmat2x4 operator* ( + typename tmat2x4::value_type const & s, + tmat2x4 const & m); - template - typename tmat2x4::col_type operator* ( - tmat2x4 const & m, - typename tmat2x4::row_type const & v); + template + typename tmat2x4::col_type operator* ( + tmat2x4 const & m, + typename tmat2x4::row_type const & v); - template - typename tmat2x4::row_type operator* ( - typename tmat2x4::col_type const & v, - tmat2x4 const & m); + template + typename tmat2x4::row_type operator* ( + typename tmat2x4::col_type const & v, + tmat2x4 const & m); - template - tmat2x4 operator* ( - tmat2x4 const & m1, - tmat2x4 const & m2); + template + tmat2x4 operator* ( + tmat2x4 const & m1, + tmat2x4 const & m2); - template - tmat2x4 operator/ ( - tmat2x4 const & m, - typename tmat2x4::value_type const & s); + template + tmat2x4 operator/ ( + tmat2x4 const & m, + typename tmat2x4::value_type const & s); - template - tmat2x4 operator/ ( - typename tmat2x4::value_type const & s, - tmat2x4 const & m); + template + tmat2x4 operator/ ( + typename tmat2x4::value_type const & s, + tmat2x4 const & m); - // Unary constant operators - template - tmat2x4 const operator- ( - tmat2x4 const & m); + // Unary constant operators + template + tmat2x4 const operator- ( + tmat2x4 const & m); - template - tmat2x4 const operator-- ( - tmat2x4 const & m, - int); + template + tmat2x4 const operator-- ( + tmat2x4 const & m, + int); - template - tmat2x4 const operator++ ( - tmat2x4 const & m, - int); + template + tmat2x4 const operator++ ( + tmat2x4 const & m, + int); - } //namespace detail +} //namespace detail - namespace core{ - namespace type{ - - namespace precision - { - //! 2 columns of 4 components matrix of low precision floating-point numbers. - //! There is no guarantee on the actual precision. - //! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers) - typedef detail::tmat2x4 lowp_mat2x4; - //! 2 columns of 4 components matrix of medium precision floating-point numbers. - //! There is no guarantee on the actual precision. - //! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers) - typedef detail::tmat2x4 mediump_mat2x4; - //! 2 columns of 4 components matrix of high precision floating-point numbers. - //! There is no guarantee on the actual precision. - //! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers) - typedef detail::tmat2x4 highp_mat2x4; - } - //namespace precision - - }//namespace type - }//namespace core -} //namespace glm +namespace core{ +namespace type{ +namespace precision +{ + //! 2 columns of 4 components matrix of low precision floating-point numbers. + //! There is no guarantee on the actual precision. + //! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers) + typedef detail::tmat2x4 lowp_mat2x4; + //! 2 columns of 4 components matrix of medium precision floating-point numbers. + //! There is no guarantee on the actual precision. + //! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers) + typedef detail::tmat2x4 mediump_mat2x4; + //! 2 columns of 4 components matrix of high precision floating-point numbers. + //! There is no guarantee on the actual precision. + //! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers) + typedef detail::tmat2x4 highp_mat2x4; +}//namespace precision +}//namespace type +}//namespace core +}//namespace glm #ifndef GLM_EXTERNAL_TEMPLATE #include "type_mat2x4.inl" diff --git a/glm/core/type_mat3x2.hpp b/glm/core/type_mat3x2.hpp index 70c0795a..bcfe9eb0 100644 --- a/glm/core/type_mat3x2.hpp +++ b/glm/core/type_mat3x2.hpp @@ -12,226 +12,217 @@ #include "type_mat.hpp" -namespace glm +namespace glm{ +namespace detail { - namespace test + template struct tvec1; + template struct tvec2; + template struct tvec3; + template struct tvec4; + template struct tmat2x2; + template struct tmat2x3; + template struct tmat2x4; + template struct tmat3x2; + template struct tmat3x3; + template struct tmat3x4; + template struct tmat4x2; + template struct tmat4x3; + template struct tmat4x4; + + //! \brief Template for 3 columns and 2 rows matrix of floating-point numbers. + //! \ingroup core_template + template + struct tmat3x2 { - void main_mat3x2(); - }//namespace test + enum ctor{null}; + typedef T value_type; + typedef std::size_t size_type; + typedef tvec2 col_type; + typedef tvec3 row_type; + static GLM_FUNC_DECL size_type col_size(); + static GLM_FUNC_DECL size_type row_size(); - namespace detail - { - template struct tvec1; - template struct tvec2; - template struct tvec3; - template struct tvec4; - template struct tmat2x2; - template struct tmat2x3; - template struct tmat2x4; - template struct tmat3x2; - template struct tmat3x3; - template struct tmat3x4; - template struct tmat4x2; - template struct tmat4x3; - template struct tmat4x4; + typedef tmat3x2 type; + typedef tmat2x3 transpose_type; - //! \brief Template for 3 columns and 2 rows matrix of floating-point numbers. - //! \ingroup core_template - template - struct tmat3x2 - { - enum ctor{null}; - typedef T value_type; - typedef std::size_t size_type; - typedef tvec2 col_type; - typedef tvec3 row_type; - static GLM_FUNC_DECL size_type col_size(); - static GLM_FUNC_DECL size_type row_size(); + private: + // Data + col_type value[3]; - typedef tmat3x2 type; - typedef tmat2x3 transpose_type; + public: + // Constructors + GLM_FUNC_DECL tmat3x2(); + GLM_FUNC_DECL tmat3x2(tmat3x2 const & m); - private: - // Data - col_type value[3]; + GLM_FUNC_DECL explicit tmat3x2( + ctor); + GLM_FUNC_DECL explicit tmat3x2( + value_type const & s); + GLM_FUNC_DECL explicit tmat3x2( + value_type const & x0, value_type const & y0, + value_type const & x1, value_type const & y1, + value_type const & x2, value_type const & y2); + GLM_FUNC_DECL explicit tmat3x2( + col_type const & v0, + col_type const & v1, + col_type const & v2); - public: - // Constructors - GLM_FUNC_DECL tmat3x2(); - GLM_FUNC_DECL tmat3x2(tmat3x2 const & m); - - GLM_FUNC_DECL explicit tmat3x2( - ctor); - GLM_FUNC_DECL explicit tmat3x2( - value_type const & s); - GLM_FUNC_DECL explicit tmat3x2( - value_type const & x0, value_type const & y0, - value_type const & x1, value_type const & y1, - value_type const & x2, value_type const & y2); - GLM_FUNC_DECL explicit tmat3x2( - col_type const & v0, - col_type const & v1, - col_type const & v2); - - ////////////////////////////////////// - // Conversions - template - GLM_FUNC_DECL explicit tmat3x2( - U const & x); + ////////////////////////////////////// + // Conversions + template + GLM_FUNC_DECL explicit tmat3x2( + U const & x); - template - < - typename X1, typename Y1, - typename X2, typename Y2, - typename X3, typename Y3 - > - GLM_FUNC_DECL explicit tmat3x2( - X1 const & x1, Y1 const & y1, - X2 const & x2, Y2 const & y2, - X3 const & x3, Y3 const & y3); + template + < + typename X1, typename Y1, + typename X2, typename Y2, + typename X3, typename Y3 + > + GLM_FUNC_DECL explicit tmat3x2( + X1 const & x1, Y1 const & y1, + X2 const & x2, Y2 const & y2, + X3 const & x3, Y3 const & y3); - template - GLM_FUNC_DECL explicit tmat3x2( - tvec2 const & v1, - tvec2 const & v2, - tvec2 const & v3); + template + GLM_FUNC_DECL explicit tmat3x2( + tvec2 const & v1, + tvec2 const & v2, + tvec2 const & v3); - // Matrix conversions - template - GLM_FUNC_DECL explicit tmat3x2(tmat3x2 const & m); + // Matrix conversions + template + GLM_FUNC_DECL explicit tmat3x2(tmat3x2 const & m); - GLM_FUNC_DECL explicit tmat3x2(tmat2x2 const & x); - GLM_FUNC_DECL explicit tmat3x2(tmat3x3 const & x); - GLM_FUNC_DECL explicit tmat3x2(tmat4x4 const & x); - GLM_FUNC_DECL explicit tmat3x2(tmat2x3 const & x); - GLM_FUNC_DECL explicit tmat3x2(tmat2x4 const & x); - GLM_FUNC_DECL explicit tmat3x2(tmat3x4 const & x); - GLM_FUNC_DECL explicit tmat3x2(tmat4x2 const & x); - GLM_FUNC_DECL explicit tmat3x2(tmat4x3 const & x); + GLM_FUNC_DECL explicit tmat3x2(tmat2x2 const & x); + GLM_FUNC_DECL explicit tmat3x2(tmat3x3 const & x); + GLM_FUNC_DECL explicit tmat3x2(tmat4x4 const & x); + GLM_FUNC_DECL explicit tmat3x2(tmat2x3 const & x); + GLM_FUNC_DECL explicit tmat3x2(tmat2x4 const & x); + GLM_FUNC_DECL explicit tmat3x2(tmat3x4 const & x); + GLM_FUNC_DECL explicit tmat3x2(tmat4x2 const & x); + GLM_FUNC_DECL explicit tmat3x2(tmat4x3 const & x); - // Accesses - GLM_FUNC_DECL col_type & operator[](size_type i); - GLM_FUNC_DECL col_type const & operator[](size_type i) const; + // Accesses + GLM_FUNC_DECL col_type & operator[](size_type i); + GLM_FUNC_DECL col_type const & operator[](size_type i) const; - // Unary updatable operators - GLM_FUNC_DECL tmat3x2 & operator= (tmat3x2 const & m); - template - GLM_FUNC_DECL tmat3x2 & operator= (tmat3x2 const & m); - template - GLM_FUNC_DECL tmat3x2 & operator+= (U const & s); - template - GLM_FUNC_DECL tmat3x2 & operator+= (tmat3x2 const & m); - template - GLM_FUNC_DECL tmat3x2 & operator-= (U const & s); - template - GLM_FUNC_DECL tmat3x2 & operator-= (tmat3x2 const & m); - template - GLM_FUNC_DECL tmat3x2 & operator*= (U const & s); - template - GLM_FUNC_DECL tmat3x2 & operator*= (tmat3x2 const & m); - template - GLM_FUNC_DECL tmat3x2 & operator/= (U const & s); + // Unary updatable operators + GLM_FUNC_DECL tmat3x2 & operator= (tmat3x2 const & m); + template + GLM_FUNC_DECL tmat3x2 & operator= (tmat3x2 const & m); + template + GLM_FUNC_DECL tmat3x2 & operator+= (U const & s); + template + GLM_FUNC_DECL tmat3x2 & operator+= (tmat3x2 const & m); + template + GLM_FUNC_DECL tmat3x2 & operator-= (U const & s); + template + GLM_FUNC_DECL tmat3x2 & operator-= (tmat3x2 const & m); + template + GLM_FUNC_DECL tmat3x2 & operator*= (U const & s); + template + GLM_FUNC_DECL tmat3x2 & operator*= (tmat3x2 const & m); + template + GLM_FUNC_DECL tmat3x2 & operator/= (U const & s); - GLM_FUNC_DECL tmat3x2 & operator++ (); - GLM_FUNC_DECL tmat3x2 & operator-- (); - }; + GLM_FUNC_DECL tmat3x2 & operator++ (); + GLM_FUNC_DECL tmat3x2 & operator-- (); + }; - // Binary operators - template - tmat3x2 operator+ ( - tmat3x2 const & m, - typename tmat3x2::value_type const & s); + // Binary operators + template + tmat3x2 operator+ ( + tmat3x2 const & m, + typename tmat3x2::value_type const & s); - template - tmat3x2 operator+ ( - tmat3x2 const & m1, - tmat3x2 const & m2); + template + tmat3x2 operator+ ( + tmat3x2 const & m1, + tmat3x2 const & m2); - template - tmat3x2 operator- ( - tmat3x2 const & m, - typename tmat3x2::value_type const & s); + template + tmat3x2 operator- ( + tmat3x2 const & m, + typename tmat3x2::value_type const & s); - template - tmat3x2 operator- ( - tmat3x2 const & m1, - tmat3x2 const & m2); + template + tmat3x2 operator- ( + tmat3x2 const & m1, + tmat3x2 const & m2); - template - tmat3x2 operator* ( - tmat3x2 const & m, - typename tmat3x2::value_type const & s); + template + tmat3x2 operator* ( + tmat3x2 const & m, + typename tmat3x2::value_type const & s); - template - tmat3x2 operator* ( - typename tmat3x2::value_type const & s, - tmat3x2 const & m); + template + tmat3x2 operator* ( + typename tmat3x2::value_type const & s, + tmat3x2 const & m); - template - typename tmat3x2::col_type operator* ( - tmat3x2 const & m, - typename tmat3x2::row_type const & v); + template + typename tmat3x2::col_type operator* ( + tmat3x2 const & m, + typename tmat3x2::row_type const & v); - template - typename tmat3x2::row_type operator* ( - typename tmat3x2::col_type const & v, - tmat3x2 const & m); + template + typename tmat3x2::row_type operator* ( + typename tmat3x2::col_type const & v, + tmat3x2 const & m); - template - tmat2x2 operator* ( - tmat3x2 const & m1, - tmat2x3 const & m2); + template + tmat2x2 operator* ( + tmat3x2 const & m1, + tmat2x3 const & m2); - template - tmat3x2 operator/ ( - tmat3x2 const & m, - typename tmat3x2::value_type const & s); + template + tmat3x2 operator/ ( + tmat3x2 const & m, + typename tmat3x2::value_type const & s); - template - tmat3x2 operator/ ( - typename tmat3x2::value_type const & s, - tmat3x2 const & m); + template + tmat3x2 operator/ ( + typename tmat3x2::value_type const & s, + tmat3x2 const & m); - // Unary constant operators - template - tmat3x2 const operator- ( - tmat3x2 const & m); + // Unary constant operators + template + tmat3x2 const operator- ( + tmat3x2 const & m); - template - tmat3x2 const operator-- ( - tmat3x2 const & m, - int); + template + tmat3x2 const operator-- ( + tmat3x2 const & m, + int); - template - tmat3x2 const operator++ ( - tmat3x2 const & m, - int); + template + tmat3x2 const operator++ ( + tmat3x2 const & m, + int); - } //namespace detail +} //namespace detail - namespace core{ - namespace type{ - - namespace precision - { - //! 3 columns of 2 components matrix of low precision floating-point numbers. - //! There is no guarantee on the actual precision. - //! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers) - typedef detail::tmat3x2 lowp_mat3x2; - //! 3 columns of 2 components matrix of medium precision floating-point numbers. - //! There is no guarantee on the actual precision. - //! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers) - typedef detail::tmat3x2 mediump_mat3x2; - //! 3 columns of 2 components matrix of high precision floating-point numbers. - //! There is no guarantee on the actual precision. - //! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers) - typedef detail::tmat3x2 highp_mat3x2; - } - //namespace precision - - }//namespace type - }//namespace core -} //namespace glm +namespace core{ +namespace type{ +namespace precision +{ + //! 3 columns of 2 components matrix of low precision floating-point numbers. + //! There is no guarantee on the actual precision. + //! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers) + typedef detail::tmat3x2 lowp_mat3x2; + //! 3 columns of 2 components matrix of medium precision floating-point numbers. + //! There is no guarantee on the actual precision. + //! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers) + typedef detail::tmat3x2 mediump_mat3x2; + //! 3 columns of 2 components matrix of high precision floating-point numbers. + //! There is no guarantee on the actual precision. + //! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers) + typedef detail::tmat3x2 highp_mat3x2; +}//namespace precision +}//namespace type +}//namespace core +}//namespace glm #ifndef GLM_EXTERNAL_TEMPLATE #include "type_mat3x2.inl" diff --git a/glm/core/type_mat3x3.hpp b/glm/core/type_mat3x3.hpp index 4f47eb7a..50965d8d 100644 --- a/glm/core/type_mat3x3.hpp +++ b/glm/core/type_mat3x3.hpp @@ -12,277 +12,269 @@ #include "type_mat.hpp" -namespace glm +namespace glm{ +namespace detail { - namespace test + template struct tvec1; + template struct tvec2; + template struct tvec3; + template struct tvec4; + template struct tmat2x2; + template struct tmat2x3; + template struct tmat2x4; + template struct tmat3x2; + template struct tmat3x3; + template struct tmat3x4; + template struct tmat4x2; + template struct tmat4x3; + template struct tmat4x4; + + //! \brief Template for 3 * 3 matrix of floating-point numbers. + //! \ingroup core_template + template + struct tmat3x3 { - void main_mat3x3(); - }//namespace test + enum ctor{null}; + typedef T value_type; + typedef std::size_t size_type; + typedef tvec3 col_type; + typedef tvec3 row_type; + static GLM_FUNC_DECL size_type col_size(); + static GLM_FUNC_DECL size_type row_size(); - namespace detail - { - template struct tvec1; - template struct tvec2; - template struct tvec3; - template struct tvec4; - template struct tmat2x2; - template struct tmat2x3; - template struct tmat2x4; - template struct tmat3x2; - template struct tmat3x3; - template struct tmat3x4; - template struct tmat4x2; - template struct tmat4x3; - template struct tmat4x4; + typedef tmat3x3 type; + typedef tmat3x3 transpose_type; - //! \brief Template for 3 * 3 matrix of floating-point numbers. - //! \ingroup core_template - template - struct tmat3x3 - { - enum ctor{null}; - typedef T value_type; - typedef std::size_t size_type; - typedef tvec3 col_type; - typedef tvec3 row_type; - static GLM_FUNC_DECL size_type col_size(); - static GLM_FUNC_DECL size_type row_size(); + public: + // Implementation detail + GLM_FUNC_DECL tmat3x3 _inverse() const; - typedef tmat3x3 type; - typedef tmat3x3 transpose_type; + private: + // Data + col_type value[3]; - public: - // Implementation detail - GLM_FUNC_DECL tmat3x3 _inverse() const; + public: + // Constructors + GLM_FUNC_DECL tmat3x3(); + GLM_FUNC_DECL tmat3x3(tmat3x3 const & m); - private: - // Data - col_type value[3]; + GLM_FUNC_DECL explicit tmat3x3( + ctor Null); + GLM_FUNC_DECL explicit tmat3x3( + value_type const & s); + GLM_FUNC_DECL explicit tmat3x3( + value_type const & x0, value_type const & y0, value_type const & z0, + value_type const & x1, value_type const & y1, value_type const & z1, + value_type const & x2, value_type const & y2, value_type const & z2); + GLM_FUNC_DECL explicit tmat3x3( + col_type const & v0, + col_type const & v1, + col_type const & v2); - public: - // Constructors - GLM_FUNC_DECL tmat3x3(); - GLM_FUNC_DECL tmat3x3(tmat3x3 const & m); - - GLM_FUNC_DECL explicit tmat3x3( - ctor Null); - GLM_FUNC_DECL explicit tmat3x3( - value_type const & s); - GLM_FUNC_DECL explicit tmat3x3( - value_type const & x0, value_type const & y0, value_type const & z0, - value_type const & x1, value_type const & y1, value_type const & z1, - value_type const & x2, value_type const & y2, value_type const & z2); - GLM_FUNC_DECL explicit tmat3x3( - col_type const & v0, - col_type const & v1, - col_type const & v2); - - ////////////////////////////////////// - // Conversions - template - GLM_FUNC_DECL explicit tmat3x3( - U const & x); + ////////////////////////////////////// + // Conversions + template + GLM_FUNC_DECL explicit tmat3x3( + U const & x); - template - < - typename X1, typename Y1, typename Z1, - typename X2, typename Y2, typename Z2, - typename X3, typename Y3, typename Z3 - > - GLM_FUNC_DECL explicit tmat3x3( - X1 const & x1, Y1 const & y1, Z1 const & z1, - X2 const & x2, Y2 const & y2, Z2 const & z2, - X3 const & x3, Y3 const & y3, Z3 const & z3); + template + < + typename X1, typename Y1, typename Z1, + typename X2, typename Y2, typename Z2, + typename X3, typename Y3, typename Z3 + > + GLM_FUNC_DECL explicit tmat3x3( + X1 const & x1, Y1 const & y1, Z1 const & z1, + X2 const & x2, Y2 const & y2, Z2 const & z2, + X3 const & x3, Y3 const & y3, Z3 const & z3); - template - GLM_FUNC_DECL explicit tmat3x3( - tvec3 const & v1, - tvec3 const & v2, - tvec3 const & v3); + template + GLM_FUNC_DECL explicit tmat3x3( + tvec3 const & v1, + tvec3 const & v2, + tvec3 const & v3); - // Matrix conversions - template - GLM_FUNC_DECL explicit tmat3x3(tmat3x3 const & m); + // Matrix conversions + template + GLM_FUNC_DECL explicit tmat3x3(tmat3x3 const & m); - GLM_FUNC_DECL explicit tmat3x3(tmat2x2 const & x); - GLM_FUNC_DECL explicit tmat3x3(tmat4x4 const & x); - GLM_FUNC_DECL explicit tmat3x3(tmat2x3 const & x); - GLM_FUNC_DECL explicit tmat3x3(tmat3x2 const & x); - GLM_FUNC_DECL explicit tmat3x3(tmat2x4 const & x); - GLM_FUNC_DECL explicit tmat3x3(tmat4x2 const & x); - GLM_FUNC_DECL explicit tmat3x3(tmat3x4 const & x); - GLM_FUNC_DECL explicit tmat3x3(tmat4x3 const & x); + GLM_FUNC_DECL explicit tmat3x3(tmat2x2 const & x); + GLM_FUNC_DECL explicit tmat3x3(tmat4x4 const & x); + GLM_FUNC_DECL explicit tmat3x3(tmat2x3 const & x); + GLM_FUNC_DECL explicit tmat3x3(tmat3x2 const & x); + GLM_FUNC_DECL explicit tmat3x3(tmat2x4 const & x); + GLM_FUNC_DECL explicit tmat3x3(tmat4x2 const & x); + GLM_FUNC_DECL explicit tmat3x3(tmat3x4 const & x); + GLM_FUNC_DECL explicit tmat3x3(tmat4x3 const & x); - // Accesses - GLM_FUNC_DECL col_type & operator[](size_type i); - GLM_FUNC_DECL col_type const & operator[](size_type i) const; + // Accesses + GLM_FUNC_DECL col_type & operator[](size_type i); + GLM_FUNC_DECL col_type const & operator[](size_type i) const; - // Unary updatable operators - GLM_FUNC_DECL tmat3x3& operator= (tmat3x3 const & m); - template - GLM_FUNC_DECL tmat3x3& operator= (tmat3x3 const & m); - template - GLM_FUNC_DECL tmat3x3& operator+= (U const & s); - template - GLM_FUNC_DECL tmat3x3& operator+= (tmat3x3 const & m); - template - GLM_FUNC_DECL tmat3x3& operator-= (U const & s); - template - GLM_FUNC_DECL tmat3x3& operator-= (tmat3x3 const & m); - template - GLM_FUNC_DECL tmat3x3& operator*= (U const & s); - template - GLM_FUNC_DECL tmat3x3& operator*= (tmat3x3 const & m); - template - GLM_FUNC_DECL tmat3x3& operator/= (U const & s); - template - GLM_FUNC_DECL tmat3x3& operator/= (tmat3x3 const & m); - GLM_FUNC_DECL tmat3x3& operator++ (); - GLM_FUNC_DECL tmat3x3& operator-- (); - }; + // Unary updatable operators + GLM_FUNC_DECL tmat3x3& operator= (tmat3x3 const & m); + template + GLM_FUNC_DECL tmat3x3& operator= (tmat3x3 const & m); + template + GLM_FUNC_DECL tmat3x3& operator+= (U const & s); + template + GLM_FUNC_DECL tmat3x3& operator+= (tmat3x3 const & m); + template + GLM_FUNC_DECL tmat3x3& operator-= (U const & s); + template + GLM_FUNC_DECL tmat3x3& operator-= (tmat3x3 const & m); + template + GLM_FUNC_DECL tmat3x3& operator*= (U const & s); + template + GLM_FUNC_DECL tmat3x3& operator*= (tmat3x3 const & m); + template + GLM_FUNC_DECL tmat3x3& operator/= (U const & s); + template + GLM_FUNC_DECL tmat3x3& operator/= (tmat3x3 const & m); + GLM_FUNC_DECL tmat3x3& operator++ (); + GLM_FUNC_DECL tmat3x3& operator-- (); + }; - // Binary operators - template - tmat3x3 operator+ ( - tmat3x3 const & m, - typename tmat3x3::value_type const & s); + // Binary operators + template + tmat3x3 operator+ ( + tmat3x3 const & m, + typename tmat3x3::value_type const & s); - template - tmat3x3 operator+ ( - typename tmat3x3::value_type const & s, - tmat3x3 const & m); + template + tmat3x3 operator+ ( + typename tmat3x3::value_type const & s, + tmat3x3 const & m); - template - tmat3x3 operator+ ( - tmat3x3 const & m1, - tmat3x3 const & m2); + template + tmat3x3 operator+ ( + tmat3x3 const & m1, + tmat3x3 const & m2); - template - tmat3x3 operator- ( - tmat3x3 const & m, - typename tmat3x3::value_type const & s); + template + tmat3x3 operator- ( + tmat3x3 const & m, + typename tmat3x3::value_type const & s); - template - tmat3x3 operator- ( - typename tmat3x3::value_type const & s, - tmat3x3 const & m); + template + tmat3x3 operator- ( + typename tmat3x3::value_type const & s, + tmat3x3 const & m); - template - tmat3x3 operator- ( - tmat3x3 const & m1, - tmat3x3 const & m2); + template + tmat3x3 operator- ( + tmat3x3 const & m1, + tmat3x3 const & m2); - template - tmat3x3 operator* ( - tmat3x3 const & m, - typename tmat3x3::value_type const & s); + template + tmat3x3 operator* ( + tmat3x3 const & m, + typename tmat3x3::value_type const & s); - template - tmat3x3 operator* ( - typename tmat3x3::value_type const & s, - tmat3x3 const & m); + template + tmat3x3 operator* ( + typename tmat3x3::value_type const & s, + tmat3x3 const & m); - template - typename tmat3x3::col_type operator* ( - tmat3x3 const & m, - typename tmat3x3::row_type const & v); + template + typename tmat3x3::col_type operator* ( + tmat3x3 const & m, + typename tmat3x3::row_type const & v); - template - typename tmat3x3::row_type operator* ( - typename tmat3x3::col_type const & v, - tmat3x3 const & m); + template + typename tmat3x3::row_type operator* ( + typename tmat3x3::col_type const & v, + tmat3x3 const & m); - template - tmat3x3 operator* ( - tmat3x3 const & m1, - tmat3x3 const & m2); + template + tmat3x3 operator* ( + tmat3x3 const & m1, + tmat3x3 const & m2); - template - tmat3x3 operator/ ( - tmat3x3 const & m, - typename tmat3x3::value_type const & s); + template + tmat3x3 operator/ ( + tmat3x3 const & m, + typename tmat3x3::value_type const & s); - template - tmat3x3 operator/ ( - typename tmat3x3::value_type const & s, - tmat3x3 const & m); + template + tmat3x3 operator/ ( + typename tmat3x3::value_type const & s, + tmat3x3 const & m); - template - typename tmat3x3::col_type operator/ ( - tmat3x3 const & m, - typename tmat3x3::row_type const & v); + template + typename tmat3x3::col_type operator/ ( + tmat3x3 const & m, + typename tmat3x3::row_type const & v); - template - typename tmat3x3::row_type operator/ ( - typename tmat3x3::col_type const & v, - tmat3x3 const & m); + template + typename tmat3x3::row_type operator/ ( + typename tmat3x3::col_type const & v, + tmat3x3 const & m); - template - tmat3x3 operator/ ( - tmat3x3 const & m1, - tmat3x3 const & m2); + template + tmat3x3 operator/ ( + tmat3x3 const & m1, + tmat3x3 const & m2); - // Unary constant operators - template - tmat3x3 const operator- ( - tmat3x3 const & m); + // Unary constant operators + template + tmat3x3 const operator- ( + tmat3x3 const & m); - template - tmat3x3 const operator-- ( - tmat3x3 const & m, - int); + template + tmat3x3 const operator-- ( + tmat3x3 const & m, + int); - template - tmat3x3 const operator++ ( - tmat3x3 const & m, - int); + template + tmat3x3 const operator++ ( + tmat3x3 const & m, + int); - } //namespace detail +} //namespace detail - namespace core{ - namespace type{ +namespace core{ +namespace type{ +namespace precision +{ + //! 3 columns of 3 components matrix of low precision floating-point numbers. + //! There is no guarantee on the actual precision. + //! From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers + //! \ingroup core_precision + typedef detail::tmat3x3 lowp_mat3; + //! 3 columns of 3 components matrix of medium precision floating-point numbers. + //! There is no guarantee on the actual precision. + //! From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers + //! \ingroup core_precision + typedef detail::tmat3x3 mediump_mat3; + //! 3 columns of 3 components matrix of high precision floating-point numbers. + //! There is no guarantee on the actual precision. + //! From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers + //! \ingroup core_precision + typedef detail::tmat3x3 highp_mat3; - namespace precision - { - //! 3 columns of 3 components matrix of low precision floating-point numbers. - //! There is no guarantee on the actual precision. - //! From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers - //! \ingroup core_precision - typedef detail::tmat3x3 lowp_mat3; - //! 3 columns of 3 components matrix of medium precision floating-point numbers. - //! There is no guarantee on the actual precision. - //! From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers - //! \ingroup core_precision - typedef detail::tmat3x3 mediump_mat3; - //! 3 columns of 3 components matrix of high precision floating-point numbers. - //! There is no guarantee on the actual precision. - //! From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers - //! \ingroup core_precision - typedef detail::tmat3x3 highp_mat3; + //! 3 columns of 3 components matrix of low precision floating-point numbers. + //! There is no guarantee on the actual precision. + //! From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers + //! \ingroup core_precision + typedef detail::tmat3x3 lowp_mat3x3; - //! 3 columns of 3 components matrix of low precision floating-point numbers. - //! There is no guarantee on the actual precision. - //! From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers - //! \ingroup core_precision - typedef detail::tmat3x3 lowp_mat3x3; + //! 3 columns of 3 components matrix of medium precision floating-point numbers. + //! There is no guarantee on the actual precision. + //! From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers + //! \ingroup core_precision + typedef detail::tmat3x3 mediump_mat3x3; - //! 3 columns of 3 components matrix of medium precision floating-point numbers. - //! There is no guarantee on the actual precision. - //! From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers - //! \ingroup core_precision - typedef detail::tmat3x3 mediump_mat3x3; + //! 3 columns of 3 components matrix of high precision floating-point numbers. + //! There is no guarantee on the actual precision. + //! From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers + //! \ingroup core_precision + typedef detail::tmat3x3 highp_mat3x3; - //! 3 columns of 3 components matrix of high precision floating-point numbers. - //! There is no guarantee on the actual precision. - //! From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers - //! \ingroup core_precision - typedef detail::tmat3x3 highp_mat3x3; - } - //namespace precision - - }//namespace type - }//namespace core -} //namespace glm +}//namespace precision +}//namespace type +}//namespace core +}//namespace glm #ifndef GLM_EXTERNAL_TEMPLATE #include "type_mat3x3.inl" diff --git a/glm/core/type_mat3x4.hpp b/glm/core/type_mat3x4.hpp index 7978361e..a60d9a56 100644 --- a/glm/core/type_mat3x4.hpp +++ b/glm/core/type_mat3x4.hpp @@ -12,226 +12,218 @@ #include "type_mat.hpp" -namespace glm +namespace glm{ +namespace detail { - namespace test + template struct tvec1; + template struct tvec2; + template struct tvec3; + template struct tvec4; + template struct tmat2x2; + template struct tmat2x3; + template struct tmat2x4; + template struct tmat3x2; + template struct tmat3x3; + template struct tmat3x4; + template struct tmat4x2; + template struct tmat4x3; + template struct tmat4x4; + + //! \brief Template for 3 columns and 4 rows matrix of floating-point numbers. + //! \ingroup core_template + template + struct tmat3x4 { - void main_mat3x4(); - }//namespace test + enum ctor{null}; + typedef T value_type; + typedef std::size_t size_type; + typedef tvec4 col_type; + typedef tvec3 row_type; + static GLM_FUNC_DECL size_type col_size(); + static GLM_FUNC_DECL size_type row_size(); - namespace detail - { - template struct tvec1; - template struct tvec2; - template struct tvec3; - template struct tvec4; - template struct tmat2x2; - template struct tmat2x3; - template struct tmat2x4; - template struct tmat3x2; - template struct tmat3x3; - template struct tmat3x4; - template struct tmat4x2; - template struct tmat4x3; - template struct tmat4x4; + typedef tmat3x4 type; + typedef tmat4x3 transpose_type; - //! \brief Template for 3 columns and 4 rows matrix of floating-point numbers. - //! \ingroup core_template - template - struct tmat3x4 - { - enum ctor{null}; - typedef T value_type; - typedef std::size_t size_type; - typedef tvec4 col_type; - typedef tvec3 row_type; - static GLM_FUNC_DECL size_type col_size(); - static GLM_FUNC_DECL size_type row_size(); + private: + // Data + col_type value[3]; - typedef tmat3x4 type; - typedef tmat4x3 transpose_type; + public: + // Constructors + GLM_FUNC_DECL tmat3x4(); + GLM_FUNC_DECL tmat3x4(tmat3x4 const & m); - private: - // Data - col_type value[3]; + GLM_FUNC_DECL explicit tmat3x4( + ctor Null); + GLM_FUNC_DECL explicit tmat3x4( + value_type const & s); + GLM_FUNC_DECL explicit tmat3x4( + value_type const & x0, value_type const & y0, value_type const & z0, value_type const & w0, + value_type const & x1, value_type const & y1, value_type const & z1, value_type const & w1, + value_type const & x2, value_type const & y2, value_type const & z2, value_type const & w2); + GLM_FUNC_DECL explicit tmat3x4( + col_type const & v0, + col_type const & v1, + col_type const & v2); - public: - // Constructors - GLM_FUNC_DECL tmat3x4(); - GLM_FUNC_DECL tmat3x4(tmat3x4 const & m); - - GLM_FUNC_DECL explicit tmat3x4( - ctor Null); - GLM_FUNC_DECL explicit tmat3x4( - value_type const & s); - GLM_FUNC_DECL explicit tmat3x4( - value_type const & x0, value_type const & y0, value_type const & z0, value_type const & w0, - value_type const & x1, value_type const & y1, value_type const & z1, value_type const & w1, - value_type const & x2, value_type const & y2, value_type const & z2, value_type const & w2); - GLM_FUNC_DECL explicit tmat3x4( - col_type const & v0, - col_type const & v1, - col_type const & v2); - - ////////////////////////////////////// - // Conversions - template - GLM_FUNC_DECL explicit tmat3x4( - U const & x); + ////////////////////////////////////// + // Conversions + template + GLM_FUNC_DECL explicit tmat3x4( + U const & x); - template - < - typename X1, typename Y1, typename Z1, typename W1, - typename X2, typename Y2, typename Z2, typename W2, - typename X3, typename Y3, typename Z3, typename W3 - > - GLM_FUNC_DECL explicit tmat3x4( - X1 const & x1, Y1 const & y1, Z1 const & z1, W1 const & w1, - X2 const & x2, Y2 const & y2, Z2 const & z2, W2 const & w2, - X3 const & x3, Y3 const & y3, Z3 const & z3, W3 const & w3); + template + < + typename X1, typename Y1, typename Z1, typename W1, + typename X2, typename Y2, typename Z2, typename W2, + typename X3, typename Y3, typename Z3, typename W3 + > + GLM_FUNC_DECL explicit tmat3x4( + X1 const & x1, Y1 const & y1, Z1 const & z1, W1 const & w1, + X2 const & x2, Y2 const & y2, Z2 const & z2, W2 const & w2, + X3 const & x3, Y3 const & y3, Z3 const & z3, W3 const & w3); - template - GLM_FUNC_DECL explicit tmat3x4( - tvec4 const & v1, - tvec4 const & v2, - tvec4 const & v3); + template + GLM_FUNC_DECL explicit tmat3x4( + tvec4 const & v1, + tvec4 const & v2, + tvec4 const & v3); - // Matrix conversion - template - GLM_FUNC_DECL explicit tmat3x4(tmat3x4 const & m); + // Matrix conversion + template + GLM_FUNC_DECL explicit tmat3x4(tmat3x4 const & m); - GLM_FUNC_DECL explicit tmat3x4(tmat2x2 const & x); - GLM_FUNC_DECL explicit tmat3x4(tmat3x3 const & x); - GLM_FUNC_DECL explicit tmat3x4(tmat4x4 const & x); - GLM_FUNC_DECL explicit tmat3x4(tmat2x3 const & x); - GLM_FUNC_DECL explicit tmat3x4(tmat3x2 const & x); - GLM_FUNC_DECL explicit tmat3x4(tmat2x4 const & x); - GLM_FUNC_DECL explicit tmat3x4(tmat4x2 const & x); - GLM_FUNC_DECL explicit tmat3x4(tmat4x3 const & x); + GLM_FUNC_DECL explicit tmat3x4(tmat2x2 const & x); + GLM_FUNC_DECL explicit tmat3x4(tmat3x3 const & x); + GLM_FUNC_DECL explicit tmat3x4(tmat4x4 const & x); + GLM_FUNC_DECL explicit tmat3x4(tmat2x3 const & x); + GLM_FUNC_DECL explicit tmat3x4(tmat3x2 const & x); + GLM_FUNC_DECL explicit tmat3x4(tmat2x4 const & x); + GLM_FUNC_DECL explicit tmat3x4(tmat4x2 const & x); + GLM_FUNC_DECL explicit tmat3x4(tmat4x3 const & x); - // Accesses - col_type & operator[](size_type i); - col_type const & operator[](size_type i) const; + // Accesses + col_type & operator[](size_type i); + col_type const & operator[](size_type i) const; - // Unary updatable operators - GLM_FUNC_DECL tmat3x4 & operator= (tmat3x4 const & m); - template - GLM_FUNC_DECL tmat3x4 & operator= (tmat3x4 const & m); - template - GLM_FUNC_DECL tmat3x4 & operator+= (U const & s); - template - GLM_FUNC_DECL tmat3x4 & operator+= (tmat3x4 const & m); - template - GLM_FUNC_DECL tmat3x4 & operator-= (U const & s); - template - GLM_FUNC_DECL tmat3x4 & operator-= (tmat3x4 const & m); - template - GLM_FUNC_DECL tmat3x4 & operator*= (U const & s); - template - GLM_FUNC_DECL tmat3x4 & operator*= (tmat3x4 const & m); - template - GLM_FUNC_DECL tmat3x4 & operator/= (U const & s); + // Unary updatable operators + GLM_FUNC_DECL tmat3x4 & operator= (tmat3x4 const & m); + template + GLM_FUNC_DECL tmat3x4 & operator= (tmat3x4 const & m); + template + GLM_FUNC_DECL tmat3x4 & operator+= (U const & s); + template + GLM_FUNC_DECL tmat3x4 & operator+= (tmat3x4 const & m); + template + GLM_FUNC_DECL tmat3x4 & operator-= (U const & s); + template + GLM_FUNC_DECL tmat3x4 & operator-= (tmat3x4 const & m); + template + GLM_FUNC_DECL tmat3x4 & operator*= (U const & s); + template + GLM_FUNC_DECL tmat3x4 & operator*= (tmat3x4 const & m); + template + GLM_FUNC_DECL tmat3x4 & operator/= (U const & s); - GLM_FUNC_DECL tmat3x4 & operator++ (); - GLM_FUNC_DECL tmat3x4 & operator-- (); - }; + GLM_FUNC_DECL tmat3x4 & operator++ (); + GLM_FUNC_DECL tmat3x4 & operator-- (); + }; - // Binary operators - template - tmat3x4 operator+ ( - tmat3x4 const & m, - typename tmat3x4::value_type const & s); + // Binary operators + template + tmat3x4 operator+ ( + tmat3x4 const & m, + typename tmat3x4::value_type const & s); - template - tmat3x4 operator+ ( - tmat3x4 const & m1, - tmat3x4 const & m2); + template + tmat3x4 operator+ ( + tmat3x4 const & m1, + tmat3x4 const & m2); - template - tmat3x4 operator- ( - tmat3x4 const & m, - typename tmat3x4::value_type const & s); + template + tmat3x4 operator- ( + tmat3x4 const & m, + typename tmat3x4::value_type const & s); - template - tmat3x4 operator- ( - tmat3x4 const & m1, - tmat3x4 const & m2); + template + tmat3x4 operator- ( + tmat3x4 const & m1, + tmat3x4 const & m2); - template - tmat3x4 operator* ( - tmat3x4 const & m, - typename tmat3x4::value_type const & s); + template + tmat3x4 operator* ( + tmat3x4 const & m, + typename tmat3x4::value_type const & s); - template - tmat3x4 operator* ( - typename tmat3x4::value_type const & s, - tmat3x4 const & m); + template + tmat3x4 operator* ( + typename tmat3x4::value_type const & s, + tmat3x4 const & m); - template - typename tmat3x4::col_type operator* ( - tmat3x4 const & m, - typename tmat3x4::row_type const & v); + template + typename tmat3x4::col_type operator* ( + tmat3x4 const & m, + typename tmat3x4::row_type const & v); - template - typename tmat3x4::row_type operator* ( - typename tmat3x4::col_type const & v, - tmat3x4 const & m); + template + typename tmat3x4::row_type operator* ( + typename tmat3x4::col_type const & v, + tmat3x4 const & m); - template - tmat4x4 operator* ( - tmat3x4 const & m1, - tmat4x3 const & m2); + template + tmat4x4 operator* ( + tmat3x4 const & m1, + tmat4x3 const & m2); - template - tmat3x4 operator/ ( - tmat3x4 const & m, - typename tmat3x4::value_type const & s); + template + tmat3x4 operator/ ( + tmat3x4 const & m, + typename tmat3x4::value_type const & s); - template - tmat3x4 operator/ ( - typename tmat3x4::value_type const & s, - tmat3x4 const & m); + template + tmat3x4 operator/ ( + typename tmat3x4::value_type const & s, + tmat3x4 const & m); - // Unary constant operators - template - tmat3x4 const operator- ( - tmat3x4 const & m); + // Unary constant operators + template + tmat3x4 const operator- ( + tmat3x4 const & m); - template - tmat3x4 const operator-- ( - tmat3x4 const & m, - int); + template + tmat3x4 const operator-- ( + tmat3x4 const & m, + int); - template - tmat3x4 const operator++ ( - tmat3x4 const & m, - int); + template + tmat3x4 const operator++ ( + tmat3x4 const & m, + int); - } //namespace detail +}//namespace detail - namespace core{ - namespace type{ +namespace core{ +namespace type{ +namespace precision +{ + //! 3 columns of 4 components matrix of low precision floating-point numbers. + //! There is no guarantee on the actual precision. + //! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers) + typedef detail::tmat3x4 lowp_mat3x4; + //! 3 columns of 4 components matrix of medium precision floating-point numbers. + //! There is no guarantee on the actual precision. + //! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers) + typedef detail::tmat3x4 mediump_mat3x4; + //! 3 columns of 4 components matrix of high precision floating-point numbers. + //! There is no guarantee on the actual precision. + //! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers) + typedef detail::tmat3x4 highp_mat3x4; - namespace precision - { - //! 3 columns of 4 components matrix of low precision floating-point numbers. - //! There is no guarantee on the actual precision. - //! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers) - typedef detail::tmat3x4 lowp_mat3x4; - //! 3 columns of 4 components matrix of medium precision floating-point numbers. - //! There is no guarantee on the actual precision. - //! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers) - typedef detail::tmat3x4 mediump_mat3x4; - //! 3 columns of 4 components matrix of high precision floating-point numbers. - //! There is no guarantee on the actual precision. - //! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers) - typedef detail::tmat3x4 highp_mat3x4; - } - //namespace precision - - }//namespace type - }//namespace core -} //namespace glm +}//namespace precision +}//namespace type +}//namespace core +}//namespace glm #ifndef GLM_EXTERNAL_TEMPLATE #include "type_mat3x4.inl" diff --git a/glm/core/type_mat4x2.hpp b/glm/core/type_mat4x2.hpp index 67c5b2b2..0b003aa0 100644 --- a/glm/core/type_mat4x2.hpp +++ b/glm/core/type_mat4x2.hpp @@ -12,234 +12,228 @@ #include "type_mat.hpp" -namespace glm +namespace glm{ +namespace detail { - namespace test + template struct tvec1; + template struct tvec2; + template struct tvec3; + template struct tvec4; + template struct tmat2x2; + template struct tmat2x3; + template struct tmat2x4; + template struct tmat3x2; + template struct tmat3x3; + template struct tmat3x4; + template struct tmat4x2; + template struct tmat4x3; + template struct tmat4x4; + + //! \brief Template for 4 columns and 2 rows matrix of floating-point numbers. + //! \ingroup core_template + template + struct tmat4x2 { - void main_mat4x2(); - }//namespace test + enum ctor{null}; + typedef T value_type; + typedef std::size_t size_type; + typedef tvec2 col_type; + typedef tvec4 row_type; + static GLM_FUNC_DECL size_type col_size(); + static GLM_FUNC_DECL size_type row_size(); - namespace detail - { - template struct tvec1; - template struct tvec2; - template struct tvec3; - template struct tvec4; - template struct tmat2x2; - template struct tmat2x3; - template struct tmat2x4; - template struct tmat3x2; - template struct tmat3x3; - template struct tmat3x4; - template struct tmat4x2; - template struct tmat4x3; - template struct tmat4x4; + typedef tmat4x2 type; + typedef tmat2x4 transpose_type; - //! \brief Template for 4 columns and 2 rows matrix of floating-point numbers. - //! \ingroup core_template - template - struct tmat4x2 - { - enum ctor{null}; - typedef T value_type; - typedef std::size_t size_type; - typedef tvec2 col_type; - typedef tvec4 row_type; - static GLM_FUNC_DECL size_type col_size(); - static GLM_FUNC_DECL size_type row_size(); + private: + // Data + col_type value[4]; - typedef tmat4x2 type; - typedef tmat2x4 transpose_type; + public: + // Constructors + GLM_FUNC_DECL tmat4x2(); + GLM_FUNC_DECL tmat4x2(tmat4x2 const & m); - private: - // Data - col_type value[4]; - - public: - // Constructors - GLM_FUNC_DECL tmat4x2(); - GLM_FUNC_DECL tmat4x2(tmat4x2 const & m); - - GLM_FUNC_DECL explicit tmat4x2( - ctor Null); - GLM_FUNC_DECL explicit tmat4x2( - value_type const & x); - GLM_FUNC_DECL explicit tmat4x2( - value_type const & x0, value_type const & y0, - value_type const & x1, value_type const & y1, - value_type const & x2, value_type const & y2, - value_type const & x3, value_type const & y3); - GLM_FUNC_DECL explicit tmat4x2( - col_type const & v0, - col_type const & v1, - col_type const & v2, - col_type const & v3); + GLM_FUNC_DECL explicit tmat4x2( + ctor Null); + GLM_FUNC_DECL explicit tmat4x2( + value_type const & x); + GLM_FUNC_DECL explicit tmat4x2( + value_type const & x0, value_type const & y0, + value_type const & x1, value_type const & y1, + value_type const & x2, value_type const & y2, + value_type const & x3, value_type const & y3); + GLM_FUNC_DECL explicit tmat4x2( + col_type const & v0, + col_type const & v1, + col_type const & v2, + col_type const & v3); - ////////////////////////////////////// - // Conversions - template - GLM_FUNC_DECL explicit tmat4x2( - U const & x); + ////////////////////////////////////// + // Conversions + template + GLM_FUNC_DECL explicit tmat4x2( + U const & x); - template - < - typename X1, typename Y1, - typename X2, typename Y2, - typename X3, typename Y3, - typename X4, typename Y4 - > - GLM_FUNC_DECL explicit tmat4x2( - X1 const & x1, Y1 const & y1, - X2 const & x2, Y2 const & y2, - X3 const & x3, Y3 const & y3, - X4 const & x4, Y4 const & y4); + template + < + typename X1, typename Y1, + typename X2, typename Y2, + typename X3, typename Y3, + typename X4, typename Y4 + > + GLM_FUNC_DECL explicit tmat4x2( + X1 const & x1, Y1 const & y1, + X2 const & x2, Y2 const & y2, + X3 const & x3, Y3 const & y3, + X4 const & x4, Y4 const & y4); - template - GLM_FUNC_DECL explicit tmat4x2( - tvec2 const & v1, - tvec2 const & v2, - tvec2 const & v3, - tvec2 const & v4); + template + GLM_FUNC_DECL explicit tmat4x2( + tvec2 const & v1, + tvec2 const & v2, + tvec2 const & v3, + tvec2 const & v4); - // Matrix conversions - template - GLM_FUNC_DECL explicit tmat4x2(tmat4x2 const & m); + // Matrix conversions + template + GLM_FUNC_DECL explicit tmat4x2(tmat4x2 const & m); - GLM_FUNC_DECL explicit tmat4x2(tmat2x2 const & x); - GLM_FUNC_DECL explicit tmat4x2(tmat3x3 const & x); - GLM_FUNC_DECL explicit tmat4x2(tmat4x4 const & x); - GLM_FUNC_DECL explicit tmat4x2(tmat2x3 const & x); - GLM_FUNC_DECL explicit tmat4x2(tmat3x2 const & x); - GLM_FUNC_DECL explicit tmat4x2(tmat2x4 const & x); - GLM_FUNC_DECL explicit tmat4x2(tmat4x3 const & x); - GLM_FUNC_DECL explicit tmat4x2(tmat3x4 const & x); + GLM_FUNC_DECL explicit tmat4x2(tmat2x2 const & x); + GLM_FUNC_DECL explicit tmat4x2(tmat3x3 const & x); + GLM_FUNC_DECL explicit tmat4x2(tmat4x4 const & x); + GLM_FUNC_DECL explicit tmat4x2(tmat2x3 const & x); + GLM_FUNC_DECL explicit tmat4x2(tmat3x2 const & x); + GLM_FUNC_DECL explicit tmat4x2(tmat2x4 const & x); + GLM_FUNC_DECL explicit tmat4x2(tmat4x3 const & x); + GLM_FUNC_DECL explicit tmat4x2(tmat3x4 const & x); - // Accesses - GLM_FUNC_DECL col_type & operator[](size_type i); - GLM_FUNC_DECL col_type const & operator[](size_type i) const; + // Accesses + GLM_FUNC_DECL col_type & operator[](size_type i); + GLM_FUNC_DECL col_type const & operator[](size_type i) const; - // Unary updatable operators - GLM_FUNC_DECL tmat4x2& operator= (tmat4x2 const & m); - template - GLM_FUNC_DECL tmat4x2& operator= (tmat4x2 const & m); - template - GLM_FUNC_DECL tmat4x2& operator+= (U const & s); - template - GLM_FUNC_DECL tmat4x2& operator+= (tmat4x2 const & m); - template - GLM_FUNC_DECL tmat4x2& operator-= (U const & s); - template - GLM_FUNC_DECL tmat4x2& operator-= (tmat4x2 const & m); - template - GLM_FUNC_DECL tmat4x2& operator*= (U const & s); - template - GLM_FUNC_DECL tmat4x2& operator*= (tmat4x2 const & m); - template - GLM_FUNC_DECL tmat4x2& operator/= (U const & s); + // Unary updatable operators + GLM_FUNC_DECL tmat4x2& operator= (tmat4x2 const & m); + template + GLM_FUNC_DECL tmat4x2& operator= (tmat4x2 const & m); + template + GLM_FUNC_DECL tmat4x2& operator+= (U const & s); + template + GLM_FUNC_DECL tmat4x2& operator+= (tmat4x2 const & m); + template + GLM_FUNC_DECL tmat4x2& operator-= (U const & s); + template + GLM_FUNC_DECL tmat4x2& operator-= (tmat4x2 const & m); + template + GLM_FUNC_DECL tmat4x2& operator*= (U const & s); + template + GLM_FUNC_DECL tmat4x2& operator*= (tmat4x2 const & m); + template + GLM_FUNC_DECL tmat4x2& operator/= (U const & s); - GLM_FUNC_DECL tmat4x2& operator++ (); - GLM_FUNC_DECL tmat4x2& operator-- (); - }; + GLM_FUNC_DECL tmat4x2& operator++ (); + GLM_FUNC_DECL tmat4x2& operator-- (); + }; - // Binary operators - template - tmat4x2 operator+ ( - tmat4x2 const & m, - typename tmat4x2::value_type const & s); + // Binary operators + template + tmat4x2 operator+ ( + tmat4x2 const & m, + typename tmat4x2::value_type const & s); - template - tmat4x2 operator+ ( - tmat4x2 const & m1, - tmat4x2 const & m2); + template + tmat4x2 operator+ ( + tmat4x2 const & m1, + tmat4x2 const & m2); - template - tmat4x2 operator- ( - tmat4x2 const & m, - typename tmat4x2::value_type const & s); + template + tmat4x2 operator- ( + tmat4x2 const & m, + typename tmat4x2::value_type const & s); - template - tmat4x2 operator- ( - tmat4x2 const & m1, - tmat4x2 const & m2); + template + tmat4x2 operator- ( + tmat4x2 const & m1, + tmat4x2 const & m2); - template - tmat4x2 operator* ( - tmat4x2 const & m, - typename tmat4x2::value_type const & s); + template + tmat4x2 operator* ( + tmat4x2 const & m, + typename tmat4x2::value_type const & s); - template - tmat4x2 operator* ( - typename tmat4x2::value_type const & s, - tmat4x2 const & m); + template + tmat4x2 operator* ( + typename tmat4x2::value_type const & s, + tmat4x2 const & m); - template - typename tmat4x2::col_type operator* ( - tmat4x2 const & m, - typename tmat4x2::row_type const & v); + template + typename tmat4x2::col_type operator* ( + tmat4x2 const & m, + typename tmat4x2::row_type const & v); - template - typename tmat4x2::row_type operator* ( - typename tmat4x2::col_type const & v, - tmat4x2 const & m); + template + typename tmat4x2::row_type operator* ( + typename tmat4x2::col_type const & v, + tmat4x2 const & m); - template - tmat2x2 operator* ( - tmat4x2 const & m1, - tmat2x4 const & m2); + template + tmat2x2 operator* ( + tmat4x2 const & m1, + tmat2x4 const & m2); - template - tmat4x2 operator/ ( - tmat4x2 const & m, - typename tmat4x2::value_type const & s); + template + tmat4x2 operator/ ( + tmat4x2 const & m, + typename tmat4x2::value_type const & s); - template - tmat4x2 operator/ ( - typename tmat4x2::value_type const & s, - tmat4x2 const & m); + template + tmat4x2 operator/ ( + typename tmat4x2::value_type const & s, + tmat4x2 const & m); - // Unary constant operators - template - tmat4x2 const operator- ( - tmat4x2 const & m); + // Unary constant operators + template + tmat4x2 const operator- ( + tmat4x2 const & m); - template - tmat4x2 const operator-- ( - tmat4x2 const & m, - int); + template + tmat4x2 const operator-- ( + tmat4x2 const & m, + int); - template - tmat4x2 const operator++ ( - tmat4x2 const & m, - int); + template + tmat4x2 const operator++ ( + tmat4x2 const & m, + int); - } //namespace detail +} //namespace detail - namespace core{ - namespace type{ +namespace core{ +namespace type{ +namespace precision +{ + //! 4 columns of 2 components matrix of low precision floating-point numbers. + //! There is no guarantee on the actual precision. + //! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers) + //! \ingroup core_precision + typedef detail::tmat4x2 lowp_mat4x2; - namespace precision - { - //! 4 columns of 2 components matrix of low precision floating-point numbers. - //! There is no guarantee on the actual precision. - //! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers) - //! \ingroup core_precision - typedef detail::tmat4x2 lowp_mat4x2; - //! 4 columns of 2 components matrix of medium precision floating-point numbers. - //! There is no guarantee on the actual precision. - //! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers) - //! \ingroup core_precision - typedef detail::tmat4x2 mediump_mat4x2; - //! 4 columns of 2 components matrix of high precision floating-point numbers. - //! There is no guarantee on the actual precision. - //! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers) - //! \ingroup core_precision - typedef detail::tmat4x2 highp_mat4x2; - } - //namespace precision + //! 4 columns of 2 components matrix of medium precision floating-point numbers. + //! There is no guarantee on the actual precision. + //! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers) + //! \ingroup core_precision + typedef detail::tmat4x2 mediump_mat4x2; - }//namespace type - }//namespace core -} //namespace glm + //! 4 columns of 2 components matrix of high precision floating-point numbers. + //! There is no guarantee on the actual precision. + //! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers) + //! \ingroup core_precision + typedef detail::tmat4x2 highp_mat4x2; + +}//namespace precision +}//namespace type +}//namespace core +}//namespace glm #ifndef GLM_EXTERNAL_TEMPLATE #include "type_mat4x2.inl" diff --git a/glm/core/type_mat4x3.hpp b/glm/core/type_mat4x3.hpp index 3876150b..1f295160 100644 --- a/glm/core/type_mat4x3.hpp +++ b/glm/core/type_mat4x3.hpp @@ -12,235 +12,229 @@ #include "type_mat.hpp" -namespace glm +namespace glm{ +namespace detail { - namespace test + template struct tvec1; + template struct tvec2; + template struct tvec3; + template struct tvec4; + template struct tmat2x2; + template struct tmat2x3; + template struct tmat2x4; + template struct tmat3x2; + template struct tmat3x3; + template struct tmat3x4; + template struct tmat4x2; + template struct tmat4x3; + template struct tmat4x4; + + //! \brief Template for 4 columns and 3 rows matrix of floating-point numbers. + //! \ingroup core_template + template + struct tmat4x3 { - void main_mat4x3(); - }//namespace test + enum ctor{null}; + typedef T value_type; + typedef std::size_t size_type; + typedef tvec3 col_type; + typedef tvec4 row_type; + static GLM_FUNC_DECL size_type col_size(); + static GLM_FUNC_DECL size_type row_size(); - namespace detail - { - template struct tvec1; - template struct tvec2; - template struct tvec3; - template struct tvec4; - template struct tmat2x2; - template struct tmat2x3; - template struct tmat2x4; - template struct tmat3x2; - template struct tmat3x3; - template struct tmat3x4; - template struct tmat4x2; - template struct tmat4x3; - template struct tmat4x4; + typedef tmat4x3 type; + typedef tmat3x4 transpose_type; - //! \brief Template for 4 columns and 3 rows matrix of floating-point numbers. - //! \ingroup core_template - template - struct tmat4x3 - { - enum ctor{null}; - typedef T value_type; - typedef std::size_t size_type; - typedef tvec3 col_type; - typedef tvec4 row_type; - static GLM_FUNC_DECL size_type col_size(); - static GLM_FUNC_DECL size_type row_size(); + private: + // Data + col_type value[4]; - typedef tmat4x3 type; - typedef tmat3x4 transpose_type; + public: + // Constructors + GLM_FUNC_DECL tmat4x3(); + GLM_FUNC_DECL tmat4x3(tmat4x3 const & m); - private: - // Data - col_type value[4]; - - public: - // Constructors - GLM_FUNC_DECL tmat4x3(); - GLM_FUNC_DECL tmat4x3(tmat4x3 const & m); - - GLM_FUNC_DECL explicit tmat4x3( - ctor Null); - GLM_FUNC_DECL explicit tmat4x3( - value_type const & x); - GLM_FUNC_DECL explicit tmat4x3( - value_type const & x0, value_type const & y0, value_type const & z0, - value_type const & x1, value_type const & y1, value_type const & z1, - value_type const & x2, value_type const & y2, value_type const & z2, - value_type const & x3, value_type const & y3, value_type const & z3); - GLM_FUNC_DECL explicit tmat4x3( - col_type const & v0, - col_type const & v1, - col_type const & v2, - col_type const & v3); + GLM_FUNC_DECL explicit tmat4x3( + ctor Null); + GLM_FUNC_DECL explicit tmat4x3( + value_type const & x); + GLM_FUNC_DECL explicit tmat4x3( + value_type const & x0, value_type const & y0, value_type const & z0, + value_type const & x1, value_type const & y1, value_type const & z1, + value_type const & x2, value_type const & y2, value_type const & z2, + value_type const & x3, value_type const & y3, value_type const & z3); + GLM_FUNC_DECL explicit tmat4x3( + col_type const & v0, + col_type const & v1, + col_type const & v2, + col_type const & v3); - ////////////////////////////////////// - // Conversions - template - GLM_FUNC_DECL explicit tmat4x3( - U const & x); + ////////////////////////////////////// + // Conversions + template + GLM_FUNC_DECL explicit tmat4x3( + U const & x); - template < - typename X1, typename Y1, typename Z1, - typename X2, typename Y2, typename Z2, - typename X3, typename Y3, typename Z3, - typename X4, typename Y4, typename Z4> - GLM_FUNC_DECL explicit tmat4x3( - X1 const & x1, Y1 const & y1, Z1 const & z1, - X2 const & x2, Y2 const & y2, Z2 const & z2, - X3 const & x3, Y3 const & y3, Z3 const & z3, - X4 const & x4, Y4 const & y4, Z4 const & z4); + template < + typename X1, typename Y1, typename Z1, + typename X2, typename Y2, typename Z2, + typename X3, typename Y3, typename Z3, + typename X4, typename Y4, typename Z4> + GLM_FUNC_DECL explicit tmat4x3( + X1 const & x1, Y1 const & y1, Z1 const & z1, + X2 const & x2, Y2 const & y2, Z2 const & z2, + X3 const & x3, Y3 const & y3, Z3 const & z3, + X4 const & x4, Y4 const & y4, Z4 const & z4); - template - GLM_FUNC_DECL explicit tmat4x3( - tvec3 const & v1, - tvec3 const & v2, - tvec3 const & v3, - tvec3 const & v4); + template + GLM_FUNC_DECL explicit tmat4x3( + tvec3 const & v1, + tvec3 const & v2, + tvec3 const & v3, + tvec3 const & v4); - // Matrix conversions - template - GLM_FUNC_DECL explicit tmat4x3(tmat4x3 const & m); + // Matrix conversions + template + GLM_FUNC_DECL explicit tmat4x3(tmat4x3 const & m); - GLM_FUNC_DECL explicit tmat4x3(tmat2x2 const & x); - GLM_FUNC_DECL explicit tmat4x3(tmat3x3 const & x); - GLM_FUNC_DECL explicit tmat4x3(tmat4x4 const & x); - GLM_FUNC_DECL explicit tmat4x3(tmat2x3 const & x); - GLM_FUNC_DECL explicit tmat4x3(tmat3x2 const & x); - GLM_FUNC_DECL explicit tmat4x3(tmat2x4 const & x); - GLM_FUNC_DECL explicit tmat4x3(tmat4x2 const & x); - GLM_FUNC_DECL explicit tmat4x3(tmat3x4 const & x); + GLM_FUNC_DECL explicit tmat4x3(tmat2x2 const & x); + GLM_FUNC_DECL explicit tmat4x3(tmat3x3 const & x); + GLM_FUNC_DECL explicit tmat4x3(tmat4x4 const & x); + GLM_FUNC_DECL explicit tmat4x3(tmat2x3 const & x); + GLM_FUNC_DECL explicit tmat4x3(tmat3x2 const & x); + GLM_FUNC_DECL explicit tmat4x3(tmat2x4 const & x); + GLM_FUNC_DECL explicit tmat4x3(tmat4x2 const & x); + GLM_FUNC_DECL explicit tmat4x3(tmat3x4 const & x); - // Accesses - col_type & operator[](size_type i); - col_type const & operator[](size_type i) const; + // Accesses + col_type & operator[](size_type i); + col_type const & operator[](size_type i) const; - // Unary updatable operators - GLM_FUNC_DECL tmat4x3 & operator= (tmat4x3 const & m); - template - GLM_FUNC_DECL tmat4x3 & operator= (tmat4x3 const & m); - template - GLM_FUNC_DECL tmat4x3 & operator+= (U const & s); - template - GLM_FUNC_DECL tmat4x3 & operator+= (tmat4x3 const & m); - template - GLM_FUNC_DECL tmat4x3 & operator-= (U const & s); - template - GLM_FUNC_DECL tmat4x3 & operator-= (tmat4x3 const & m); - template - GLM_FUNC_DECL tmat4x3 & operator*= (U const & s); - template - GLM_FUNC_DECL tmat4x3 & operator*= (tmat4x3 const & m); - template - GLM_FUNC_DECL tmat4x3 & operator/= (U const & s); + // Unary updatable operators + GLM_FUNC_DECL tmat4x3 & operator= (tmat4x3 const & m); + template + GLM_FUNC_DECL tmat4x3 & operator= (tmat4x3 const & m); + template + GLM_FUNC_DECL tmat4x3 & operator+= (U const & s); + template + GLM_FUNC_DECL tmat4x3 & operator+= (tmat4x3 const & m); + template + GLM_FUNC_DECL tmat4x3 & operator-= (U const & s); + template + GLM_FUNC_DECL tmat4x3 & operator-= (tmat4x3 const & m); + template + GLM_FUNC_DECL tmat4x3 & operator*= (U const & s); + template + GLM_FUNC_DECL tmat4x3 & operator*= (tmat4x3 const & m); + template + GLM_FUNC_DECL tmat4x3 & operator/= (U const & s); - GLM_FUNC_DECL tmat4x3 & operator++ (); - GLM_FUNC_DECL tmat4x3 & operator-- (); - }; + GLM_FUNC_DECL tmat4x3 & operator++ (); + GLM_FUNC_DECL tmat4x3 & operator-- (); + }; - // Binary operators - template - tmat4x3 operator+ ( - tmat4x3 const & m, - typename tmat4x3::value_type const & s); + // Binary operators + template + tmat4x3 operator+ ( + tmat4x3 const & m, + typename tmat4x3::value_type const & s); - template - tmat4x3 operator+ ( - tmat4x3 const & m1, - tmat4x3 const & m2); + template + tmat4x3 operator+ ( + tmat4x3 const & m1, + tmat4x3 const & m2); - template - tmat4x3 operator- ( - tmat4x3 const & m, - typename tmat4x3::value_type const & s); + template + tmat4x3 operator- ( + tmat4x3 const & m, + typename tmat4x3::value_type const & s); - template - tmat4x3 operator- ( - tmat4x3 const & m1, - tmat4x3 const & m2); + template + tmat4x3 operator- ( + tmat4x3 const & m1, + tmat4x3 const & m2); - template - tmat4x3 operator* ( - tmat4x3 const & m, - typename tmat4x3::value_type const & s); + template + tmat4x3 operator* ( + tmat4x3 const & m, + typename tmat4x3::value_type const & s); - template - tmat4x3 operator* ( - typename tmat4x3::value_type const & s, - tmat4x3 const & m); + template + tmat4x3 operator* ( + typename tmat4x3::value_type const & s, + tmat4x3 const & m); - template - typename tmat4x3::col_type operator* ( - tmat4x3 const & m, - typename tmat4x3::row_type const & v); + template + typename tmat4x3::col_type operator* ( + tmat4x3 const & m, + typename tmat4x3::row_type const & v); - template - typename tmat4x3::row_type operator* ( - typename tmat4x3::col_type const & v, - tmat4x3 const & m); + template + typename tmat4x3::row_type operator* ( + typename tmat4x3::col_type const & v, + tmat4x3 const & m); - template - tmat3x3 operator* ( - tmat4x3 const & m1, - tmat3x4 const & m2); + template + tmat3x3 operator* ( + tmat4x3 const & m1, + tmat3x4 const & m2); - template - tmat4x3 operator/ ( - tmat4x3 const & m, - typename tmat4x3::value_type const & s); + template + tmat4x3 operator/ ( + tmat4x3 const & m, + typename tmat4x3::value_type const & s); - template - tmat4x3 operator/ ( - typename tmat4x3::value_type const & s, - tmat4x3 const & m); + template + tmat4x3 operator/ ( + typename tmat4x3::value_type const & s, + tmat4x3 const & m); - // Unary constant operators - template - tmat4x3 const operator- ( - tmat4x3 const & m); + // Unary constant operators + template + tmat4x3 const operator- ( + tmat4x3 const & m); - template - tmat4x3 const operator-- ( - tmat4x3 const & m, - int); + template + tmat4x3 const operator-- ( + tmat4x3 const & m, + int); - template - tmat4x3 const operator++ ( - tmat4x3 const & m, - int); + template + tmat4x3 const operator++ ( + tmat4x3 const & m, + int); - } //namespace detail +}//namespace detail - namespace core{ - namespace type{ +namespace core{ +namespace type{ +namespace precision +{ + //! 4 columns of 3 components matrix of low precision floating-point numbers. + //! There is no guarantee on the actual precision. + //! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers) + //! \ingroup core_precision + typedef detail::tmat4x3 lowp_mat4x3; - namespace precision - { - //! 4 columns of 3 components matrix of low precision floating-point numbers. - //! There is no guarantee on the actual precision. - //! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers) - //! \ingroup core_precision - typedef detail::tmat4x3 lowp_mat4x3; - //! 4 columns of 3 components matrix of medium precision floating-point numbers. - //! There is no guarantee on the actual precision. - //! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers) - //! \ingroup core_precision - typedef detail::tmat4x3 mediump_mat4x3; - //! 4 columns of 3 components matrix of high precision floating-point numbers. - //! There is no guarantee on the actual precision. - //! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers) - //! \ingroup core_precision - typedef detail::tmat4x3 highp_mat4x3; - } - //namespace precision + //! 4 columns of 3 components matrix of medium precision floating-point numbers. + //! There is no guarantee on the actual precision. + //! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers) + //! \ingroup core_precision + typedef detail::tmat4x3 mediump_mat4x3; - }//namespace type - }//namespace core -} //namespace glm + //! 4 columns of 3 components matrix of high precision floating-point numbers. + //! There is no guarantee on the actual precision. + //! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers) + //! \ingroup core_precision + typedef detail::tmat4x3 highp_mat4x3; + +}//namespace precision +}//namespace type +}//namespace core +}//namespace glm #ifndef GLM_EXTERNAL_TEMPLATE #include "type_mat4x3.inl" -#endif +#endif //GLM_EXTERNAL_TEMPLATE #endif//glm_core_type_mat4x3 diff --git a/glm/core/type_mat4x4.hpp b/glm/core/type_mat4x4.hpp index 4ff29db9..705ce8c2 100644 --- a/glm/core/type_mat4x4.hpp +++ b/glm/core/type_mat4x4.hpp @@ -2,7 +2,7 @@ // OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net) /////////////////////////////////////////////////////////////////////////////////////////////////// // Created : 2005-01-27 -// Updated : 2008-08-30 +// Updated : 2011-06-02 // Licence : This source is under MIT License // File : glm/core/type_mat4x4.hpp /////////////////////////////////////////////////////////////////////////////////////////////////// @@ -12,283 +12,275 @@ #include "type_mat.hpp" -namespace glm +namespace glm{ +namespace detail { - namespace test + template struct tvec1; + template struct tvec2; + template struct tvec3; + template struct tvec4; + template struct tmat2x2; + template struct tmat2x3; + template struct tmat2x4; + template struct tmat3x2; + template struct tmat3x3; + template struct tmat3x4; + template struct tmat4x2; + template struct tmat4x3; + template struct tmat4x4; + + //! \brief Template for 4 * 4 matrix of floating-point numbers. + //! \ingroup core_template + template + struct tmat4x4 { - void main_mat4x4(); - }//namespace test + enum ctor{null}; + typedef T value_type; + typedef std::size_t size_type; + typedef tvec4 col_type; + typedef tvec4 row_type; + static GLM_FUNC_DECL size_type col_size(); + static GLM_FUNC_DECL size_type row_size(); - namespace detail - { - template struct tvec1; - template struct tvec2; - template struct tvec3; - template struct tvec4; - template struct tmat2x2; - template struct tmat2x3; - template struct tmat2x4; - template struct tmat3x2; - template struct tmat3x3; - template struct tmat3x4; - template struct tmat4x2; - template struct tmat4x3; - template struct tmat4x4; + typedef tmat4x4 type; + typedef tmat4x4 transpose_type; - //! \brief Template for 4 * 4 matrix of floating-point numbers. - //! \ingroup core_template - template - struct tmat4x4 - { - enum ctor{null}; - typedef T value_type; - typedef std::size_t size_type; - typedef tvec4 col_type; - typedef tvec4 row_type; - static GLM_FUNC_DECL size_type col_size(); - static GLM_FUNC_DECL size_type row_size(); + public: + // Implementation detail + GLM_FUNC_DECL tmat4x4 _inverse() const; - typedef tmat4x4 type; - typedef tmat4x4 transpose_type; + private: + // Data + col_type value[4]; - public: - // Implementation detail - GLM_FUNC_DECL tmat4x4 _inverse() const; + public: + // Constructors + GLM_FUNC_DECL tmat4x4(); + GLM_FUNC_DECL tmat4x4(tmat4x4 const & m); - private: - // Data - col_type value[4]; + GLM_FUNC_DECL explicit tmat4x4( + ctor Null); + GLM_FUNC_DECL explicit tmat4x4( + value_type const & x); + GLM_FUNC_DECL explicit tmat4x4( + value_type const & x0, value_type const & y0, value_type const & z0, value_type const & w0, + value_type const & x1, value_type const & y1, value_type const & z1, value_type const & w1, + value_type const & x2, value_type const & y2, value_type const & z2, value_type const & w2, + value_type const & x3, value_type const & y3, value_type const & z3, value_type const & w3); + GLM_FUNC_DECL explicit tmat4x4( + col_type const & v0, + col_type const & v1, + col_type const & v2, + col_type const & v3); - public: - // Constructors - GLM_FUNC_DECL tmat4x4(); - GLM_FUNC_DECL tmat4x4(tmat4x4 const & m); - - GLM_FUNC_DECL explicit tmat4x4( - ctor Null); - GLM_FUNC_DECL explicit tmat4x4( - value_type const & x); - GLM_FUNC_DECL explicit tmat4x4( - value_type const & x0, value_type const & y0, value_type const & z0, value_type const & w0, - value_type const & x1, value_type const & y1, value_type const & z1, value_type const & w1, - value_type const & x2, value_type const & y2, value_type const & z2, value_type const & w2, - value_type const & x3, value_type const & y3, value_type const & z3, value_type const & w3); - GLM_FUNC_DECL explicit tmat4x4( - col_type const & v0, - col_type const & v1, - col_type const & v2, - col_type const & v3); - - ////////////////////////////////////// - // Conversions - template - GLM_FUNC_DECL explicit tmat4x4( - U const & x); + ////////////////////////////////////// + // Conversions + template + GLM_FUNC_DECL explicit tmat4x4( + U const & x); - template < - typename X1, typename Y1, typename Z1, typename W1, - typename X2, typename Y2, typename Z2, typename W2, - typename X3, typename Y3, typename Z3, typename W3, - typename X4, typename Y4, typename Z4, typename W4> - GLM_FUNC_DECL explicit tmat4x4( - X1 const & x1, Y1 const & y1, Z1 const & z1, W1 const & w1, - X2 const & x2, Y2 const & y2, Z2 const & z2, W2 const & w2, - X3 const & x3, Y3 const & y3, Z3 const & z3, W3 const & w3, - X4 const & x4, Y4 const & y4, Z4 const & z4, W4 const & w4); + template < + typename X1, typename Y1, typename Z1, typename W1, + typename X2, typename Y2, typename Z2, typename W2, + typename X3, typename Y3, typename Z3, typename W3, + typename X4, typename Y4, typename Z4, typename W4> + GLM_FUNC_DECL explicit tmat4x4( + X1 const & x1, Y1 const & y1, Z1 const & z1, W1 const & w1, + X2 const & x2, Y2 const & y2, Z2 const & z2, W2 const & w2, + X3 const & x3, Y3 const & y3, Z3 const & z3, W3 const & w3, + X4 const & x4, Y4 const & y4, Z4 const & z4, W4 const & w4); - template - GLM_FUNC_DECL explicit tmat4x4( - tvec4 const & v1, - tvec4 const & v2, - tvec4 const & v3, - tvec4 const & v4); + template + GLM_FUNC_DECL explicit tmat4x4( + tvec4 const & v1, + tvec4 const & v2, + tvec4 const & v3, + tvec4 const & v4); - // Matrix conversions - template - GLM_FUNC_DECL explicit tmat4x4(tmat4x4 const & m); + // Matrix conversions + template + GLM_FUNC_DECL explicit tmat4x4(tmat4x4 const & m); - GLM_FUNC_DECL explicit tmat4x4(tmat2x2 const & x); - GLM_FUNC_DECL explicit tmat4x4(tmat3x3 const & x); - GLM_FUNC_DECL explicit tmat4x4(tmat2x3 const & x); - GLM_FUNC_DECL explicit tmat4x4(tmat3x2 const & x); - GLM_FUNC_DECL explicit tmat4x4(tmat2x4 const & x); - GLM_FUNC_DECL explicit tmat4x4(tmat4x2 const & x); - GLM_FUNC_DECL explicit tmat4x4(tmat3x4 const & x); - GLM_FUNC_DECL explicit tmat4x4(tmat4x3 const & x); + GLM_FUNC_DECL explicit tmat4x4(tmat2x2 const & x); + GLM_FUNC_DECL explicit tmat4x4(tmat3x3 const & x); + GLM_FUNC_DECL explicit tmat4x4(tmat2x3 const & x); + GLM_FUNC_DECL explicit tmat4x4(tmat3x2 const & x); + GLM_FUNC_DECL explicit tmat4x4(tmat2x4 const & x); + GLM_FUNC_DECL explicit tmat4x4(tmat4x2 const & x); + GLM_FUNC_DECL explicit tmat4x4(tmat3x4 const & x); + GLM_FUNC_DECL explicit tmat4x4(tmat4x3 const & x); - // Accesses - GLM_FUNC_DECL col_type & operator[](size_type i); - GLM_FUNC_DECL col_type const & operator[](size_type i) const; + // Accesses + GLM_FUNC_DECL col_type & operator[](size_type i); + GLM_FUNC_DECL col_type const & operator[](size_type i) const; - // Unary updatable operators - GLM_FUNC_DECL tmat4x4 & operator= (tmat4x4 const & m); - template - GLM_FUNC_DECL tmat4x4 & operator= (tmat4x4 const & m); - template - GLM_FUNC_DECL tmat4x4 & operator+= (U const & s); - template - GLM_FUNC_DECL tmat4x4 & operator+= (tmat4x4 const & m); - template - GLM_FUNC_DECL tmat4x4 & operator-= (U const & s); - template - GLM_FUNC_DECL tmat4x4 & operator-= (tmat4x4 const & m); - template - GLM_FUNC_DECL tmat4x4 & operator*= (U const & s); - template - GLM_FUNC_DECL tmat4x4 & operator*= (tmat4x4 const & m); - template - GLM_FUNC_DECL tmat4x4 & operator/= (U const & s); - template - GLM_FUNC_DECL tmat4x4 & operator/= (tmat4x4 const & m); - GLM_FUNC_DECL tmat4x4 & operator++ (); - GLM_FUNC_DECL tmat4x4 & operator-- (); - }; + // Unary updatable operators + GLM_FUNC_DECL tmat4x4 & operator= (tmat4x4 const & m); + template + GLM_FUNC_DECL tmat4x4 & operator= (tmat4x4 const & m); + template + GLM_FUNC_DECL tmat4x4 & operator+= (U const & s); + template + GLM_FUNC_DECL tmat4x4 & operator+= (tmat4x4 const & m); + template + GLM_FUNC_DECL tmat4x4 & operator-= (U const & s); + template + GLM_FUNC_DECL tmat4x4 & operator-= (tmat4x4 const & m); + template + GLM_FUNC_DECL tmat4x4 & operator*= (U const & s); + template + GLM_FUNC_DECL tmat4x4 & operator*= (tmat4x4 const & m); + template + GLM_FUNC_DECL tmat4x4 & operator/= (U const & s); + template + GLM_FUNC_DECL tmat4x4 & operator/= (tmat4x4 const & m); + GLM_FUNC_DECL tmat4x4 & operator++ (); + GLM_FUNC_DECL tmat4x4 & operator-- (); + }; - // Binary operators - template - tmat4x4 operator+ ( - tmat4x4 const & m, - typename tmat4x4::value_type const & s); + // Binary operators + template + tmat4x4 operator+ ( + tmat4x4 const & m, + typename tmat4x4::value_type const & s); - template - tmat4x4 operator+ ( - typename tmat4x4::value_type const & s, - tmat4x4 const & m); + template + tmat4x4 operator+ ( + typename tmat4x4::value_type const & s, + tmat4x4 const & m); - template - tmat4x4 operator+ ( - tmat4x4 const & m1, - tmat4x4 const & m2); + template + tmat4x4 operator+ ( + tmat4x4 const & m1, + tmat4x4 const & m2); - template - tmat4x4 operator- ( - tmat4x4 const & m, - typename tmat4x4::value_type const & s); + template + tmat4x4 operator- ( + tmat4x4 const & m, + typename tmat4x4::value_type const & s); - template - tmat4x4 operator- ( - typename tmat4x4::value_type const & s, - tmat4x4 const & m); + template + tmat4x4 operator- ( + typename tmat4x4::value_type const & s, + tmat4x4 const & m); - template - tmat4x4 operator- ( - tmat4x4 const & m1, - tmat4x4 const & m2); + template + tmat4x4 operator- ( + tmat4x4 const & m1, + tmat4x4 const & m2); - template - tmat4x4 operator* ( - tmat4x4 const & m, - typename tmat4x4::value_type const & s); + template + tmat4x4 operator* ( + tmat4x4 const & m, + typename tmat4x4::value_type const & s); - template - tmat4x4 operator* ( - typename tmat4x4::value_type const & s, - tmat4x4 const & m); + template + tmat4x4 operator* ( + typename tmat4x4::value_type const & s, + tmat4x4 const & m); - template - typename tmat4x4::col_type operator* ( - tmat4x4 const & m, - typename tmat4x4::row_type const & v); + template + typename tmat4x4::col_type operator* ( + tmat4x4 const & m, + typename tmat4x4::row_type const & v); - template - typename tmat4x4::row_type operator* ( - typename tmat4x4::col_type const & v, - tmat4x4 const & m); + template + typename tmat4x4::row_type operator* ( + typename tmat4x4::col_type const & v, + tmat4x4 const & m); - template - tmat4x4 operator* ( - tmat4x4 const & m1, - tmat4x4 const & m2); + template + tmat4x4 operator* ( + tmat4x4 const & m1, + tmat4x4 const & m2); - template - tmat4x4 operator/ ( - tmat4x4 const & m, - typename tmat4x4::value_type const & s); + template + tmat4x4 operator/ ( + tmat4x4 const & m, + typename tmat4x4::value_type const & s); - template - tmat4x4 operator/ ( - typename tmat4x4::value_type const & s, - tmat4x4 const & m); + template + tmat4x4 operator/ ( + typename tmat4x4::value_type const & s, + tmat4x4 const & m); - template - typename tmat4x4::col_type operator/ ( - tmat4x4 const & m, - typename tmat4x4::row_type const & v); + template + typename tmat4x4::col_type operator/ ( + tmat4x4 const & m, + typename tmat4x4::row_type const & v); - template - typename tmat4x4::row_type operator/ ( - typename tmat4x4::col_type & v, - tmat4x4 const & m); + template + typename tmat4x4::row_type operator/ ( + typename tmat4x4::col_type & v, + tmat4x4 const & m); - template - tmat4x4 operator/ ( - tmat4x4 const & m1, - tmat4x4 const & m2); + template + tmat4x4 operator/ ( + tmat4x4 const & m1, + tmat4x4 const & m2); - // Unary constant operators - template - tmat4x4 const operator- ( - tmat4x4 const & m); + // Unary constant operators + template + tmat4x4 const operator- ( + tmat4x4 const & m); - template - tmat4x4 const operator-- ( - tmat4x4 const & m, int); + template + tmat4x4 const operator-- ( + tmat4x4 const & m, int); - template - tmat4x4 const operator++ ( - tmat4x4 const & m, int); + template + tmat4x4 const operator++ ( + tmat4x4 const & m, int); - } //namespace detail +} //namespace detail - namespace core{ - namespace type{ +namespace core{ +namespace type{ +namespace precision +{ + //! 4 columns of 4 components matrix of low precision floating-point numbers. + //! There is no guarantee on the actual precision. + //! From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers + //! \ingroup core_precision + typedef detail::tmat4x4 lowp_mat4; - namespace precision - { - //! 4 columns of 4 components matrix of low precision floating-point numbers. - //! There is no guarantee on the actual precision. - //! From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers - //! \ingroup core_precision - typedef detail::tmat4x4 lowp_mat4; + //! 4 columns of 4 components matrix of medium precision floating-point numbers. + //! There is no guarantee on the actual precision. + //! From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers + //! \ingroup core_precision + typedef detail::tmat4x4 mediump_mat4; - //! 4 columns of 4 components matrix of medium precision floating-point numbers. - //! There is no guarantee on the actual precision. - //! From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers - //! \ingroup core_precision - typedef detail::tmat4x4 mediump_mat4; + //! 4 columns of 4 components matrix of high precision floating-point numbers. + //! There is no guarantee on the actual precision. + //! From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers + //! \ingroup core_precision + typedef detail::tmat4x4 highp_mat4; - //! 4 columns of 4 components matrix of high precision floating-point numbers. - //! There is no guarantee on the actual precision. - //! From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers - //! \ingroup core_precision - typedef detail::tmat4x4 highp_mat4; + //! 4 columns of 4 components matrix of low precision floating-point numbers. + //! There is no guarantee on the actual precision. + //! From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers + //! \ingroup core_precision + typedef detail::tmat4x4 lowp_mat4x4; - //! 4 columns of 4 components matrix of low precision floating-point numbers. - //! There is no guarantee on the actual precision. - //! From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers - //! \ingroup core_precision - typedef detail::tmat4x4 lowp_mat4x4; + //! 4 columns of 4 components matrix of medium precision floating-point numbers. + //! There is no guarantee on the actual precision. + //! From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers + //! \ingroup core_precision + typedef detail::tmat4x4 mediump_mat4x4; - //! 4 columns of 4 components matrix of medium precision floating-point numbers. - //! There is no guarantee on the actual precision. - //! From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers - //! \ingroup core_precision - typedef detail::tmat4x4 mediump_mat4x4; + //! 4 columns of 4 components matrix of high precision floating-point numbers. + //! There is no guarantee on the actual precision. + //! From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers + //! \ingroup core_precision + typedef detail::tmat4x4 highp_mat4x4; - //! 4 columns of 4 components matrix of high precision floating-point numbers. - //! There is no guarantee on the actual precision. - //! From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers - //! \ingroup core_precision - typedef detail::tmat4x4 highp_mat4x4; - } - //namespace precision - - }//namespace type - }//namespace core -} //namespace glm +}//namespace precision +}//namespace type +}//namespace core +}//namespace glm #ifndef GLM_EXTERNAL_TEMPLATE #include "type_mat4x4.inl" -#endif +#endif//GLM_EXTERNAL_TEMPLATE -#endif //glm_core_type_mat4x4 +#endif//glm_core_type_mat4x4 diff --git a/glm/core/type_vec1.hpp b/glm/core/type_vec1.hpp index ffd8da1c..ac8bf919 100644 --- a/glm/core/type_vec1.hpp +++ b/glm/core/type_vec1.hpp @@ -16,39 +16,33 @@ #include "type_size.hpp" #include "_swizzle.hpp" -namespace glm +namespace glm{ +namespace detail { - namespace test + template struct tref1; + template struct tref2; + template struct tref3; + template struct tref4; + template struct tvec1; + template struct tvec2; + template struct tvec3; + template struct tvec4; + + template + struct tvec1 { - void main_vec1(); - }//namespace test + enum ctor{null}; - namespace detail - { - template struct tref1; - template struct tref2; - template struct tref3; - template struct tref4; - template struct tvec1; - template struct tvec2; - template struct tvec3; - template struct tvec4; + typedef T value_type; + typedef std::size_t size_type; + GLM_FUNC_DECL size_type length() const; + static GLM_FUNC_DECL size_type value_size(); - template - struct tvec1 - { - enum ctor{null}; + typedef tvec1 type; + typedef tvec1 bool_type; - typedef T value_type; - typedef std::size_t size_type; - GLM_FUNC_DECL size_type length() const; - static GLM_FUNC_DECL size_type value_size(); - - typedef tvec1 type; - typedef tvec1 bool_type; - - ////////////////////////////////////// - // Data + ////////////////////////////////////// + // Data # if(GLM_COMPONENT == GLM_COMPONENT_ONLY_XYZW) value_type x; @@ -56,123 +50,123 @@ namespace glm union {value_type x, r, s;}; # endif//GLM_COMPONENT - ////////////////////////////////////// - // Accesses + ////////////////////////////////////// + // Accesses - GLM_FUNC_DECL value_type & operator[](size_type i); - GLM_FUNC_DECL value_type const & operator[](size_type i) const; + GLM_FUNC_DECL value_type & operator[](size_type i); + GLM_FUNC_DECL value_type const & operator[](size_type i) const; - ////////////////////////////////////// - // Implicit basic constructors + ////////////////////////////////////// + // Implicit basic constructors - GLM_FUNC_DECL tvec1(); - GLM_FUNC_DECL tvec1(tvec1 const & v); + GLM_FUNC_DECL tvec1(); + GLM_FUNC_DECL tvec1(tvec1 const & v); - ////////////////////////////////////// - // Explicit basic constructors + ////////////////////////////////////// + // Explicit basic constructors - GLM_FUNC_DECL explicit tvec1( - ctor); - GLM_FUNC_DECL explicit tvec1( - value_type const & s); + GLM_FUNC_DECL explicit tvec1( + ctor); + GLM_FUNC_DECL explicit tvec1( + value_type const & s); - ////////////////////////////////////// - // Swizzle constructors + ////////////////////////////////////// + // Swizzle constructors - GLM_FUNC_DECL tvec1(tref1 const & r); + GLM_FUNC_DECL tvec1(tref1 const & r); - ////////////////////////////////////// - // Convertion scalar constructors + ////////////////////////////////////// + // Convertion scalar constructors - //! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL explicit tvec1(U const & s); + //! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) + template + GLM_FUNC_DECL explicit tvec1(U const & s); - ////////////////////////////////////// - // Convertion vector constructors + ////////////////////////////////////// + // Convertion vector constructors - //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL explicit tvec1(tvec2 const & v); - //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL explicit tvec1(tvec3 const & v); - //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL explicit tvec1(tvec4 const & v); + //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) + template + GLM_FUNC_DECL explicit tvec1(tvec2 const & v); + //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) + template + GLM_FUNC_DECL explicit tvec1(tvec3 const & v); + //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) + template + GLM_FUNC_DECL explicit tvec1(tvec4 const & v); - ////////////////////////////////////// - // Unary arithmetic operators + ////////////////////////////////////// + // Unary arithmetic operators - GLM_FUNC_DECL tvec1 & operator= (tvec1 const & v); + GLM_FUNC_DECL tvec1 & operator= (tvec1 const & v); - GLM_FUNC_DECL tvec1 & operator+=(value_type const & s); - GLM_FUNC_DECL tvec1 & operator+=(tvec1 const & v); - GLM_FUNC_DECL tvec1 & operator-=(value_type const & s); - GLM_FUNC_DECL tvec1 & operator-=(tvec1 const & v); - GLM_FUNC_DECL tvec1 & operator*=(value_type const & s); - GLM_FUNC_DECL tvec1 & operator*=(tvec1 const & v); - GLM_FUNC_DECL tvec1 & operator/=(value_type const & s); - GLM_FUNC_DECL tvec1 & operator/=(tvec1 const & v); - GLM_FUNC_DECL tvec1 & operator++(); - GLM_FUNC_DECL tvec1 & operator--(); + GLM_FUNC_DECL tvec1 & operator+=(value_type const & s); + GLM_FUNC_DECL tvec1 & operator+=(tvec1 const & v); + GLM_FUNC_DECL tvec1 & operator-=(value_type const & s); + GLM_FUNC_DECL tvec1 & operator-=(tvec1 const & v); + GLM_FUNC_DECL tvec1 & operator*=(value_type const & s); + GLM_FUNC_DECL tvec1 & operator*=(tvec1 const & v); + GLM_FUNC_DECL tvec1 & operator/=(value_type const & s); + GLM_FUNC_DECL tvec1 & operator/=(tvec1 const & v); + GLM_FUNC_DECL tvec1 & operator++(); + GLM_FUNC_DECL tvec1 & operator--(); - ////////////////////////////////////// - // Unary bit operators + ////////////////////////////////////// + // Unary bit operators - GLM_FUNC_DECL tvec1 & operator%=(value_type const & s); - GLM_FUNC_DECL tvec1 & operator%=(tvec1 const & v); - GLM_FUNC_DECL tvec1 & operator&=(value_type const & s); - GLM_FUNC_DECL tvec1 & operator&=(tvec1 const & v); - GLM_FUNC_DECL tvec1 & operator|=(value_type const & s); - GLM_FUNC_DECL tvec1 & operator|=(tvec1 const & v); - GLM_FUNC_DECL tvec1 & operator^=(value_type const & s); - GLM_FUNC_DECL tvec1 & operator^=(tvec1 const & v); - GLM_FUNC_DECL tvec1 & operator<<=(value_type const & s); - GLM_FUNC_DECL tvec1 & operator<<=(tvec1 const & v); - GLM_FUNC_DECL tvec1 & operator>>=(value_type const & s); - GLM_FUNC_DECL tvec1 & operator>>=(tvec1 const & v); + GLM_FUNC_DECL tvec1 & operator%=(value_type const & s); + GLM_FUNC_DECL tvec1 & operator%=(tvec1 const & v); + GLM_FUNC_DECL tvec1 & operator&=(value_type const & s); + GLM_FUNC_DECL tvec1 & operator&=(tvec1 const & v); + GLM_FUNC_DECL tvec1 & operator|=(value_type const & s); + GLM_FUNC_DECL tvec1 & operator|=(tvec1 const & v); + GLM_FUNC_DECL tvec1 & operator^=(value_type const & s); + GLM_FUNC_DECL tvec1 & operator^=(tvec1 const & v); + GLM_FUNC_DECL tvec1 & operator<<=(value_type const & s); + GLM_FUNC_DECL tvec1 & operator<<=(tvec1 const & v); + GLM_FUNC_DECL tvec1 & operator>>=(value_type const & s); + GLM_FUNC_DECL tvec1 & operator>>=(tvec1 const & v); - ////////////////////////////////////// - // Swizzle operators + ////////////////////////////////////// + // Swizzle operators - GLM_FUNC_DECL value_type swizzle(comp X) const; - GLM_FUNC_DECL tvec2 swizzle(comp X, comp Y) const; - GLM_FUNC_DECL tvec3 swizzle(comp X, comp Y, comp Z) const; - GLM_FUNC_DECL tvec4 swizzle(comp X, comp Y, comp Z, comp W) const; - GLM_FUNC_DECL tref1 swizzle(comp X); - }; + GLM_FUNC_DECL value_type swizzle(comp X) const; + GLM_FUNC_DECL tvec2 swizzle(comp X, comp Y) const; + GLM_FUNC_DECL tvec3 swizzle(comp X, comp Y, comp Z) const; + GLM_FUNC_DECL tvec4 swizzle(comp X, comp Y, comp Z, comp W) const; + GLM_FUNC_DECL tref1 swizzle(comp X); + }; - template - struct tref1 - { - GLM_FUNC_DECL tref1(T & x); - GLM_FUNC_DECL tref1(tref1 const & r); - GLM_FUNC_DECL tref1(tvec1 const & v); + template + struct tref1 + { + GLM_FUNC_DECL tref1(T & x); + GLM_FUNC_DECL tref1(tref1 const & r); + GLM_FUNC_DECL tref1(tvec1 const & v); - GLM_FUNC_DECL tref1 & operator= (tref1 const & r); - GLM_FUNC_DECL tref1 & operator= (tvec1 const & v); + GLM_FUNC_DECL tref1 & operator= (tref1 const & r); + GLM_FUNC_DECL tref1 & operator= (tvec1 const & v); - T& x; - }; + T& x; + }; - GLM_DETAIL_IS_VECTOR(tvec1); + GLM_DETAIL_IS_VECTOR(tvec1); - typedef detail::tvec1 highp_vec1_t; - typedef detail::tvec1 mediump_vec1_t; - typedef detail::tvec1 lowp_vec1_t; - typedef detail::tvec1 highp_ivec1_t; - typedef detail::tvec1 mediump_ivec1_t; - typedef detail::tvec1 lowp_ivec1_t; - typedef detail::tvec1 highp_uvec1_t; - typedef detail::tvec1 mediump_uvec1_t; - typedef detail::tvec1 lowp_uvec1_t; + typedef detail::tvec1 highp_vec1_t; + typedef detail::tvec1 mediump_vec1_t; + typedef detail::tvec1 lowp_vec1_t; + typedef detail::tvec1 highp_ivec1_t; + typedef detail::tvec1 mediump_ivec1_t; + typedef detail::tvec1 lowp_ivec1_t; + typedef detail::tvec1 highp_uvec1_t; + typedef detail::tvec1 mediump_uvec1_t; + typedef detail::tvec1 lowp_uvec1_t; - } //namespace detail +}//namespace detail }//namespace glm #ifndef GLM_EXTERNAL_TEMPLATE #include "type_vec1.inl" -#endif +#endif//GLM_EXTERNAL_TEMPLATE #endif//glm_core_type_gentype1 diff --git a/glm/core/type_vec2.hpp b/glm/core/type_vec2.hpp index afaf8f8d..b8d47b7b 100644 --- a/glm/core/type_vec2.hpp +++ b/glm/core/type_vec2.hpp @@ -16,251 +16,248 @@ #include "type_size.hpp" #include "_swizzle.hpp" -namespace glm +namespace glm{ +namespace detail { - namespace test + template struct tref2; + template struct tref3; + template struct tref4; + template struct tvec3; + template struct tvec4; + + //! The basic 2D vector type. + //! \ingroup core_template + template + struct tvec2 { - void main_vec2(); - } - //namespace test + enum ctor{null}; - namespace detail - { - template struct tref2; - template struct tref3; - template struct tref4; - template struct tvec3; - template struct tvec4; + typedef T value_type; + typedef std::size_t size_type; + GLM_FUNC_DECL size_type length() const; + static GLM_FUNC_DECL size_type value_size(); - //! The basic 2D vector type. - //! \ingroup core_template - template - struct tvec2 - { - enum ctor{null}; + typedef tvec2 type; + typedef tvec2 bool_type; - typedef T value_type; - typedef std::size_t size_type; - GLM_FUNC_DECL size_type length() const; - static GLM_FUNC_DECL size_type value_size(); - - typedef tvec2 type; - typedef tvec2 bool_type; - - ////////////////////////////////////// - // Data + ////////////////////////////////////// + // Data # if(GLM_COMPONENT == GLM_COMPONENT_ONLY_XYZW) - value_type x, y; + value_type x, y; # elif(GLM_COMPONENT == GLM_COMPONENT_MS_EXT) - union - { - struct{value_type x, y;}; - struct{value_type r, g;}; - struct{value_type s, t;}; - }; + union + { + struct{value_type x, y;}; + struct{value_type r, g;}; + struct{value_type s, t;}; + }; # else//(GLM_COMPONENT == GLM_COMPONENT_GLSL_NAMES) - union {value_type x, r, s;}; - union {value_type y, g, t;}; + union {value_type x, r, s;}; + union {value_type y, g, t;}; # endif//GLM_COMPONENT - ////////////////////////////////////// - // Accesses + ////////////////////////////////////// + // Accesses - GLM_FUNC_DECL value_type & operator[](size_type i); - GLM_FUNC_DECL value_type const & operator[](size_type i) const; + GLM_FUNC_DECL value_type & operator[](size_type i); + GLM_FUNC_DECL value_type const & operator[](size_type i) const; - ////////////////////////////////////// - // Implicit basic constructors + ////////////////////////////////////// + // Implicit basic constructors - GLM_FUNC_DECL tvec2(); - GLM_FUNC_DECL tvec2(tvec2 const & v); + GLM_FUNC_DECL tvec2(); + GLM_FUNC_DECL tvec2(tvec2 const & v); - ////////////////////////////////////// - // Explicit basic constructors + ////////////////////////////////////// + // Explicit basic constructors - GLM_FUNC_DECL explicit tvec2( - ctor); - GLM_FUNC_DECL explicit tvec2( - value_type const & s); - GLM_FUNC_DECL explicit tvec2( - value_type const & s1, - value_type const & s2); + GLM_FUNC_DECL explicit tvec2( + ctor); + GLM_FUNC_DECL explicit tvec2( + value_type const & s); + GLM_FUNC_DECL explicit tvec2( + value_type const & s1, + value_type const & s2); - ////////////////////////////////////// - // Swizzle constructors + ////////////////////////////////////// + // Swizzle constructors - tvec2(tref2 const & r); + tvec2(tref2 const & r); - ////////////////////////////////////// - // Convertion constructors + ////////////////////////////////////// + // Convertion constructors - //! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL explicit tvec2( - U const & x); - //! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL explicit tvec2( - U const & x, - V const & y); + //! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) + template + GLM_FUNC_DECL explicit tvec2( + U const & x); + //! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) + template + GLM_FUNC_DECL explicit tvec2( + U const & x, + V const & y); - ////////////////////////////////////// - // Convertion vector constructors + ////////////////////////////////////// + // Convertion vector constructors - //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL explicit tvec2(tvec2 const & v); - //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL explicit tvec2(tvec3 const & v); - //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL explicit tvec2(tvec4 const & v); + //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) + template + GLM_FUNC_DECL explicit tvec2(tvec2 const & v); + //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) + template + GLM_FUNC_DECL explicit tvec2(tvec3 const & v); + //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) + template + GLM_FUNC_DECL explicit tvec2(tvec4 const & v); - ////////////////////////////////////// - // Unary arithmetic operators + ////////////////////////////////////// + // Unary arithmetic operators - GLM_FUNC_DECL tvec2 & operator= (tvec2 const & v); - template - GLM_FUNC_DECL tvec2 & operator= (tvec2 const & v); + GLM_FUNC_DECL tvec2 & operator= (tvec2 const & v); + template + GLM_FUNC_DECL tvec2 & operator= (tvec2 const & v); - template - GLM_FUNC_DECL tvec2 & operator+=(U const & s); - template - GLM_FUNC_DECL tvec2 & operator+=(tvec2 const & v); - template - GLM_FUNC_DECL tvec2 & operator-=(U const & s); - template - GLM_FUNC_DECL tvec2 & operator-=(tvec2 const & v); - template - GLM_FUNC_DECL tvec2 & operator*=(U const & s); - template - GLM_FUNC_DECL tvec2 & operator*=(tvec2 const & v); - template - GLM_FUNC_DECL tvec2 & operator/=(U const & s); - template - GLM_FUNC_DECL tvec2 & operator/=(tvec2 const & v); - GLM_FUNC_DECL tvec2 & operator++(); - GLM_FUNC_DECL tvec2 & operator--(); + template + GLM_FUNC_DECL tvec2 & operator+=(U const & s); + template + GLM_FUNC_DECL tvec2 & operator+=(tvec2 const & v); + template + GLM_FUNC_DECL tvec2 & operator-=(U const & s); + template + GLM_FUNC_DECL tvec2 & operator-=(tvec2 const & v); + template + GLM_FUNC_DECL tvec2 & operator*=(U const & s); + template + GLM_FUNC_DECL tvec2 & operator*=(tvec2 const & v); + template + GLM_FUNC_DECL tvec2 & operator/=(U const & s); + template + GLM_FUNC_DECL tvec2 & operator/=(tvec2 const & v); + GLM_FUNC_DECL tvec2 & operator++(); + GLM_FUNC_DECL tvec2 & operator--(); - ////////////////////////////////////// - // Unary bit operators + ////////////////////////////////////// + // Unary bit operators - template - GLM_FUNC_DECL tvec2 & operator%= (U const & s); - template - GLM_FUNC_DECL tvec2 & operator%= (tvec2 const & v); - template - GLM_FUNC_DECL tvec2 & operator&= (U const & s); - template - GLM_FUNC_DECL tvec2 & operator&= (tvec2 const & v); - template - GLM_FUNC_DECL tvec2 & operator|= (U const & s); - template - GLM_FUNC_DECL tvec2 & operator|= (tvec2 const & v); - template - GLM_FUNC_DECL tvec2 & operator^= (U const & s); - template - GLM_FUNC_DECL tvec2 & operator^= (tvec2 const & v); - template - GLM_FUNC_DECL tvec2 & operator<<=(U const & s); - template - GLM_FUNC_DECL tvec2 & operator<<=(tvec2 const & v); - template - GLM_FUNC_DECL tvec2 & operator>>=(U const & s); - template - GLM_FUNC_DECL tvec2 & operator>>=(tvec2 const & v); + template + GLM_FUNC_DECL tvec2 & operator%= (U const & s); + template + GLM_FUNC_DECL tvec2 & operator%= (tvec2 const & v); + template + GLM_FUNC_DECL tvec2 & operator&= (U const & s); + template + GLM_FUNC_DECL tvec2 & operator&= (tvec2 const & v); + template + GLM_FUNC_DECL tvec2 & operator|= (U const & s); + template + GLM_FUNC_DECL tvec2 & operator|= (tvec2 const & v); + template + GLM_FUNC_DECL tvec2 & operator^= (U const & s); + template + GLM_FUNC_DECL tvec2 & operator^= (tvec2 const & v); + template + GLM_FUNC_DECL tvec2 & operator<<=(U const & s); + template + GLM_FUNC_DECL tvec2 & operator<<=(tvec2 const & v); + template + GLM_FUNC_DECL tvec2 & operator>>=(U const & s); + template + GLM_FUNC_DECL tvec2 & operator>>=(tvec2 const & v); - ////////////////////////////////////// - // Swizzle operators + ////////////////////////////////////// + // Swizzle operators - GLM_FUNC_DECL value_type swizzle(comp X) const; - GLM_FUNC_DECL tvec2 swizzle(comp X, comp Y) const; - GLM_FUNC_DECL tvec3 swizzle(comp X, comp Y, comp Z) const; - GLM_FUNC_DECL tvec4 swizzle(comp X, comp Y, comp Z, comp W) const; - GLM_FUNC_DECL tref2 swizzle(comp X, comp Y); - }; + GLM_FUNC_DECL value_type swizzle(comp X) const; + GLM_FUNC_DECL tvec2 swizzle(comp X, comp Y) const; + GLM_FUNC_DECL tvec3 swizzle(comp X, comp Y, comp Z) const; + GLM_FUNC_DECL tvec4 swizzle(comp X, comp Y, comp Z, comp W) const; + GLM_FUNC_DECL tref2 swizzle(comp X, comp Y); + }; - template - struct tref2 - { - GLM_FUNC_DECL tref2(T & x, T & y); - GLM_FUNC_DECL tref2(tref2 const & r); - GLM_FUNC_DECL tref2(tvec2 const & v); - - GLM_FUNC_DECL tref2 & operator= (tref2 const & r); - GLM_FUNC_DECL tref2 & operator= (tvec2 const & v); - - T& x; - T& y; - }; - - GLM_DETAIL_IS_VECTOR(tvec2); - - } //namespace detail - - namespace core{ - namespace type{ - - namespace precision + template + struct tref2 { - //! 2 components vector of high precision floating-point numbers. - //! There is no guarantee on the actual precision. - //! From GLSL 1.30.8 specification, section 4.5.2 Precision Qualifiers. - //! \ingroup core_precision - typedef detail::tvec2 highp_vec2; - //! 2 components vector of medium precision floating-point numbers. - //! There is no guarantee on the actual precision. - //! From GLSL 1.30.8 specification, section 4.5.2 Precision Qualifiers. - //! \ingroup core_precision - typedef detail::tvec2 mediump_vec2; - //! 2 components vector of low precision floating-point numbers. - //! There is no guarantee on the actual precision. - //! From GLSL 1.30.8 specification, section 4.5.2 Precision Qualifiers. - //! \ingroup core_precision - typedef detail::tvec2 lowp_vec2; + GLM_FUNC_DECL tref2(T & x, T & y); + GLM_FUNC_DECL tref2(tref2 const & r); + GLM_FUNC_DECL tref2(tvec2 const & v); - //! 2 components vector of high precision signed integer numbers. - //! There is no guarantee on the actual precision. - //! From GLSL 1.30.8 specification, section 4.1.5 Precision Qualifiers. - //! \ingroup core_precision - typedef detail::tvec2 highp_ivec2; - //! 2 components vector of medium precision signed integer numbers. - //! There is no guarantee on the actual precision. - //! From GLSL 1.30.8 specification, section 4.1.5 Precision Qualifiers. - //! \ingroup core_precision - typedef detail::tvec2 mediump_ivec2; - //! 2 components vector of low precision signed integer numbers. - //! There is no guarantee on the actual precision. - //! From GLSL 1.30.8 specification, section 4.1.5 Precision Qualifiers. - //! \ingroup core_precision - typedef detail::tvec2 lowp_ivec2; + GLM_FUNC_DECL tref2 & operator= (tref2 const & r); + GLM_FUNC_DECL tref2 & operator= (tvec2 const & v); + + T& x; + T& y; + }; + + GLM_DETAIL_IS_VECTOR(tvec2); + +} //namespace detail + +namespace core{ +namespace type{ +namespace precision +{ + //! 2 components vector of high precision floating-point numbers. + //! There is no guarantee on the actual precision. + //! From GLSL 1.30.8 specification, section 4.5.2 Precision Qualifiers. + //! \ingroup core_precision + typedef detail::tvec2 highp_vec2; + + //! 2 components vector of medium precision floating-point numbers. + //! There is no guarantee on the actual precision. + //! From GLSL 1.30.8 specification, section 4.5.2 Precision Qualifiers. + //! \ingroup core_precision + typedef detail::tvec2 mediump_vec2; + + //! 2 components vector of low precision floating-point numbers. + //! There is no guarantee on the actual precision. + //! From GLSL 1.30.8 specification, section 4.5.2 Precision Qualifiers. + //! \ingroup core_precision + typedef detail::tvec2 lowp_vec2; + + //! 2 components vector of high precision signed integer numbers. + //! There is no guarantee on the actual precision. + //! From GLSL 1.30.8 specification, section 4.1.5 Precision Qualifiers. + //! \ingroup core_precision + typedef detail::tvec2 highp_ivec2; + + //! 2 components vector of medium precision signed integer numbers. + //! There is no guarantee on the actual precision. + //! From GLSL 1.30.8 specification, section 4.1.5 Precision Qualifiers. + //! \ingroup core_precision + typedef detail::tvec2 mediump_ivec2; + + //! 2 components vector of low precision signed integer numbers. + //! There is no guarantee on the actual precision. + //! From GLSL 1.30.8 specification, section 4.1.5 Precision Qualifiers. + //! \ingroup core_precision + typedef detail::tvec2 lowp_ivec2; - //! 2 components vector of high precision unsigned integer numbers. - //! There is no guarantee on the actual precision. - //! From GLSL 1.30.8 specification, section 4.1.5 Precision Qualifiers. - //! \ingroup core_precision - typedef detail::tvec2 highp_uvec2; - //! 2 components vector of medium precision unsigned integer numbers. - //! There is no guarantee on the actual precision. - //! From GLSL 1.30.8 specification, section 4.1.5 Precision Qualifiers. - //! \ingroup core_precision - typedef detail::tvec2 mediump_uvec2; - //! 2 components vector of low precision unsigned integer numbers. - //! There is no guarantee on the actual precision. - //! From GLSL 1.30.8 specification, section 4.1.5 Precision Qualifiers. - //! \ingroup core_precision - typedef detail::tvec2 lowp_uvec2; - } - //namespace precision + //! 2 components vector of high precision unsigned integer numbers. + //! There is no guarantee on the actual precision. + //! From GLSL 1.30.8 specification, section 4.1.5 Precision Qualifiers. + //! \ingroup core_precision + typedef detail::tvec2 highp_uvec2; - }//namespace type - }//namespace core + //! 2 components vector of medium precision unsigned integer numbers. + //! There is no guarantee on the actual precision. + //! From GLSL 1.30.8 specification, section 4.1.5 Precision Qualifiers. + //! \ingroup core_precision + typedef detail::tvec2 mediump_uvec2; + + //! 2 components vector of low precision unsigned integer numbers. + //! There is no guarantee on the actual precision. + //! From GLSL 1.30.8 specification, section 4.1.5 Precision Qualifiers. + //! \ingroup core_precision + typedef detail::tvec2 lowp_uvec2; + +}//namespace precision +}//namespace type +}//namespace core }//namespace glm #ifndef GLM_EXTERNAL_TEMPLATE #include "type_vec2.inl" -#endif +#endif//GLM_EXTERNAL_TEMPLATE #endif//glm_core_type_gentype2 diff --git a/glm/core/type_vec3.hpp b/glm/core/type_vec3.hpp index 1e06a783..7b568789 100644 --- a/glm/core/type_vec3.hpp +++ b/glm/core/type_vec3.hpp @@ -16,256 +16,254 @@ #include "type_size.hpp" #include "_swizzle.hpp" -namespace glm +namespace glm{ +namespace detail { - namespace test - { - void main_vec3(); - }//namespace test + template struct tref2; + template struct tref3; + template struct tref4; + template struct tvec2; + template struct tvec4; - namespace detail - { - template struct tref2; - template struct tref3; - template struct tref4; - template struct tvec2; - template struct tvec4; + //! Basic 3D vector type. + //! \ingroup core_template + template + struct tvec3 + { + enum ctor{null}; - //! Basic 3D vector type. - //! \ingroup core_template - template - struct tvec3 - { - enum ctor{null}; + typedef T value_type; + typedef std::size_t size_type; + GLM_FUNC_DECL size_type length() const; + static GLM_FUNC_DECL size_type value_size(); - typedef T value_type; - typedef std::size_t size_type; - GLM_FUNC_DECL size_type length() const; - static GLM_FUNC_DECL size_type value_size(); + typedef tvec3 type; + typedef tvec3 bool_type; - typedef tvec3 type; - typedef tvec3 bool_type; + ////////////////////////////////////// + // Data - ////////////////////////////////////// - // Data - -# if(GLM_COMPONENT == GLM_COMPONENT_ONLY_XYZW) - value_type x, y, z; -# elif(GLM_COMPONENT == GLM_COMPONENT_MS_EXT) - union - { - struct{value_type x, y, z;}; - struct{value_type r, g, b;}; - struct{value_type s, t, p;}; - }; -# else//(GLM_COMPONENT == GLM_COMPONENT_GLSL_NAMES) - union {value_type x, r, s;}; - union {value_type y, g, t;}; - union {value_type z, b, p;}; -# endif//GLM_COMPONENT - - ////////////////////////////////////// - // Accesses - - GLM_FUNC_DECL value_type & operator[](size_type i); - GLM_FUNC_DECL value_type const & operator[](size_type i) const; - - ////////////////////////////////////// - // Implicit basic constructors - - GLM_FUNC_DECL tvec3(); - GLM_FUNC_DECL tvec3(tvec3 const & v); - - ////////////////////////////////////// - // Explicit basic constructors - - GLM_FUNC_DECL explicit tvec3( - ctor); - GLM_FUNC_DECL explicit tvec3( - value_type const & s); - GLM_FUNC_DECL explicit tvec3( - value_type const & s1, - value_type const & s2, - value_type const & s3); - - ////////////////////////////////////// - // Swizzle constructors - - GLM_FUNC_DECL tvec3(tref3 const & r); - - ////////////////////////////////////// - // Convertion scalar constructors - - //! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL explicit tvec3( - U const & x); - //! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL explicit tvec3( - U const & x, - V const & y, - W const & z); - - ////////////////////////////////////// - // Convertion vector constructors - - //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL explicit tvec3(tvec2 const & v, B const & s); - //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL explicit tvec3(A const & s, tvec2 const & v); - //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL explicit tvec3(tvec3 const & v); - //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL explicit tvec3(tvec4 const & v); - - ////////////////////////////////////// - // Unary arithmetic operators - - GLM_FUNC_DECL tvec3 & operator= (tvec3 const & v); - template - GLM_FUNC_DECL tvec3 & operator= (tvec3 const & v); - - template - GLM_FUNC_DECL tvec3 & operator+=(U const & s); - template - GLM_FUNC_DECL tvec3 & operator+=(tvec3 const & v); - template - GLM_FUNC_DECL tvec3 & operator-=(U const & s); - template - GLM_FUNC_DECL tvec3 & operator-=(tvec3 const & v); - template - GLM_FUNC_DECL tvec3 & operator*=(U const & s); - template - GLM_FUNC_DECL tvec3 & operator*=(tvec3 const & v); - template - GLM_FUNC_DECL tvec3 & operator/=(U const & s); - template - GLM_FUNC_DECL tvec3 & operator/=(tvec3 const & v); - GLM_FUNC_DECL tvec3 & operator++(); - GLM_FUNC_DECL tvec3 & operator--(); - - ////////////////////////////////////// - // Unary bit operators - - template - GLM_FUNC_DECL tvec3 & operator%= (U const & s); - template - GLM_FUNC_DECL tvec3 & operator%= (tvec3 const & v); - template - GLM_FUNC_DECL tvec3 & operator&= (U const & s); - template - GLM_FUNC_DECL tvec3 & operator&= (tvec3 const & v); - template - GLM_FUNC_DECL tvec3 & operator|= (U const & s); - template - GLM_FUNC_DECL tvec3 & operator|= (tvec3 const & v); - template - GLM_FUNC_DECL tvec3 & operator^= (U const & s); - template - GLM_FUNC_DECL tvec3 & operator^= (tvec3 const & v); - template - GLM_FUNC_DECL tvec3 & operator<<=(U const & s); - template - GLM_FUNC_DECL tvec3 & operator<<=(tvec3 const & v); - template - GLM_FUNC_DECL tvec3 & operator>>=(U const & s); - template - GLM_FUNC_DECL tvec3 & operator>>=(tvec3 const & v); - - ////////////////////////////////////// - // Swizzle operators - - GLM_FUNC_DECL value_type swizzle(comp X) const; - GLM_FUNC_DECL tvec2 swizzle(comp X, comp Y) const; - GLM_FUNC_DECL tvec3 swizzle(comp X, comp Y, comp Z) const; - GLM_FUNC_DECL tvec4 swizzle(comp X, comp Y, comp Z, comp W) const; - GLM_FUNC_DECL tref3 swizzle(comp X, comp Y, comp Z); - }; - - template - struct tref3 +# if(GLM_COMPONENT == GLM_COMPONENT_ONLY_XYZW) + value_type x, y, z; +# elif(GLM_COMPONENT == GLM_COMPONENT_MS_EXT) + union { - GLM_FUNC_DECL tref3(T & x, T & y, T & z); - GLM_FUNC_DECL tref3(tref3 const & r); - GLM_FUNC_DECL tref3(tvec3 const & v); - - GLM_FUNC_DECL tref3 & operator= (tref3 const & r); - GLM_FUNC_DECL tref3 & operator= (tvec3 const & v); - - T & x; - T & y; - T & z; + struct{value_type x, y, z;}; + struct{value_type r, g, b;}; + struct{value_type s, t, p;}; }; +# else//(GLM_COMPONENT == GLM_COMPONENT_GLSL_NAMES) + union {value_type x, r, s;}; + union {value_type y, g, t;}; + union {value_type z, b, p;}; +# endif//GLM_COMPONENT - GLM_DETAIL_IS_VECTOR(tvec3); - } //namespace detail + ////////////////////////////////////// + // Accesses - namespace core{ - namespace type{ + GLM_FUNC_DECL value_type & operator[](size_type i); + GLM_FUNC_DECL value_type const & operator[](size_type i) const; - namespace precision + ////////////////////////////////////// + // Implicit basic constructors + + GLM_FUNC_DECL tvec3(); + GLM_FUNC_DECL tvec3(tvec3 const & v); + + ////////////////////////////////////// + // Explicit basic constructors + + GLM_FUNC_DECL explicit tvec3( + ctor); + GLM_FUNC_DECL explicit tvec3( + value_type const & s); + GLM_FUNC_DECL explicit tvec3( + value_type const & s1, + value_type const & s2, + value_type const & s3); + + ////////////////////////////////////// + // Swizzle constructors + + GLM_FUNC_DECL tvec3(tref3 const & r); + + ////////////////////////////////////// + // Convertion scalar constructors + + //! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) + template + GLM_FUNC_DECL explicit tvec3( + U const & x); + //! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) + template + GLM_FUNC_DECL explicit tvec3( + U const & x, + V const & y, + W const & z); + + ////////////////////////////////////// + // Convertion vector constructors + + //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) + template + GLM_FUNC_DECL explicit tvec3(tvec2 const & v, B const & s); + //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) + template + GLM_FUNC_DECL explicit tvec3(A const & s, tvec2 const & v); + //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) + template + GLM_FUNC_DECL explicit tvec3(tvec3 const & v); + //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) + template + GLM_FUNC_DECL explicit tvec3(tvec4 const & v); + + ////////////////////////////////////// + // Unary arithmetic operators + + GLM_FUNC_DECL tvec3 & operator= (tvec3 const & v); + template + GLM_FUNC_DECL tvec3 & operator= (tvec3 const & v); + + template + GLM_FUNC_DECL tvec3 & operator+=(U const & s); + template + GLM_FUNC_DECL tvec3 & operator+=(tvec3 const & v); + template + GLM_FUNC_DECL tvec3 & operator-=(U const & s); + template + GLM_FUNC_DECL tvec3 & operator-=(tvec3 const & v); + template + GLM_FUNC_DECL tvec3 & operator*=(U const & s); + template + GLM_FUNC_DECL tvec3 & operator*=(tvec3 const & v); + template + GLM_FUNC_DECL tvec3 & operator/=(U const & s); + template + GLM_FUNC_DECL tvec3 & operator/=(tvec3 const & v); + GLM_FUNC_DECL tvec3 & operator++(); + GLM_FUNC_DECL tvec3 & operator--(); + + ////////////////////////////////////// + // Unary bit operators + + template + GLM_FUNC_DECL tvec3 & operator%= (U const & s); + template + GLM_FUNC_DECL tvec3 & operator%= (tvec3 const & v); + template + GLM_FUNC_DECL tvec3 & operator&= (U const & s); + template + GLM_FUNC_DECL tvec3 & operator&= (tvec3 const & v); + template + GLM_FUNC_DECL tvec3 & operator|= (U const & s); + template + GLM_FUNC_DECL tvec3 & operator|= (tvec3 const & v); + template + GLM_FUNC_DECL tvec3 & operator^= (U const & s); + template + GLM_FUNC_DECL tvec3 & operator^= (tvec3 const & v); + template + GLM_FUNC_DECL tvec3 & operator<<=(U const & s); + template + GLM_FUNC_DECL tvec3 & operator<<=(tvec3 const & v); + template + GLM_FUNC_DECL tvec3 & operator>>=(U const & s); + template + GLM_FUNC_DECL tvec3 & operator>>=(tvec3 const & v); + + ////////////////////////////////////// + // Swizzle operators + + GLM_FUNC_DECL value_type swizzle(comp X) const; + GLM_FUNC_DECL tvec2 swizzle(comp X, comp Y) const; + GLM_FUNC_DECL tvec3 swizzle(comp X, comp Y, comp Z) const; + GLM_FUNC_DECL tvec4 swizzle(comp X, comp Y, comp Z, comp W) const; + GLM_FUNC_DECL tref3 swizzle(comp X, comp Y, comp Z); + }; + + template + struct tref3 { - //! 3 components vector of high precision floating-point numbers. - //! There is no guarantee on the actual precision. - //! From GLSL 1.30.8 specification, section 4.5.2 Precision Qualifiers. - //! \ingroup core_precision - typedef detail::tvec3 highp_vec3; - //! 3 components vector of medium precision floating-point numbers. - //! There is no guarantee on the actual precision. - //! From GLSL 1.30.8 specification, section 4.5.2 Precision Qualifiers. - //! \ingroup core_precision - typedef detail::tvec3 mediump_vec3; - //! 3 components vector of low precision floating-point numbers. - //! There is no guarantee on the actual precision. - //! From GLSL 1.30.8 specification, section 4.5.2 Precision Qualifiers. - //! \ingroup core_precision - typedef detail::tvec3 lowp_vec3; + GLM_FUNC_DECL tref3(T & x, T & y, T & z); + GLM_FUNC_DECL tref3(tref3 const & r); + GLM_FUNC_DECL tref3(tvec3 const & v); - //! 3 components vector of high precision signed integer numbers. - //! There is no guarantee on the actual precision. - //! From GLSL 1.30.8 specification, section 4.1.5 Precision Qualifiers. - //! \ingroup core_precision - typedef detail::tvec3 highp_ivec3; - //! 3 components vector of medium precision signed integer numbers. - //! There is no guarantee on the actual precision. - //! From GLSL 1.30.8 specification, section 4.1.5 Precision Qualifiers. - //! \ingroup core_precision - typedef detail::tvec3 mediump_ivec3; - //! 3 components vector of low precision signed integer numbers. - //! There is no guarantee on the actual precision. - //! From GLSL 1.30.8 specification, section 4.1.5 Precision Qualifiers. - //! \ingroup core_precision - typedef detail::tvec3 lowp_ivec3; + GLM_FUNC_DECL tref3 & operator= (tref3 const & r); + GLM_FUNC_DECL tref3 & operator= (tvec3 const & v); - //! 3 components vector of high precision unsigned integer numbers. - //! There is no guarantee on the actual precision. - //! From GLSL 1.30.8 specification, section 4.1.5 Precision Qualifiers. - //! \ingroup core_precision - typedef detail::tvec3 highp_uvec3; - //! 3 components vector of medium precision unsigned integer numbers. - //! There is no guarantee on the actual precision. - //! From GLSL 1.30.8 specification, section 4.1.5 Precision Qualifiers. - //! \ingroup core_precision - typedef detail::tvec3 mediump_uvec3; - //! 3 components vector of low precision unsigned integer numbers. - //! There is no guarantee on the actual precision. - //! From GLSL 1.30.8 specification, section 4.1.5 Precision Qualifiers. - //! \ingroup core_precision - typedef detail::tvec3 lowp_uvec3; - } - //namespace precision + T & x; + T & y; + T & z; + }; - }//namespace type - }//namespace core + GLM_DETAIL_IS_VECTOR(tvec3); +} //namespace detail + +namespace core{ +namespace type{ +namespace precision +{ + //! 3 components vector of high precision floating-point numbers. + //! There is no guarantee on the actual precision. + //! From GLSL 1.30.8 specification, section 4.5.2 Precision Qualifiers. + //! \ingroup core_precision + typedef detail::tvec3 highp_vec3; + + //! 3 components vector of medium precision floating-point numbers. + //! There is no guarantee on the actual precision. + //! From GLSL 1.30.8 specification, section 4.5.2 Precision Qualifiers. + //! \ingroup core_precision + typedef detail::tvec3 mediump_vec3; + + //! 3 components vector of low precision floating-point numbers. + //! There is no guarantee on the actual precision. + //! From GLSL 1.30.8 specification, section 4.5.2 Precision Qualifiers. + //! \ingroup core_precision + typedef detail::tvec3 lowp_vec3; + + //! 3 components vector of high precision signed integer numbers. + //! There is no guarantee on the actual precision. + //! From GLSL 1.30.8 specification, section 4.1.5 Precision Qualifiers. + //! \ingroup core_precision + typedef detail::tvec3 highp_ivec3; + + //! 3 components vector of medium precision signed integer numbers. + //! There is no guarantee on the actual precision. + //! From GLSL 1.30.8 specification, section 4.1.5 Precision Qualifiers. + //! \ingroup core_precision + typedef detail::tvec3 mediump_ivec3; + + //! 3 components vector of low precision signed integer numbers. + //! There is no guarantee on the actual precision. + //! From GLSL 1.30.8 specification, section 4.1.5 Precision Qualifiers. + //! \ingroup core_precision + typedef detail::tvec3 lowp_ivec3; + + //! 3 components vector of high precision unsigned integer numbers. + //! There is no guarantee on the actual precision. + //! From GLSL 1.30.8 specification, section 4.1.5 Precision Qualifiers. + //! \ingroup core_precision + typedef detail::tvec3 highp_uvec3; + + //! 3 components vector of medium precision unsigned integer numbers. + //! There is no guarantee on the actual precision. + //! From GLSL 1.30.8 specification, section 4.1.5 Precision Qualifiers. + //! \ingroup core_precision + typedef detail::tvec3 mediump_uvec3; + + //! 3 components vector of low precision unsigned integer numbers. + //! There is no guarantee on the actual precision. + //! From GLSL 1.30.8 specification, section 4.1.5 Precision Qualifiers. + //! \ingroup core_precision + typedef detail::tvec3 lowp_uvec3; + +}//namespace precision +}//namespace type +}//namespace core }//namespace glm #ifndef GLM_EXTERNAL_TEMPLATE #include "type_vec3.inl" -#endif +#endif//GLM_EXTERNAL_TEMPLATE #endif//glm_core_type_gentype3 diff --git a/glm/core/type_vec4.hpp b/glm/core/type_vec4.hpp index 354cd5b7..940b5c19 100644 --- a/glm/core/type_vec4.hpp +++ b/glm/core/type_vec4.hpp @@ -16,275 +16,267 @@ #include "type_size.hpp" #include "_swizzle.hpp" -namespace glm +namespace glm{ +namespace detail { - namespace test - { - void main_vec4(); - }//namespace test + template struct tref2; + template struct tref3; + template struct tref4; + template struct tvec2; + template struct tvec3; - namespace detail + ///Basic 4D vector type. + //! \ingroup core_template + template + struct tvec4 { - template struct tref2; - template struct tref3; - template struct tref4; - template struct tvec2; - template struct tvec3; + enum ctor{null}; - ///Basic 4D vector type. - //! \ingroup core_template - template - struct tvec4 + typedef T value_type; + typedef std::size_t size_type; + GLM_FUNC_DECL size_type length() const; + static GLM_FUNC_DECL size_type value_size(); + + typedef tvec4 type; + typedef tvec4 bool_type; + + ////////////////////////////////////// + // Data + +# if(GLM_COMPONENT == GLM_COMPONENT_ONLY_XYZW) + value_type x, y, z, w; +# elif(GLM_COMPONENT == GLM_COMPONENT_MS_EXT) + union { - enum ctor{null}; - - typedef T value_type; - typedef std::size_t size_type; - GLM_FUNC_DECL size_type length() const; - static GLM_FUNC_DECL size_type value_size(); - - typedef tvec4 type; - typedef tvec4 bool_type; - - ////////////////////////////////////// - // Data - -# if(GLM_COMPONENT == GLM_COMPONENT_ONLY_XYZW) - value_type x, y, z, w; -# elif(GLM_COMPONENT == GLM_COMPONENT_MS_EXT) - union - { - struct{value_type x, y, z, w;}; - struct{value_type r, g, b, a;}; - struct{value_type s, t, p, q;}; - }; -# else//(GLM_COMPONENT == GLM_COMPONENT_GLSL_NAMES) - union {value_type x, r, s;}; - union {value_type y, g, t;}; - union {value_type z, b, p;}; - union {value_type w, a, q;}; -# endif//GLM_COMPONENT - - ////////////////////////////////////// - // Accesses - - GLM_FUNC_DECL value_type & operator[](size_type i); - GLM_FUNC_DECL value_type const & operator[](size_type i) const; - - ////////////////////////////////////// - // Implicit basic constructors - - GLM_FUNC_DECL tvec4(); - GLM_FUNC_DECL tvec4(type const & v); - - ////////////////////////////////////// - // Explicit basic constructors - - GLM_FUNC_DECL explicit tvec4( - ctor); - GLM_FUNC_DECL explicit tvec4( - value_type const & s); - GLM_FUNC_DECL explicit tvec4( - value_type const & s0, - value_type const & s1, - value_type const & s2, - value_type const & s3); - - ////////////////////////////////////// - // Swizzle constructors - - GLM_FUNC_DECL tvec4(tref4 const & r); - - ////////////////////////////////////// - // Convertion scalar constructors - - //! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL explicit tvec4( - U const & x); - //! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL explicit tvec4( - A const & x, - B const & y, - C const & z, - D const & w); - - ////////////////////////////////////// - // Convertion vector constructors - - //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL explicit tvec4(tvec2 const & v, B const & s1, C const & s2); - //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL explicit tvec4(A const & s1, tvec2 const & v, C const & s2); - //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL explicit tvec4(A const & s1, B const & s2, tvec2 const & v); - //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL explicit tvec4(tvec3 const & v, B const & s); - //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL explicit tvec4(A const & s, tvec3 const & v); - //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL explicit tvec4(tvec2 const & v1, tvec2 const & v2); - //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL explicit tvec4(tvec4 const & v); - - ////////////////////////////////////// - // Unary arithmetic operators - - GLM_FUNC_DECL tvec4 & operator= (tvec4 const & v); - template - GLM_FUNC_DECL tvec4 & operator= (tvec4 const & v); - - template - GLM_FUNC_DECL tvec4 & operator+=(U const & s); - template - GLM_FUNC_DECL tvec4 & operator+=(tvec4 const & v); - template - GLM_FUNC_DECL tvec4 & operator-=(U const & s); - template - GLM_FUNC_DECL tvec4 & operator-=(tvec4 const & v); - template - GLM_FUNC_DECL tvec4 & operator*=(U const & s); - template - GLM_FUNC_DECL tvec4 & operator*=(tvec4 const & v); - template - GLM_FUNC_DECL tvec4 & operator/=(U const & s); - template - GLM_FUNC_DECL tvec4 & operator/=(tvec4 const & v); - GLM_FUNC_DECL tvec4 & operator++(); - GLM_FUNC_DECL tvec4 & operator--(); - - ////////////////////////////////////// - // Unary bit operators - - template - GLM_FUNC_DECL tvec4 & operator%= (U const & s); - template - GLM_FUNC_DECL tvec4 & operator%= (tvec4 const & v); - template - GLM_FUNC_DECL tvec4 & operator&= (U const & s); - template - GLM_FUNC_DECL tvec4 & operator&= (tvec4 const & v); - template - GLM_FUNC_DECL tvec4 & operator|= (U const & s); - template - GLM_FUNC_DECL tvec4 & operator|= (tvec4 const & v); - template - GLM_FUNC_DECL tvec4 & operator^= (U const & s); - template - GLM_FUNC_DECL tvec4 & operator^= (tvec4 const & v); - template - GLM_FUNC_DECL tvec4 & operator<<=(U const & s); - template - GLM_FUNC_DECL tvec4 & operator<<=(tvec4 const & v); - template - GLM_FUNC_DECL tvec4 & operator>>=(U const & s); - template - GLM_FUNC_DECL tvec4 & operator>>=(tvec4 const & v); - - ////////////////////////////////////// - // Swizzle operators - - GLM_FUNC_DECL value_type swizzle(comp X) const; - GLM_FUNC_DECL tvec2 swizzle(comp X, comp Y) const; - GLM_FUNC_DECL tvec3 swizzle(comp X, comp Y, comp Z) const; - GLM_FUNC_DECL tvec4 swizzle(comp X, comp Y, comp Z, comp W) const; - GLM_FUNC_DECL tref4 swizzle(comp X, comp Y, comp Z, comp W); + struct{value_type x, y, z, w;}; + struct{value_type r, g, b, a;}; + struct{value_type s, t, p, q;}; }; +# else//(GLM_COMPONENT == GLM_COMPONENT_GLSL_NAMES) + union {value_type x, r, s;}; + union {value_type y, g, t;}; + union {value_type z, b, p;}; + union {value_type w, a, q;}; +# endif//GLM_COMPONENT - template - struct tref4 - { - GLM_FUNC_DECL tref4(T & x, T & y, T & z, T & w); - GLM_FUNC_DECL tref4(tref4 const & r); - GLM_FUNC_DECL tref4(tvec4 const & v); + ////////////////////////////////////// + // Accesses - GLM_FUNC_DECL tref4 & operator= (tref4 const & r); - GLM_FUNC_DECL tref4 & operator= (tvec4 const & v); + GLM_FUNC_DECL value_type & operator[](size_type i); + GLM_FUNC_DECL value_type const & operator[](size_type i) const; - T & x; - T & y; - T & z; - T & w; - }; + ////////////////////////////////////// + // Implicit basic constructors - GLM_DETAIL_IS_VECTOR(tvec4); - } //namespace detail + GLM_FUNC_DECL tvec4(); + GLM_FUNC_DECL tvec4(type const & v); - namespace core{ - namespace type{ + ////////////////////////////////////// + // Explicit basic constructors - ////////////////////////// - // Float definition + GLM_FUNC_DECL explicit tvec4( + ctor); + GLM_FUNC_DECL explicit tvec4( + value_type const & s); + GLM_FUNC_DECL explicit tvec4( + value_type const & s0, + value_type const & s1, + value_type const & s2, + value_type const & s3); - namespace precision + ////////////////////////////////////// + // Swizzle constructors + + GLM_FUNC_DECL tvec4(tref4 const & r); + + ////////////////////////////////////// + // Convertion scalar constructors + + //! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) + template + GLM_FUNC_DECL explicit tvec4( + U const & x); + //! Explicit converions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) + template + GLM_FUNC_DECL explicit tvec4( + A const & x, + B const & y, + C const & z, + D const & w); + + ////////////////////////////////////// + // Convertion vector constructors + + //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) + template + GLM_FUNC_DECL explicit tvec4(tvec2 const & v, B const & s1, C const & s2); + //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) + template + GLM_FUNC_DECL explicit tvec4(A const & s1, tvec2 const & v, C const & s2); + //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) + template + GLM_FUNC_DECL explicit tvec4(A const & s1, B const & s2, tvec2 const & v); + //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) + template + GLM_FUNC_DECL explicit tvec4(tvec3 const & v, B const & s); + //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) + template + GLM_FUNC_DECL explicit tvec4(A const & s, tvec3 const & v); + //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) + template + GLM_FUNC_DECL explicit tvec4(tvec2 const & v1, tvec2 const & v2); + //! Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) + template + GLM_FUNC_DECL explicit tvec4(tvec4 const & v); + + ////////////////////////////////////// + // Unary arithmetic operators + + GLM_FUNC_DECL tvec4 & operator= (tvec4 const & v); + template + GLM_FUNC_DECL tvec4 & operator= (tvec4 const & v); + + template + GLM_FUNC_DECL tvec4 & operator+=(U const & s); + template + GLM_FUNC_DECL tvec4 & operator+=(tvec4 const & v); + template + GLM_FUNC_DECL tvec4 & operator-=(U const & s); + template + GLM_FUNC_DECL tvec4 & operator-=(tvec4 const & v); + template + GLM_FUNC_DECL tvec4 & operator*=(U const & s); + template + GLM_FUNC_DECL tvec4 & operator*=(tvec4 const & v); + template + GLM_FUNC_DECL tvec4 & operator/=(U const & s); + template + GLM_FUNC_DECL tvec4 & operator/=(tvec4 const & v); + GLM_FUNC_DECL tvec4 & operator++(); + GLM_FUNC_DECL tvec4 & operator--(); + + ////////////////////////////////////// + // Unary bit operators + + template + GLM_FUNC_DECL tvec4 & operator%= (U const & s); + template + GLM_FUNC_DECL tvec4 & operator%= (tvec4 const & v); + template + GLM_FUNC_DECL tvec4 & operator&= (U const & s); + template + GLM_FUNC_DECL tvec4 & operator&= (tvec4 const & v); + template + GLM_FUNC_DECL tvec4 & operator|= (U const & s); + template + GLM_FUNC_DECL tvec4 & operator|= (tvec4 const & v); + template + GLM_FUNC_DECL tvec4 & operator^= (U const & s); + template + GLM_FUNC_DECL tvec4 & operator^= (tvec4 const & v); + template + GLM_FUNC_DECL tvec4 & operator<<=(U const & s); + template + GLM_FUNC_DECL tvec4 & operator<<=(tvec4 const & v); + template + GLM_FUNC_DECL tvec4 & operator>>=(U const & s); + template + GLM_FUNC_DECL tvec4 & operator>>=(tvec4 const & v); + + ////////////////////////////////////// + // Swizzle operators + + GLM_FUNC_DECL value_type swizzle(comp X) const; + GLM_FUNC_DECL tvec2 swizzle(comp X, comp Y) const; + GLM_FUNC_DECL tvec3 swizzle(comp X, comp Y, comp Z) const; + GLM_FUNC_DECL tvec4 swizzle(comp X, comp Y, comp Z, comp W) const; + GLM_FUNC_DECL tref4 swizzle(comp X, comp Y, comp Z, comp W); + }; + + template + struct tref4 { - //! 4 components vector of high precision floating-point numbers. - //! There is no guarantee on the actual precision. - //! From GLSL 1.30.8 specification, section 4.5.2 Precision Qualifiers. - //! \ingroup core_precision - typedef detail::tvec4 highp_vec4; - //! 4 components vector of medium precision floating-point numbers. - //! There is no guarantee on the actual precision. - //! From GLSL 1.30.8 specification, section 4.5.2 Precision Qualifiers. - //! \ingroup core_precision - typedef detail::tvec4 mediump_vec4; - //! 4 components vector of low precision floating-point numbers. - //! There is no guarantee on the actual precision. - //! From GLSL 1.30.8 specification, section 4.5.2 Precision Qualifiers. - //! \ingroup core_precision - typedef detail::tvec4 lowp_vec4; + GLM_FUNC_DECL tref4(T & x, T & y, T & z, T & w); + GLM_FUNC_DECL tref4(tref4 const & r); + GLM_FUNC_DECL tref4(tvec4 const & v); - //! 4 components vector of high precision signed integer numbers. - //! There is no guarantee on the actual precision. - //! From GLSL 1.30.8 specification, section 4.1.5 Precision Qualifiers. - //! \ingroup core_precision - typedef detail::tvec4 highp_ivec4; - //! 4 components vector of medium precision signed integer numbers. - //! There is no guarantee on the actual precision. - //! From GLSL 1.30.8 specification, section 4.1.5 Precision Qualifiers. - //! \ingroup core_precision - typedef detail::tvec4 mediump_ivec4; - //! 4 components vector of low precision signed integer numbers. - //! There is no guarantee on the actual precision. - //! From GLSL 1.30.8 specification, section 4.1.5 Precision Qualifiers. - //! \ingroup core_precision - typedef detail::tvec4 lowp_ivec4; + GLM_FUNC_DECL tref4 & operator= (tref4 const & r); + GLM_FUNC_DECL tref4 & operator= (tvec4 const & v); - //! 4 components vector of high precision unsigned integer numbers. - //! There is no guarantee on the actual precision. - //! From GLSL 1.30.8 specification, section 4.1.5 Precision Qualifiers. - //! \ingroup core_precision - typedef detail::tvec4 highp_uvec4; - //! 4 components vector of medium precision unsigned integer numbers. - //! There is no guarantee on the actual precision. - //! From GLSL 1.30.8 specification, section 4.1.5 Precision Qualifiers. - //! \ingroup core_precision - typedef detail::tvec4 mediump_uvec4; - //! 4 components vector of low precision unsigned integer numbers. - //! There is no guarantee on the actual precision. - //! From GLSL 1.30.8 specification, section 4.1.5 Precision Qualifiers. - //! \ingroup core_precision - typedef detail::tvec4 lowp_uvec4; - } - //namespace precision + T & x; + T & y; + T & z; + T & w; + }; - }//namespace type - }//namespace core + GLM_DETAIL_IS_VECTOR(tvec4); +}//namespace detail - using namespace core::type; +namespace core{ +namespace type{ +namespace precision +{ + //! 4 components vector of high precision floating-point numbers. + //! There is no guarantee on the actual precision. + //! From GLSL 1.30.8 specification, section 4.5.2 Precision Qualifiers. + //! \ingroup core_precision + typedef detail::tvec4 highp_vec4; + //! 4 components vector of medium precision floating-point numbers. + //! There is no guarantee on the actual precision. + //! From GLSL 1.30.8 specification, section 4.5.2 Precision Qualifiers. + //! \ingroup core_precision + typedef detail::tvec4 mediump_vec4; + + //! 4 components vector of low precision floating-point numbers. + //! There is no guarantee on the actual precision. + //! From GLSL 1.30.8 specification, section 4.5.2 Precision Qualifiers. + //! \ingroup core_precision + typedef detail::tvec4 lowp_vec4; + + //! 4 components vector of high precision signed integer numbers. + //! There is no guarantee on the actual precision. + //! From GLSL 1.30.8 specification, section 4.1.5 Precision Qualifiers. + //! \ingroup core_precision + typedef detail::tvec4 highp_ivec4; + + //! 4 components vector of medium precision signed integer numbers. + //! There is no guarantee on the actual precision. + //! From GLSL 1.30.8 specification, section 4.1.5 Precision Qualifiers. + //! \ingroup core_precision + typedef detail::tvec4 mediump_ivec4; + + //! 4 components vector of low precision signed integer numbers. + //! There is no guarantee on the actual precision. + //! From GLSL 1.30.8 specification, section 4.1.5 Precision Qualifiers. + //! \ingroup core_precision + typedef detail::tvec4 lowp_ivec4; + + //! 4 components vector of high precision unsigned integer numbers. + //! There is no guarantee on the actual precision. + //! From GLSL 1.30.8 specification, section 4.1.5 Precision Qualifiers. + //! \ingroup core_precision + typedef detail::tvec4 highp_uvec4; + + //! 4 components vector of medium precision unsigned integer numbers. + //! There is no guarantee on the actual precision. + //! From GLSL 1.30.8 specification, section 4.1.5 Precision Qualifiers. + //! \ingroup core_precision + typedef detail::tvec4 mediump_uvec4; + + //! 4 components vector of low precision unsigned integer numbers. + //! There is no guarantee on the actual precision. + //! From GLSL 1.30.8 specification, section 4.1.5 Precision Qualifiers. + //! \ingroup core_precision + typedef detail::tvec4 lowp_uvec4; + +}//namespace precision +}//namespace type +}//namespace core }//namespace glm #ifndef GLM_EXTERNAL_TEMPLATE #include "type_vec4.inl" -#endif +#endif//GLM_EXTERNAL_TEMPLATE #endif//glm_core_type_gentype4