Christophe Riccio 15 vuotta sitten
vanhempi
sitoutus
b1b02bc31b
100 muutettua tiedostoa jossa 0 lisäystä ja 16949 poistoa
  1. 0 12
      CMakeLists.txt
  2. 0 10
      doc/CMakeLists.txt
  3. BIN
      doc/build/XalanMessages_1_7_0.dll
  4. 0 9
      doc/build/build.bat
  5. BIN
      doc/build/msvcp71.dll
  6. BIN
      doc/build/msvcr71.dll
  7. BIN
      doc/build/xalan-c_1_7_0.dll
  8. BIN
      doc/build/xalan.exe
  9. BIN
      doc/build/xerces-c_2_5_0.dll
  10. BIN
      doc/code/01.png
  11. BIN
      doc/code/02.png
  12. BIN
      doc/code/03.png
  13. 0 475
      doc/common/doxygen/doxygen.css
  14. BIN
      doc/common/doxygen/doxygen.png
  15. BIN
      doc/common/doxygen/tab_b.gif
  16. BIN
      doc/common/doxygen/tab_l.gif
  17. BIN
      doc/common/doxygen/tab_r.gif
  18. 0 102
      doc/common/doxygen/tabs.css
  19. BIN
      doc/common/email.png
  20. BIN
      doc/common/g-truc.jpg
  21. BIN
      doc/common/logo.png
  22. BIN
      doc/common/opengl.jpg
  23. BIN
      doc/common/sourceforge.gif
  24. 0 202
      doc/common/style.css
  25. BIN
      doc/common/title.png
  26. 0 1572
      doc/doxyfile
  27. BIN
      doc/glm-manual.doc
  28. BIN
      doc/glm-manual.pdf
  29. BIN
      doc/goodies/logo1024x0640.png
  30. BIN
      doc/goodies/logo1280x0800.png
  31. BIN
      doc/goodies/logo1600x1000.png
  32. BIN
      doc/goodies/logo1920x1200.png
  33. BIN
      doc/goodies/logo2560x1600.png
  34. BIN
      doc/goodies/tenby-five.otf
  35. BIN
      doc/image/0029-mini.jpg
  36. BIN
      doc/image/0029.jpg
  37. BIN
      doc/image/font-mini.png
  38. BIN
      doc/image/font.png
  39. BIN
      doc/image/logo-mini.png
  40. BIN
      doc/image/logo.png
  41. 0 248
      doc/readme.txt
  42. 0 68
      doc/src/about.xsl
  43. 0 116
      doc/src/bug.xsl
  44. 0 55
      doc/src/changelog.xsl
  45. 0 111
      doc/src/code.xsl
  46. 0 2302
      doc/src/data.xml
  47. 0 78
      doc/src/download.xsl
  48. 0 4
      doc/src/dummy.cpp
  49. 0 79
      doc/src/goodies.xsl
  50. 0 120
      doc/src/issue.xsl
  51. 0 115
      doc/src/link.xsl
  52. 0 81
      doc/src/news.xsl
  53. 0 143
      doc/src/util.xsl
  54. 0 646
      doc/usertype.dat
  55. 0 51
      glm/CMakeLists.txt
  56. 0 327
      glm/core/_detail.hpp
  57. 0 1085
      glm/core/_swizzle.hpp
  58. 0 20
      glm/core/_swizzle.inl
  59. 0 4
      glm/core/dummy.cpp
  60. 0 274
      glm/core/func_common.hpp
  61. 0 1542
      glm/core/func_common.inl
  62. 0 71
      glm/core/func_exponential.hpp
  63. 0 358
      glm/core/func_exponential.inl
  64. 0 92
      glm/core/func_geometric.hpp
  65. 0 290
      glm/core/func_geometric.inl
  66. 0 142
      glm/core/func_integer.hpp
  67. 0 600
      glm/core/func_integer.inl
  68. 0 92
      glm/core/func_matrix.hpp
  69. 0 559
      glm/core/func_matrix.inl
  70. 0 53
      glm/core/func_noise.hpp
  71. 0 305
      glm/core/func_noise.inl
  72. 0 45
      glm/core/func_packing.hpp
  73. 0 25
      glm/core/func_packing.inl
  74. 0 125
      glm/core/func_trigonometric.hpp
  75. 0 745
      glm/core/func_trigonometric.inl
  76. 0 189
      glm/core/func_vector_relational.hpp
  77. 0 20
      glm/core/func_vector_relational.inl
  78. 0 21
      glm/core/hint.hpp
  79. 0 60
      glm/core/intrinsic_common.hpp
  80. 0 280
      glm/core/intrinsic_common.inl
  81. 0 34
      glm/core/intrinsic_exponential.hpp
  82. 0 0
      glm/core/intrinsic_exponential.inl
  83. 0 45
      glm/core/intrinsic_geometric.hpp
  84. 0 117
      glm/core/intrinsic_geometric.inl
  85. 0 36
      glm/core/intrinsic_matrix.hpp
  86. 0 704
      glm/core/intrinsic_matrix.inl
  87. 0 0
      glm/core/intrinsic_trigonometric.hpp
  88. 0 0
      glm/core/intrinsic_trigonometric.inl
  89. 0 18
      glm/core/intrinsic_vector_relational.hpp
  90. 0 347
      glm/core/intrinsic_vector_relational.inl
  91. 0 283
      glm/core/type.hpp
  92. 0 72
      glm/core/type_float.hpp
  93. 0 150
      glm/core/type_gentype.hpp
  94. 0 347
      glm/core/type_gentype.inl
  95. 0 85
      glm/core/type_half.hpp
  96. 0 357
      glm/core/type_half.inl
  97. 0 130
      glm/core/type_int.hpp
  98. 0 56
      glm/core/type_mat.hpp
  99. 0 0
      glm/core/type_mat.inl
  100. 0 245
      glm/core/type_mat2x2.hpp

+ 0 - 12
CMakeLists.txt

@@ -1,12 +0,0 @@
-cmake_minimum_required(VERSION 2.6 FATAL_ERROR)
-cmake_policy(VERSION 2.6)
-
-project(glm)
-
-add_definitions(-D_CRT_SECURE_NO_WARNINGS)
-
-add_subdirectory(glm)
-add_subdirectory(doc)
-add_subdirectory(test)
-
-

+ 0 - 10
doc/CMakeLists.txt

@@ -1,10 +0,0 @@
-set(NAME glm-doc)
-
-file(GLOB ROOT_CPP src/*.cpp)
-file(GLOB ROOT_XML src/*.xml)
-file(GLOB ROOT_XSL src/*.xsl)
-
-source_group("XML Files" FILES ${ROOT_XML})
-source_group("XSL Files" FILES ${ROOT_XSL})
-
-add_executable(${NAME} ${ROOT_CPP} ${ROOT_XML} ${ROOT_XSL})

BIN
doc/build/XalanMessages_1_7_0.dll


+ 0 - 9
doc/build/build.bat

@@ -1,9 +0,0 @@
-xalan -m -o ..\index.html     ..\src\data.xml   ..\src\news.xsl
-xalan -m -o ..\download.html  ..\src\data.xml	..\src\download.xsl
-xalan -m -o ..\changelog.html ..\src\data.xml 	..\src\changelog.xsl
-xalan -m -o ..\issue.html     ..\src\data.xml   ..\src\issue.xsl
-xalan -m -o ..\link.html      ..\src\data.xml   ..\src\link.xsl
-xalan -m -o ..\goodies.html   ..\src\data.xml   ..\src\goodies.xsl
-xalan -m -o ..\about.html     ..\src\data.xml   ..\src\about.xsl
-xalan -m -o ..\code.html      ..\src\data.xml   ..\src\code.xsl
-pause

BIN
doc/build/msvcp71.dll


BIN
doc/build/msvcr71.dll


BIN
doc/build/xalan-c_1_7_0.dll


BIN
doc/build/xalan.exe


BIN
doc/build/xerces-c_2_5_0.dll


BIN
doc/code/01.png


BIN
doc/code/02.png


BIN
doc/code/03.png


+ 0 - 475
doc/common/doxygen/doxygen.css

@@ -1,475 +0,0 @@
-BODY,H1,H2,H3,H4,H5,H6,P,CENTER,TD,TH,UL,DL,DIV {
-	font-family: Geneva, Arial, Helvetica, sans-serif;
-}
-BODY,TD {
-	font-size: 90%;
-}
-H1 {
-	text-align: center;
-	font-size: 160%;
-}
-H2 {
-	font-size: 120%;
-}
-H3 {
-	font-size: 100%;
-}
-CAPTION { 
-	font-weight: bold 
-}
-DIV.qindex {
-	width: 100%;
-	background-color: #ff8000;/*#e8eef2;*/
-	border: 1px solid #ff8000;
-	text-align: center;
-	margin: 2px;
-	padding: 2px;
-	line-height: 140%;
-}
-DIV.navpath {
-	width: 100%;
-	background-color: #ff8000;/*e8eef2*/
-	border: 1px solid #ff8000;
-	text-align: center;
-	margin: 2px;
-	padding: 2px;
-	line-height: 140%;
-}
-DIV.navtab {
-       background-color: #ff8000;/*#e8eef2;*/
-       border: 1px solid #ff8000;
-       text-align: center;
-       margin: 2px;
-       margin-right: 15px;
-       padding: 2px;
-}
-TD.navtab {
-       font-size: 70%;
-}
-A.qindex {
-       text-decoration: none;
-       font-weight: bold;
-       color: #ff8000;
-}
-A.qindex:visited {
-       text-decoration: none;
-       font-weight: bold;
-       color: #ff8000
-}
-A.qindex:hover {
-	text-decoration: none;
-	background-color: #ffe0c0;
-}
-A.qindexHL {
-	text-decoration: none;
-	font-weight: bold;
-	background-color: #ffe0c0;
-	color: #ffffff;
-	border: 1px double #ffe0c0;
-}
-A.qindexHL:hover {
-	text-decoration: none;
-	background-color: #ffe0c0;
-	color: #ffffff;
-}
-A.qindexHL:visited { 
-	text-decoration: none; 
-	background-color: #ffe0c0; 
-	color: #ffffff 
-}
-A.el { 
-	text-decoration: none; 
-	font-weight: bold 
-}
-A.elRef { 
-	font-weight: bold 
-}
-A.code:link { 
-	text-decoration: none; 
-	font-weight: normal; 
-	color: #ff8000
-}
-A.code:visited { 
-	text-decoration: none; 
-	font-weight: normal; 
-	color: #ff8000
-}
-A.codeRef:link { 
-	font-weight: normal; 
-	color: #ff8000
-}
-A.codeRef:visited { 
-	font-weight: normal; 
-	color: #ff8000
-}
-A:hover { 
-	text-decoration: none; 	
-	background-color: #f2f2ff 
-}
-DL.el { 
-	margin-left: -1cm 
-}
-.fragment {
-       font-family: monospace, fixed;
-       font-size: 95%;
-}
-PRE.fragment {
-	border: 1px solid #CCCCCC;
-	background-color: #f5f5f5;
-	margin-top: 4px;
-	margin-bottom: 4px;
-	margin-left: 2px;
-	margin-right: 8px;
-	padding-left: 6px;
-	padding-right: 6px;
-	padding-top: 4px;
-	padding-bottom: 4px;
-}
-DIV.ah { 
-	background-color: black; 
-	font-weight: bold; 
-	color: #ffffff; 
-	margin-bottom: 3px; 
-	margin-top: 3px 
-}
-
-DIV.groupHeader {
-       margin-left: 16px;
-       margin-top: 12px;
-       margin-bottom: 6px;
-       font-weight: bold;
-}
-DIV.groupText { 
-	margin-left: 16px; 
-	font-style: italic; 
-	font-size: 90% 
-}
-BODY {
-	background: white;
-	color: black;
-	margin-right: 20px;
-	margin-left: 20px;
-}
-TD.indexkey {
-	background-color: #fff0e0;/*#e8eef2;*/
-	font-weight	   : normal;
-	padding-right  : 10px;
-	padding-top    : 8px;
-	padding-left   : 10px;
-	padding-bottom : 8px;
-	margin-left    : 0px;
-	margin-right   : 0px;
-	margin-top     : 2px;
-	margin-bottom  : 2px;
-	border: 0px solid #CCCCCC;
-	-moz-border-radius: 8px 8px 8px 8px;
-}
-TD.indexvalue {
-	background-color: #fff0e0;/*#e8eef2;*/
-	font-style: italic;
-	padding-right  : 10px;
-	padding-top    : 8px;
-	padding-left   : 10px;
-	padding-bottom : 8px;
-	margin-left    : 0px;
-	margin-right   : 0px;
-	margin-top     : 2px;
-	margin-bottom  : 2px;
-	border: 0px solid #CCCCCC;
-	-moz-border-radius: 8px 8px 8px 8px;
-}
-TR.memlist {
-	background-color: #f0f0f0; 
-}
-P.formulaDsp { 
-	text-align: center; 
-}
-IMG.formulaDsp {
-}
-IMG.formulaInl { 
-	vertical-align: middle; 
-}
-SPAN.keyword       { color: #008000 }
-SPAN.keywordtype   { color: #604020 }
-SPAN.keywordflow   { color: #e08000 }
-SPAN.comment       { color: #800000 }
-SPAN.preprocessor  { color: #806020 }
-SPAN.stringliteral { color: #002080 }
-SPAN.charliteral   { color: #008080 }
-SPAN.vhdldigit     { color: #ff00ff }
-SPAN.vhdlchar      { color: #000000 }
-SPAN.vhdlkeyword   { color: #700070 }
-SPAN.vhdllogic     { color: #ff0000 }
-
-.mdescLeft {
-	padding: 0px 8px 4px 8px;
-	font-size: 80%;
-	font-style: italic;
-	background-color: #FAFAFA;
-	border-top: 1px none #E0E0E0;
-	border-right: 1px none #E0E0E0;
-	border-bottom: 1px none #E0E0E0;
-	border-left: 1px none #E0E0E0;
-	margin: 0px;
-}
-.mdescRight {
-        padding: 0px 8px 4px 8px;
-	font-size: 80%;
-	font-style: italic;
-	background-color: #FAFAFA;
-	border-top: 1px none #E0E0E0;
-	border-right: 1px none #E0E0E0;
-	border-bottom: 1px none #E0E0E0;
-	border-left: 1px none #E0E0E0;
-	margin: 0px;
-}
-.memItemLeft {
-	padding: 1px 0px 0px 8px;
-	margin: 4px;
-	border-top-width: 1px;
-	border-right-width: 1px;
-	border-bottom-width: 1px;
-	border-left-width: 1px;
-	border-top-color: #E0E0E0;
-	border-right-color: #E0E0E0;
-	border-bottom-color: #E0E0E0;
-	border-left-color: #E0E0E0;
-	border-top-style: solid;
-	border-right-style: none;
-	border-bottom-style: none;
-	border-left-style: none;
-	background-color: #FAFAFA;
-	font-size: 80%;
-}
-.memItemRight {
-	padding: 1px 8px 0px 8px;
-	margin: 4px;
-	border-top-width: 1px;
-	border-right-width: 1px;
-	border-bottom-width: 1px;
-	border-left-width: 1px;
-	border-top-color: #E0E0E0;
-	border-right-color: #E0E0E0;
-	border-bottom-color: #E0E0E0;
-	border-left-color: #E0E0E0;
-	border-top-style: solid;
-	border-right-style: none;
-	border-bottom-style: none;
-	border-left-style: none;
-	background-color: #FAFAFA;
-	font-size: 80%;
-}
-.memTemplItemLeft {
-	padding: 1px 0px 0px 8px;
-	margin: 4px;
-	border-top-width: 1px;
-	border-right-width: 1px;
-	border-bottom-width: 1px;
-	border-left-width: 1px;
-	border-top-color: #E0E0E0;
-	border-right-color: #E0E0E0;
-	border-bottom-color: #E0E0E0;
-	border-left-color: #E0E0E0;
-	border-top-style: none;
-	border-right-style: none;
-	border-bottom-style: none;
-	border-left-style: none;
-	background-color: #FAFAFA;
-	font-size: 80%;
-}
-.memTemplItemRight {
-	padding: 1px 8px 0px 8px;
-	margin: 4px;
-	border-top-width: 1px;
-	border-right-width: 1px;
-	border-bottom-width: 1px;
-	border-left-width: 1px;
-	border-top-color: #E0E0E0;
-	border-right-color: #E0E0E0;
-	border-bottom-color: #E0E0E0;
-	border-left-color: #E0E0E0;
-	border-top-style: none;
-	border-right-style: none;
-	border-bottom-style: none;
-	border-left-style: none;
-	background-color: #FAFAFA;
-	font-size: 80%;
-}
-.memTemplParams {
-	padding: 1px 0px 0px 8px;
-	margin: 4px;
-	border-top-width: 1px;
-	border-right-width: 1px;
-	border-bottom-width: 1px;
-	border-left-width: 1px;
-	border-top-color: #E0E0E0;
-	border-right-color: #E0E0E0;
-	border-bottom-color: #E0E0E0;
-	border-left-color: #E0E0E0;
-	border-top-style: solid;
-	border-right-style: none;
-	border-bottom-style: none;
-	border-left-style: none;
-	color: #606060;
-	background-color: #FAFAFA;
-	font-size: 80%;
-}
-.search { 
-	color: #003399;
-	font-weight: bold;
-}
-FORM.search {
-	margin-bottom: 0px;
-	margin-top: 0px;
-}
-INPUT.search { 
-	font-size: 75%;
-	color: #402000;
-	font-weight: normal;
-	background-color: #ffe0c0;
-}
-TD.tiny { 
-	font-size: 75%;
-}
-a {
-	color: #402000;
-}
-a:visited {
-	color: #804000;
-}
-.dirtab { 
-	padding: 4px;
-	border-collapse: collapse;
-	border: 1px solid #fff0e0;
-}
-TH.dirtab { 
-	background: #fff0e0;
-	font-weight: bold;
-}
-HR { 
-	height: 1px;
-	border: none;
-	border-top: 1px solid black;
-}
-
-/* Style for detailed member documentation */
-.memtemplate {
-	font-size: 80%;
-	color: #606060;
-	font-weight: normal;
-	margin-left: 3px;
-} 
-.memnav { 
-	background-color: #ffe0c0;
-	border: 1px solid #ffe0c0;
-	text-align: center;
-	margin: 2px;
-	margin-right: 15px;
-	padding: 2px;
-}
-.memitem {
-	padding: 4px;
-	background-color: #fff0e0;
-	border-width: 1px;
-	border-style: solid;
-	border-color: #fff0e0;
-	-moz-border-radius: 8px 8px 8px 8px;
-}
-.memname {
-	white-space: nowrap;
-	font-weight: bold;
-}
-.memdoc{
-	padding-left: 10px;
-}
-.memproto {
-	background-color: #ffe0c0;
-	width: 100%;
-	border-width: 1px;
-	border-style: solid;
-	border-color: #ffe0c0;
-	font-weight: bold;
-	-moz-border-radius: 8px 8px 8px 8px;
-}
-.paramkey {
-	text-align: right;
-}
-.paramtype {
-	white-space: nowrap;
-}
-.paramname {
-	color: #602020;
-	font-style: italic;
-	white-space: nowrap;
-}
-/* End Styling for detailed member documentation */
-
-/* for the tree view */
-.ftvtree {
-	font-family: sans-serif;
-	margin:0.5em;
-}
-/* these are for tree view when used as main index */
-.directory { 
-	font-size: 9pt; 
-	font-weight: bold; 
-}
-.directory h3 { 
-	margin: 0px; 
-	margin-top: 1em; 
-	font-size: 11pt; 
-}
-
-/* The following two styles can be used to replace the root node title */
-/* with an image of your choice.  Simply uncomment the next two styles, */
-/* specify the name of your image and be sure to set 'height' to the */
-/* proper pixel height of your image. */
-
-/* .directory h3.swap { */
-/* 	height: 61px; */
-/* 	background-repeat: no-repeat; */
-/* 	background-image: url("yourimage.gif"); */
-/* } */
-/* .directory h3.swap span { */
-/* 	display: none; */
-/* } */
-
-.directory > h3 { 
-	margin-top: 0; 
-}
-.directory p { 
-	margin: 0px; 
-	white-space: nowrap; 
-}
-.directory div { 
-	display: none; 
-	margin: 0px; 
-}
-.directory img { 
-	vertical-align: -30%; 
-}
-/* these are for tree view when not used as main index */
-.directory-alt { 
-	font-size: 100%; 
-	font-weight: bold; 
-}
-.directory-alt h3 { 
-	margin: 0px; 
-	margin-top: 1em; 
-	font-size: 11pt; 
-}
-.directory-alt > h3 { 
-	margin-top: 0; 
-}
-.directory-alt p { 
-	margin: 0px; 
-	white-space: nowrap; 
-}
-.directory-alt div { 
-	display: none; 
-	margin: 0px; 
-}
-.directory-alt img { 
-	vertical-align: -30%; 
-}
-

BIN
doc/common/doxygen/doxygen.png


BIN
doc/common/doxygen/tab_b.gif


BIN
doc/common/doxygen/tab_l.gif


BIN
doc/common/doxygen/tab_r.gif


+ 0 - 102
doc/common/doxygen/tabs.css

@@ -1,102 +0,0 @@
-/* tabs styles, based on http://www.alistapart.com/articles/slidingdoors */
-
-DIV.tabs
-{
-   float            : left;
-   width            : 100%;
-   background       : url("tab_b.gif") repeat-x bottom;
-   margin-bottom    : 4px;
-}
-
-DIV.tabs UL
-{
-   margin           : 0px;
-   padding-left     : 10px;
-   list-style       : none;
-}
-
-DIV.tabs LI, DIV.tabs FORM
-{
-   display          : inline;
-   margin           : 0px;
-   padding          : 0px;
-}
-
-DIV.tabs FORM
-{
-   float            : right;
-}
-
-DIV.tabs A
-{
-   float            : left;
-   background       : url("tab_r.gif") no-repeat right top;
-   border-bottom    : 1px solid #FF8000;
-   font-size        : x-small;
-   font-weight      : bold;
-   text-decoration  : none;
-}
-
-DIV.tabs A:hover
-{
-   background-position: 100% -150px;
-}
-
-DIV.tabs A:link, DIV.tabs A:visited,
-DIV.tabs A:active, DIV.tabs A:hover
-{
-       color: #000000;/*#1A419D;*/
-}
-
-DIV.tabs SPAN
-{
-   float            : left;
-   display          : block;
-   background       : url("tab_l.gif") no-repeat left top;
-   padding          : 5px 9px;
-   white-space      : nowrap;
-}
-
-DIV.tabs INPUT
-{
-   float            : right;
-   display          : inline;
-   font-size        : 1em;
-}
-
-DIV.tabs TD
-{
-   font-size        : x-small;
-   font-weight      : bold;
-   text-decoration  : none;
-}
-
-
-
-/* Commented Backslash Hack hides rule from IE5-Mac \*/
-DIV.tabs SPAN {float : none;}
-/* End IE5-Mac hack */
-
-DIV.tabs A:hover SPAN
-{
-   background-position: 0% -150px;
-}
-
-DIV.tabs LI.current A
-{
-   background-position: 100% -150px;
-   border-width     : 0px;
-}
-
-DIV.tabs LI.current SPAN
-{
-   background-position: 0% -150px;
-   padding-bottom   : 6px;
-}
-
-DIV.navpath
-{
-   background       : none;
-   border           : none;
-   border-bottom    : 1px solid #FF8000;
-}

BIN
doc/common/email.png


BIN
doc/common/g-truc.jpg


BIN
doc/common/logo.png


BIN
doc/common/opengl.jpg


BIN
doc/common/sourceforge.gif


+ 0 - 202
doc/common/style.css

@@ -1,202 +0,0 @@
-body
-{
-	background-color:#fff8f0;
-	width:100%;
-}
-
-table
-{
-	background-color:#ffffff;
-	width:800px;
-	margin-left:auto;
-	margin-right:auto;
-}
-
-table.principale
-{
-	background-color:#ff8000;
-	border-style:none;
-	border-width:0px;
-	border-spacing:0px;
-	margin-top: 0px;
-	margin-bottom: 0px;
-	margin-right: 0px;
-	margin-left: 0px;
-	padding-right: 0px;
-	padding-left: 0px;
-	padding-bottom: 0px;
-	padding-top: 0px;
-	width:100%;
-}
-
-tr.principale
-{
-	background-color:#ff8000;
-	border-style:none;
-	border-width:0px;
-	border-spacing:0px;
-	margin-top: 0px;
-	margin-bottom: 0px;
-	margin-right: 0px;
-	margin-left: 0px;
-	padding-right: 0px;
-	padding-left: 0px;
-	padding-bottom: 0px;
-	padding-top: 0px;	
-}
-
-div.title1
-{
-    text-align:center;
-    font-size:48px;
-    border-style:solid;
-    border-width:0px;
-    color:#000000;
-}
-
-div.title2
-{
-    text-align:left;
-    font-size:20px;
-    font-weight:bold;
-    color:#000000;
-}
-
-div.title3
-{
-    text-align:center;
-    font-size:16px;
-    border-style:none;
-    border-width:1px;
-}
-
-div.title4
-{
-    text-align:left;
-    font-size:16px;
-    font-weight:bolder;
-    color:#FF8000;
-}
-
-div.title-date
-{
-    text-align:right;
-    font-size:16px;
-    font-weight:bolder;
-    color:#FF8000;
-}
-
-div.menu1
-{
-    text-align:center;
-    font-size:16px;
-    font-weight:bolder;
-}
-
-div.menu2
-{
-    text-align:center;
-    font-size:16px;
-}
-
-div.news-separator
-{
-	text-align:center;
-	color:#FF8000;
-}
-
-div.email
-{
-	text-align:center;
-}
-
-div.image
-{
-	text-align:right;
-}
-
-img.menu-img
-{
-    text-align:center;
-    font-size:16px;
-    border-color:#000000;
-    border-style:solid;
-    border-width:0px;    
-}
-
-div.paragraph
-{
-    /*text-indent:32px;   */
-    text-align:justify;
-}
-
-div.block
-{
-	padding-right: 16px;
-	padding-left: 16px;
-}
-
-div.include
-{
-	color:#0000FF;
-}
-
-spam.key
-{
-	color:#0000FF;
-}
-
-div.comment
-{
-	color:#008000;
-}
-
-td.page
-{
-    vertical-align:top;
-	padding-right: 32px;
-	padding-left: 32px;
-	padding-bottom: 0px;
-	padding-top: 0px;
-	width:100%;
-}
-
-td.menu
-{
-    vertical-align:top;
-    text-align:right;
-    border-width:0px;
-    border-right-style:solid;
-    border-color:#000000;
-    width:160px;
-	padding-right: 32px;
-	padding-left: 0px;
-	padding-bottom: 0px;
-	padding-top: 0px;
-}
-/*
-a.menu
-{
-    color:#FF8000;
-    font-weight:bolder;   
-}
-*/
-a.menu
-{
-    color:#008000;    
-}
-
-a
-{
-    color:#008000;    
-}
-
-div.issue-content
-{
-    text-indent:32px;   
-}
-
-div.issue-title
-{
-    font-weight:bold;    
-}

BIN
doc/common/title.png


+ 0 - 1572
doc/doxyfile

@@ -1,1572 +0,0 @@
-# Doxyfile 1.6.2
-
-# This file describes the settings to be used by the documentation system
-# doxygen (www.doxygen.org) for a project
-#
-# All text after a hash (#) is considered a comment and will be ignored
-# The format is:
-#       TAG = value [value, ...]
-# For lists items can also be appended using:
-#       TAG += value [value, ...]
-# Values that contain spaces should be placed between quotes (" ")
-
-#---------------------------------------------------------------------------
-# Project related configuration options
-#---------------------------------------------------------------------------
-
-# This tag specifies the encoding used for all characters in the config file 
-# that follow. The default is UTF-8 which is also the encoding used for all 
-# text before the first occurrence of this tag. Doxygen uses libiconv (or the 
-# iconv built into libc) for the transcoding. See 
-# http://www.gnu.org/software/libiconv for the list of possible encodings.
-
-DOXYFILE_ENCODING      = UTF-8
-
-# The PROJECT_NAME tag is a single word (or a sequence of words surrounded 
-# by quotes) that should identify the project.
-
-PROJECT_NAME           = GLM
-
-# The PROJECT_NUMBER tag can be used to enter a project or revision number. 
-# This could be handy for archiving the generated documentation or 
-# if some version control system is used.
-
-PROJECT_NUMBER         = "Version 0.9.A.1"
-
-# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) 
-# base path where the generated documentation will be put. 
-# If a relative path is entered, it will be relative to the location 
-# where doxygen was started. If left blank the current directory will be used.
-
-OUTPUT_DIRECTORY       = .
-
-# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 
-# 4096 sub-directories (in 2 levels) under the output directory of each output 
-# format and will distribute the generated files over these directories. 
-# Enabling this option can be useful when feeding doxygen a huge amount of 
-# source files, where putting all generated files in the same directory would 
-# otherwise cause performance problems for the file system.
-
-CREATE_SUBDIRS         = NO
-
-# The OUTPUT_LANGUAGE tag is used to specify the language in which all 
-# documentation generated by doxygen is written. Doxygen will use this 
-# information to generate all constant output in the proper language. 
-# The default language is English, other supported languages are: 
-# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, 
-# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, 
-# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English 
-# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, 
-# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, 
-# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.
-
-OUTPUT_LANGUAGE        = English
-
-# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will 
-# include brief member descriptions after the members that are listed in 
-# the file and class documentation (similar to JavaDoc). 
-# Set to NO to disable this.
-
-BRIEF_MEMBER_DESC      = YES
-
-# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend 
-# the brief description of a member or function before the detailed description. 
-# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the 
-# brief descriptions will be completely suppressed.
-
-REPEAT_BRIEF           = YES
-
-# This tag implements a quasi-intelligent brief description abbreviator 
-# that is used to form the text in various listings. Each string 
-# in this list, if found as the leading text of the brief description, will be 
-# stripped from the text and the result after processing the whole list, is 
-# used as the annotated text. Otherwise, the brief description is used as-is. 
-# If left blank, the following values are used ("$name" is automatically 
-# replaced with the name of the entity): "The $name class" "The $name widget" 
-# "The $name file" "is" "provides" "specifies" "contains" 
-# "represents" "a" "an" "the"
-
-ABBREVIATE_BRIEF       = "The $name class       " \
-                         "The $name widget       " \
-                         "The $name file       " \
-                         is \
-                         provides \
-                         specifies \
-                         contains \
-                         represents \
-                         a \
-                         an \
-                         the
-
-# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then 
-# Doxygen will generate a detailed section even if there is only a brief 
-# description.
-
-ALWAYS_DETAILED_SEC    = NO
-
-# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all 
-# inherited members of a class in the documentation of that class as if those 
-# members were ordinary class members. Constructors, destructors and assignment 
-# operators of the base classes will not be shown.
-
-INLINE_INHERITED_MEMB  = NO
-
-# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full 
-# path before files name in the file list and in the header files. If set 
-# to NO the shortest path that makes the file name unique will be used.
-
-FULL_PATH_NAMES        = NO
-
-# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag 
-# can be used to strip a user-defined part of the path. Stripping is 
-# only done if one of the specified strings matches the left-hand part of 
-# the path. The tag can be used to show relative paths in the file list. 
-# If left blank the directory from which doxygen is run is used as the 
-# path to strip.
-
-STRIP_FROM_PATH        = "C:/Documents and Settings/Groove/       "
-
-# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of 
-# the path mentioned in the documentation of a class, which tells 
-# the reader which header file to include in order to use a class. 
-# If left blank only the name of the header file containing the class 
-# definition is used. Otherwise one should specify the include paths that 
-# are normally passed to the compiler using the -I flag.
-
-STRIP_FROM_INC_PATH    = 
-
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter 
-# (but less readable) file names. This can be useful is your file systems 
-# doesn't support long names like on DOS, Mac, or CD-ROM.
-
-SHORT_NAMES            = YES
-
-# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen 
-# will interpret the first line (until the first dot) of a JavaDoc-style 
-# comment as the brief description. If set to NO, the JavaDoc 
-# comments will behave just like regular Qt-style comments 
-# (thus requiring an explicit @brief command for a brief description.)
-
-JAVADOC_AUTOBRIEF      = YES
-
-# If the QT_AUTOBRIEF tag is set to YES then Doxygen will 
-# interpret the first line (until the first dot) of a Qt-style 
-# comment as the brief description. If set to NO, the comments 
-# will behave just like regular Qt-style comments (thus requiring 
-# an explicit \brief command for a brief description.)
-
-QT_AUTOBRIEF           = NO
-
-# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen 
-# treat a multi-line C++ special comment block (i.e. a block of //! or /// 
-# comments) as a brief description. This used to be the default behaviour. 
-# The new default is to treat a multi-line C++ comment block as a detailed 
-# description. Set this tag to YES if you prefer the old behaviour instead.
-
-MULTILINE_CPP_IS_BRIEF = NO
-
-# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented 
-# member inherits the documentation from any documented member that it 
-# re-implements.
-
-INHERIT_DOCS           = YES
-
-# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce 
-# a new page for each member. If set to NO, the documentation of a member will 
-# be part of the file/class/namespace that contains it.
-
-SEPARATE_MEMBER_PAGES  = NO
-
-# The TAB_SIZE tag can be used to set the number of spaces in a tab. 
-# Doxygen uses this value to replace tabs by spaces in code fragments.
-
-TAB_SIZE               = 8
-
-# This tag can be used to specify a number of aliases that acts 
-# as commands in the documentation. An alias has the form "name=value". 
-# For example adding "sideeffect=\par Side Effects:\n" will allow you to 
-# put the command \sideeffect (or @sideeffect) in the documentation, which 
-# will result in a user-defined paragraph with heading "Side Effects:". 
-# You can put \n's in the value part of an alias to insert newlines.
-
-ALIASES                = 
-
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C 
-# sources only. Doxygen will then generate output that is more tailored for C. 
-# For instance, some of the names that are used will be different. The list 
-# of all members will be omitted, etc.
-
-OPTIMIZE_OUTPUT_FOR_C  = NO
-
-# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java 
-# sources only. Doxygen will then generate output that is more tailored for 
-# Java. For instance, namespaces will be presented as packages, qualified 
-# scopes will look different, etc.
-
-OPTIMIZE_OUTPUT_JAVA   = NO
-
-# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran 
-# sources only. Doxygen will then generate output that is more tailored for 
-# Fortran.
-
-OPTIMIZE_FOR_FORTRAN   = NO
-
-# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL 
-# sources. Doxygen will then generate output that is tailored for 
-# VHDL.
-
-OPTIMIZE_OUTPUT_VHDL   = NO
-
-# Doxygen selects the parser to use depending on the extension of the files it parses. 
-# With this tag you can assign which parser to use for a given extension. 
-# Doxygen has a built-in mapping, but you can override or extend it using this tag. 
-# The format is ext=language, where ext is a file extension, and language is one of 
-# the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP, 
-# Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat 
-# .inc files as Fortran files (default is PHP), and .f files as C (default is Fortran), 
-# use: inc=Fortran f=C. Note that for custom extensions you also need to set
-# FILE_PATTERNS otherwise the files are not read by doxygen.
-
-EXTENSION_MAPPING      = 
-
-# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want 
-# to include (a tag file for) the STL sources as input, then you should 
-# set this tag to YES in order to let doxygen match functions declarations and 
-# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. 
-# func(std::string) {}). This also make the inheritance and collaboration 
-# diagrams that involve STL classes more complete and accurate.
-
-BUILTIN_STL_SUPPORT    = NO
-
-# If you use Microsoft's C++/CLI language, you should set this option to YES to 
-# enable parsing support.
-
-CPP_CLI_SUPPORT        = NO
-
-# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. 
-# Doxygen will parse them like normal C++ but will assume all classes use public 
-# instead of private inheritance when no explicit protection keyword is present.
-
-SIP_SUPPORT            = NO
-
-# For Microsoft's IDL there are propget and propput attributes to indicate getter 
-# and setter methods for a property. Setting this option to YES (the default) 
-# will make doxygen to replace the get and set methods by a property in the 
-# documentation. This will only work if the methods are indeed getting or 
-# setting a simple type. If this is not the case, or you want to show the 
-# methods anyway, you should set this option to NO.
-
-IDL_PROPERTY_SUPPORT   = YES
-
-# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC 
-# tag is set to YES, then doxygen will reuse the documentation of the first 
-# member in the group (if any) for the other members of the group. By default 
-# all members of a group must be documented explicitly.
-
-DISTRIBUTE_GROUP_DOC   = NO
-
-# Set the SUBGROUPING tag to YES (the default) to allow class member groups of 
-# the same type (for instance a group of public functions) to be put as a 
-# subgroup of that type (e.g. under the Public Functions section). Set it to 
-# NO to prevent subgrouping. Alternatively, this can be done per class using 
-# the \nosubgrouping command.
-
-SUBGROUPING            = NO
-
-# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum 
-# is documented as struct, union, or enum with the name of the typedef. So 
-# typedef struct TypeS {} TypeT, will appear in the documentation as a struct 
-# with name TypeT. When disabled the typedef will appear as a member of a file, 
-# namespace, or class. And the struct will be named TypeS. This can typically 
-# be useful for C code in case the coding convention dictates that all compound 
-# types are typedef'ed and only the typedef is referenced, never the tag name.
-
-TYPEDEF_HIDES_STRUCT   = NO
-
-# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to 
-# determine which symbols to keep in memory and which to flush to disk. 
-# When the cache is full, less often used symbols will be written to disk. 
-# For small to medium size projects (<1000 input files) the default value is 
-# probably good enough. For larger projects a too small cache size can cause 
-# doxygen to be busy swapping symbols to and from disk most of the time 
-# causing a significant performance penality. 
-# If the system has enough physical memory increasing the cache will improve the 
-# performance by keeping more symbols in memory. Note that the value works on 
-# a logarithmic scale so increasing the size by one will rougly double the 
-# memory usage. The cache size is given by this formula: 
-# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, 
-# corresponding to a cache size of 2^16 = 65536 symbols
-
-SYMBOL_CACHE_SIZE      = 0
-
-#---------------------------------------------------------------------------
-# Build related configuration options
-#---------------------------------------------------------------------------
-
-# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in 
-# documentation are documented, even if no documentation was available. 
-# Private class members and static file members will be hidden unless 
-# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
-
-EXTRACT_ALL            = NO
-
-# If the EXTRACT_PRIVATE tag is set to YES all private members of a class 
-# will be included in the documentation.
-
-EXTRACT_PRIVATE        = NO
-
-# If the EXTRACT_STATIC tag is set to YES all static members of a file 
-# will be included in the documentation.
-
-EXTRACT_STATIC         = YES
-
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) 
-# defined locally in source files will be included in the documentation. 
-# If set to NO only classes defined in header files are included.
-
-EXTRACT_LOCAL_CLASSES  = NO
-
-# This flag is only useful for Objective-C code. When set to YES local 
-# methods, which are defined in the implementation section but not in 
-# the interface are included in the documentation. 
-# If set to NO (the default) only methods in the interface are included.
-
-EXTRACT_LOCAL_METHODS  = NO
-
-# If this flag is set to YES, the members of anonymous namespaces will be 
-# extracted and appear in the documentation as a namespace called 
-# 'anonymous_namespace{file}', where file will be replaced with the base 
-# name of the file that contains the anonymous namespace. By default 
-# anonymous namespace are hidden.
-
-EXTRACT_ANON_NSPACES   = NO
-
-# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all 
-# undocumented members of documented classes, files or namespaces. 
-# If set to NO (the default) these members will be included in the 
-# various overviews, but no documentation section is generated. 
-# This option has no effect if EXTRACT_ALL is enabled.
-
-HIDE_UNDOC_MEMBERS     = YES
-
-# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all 
-# undocumented classes that are normally visible in the class hierarchy. 
-# If set to NO (the default) these classes will be included in the various 
-# overviews. This option has no effect if EXTRACT_ALL is enabled.
-
-HIDE_UNDOC_CLASSES     = YES
-
-# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all 
-# friend (class|struct|union) declarations. 
-# If set to NO (the default) these declarations will be included in the 
-# documentation.
-
-HIDE_FRIEND_COMPOUNDS  = YES
-
-# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any 
-# documentation blocks found inside the body of a function. 
-# If set to NO (the default) these blocks will be appended to the 
-# function's detailed documentation block.
-
-HIDE_IN_BODY_DOCS      = YES
-
-# The INTERNAL_DOCS tag determines if documentation 
-# that is typed after a \internal command is included. If the tag is set 
-# to NO (the default) then the documentation will be excluded. 
-# Set it to YES to include the internal documentation.
-
-INTERNAL_DOCS          = NO
-
-# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate 
-# file names in lower-case letters. If set to YES upper-case letters are also 
-# allowed. This is useful if you have classes or files whose names only differ 
-# in case and if your file system supports case sensitive file names. Windows 
-# and Mac users are advised to set this option to NO.
-
-CASE_SENSE_NAMES       = YES
-
-# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen 
-# will show members with their full class and namespace scopes in the 
-# documentation. If set to YES the scope will be hidden.
-
-HIDE_SCOPE_NAMES       = YES
-
-# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen 
-# will put a list of the files that are included by a file in the documentation 
-# of that file.
-
-SHOW_INCLUDE_FILES     = NO
-
-# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen 
-# will list include files with double quotes in the documentation 
-# rather than with sharp brackets.
-
-FORCE_LOCAL_INCLUDES   = NO
-
-# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] 
-# is inserted in the documentation for inline members.
-
-INLINE_INFO            = NO
-
-# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen 
-# will sort the (detailed) documentation of file and class members 
-# alphabetically by member name. If set to NO the members will appear in 
-# declaration order.
-
-SORT_MEMBER_DOCS       = YES
-
-# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the 
-# brief documentation of file, namespace and class members alphabetically 
-# by member name. If set to NO (the default) the members will appear in 
-# declaration order.
-
-SORT_BRIEF_DOCS        = YES
-
-# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen
-# will sort the (brief and detailed) documentation of class members so that
-# constructors and destructors are listed first. If set to NO (the default)
-# the constructors will appear in the respective orders defined by
-# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS.
-# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO
-# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO.
-
-SORT_MEMBERS_CTORS_1ST = NO
-
-# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the 
-# hierarchy of group names into alphabetical order. If set to NO (the default) 
-# the group names will appear in their defined order.
-
-SORT_GROUP_NAMES       = NO
-
-# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be 
-# sorted by fully-qualified names, including namespaces. If set to 
-# NO (the default), the class list will be sorted only by class name, 
-# not including the namespace part. 
-# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. 
-# Note: This option applies only to the class list, not to the 
-# alphabetical list.
-
-SORT_BY_SCOPE_NAME     = YES
-
-# The GENERATE_TODOLIST tag can be used to enable (YES) or 
-# disable (NO) the todo list. This list is created by putting \todo 
-# commands in the documentation.
-
-GENERATE_TODOLIST      = YES
-
-# The GENERATE_TESTLIST tag can be used to enable (YES) or 
-# disable (NO) the test list. This list is created by putting \test 
-# commands in the documentation.
-
-GENERATE_TESTLIST      = YES
-
-# The GENERATE_BUGLIST tag can be used to enable (YES) or 
-# disable (NO) the bug list. This list is created by putting \bug 
-# commands in the documentation.
-
-GENERATE_BUGLIST       = YES
-
-# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or 
-# disable (NO) the deprecated list. This list is created by putting 
-# \deprecated commands in the documentation.
-
-GENERATE_DEPRECATEDLIST= YES
-
-# The ENABLED_SECTIONS tag can be used to enable conditional 
-# documentation sections, marked by \if sectionname ... \endif.
-
-ENABLED_SECTIONS       = 
-
-# The MAX_INITIALIZER_LINES tag determines the maximum number of lines 
-# the initial value of a variable or define consists of for it to appear in 
-# the documentation. If the initializer consists of more lines than specified 
-# here it will be hidden. Use a value of 0 to hide initializers completely. 
-# The appearance of the initializer of individual variables and defines in the 
-# documentation can be controlled using \showinitializer or \hideinitializer 
-# command in the documentation regardless of this setting.
-
-MAX_INITIALIZER_LINES  = 30
-
-# Set the SHOW_USED_FILES tag to NO to disable the list of files generated 
-# at the bottom of the documentation of classes and structs. If set to YES the 
-# list will mention the files that were used to generate the documentation.
-
-SHOW_USED_FILES        = NO
-
-# If the sources in your project are distributed over multiple directories 
-# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy 
-# in the documentation. The default is NO.
-
-SHOW_DIRECTORIES       = NO
-
-# Set the SHOW_FILES tag to NO to disable the generation of the Files page. 
-# This will remove the Files entry from the Quick Index and from the 
-# Folder Tree View (if specified). The default is YES.
-
-SHOW_FILES             = YES
-
-# Set the SHOW_NAMESPACES tag to NO to disable the generation of the 
-# Namespaces page.  This will remove the Namespaces entry from the Quick Index 
-# and from the Folder Tree View (if specified). The default is YES.
-
-SHOW_NAMESPACES        = YES
-
-# The FILE_VERSION_FILTER tag can be used to specify a program or script that 
-# doxygen should invoke to get the current version for each file (typically from 
-# the version control system). Doxygen will invoke the program by executing (via 
-# popen()) the command <command> <input-file>, where <command> is the value of 
-# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file 
-# provided by doxygen. Whatever the program writes to standard output 
-# is used as the file version. See the manual for examples.
-
-FILE_VERSION_FILTER    = 
-
-# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by 
-# doxygen. The layout file controls the global structure of the generated output files 
-# in an output format independent way. The create the layout file that represents 
-# doxygen's defaults, run doxygen with the -l option. You can optionally specify a 
-# file name after the option, if omitted DoxygenLayout.xml will be used as the name 
-# of the layout file.
-
-LAYOUT_FILE            = 
-
-#---------------------------------------------------------------------------
-# configuration options related to warning and progress messages
-#---------------------------------------------------------------------------
-
-# The QUIET tag can be used to turn on/off the messages that are generated 
-# by doxygen. Possible values are YES and NO. If left blank NO is used.
-
-QUIET                  = NO
-
-# The WARNINGS tag can be used to turn on/off the warning messages that are 
-# generated by doxygen. Possible values are YES and NO. If left blank 
-# NO is used.
-
-WARNINGS               = YES
-
-# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings 
-# for undocumented members. If EXTRACT_ALL is set to YES then this flag will 
-# automatically be disabled.
-
-WARN_IF_UNDOCUMENTED   = YES
-
-# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for 
-# potential errors in the documentation, such as not documenting some 
-# parameters in a documented function, or documenting parameters that 
-# don't exist or using markup commands wrongly.
-
-WARN_IF_DOC_ERROR      = YES
-
-# This WARN_NO_PARAMDOC option can be abled to get warnings for 
-# functions that are documented, but have no documentation for their parameters 
-# or return value. If set to NO (the default) doxygen will only warn about 
-# wrong or incomplete parameter documentation, but not about the absence of 
-# documentation.
-
-WARN_NO_PARAMDOC       = NO
-
-# The WARN_FORMAT tag determines the format of the warning messages that 
-# doxygen can produce. The string should contain the $file, $line, and $text 
-# tags, which will be replaced by the file and line number from which the 
-# warning originated and the warning text. Optionally the format may contain 
-# $version, which will be replaced by the version of the file (if it could 
-# be obtained via FILE_VERSION_FILTER)
-
-WARN_FORMAT            = "$file:$line: $text"
-
-# The WARN_LOGFILE tag can be used to specify a file to which warning 
-# and error messages should be written. If left blank the output is written 
-# to stderr.
-
-WARN_LOGFILE           = 
-
-#---------------------------------------------------------------------------
-# configuration options related to the input files
-#---------------------------------------------------------------------------
-
-# The INPUT tag can be used to specify the files and/or directories that contain 
-# documented source files. You may enter file names like "myfile.cpp" or 
-# directories like "/usr/src/myproject". Separate the files or directories 
-# with spaces.
-
-INPUT                  = ../glm
-
-# This tag can be used to specify the character encoding of the source files 
-# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is 
-# also the default input encoding. Doxygen uses libiconv (or the iconv built 
-# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for 
-# the list of possible encodings.
-
-INPUT_ENCODING         = UTF-8
-
-# If the value of the INPUT tag contains directories, you can use the 
-# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
-# and *.h) to filter out the source-files in the directories. If left 
-# blank the following patterns are tested: 
-# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx 
-# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90
-
-FILE_PATTERNS          = *.hpp
-
-# The RECURSIVE tag can be used to turn specify whether or not subdirectories 
-# should be searched for input files as well. Possible values are YES and NO. 
-# If left blank NO is used.
-
-RECURSIVE              = YES
-
-# The EXCLUDE tag can be used to specify files and/or directories that should 
-# excluded from the INPUT source files. This way you can easily exclude a 
-# subdirectory from a directory tree whose root is specified with the INPUT tag.
-
-EXCLUDE                = ../../include/glm/gtx/vecx.hpp \
-                         ../../include/glm/gtx/matx.hpp \
-                         ../../include/glm/gtx/statistics_operation.hpp
-
-# The EXCLUDE_SYMLINKS tag can be used select whether or not files or 
-# directories that are symbolic links (a Unix filesystem feature) are excluded 
-# from the input.
-
-EXCLUDE_SYMLINKS       = NO
-
-# If the value of the INPUT tag contains directories, you can use the 
-# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude 
-# certain files from those directories. Note that the wildcards are matched 
-# against the file with absolute path, so to exclude all test directories 
-# for example use the pattern */test/*
-
-EXCLUDE_PATTERNS       = 
-
-# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names 
-# (namespaces, classes, functions, etc.) that should be excluded from the 
-# output. The symbol name can be a fully qualified name, a word, or if the 
-# wildcard * is used, a substring. Examples: ANamespace, AClass, 
-# AClass::ANamespace, ANamespace::*Test
-
-EXCLUDE_SYMBOLS        = detail
-
-# The EXAMPLE_PATH tag can be used to specify one or more files or 
-# directories that contain example code fragments that are included (see 
-# the \include command).
-
-EXAMPLE_PATH           = 
-
-# If the value of the EXAMPLE_PATH tag contains directories, you can use the 
-# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
-# and *.h) to filter out the source-files in the directories. If left 
-# blank all files are included.
-
-EXAMPLE_PATTERNS       = *
-
-# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be 
-# searched for input files to be used with the \include or \dontinclude 
-# commands irrespective of the value of the RECURSIVE tag. 
-# Possible values are YES and NO. If left blank NO is used.
-
-EXAMPLE_RECURSIVE      = NO
-
-# The IMAGE_PATH tag can be used to specify one or more files or 
-# directories that contain image that are included in the documentation (see 
-# the \image command).
-
-IMAGE_PATH             = 
-
-# The INPUT_FILTER tag can be used to specify a program that doxygen should 
-# invoke to filter for each input file. Doxygen will invoke the filter program 
-# by executing (via popen()) the command <filter> <input-file>, where <filter> 
-# is the value of the INPUT_FILTER tag, and <input-file> is the name of an 
-# input file. Doxygen will then use the output that the filter program writes 
-# to standard output.  If FILTER_PATTERNS is specified, this tag will be 
-# ignored.
-
-INPUT_FILTER           = 
-
-# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern 
-# basis.  Doxygen will compare the file name with each pattern and apply the 
-# filter if there is a match.  The filters are a list of the form: 
-# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further 
-# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER 
-# is applied to all files.
-
-FILTER_PATTERNS        = 
-
-# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using 
-# INPUT_FILTER) will be used to filter the input files when producing source 
-# files to browse (i.e. when SOURCE_BROWSER is set to YES).
-
-FILTER_SOURCE_FILES    = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to source browsing
-#---------------------------------------------------------------------------
-
-# If the SOURCE_BROWSER tag is set to YES then a list of source files will 
-# be generated. Documented entities will be cross-referenced with these sources. 
-# Note: To get rid of all source code in the generated output, make sure also 
-# VERBATIM_HEADERS is set to NO.
-
-SOURCE_BROWSER         = YES
-
-# Setting the INLINE_SOURCES tag to YES will include the body 
-# of functions and classes directly in the documentation.
-
-INLINE_SOURCES         = NO
-
-# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct 
-# doxygen to hide any special comment blocks from generated source code 
-# fragments. Normal C and C++ comments will always remain visible.
-
-STRIP_CODE_COMMENTS    = YES
-
-# If the REFERENCED_BY_RELATION tag is set to YES 
-# then for each documented function all documented 
-# functions referencing it will be listed.
-
-REFERENCED_BY_RELATION = YES
-
-# If the REFERENCES_RELATION tag is set to YES 
-# then for each documented function all documented entities 
-# called/used by that function will be listed.
-
-REFERENCES_RELATION    = YES
-
-# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) 
-# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from 
-# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will 
-# link to the source code.  Otherwise they will link to the documentation.
-
-REFERENCES_LINK_SOURCE = YES
-
-# If the USE_HTAGS tag is set to YES then the references to source code 
-# will point to the HTML generated by the htags(1) tool instead of doxygen 
-# built-in source browser. The htags tool is part of GNU's global source 
-# tagging system (see http://www.gnu.org/software/global/global.html). You 
-# will need version 4.8.6 or higher.
-
-USE_HTAGS              = NO
-
-# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen 
-# will generate a verbatim copy of the header file for each class for 
-# which an include is specified. Set to NO to disable this.
-
-VERBATIM_HEADERS       = YES
-
-#---------------------------------------------------------------------------
-# configuration options related to the alphabetical class index
-#---------------------------------------------------------------------------
-
-# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index 
-# of all compounds will be generated. Enable this if the project 
-# contains a lot of classes, structs, unions or interfaces.
-
-ALPHABETICAL_INDEX     = NO
-
-# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then 
-# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns 
-# in which this list will be split (can be a number in the range [1..20])
-
-COLS_IN_ALPHA_INDEX    = 5
-
-# In case all classes in a project start with a common prefix, all 
-# classes will be put under the same header in the alphabetical index. 
-# The IGNORE_PREFIX tag can be used to specify one or more prefixes that 
-# should be ignored while generating the index headers.
-
-IGNORE_PREFIX          = 
-
-#---------------------------------------------------------------------------
-# configuration options related to the HTML output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_HTML tag is set to YES (the default) Doxygen will 
-# generate HTML output.
-
-GENERATE_HTML          = YES
-
-# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. 
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
-# put in front of it. If left blank `html' will be used as the default path.
-
-HTML_OUTPUT            = html
-
-# The HTML_FILE_EXTENSION tag can be used to specify the file extension for 
-# each generated HTML page (for example: .htm,.php,.asp). If it is left blank 
-# doxygen will generate files with .html extension.
-
-HTML_FILE_EXTENSION    = .html
-
-# The HTML_HEADER tag can be used to specify a personal HTML header for 
-# each generated HTML page. If it is left blank doxygen will generate a 
-# standard header.
-
-HTML_HEADER            = 
-
-# The HTML_FOOTER tag can be used to specify a personal HTML footer for 
-# each generated HTML page. If it is left blank doxygen will generate a 
-# standard footer.
-
-HTML_FOOTER            = 
-
-# The HTML_STYLESHEET tag can be used to specify a user-defined cascading 
-# style sheet that is used by each HTML page. It can be used to 
-# fine-tune the look of the HTML output. If the tag is left blank doxygen 
-# will generate a default style sheet. Note that doxygen will try to copy 
-# the style sheet file to the HTML output directory, so don't put your own 
-# stylesheet in the HTML output directory as well, or it will be erased!
-
-HTML_STYLESHEET        = 
-
-# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML 
-# page will contain the date and time when the page was generated. Setting 
-# this to NO can help when comparing the output of multiple runs.
-
-HTML_TIMESTAMP         = NO
-
-# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, 
-# files or namespaces will be aligned in HTML using tables. If set to 
-# NO a bullet list will be used.
-
-HTML_ALIGN_MEMBERS     = YES
-
-# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML 
-# documentation will contain sections that can be hidden and shown after the 
-# page has loaded. For this to work a browser that supports 
-# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox 
-# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).
-
-HTML_DYNAMIC_SECTIONS  = NO
-
-# If the GENERATE_DOCSET tag is set to YES, additional index files 
-# will be generated that can be used as input for Apple's Xcode 3 
-# integrated development environment, introduced with OSX 10.5 (Leopard). 
-# To create a documentation set, doxygen will generate a Makefile in the 
-# HTML output directory. Running make will produce the docset in that 
-# directory and running "make install" will install the docset in 
-# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find 
-# it at startup. 
-# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.
-
-GENERATE_DOCSET        = NO
-
-# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the 
-# feed. A documentation feed provides an umbrella under which multiple 
-# documentation sets from a single provider (such as a company or product suite) 
-# can be grouped.
-
-DOCSET_FEEDNAME        = "Doxygen generated docs"
-
-# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that 
-# should uniquely identify the documentation set bundle. This should be a 
-# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen 
-# will append .docset to the name.
-
-DOCSET_BUNDLE_ID       = org.doxygen.Project
-
-# If the GENERATE_HTMLHELP tag is set to YES, additional index files 
-# will be generated that can be used as input for tools like the 
-# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) 
-# of the generated HTML documentation.
-
-GENERATE_HTMLHELP      = YES
-
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can 
-# be used to specify the file name of the resulting .chm file. You 
-# can add a path in front of the file if the result should not be 
-# written to the html output directory.
-
-CHM_FILE               = 
-
-# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can 
-# be used to specify the location (absolute path including file name) of 
-# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run 
-# the HTML help compiler on the generated index.hhp.
-
-HHC_LOCATION           = 
-
-# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag 
-# controls if a separate .chi index file is generated (YES) or that 
-# it should be included in the master .chm file (NO).
-
-GENERATE_CHI           = NO
-
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING 
-# is used to encode HtmlHelp index (hhk), content (hhc) and project file 
-# content.
-
-CHM_INDEX_ENCODING     = 
-
-# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag 
-# controls whether a binary table of contents is generated (YES) or a 
-# normal table of contents (NO) in the .chm file.
-
-BINARY_TOC             = NO
-
-# The TOC_EXPAND flag can be set to YES to add extra items for group members 
-# to the contents of the HTML help documentation and to the tree view.
-
-TOC_EXPAND             = NO
-
-# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER 
-# are set, an additional index file will be generated that can be used as input for 
-# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated 
-# HTML documentation.
-
-GENERATE_QHP           = NO
-
-# If the QHG_LOCATION tag is specified, the QCH_FILE tag can 
-# be used to specify the file name of the resulting .qch file. 
-# The path specified is relative to the HTML output folder.
-
-QCH_FILE               = 
-
-# The QHP_NAMESPACE tag specifies the namespace to use when generating 
-# Qt Help Project output. For more information please see 
-# http://doc.trolltech.com/qthelpproject.html#namespace
-
-QHP_NAMESPACE          = org.doxygen.Project
-
-# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating 
-# Qt Help Project output. For more information please see 
-# http://doc.trolltech.com/qthelpproject.html#virtual-folders
-
-QHP_VIRTUAL_FOLDER     = doc
-
-# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add. 
-# For more information please see 
-# http://doc.trolltech.com/qthelpproject.html#custom-filters
-
-QHP_CUST_FILTER_NAME   = 
-
-# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see 
-# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters">Qt Help Project / Custom Filters</a>.
-
-QHP_CUST_FILTER_ATTRS  = 
-
-# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's 
-# filter section matches. 
-# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes">Qt Help Project / Filter Attributes</a>.
-
-QHP_SECT_FILTER_ATTRS  = 
-
-# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can 
-# be used to specify the location of Qt's qhelpgenerator. 
-# If non-empty doxygen will try to run qhelpgenerator on the generated 
-# .qhp file.
-
-QHG_LOCATION           = 
-
-# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files  
-# will be generated, which together with the HTML files, form an Eclipse help  
-# plugin. To install this plugin and make it available under the help contents 
-# menu in Eclipse, the contents of the directory containing the HTML and XML 
-# files needs to be copied into the plugins directory of eclipse. The name of 
-# the directory within the plugins directory should be the same as 
-# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before
-# the help appears.
-
-GENERATE_ECLIPSEHELP   = NO
-
-# A unique identifier for the eclipse help plugin. When installing the plugin 
-# the directory name containing the HTML and XML files should also have 
-# this name.
-
-ECLIPSE_DOC_ID         = org.doxygen.Project
-
-# The DISABLE_INDEX tag can be used to turn on/off the condensed index at 
-# top of each HTML page. The value NO (the default) enables the index and 
-# the value YES disables it.
-
-DISABLE_INDEX          = NO
-
-# This tag can be used to set the number of enum values (range [1..20]) 
-# that doxygen will group on one line in the generated HTML documentation.
-
-ENUM_VALUES_PER_LINE   = 4
-
-# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index 
-# structure should be generated to display hierarchical information. 
-# If the tag value is set to YES, a side panel will be generated 
-# containing a tree-like index structure (just like the one that 
-# is generated for HTML Help). For this to work a browser that supports 
-# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). 
-# Windows users are probably better off using the HTML help feature.
-
-GENERATE_TREEVIEW      = NO
-
-# By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, 
-# and Class Hierarchy pages using a tree view instead of an ordered list.
-
-USE_INLINE_TREES       = NO
-
-# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be 
-# used to set the initial width (in pixels) of the frame in which the tree 
-# is shown.
-
-TREEVIEW_WIDTH         = 250
-
-# Use this tag to change the font size of Latex formulas included 
-# as images in the HTML documentation. The default is 10. Note that 
-# when you change the font size after a successful doxygen run you need 
-# to manually remove any form_*.png images from the HTML output directory 
-# to force them to be regenerated.
-
-FORMULA_FONTSIZE       = 10
-
-# When the SEARCHENGINE tag is enabled doxygen will generate a search box
-# for the HTML output. The underlying search engine uses javascript 
-# and DHTML and should work on any modern browser. Note that when using
-# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets
-# (GENERATE_DOCSET) there is already a search function so this one should 
-# typically be disabled. For large projects the javascript based search engine 
-# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution.
-
-SEARCHENGINE           = NO
-
-# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
-# implemented using a PHP enabled web server instead of at the web client
-# using Javascript. Doxygen will generate the search PHP script and index 
-# file to put on the web server. The advantage of the server
-# based approach is that it scales better to large projects and allows
-# full text search. The disadvances is that it is more difficult to setup 
-# and does not have live searching capabilities.
-
-SERVER_BASED_SEARCH    = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to the LaTeX output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will 
-# generate Latex output.
-
-GENERATE_LATEX         = NO
-
-# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. 
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
-# put in front of it. If left blank `latex' will be used as the default path.
-
-LATEX_OUTPUT           = latex
-
-# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be 
-# invoked. If left blank `latex' will be used as the default command name. 
-# Note that when enabling USE_PDFLATEX this option is only used for 
-# generating bitmaps for formulas in the HTML output, but not in the 
-# Makefile that is written to the output directory.
-
-LATEX_CMD_NAME         = latex
-
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to 
-# generate index for LaTeX. If left blank `makeindex' will be used as the 
-# default command name.
-
-MAKEINDEX_CMD_NAME     = makeindex
-
-# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact 
-# LaTeX documents. This may be useful for small projects and may help to 
-# save some trees in general.
-
-COMPACT_LATEX          = NO
-
-# The PAPER_TYPE tag can be used to set the paper type that is used 
-# by the printer. Possible values are: a4, a4wide, letter, legal and 
-# executive. If left blank a4wide will be used.
-
-PAPER_TYPE             = a4wide
-
-# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX 
-# packages that should be included in the LaTeX output.
-
-EXTRA_PACKAGES         = 
-
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for 
-# the generated latex document. The header should contain everything until 
-# the first chapter. If it is left blank doxygen will generate a 
-# standard header. Notice: only use this tag if you know what you are doing!
-
-LATEX_HEADER           = 
-
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated 
-# is prepared for conversion to pdf (using ps2pdf). The pdf file will 
-# contain links (just like the HTML output) instead of page references 
-# This makes the output suitable for online browsing using a pdf viewer.
-
-PDF_HYPERLINKS         = NO
-
-# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of 
-# plain latex in the generated Makefile. Set this option to YES to get a 
-# higher quality PDF documentation.
-
-USE_PDFLATEX           = YES
-
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. 
-# command to the generated LaTeX files. This will instruct LaTeX to keep 
-# running if errors occur, instead of asking the user for help. 
-# This option is also used when generating formulas in HTML.
-
-LATEX_BATCHMODE        = NO
-
-# If LATEX_HIDE_INDICES is set to YES then doxygen will not 
-# include the index chapters (such as File Index, Compound Index, etc.) 
-# in the output.
-
-LATEX_HIDE_INDICES     = NO
-
-# If LATEX_SOURCE_CODE is set to YES then doxygen will include
-# source code with syntax highlighting in the LaTeX output.
-# Note that which sources are shown also depends on other settings
-# such as SOURCE_BROWSER.
-
-LATEX_SOURCE_CODE      = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to the RTF output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output 
-# The RTF output is optimized for Word 97 and may not look very pretty with 
-# other RTF readers or editors.
-
-GENERATE_RTF           = YES
-
-# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. 
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
-# put in front of it. If left blank `rtf' will be used as the default path.
-
-RTF_OUTPUT             = glm.rtf
-
-# If the COMPACT_RTF tag is set to YES Doxygen generates more compact 
-# RTF documents. This may be useful for small projects and may help to 
-# save some trees in general.
-
-COMPACT_RTF            = NO
-
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated 
-# will contain hyperlink fields. The RTF file will 
-# contain links (just like the HTML output) instead of page references. 
-# This makes the output suitable for online browsing using WORD or other 
-# programs which support those fields. 
-# Note: wordpad (write) and others do not support links.
-
-RTF_HYPERLINKS         = YES
-
-# Load stylesheet definitions from file. Syntax is similar to doxygen's 
-# config file, i.e. a series of assignments. You only have to provide 
-# replacements, missing definitions are set to their default value.
-
-RTF_STYLESHEET_FILE    = 
-
-# Set optional variables used in the generation of an rtf document. 
-# Syntax is similar to doxygen's config file.
-
-RTF_EXTENSIONS_FILE    = 
-
-#---------------------------------------------------------------------------
-# configuration options related to the man page output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_MAN tag is set to YES (the default) Doxygen will 
-# generate man pages
-
-GENERATE_MAN           = NO
-
-# The MAN_OUTPUT tag is used to specify where the man pages will be put. 
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
-# put in front of it. If left blank `man' will be used as the default path.
-
-MAN_OUTPUT             = man
-
-# The MAN_EXTENSION tag determines the extension that is added to 
-# the generated man pages (default is the subroutine's section .3)
-
-MAN_EXTENSION          = .3
-
-# If the MAN_LINKS tag is set to YES and Doxygen generates man output, 
-# then it will generate one additional man file for each entity 
-# documented in the real man page(s). These additional files 
-# only source the real man page, but without them the man command 
-# would be unable to find the correct page. The default is NO.
-
-MAN_LINKS              = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to the XML output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_XML tag is set to YES Doxygen will 
-# generate an XML file that captures the structure of 
-# the code including all documentation.
-
-GENERATE_XML           = NO
-
-# The XML_OUTPUT tag is used to specify where the XML pages will be put. 
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
-# put in front of it. If left blank `xml' will be used as the default path.
-
-XML_OUTPUT             = xml
-
-# The XML_SCHEMA tag can be used to specify an XML schema, 
-# which can be used by a validating XML parser to check the 
-# syntax of the XML files.
-
-XML_SCHEMA             = 
-
-# The XML_DTD tag can be used to specify an XML DTD, 
-# which can be used by a validating XML parser to check the 
-# syntax of the XML files.
-
-XML_DTD                = 
-
-# If the XML_PROGRAMLISTING tag is set to YES Doxygen will 
-# dump the program listings (including syntax highlighting 
-# and cross-referencing information) to the XML output. Note that 
-# enabling this will significantly increase the size of the XML output.
-
-XML_PROGRAMLISTING     = YES
-
-#---------------------------------------------------------------------------
-# configuration options for the AutoGen Definitions output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will 
-# generate an AutoGen Definitions (see autogen.sf.net) file 
-# that captures the structure of the code including all 
-# documentation. Note that this feature is still experimental 
-# and incomplete at the moment.
-
-GENERATE_AUTOGEN_DEF   = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to the Perl module output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_PERLMOD tag is set to YES Doxygen will 
-# generate a Perl module file that captures the structure of 
-# the code including all documentation. Note that this 
-# feature is still experimental and incomplete at the 
-# moment.
-
-GENERATE_PERLMOD       = NO
-
-# If the PERLMOD_LATEX tag is set to YES Doxygen will generate 
-# the necessary Makefile rules, Perl scripts and LaTeX code to be able 
-# to generate PDF and DVI output from the Perl module output.
-
-PERLMOD_LATEX          = NO
-
-# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be 
-# nicely formatted so it can be parsed by a human reader.  This is useful 
-# if you want to understand what is going on.  On the other hand, if this 
-# tag is set to NO the size of the Perl module output will be much smaller 
-# and Perl will parse it just the same.
-
-PERLMOD_PRETTY         = YES
-
-# The names of the make variables in the generated doxyrules.make file 
-# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. 
-# This is useful so different doxyrules.make files included by the same 
-# Makefile don't overwrite each other's variables.
-
-PERLMOD_MAKEVAR_PREFIX = 
-
-#---------------------------------------------------------------------------
-# Configuration options related to the preprocessor
-#---------------------------------------------------------------------------
-
-# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will 
-# evaluate all C-preprocessor directives found in the sources and include 
-# files.
-
-ENABLE_PREPROCESSING   = YES
-
-# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro 
-# names in the source code. If set to NO (the default) only conditional 
-# compilation will be performed. Macro expansion can be done in a controlled 
-# way by setting EXPAND_ONLY_PREDEF to YES.
-
-MACRO_EXPANSION        = NO
-
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES 
-# then the macro expansion is limited to the macros specified with the 
-# PREDEFINED and EXPAND_AS_DEFINED tags.
-
-EXPAND_ONLY_PREDEF     = NO
-
-# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files 
-# in the INCLUDE_PATH (see below) will be search if a #include is found.
-
-SEARCH_INCLUDES        = YES
-
-# The INCLUDE_PATH tag can be used to specify one or more directories that 
-# contain include files that are not input files but should be processed by 
-# the preprocessor.
-
-INCLUDE_PATH           = 
-
-# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard 
-# patterns (like *.h and *.hpp) to filter out the header-files in the 
-# directories. If left blank, the patterns specified with FILE_PATTERNS will 
-# be used.
-
-INCLUDE_FILE_PATTERNS  = 
-
-# The PREDEFINED tag can be used to specify one or more macro names that 
-# are defined before the preprocessor is started (similar to the -D option of 
-# gcc). The argument of the tag is a list of macros of the form: name 
-# or name=definition (no spaces). If the definition and the = are 
-# omitted =1 is assumed. To prevent a macro definition from being 
-# undefined via #undef or recursively expanded use the := operator 
-# instead of the = operator.
-
-PREDEFINED             = 
-
-# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then 
-# this tag can be used to specify a list of macro names that should be expanded. 
-# The macro definition that is found in the sources will be used. 
-# Use the PREDEFINED tag if you want to use a different macro definition.
-
-EXPAND_AS_DEFINED      = 
-
-# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then 
-# doxygen's preprocessor will remove all function-like macros that are alone 
-# on a line, have an all uppercase name, and do not end with a semicolon. Such 
-# function macros are typically used for boiler-plate code, and will confuse 
-# the parser if not removed.
-
-SKIP_FUNCTION_MACROS   = YES
-
-#---------------------------------------------------------------------------
-# Configuration::additions related to external references
-#---------------------------------------------------------------------------
-
-# The TAGFILES option can be used to specify one or more tagfiles. 
-# Optionally an initial location of the external documentation 
-# can be added for each tagfile. The format of a tag file without 
-# this location is as follows: 
-#   TAGFILES = file1 file2 ... 
-# Adding location for the tag files is done as follows: 
-#   TAGFILES = file1=loc1 "file2 = loc2" ... 
-# where "loc1" and "loc2" can be relative or absolute paths or 
-# URLs. If a location is present for each tag, the installdox tool 
-# does not have to be run to correct the links. 
-# Note that each tag file must have a unique name 
-# (where the name does NOT include the path) 
-# If a tag file is not located in the directory in which doxygen 
-# is run, you must also specify the path to the tagfile here.
-
-TAGFILES               = 
-
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create 
-# a tag file that is based on the input files it reads.
-
-GENERATE_TAGFILE       = 
-
-# If the ALLEXTERNALS tag is set to YES all external classes will be listed 
-# in the class index. If set to NO only the inherited external classes 
-# will be listed.
-
-ALLEXTERNALS           = NO
-
-# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed 
-# in the modules index. If set to NO, only the current project's groups will 
-# be listed.
-
-EXTERNAL_GROUPS        = YES
-
-# The PERL_PATH should be the absolute path and name of the perl script 
-# interpreter (i.e. the result of `which perl').
-
-PERL_PATH              = /usr/bin/perl
-
-#---------------------------------------------------------------------------
-# Configuration options related to the dot tool
-#---------------------------------------------------------------------------
-
-# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will 
-# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base 
-# or super classes. Setting the tag to NO turns the diagrams off. Note that 
-# this option is superseded by the HAVE_DOT option below. This is only a 
-# fallback. It is recommended to install and use dot, since it yields more 
-# powerful graphs.
-
-CLASS_DIAGRAMS         = NO
-
-# You can define message sequence charts within doxygen comments using the \msc 
-# command. Doxygen will then run the mscgen tool (see 
-# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the 
-# documentation. The MSCGEN_PATH tag allows you to specify the directory where 
-# the mscgen tool resides. If left empty the tool is assumed to be found in the 
-# default search path.
-
-MSCGEN_PATH            = 
-
-# If set to YES, the inheritance and collaboration graphs will hide 
-# inheritance and usage relations if the target is undocumented 
-# or is not a class.
-
-HIDE_UNDOC_RELATIONS   = YES
-
-# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is 
-# available from the path. This tool is part of Graphviz, a graph visualization 
-# toolkit from AT&T and Lucent Bell Labs. The other options in this section 
-# have no effect if this option is set to NO (the default)
-
-HAVE_DOT               = YES
-
-# By default doxygen will write a font called FreeSans.ttf to the output 
-# directory and reference it in all dot files that doxygen generates. This 
-# font does not include all possible unicode characters however, so when you need 
-# these (or just want a differently looking font) you can specify the font name 
-# using DOT_FONTNAME. You need need to make sure dot is able to find the font, 
-# which can be done by putting it in a standard location or by setting the 
-# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory 
-# containing the font.
-
-DOT_FONTNAME           = FreeSans
-
-# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. 
-# The default size is 10pt.
-
-DOT_FONTSIZE           = 10
-
-# By default doxygen will tell dot to use the output directory to look for the 
-# FreeSans.ttf font (which doxygen will put there itself). If you specify a 
-# different font using DOT_FONTNAME you can set the path where dot 
-# can find it using this tag.
-
-DOT_FONTPATH           = 
-
-# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen 
-# will generate a graph for each documented class showing the direct and 
-# indirect inheritance relations. Setting this tag to YES will force the 
-# the CLASS_DIAGRAMS tag to NO.
-
-CLASS_GRAPH            = YES
-
-# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen 
-# will generate a graph for each documented class showing the direct and 
-# indirect implementation dependencies (inheritance, containment, and 
-# class references variables) of the class with other documented classes.
-
-COLLABORATION_GRAPH    = YES
-
-# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen 
-# will generate a graph for groups, showing the direct groups dependencies
-
-GROUP_GRAPHS           = YES
-
-# If the UML_LOOK tag is set to YES doxygen will generate inheritance and 
-# collaboration diagrams in a style similar to the OMG's Unified Modeling 
-# Language.
-
-UML_LOOK               = NO
-
-# If set to YES, the inheritance and collaboration graphs will show the 
-# relations between templates and their instances.
-
-TEMPLATE_RELATIONS     = NO
-
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT 
-# tags are set to YES then doxygen will generate a graph for each documented 
-# file showing the direct and indirect include dependencies of the file with 
-# other documented files.
-
-INCLUDE_GRAPH          = YES
-
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and 
-# HAVE_DOT tags are set to YES then doxygen will generate a graph for each 
-# documented header file showing the documented files that directly or 
-# indirectly include this file.
-
-INCLUDED_BY_GRAPH      = YES
-
-# If the CALL_GRAPH and HAVE_DOT options are set to YES then 
-# doxygen will generate a call dependency graph for every global function 
-# or class method. Note that enabling this option will significantly increase 
-# the time of a run. So in most cases it will be better to enable call graphs 
-# for selected functions only using the \callgraph command.
-
-CALL_GRAPH             = YES
-
-# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then 
-# doxygen will generate a caller dependency graph for every global function 
-# or class method. Note that enabling this option will significantly increase 
-# the time of a run. So in most cases it will be better to enable caller 
-# graphs for selected functions only using the \callergraph command.
-
-CALLER_GRAPH           = YES
-
-# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen 
-# will graphical hierarchy of all classes instead of a textual one.
-
-GRAPHICAL_HIERARCHY    = YES
-
-# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES 
-# then doxygen will show the dependencies a directory has on other directories 
-# in a graphical way. The dependency relations are determined by the #include 
-# relations between the files in the directories.
-
-DIRECTORY_GRAPH        = YES
-
-# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images 
-# generated by dot. Possible values are png, jpg, or gif 
-# If left blank png will be used.
-
-DOT_IMAGE_FORMAT       = png
-
-# The tag DOT_PATH can be used to specify the path where the dot tool can be 
-# found. If left blank, it is assumed the dot tool can be found in the path.
-
-DOT_PATH               = 
-
-# The DOTFILE_DIRS tag can be used to specify one or more directories that 
-# contain dot files that are included in the documentation (see the 
-# \dotfile command).
-
-DOTFILE_DIRS           = 
-
-# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of 
-# nodes that will be shown in the graph. If the number of nodes in a graph 
-# becomes larger than this value, doxygen will truncate the graph, which is 
-# visualized by representing a node as a red box. Note that doxygen if the 
-# number of direct children of the root node in a graph is already larger than 
-# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note 
-# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
-
-DOT_GRAPH_MAX_NODES    = 50
-
-# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the 
-# graphs generated by dot. A depth value of 3 means that only nodes reachable 
-# from the root by following a path via at most 3 edges will be shown. Nodes 
-# that lay further from the root node will be omitted. Note that setting this 
-# option to 1 or 2 may greatly reduce the computation time needed for large 
-# code bases. Also note that the size of a graph can be further restricted by 
-# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
-
-MAX_DOT_GRAPH_DEPTH    = 1000
-
-# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent 
-# background. This is disabled by default, because dot on Windows does not 
-# seem to support this out of the box. Warning: Depending on the platform used, 
-# enabling this option may lead to badly anti-aliased labels on the edges of 
-# a graph (i.e. they become hard to read).
-
-DOT_TRANSPARENT        = NO
-
-# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output 
-# files in one run (i.e. multiple -o and -T options on the command line). This 
-# makes dot run faster, but since only newer versions of dot (>1.8.10) 
-# support this, this feature is disabled by default.
-
-DOT_MULTI_TARGETS      = NO
-
-# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will 
-# generate a legend page explaining the meaning of the various boxes and 
-# arrows in the dot generated graphs.
-
-GENERATE_LEGEND        = YES
-
-# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will 
-# remove the intermediate dot files that are used to generate 
-# the various graphs.
-
-DOT_CLEANUP            = YES

BIN
doc/glm-manual.doc


BIN
doc/glm-manual.pdf


BIN
doc/goodies/logo1024x0640.png


BIN
doc/goodies/logo1280x0800.png


BIN
doc/goodies/logo1600x1000.png


BIN
doc/goodies/logo1920x1200.png


BIN
doc/goodies/logo2560x1600.png


BIN
doc/goodies/tenby-five.otf


BIN
doc/image/0029-mini.jpg


BIN
doc/image/0029.jpg


BIN
doc/image/font-mini.png


BIN
doc/image/font.png


BIN
doc/image/logo-mini.png


BIN
doc/image/logo.png


+ 0 - 248
doc/readme.txt

@@ -1,248 +0,0 @@
-=============================
-GLM 0.9.A.1 final: 2010-02-09
------------------------------
-- Removed deprecated features
-- Internal redesign
-
-=============================
-GLM 0.8.4.4 final: 2010-01-25
------------------------------
-- Fixed warnings
-
-=============================
-GLM 0.8.4.3 final: 2009-11-16
------------------------------
-- Fixed Half float arithmetic
-- Fixed setup defines
-
-=============================
-GLM 0.8.4.2 final: 2009-10-19
------------------------------
-- Fixed Half float adds
-
-=============================
-GLM 0.8.4.1 final: 2009-10-05
------------------------------
-- Updated documentation
-- Fixed MacOS X build
-
-=============================
-GLM 0.8.4.0 final: 2009-09-16
------------------------------
-- Added GCC 4.4 and VC2010 support
-- Added matrix optimizations
-
-=============================
-GLM 0.8.3.5 final: 2009-08-11
------------------------------
-- Fixed bugs
-
-=============================
-GLM 0.8.3.4 final: 2009-08-10
------------------------------
-- Updated GLM according GLSL 1.5 spec
-- Fixed bugs
-
-=============================
-GLM 0.8.3.3 final: 2009-06-25
------------------------------
-- Fixed bugs
-
-=============================
-GLM 0.8.3.2 final: 2009-06-04
------------------------------
-- Added GLM_GTC_quaternion
-- Added GLM_GTC_type_precision
-
-=============================
-GLM 0.8.3.1 final: 2009-05-21
------------------------------
-- Fixed old extension system.
-
-=============================
-GLM 0.8.3.0 final: 2009-05-06
------------------------------
-- Added stable extensions.
-- Added new extension system.
-
-=============================
-GLM 0.8.2.3 final: 2009-04-01
------------------------------
-- Fixed bugs.
-
-=============================
-GLM 0.8.2.2 final: 2009-02-24
------------------------------
-- Fixed bugs.
-
-=============================
-GLM 0.8.2.1 final: 2009-02-13
------------------------------
-- Fixed bugs.
-
-=============================
-GLM 0.8.2 final: 2009-01-21
------------------------------
-- Fixed bugs.
-
-=============================
-GLM 0.8.1 final: 2008-10-30
------------------------------
-- Fixed bugs.
-
-=============================
-GLM 0.8.0 final: 2008-10-23
------------------------------
-- New method to use extension.
-
-=============================
-GLM 0.8.0 beta3: 2008-10-10
------------------------------
-- Added CMake support for GLM tests.
-
-=============================
-GLM 0.8.0 beta2: 2008-10-04
------------------------------
-- Improved half scalars and vectors support.
-
-=============================
-GLM 0.8.0 beta1: 2008-09-26
------------------------------
-- Improved GLSL conformance
-- Added GLSL 1.30 support
-- Improved API documentation
-
-=============================
-GLM 0.7.6 final: 2008-08-08
----------------------------
-- Improved C++ standard comformance
-- Added Static assert for types checking
-
-===========================
-GLM 0.7.5 final: 2008-07-05
----------------------------
-- Added build message system with Visual Studio
-- Pedantic build with GCC
-
-===========================
-GLM 0.7.4 final: 2008-06-01
----------------------------
-- Added external dependencies system.
-
-===========================
-GLM 0.7.3 final: 2008-05-24
----------------------------
-- Fixed bugs
-- Added new extension group
-
-===========================
-GLM 0.7.2 final: 2008-04-27
----------------------------
-- Updated documentation
-- Added preprocessor options
-
-===========================
-GLM 0.7.1 final: 2008-03-24
----------------------------
-- Disabled half on GCC
-- Fixed extensions
-
-===========================
-GLM 0.7.0 final: 2008-03-22
----------------------------
-- Changed to MIT license
-- Added new documentation
-
-===========================
-GLM 0.6.4 : 2007-12-10
----------------------------
-- Fixed swizzle operators
-
-===========================
-GLM 0.6.3 : 2007-11-05
----------------------------
-- Fixed type data accesses
-- Fixed 3DSMax sdk conflict
-
-===========================
-GLM 0.6.2 : 2007-10-08
----------------------------
-- Fixed extension
-
-===========================
-GLM 0.6.1 : 2007-10-07
----------------------------
-- Fixed a namespace error
-- Added extensions
-
-===========================
-GLM 0.6.0 : 2007-09-16
----------------------------
-- Added new extension namespace mecanium
-- Added Automatic compiler detection
-
-===========================
-GLM 0.5.1 : 2007-02-19
----------------------------
-- Fixed swizzle operators
-
-===========================
-GLM 0.5.0 : 2007-01-06
----------------------------
-- Upgrated to GLSL 1.2
-- Added swizzle operators
-- Added setup settings
-
-===========================
-GLM 0.4.1 : 2006-05-22
----------------------------
-- Added OpenGL examples
-
-===========================
-GLM 0.4.0 : 2006-05-17
----------------------------
-- Added missing operators to vec* and mat*
-- Added first GLSL 1.2 features
-- Fixed windows.h before glm.h when windows.h required
-
-===========================
-GLM 0.3.2 : 2006-04-21
----------------------------
-- Fixed texcoord components access.
-- Fixed mat4 and imat4 division operators.
-
-===========================
-GLM 0.3.1 : 2006-03-28
----------------------------
-- Added GCC 4.0 support under MacOS X.
-- Added GCC 4.0 and 4.1 support under Linux.
-- Added code optimisations.
-
-===========================
-GLM 0.3 : 2006-02-19
----------------------------
-- Improved GLSL type conversion and construction compliance.
-- Added experimental extensions.
-- Added Doxygen Documentation.
-- Added code optimisations.
-- Fixed bugs.
-
-===========================
-GLM 0.2: 2005-05-05
----------------------------
-- Improve adaptative from GLSL.
-- Add experimental extensions based on OpenGL extension process.
-- Fixe bugs.
-
-===========================
-GLM 0.1: 2005-02-21
----------------------------
-- Add vec2, vec3, vec4 GLSL types
-- Add ivec2, ivec3, ivec4 GLSL types
-- Add bvec2, bvec3, bvec4 GLSL types
-- Add mat2, mat3, mat4 GLSL types
-- Add almost all functions
-
-===========================
-Christophe [Groove] Riccio, glm|AT|g-truc|DOT|net
-

+ 0 - 68
doc/src/about.xsl

@@ -1,68 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-  <xsl:output method="html" media-type="text/html; charset=ISO-8859-1" />
-
-  <xsl:include href="./util.xsl" />
-
-  <xsl:template match="/">
-    <html>
-      <head>
-        <title>OpenGL Mathematics : About</title>
-        <meta http-equiv="Content-Language" content="en" />
-        <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=iso-8859-1" />
-        <meta name="copyright" content="G-Truc Creation" />
-        <link href="./common/style.css" rel="stylesheet" media="screen, print, embossed" type="text/css" />
-      </head>
-      <body>
-        <table>
-          <tr>
-            <td class="menu">
-              <xsl:apply-templates select="./glm/menu" />
-            </td>
-            <td class="page">
-              <div class="title1">
-                <img src="./common/title.png" alt="OpenGL Mathematics" />
-              </div>
-              <xsl:apply-templates select="./glm/about-short" />
-              <br />
-              <xsl:apply-templates select="./glm/about-long" />
-
-              <div class="email">
-                <img src="./common/email.png" alt="email not available as text" />
-              </div>
-              <div class="news-separator">_________________</div>
-              <br />
-              <div class="title3">
-                <xsl:value-of select="./glm/@copyright" />
-                <a href="http://www.g-truc.net">G-Truc Creation</a>
-              </div>
-            </td>
-          </tr>
-        </table>
-      </body>
-    </html>
-  </xsl:template>
-
-  <xsl:template match="about-long">
-    <div>
-      <div class="title-date">
-        <xsl:value-of select="./@date" />
-      </div>
-      <div class="title4">
-        <xsl:value-of select="./@title" />
-      </div>
-      <div>
-        <xsl:if test="./paragraph">
-          <xsl:apply-templates select="./paragraph" />
-        </xsl:if>
-        <xsl:if test="./list">
-          <xsl:apply-templates select="./list" />
-        </xsl:if>
-        <xsl:apply-templates select="./source" />
-      </div>
-      <div class="news-separator">_________________</div>
-      <br />
-    </div>
-  </xsl:template>
-
-</xsl:stylesheet>

+ 0 - 116
doc/src/bug.xsl

@@ -1,116 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-  <xsl:output method="html" media-type="text/html; charset=ISO-8859-1" />
-
-  <xsl:include href="./util.xsl" />
-
-  <xsl:template match="/">
-    <html>
-      <head>
-        <title>OpenGL Mathematics : Bugs</title>
-        <meta http-equiv="Content-Language" content="en" />
-        <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=iso-8859-1" />
-        <meta name="copyright" content="&#65533; 2005 C-Truc Creation" />
-        <link href="./common/style.css" rel="stylesheet" media="screen, print, embossed" type="text/css" />
-      </head>
-      <body>
-        <div class="title1">
-          <img src="./common/title.png" alt="OpenGL Mathematics" />
-        </div>
-        <table>
-          <tr>
-            <td class="menu">
-              <div class="menu1">
-                <a class="menu" href="./glm/downloads/section/download/@link">
-                  Download <xsl:value-of select="./glm/downloads/section/download/@name" />
-                </a>
-              </div>
-              <hr />
-              <div class="menu2">
-                <a class="menu" href="./index.html">News</a>
-              </div>
-              <div class="menu2">
-                <a class="menu" href="./download.html">Downloads</a>
-              </div>
-              <div class="menu2">
-                <a class="menu" href="./changelog.html">Changelog</a>
-              </div>
-              <div class="menu2">
-                <a class="menu" href="./html/index.html">Documentation</a>
-              </div>
-              <div class="menu2">
-                <a class="menu" href="http://glf.svn.sourceforge.net/viewvc/glf">SVN Browse</a>
-              </div>
-              <div class="menu2">
-                <a class="menu" href="https://sourceforge.net/tracker/?group_id=129808&amp;atid=901445">Bug tracker</a>
-              </div>
-              <div class="menu2">
-                <a class="menu" href="https://sourceforge.net/tracker/?group_id=129808&amp;atid=715891">Feature requests</a>
-              </div>
-              <div class="menu2">
-                <a class="menu" href="./link.html">Links</a>
-              </div>
-              <hr />
-              <div class="menu2">
-                <a href="http://validator.w3.org/check/referer">
-                  <img class="menu-img" src="http://www.w3.org/Icons/valid-xhtml11" alt="Valid XHTML 1.1!" />
-                </a>
-              </div>
-              <div class="menu2">
-                <a href="http://www.opengl.org">
-                  <img class="menu-img" src="./common/opengl.jpg" alt="OpenGL"/>
-                </a>
-              </div>
-              <div class="menu2">
-                <a href="http://www.sourceforge.net">
-                  <img class="menu-img" src="./common/sourceforge.gif" alt="SourceForge"/>
-                </a>
-              </div>
-              <div class="menu2">
-                <a href="http://www.g-truc.net">
-                  <img class="menu-img" src="./common/g-truc.jpg" alt="G-Truc"/>
-                </a>
-              </div>
-              <hr />
-            </td>
-            <td class="page">
-              <xsl:apply-templates select="./glm/bugs" />
-            </td>
-          </tr>
-        </table>
-        <xsl:value-of select="./glm/@copyright" />
-        <a href="http://www.g-truc.net">G-Truc Creation</a>
-        </div>
-      </body>
-    </html>
-  </xsl:template>
-
-  <xsl:template match="bugs">
-    <div>
-      <div class="title2">Bugs</div>
-      <br />
-      <xsl:apply-templates select="./bug" />
-    </div>
-  </xsl:template>
-
-  <xsl:template match="bug">
-    <div class="issue-title">
-      <xsl:value-of select="./@number"/>) <xsl:value-of select="./@title"/><br />
-    </div>
-    <div>
-      <xsl:apply-templates select="./entry" />
-      <br />
-      <div class="issue-content">
-        STATUE : <xsl:value-of select="./@statue"/>, <xsl:value-of select="./@date"/>
-      </div>
-    </div>
-    <br />
-  </xsl:template>
-
-  <xsl:template match="entry">
-    <div class="issue-content">
-      <xsl:value-of select="./@title"/>: <xsl:value-of select="."/>
-    </div>
-  </xsl:template>
-
-</xsl:stylesheet>

+ 0 - 55
doc/src/changelog.xsl

@@ -1,55 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-  <xsl:output method="html" media-type="text/html; charset=ISO-8859-1" />
-
-  <xsl:include href="./util.xsl" />
-
-  <xsl:template match="/">
-    <html>
-      <head>
-        <title>OpenGL Mathematics : Changelog</title>
-        <meta http-equiv="Content-Language" content="en" />
-        <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=iso-8859-1" />
-        <meta name="copyright" content="G-Truc Creation" />
-        <link href="./common/style.css" rel="stylesheet" media="screen, print, embossed" type="text/css" />
-      </head>
-      <body>
-        <table>
-          <tr>
-            <td class="menu">
-              <xsl:apply-templates select="./glm/menu" />
-            </td>
-            <td class="page">
-              <div class="title1">
-                <img src="./common/title.png" alt="OpenGL Mathematics" />
-              </div>
-              <xsl:apply-templates select="./glm/about-short" />
-              <br />
-              <xsl:apply-templates select="./glm/changelog/update" />
-              <div class="title3">
-                <xsl:value-of select="./glm/@copyright" />
-                <a href="http://www.g-truc.net">G-Truc Creation</a>
-              </div>
-            </td>
-          </tr>
-        </table>
-      </body>
-    </html>
-  </xsl:template>
-
-  <xsl:template match="update">
-    <div class="title4">
-      <xsl:value-of select="./@date"/>: <br />
-    </div>
-    <xsl:apply-templates select="./entry" />
-    <div class="news-separator">_________________</div>
-    <br />
-  </xsl:template>
-
-  <xsl:template match="entry">
-    <div class="issue-content">
-      - <xsl:value-of select="."/><br />
-    </div>
-  </xsl:template>
-
-</xsl:stylesheet>

+ 0 - 111
doc/src/code.xsl

@@ -1,111 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-  <xsl:output method="html" media-type="text/html; charset=ISO-8859-1" />
-
-  <xsl:include href="./util.xsl" />
-
-  <xsl:template match="/">
-	  <html>
-	  <head>
-		  <title>OpenGL Mathematics: Code</title>
-		  <meta http-equiv="Content-Language" content="en" />
-		  <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=iso-8859-1" />
-		  <meta name="copyright" content="G-Truc Creation" />
-		  <link href="./common/style.css" rel="stylesheet" media="screen, print, embossed" type="text/css" />
-	  </head>
-	  <body>
-      <table>
-        <tr>
-          <td class="menu">
-            <xsl:apply-templates select="./glm/menu" />
-          </td>
-          <td class="page">
-            <!--div class="title1">OpenGL Mathematics</div-->
-            <div class="title1"><img src="./common/title.png" alt="OpenGL Mathematics" /></div>
-            <xsl:apply-templates select="./glm/about-short" />
-            <br />
-            <xsl:apply-templates select="./glm/codes/code" />
-            <div class="title3">
-              <xsl:value-of select="./glm/@copyright" /> <a href="http://www.g-truc.net">G-Truc Creation</a>
-            </div>
-          </td>
-        </tr>
-      </table>
-    </body>
-    </html>
-  </xsl:template>
-
-  <xsl:template match="code">
-    <div>
-      <div class="title4">
-        <xsl:value-of select="./@date" /> | <xsl:value-of select="./@title" />
-      </div>
-      <div>
-        <xsl:apply-templates />
-      </div>
-      <div class="news-separator">_________________</div>
-      <br />
-    </div>
-  </xsl:template>
-  
-<!--
-  <xsl:template match="code">
-    <div>
-      <xsl:apply-templates select="./include" />
-      <br />
-      <xsl:apply-templates select="./function" />
-    </div>
-  </xsl:template>
-
-  <xsl:template match="comment">
-    <div class="comment"><xsl:apply-templates select="." /></div>
-  </xsl:template>
-
-  <xsl:template match="include">
-    <div class="include">
-      <xsl:if test="contains(./@type, 'system')">
-        #include <![CDATA[<]]><xsl:value-of select="./@file" /><![CDATA[>]]>
-      </xsl:if>
-      <xsl:if test="contains(./@type, 'local')">
-        #include <![CDATA["]]><xsl:value-of select="./@file" /><![CDATA["]]>
-      </xsl:if>
-    </div>
-  </xsl:template>
-  
-  <xsl:template match="function">
-    <div>
-      <xsl:value-of select="./@return" /><xsl:text> </xsl:text>
-      <xsl:value-of select="./@name" />(<xsl:apply-templates select="./parameters" />)
-    </div>
-    <xsl:apply-templates select="./content" />
-    <br />
-  </xsl:template>
-
-  <xsl:template match="content">
-    <xsl:apply-templates select="./block" />
-  </xsl:template>
-  
-  <xsl:template match="parameter">
-    <xsl:value-of select="./@type" /> <xsl:value-of select="./@name" />
-    <xsl:text> </xsl:text>
-  </xsl:template>
-
-  <xsl:template match="block">
-    {
-      <div class="block">
-        <xsl:apply-templates />
-      </div>
-      }
-    </xsl:template>
-
-  <xsl:template match="line">
-    <div>
-      <xsl:apply-templates />
-    </div>
-  </xsl:template>
-
-  <xsl:template match="key">
-    <spam class="key"><xsl:apply-templates select="." /></spam>
-  </xsl:template>
--->
-</xsl:stylesheet>

+ 0 - 2302
doc/src/data.xml

@@ -1,2302 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<glm copyright="Copyright © 2005 - 2010 ">
-	<downloads>
-    <section name="GLM - zip files">
-	  <download name="GLM 0.9.A.2" date="20/02/2010" size="1.3 KB" link="https://sourceforge.net/projects/glf/files/glm/glm-0.9.A.2/glm-0.9.A.2.zip/download"/>
-      <download name="GLM 0.9.A.1" date="09/02/2010" size="952 KB" link="https://sourceforge.net/projects/glf/files/glm/glm-0.9.A.1/glm-0.9.A.1.zip/download"/>
-      <download name="GLM 0.8.4.4" date="25/01/2010" size="1.1 MB" link="https://sourceforge.net/projects/glf/files/glm/glm-0.8.4.4/glm-0.8.4.4.zip/download"/>
-      <download name="GLM 0.8.4.3" date="14/11/2009" size="1.1 MB" link="https://sourceforge.net/projects/glf/files/glm/glm-0.8.4.3/glm-0.8.4.3.zip/download"/>
-      <download name="GLM 0.8.4.2" date="19/10/2009" size="1.1 MB" link="https://sourceforge.net/projects/glf/files/glm/glm-0.8.4.2/glm-0.8.4.2.zip/download"/>
-      <download name="GLM 0.8.4.1" date="03/10/2009" size="1.1 MB" link="https://sourceforge.net/projects/glf/files/glm/glm-0.8.4.1/glm-0.8.4.1.zip/download"/>
-      <download name="GLM 0.8.4.0" date="16/09/2009" size="1.1 MB" link="https://sourceforge.net/projects/glf/files/glm/glm-0.8.4.0/glm-0.8.4.0.zip/download"/>
-      <download name="GLM 0.8.3.5" date="11/08/2009" size="971 KB" link="https://sourceforge.net/projects/glf/files/glm/glm-0.8.3.5/glm-0.8.3.5.zip/download"/>
-      <download name="GLM 0.8.3.4" date="10/08/2009" size="971 KB" link="https://sourceforge.net/projects/glf/files/glm/glm-0.8.3.4/glm-0.8.3.4.zip/download"/>
-      <download name="GLM 0.8.3.3" date="25/06/2009" size="971 KB" link="https://sourceforge.net/projects/glf/files/glm/glm-0.8.3.3/glm-0.8.3.3.zip/download"/>
-      <download name="GLM 0.8.3.2" date="04/06/2009" size="971 KB" link="https://sourceforge.net/projects/glf/files/glm/glm-0.8.3.2/glm-0.8.3.2.zip/download"/>
-      <download name="GLM 0.8.3.1" date="21/05/2009" size="945 KB" link="https://sourceforge.net/projects/glf/files/glm/glm-0.8.3.1/glm-0.8.3.1.zip/download"/>
-      <download name="GLM 0.8.3.0" date="06/05/2009" size="896 KB" link="https://sourceforge.net/projects/glf/files/glm/glm-0.8.3.0/glm-0.8.3.0.zip/download"/>
-      <download name="GLM 0.8.2.3" date="01/04/2009" size="961 KB" link="https://sourceforge.net/projects/glf/files/glm/glm-0.8.2.3/glm-0.8.2.3.zip/download"/>
-      <download name="GLM 0.8.2.2" date="24/02/2009" size="961 KB" link="https://sourceforge.net/projects/glf/files/glm/glm-0.8.2.2/glm-0.8.2.2.zip/download"/>
-      <download name="GLM 0.8.2.1" date="13/02/2009" size="963 KB" link="https://sourceforge.net/projects/glf/files/glm/glm-0.8.2.1/glm-0.8.2.1.zip/download"/>
-      <download name="GLM 0.8.2.0" date="21/01/2009" size="963 KB" link="https://sourceforge.net/projects/glf/files/glm/glm-0.8.2.0/glm-0.8.2.0.zip/download"/>
-      <download name="GLM 0.8.1.0" date="30/10/2008" size="938 KB" link="https://sourceforge.net/projects/glf/files/glm/glm-0.8.1.0/glm-0.8.1.0.zip/download"/>
-      <download name="GLM 0.8.0.0" date="23/10/2008" size="936 KB" link="https://sourceforge.net/projects/glf/files/glm/glm-0.8.0.0/glm-0.8.0.0.zip/download"/>
-      <download name="GLM 0.7.6.0" date="08/08/2008" size="907 KB" link="https://sourceforge.net/projects/glf/files/glm/glm-0.7.6.0/glm-0.7.6.0.zip/download"/>
-      <download name="GLM 0.7.5.0" date="05/07/2008" size="852 KB" link="https://sourceforge.net/projects/glf/files/glm/glm-0.7.5.0/glm-0.7.5.0.zip/download"/>
-      <download name="GLM 0.7.4.0" date="06/01/2008" size="859 KB" link="https://sourceforge.net/projects/glf/files/glm/glm-0.7.4.0/glm-0.7.4.0.zip/download"/>
-      <download name="GLM 0.7.3.0" date="05/24/2008" size="1.8 MB" link="https://sourceforge.net/projects/glf/files/glm/glm-0.7.3.0/glm-0.7.3.0.zip/download"/>
-      <download name="GLM 0.7.2.0" date="04/27/2008" size="1.8 MB" link="https://sourceforge.net/projects/glf/files/glm/glm-0.7.2.0/glm-0.7.2.0.zip/download"/>
-      <download name="GLM 0.7.1.0" date="03/24/2008" size="1.8 MB" link="https://sourceforge.net/projects/glf/files/glm/glm-0.7.1.0/glm-0.7.1.0.zip/download"/>
-      <download name="GLM 0.7.0.0" date="03/22/2008" size="1.8 MB" link="https://sourceforge.net/projects/glf/files/glm/glm-0.7.0.0/glm-0.7.0.0.zip/download"/>
-      <download name="GLM 0.6.4.0" date="12/10/2007" size="1.8 MB" link="https://sourceforge.net/projects/glf/files/glm/glm-0.6.4.0/glm-0.6.4.0.zip/download"/>
-      <download name="GLM 0.6.3.0" date="11/05/2007" size="1.8 MB" link="https://sourceforge.net/projects/glf/files/glm/glm-0.6.3.0/glm-0.6.3.0.zip/download"/>
-      <download name="GLM 0.6.2.0" date="10/08/2007" size="1.8 MB" link="https://sourceforge.net/projects/glf/files/glm/glm-0.6.2.0/glm-0.6.2.0.zip/download"/>
-      <download name="GLM 0.6.1.0" date="10/07/2007" size="1.8 MB" link="https://sourceforge.net/projects/glf/files/glm/glm-0.6.1.0/glm-0.6.1.0.zip/download"/>
-      <download name="GLM 0.6.0.0" date="09/16/2007" size="1.8 MB" link="https://sourceforge.net/projects/glf/files/glm/glm-0.6.0.0/glm-0.6.0.0.zip/download"/>
-      <download name="GLM 0.5.1.0" date="02/19/2007" size="2.3 MB" link="http://prdownloads.sourceforge.net/glf/glm-0.5.1.zip?download"/>
-      <download name="GLM 0.5.0.0" date="01/06/2007" size="2.4 MB" link="http://prdownloads.sourceforge.net/glf/glm-0.5.0.zip?download"/>
-      <download name="GLM 0.4.1.0" date="05/22/2006" size="1.6 MB" link="http://prdownloads.sourceforge.net/glf/glm-0.4.1.zip?download"/>
-      <download name="GLM 0.4.0.0" date="05/17/2006" size="905 KB" link="http://prdownloads.sourceforge.net/glf/glm-0.4.0.zip?download"/>
-      <download name="GLM 0.3.2.0" date="04/22/2006" size="955 KB" link="http://prdownloads.sourceforge.net/glf/glm-0.3.2.zip?download"/>
-      <download name="GLM 0.3.1.0" date="03/28/2006" size="963 KB" link="http://prdownloads.sourceforge.net/glf/glm-0.3.1.zip?download"/>
-      <download name="GLM 0.3.0.0" date="02/19/2006" size="945 KB" link="http://prdownloads.sourceforge.net/glf/glm-0.3.zip?download"/>
-      <download name="GLM 0.2.0.0" date="05/05/2005" size="194 KB" link="http://prdownloads.sourceforge.net/glf/glm-0.2.zip?download"/>
-      <download name="GLM 0.1.0.0" date="02/21/2005" size="29.2 KB" link="http://prdownloads.sourceforge.net/glf/glm-0.1-ur.zip?download"/>
-    </section>
-    <section name="GLM - 7z files">
-		<download name="GLM 0.9.A.2" date="20/02/2010" size="726 KB" link="https://sourceforge.net/projects/glf/files/glm/glm-0.9.A.2/glm-0.9.A.2.7z/download"/>
-		<download name="GLM 0.9.A.1" date="09/02/2010" size="391 KB" link="https://sourceforge.net/projects/glf/files/glm/glm-0.9.A.1/glm-0.9.A.1.7z/download"/>
-      <download name="GLM 0.8.4.4" date="25/01/2010" size="479 KB" link="https://sourceforge.net/projects/glf/files/glm/glm-0.8.4.4/glm-0.8.4.4.7z/download"/>
-      <download name="GLM 0.8.4.3" date="14/11/2009" size="443 KB" link="https://sourceforge.net/projects/glf/files/glm/glm-0.8.4.3/glm-0.8.4.3.7z/download"/>
-      <download name="GLM 0.8.4.2" date="19/10/2009" size="443 KB" link="https://sourceforge.net/projects/glf/files/glm/glm-0.8.4.2/glm-0.8.4.2.7z/download"/>
-      <download name="GLM 0.8.4.1" date="03/10/2009" size="443 KB" link="https://sourceforge.net/projects/glf/files/glm/glm-0.8.4.1/glm-0.8.4.1.7z/download"/>
-      <download name="GLM 0.8.4.0" date="16/09/2009" size="439 KB" link="https://sourceforge.net/projects/glf/files/glm/glm-0.8.4.0/glm-0.8.4.0.7z/download"/>
-      <download name="GLM 0.8.3.5" date="11/08/2009" size="405 KB" link="https://sourceforge.net/projects/glf/files/glm/glm-0.8.3.5/glm-0.8.3.5.7z/download"/>
-      <download name="GLM 0.8.3.4" date="10/08/2009" size="405 KB" link="https://sourceforge.net/projects/glf/files/glm/glm-0.8.3.4/glm-0.8.3.4.7z/download"/>
-      <download name="GLM 0.8.3.3" date="25/06/2009" size="405 KB" link="https://sourceforge.net/projects/glf/files/glm/glm-0.8.3.3/glm-0.8.3.3.7z/download"/>
-      <download name="GLM 0.8.3.2" date="04/06/2009" size="405 KB" link="https://sourceforge.net/projects/glf/files/glm/glm-0.8.3.2/glm-0.8.3.2.7z/download"/>
-      <download name="GLM 0.8.3.1" date="21/05/2009" size="399 KB" link="https://sourceforge.net/projects/glf/files/glm/glm-0.8.3.1/glm-0.8.3.1.7z/download"/>
-      <download name="GLM 0.8.3.0" date="06/05/2009" size="359 KB" link="https://sourceforge.net/projects/glf/files/glm/glm-0.8.3.0/glm-0.8.3.0.7z/download"/>
-      <download name="GLM 0.8.2.3" date="01/04/2009" size="378 KB" link="https://sourceforge.net/projects/glf/files/glm/glm-0.8.2.3/glm-0.8.2.3.7z/download"/>
-      <download name="GLM 0.8.2.2" date="24/02/2009" size="378 KB" link="https://sourceforge.net/projects/glf/files/glm/glm-0.8.2.2/glm-0.8.2.2.7z/download"/>
-      <download name="GLM 0.8.2.1" date="13/02/2009" size="381 KB" link="https://sourceforge.net/projects/glf/files/glm/glm-0.8.2.1/glm-0.8.2.1.7z/download"/>
-      <download name="GLM 0.8.2.0" date="21/01/2009" size="381 KB" link="http://prdownloads.sourceforge.net/glf/glm-0.8.2.7z?download"/>
-      <download name="GLM 0.8.1.0" date="30/10/2008" size="372 KB" link="http://prdownloads.sourceforge.net/glf/glm-0.8.1.7z?download"/>
-      <download name="GLM 0.8.0.0" date="23/10/2008" size="370 KB" link="http://prdownloads.sourceforge.net/glf/glm-0.8.0.7z?download"/>
-      <download name="GLM 0.7.6.0" date="08/08/2008" size="387 KB" link="http://prdownloads.sourceforge.net/glf/glm-0.7.6.7z?download"/>
-			<download name="GLM 0.7.5.0" date="05/07/2008" size="366 KB" link="http://prdownloads.sourceforge.net/glf/glm-0.7.5.7z?download"/>
-			<download name="GLM 0.7.4.0" date="06/01/2008" size="372 KB" link="http://prdownloads.sourceforge.net/glf/glm-0.7.4.7z?download"/>
-			<download name="GLM 0.7.3.0" date="05/24/2008" size="657 KB" link="http://prdownloads.sourceforge.net/glf/glm-0.7.3.7z?download"/>
-			<download name="GLM 0.7.2.0" date="04/27/2008" size="646 KB" link="http://prdownloads.sourceforge.net/glf/glm-0.7.2.7z?download"/>
-			<download name="GLM 0.7.1.0" date="03/24/2008" size="635 KB" link="http://prdownloads.sourceforge.net/glf/glm-0.7.1.7z?download"/>
-			<download name="GLM 0.7.0.0" date="03/22/2008" size="635 KB" link="http://prdownloads.sourceforge.net/glf/glm-0.7.0.7z?download"/>
-			<download name="GLM 0.6.4.0" date="12/10/2007" size="612 KB" link="http://prdownloads.sourceforge.net/glf/glm-0.6.4.7z?download"/>
-			<download name="GLM 0.6.3.0" date="11/05/2007" size="633 KB" link="http://prdownloads.sourceforge.net/glf/glm-0.6.3.7z?download"/>
-			<download name="GLM 0.6.2.0" date="10/08/2007" size="645 KB" link="http://prdownloads.sourceforge.net/glf/glm-0.6.2.7z?download"/>
-			<download name="GLM 0.6.1.0" date="10/07/2007" size="645 KB" link="http://prdownloads.sourceforge.net/glf/glm-0.6.1.7z?download"/>
-			<download name="GLM 0.6.0.0" date="09/16/2007" size="646 KB" link="http://prdownloads.sourceforge.net/glf/glm-0.6.0.7z?download"/>
-			<download name="GLM 0.5.1.0" date="02/19/2007" size="807 KB" link="http://prdownloads.sourceforge.net/glf/glm-0.5.1.7z?download"/>
-			<download name="GLM 0.5.0.0" date="01/06/2007" size="862 KB" link="http://prdownloads.sourceforge.net/glf/glm-0.5.0.7z?download"/>
-			<download name="GLM 0.4.1.0" date="05/22/2006" size="533 KB" link="http://prdownloads.sourceforge.net/glf/glm-0.4.1.7z?download"/>
-			<download name="GLM 0.4.0.0" date="05/17/2006" size="262 KB" link="http://prdownloads.sourceforge.net/glf/glm-0.4.0.7z?download"/>
-		</section>
-		<section name="Raytrace">
-			<download name="Raytrace v1.0 (exe)" date="16-09-2007" size="766 KB" link="http://prdownloads.sourceforge.net/glf/raytrace-v1.0.exe?download"/>
-			<download name="Raytrace v1.0 (zip)" date="16-09-2007" size="1.4 MB" link="http://prdownloads.sourceforge.net/glf/raytrace-v1.0.zip?download"/>
-			<download name="Raytrace b3.0 (exe)" date="06-01-2007" size="751 KB" link="http://prdownloads.sourceforge.net/glf/raytrace-b3.0.exe?download"/>
-			<download name="Raytrace b3.0 (zip)" date="06-01-2007" size="1.1 MB" link="http://prdownloads.sourceforge.net/glf/raytrace-b3.0.zip?download"/>
-			<download name="Raytrace b2.0 (exe)" date="19-02-2006" size="1.0 MB" link="http://prdownloads.sourceforge.net/glf/raytrace-b2.0.exe?download"/>
-			<download name="Raytrace b2.0 (zip)" date="19-02-2006" size="1.4 MB" link="http://prdownloads.sourceforge.net/glf/raytrace-b2.0.zip?download"/>
-			<download name="Raytrace b1.0 (zip)" date="05-05-2005" size="1.3 MB" link="http://prdownloads.sourceforge.net/glf/raytrace-b1.0.zip?download"/>
-			<download name="Raytrace b1.0 (7z )" date="05-05-2005" size="808 KB" link="http://prdownloads.sourceforge.net/glf/raytrace-b1.0.7z?download"/>
-		</section>
-    <section name="Humus's Framework">
-      <download name="AmbientApertureLighting (zip)" date="22-10-2008" size="2.38 MB" link="http://prdownloads.sourceforge.net/glf/AmbientApertureLighting.zip?download"/>
-    </section>
-		<section name="Philip Rideout's Catmull-Clark Subdivision">
-			<download name="CatmullClark (zip)" date="24-01-2007" size="605 KB" link="http://prdownloads.sourceforge.net/glf/CatmullClark.zip?download"/>
-		</section>
-	</downloads>
-  <ideas>
-    <idea>Euler angles operation with specified rotation order</idea>
-    <idea>Cast to other toolkit (D3D, some engines)</idea>
-    <idea>Arrays</idea>
-    <idea>SIMD optimisations</idea>
-    <idea>Standard output stream</idea>
-    <idea>In place operations</idea>
-  </ideas>
-  <schedule>
-    <release version="0.8.0">GLSL 1.30, more templated code, better API documentation, use of CMake.</release>
-    <release version="0.8.1">Hint.</release>
-    <release version="0.8.2">First GTC extensions.</release>
-    <release version="0.8.3">More tests.</release>
-    <release version="0.8.4">Arrays.</release>
-    <release version="0.8.5">SIMD optimizations.</release>
-    <release version="0.8.6">In place operations.</release>
-  </schedule>
-  <todo>
-    <entry>bit rotation.</entry>
-    <entry>frexp</entry>
-    <entry>RGBE.</entry>
-    <entry>row matrices.</entry>
-    <entry>Optimize *mat4 inverse.</entry>
-    <entry>fixed numbers</entry>
-    <entry>row and column major matrices</entry>
-  </todo>
-  <changelog>
-    <update date="2010-03-17">
-      <entry>Promoted double types</entry>
-    </update>
-    <update date="2010-01-28">
-      <entry>Removed global inclusion.</entry>
-      <entry>Removed auto cast setup.</entry>
-      <entry>Removed compatibility setup.</entry>
-      <entry>Clean up and simplify setup.hpp</entry>
-      <entry>Fixed website links</entry>
-    </update>
-    <update date="2010-01-26">
-      <entry>Added missing inline.</entry>
-      <entry>Added common vecType for vector based types.</entry>
-      <entry>Updated copyright date.</entry>
-      <entry>Refactoring of type precision</entry>
-      <entry>GLM types are now more generic</entry>
-      <entry>Extract vec1 code</entry>
-      <entry>Reduced namespaces count</entry>
-    </update>
-    <update date="2010-01-25">
-      <entry>GLM 0.8.4.4 released.</entry>
-    </update>
-    <update date="2010-01-20">
-      <entry>Fixed warnings.</entry>
-    </update>
-    <update date="2009-11-25">
-      <entry>Added texcoord wrapping through GLM_IMG_wrap extension.</entry>
-    </update>
-    <update date="2009-11-20">
-      <entry>Reorganized SVN directory.</entry>
-    </update>
-    <update date="2009-11-16">
-      <entry>GLM 0.8.4.3 released.</entry>
-    </update>
-    <update date="2009-11-12">
-      <entry>Fixed half arithmetic.</entry>
-    </update>
-    <update date="2009-11-11">
-      <entry>Added scalars support for GLM_IMG_multiple.</entry>
-    </update>
-    <update date="2009-11-05">
-      <entry>Fixed setup defines.</entry>
-    </update>
-    <update date="2009-10-27">
-      <entry>Added GLM_IMG_multiple extensions and unit tests.</entry>
-    </update>  
-    <update date="2009-10-19">
-      <entry>GLM 0.8.4.2 released.</entry>
-    </update>
-    <update date="2009-10-10">
-      <entry>Fixed half.</entry>
-    </update>
-    <update date="2009-10-05">
-      <entry>GLM 0.8.4.1 released.</entry>
-    </update>
-    <update date="2009-10-02">
-      <entry>Updated documentation.</entry>
-    </update>
-    <update date="2009-09-30">
-      <entry>Updated manual.</entry>
-      <entry>Added static assert implementation.</entry>
-      <entry>Removed unuse GLM_SWIZZLE_FUNC.</entry>
-    </update>
-    <update date="2009-09-23">
-      <entry>Some progress on fixing GLM for MacOSX comflics.</entry>
-    </update>
-    <update date="2009-09-22">
-      <entry>Fixed GLM_GTX_quaternion extension: cross and intermediate.</entry>
-    </update>
-    <update date="2009-09-17">
-      <entry>Fixed quaternion angle.</entry>
-    </update>
-    <update date="2009-09-16">
-      <entry>Updated documentation.</entry>
-      <entry>GLM 0.8.4.0 released.</entry>
-    </update>
-    <update date="2009-09-14">
-      <entry>Added Visual Studio 2010 support.</entry>
-      <entry>Fixed build on GCC.</entry>
-      <entry>Added GCC 4.4 support.</entry>
-    </update>
-    <update date="2009-09-03">
-      <entry>Added no initilization constructor to vec4.</entry>
-    </update>
-    <update date="2009-09-01">
-      <entry>Added no initilization constructor to mat4.</entry>
-      <entry>Updated GLM_GTC_matrix_transform: faster rotate.</entry>
-    </update>
-    <update date="2009-08-29">
-      <entry>Added GLM_GTX_matrix_operation: build diagonal matrix.</entry>
-      <entry>Updated GLM_GTC_matrix_transform: faster scaling.</entry>
-    </update>
-    <update date="2009-08-28">
-      <entry>Fixed transpose function for mat4x3.</entry>
-      <entry>Optimized translate function for mat4 matrix: ~184 cycles instead of ~592 cycles on Q6600.</entry>
-    </update>
-    <update date="2009-08-24">
-      <entry>Fixed OpenGL dependence.</entry>
-      <entry>Added OpenGL 3 dependence.</entry>
-    </update>
-    <update date="2009-08-23">
-      <entry>Fixed parameter definition and definition mismatch.</entry>
-    </update>
-    <update date="2009-08-11">
-      <entry>Fixed GLM_GTC_matrix_projection.</entry>
-      <entry>Updated GLM_GTX_transform: Added missing entry points.</entry>
-      <entry>GLM 0.8.3.5 released.</entry>
-    </update>  
-    <update date="2009-08-10">
-      <entry>Move inverse function to core following GLSL 1.4 specification.</entry>
-      <entry>Move determinant function to core following GLSL 1.5 specification.</entry>
-      <entry>GLM 0.8.3.4 released.</entry>
-    </update>
-    <update date="2009-07-22">
-      <entry>Fixed GLM_GTX_matrix_query extension: Fixed row_size and col_size() calls.</entry>
-      <entry>Fixed GLM_GTX_matrix_access extension: Fixed row_size calls.</entry>
-    </update>
-    <update date="2009-07-03">
-      <entry>Fixed GLM_GTX_string_cast extension: Build on GCC 4.</entry>
-      <entry>Fixed GLM_GTC_quaternion extension: rotate function build.</entry>
-    </update>
-    <update date="2009-06-25">
-      <entry>Fixed GLM_GTC_matrix_transform extension: Fixed matrix operation order; like OpenGL instead of like Direct3D.</entry>
-      <entry>GLM 0.8.3.3 released.</entry>
-    </update>
-    <update date="2009-06-16">
-      <entry>Fixed GLM_GTX_rotate_vector extension: Fixed rotate function.</entry>
-    </update>
-    <update date="2009-06-09">
-      <entry>Fixed matrix external operators.</entry>
-    </update>
-    <update date="2009-06-04">
-      <entry>Added GLM_GTC_type_precision extension.</entry>
-      <entry>GLM 0.8.3.2 released.</entry>
-    </update>
-    <update date="2009-06-02">
-      <entry>Fixed GLM_GTC_matrix_transform: Fixed mat4 inverse function.</entry>
-    </update>
-    <update date="2009-05-22">
-      <entry>Added GLM_GTC_quaternion extension.</entry>
-      <entry>Updated GLM_GTC_quaternion extension.</entry>
-      <entry>Fixed GLM_GTC_matrix_transform extension.</entry>
-    </update>
-    <update date="2009-05-21">
-      <entry>GLM 0.8.3.1 released.</entry>
-    </update>
-    <update date="2009-05-20">
-      <entry>Updated GLM_GTX_bit extension: Added lowestBit functions.</entry>
-      <entry>Fixed old extention inclusion method.</entry>
-    </update>
-    <update date="2009-05-19">
-      <entry>Updated sse mat4 implementation.</entry>
-    </update>
-    <update date="2009-05-18">
-      <entry>Updated GLM_GTX_bit extension: Added bitRevert, bitRotateRight and bitRotateLeft functions.</entry>
-    </update>
-    <update date="2009-05-17">
-      <entry>Added intrinsic like functions for mat4 product and inverse.</entry>
-    </update>
-    <update date="2009-05-15">
-      <entry>Added intrinsic like functions for mat4 and vec4 products.</entry>
-    </update>
-    <update date="2009-05-06">
-      <entry>Fixed GLM_GTX_type_ptr extension.</entry>
-      <entry>GLM 0.8.3.0 released.</entry>
-    </update>
-    <update date="2009-05-06">
-      <entry>Fixed GLM_GTC_matrix_projection: glm::project build.</entry>
-    </update>
-    <update date="2009-05-05">
-      <entry>Added new extensions inclusion system.</entry>
-    </update>
-    <update date="2009-05-01">
-      <entry>Fixed GLM_GTX_determinant extension.</entry>
-      <entry>Reorganized extensions.</entry>
-      <entry>Removed GLM_GTX_vector_comp_mult and GLM_GTX_mat4x3 extensions.</entry>
-      <entry>Renamed .h files to .hpp.</entry>
-    </update>
-    <update date="2009-04-30">
-      <entry>Added GLM_GTC_half_float.</entry>
-    </update>
-    <update date="2009-04-29">
-      <entry>Fixed GLM_GTX_perpendicular extension.</entry>
-      <entry>Fixed GLM_GTX_matrix_projection extension.</entry>
-      <entry>Fixed GLM_GTX_transform2 extension.</entry>
-    </update>
-    <update date="2009-04-27">
-      <entry>Added GLM_GTC_matrix_operation.</entry>
-      <entry>Added GLM_GTC_matrix_transform.</entry>
-      <entry>Added GLM_GTC_matrix_projection.</entry>
-      <entry>Added GLM_GTC_double_float.</entry>
-    </update>
-    <update date="2009-04-20">
-      <entry>Fixed bug 2774738.</entry>
-      <entry>Fixed bug 2774015.</entry>
-    </update>
-    <update date="2009-04-01">
-      <entry>GLM 0.8.2.3 released.</entry>
-    </update>
-    <update date="2009-03-30">
-      <entry>Updaded mix function: Makes it more flexible, types wise.</entry>
-    </update>
-    <update date="2009-03-06">
-      <entry>Fixed GLM_GTX_perpendicular and GLM_GTX_projection.</entry>
-      <entry>Added GLM_GTX_radial_gradient extensions.</entry>
-    </update>
-    <update date="2009-02-24">
-      <entry>Fixed GCC 4.3 pedantic build.</entry>
-      <entry>GLM 0.8.2.2 released.</entry>
-    </update>
-    <update date="2009-02-19">
-      <entry>Removed all deprecated ARB conventions.</entry>
-    </update>
-    <update date="2009-02-18">
-      <entry>Fixed highp_int_t and highp_uint_t with Linux 64.</entry>
-      <entry>Fixed GCC 4.3 'extra ;' with pedentic build.</entry>
-    </update>
-    <update date="2009-02-13">
-      <entry>Fixed build.</entry>
-      <entry>GLM 0.8.2.1 released.</entry>
-    </update>
-    <update date="2009-02-02">
-      <entry>Fixed build.</entry>
-      <entry>Added extensions build test.</entry>
-    </update>
-    <update date="2009-01-21">
-      <entry>GLM 0.8.2 released.</entry>
-    </update>
-    <update date="2009-01-20">
-      <entry>Fixed GLM_GTX_intersect: intersectRayTriangle.</entry>
-    </update>
-    <update date="2009-01-17">
-      <entry>Fixed vectors access operators.</entry>
-      <entry>Fixed unresolved with quaternions.</entry>
-    </update>
-    <update date="2009-01-16">
-      <entry>Fixed GLM_GTX_norm: Include issue.</entry>
-    </update>
-    <update date="2009-01-01">
-      <entry>Fixed left value swizzle operators.</entry>
-    </update>
-    <update date="2008-12-03">
-      <entry>Fixed GLM_GTX intersect extension: intersectRayTriangleGTX with GCC.</entry>
-      <entry>Typo.</entry>
-    </update>
-    <update date="2008-12-02">
-      <entry>Fixed GLM_GTX inverse_transpose extension.</entry>
-    </update>
-    <update date="2008-11-27">
-      <entry>Updated quaternion implementation.</entry>
-    </update>
-    <update date="2008-11-19">
-      <entry>Added GLM_GTX_raw_data extension.</entry>
-    </update>
-    <update date="2008-11-18">
-      <entry>Updated GLM_GTX_bit extension: Added mask function.</entry>
-    </update>
-    <update date="2008-11-14">
-      <entry>Updated GLM_GTX_bit extension: Added extractField function.</entry>
-      <entry>Fixed STATIC_ASSERT with 64bits integers.</entry>
-    </update>
-    <update date="2008-10-30">
-      <entry>GLM 0.8.1 released.</entry>
-    </update>
-    <update date="2008-10-29">
-      <entry>Fixed mix function with boolean parameter.</entry>
-      <entry>Fixed value_size issue.</entry>
-    </update>
-    <update date="2008-10-28">
-      <entry>Fixed GLM_GTX_component_wise extension.</entry>
-      <entry>Added GLM_GTX_color_space_YCoCg extension.</entry>
-    </update>
-    <update date="2008-10-27">
-      <entry>Added GLM_GTX_comparison extension: Defined comparison operators for vectors.</entry>
-    </update>
-    <update date="2008-10-25">
-      <entry>Added GLM_GTX_log_base extension.</entry>
-    </update>
-    <update date="2008-10-24">
-      <entry>Fixed 64 bits integers with GCC.</entry>
-      <entry>Deleted deprecated half number setup options.</entry>
-      <entry>Updated GLM_GTX_number_precision: Clean up and added missing type definitions.</entry>
-      <entry>Updated GLM_GTX_color_cast: Clean up and fixes.</entry>
-    </update>
-    <update date="2008-10-23">
-      <entry>Updated manuel and documentation.</entry>
-      <entry>GLM 0.8.0 final released.</entry>
-    </update>
-    <update date="2008-10-22">
-      <entry>Fixed glm::size_t possible collisions with std::size_t. glm::size_t is now named glm::sizeType.</entry>
-      <entry>Updated GLM_VIRTREV_address extension: Added none const fonctions.</entry>
-      <entry>Updated GLM_GTX_double_float extension: Typo.</entry>
-      <entry>Added new API to use extension.</entry>
-    </update>
-    <update date="2008-10-18">
-      <entry>Added logos in varius resolutions.</entry>
-    </update>
-    <update date="2008-10-17">
-      <entry>Updated website.</entry>
-      <entry>Added website builder.</entry>
-    </update>
-    <update date="2008-10-15">
-      <entry>Updated GLM_GTX_number_precision: No more warning with type size tests.</entry>
-      <entry>Fixed none consistent size_t.</entry>
-    </update>
-    <update date="2008-10-12">
-      <entry>Updated website.</entry>
-    </update>
-    <update date="2008-10-10">
-      <entry>Fixed build.</entry>
-      <entry>Updated manual.</entry>
-      <entry>GLM 0.8.0 beta3 released.</entry>
-    </update>
-    <update date="2008-10-09">
-      <entry>Added GLM_GTX_reciprocal extension: Define sec, csc, cot, asec, acsc, acot, sech, csch, coth, asech, acsch and acoth functions.</entry>
-    </update>
-    <update date="2008-10-08">
-      <entry>Updated GLM_GTX_euler_angles extension: Added functions to build rotation matrices.</entry>
-    </update>
-    <update date="2008-10-07">
-      <entry>Fixed GLM_GTX_color_space: Fixed conflits with swizzle operators.</entry>
-      <entry>Fixed virtrev.h, didn't build.</entry>
-      <entry>Fixed genType build.</entry>
-      <entry>Fixed GLM_GTX_compatibility build.</entry>
-      <entry>Added GLM_VIRTREV_address: Get the address of internal vector or matrix contents.</entry>
-      <entry>Fixed code typo and clean up.</entry>
-    </update>
-    <update date="2008-10-06">
-      <entry>Added genType class. For long term base class for all types though template specialization.</entry>
-      <entry>Updated project directory.</entry>
-      <entry>Added CMakeFile in test directory.</entry>
-      <entry>Fixed code typo and clean up.</entry>
-      <entry>Fixed GLM_GTX_string_cast: Missing some matrix definitions, some wrong behaviours with matrices.</entry>
-    </update>
-    <update date="2008-10-05">
-      <entry>Added glm::sizeType type which is used to defined size of all vectors and matrices. Defined as std::size_t.</entry>
-      <entry>row_size, col_size and is_matrix are now functions.</entry>
-      <entry>Fixed use inline on *mat4 function declaration.</entry>
-      <entry>Deleted auto cast from *mat4x3.</entry>
-      <entry>Fixed missing ++ -- and - operators to some matrix types.</entry>
-      <entry>Fixed typo.</entry>
-    </update>
-    <update date="2008-10-04">
-      <entry>GLM 0.8.0 beta2 released.</entry>
-    </update>
-    <update date="2008-10-03">
-      <entry>value_size and is_vector are now functions.</entry>
-    </update>
-    <update date="2008-10-02">
-      <entry>Added GLM_USE_ANONYMOUS_UNION: To use anonymous union to provide multiple component names access for class valType. Visual C++ only.</entry>
-      <entry>Removed noise function from documentation.</entry>
-    </update>
-    <update date="2008-10-01">
-      <entry>Fixed build with GCC.</entry>
-      <entry>Updated manual.</entry>
-    </update>  
-    <update date="2008-09-30">
-      <entry>Updated GLM_GTX_bit implementation.</entry>
-      <entry>Added GLM_USE_ONLY_XYZW to disable multiple component names.</entry>
-      <entry>Updated GLM_GTX_euler_angles extension: added yawPitchRoll function.</entry>
-    </update>
-    <update date="2008-09-29">
-      <entry>Fixed half vector build.</entry>
-      <entry>Updated GLM_GTX_vector_angle: Added orientedAngleFromRef function.</entry>
-      <entry>Deprecated GLM_GTX_mul extension. Features moved in GLM_GTX_verbose_operator.</entry>
-      <entry>Updated GLM_GTX_verbose_operator: Added mad function.</entry>
-    </update>
-    <update date="2008-09-28">
-      <entry>Fixed missing inline in tvec3 and tvec4 definisions.</entry>
-      <entry>New implementation of hvec3 thought specialisation of tvec3 template.</entry>
-      <entry>New implementation of hvec4 thought specialisation of tvec4 template.</entry>
-      <entry>Fixed tvec4 operators than where applied just on 3 components.</entry>
-    </update>
-    <update date="2008-09-27">
-      <entry>Added build option for build that support anonymous structure.</entry>
-      <entry>Fixed missing inline in tvec2 definision.</entry>
-      <entry>New implementation of hvec2 thought specialisation of tvec2 template.</entry>
-    </update>
-    <update date="2008-09-26">
-      <entry>Updated documentation.</entry>
-      <entry>GLM 0.8.0 beta1 released.</entry>
-    </update>
-    <update date="2008-09-25">
-      <entry>Fixed static asserts within vector and matrix types.</entry>
-      <entry>Updated mix function implementation, support for boolean vectors.</entry>
-    </update>
-    <update date="2008-09-24">
-      <entry>Fixed static asserts.</entry>
-      <entry>Added some asserts.</entry>
-      <entry>Updated matrices operator[].</entry>
-    </update>
-    <update date="2008-09-23">
-      <entry>Added GLM_VIRTREV_equal_operator: Operators that compare vectors.</entry>
-      <entry>Fixed build errors from static asserts.</entry>
-    </update>
-    <update date="2008-09-22">
-      <entry>Fixed build errors with GCC.</entry>
-      <entry>Fixed func_trigonometric.h encoding.</entry>
-    </update>
-    <update date="2008-09-21">
-      <entry>Deleted GLM_GTX_INCLUDED.</entry>
-      <entry>Fixed build errors.</entry>
-      <entry>Fixed GLM_GTX_random: Bad assert definition.</entry>
-    </update>
-    <update date="2008-09-20">
-      <entry>Updated manual.</entry>
-      <entry>Updated swizzle operators with swizzle function.</entry>
-      <entry>Added modf definition.</entry>
-    </update>
-    <update date="2008-09-17">
-      <entry>Added namespaces to sort type and function in the API documentation.</entry>
-      <entry>Deleted some documentations from {__}*GTX types and functions from extensions.</entry>
-      <entry>Updated vectors and matrices documentation.</entry>
-      <entry>Updated scalars and precisions documentation.</entry>
-      <entry>Fixed some vectors and matrices declaration missing in some cases.</entry>
-      <entry>Updated overall documentation.</entry>
-    </update>
-    <update date="2008-09-16">
-      <entry>Included all types in type namespace.</entry>
-    </update>
-    <update date="2008-09-15">
-      <entry>Added type namespace in glm namespace for documentation purpose.</entry>
-    </update>
-    <update date="2008-09-14">
-      <entry>Added modf definition for vec2, vec3 and vec4.</entry>
-      <entry>Updated static assert to exponential, geometric, matrix, noise, trigonometric and vector relational functions.</entry>
-      <entry>Added GLM_GTC_matrix_transformation extensions: API and translate, rotate and scale definisions.</entry>
-      <entry>Deprecated GLM_GTX_gpu_shader4, GLM_GTX_hyperbolic, GLM_GTX_flexible_mix, GLM_GTX_round.</entry>
-      <entry>Added definition of mix with last parameter being booleans.</entry>
-      <entry>Added hint classes.</entry>
-      <entry>Updated GLM_GTX_integer, GLM_GTX_unsigned_int, GLM_GTX_half and GLM_GTX_double_float extensions.</entry>
-    </update>
-    <update date="2008-09-13">
-      <entry>Added trait code (class type) to detect bool, float, int and uint numbers.</entry>
-      <entry>Updated static assert to common functions.</entry>
-    </update>
-    <update date="2008-09-12">
-      <entry>Updated noise function definitions... Still unsure for staying in GLM 0.8.0.</entry>
-    </update>
-    <update date="2008-09-11">
-      <entry>Updated overall documentation, doxygen documentation.</entry>
-    </update>
-    <update date="2008-09-10">
-      <entry>Updated documentation and implementation of all matrix functions.</entry>
-      <entry>Added declaration of main functions for each function group namespace.</entry>
-      <entry>Updated documentation and API of all noise functions... Should be deleted becose of bad implementation?</entry>
-    </update>
-    <update date="2008-09-09">
-      <entry>Updated documentation and implementation of all vector relational functions.</entry>
-      <entry>Added transpose_type typedef to all matrix types.</entry>
-      <entry>Added is_matrix static constantes to all matrix types for static assert usage.</entry>
-      <entry>Added is_vector static constantes to all vector types for static assert usage.</entry>
-    </update>
-    <update date="2008-09-08">
-      <entry>Updated documentation and implementation of all geometric functions.</entry>
-    </update>
-    <update date="2008-09-07">
-      <entry>Updated documentation and implementation of all exponential functions.</entry>
-    </update>
-    <update date="2008-09-06">
-      <entry>Added isinf and isnan GLSL 1.3 functions.</entry>
-      <entry>Updated common functions code, mostly syntax.</entry>
-      <entry>Added trunc, round and roundEven GLSL 1.3 functions.</entry>
-      <entry>Added sinh, cosh, tanh, asinh, acosh and atanh GLSL 1.3 functions.</entry>
-      <entry>Updated documentation and implementation of all trigonometric functions.</entry>
-    </update>
-    <update date="2008-09-05">
-      <entry>Added bool_type implementation detail to vector types.</entry>
-    </update>
-    <update date="2008-09-04">
-      <entry>Added API and documentation of all common functions.</entry>
-    </update>
-    <update date="2008-09-03">
-      <entry>Updated GLM_GTX_extensions: Define operator* as a cross product. Still in WIP...</entry>
-    </update>
-    <update date="2008-09-02">
-      <entry>Updated *vec2 and *vec3 with precision types missed and documentation.</entry>
-    </update>
-    <update date="2008-09-01">
-      <entry>Fixed 2085925 bug: rotateGTX didn't use it quaternion parameter.</entry>
-    </update>
-    <update date="2008-08-31">
-      <entry>Added test files.</entry>
-      <entry>Updated *vec4 with precision types missed and documentation.</entry>
-    </update>
-    <update date="2008-08-30">
-      <entry>Renamed implementation files.</entry>
-      <entry>Updated type pre-declarations.</entry>
-    </update>
-    <update date="2008-08-25">
-      <entry>Fixed GLM_GTX_matrix_projection extension: frustum function gave a wrong result.</entry>
-    </update>
-    <update date="2008-08-24">
-      <entry>Updated matrix types functions and extensions according new vectors types.</entry>
-    </update>
-    <update date="2008-08-23">
-      <entry>Added new vector types implementation.</entry>
-    </update>
-    <update date="2008-08-22">
-      <entry>Added support for new GLSL 1.30 precision model.</entry>
-    </update>
-    <update date="2008-08-19">
-      <entry>Added GLSL 1.30.08 unsigned int types support</entry>
-    </update>
-    <update date="2008-08-17">
-      <entry>Added detail::vec1 type.</entry>
-      <entry>Added detail::desc for types description and higher templatisation.</entry>
-    </update>
-    <update date="2008-08-11">
-      <entry>Started work on GLM 0.8.x based on GLSL 1.3 specification.</entry>
-      <entry>Visual Studio .NET 2003 (7.1) is now deprecated.</entry>
-      <entry>GLM_FORCE_HALF_COMPATIBILITY is now deprecated.</entry>
-      <entry>GLM_AUTO_CAST is now deprecated.</entry>
-    </update>
-    <update date="2008-08-09">
-      <entry>Updated GLM_GTX_fast_square_root implementation: Updated fastInverseSqrt</entry>
-    </update>
-    <update date="2008-08-08">
-      <entry>Updated documentation.</entry>
-      <entry>GLM 0.7.6 released.</entry>
-    </update>
-    <update date="2008-08-06">
-      <entry>gl_svec* (for GLshort) added in GLM_virtrev_gl extension.</entry>
-      <entry>Updated detail implementation of vector types.</entry>
-      <entry>Make Visual C++ build with Visual C++ extensions disabled.</entry>
-      <entry>Rename "not" to "not_" for compatibility.</entry>
-      <entry>Fixed GLM_GTX_fast_square_root build.</entry>
-    </update>  
-    <update date="2008-07-31">
-      <entry>Fixed GLM_GTX_component_wise extension.</entry>
-    </update>  
-    <update date="2008-07-29">
-      <entry>Updated mix functions for optimization purpose.</entry>
-      <entry>Fixed mix functions static assert.</entry>
-      <entry>Updated test files.</entry>
-      <entry>Updated GLM_GTX_statistics_operation.</entry>
-    </update>
-    <update date="2008-07-24">
-      <entry>Fixed GLM_GTX_bit extension: isPowerOfTwoGTX works for signed int too.</entry>
-      <entry>Updated GLM_GTX_norm extension: Added distance2, l2norm and lxNorm functions.</entry>
-      <entry>Added some boost static assert.</entry>
-    </update>
-    <update date="2008-07-23">
-      <entry>Added GLM_GTX_std_based_type: Types based on C++ conventions.</entry>
-      <entry>Added files for extension tests.</entry>
-    </update>
-    <update date="2008-07-22">
-      <entry>Fixed GLM_GTX_fast_square_root: Updated fastDistance.</entry>
-    </update>
-    <update date="2008-07-16">
-      <entry>Fixed GLM_GTX_fast_square_root: Wrong const and updated fastLenght.</entry>
-      <entry>Optimized mix core function</entry>
-    </update>
-    <update date="2008-07-14">
-      <entry>Fixed GLM_GTX_epsilon: Wrong function definitions for y, z and w components.</entry>
-    </update>
-    <update date="2008-07-10">
-      <entry>Fixed GLM_GTX_flexible: Flexible with scalar only failed.</entry>
-      <entry>Fixed GLM_GTX_quaternion: One rotate overloaded function undefined.</entry>
-    </update>
-    <update date="2008-07-08">
-      <entry>Some fixes on GLM_GTX_intersect extension.</entry>
-    </update>
-    <update date="2008-07-05">
-      <entry>GLM 0.7.5 released.</entry>
-    </update>
-    <update date="2008-07-03">
-      <entry>Updated documentation.</entry>
-    </update>
-    <update date="2008-07-01">
-      <entry>Updated message system.</entry>
-    </update>
-    <update date="2008-06-26">
-      <entry>Added new message system.</entry>
-    </update>
-    <update date="2008-06-13">
-      <entry>Fixed GLM_GTX_normal extension.</entry>
-    </update>
-    <update date="2008-06-07">
-      <entry>Updated GLM_GTX_unsigned_int extension. (New typedef extensions)</entry>
-    </update>
-    <update date="2008-06-06">
-      <entry>Added new precompiler system.</entry>
-    </update>
-    <update date="2008-06-04">
-      <entry>Increase C++ conformance.</entry>
-    </update>
-    <update date="2008-06-01">
-      <entry>Fixed build errors.</entry>
-      <entry>GLM 0.7.4 released.</entry>
-    </update>
-    <update date="2008-05-30">
-      <entry>Updated external dependencies system.</entry>
-      <entry>Updated manual.</entry>
-      <entry>Fixed GLM_GTX_random extension: Fixed build with GCC.</entry>
-      <entry>Fixed GLM_GTX_string_cast extension: Fixed build with GCC 3.4 due to GCC anonymuous namespace bug.</entry>
-    </update>
-    <update date="2008-05-29">
-      <entry>Fixed GLM_GTX_transform2 extension: scaleBias didn't built.</entry>
-    </update>
-    <update date="2008-05-26">
-      <entry>Added GLM_VIRTREV_xstream extension: XML output for GLM types.</entry>
-      <entry>Added external library system</entry>
-    </update>
-    <update date="2008-05-24">
-      <entry>Updated GLM_GTX_string_cast extension: Support of non-square matrices.</entry>
-      <entry>GLM 0.7.3 released.</entry>
-    </update>
-    <update date="2008-05-23">
-      <entry>Fixed mat2 product.</entry>
-    </update>
-    <update date="2008-05-18">
-      <entry>Fixed GLM_GTX_transform2 dependencies.</entry>
-    </update>
-    <update date="2008-05-01">
-      <entry>Added GLM_VIRTREV_gl extension: Vector and matrix integration with OpenGL.</entry>
-    </update>
-    <update date="2008-04-28">
-      <entry>Updated GLM_GTX_number_precision extension: Added uint type.</entry>
-      <entry>Added GLM_GTX_string_cast extension: Create formated string from GLM type instances.</entry>
-      <entry>Updated GLM_GTX_transform2: added scaleBias matrix build</entry>
-    </update>
-    <update date="2008-04-27">
-      <entry>GLM 0.7.2 released.</entry>
-    </update>
-    <update date="2008-04-26">
-      <entry>Added GLM_AUTO_CAST setup option.</entry>
-      <entry>Updated documentation</entry>
-    </update>
-    <update date="2008-04-23">
-      <entry>Updated GLM_GTX_inverse, added affine inverse functions for fast matrix inverts.</entry>
-      <entry>Updated overall documentation</entry>
-      <entry>Added trait typedef to all GLM data types</entry>
-    </update>
-    <update date="2008-04-22">
-      <entry>Updated GLM_GTX_compatibility documentation.</entry>
-      <entry>Fixed GLM_GTX_random, gauss functions didn't build.</entry>
-    </update>
-    <update date="2008-04-13">
-      <entry>Added few SSE code.</entry>
-      <entry>Fixed matrix projections.</entry>
-    </update>
-    <update date="2008-04-07">
-      <entry>Added GLM_SWIZZLE_FUNC swizzle option.</entry>
-    </update>
-    <update date="2008-04-06">
-      <entry>Updated GLM_GTX_euler_angles documentation.</entry>
-    </update>
-    <update date="2008-03-26">
-      <entry>Updated documentation.</entry>
-    </update>
-    <update date="2008-03-24">
-      <entry>Fixed GLM_GTX_associated_min_max build on GCC.</entry>
-      <entry>Updated GLM_GTX_matrix_projection.</entry>
-      <entry>GLM 0.7.1 released.</entry>
-    </update>
-    <update date="2008-03-22">
-      <entry>GLM 0.7.0 released.</entry>
-    </update>
-    <update date="2008-03-20">
-      <entry>Updated manual.</entry>
-    </update>
-    <update date="2008-03-16">
-      <entry>Updated documentation.</entry>
-      <entry>Added GLM_GTX_associated_min_max extension.</entry>
-    </update>
-    <update date="2008-03-15">
-      <entry>Fixed not function with GCC.</entry>
-    </update>
-    <update date="2008-03-12">
-      <entry>Fixed interger pow function for the case of a null power.</entry>
-    </update>
-    <update date="2008-02-20">
-      <entry>Fixed mat4x2 and mat4x3 GCC build.</entry>
-      <entry>Updated documentation.</entry>
-      <entry>Reseted glmsetup.h to default values.</entry>
-    </update>
-    <update date="2008-02-17">
-      <entry>Fixed missing xvec4 constructor with bool argument definition.</entry>
-      <entry>Fixed namespace collision in quaternion inverse function.</entry>
-      <entry>Fixed swizzle operators involved in operations.</entry>
-      <entry>Change license from GNU LGPL to MIT.</entry>
-    </update>
-    <update date="2008-02-16">
-      <entry>Fixed missing xvec4 ++ and -- operator definition.</entry>
-    </update>
-    <update date="2008-01-05">
-      <entry>Move some implementation details into detail namespace.</entry>
-    </update>
-		<update date="2008-01-04">
-			<entry>Fixed cast between matrices of different sizes.</entry>
-		</update>
-    <update date="2008-01-02">
-      <entry>Fixed matNxM type cast to other matNxM type.</entry>
-    </update>
-    <update date="2007-12-15">
-      <entry>Fixed GLM_GTX_matrix_projection extension.</entry>
-    </update>
-    <update date="2007-12-13">
-      <entry>GLM 0.6.4 released.</entry>
-    </update>
-	<update date="2007-12-09">
-		<entry>Fixed swizzle operators.</entry>
-	</update>
-    <update date="2007-11-21">
-      <entry>Fixed GLM_GTX_matrix_selection extension.</entry>
-    </update>
-    <update date="2007-11-14">
-      <entry>Updated GLM_GTX_color_space extension. Added luminosity function.</entry>
-    </update>
-    <update date="2007-11-05">
-      <entry>GLM 0.6.3 released.</entry>
-    </update>
-    <update date="2007-10-31">
-      <entry>Fixed 3DSMax SDK conflict with GLM.</entry>
-    </update>
-    <update date="2007-10-29">
-      <entry>Updated GLM_GTX_quaternion. Added sqrt function.</entry>
-    </update>
-    <update date="2007-10-28">
-      <entry>Updated GLM_GTX_random extension.</entry>
-      <entry>Updated GLM_GTX_half extension.</entry>
-    </update>
-    <update date="2007-10-21">
-      <entry>Fixed matrices operator const T*() const.</entry>
-    </update>
-    <update date="2007-10-08">
-      <entry>Fixed GLM_GTX_normalize_dot extension.</entry>
-      <entry>GLM 0.6.2 released.</entry>
-    </update>
-    <update date="2007-10-07">
-      <entry>GLM 0.6.1 released.</entry>
-    </update>
-    <update date="2007-10-02">
-			<entry>Added GLM_GTX_normalize_dot extension: Faster way to normalize parameters before a dot product</entry>
-		</update>
-    <update date="2007-09-22">
-      <entry>Fixed namespace error on GLM_GTX_matx extension</entry>
-    </update>
-		<update date="2007-09-21">
-			<entry>Added GLM_GTX_flexible_mix extension: mix function can take different types parameters</entry>
-		</update>
-		<update date="2007-09-16">
-			<entry>Updated documentation.</entry>
-			<entry>GLM 0.6.0 released.</entry>
-		</update>
-		<update date="2007-09-15">
-			<entry>Added GLM_SINGLE_COMP_NAME to fixed multiple component names on half types with GCC.</entry>
-		</update>
-		<update date="2007-09-10">
-			<entry>Added #define GLM_GTX_INCLUDED to automatically include all GTX extensions in the language.</entry>
-		</update>
-		<update date="2007-09-09">
-			<entry>Updated extensions documentation.</entry>
-			<entry>Updated GLM_GTX_quaternion extension: squad, euler angles conversions</entry>
-		</update>
-		<update date="2007-09-06">
-			<entry>Updated GLM_GTX_compatibility extension: Added isfinite isinf, and isnan.</entry>
-		</update>
-		<update date="2007-08-26">
-			<entry>Updated GLM_GTX_random extension: Gauss distribution, spherical distribution, linear distribution.</entry>
-		</update>
-		<update date="2007-08-21">
-			<entry>Fixed namespace issues with Visual Studio 8.0 SP1.</entry>	  
-		</update>
-		<update date="2007-08-20">
-			<entry>Updated GLM_GTX_gpu_shader4 extension: Add bit operators.</entry>
-			<entry>Updated GLM_GTX_integer extension: Delete some code duplications.</entry>
-			<entry>Added GLM_GTX_unsigned_int extension.</entry>
-		</update>
-		<update date="2007-08-19">
-			<entry>Fixed namespace issues with Visual Studio 8.0 SP1.</entry>
-			<entry>Added new namespace management for extensions.</entry>
-			<entry>Added automatic compiler ditection, no more compiler setup.</entry>
-		</update>
-		<update date="2007-07-31">
-			<entry>Updated GLM_GTX_number_precision extension.</entry>
-			<entry>Updated usertype.dat for Visual Studio.</entry>
-			<entry>Updated GLM_GTX_random extension.</entry>
-		</update>
-		<update date="2007-06-21">
-			<entry>Added GLM_GTX_color_cast extension.</entry>
-			<entry>Updated GLM_GTX_quaternion extension.</entry>
-		</update>
-		<update date="2007-05-22">
-			<entry>Added GLM_GTX_verbose_operator extension.</entry>
-		</update>
-		<update date="2007-05-21">
-			<entry>Added GLM_GTX_component_wise extension.</entry>
-		</update>
-		<update date="2007-05-10">
-			<entry>Added GLM_GTX_number_precision extension.</entry>
-		</update>
-		<update date="2007-04-16">
-			<entry>Updated GLM_GTX_bit extension.</entry>
-		</update>
-		<update date="2007-04-10">
-			<entry>Updated GLM_GTX_bit extension.</entry>
-		</update>
-		<update date="2007-04-04">
-			<entry>Updated GLM_GTX_fast_square_root extension.</entry>
-			<entry>Updated GLM_GTX_fast_trigonometry extension.</entry>
-			<entry>Updated GLM_GTX_fast_exponential extension.</entry>
-			<entry>Added GLM_GTX_mul extension.</entry>
-			<entry>Fixed GLM_GTX_epsilon extension.</entry>
-		</update>
-		<update date="2007-04-03">
-			<entry>Added GLM_GTX_mixed_product extension.</entry>
-			<entry>Added GLM_GTX_intersect extension.</entry>
-			<entry>Updated GLM_GTX_matrix_access extension.</entry>
-		</update>
-		<update date="2007-03-20">
-			<entry>Added bits operators in comment for vec2, vec3 and vec4.</entry>
-			<entry>Fixed friendly conformance to GLM_GTX_double.</entry>
-		</update>
-		<update date="2007-03-18">
-			<entry>Fixed size_type errors.</entry>
-		</update>
-		<update date="2007-03-14">
-			<entry>Updated GLM_GTX_quaternion extension.</entry>
-			<entry>Added GLM_GTX_bit extension.</entry>
-			<entry>Added value_type, size_type and value_size typedefs and value to all types.</entry>
-		</update>
-		<update date="2007-03-09">
-			<entry>Updated GLM_GTX_compatibility extension.</entry>
-			<entry>Fixed GLM_GTX_color_space extension.</entry>
-		</update>
-		<update date="2007-03-06">
-			<entry>Added GLM_GTX_polar_coordinates extension.</entry>
-		</update>
-		<update date="2007-03-05">
-			<entry>Added GLM_GTX_vector_query extension.</entry>
-			<entry>Added GLM_GTX_matrix_query extension.</entry>
-		</update>
-		<update date="2007-03-01">
-			<entry>Fixed square matrices division operators.</entry>
-		</update>
-		<update date="2007-02-28">
-			<entry>Added GLM_GTX_mat_mn extension.</entry>
-		</update>
-		<update date="2007-02-22">
-			<entry>Updated GLM_GTX_color_space extension.</entry>
-		</update>
-		<update date="2007-02-21">
-			<entry>Added GLM_GTX_vecx extension.</entry>
-			<entry>Added GLM_GTX_matx extension.</entry>
-		</update>
-		<update date="2007-02-19">
-			<entry>GLM 0.5.1 released.</entry>
-		</update>
-		<update date="2006-02-08">
-			<entry>Updated Visual Studio projects.</entry>
-		</update>
-		<update date="2006-02-01">
-			<entry>Updated GLM_GTX_compatibility extension.</entry>
-		</update>
-		<update date="2006-01-26">
-			<entry>Added GLM_GTX_hyperbolic extension.</entry>
-			<entry>Added GLM_GTX_spline extension.</entry>
-			<entry>Fixed unProject and project functions from GLM_GTX_matrix_projection extension.</entry>
-		</update>
-		<update date="2006-01-24">
-			<entry>Added GLM_GTX_compatibility extension.</entry>
-		</update>
-		<update date="2006-01-19">
-			<entry>Add some undefined write swizzle operators from bvec*</entry>
-			<entry>Fixed vectors component access operators[] from bvec*</entry>
-			<entry>Fixed bvec* equal operators with write swizzle operators</entry>
-			<entry>Fixed various vector constructors</entry>
-			<entry>Updated swizzle operators, _xvec* and _bvec* share the same code</entry>
-		</update>
-		<update date="2006-01-11">
-			<entry>Add some undefined write swizzle operators from xvec*</entry>
-			<entry>Fixed some write operator considered as read operator from xvec*</entry>
-			<entry>Fixed vectors component access operators[] from xvec*</entry>
-			<entry>Fixed not function setup according compilers</entry>
-		</update>
-		<update date="2006-01-06">
-			<entry>Added user manual.</entry>
-			<entry>GLM 0.5.0 released.</entry>
-		</update>
-		<update date="2006-01-05">
-			<entry>Updated overloaded functions of matrixCompMult.</entry>
-			<entry>Added transpose and outerProduct functions in the GLM core.</entry>
-		</update>
-		<update date="2006-12-15">
-			<entry>Fixed GLM_GTX_rotate_vector extension.</entry>
-		</update>
-		<update date="2006-12-07">
-			<entry>Fixed GLM_GTX_interger extension conformance.</entry>
-		</update>
-		<update date="2006-12-06">
-			<entry>Improved "friendly conformance" support.</entry>
-			<entry>Improved quaternion implementation.</entry>
-		</update>
-		<update date="2006-12-03">
-			<entry>Updated setup options.</entry>
-		</update>
-		<update date="2006-11-26">
-			<entry>Added new setup options for swizzle operators.</entry>
-		</update>
-		<update date="2006-11-14">
-			<entry>Updated GLM_GTX_integer extension.</entry>
-		</update>
-		<update date="2006-11-13">
-			<entry>Added GLM_GTX_gpu_shader4 extension.</entry>
-			<entry>Added extension errors management.</entry>
-			<entry>Added compilers management.</entry>
-			<entry>Added conformance management.</entry>
-		</update>
-		<update date="2006-11-02">
-			<entry>Added GLM_GTX_rotate_vector extension.</entry>
-		</update>
-		<update date="2006-10-15">
-			<entry>Updated product operators to non-squared matrices</entry>
-		</update>
-		<update date="2006-10-01">
-			<entry>Updated tmat4x3 and tmat3x4 types</entry>
-			<entry>Added tmat2x3, tmat3x2, tmat2x4 and tmat4x2</entry>
-			<entry>Clarified ToDo comments for missing operators with non-squared matrices types</entry>
-		</update>
-		<update date="2006-08-05">
-			<entry>Added GLSL 1.2 mat4x3 and mat3x4</entry>
-			<entry>Added missing declaration of mat* operators</entry>
-			<entry>Added _xmat* with _xvec* division operators</entry>
-		</update>
-		<update date="2006-08-04">
-			<entry>Added GLSL 1.2 non-squared matrices files</entry>
-		</update>
-		<update date="2006-07-17">
-			<entry>fastCos and fastSin are defined between -2 pi and 2 pi</entry>
-		</update>
-		<update date="2006-06-18">
-			<entry>Added swizzle operators for xvec4</entry>
-			<entry>Added swizzle operators for bvec4</entry>
-		</update>
-		<update date="2006-06-17">
-			<entry>Added swizzle operators for bvec2></entry>
-			<entry>Implicit conversion from *ref* to *vec*</entry>
-			<entry>Added swizzles operators for xvec3</entry>
-			<entry>Added swizzles operators for bvec3</entry>
-		</update>
-		<update date="2006-05-29">
-			<entry>Separated _*ref* types in different files</entry>
-			<entry>Added _bref* types</entry>
-			<entry>Updated _xref* types</entry>
-		</update>
-		<update date="2006-05-28">
-			<entry>Added operators for tvec2 swizzles operators management</entry>
-		</update>
-		<update date="2006-05-23">
-			<entry>GLM 0.4.1 released.</entry>
-		</update>
-		<update date="2006-05-22">
-			<entry>Add 4 examples of use with OpenGL under Windows and Linux</entry>
-		</update>
-		<update date="2006-05-17">
-			<entry>GLM 0.4.0 released.</entry>
-		</update>
-		<update date="2006-05-16">
-			<entry>It's not anymore required to include windows.h before glm.h whether windows.h is required</entry>
-		</update>
-		<update date="2006-05-04">
-			<entry>Improved tvec3 conversions</entry>
-			<entry>Improved tvec2 conversions</entry>
-			<entry>Added left hand side vec2 swizzle operators</entry>
-			<entry>Improved bvec4 conversions</entry>
-			<entry>Improved bvec3 conversions</entry>
-			<entry>Improved bvec2 conversions</entry>
-		</update>
-		<update date="2006-04-28">
-			<entry>Added _xref* structures for swizzle operators implementation</entry>
-			<entry>Seperated bvec* and xvec* types in different files</entry>
-			<entry>Updated core functions code</entry>
-		</update>
-		<update date="2006-04-22">
-			<entry>Fixed texture coordinate components access</entry>
-			<entry>Added GLM_GTX_mul extension.</entry>
-			<entry>Added GLM_GTX_inertia extension.</entry>
-			<entry>GLM 0.3.2 released.</entry>
-		</update>
-		<update date="2006-04-21">
-			<entry>Added right hand side vec2 swizzle operators</entry>
-			<entry>Improved tvec4 conversions</entry>
-		</update>
-		<update date="2006-04-20">
-			<entry>Updated GLM_GTX_quaterion, added log and exp functions</entry>
-			<entry>Added GLM_GTX_matrix_major_storage extension.</entry>
-		</update>
-		<update date="2006-04-19">
-			<entry>Reorganize types code</entry>
-			<entry>Complete addition and subtraction vertrices operators</entry>
-		</update>
-		<update date="2006-04-18">
-			<entry>Complete addition and subtraction matrices operators</entry>
-			<entry>Optimize increment and decrement operators</entry>
-		</update>
-		<update date="2006-04-17">
-			<entry>Fixed tmat4x4 division</entry>
-		</update>
-		<update date="2006-03-30">
-			<entry>Added GLM_GTX_outer_product extension.</entry>
-		</update>
-		<update date="2006-03-28">
-			<entry>GLM 0.3.1 released.</entry>
-		</update>
-		<update date="2006-03-27">
-			<entry>Added Linux support under GCC 4.0 and 4.1.</entry>
-		</update>
-		<update date="2006-03-26">
-			<entry>Optimisation of increment and decrement operators.</entry>
-		</update>
-		<update date="2006-03-20">
-			<entry>Added MacOS X support under GCC 4.0.</entry>
-		</update>
-		<update date="2006-02-19">
-			<entry>Added GLM_GTX_extend extension to wishlist in position 27.</entry>
-			<entry>Added GLM_GTX_euler_angles extension to wishlist in position 28.</entry>
-			<entry>Added Doxygen documentation.</entry>
-			<entry>GLM 0.3.0 released.</entry>
-		</update>
-		<update date="2006-01-30">
-			<entry>Optimized GLM_GTX_integer implementation.</entry>
-		</update>
-		<update date="2006-01-27">
-			<entry>Deleted explicit conversions from array to type to prevent unespected conversions.</entry>
-		</update>
-		<update date="2006-01-16">
-			<entry>Fixed bugs</entry>
-			<entry>Improved types conversions.</entry>
-			<entry>Added GLM_GTX_vector_access extension to wishlist in position 25.</entry>
-			<entry>Added GLM_GTX_random extension to wishlist in position 26.</entry>
-		</update>
-		<update date="2006-01-13">
-			<entry>Fixed bugs</entry>
-		</update>
-		<update date="2006-01-10">
-			<entry>Updated GLM_GTX_integer extension.</entry>
-		</update>
-		<update date="2006-01-09">
-			<entry>Added GLM_GTX_fast_exponential extension to wishlist in position 24.</entry>
-		</update>
-		<update date="2006-01-08">
-			<entry>Optimized _xvec* copy.</entry>
-		</update>
-		<update date="2006-01-07">
-			<entry>Added GLM_GTX_fast_trigonometry extension to wishlist in position 23.</entry>
-			<entry>Added factorial function to GLM_GTX_integer extension.</entry>
-		</update>
-		<update date="2006-01-05">
-			<entry>Added GLM_GTX_half extension to wishlist in position 21.</entry>
-			<entry>Optimized normalize function.</entry>
-			<entry>Global optimisation for debugging time</entry>
-			<entry>Added GLM_GTX_integer extension to wishlist in position 18.</entry>
-			<entry>Optimized clamp function.</entry>
-		</update>
-		<update date="2006-01-04">
-			<entry>Added GLM_GTX_fast_square_root extension to wishlist in position 19.</entry>
-			<entry>Added GLM_GTX_inverse_transpose extension to wishlist in position 20.</entry>
-			<entry>Fixed missing of vec4 * mat4 operator.</entry> 
-		</update>
-		<update date="2005-12-23">
-			<entry>Reorganization of extensions.</entry>
-			<entry>Fixed vec2 constructeur bug.</entry>
-		</update>
-		<update date="2005-11-22">
-			<entry>Updated GLM_GTX_length2 extension.</entry>
-			<entry>Renamed GLM_GTX_length2 extension to GLM_GTX_norm.</entry>
-		</update>
-		<update date="2005-11-12">
-			<entry>Fixed GLM_GTX_quaterion implémentation bugs.</entry>
-		</update>
-		<update date="2005-11-09">
-			<entry>Updated GLM_GTX_projection extension.</entry>
-		</update>	
-		<update date="2005-10-30">
-			<entry>Added GLM_GTX_transform2 extension to wishlist in position 18.</entry>
-		</update>
-		<update date="2005-09-28">
-			<entry>Updated for GCC 4.0.</entry>
-		</update>
-		<update date="2005-08-12">
-			<entry>Fixed normalization bug with LookAtGTX.</entry>
-		</update>
-		<update date="2005-07-15">
-			<entry>Add array conversion to GLM types.</entry>
-		</update>
-		<update date="2005-07-02">
-			<entry>Added GL_GTX_euler_angles extension to wishlist in position 17.</entry>
-		</update>
-		<update date="2005-06-24">
-			<entry>Added GLM_GTX_matrix_selection extension to wishlist in position 16.</entry>
-			<entry>Added GLM_GTX_matrix_selection extension support.</entry>
-		</update>
-		<update date="2005-06-22">
-			<entry>Updated GLM_GTX_projection extension to wishlist in position 15.</entry>
-		</update>
-		<update date="2005-06-21">
-			<entry>Added GLM_GTX_projection extension to wishlist in position 15.</entry>
-		</update>
-		<update date="2005-06-09">
-			<entry>Fixed bug from rotateGTX with quaternion.</entry>
-			<entry>Fixed matrix vector product.</entry>
-			<entry>Add vector usage to describe transformations axis.</entry>
-		</update>
-		<update date="2005-05-05">
-			<entry>Added GLM_GTX_quaternion extension support</entry>
-			<entry>GLM 0.2 released.</entry>
-		</update>
-		<update date="2005-05-02">
-			<entry>Add GLM_GTX_transform 2D transform support</entry>
-		</update>
-		<update date="2005-05-01">
-			<entry>Add GLM_GTX_transform 3D transform support</entry>
-		</update>
-		<update date="2005-04-29">
-			<entry>Updated GLM_GTX_transform extension to wishlist in position 2</entry>
-		</update>
-		<update date="2005-04-23">
-			<entry>Added GLM_GTX_vector_comp_mult extension to whislist in position 14</entry>
-			<entry>Added GLM_GTX_vector_comp_mult extension support</entry>
-		</update>
-		<update date="2005-04-22">
-			<entry>Added GLM_GTX_color_space extension to whislist in position 13</entry>
-			<entry>Added GLM_GTX_color_space extension support</entry>
-			<entry>Added GLM_GTX_double extension support</entry>
-		</update>
-		<update date="2005-04-10">
-			<entry>Overload of GLSL functions used by extentions instead of create new functions</entry>
-		</update>
-		<update date="2005-04-08">
-			<entry>Added GLM_GTX_optimum_pow extension to whislist in position 11</entry>
-			<entry>Added GLM_GTX_double extension to wishlist in position 12</entry>
-		</update>
-		<update date="2005-04-03">
-			<entry>Updated GLM_GTX_matrix_cross_product extension to wishlist in position 8</entry>
-			<entry>Added GLM_GTX_matrix_cross_product extension support</entry>
-			<entry>Added GLM_GTX_projection extension to whislist in position 9</entry>
-			<entry>Added GLM_GTX_perpendicular extension to wishlist in position 10</entry>
-			<entry>Added GLM_GTX_projection extension support</entry>
-			<entry>Added GLM_GTX_perpendicular extension support</entry>
-			<entry>Changed extensions organisation</entry>
-		</update>
-		<update date="2005-03-27">
-			<entry>Added *vec* by *mat* product</entry>
-			<entry>Updated GLM_GTX_determinant extension to wishlist in position 4</entry>
-			<entry>Updated GLM_GTX_inverse extension to wishlist in position 5</entry>
-			<entry>Updated GLM_GTX_length2 extension to wishlist in position 6</entry>
-			<entry>Updated GLM_GTX_orthonormalize extension to wishlist in position 7</entry>
-			<entry>Added GLM_GTX_determinant extension support</entry>
-			<entry>Added GLM_GTX_inverse extension support</entry>
-			<entry>Added GLM_GTX_length2 extension support</entry>
-			<entry>Added GLM_GTX_orthonormalize extension support</entry>
-		</update>
-		<update date="2005-03-21">
-			<entry>Added bug #7 : Vector constructor non conform</entry>
-			<entry>Updated issue #13 : Only ARB can allow extensions adding new operators</entry>
-		</update>
-		<update date="2005-03-13">
-			<entry>Added GLM_GTX_orthonormalize extension to wishlist in position 7</entry>
-			<entry>Added GLM_GTX_matrix_cross_product extension to wishlist in position 8</entry>
-			<entry>Updated issue #10 : Using template functions members</entry>
-			<entry>Updated *vec* types following issue #10 guidance</entry>
-		</update>
-		<update date="2005-03-06">
-			<entry>Fixed bug #2 with '#error'</entry>
-		</update>
-		<update date="2005-03-05">
-			<entry>Updated issue #4</entry>
-		</update>
-		<update date="2005-03-04">
-			<entry>Updated issue #13</entry>
-			<entry>Updated issue #8</entry>
-			<entry>Updated issue #6</entry>
-			<entry>Updated issue #4</entry>
-		</update>
-		<update date="2005-03-03">
-			<entry>Bugs #2 and #5 are now one</entry>
-			<entry>Updated / operator for vec* types with support of the divisibility of two vectors, and the divisibility term to term</entry>
-		</update>
-		<update date="2005-02-28">
-			<entry>Updated GLM_GTX_transpose extension to wishlist in position 8</entry>
-			<entry>Added GLM_GTX_transpose extension support</entry>
-			<entry>Fixed mat* types constructor scalar-parameted</entry>
-		</update>
-		<update date="2005-02-27">
-			<entry>Fixed mat* types product by a scalar</entry>
-		</update>
-		<update date="2005-02-25">
-			<entry>Updated function 'not'</entry>
-			<entry>Defined identificators following compilers</entry>
-			<entry>Added GLM_GTX_length2 extension to wishlist in position 6</entry>
-			<entry>Optimized mat3 type divide operator</entry>
-		</update>
-		<update date="2005-02-21">
-			<entry>GLM 0.1 released</entry>
-		</update>
-		<update date="2005-02-18">
-			<entry>Updated issue #4</entry>
-			<entry>Updated issue #6</entry>
-			<entry>Updated issue #9</entry>
-			<entry>Updated issue #12</entry>
-			<entry>Updated issue #13</entry>
-			<entry>Updated issues ordering</entry>
-		</update>
-		<update date="2005-02-17">
-			<entry>Updated vec* types + operator. Can now add a vector and a scalar, term by term</entry>
-			<entry>Updated vec* types - operator. Can now minus a vector and a scalar, term by term</entry>
-			<entry>Updated vec* types * operator. Can now multiply a vector and a scalar, term by term</entry>
-			<entry>Deleted issue #11, which was erroneous</entry>
-		</update>
-		<update date="2005-02-15">
-			<entry>Deleted from wishlist extension #6 : refract function is defined by version 1.10.59 from GLSL specs</entry>
-			<entry>Updated reflect function tests</entry>
-			<entry>Added fucntion reflect with its tests</entry>
-			<entry>Using typename 'genType' for functions templates</entry>
-			<entry>Added bug #5</entry>
-			<entry>Updated function sqrt</entry>
-			<entry>Added function log with its tests</entry>
-			<entry>Added function exp with its tests</entry>
-			<entry>Added function log2 with its tests</entry>
-			<entry>Updated cross function</entry>
-			<entry>Updated bvec* types data implementation</entry>
-			<entry>Added bug #6</entry>
-		</update>
-		<update date="2005-02-14">
-			<entry>Updated issue #13</entry>
-			<entry>Converted text files into XML</entry>
-			<entry>Modified files hierarchy</entry>
-		</update>
-		<update date="2005-02-13">
-			<entry>Updated clamp function</entry>
-			<entry>Added function noise1 with its tests</entry>
-			<entry>Added function noise2 with its tests</entry>
-			<entry>Added function noise3 with its tests</entry>
-			<entry>Added function noise4 with its tests</entry>
-		</update>
-		<update date="2005-02-08">
-			<entry>Enhanced mat4 type division operator</entry>
-			<entry>Added function sqrt with its tests</entry>
-			<entry>Added function inversesqrt with its tests</entry>
-			<entry>Added function exp2 with its tests</entry>
-			<entry>Added function log2 with its tests</entry>
-		</update>
-		<update date="2005-02-07">
-			<entry>Modified *vec* types constructors implementation, chooses initialisation instead of affectation</entry>
-			<entry>Added function reflect with its tests</entry>
-			<entry>Updated tan function</entry>
-			<entry>Fixed mat4 type * operator</entry>
-		</update>
-		<update date="2005-02-05">
-			<entry>Added GLM_GTX_refract extension to wishlist in position 5.</entry>
-		</update>
-		<update date="2005-02-03">
-			<entry>Added default constructor for mat* types</entry>
-		</update>
-		<update date="2005-02-02">
-			<entry>Added mat2 and vec2 type * operator</entry>
-			<entry>Added mat3 and vec3 type * operator</entry>
-			<entry>Added mat4 and vec4 type * operator</entry>
-		</update>
-		<update date="2005-02-01">
-			<entry>Added GLM_GTX_transpose extension to wishlist in position 3</entry>
-			<entry>Added GLM_GTX_determinant extension to wishlist in position 4</entry>
-			<entry>Added GLM_GTX_inverse extension to wishlist in position 5</entry>
-			<entry>Added / operator for two mat3 types</entry>
-			<entry>Enhanced *vec* types conception</entry>
-			<entry>Enhanced *mat* types conception</entry>
-		</update>
-		<update date="2005-01-31">
-			<entry>Updated bug #3</entry>
-			<entry>Updated issue #10</entry>
-			<entry>Added function matrixCompMult with its tests</entry>
-			<entry>Updated mat* type constant access operators</entry>
-			<entry>Added bug #4 : Conversion problem between two different *vec* types</entry>
-		</update>
-		<update date="2005-01-30">
-			<entry>Added bug #1 : Inability to select multiple components</entry>
-			<entry>Added bug #2 : Some *vec* types conversions are not available</entry>
-			<entry>Added bug #3 : 'not' is a C++ ISO keyword</entry>
-			<entry>Added * operator for two mat3 types</entry>
-			<entry>Added * operator for two mat4 types</entry>
-			<entry>Updated mat* types</entry>
-			<entry>Updated GLM_GTX_quaternion extension to wishlist in position 1</entry>
-			<entry>Updated GLM_GTX_transform extension to wishlist in position 2</entry>
-		</update>
-		<update date="2005-01-27">
-			<entry>Added mat2 type</entry>
-			<entry>Added * operator for two mat2 types</entry>
-			<entry>Added issue #14</entry>
-			<entry>Added issue #15</entry>
-			<entry>Added mat3 type</entry>
-			<entry>Added mat4 type</entry>
-		</update>
-		<update date="2005-01-26">
-			<entry>Added function mix with its tests</entry>
-			<entry>Added function step with its tests</entry>
-			<entry>Added function smoothstep with its tests</entry>
-			<entry>Updated issue #10</entry>
-			<entry>Updated issue #12</entry>
-			<entry>Updated issue #8</entry>
-			<entry>Added type bvec4 forgotten declaration</entry>
-			<entry>Added function lessThan with its tests</entry>
-			<entry>Added function lessThanEqual with its tests</entry>
-			<entry>Added function greaterThan with its tests</entry>
-			<entry>Added function greaterThanEqual with its tests</entry>
-			<entry>Added function equal with its tests</entry>
-			<entry>Added function notEqual with its tests</entry>
-			<entry>Added function any with its tests</entry>
-			<entry>Added function all with its tests</entry>
-			<entry>Added function not with its tests</entry>
-		</update>
-		<update date="2005-01-24">
-			<entry>Added function fract with its tests</entry>
-			<entry>Added function mod with its tests</entry>
-			<entry>Added function clamp with its tests</entry>
-		</update>
-		<update date="2005-01-23">
-			<entry>Added function mod with its tests</entry>
-			<entry>Added function abs with its tests</entry>
-			<entry>Added function sign with its tests</entry>
-			<entry>Added function floor with its tests</entry>
-			<entry>Added function ceil with its tests</entry>
-			<entry>Added function min with its tests</entry>
-			<entry>Added function max with its tests</entry>
-		</update>
-		<update date="2005-01-22">
-			<entry>Updated issue #13</entry>
-			<entry>Added temporary namespace called 'glm'</entry>
-			<entry>Added function pow with its tests</entry>
-		</update>
-		<update date="2005-01-19">
-			<entry>Updated sin function tests</entry>
-			<entry>Enhanced trigonometrics functions</entry>
-			<entry>Enhanced geometric functions</entry>
-		</update>
-		<update date="2005-01-18">
-			<entry>Added xvec* type constructor taking a single scalar as parameter.</entry>
-			<entry>Added xvec* into xvec3 type conversion</entry>
-			<entry>Added xvec* into xvec4 type conversion</entry>
-			<entry>Added xvec* into bvec2 type conversion</entry>
-			<entry>Added xvec* into bvec3 type conversion</entry>
-			<entry>Added xvec* into bvec4 type conversion</entry>
-			<entry>Added function sin with its tests</entry>
-			<entry>Added function cos with its tests</entry>
-			<entry>Added function tan with its tests</entry>
-			<entry>Added function asin with its tests</entry>
-			<entry>Added function acos with its tests</entry>
-			<entry>Added function atan with its tests</entry>
-			<entry>Added issue #13</entry>
-		</update>
-		<update date="2005-01-17">
-			<entry>Added function radians with its tests</entry>
-			<entry>Added function degrees with its tests</entry>
-			<entry>Added issue #9</entry>
-		</update>
-		<update date="2005-01-16">
-			<entry>Separated *vec* types definition from declaration</entry>
-			<entry>Added xvec* into xvec2 type conversion</entry>
-			<entry>Updated issue #11</entry>
-			<entry>Added issue #12</entry>
-		</update>
-		<update date="2005-01-15">
-			<entry>Using 'union' for multiple access to *vec* types components</entry>
-			<entry>Added issue #11</entry>
-			<entry>Deleted __*vec1GT following issue #11 guidance</entry>
-			<entry>Closed issue #2</entry>
-		</update>
-		<update date="2005-01-13">
-			<entry>Added function normalize with its tests</entry>
-			<entry>Added function faceforward with its tests</entry>
-		</update>
-		<update date="2005-01-12">
-			<entry>Added function cross with its tests</entry>
-			<entry>Added a function that can determine *vec* types size, and write beyond GLSL 1.051 specs</entry>
-			<entry>Added function lenght with its tests</entry>
-			<entry>Added function distance with its tests</entry>
-			<entry>Added function dot with its tests</entry>
-			<entry>Closed issue #1</entry>
-		</update>
-		<update date="2005-01-10">
-			<entry>Renamed intern types _vec* into _xvec*</entry>
-			<entry>Separated _xvec* types data, operators and accesses</entry>
-			<entry>Added bvec2 type</entry>
-			<entry>Added __bvec1GT type beyond GLSL 1.051 specs</entry>
-		</update>
-		<update date="2005-01-09">
-			<entry>Added types vec2 and ivec2</entry>
-			<entry>Added types vec3 and ivec3</entry>
-			<entry>Added types vec4 and ivec4</entry>
-			<entry>Added types __vec1GT and __ivec1GT, write beyond GLSL 1.051 specs</entry>
-		</update>
-	</changelog>
-	<page_news>
-
-    <!--paragraph>
-      Finally a part of GLM_GTX_number_precission have been promoted to a the stable extension GLM_GTC_number_precission. This extension provide data types of a defined size.
-    </paragraph-->
-
-		<news index="0048" date="20/02/2010" title="GLM 0.9 Alpha 2 released" image="goodies/logo.png" image-mini="image/logo-mini.png">
-			<redacteur adresse="mailto:[email protected]">Groove</redacteur>
-			<paragraph>
-				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.
-			</paragraph>
-			<source type="Download" adresse="https://sourceforge.net/projects/glf/files/glm/glm-0.9.A.2/glm-0.9.A.2.zip/download">GLM 0.9.A.2 (zip, 1.3 MB)</source>
-			<source type="Download" adresse="https://sourceforge.net/projects/glf/files/glm/glm-0.9.A.2/glm-0.9.A.2.7z/download">GLM 0.9.A.2 (7z, 726 KB)</source>
-			<source type="Link" adresse="./changelog.html">Full changelog</source>
-		</news>
-		
-    <news index="0047" date="09/02/2010" title="GLM 0.9 Alpha 1 released" image="goodies/logo.png" image-mini="image/logo-mini.png">
-      <redacteur adresse="mailto:[email protected]">Groove</redacteur>
-      <paragraph>
-        First step until a major release for GLM with this first alpha of GLM 0.9.
-      </paragraph>
-      <paragraph>
-        This version brings a large internal redesign to improve the library reliability and optimized some parts.
-        It removed the deprecated features and API which implies that GLM 0.9 isn't backward compatible.
-      </paragraph>
-      <paragraph>
-        For most users the build issues when upgrading to GLM 0.9 should be reduced especially if they follow the deprecation policy.
-      </paragraph>
-      <paragraph>
-        This release is still UNSTABLE and not recommanded for commertial products.
-      </paragraph>
-      <source type="Download" adresse="https://sourceforge.net/projects/glf/files/glm/glm-0.9.A.1/glm-0.9.A.1.zip/download">GLM 0.9.A.1 (zip, 950 KB)</source>
-      <source type="Download" adresse="https://sourceforge.net/projects/glf/files/glm/glm-0.9.A.1/glm-0.9.A.1.7z/download">GLM 0.9.A.1 (7z, 391 KB)</source>
-      <source type="Link" adresse="./changelog.html">Full changelog</source>
-    </news>
-    
-    <news index="0046" date="25/01/2010" title="GLM 0.8.4.4 released" image="goodies/logo.png" image-mini="image/logo-mini.png">
-      <redacteur adresse="mailto:[email protected]">Groove</redacteur>
-      <paragraph>
-        This update just removes some warnings
-      </paragraph>
-      <paragraph>
-        By the way, if you have questions about GLM, a good place for those is the <link href="http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=postlist&amp;Board=10&amp;page=1">OpenGL.org Toolkits forum</link>.
-      </paragraph>
-      <source type="Download" adresse="https://sourceforge.net/projects/glf/files/glm/glm-0.8.4.4/glm-0.8.4.4.zip/download">GLM 0.8.4.4 (zip, 1.1 MB)</source>
-      <source type="Download" adresse="https://sourceforge.net/projects/glf/files/glm/glm-0.8.4.4/glm-0.8.4.4.7z/download">GLM 0.8.4.4 (7z, 479 KB)</source>
-      <source type="Link" adresse="./changelog.html">Full changelog</source>
-    </news>
-    
-    <news index="0045" date="16/11/2009" title="GLM 0.8.4.3 released" image="goodies/logo.png" image-mini="image/logo-mini.png">
-      <redacteur adresse="mailto:[email protected]">Groove</redacteur>
-      <paragraph>
-        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. 
-      </paragraph>
-      <source type="Download" adresse="https://sourceforge.net/projects/glf/files/glm/glm-0.8.4.3/glm-0.8.4.3.zip/download">GLM 0.8.4.3 (zip, 1.1 MB)</source>
-      <source type="Download" adresse="https://sourceforge.net/projects/glf/files/glm/glm-0.8.4.3/glm-0.8.4.3.7z/download">GLM 0.8.4.3 (7z, 463 KB)</source>
-      <source type="Link" adresse="./changelog.html">Full changelog</source>
-    </news>
-    
-    <news index="0044" date="19/10/2009" title="GLM 0.8.4.2 released" image="goodies/logo.png" image-mini="image/logo-mini.png">
-      <redacteur adresse="mailto:[email protected]">Groove</redacteur>
-      <paragraph>
-        This version is a really minor updates, fixing single issue with half float types.
-      </paragraph>
-      <source type="Download" adresse="https://sourceforge.net/projects/glf/files/glm/glm-0.8.4.2/glm-0.8.4.2.zip/download">GLM 0.8.4.2 (zip, 1.1 MB)</source>
-      <source type="Download" adresse="https://sourceforge.net/projects/glf/files/glm/glm-0.8.4.2/glm-0.8.4.2.7z/download">GLM 0.8.4.2 (7z, 443 KB)</source>
-      <source type="Link" adresse="./changelog.html">Full changelog</source>
-    </news>
-
-    <news index="0043" date="05/10/2009" title="GLM 0.8.4.1 released" image="goodies/logo.png" image-mini="image/logo-mini.png">
-      <redacteur adresse="mailto:[email protected]">Groove</redacteur>
-      <paragraph>
-        This version fixes few bugs and provides an major update of the manual thanks to Damian Trebilco. 
-      </paragraph>
-      <source type="Download" adresse="http://prdownloads.sourceforge.net/glf/glm-0.8.4.1.zip?download">GLM 0.8.4.1 (zip, 1.1 MB)</source>
-      <source type="Download" adresse="http://prdownloads.sourceforge.net/glf/glm-0.8.4.1.7z?download">GLM 0.8.4.1 (7z, 443 KB)</source>
-      <source type="Link" adresse="./changelog.html">Full changelog</source>
-    </news>
-    
-    <news index="0042" date="16/09/2009" title="GLM 0.8.4.0 released" image="goodies/logo.png" image-mini="image/logo-mini.png">
-      <redacteur adresse="mailto:[email protected]">Groove</redacteur>
-      <paragraph>
-        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.
-      </paragraph>
-      <source type="Download" adresse="http://prdownloads.sourceforge.net/glf/glm-0.8.4.0.zip?download">GLM 0.8.4.0 (zip, 1.1 MB)</source>
-      <source type="Download" adresse="http://prdownloads.sourceforge.net/glf/glm-0.8.4.0.7z?download">GLM 0.8.4.0 (7z, 439 KB)</source>
-      <source type="Link" adresse="./changelog.html">Full changelog</source>
-    </news>
-    
-    <news index="0041" date="11/08/2009" title="GLM 0.8.3.5 released" image="goodies/logo.png" image-mini="image/logo-mini.png">
-      <redacteur adresse="mailto:[email protected]">Groove</redacteur>
-      <paragraph>
-        Fixed extension bugs introduced by core update.
-      </paragraph>
-      <source type="Download" adresse="http://prdownloads.sourceforge.net/glf/glm-0.8.3.5.zip?download">GLM 0.8.3.5 (zip, 971 KB)</source>
-      <source type="Download" adresse="http://prdownloads.sourceforge.net/glf/glm-0.8.3.5.7z?download">GLM 0.8.3.5 (7z, 405 KB)</source>
-      <source type="Link" adresse="./changelog.html">Full changelog</source>
-    </news>
-    
-    <news index="0040" date="10/08/2009" title="GLM 0.8.3.4 released" image="goodies/logo.png" image-mini="image/logo-mini.png">
-      <redacteur adresse="mailto:[email protected]">Groove</redacteur>
-      <paragraph>
-        Fixed varius bugs. Move determinant fonction to core following GLSL 1.5 specification.
-      </paragraph>
-      <source type="Download" adresse="http://prdownloads.sourceforge.net/glf/glm-0.8.3.4.zip?download">GLM 0.8.3.4 (zip, 971 KB)</source>
-      <source type="Download" adresse="http://prdownloads.sourceforge.net/glf/glm-0.8.3.4.7z?download">GLM 0.8.3.4 (7z, 405 KB)</source>
-      <source type="Link" adresse="./changelog.html">Full changelog</source>
-    </news>
-    
-    <news index="0039" date="25/06/2009" title="GLM 0.8.3.3 released" image="goodies/logo.png" image-mini="image/logo-mini.png">
-      <redacteur adresse="mailto:[email protected]">Groove</redacteur>
-      <paragraph>
-        Fixed varius bugs.
-      </paragraph>
-      <source type="Download" adresse="http://prdownloads.sourceforge.net/glf/glm-0.8.3.3.zip?download">GLM 0.8.3.3 (zip, 971 KB)</source>
-      <source type="Download" adresse="http://prdownloads.sourceforge.net/glf/glm-0.8.3.3.7z?download">GLM 0.8.3.3 (7z, 405 KB)</source>
-      <source type="Link" adresse="./changelog.html">Full changelog</source>
-    </news>
-    
-    <news index="0038" date="04/06/2009" title="GLM 0.8.3.2 released" image="goodies/logo.png" image-mini="image/logo-mini.png">
-      <redacteur adresse="mailto:[email protected]">Groove</redacteur>
-      <paragraph>
-        Add GLM_GTC_quaternion and GLM_GTC_type_precision extensions both subset of GLM_GTX_quaternion and GLM_GTX_number_precision
-      </paragraph>
-      <source type="Download" adresse="http://prdownloads.sourceforge.net/glf/glm-0.8.3.2.zip?download">GLM 0.8.3.2 (zip, 971 KB)</source>
-      <source type="Download" adresse="http://prdownloads.sourceforge.net/glf/glm-0.8.3.2.7z?download">GLM 0.8.3.2 (7z, 405 KB)</source>
-      <source type="Link" adresse="./changelog.html">Full changelog</source>
-    </news>
-
-    <news index="0037" date="21/05/2009" title="GLM 0.8.3.1 released" image="goodies/logo.png" image-mini="image/logo-mini.png">
-      <redacteur adresse="mailto:[email protected]">Groove</redacteur>
-      <paragraph>
-        The old way to use extensions have been fixed and GLM_GTX_bit extension gets updated with more functions to manipulate bit fields.
-      </paragraph>
-      <source type="Download" adresse="http://prdownloads.sourceforge.net/glf/glm-0.8.3.1.zip?download">GLM 0.8.3.1 (zip, 954 KB)</source>
-      <source type="Download" adresse="http://prdownloads.sourceforge.net/glf/glm-0.8.3.1.7z?download">GLM 0.8.3.1 (7z, 402 KB)</source>
-      <source type="Link" adresse="./changelog.html">Full changelog</source>
-    </news>
-    
-    <news index="0036" date="06/05/2009" title="GLM 0.8.3.0 released" image="goodies/logo.png" image-mini="image/logo-mini.png">
-      <redacteur adresse="mailto:[email protected]">Groove</redacteur>
-      <paragraph>
-        This version brings to main changed: Stable extensions and a new extension system.
-      </paragraph>
-      <paragraph>
-        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!
-      </paragraph>
-      <paragraph>
-        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.
-      </paragraph>
-      <paragraph>
-        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.
-      </paragraph>
-      <source type="Download" adresse="http://prdownloads.sourceforge.net/glf/glm-0.8.3.0.zip?download">GLM 0.8.3.0 (zip, 896 KB)</source>
-      <source type="Download" adresse="http://prdownloads.sourceforge.net/glf/glm-0.8.3.0.7z?download">GLM 0.8.3.0 (7z, 359 KB)</source>
-      <source type="Link" adresse="./code.html">Code samples page</source>
-      <source type="Link" adresse="./glm-manual.pdf">Manual</source>
-      <source type="Link" adresse="./changelog.html">Full changelog</source>
-    </news>
-
-    <news index="0035" date="01/04/2009" title="GLM 0.8.2.3 released" image="goodies/logo.png" image-mini="image/logo-mini.png">
-      <redacteur adresse="mailto:[email protected]">Groove</redacteur>
-      <source type="Download" adresse="http://prdownloads.sourceforge.net/glf/glm-0.8.2.3.zip?download">GLM 0.8.2.3 (zip, 963 KB)</source>
-      <source type="Download" adresse="http://prdownloads.sourceforge.net/glf/glm-0.8.2.3.7z?download">GLM 0.8.2.3 (7z, 381 KB)</source>
-      <source type="Link" adresse="./glm-manual.pdf">Manual</source>
-      <source type="Link" adresse="./changelog.html">Full changelog</source>
-    </news>
-
-    <news index="0034" date="13/02/2009" title="GLM 0.8.2.1 released" image="goodies/logo.png" image-mini="image/logo-mini.png">
-      <redacteur adresse="mailto:[email protected]">Groove</redacteur>
-      <paragraph>
-        A new release is available and inogurate a patch number. The goal of this patch number is to release faster fixes from bug reports.
-      </paragraph>
-      <source type="Download" adresse="http://prdownloads.sourceforge.net/glf/glm-0.8.2.1.zip?download">GLM 0.8.2.1 (zip, 963 KB)</source>
-      <source type="Download" adresse="http://prdownloads.sourceforge.net/glf/glm-0.8.2.1.7z?download">GLM 0.8.2.1 (7z, 381 KB)</source>
-      <source type="Link" adresse="./glm-manual.pdf">Manual</source>
-      <source type="Link" adresse="./changelog.html">Full changelog</source>
-    </news>
-    
-    <news index="0033" date="21/01/2009" title="GLM 0.8.2 released" image="goodies/logo.png" image-mini="image/logo-mini.png">
-      <redacteur adresse="mailto:[email protected]">Groove</redacteur>
-      <paragraph>
-        This release only fixes bugs. Left sided swizzle operators, quaternion operators, vectors access operators for the main onces.
-      </paragraph>
-      <source type="Download" adresse="http://prdownloads.sourceforge.net/glf/glm-0.8.2.zip?download">GLM 0.8.2 (zip, 963 KB)</source>
-      <source type="Download" adresse="http://prdownloads.sourceforge.net/glf/glm-0.8.2.7z?download">GLM 0.8.2 (7z, 381 KB)</source>
-      <source type="Link" adresse="./glm-manual.pdf">Manual</source>
-      <source type="Link" adresse="./changelog.html">Full changelog</source>
-    </news>
-
-    <news index="0032" date="19/11/2008" title="GLM current developments" image="goodies/logo.png" image-mini="image/logo-mini.png">
-      <redacteur adresse="mailto:[email protected]">Groove</redacteur>
-      <paragraph>
-        Some artifacts have been added to the tracker to give a picture of what you could expect for the next releases.
-      </paragraph>
-      <paragraph>
-        If you need something else you can add some artifacts to the tracker. Any comment on added entries is welcome.
-      </paragraph>
-      <paragraph>
-        Furthermore, no more release of GLM 0.7.x will be done. Please upgrade to GLM 0.8.1.
-      </paragraph>
-      <paragraph>
-        Finally, a pack of programmable oriented OpenGL samples using GLM is under development and planed to be release in December.
-      </paragraph>
-      <source type="Link" adresse="https://sourceforge.net/tracker2/?group_id=129808&amp;atid=1126032">Tracker</source>
-    </news>
-
-    <news index="0031" date="30/10/2008" title="GLM 0.8.1 released" image="goodies/logo.png" image-mini="image/logo-mini.png">
-      <redacteur adresse="mailto:[email protected]">Groove</redacteur>
-      <paragraph>
-        GLM 0.8.1 is released. This new version mainly fixes 64 bit integers with GCC and various bugs.
-      </paragraph>
-      <source type="Download" adresse="http://prdownloads.sourceforge.net/glf/glm-0.8.1.zip?download">GLM 0.8.1 (zip, 938 KB)</source>
-      <source type="Download" adresse="http://prdownloads.sourceforge.net/glf/glm-0.8.1.7z?download">GLM 0.8.1 (7z, 372 KB)</source>
-      <source type="Link" adresse="./glm-manual.pdf">GLM 0.8.1 Manual</source>
-      <source type="Link" adresse="./changelog.html">Full changelog</source>
-    </news>
-
-    <news index="0030" date="23/10/2008" title="GLM 0.8.0 final released" image="image/logo.png" image-mini="image/logo-mini.png">
-      <redacteur adresse="mailto:[email protected]">Groove</redacteur>
-      <paragraph>
-        GLM 0.8.0 is released. This new version is now based on GLSL 1.30 specification which provided new functions and precision qualifiers.
-      </paragraph>
-      <paragraph>
-        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.
-      </paragraph>
-      <paragraph>
-        It involves that GLM 0.8.x is not backward compatible with GLM 0.7.x... However, an application port from GLM 0.7.x to GLM 0.8.x isn't a huge work and actually for some, it won’t be work at all.
-      </paragraph>
-      <paragraph>
-        On GLM core side, based on GLSL features, vector types can't be automatically cast to pointer anymore for code safety purposes. Vector constructors require a single scalar parameter of the exact number of components.
-      </paragraph>
-      <paragraph>
-        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.
-      </paragraph>
-      <paragraph>
-        Have a look on the manual and the changelog for more information. Don't forget to send your <link href="./about.html">feedback</link> and enjoy!
-      </paragraph>
-      <source type="Download" adresse="http://prdownloads.sourceforge.net/glf/glm-0.8.0.zip?download">GLM 0.8.0 (zip, 936 KB)</source>
-      <source type="Download" adresse="http://prdownloads.sourceforge.net/glf/glm-0.8.0.7z?download">GLM 0.8.0 (7z, 370 KB)</source>
-      <source type="Link" adresse="./glm-manual.pdf">GLM 0.8.0 Manual</source>
-      <source type="Link" adresse="./changelog.html">Full changelog</source>
-      <source type="Link" adresse="http://www.ozone3d.net/smf/index.php/topic,1682.0.html">Post a comment</source>
-    </news>
-
-    <news index="0029" date="22/10/2008" title="A Humus demo to feature GLM 0.8.0" image="image/0029.jpg" image-mini="image/0029-mini.jpg">
-      <redacteur adresse="mailto:[email protected]">Groove</redacteur>
-      <paragraph>
-        Ambient aperture lighting <link href="http://www.humus.name">Humus</link> demo have been updated to use GLM as math library.
-      </paragraph>
-      <source type="Download" adresse="http://prdownloads.sourceforge.net/glf/AmbientApertureLighting.zip?download">Updated demo + all sources (zip, 2.38 MB)</source>
-      <source type="Download" adresse="http://www.humus.name/3D/AmbientApertureLighting.zip">Original demo (zip, 1.40 MB)</source>
-      <source type="Link" adresse="http://www.ozone3d.net/smf/index.php/topic,1681.0.html">Post a comment</source>
-    </news>
-    
-    <news index="0028" date="18/10/2008" title="Webside updated" image="goodies/logo.png" image-mini="image/logo-mini.png">
-      <redacteur adresse="mailto:[email protected]">Groove</redacteur>
-      <paragraph>
-        As you can see the website get a little update to prepare GLM 0.8.0 final release.
-      </paragraph>
-      <paragraph>
-        GLM 0.8.0 final should be release during the week.
-      </paragraph>
-    </news>
-    
-    <news index="0027" date="10/10/2008" title="GLM 0.8.0 beta 3 released" image="goodies/logo.png" image-mini="image/logo-mini.png">
-      <redacteur adresse="mailto:[email protected]">Groove</redacteur>
-      <paragraph>
-        This release fixes some bugs and add few features though extensions. The development is now based on <link href="http://www.cmake.org">CMake</link> to make easier cross platform tests and project management.
-      </paragraph>
-      <source type="Download" adresse="http://prdownloads.sourceforge.net/glf/glm-0.8.0-beta3.zip?download">GLM 0.8.0 Beta 3 (zip, 819 KB)</source>
-      <source type="Download" adresse="http://prdownloads.sourceforge.net/glf/glm-0.8.0-beta3.7z?download">GLM 0.8.0 Beta 3 (7z, 345 KB)</source>
-      <source type="Link" adresse="./changelog.html">Full changelog</source>
-      <source type="Link" adresse="http://www.ozone3d.net/smf/index.php/topic,1639.0.html">Post a comment</source>
-    </news>
-    
-    <news index="0026" date="04/10/2008" title="GLM 0.8.0 beta 2 released" image="goodies/logo.png" image-mini="image/logo-mini.png">
-      <redacteur adresse="mailto:[email protected]">Groove</redacteur>
-      <paragraph>
-        This release mainly improves half float vectors support. By default the low precission vectors are based on float numbers not on half numbers
-      </paragraph>
-      <paragraph>
-        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++.
-      </paragraph>
-      <paragraph>
-        Various bugs and updates of extensions have been done too. Final release is coming...
-      </paragraph>
-      <source type="Download" adresse="http://prdownloads.sourceforge.net/glf/glm-0.8.0-beta2.zip?download">GLM 0.8.0 Beta 2 (zip, 798 KB)</source>
-      <source type="Download" adresse="http://prdownloads.sourceforge.net/glf/glm-0.8.0-beta2.7z?download">GLM 0.8.0 Beta 2 (7z, 327 KB)</source>
-      <source type="Link" adresse="./changelog.html">Full changelog</source>
-      <source type="Link" adresse="http://www.ozone3d.net/smf/index.php/topic,1639.0.html">Post a comment</source>
-    </news>
-
-    <news index="0025" date="26/09/2008" title="GLM 0.8.0 beta 1 released" image="goodies/logo.png" image-mini="image/logo-mini.png">
-      <redacteur adresse="mailto:[email protected]">Groove</redacteur>
-      <paragraph>
-        GLM have been updated to support GLSL 1.30. API documentation had significant improvements to make easier finding of GLSL functions and types.
-      </paragraph>
-      <paragraph>
-        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.
-      </paragraph>
-      <paragraph>
-        Due to the number of changes GLM 0.8.0 is release as beta first. The final release is schedule for october.
-      </paragraph>
-      <source type="Download" adresse="http://prdownloads.sourceforge.net/glf/glm-0.8.0-beta1.zip?download">GLM 0.8.0 Beta 1 (zip, 786 KB)</source>
-      <source type="Download" adresse="http://prdownloads.sourceforge.net/glf/glm-0.8.0-beta1.7z?download">GLM 0.8.0 Beta 1 (7z, 321 KB)</source>
-      <source type="Link" adresse="./changelog.html">Full changelog</source>
-      <source type="Link" adresse="http://www.ozone3d.net/smf/index.php/topic,1639.0.html">Post a comment</source>
-    </news>
-
-    <news index="0024" date="08/08/2008" title="GLM 0.7.6 released">
-      <redacteur adresse="mailto:[email protected]">Groove</redacteur>
-      <paragraph>
-        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.
-      </paragraph>
-      <source type="Download" adresse="http://prdownloads.sourceforge.net/glf/glm-0.7.6.zip?download">GLM 0.7.6 (zip, 907 KB)</source>
-      <source type="Download" adresse="http://prdownloads.sourceforge.net/glf/glm-0.7.6.7z?download">GLM 0.7.6 (7z, 387 KB)</source>
-      <source type="Link" adresse="./changelog.html">Full changelog</source>
-      <source type="Link" adresse="./glm-manual.pdf">Manual</source>
-    </news>
-
-  <news index="0023" date="05/07/2008" title="GLM 0.7.5 released">
-		<redacteur adresse="mailto:[email protected]">Groove</redacteur>
-		<paragraph>
-			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.
-		</paragraph>
-		<source type="Download" adresse="http://prdownloads.sourceforge.net/glf/glm-0.7.5.zip?download">GLM 0.7.5 (zip, 852 KB)</source>
-		<source type="Download" adresse="http://prdownloads.sourceforge.net/glf/glm-0.7.5.7z?download">GLM 0.7.5 (7z, 366 KB)</source>
-		<source type="Link" adresse="./changelog.html">Full changelog</source>
-		<source type="Link" adresse="./glm-manual.pdf">Manual</source>
-	</news>
-
-	<news index="0022" date="01/06/2008" title="GLM 0.7.4 released">
-      <redacteur adresse="mailto:[email protected]">Groove</redacteur>
-      <paragraph>
-        GLM 0.7.4 introduces a new system to manage external dependencies.
-      </paragraph>
-      <paragraph>
-        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.
-      </paragraph>
-      <paragraph>
-        The mechanism is described into the updated manual.
-      </paragraph>
-      <source type="Download" adresse="http://prdownloads.sourceforge.net/glf/glm-0.7.4.zip?download">GLM 0.7.4 (zip, 859 KB)</source>
-      <source type="Download" adresse="http://prdownloads.sourceforge.net/glf/glm-0.7.4.7z?download">GLM 0.7.4 (7z, 372 KB)</source>
-      <source type="Link" adresse="./changelog.html">Full changelog</source>
-      <source type="Link" adresse="./glm-manual.pdf">Manual</source>
-    </news>
-
-     <news index="0021" date="24/05/2008" title="GLM 0.7.3 released">
-      <redacteur adresse="mailto:[email protected]">Groove</redacteur>
-      <paragraph>
-        GLM 0.7.3 is released. This version fixes few bugs and add few extensions
-      </paragraph>
-      <source type="Download" adresse="http://prdownloads.sourceforge.net/glf/glm-0.7.3.zip?download">GLM 0.7.3 (zip, 1.8 MB)</source>
-      <source type="Download" adresse="http://prdownloads.sourceforge.net/glf/glm-0.7.3.7z?download">GLM 0.7.3 (7z, 635 KB)</source>
-      <source type="Link" adresse="./changelog.html">Full changelog</source>
-    </news>
-    
-    <news index="0020" date="27/04/2008" title="GLM 0.7.2 released">
-      <redacteur adresse="mailto:[email protected]">Groove</redacteur>
-      <paragraph>
-        GLM 0.7.2 is released. The documentation have been completed again and several issues handle with precompiler options.
-      </paragraph>
-      <paragraph>
-        #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.
-      </paragraph>
-      <paragraph>
-        #define GLM_FORCE_NO_HALF allows to include all extensions (#include "glm/glmext.h") without any support of half-precision floating-point numbers.
-      </paragraph>
-      <paragraph>
-        #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.
-      </paragraph>
-      <paragraph>
-        More information on these topic are available in GLM manual section 5 "Known issues".
-      </paragraph>
-      <source type="Download" adresse="http://prdownloads.sourceforge.net/glf/glm-0.7.2.zip?download">GLM 0.7.2 (zip, 1.8 MB)</source>
-      <source type="Download" adresse="http://prdownloads.sourceforge.net/glf/glm-0.7.2.7z?download">GLM 0.7.2 (7z, 635 KB)</source>
-      <source type="Download" adresse="./changelog.html">Full changelog</source>
-    </news>
-    
-    <news index="0019" date="24/03/2008" title="GLM 0.7.1 released">
-      <redacteur adresse="mailto:[email protected]">Groove</redacteur>
-      <paragraph>
-        GLM 0.7.1 is available under MIT license. It fixes bugs with GCC.
-      </paragraph>
-      <source type="Download" adresse="http://prdownloads.sourceforge.net/glf/glm-0.7.1.zip?download">GLM 0.7.1 (zip, 1.8 MB)</source>
-      <source type="Download" adresse="http://prdownloads.sourceforge.net/glf/glm-0.7.1.7z?download">GLM 0.7.1 (7z, 635 KB)</source>
-      <source type="Download" adresse="./changelog.html">Full changelog</source>
-    </news>
-    
-    <news index="0018" date="22/03/2008" title="GLM 0.7.0 released">
-      <redacteur adresse="mailto:[email protected]">Groove</redacteur>
-      <paragraph>
-        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!
-      </paragraph>
-      <source type="Download" adresse="http://prdownloads.sourceforge.net/glf/glm-0.7.0.zip?download">GLM 0.7.0 (zip, 1.8 MB)</source>
-      <source type="Download" adresse="http://prdownloads.sourceforge.net/glf/glm-0.7.0.7z?download">GLM 0.7.0 (7z, 635 KB)</source>
-      <source type="Download" adresse="./changelog.html">Full changelog</source>
-    </news>
-    
-		<news index="0017" date="10/12/2007" title="GLM 0.6.4 released">
-			<redacteur adresse="mailto:[email protected]">Groove</redacteur>
-			<paragraph>
-				GLM 0.6.4 is available and fixes some swizzle operator issues. 
-			</paragraph>
-			<source type="Download" adresse="http://prdownloads.sourceforge.net/glf/glm-0.6.4.zip?download">GLM 0.6.4 (zip, 1.7 MB)</source>
-			<source type="Download" adresse="http://prdownloads.sourceforge.net/glf/glm-0.6.4.7z?download">GLM 0.6.4 (7z, 612 KB)</source>
-			<source type="Download" adresse="./changelog.html">Full changelog</source>
-		</news>
-    
-		<news index="0016" date="05/11/2007" title="GLM 0.6.3 released">
-      <redacteur adresse="mailto:[email protected]">Groove</redacteur>
-      <paragraph>
-        GLM 0.6.3 fixes accesses of matrices and a 3DSMax SDK conflict.
-      </paragraph>
-      <source type="Download" adresse="http://prdownloads.sourceforge.net/glf/glm-0.6.3.zip?download">GLM 0.6.3 (zip, 1.8 MB)</source>
-      <source type="Download" adresse="http://prdownloads.sourceforge.net/glf/glm-0.6.3.7z?download">GLM 0.6.3 (7z, 633 KB)</source>
-      <source type="Download" adresse="./changelog.html">Full changelog</source>
-    </news>   
-    
-    <news index="0015" date="08/10/2007" title="GLM 0.6.2 released">
-      <redacteur adresse="mailto:[email protected]">Groove</redacteur>
-      <paragraph>
-        GLM 0.6.2 fixes an error on an extension.
-      </paragraph>
-      <source type="Download" adresse="http://prdownloads.sourceforge.net/glf/glm-0.6.2.zip?download">GLM 0.6.2 (zip, 1.8 MB)</source>
-      <source type="Download" adresse="http://prdownloads.sourceforge.net/glf/glm-0.6.2.7z?download">GLM 0.6.2 (7z, 632 KB)</source>
-      <source type="Download" adresse="./changelog.html">Full changelog</source>
-    </news>
-    
-    <news index="0014" date="07/10/2007" title="GLM 0.6.1 released">
-      <redacteur adresse="mailto:[email protected]">Groove</redacteur>
-      <paragraph>
-        GLM 0.6.1 is a minor update that fix an issue on extension namespace and add two more extensions.
-      </paragraph>
-      <source type="Download" adresse="http://prdownloads.sourceforge.net/glf/glm-0.6.1.zip?download">GLM 0.6.1 (zip, 1.8 MB)</source>
-      <source type="Download" adresse="http://prdownloads.sourceforge.net/glf/glm-0.6.1.7z?download">GLM 0.6.1 (7z, 632 KB)</source>
-      <source type="Download" adresse="./changelog.html">Full changelog</source>
-    </news>
-    
-    <news index="0013" date="16/09/2007" title="GLM 0.6.0 released">
-			<redacteur adresse="mailto:[email protected]">Groove</redacteur>
-			<paragraph>
-				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.
-			</paragraph>
-			<source type="Download" adresse="http://prdownloads.sourceforge.net/glf/glm-0.6.0.zip?download">GLM 0.6.0 (zip, 1.8 MB)</source>
-			<source type="Download" adresse="http://prdownloads.sourceforge.net/glf/glm-0.6.0.7z?download">GLM 0.6.0 (7z, 666 KB)</source>
-			<source type="Download" adresse="http://prdownloads.sourceforge.net/glf/raytrace-v1.0.exe?download">Raytracer v1.0 (exe)</source>
-			<source type="Download" adresse="http://prdownloads.sourceforge.net/glf/raytrace-v1.0.zip?download">Raytracer v1.0 (zip)</source>
-			<source type="Download" adresse="./changelog.html">Full changelog</source>
-		</news>
-    
-		<news index="0012" date="19/02/2007" title="GLM 0.5.1 released">
-			<redacteur adresse="mailto:[email protected]">Groove</redacteur>
-			<paragraph>
-				This release fixes some issues with swizzle operators.
-			</paragraph>
-    		<source type="Download" adresse="http://prdownloads.sourceforge.net/glf/glm-0.5.1.zip?download">GLM 0.5.1 (zip, 2.3 MB)</source>
-    		<source type="Download" adresse="http://prdownloads.sourceforge.net/glf/glm-0.5.1.7z?download">GLM 0.5.1 (7z, 789 KB)</source>
-		</news>
-    
-		<news index="0011" date="26/01/2007" title="Cattmull Clark subdivision sample">
-			<redacteur adresse="mailto:[email protected]">Groove</redacteur>
-			<paragraph>
-				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 <link href="http://prideout.net">Philip Rideout</link>.
-			</paragraph>
-    		<source type="Download" adresse="http://prdownloads.sourceforge.net/glf/CatmullClark.zip?download">CatmullClark sample (zip, 605 KB)</source>
-		</news>
-    
-		<news index="0010" date="06/01/2007" title="GLM 0.5.0 released">
-			<redacteur adresse="mailto:[email protected]">Groove</redacteur>
-			<paragraph>
-				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. 
-			</paragraph>
-			<paragraph>
-				It includes some new extensions to extend GLSL features but they remain experimental. The next release should provide the first stable extensions. 
-			</paragraph>
-			<paragraph>
-				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. 
-			</paragraph>
-			<paragraph>
-				Now, GLM development is taking advantages of <link href="http://www.sf.net">SourceForge.net</link> services: a <link href="https://sourceforge.net/tracker/?group_id=129808&amp;atid=901445">bug tracker system</link> and the development source code is publicly available on <link href="https://svn.sourceforge.net/svnroot/glf">SF.net SVN server</link>.
-			</paragraph>
-    		<source type="Download" adresse="http://prdownloads.sourceforge.net/glf/glm-0.5.0.zip?download">GLM 0.5.0 (zip, 2.4 MB)</source>
-    		<source type="Download" adresse="http://prdownloads.sourceforge.net/glf/glm-0.5.0.7z?download">GLM 0.5.0 (7z, 843 KB)</source>
-    		<source type="Download" adresse="http://prdownloads.sourceforge.net/glf/raytrace-b3.0.exe?download">Raytracer b3.0 (exe, 751 KB)</source>
-    		<source type="Download" adresse="http://prdownloads.sourceforge.net/glf/raytrace-b3.0.zip?download">Raytracer b3.0 (zip, 1.1 MB)</source>
-		</news>
-    
-		<news index="0009" date="22/05/2006" title="GLM 0.4.1 released">
-			<redacteur adresse="mailto:[email protected]">Groove</redacteur>
-			<paragraph>
-				A GLM update is available. It simply includes some examples for a sweet start with GLM. 
-			</paragraph>
-			<paragraph>
-				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. 
-			</paragraph>
-    		<source type="Download" adresse="http://prdownloads.sourceforge.net/glf/glm-0.4.1.zip?download">GLM 0.4.1 (zip, 1.6 MB)</source>
-    		<source type="Download" adresse="http://prdownloads.sourceforge.net/glf/glm-0.4.1.7z?download">GLM 0.4.1 (7z, 521 KB)</source>
-		</news>
-    
-		<news index="0008" date="17/05/2006" title="GLM 0.4.0 released">
-			<redacteur adresse="mailto:[email protected]">Groove</redacteur>
-			<paragraph>
-				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.
-			</paragraph>
-			<paragraph>
-				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.
-			</paragraph>
-    		<source type="Download" adresse="http://prdownloads.sourceforge.net/glf/glm-0.4.0.zip?download">GLM 0.4.0</source>
-		</news>
-    
-		<news index="0007" date="23/04/2006" title="Roadmap for the years">
-			<redacteur adresse="mailto:[email protected]">Groove</redacteur>
-			<paragraph>
-				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.
-			</paragraph>
-			<paragraph>
-				Version 0.5 will integrate GLSL 1.2 features to GLM core.
-			</paragraph>
-			<paragraph>
-				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;).
-			</paragraph>
-		</news>
-    
-		<news index="0006" date="22/04/2006" title="GLM 0.3.2 released">
-			<redacteur adresse="mailto:[email protected]">Groove</redacteur>
-			<paragraph>
-				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.
-			</paragraph>
-    		<source type="Download" adresse="http://prdownloads.sourceforge.net/glf/glm-0.3.2.zip?download">GLM 0.3.2</source>
-		</news>
-    
-		<news index="0005" date="28/03/2006" title="GLM 0.3.1 released">
-			<redacteur adresse="mailto:[email protected]">Groove</redacteur>
-			<paragraph>
-				This update adds GCC 4.0 support for MacOS X and Linux and GCC 4.1 under Linux. Also, its provides some optimisations.
-			</paragraph>
-			<paragraph>
-				Further release will prodive GLSL 1.2 compliances.
-			</paragraph>
-    		<source type="Download" adresse="http://prdownloads.sourceforge.net/glf/glm-0.3.1.zip?download">GLM 0.3.1</source>
-		</news>
-    
-		<news index="0004" date="19/02/2006" title="GLM 0.3 released">
-			<redacteur adresse="mailto:[email protected]">Groove</redacteur>
-			<paragraph>
-				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.
-			</paragraph>
-			<paragraph>
-				This new release have been tested under Visual C++ 7.1, Visual C++ 8.0, GCC 3.2.3 et GCC 3.4.2.
-			</paragraph>
-    		<source type="Download" adresse="http://prdownloads.sourceforge.net/glf/glm-0.3.zip?download">GLM 0.3</source>
-    		<source type="Download" adresse="http://prdownloads.sourceforge.net/glf/raytrace-b2.0.zip?download">Raytrace</source>
-    		<source type="Documentation" adresse="../html/index.html">Online documentation</source>
-		</news>
-    
-		<news index="0003" date="06/05/2005" title="GLM 0.2 released">
-			<redacteur adresse="mailto:[email protected]">Groove</redacteur>
-			<paragraph>
-				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.
-			</paragraph>
-			<paragraph>
-				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.
-			</paragraph>
-			<paragraph>
-				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.
-			</paragraph>
-		</news>
-    
-		<news index="0002" date="04/05/2005" title="English pages">
-			<redacteur adresse="mailto:[email protected]">Groove</redacteur>
-			<paragraph>
-				The english section of this site is now available.
-			</paragraph>
-		</news>
-    
-		<news index="0001" date="21/02/2005" title="GLM 0.1 is available">
-			<redacteur adresse="mailto:[email protected]">Groove</redacteur>
-			<paragraph>
-				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.
-			</paragraph>
-			<paragraph>
-				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".
-			</paragraph>
-			<paragraph>
-				This project is multi platform and was successfully tested under Visual C++ 7.1, MinGW 3.4 and GCC 3.4.
-			</paragraph>
-    		<source type="Download" adresse="http://prdownloads.sourceforge.net/glf/glm-0.1-ur.zip?download">GLM 0.1 User Release</source>
-    		<source type="Download" adresse="http://prdownloads.sourceforge.net/glf/glm-0.1-uc.zip?download">GLM 0.1 Contributor Release</source>
-    		<source type="Documentation" adresse="http://oss.sgi.com/projects/ogl-sample/registry/ARB/GLSLangSpec.Full.1.10.59.pdf">GLSL 1.10.59 specifications</source>
-		</news>
-	</page_news>
-
-  <codes>
-    <code index="0001" date="06/05/2009" title="Compute face normals">
-      <image-list>
-        <image-element title="Compute face normals" small="./code/01.png" normal="./code/01.png" />
-      </image-list>
-    </code>
-    <code index="0002" date="06/05/2009" title="OpenGL render">
-      <image-list>
-        <image-element title="Compute face normals" small="./code/02.png" normal="./code/02.png" />
-      </image-list>
-    </code>
-    <code index="0003" date="06/05/2009" title="Point light computation">
-      <image-list>
-        <image-element title="Compute face normals" small="./code/03.png" normal="./code/03.png" />
-      </image-list>
-    </code>
-  </codes>
-
-  <links>
-		<link name="OpenGL.org" link="http://www.opengl.org">
-			OpenGL's Official site. You would find OpenGL specifications, news and tons of related informations.
-		</link>
-		<link name="OpenGL Registry" link="http://www.opengl.org/registry/">
-			This page contains all OpenGL extensions specifications.
-		</link>
-		<link name="OpenGL 2.0 Specification" link="http://www.opengl.org/registry/doc/glspec21.20061201.pdf">
-			This page contains OpenGL 2.0 specifications.
-		</link>
-		<link name="OpenGL Shading Language Specification" link="http://www.opengl.org/registry/doc/GLSLangSpec.Full.1.20.8.pdf">
-			This page contains OpenGL Shading Language Specification.
-		</link>
-		<!--link name="How to create extensions ?" link="http://oss.sgi.com/projects/ogl-sample/registry/doc/rules.html">
-			This document explains how to create an OpenGL extension.
-		</link>
-		<link name="Extension template" link="http://oss.sgi.com/projects/ogl-sample/registry/doc/template.txt">
-			A commented support of extensions specifications.
-		</link>
-		<link name="Extension example" link="http://oss.sgi.com/projects/ogl-sample/registry/doc/fog_coord.txt">
-			A reference example for extensions specification.
-		</link>
-		<link name="OpenGL syntax rules" link="http://oss.sgi.com/projects/ogl-sample/registry/doc/syntaxrules.txt">
-			This document explains the OpenGL API syntax rules. It also includes all the abbreviations.
-		</link-->
-		<link name="GLSL Extension conventions" link="http://oss.sgi.com/projects/ogl-sample/registry/doc/GLSLExtensionRules.txt">
-			This document lists all the conventions for writing GLSL extensions. These rules are the basics of the GLM extensions system.
-		</link>
-	</links>
-	<issues>
-		<issue number="10" title="Several useful tools are missing in GLSL, is this possible to add them ?" statue="Partially resolved" date="2005-03-21">
-			<entry title="DISCUTION">GLSL is not the ultimate mathematics library, i.e. for matrices operations, specs are very restricted. There aren't any functions to get the determinant, inverse, or a matrix transpose. Moreover, there are a few vector types and no quaternions.</entry>
-			<entry title="PROPOSAL">What about completing the missing features using the extensions ? It will be developed from GLSL conventions and may add for exemple the extension GLM_GTX_quaternion, defining __quatGT type and conjugateGT function.</entry>
-			<entry title="PROPOSAL">Extensions may be available through a separate file called glmext.h instead of being directly into the library core file.</entry>
-			<entry title="PROPOSAL">It would be interesting to suggest GLM extensions implementations directly in GLSL to increase portability. It may hopefully end by submitting extensions to ARB.</entry>
-		</issue>
-		<issue number="9" title="Should GLM be included into a namespace ?" statue="Unresolved" date="2005-02-18">
-			<entry title="DISCUTION">The use of a namespace allows to prevenf from any name collision problem with other libraries like STL. GLSL uses a reserved 'namespace' keyword but does not define it. OpenGL uses a C technic for the namespaces management with the 'gl' prefix. What name should we give to this namespace ? 'gl', 'glsl', 'glm' or 'sl' ? What is the best solution ? C-like or C++-like namespaces ?</entry>
-			<entry title="DISCUTION">Bug #3 says that 'not' is a C++ keyword. C-style namespaces use would resolves this bug but GLSL has been built from C upon a C++ logic.</entry>
-		</issue>
-		<issue number="8" title="Could the OpenGL API be considered ?" statue="Resolved" date="2005-03-04">
-			<entry title="DISCUTION">The interaction with OpenGL is not the purpose of GLM. However, GLM should be easily usable with OpenGL and some features could be welcome. i.e., using vec3 type with Vertex3fv function should simplify and optimize the program. Eventually, semantically speaking, vec3 is more accurate and stronger than addressing on a potential 3 floats table.</entry>
-			<entry title="RESOLUTION">If it is possible to make easy the interoperability between GLM and OpenGL, then this work is recommended if semantic stays correct. GLM must also remain independent towards OpenGL.</entry>
-		</issue>
-		<issue number="7" title="How to consider reserved keywords ?" statue="Partially resolved" date="2005-01-26">
-			<entry title="DISCUTION">GLSL specifications include unimplemented reserved keywords list. Their use must return an error. Some of them already exist in C++.</entry>
-			<entry title="RESOLUTION">GLM can only allow C++ reserved keywords. The others must be undefined so the compiler returns an error.</entry>
-		</issue>
-		<issue number="6" title="How to manage GLSL qualifiers  ?" statue="Partially resolved" date="2005-03-04">
-			<entry title="DISCUTION">GLSL defines six variable qualifiers types : const, varying, uniform, attrib, in, out, inout.</entry>
-			<entry title="RESOLUTION">'const' variables are only usable in a local way into a shader. They are available for vertex and fragments shaders. GLSL's 'const' are similar to C++ 'static const', i.e. the variable only exists inside a compilation unit (.o files with GCC).</entry>
-			<entry title="RESOLUTION">'varying' variables offer a communication interface between vertex and fragment sahder. 'uniform' and 'attrib' variables are a way of communication between C/C++ program and shaders, so 'varying' are useless in the C++ program; so this qualifier is not allowed.</entry>
-			<entry title="SUGGESTION">Some programmers are already using 'in', 'ou' and 'inout' qualifiers for semantic purpose. They define them as empty '#define'.</entry>
-			<entry title="DISCUTION">It seems difficult to keep the same syntax than GLSL for 'uniform' and 'attrib' variables although this notion seems interesting. Why not keeping it only for their semantic properties ?</entry>
-		</issue>
-		<issue number="5" title="Should integrated variables be considered ?" statue="Resolved" date="2005-01-13">
-			<entry title="SUGGESTION">All integrated variables matches with OpenGL state variables. So there are all accessible from the OpenGL API.</entry>
-		</issue>
-		<issue number="4" title="Should sampler* types be considered ?" statue="Resolved" date="2005-03-05">
-			<entry title="DISCUTION">smapler* types come from GL_ARB_multitexure extension. Values matches with a texture unit.</entry>
-			<entry title="SUGGESTION">A sampler type would offer an additionnal semantic value.</entry>
-			<entry title="SUGGESTION">No, this is not the GLM objective.</entry>
-		</issue>
-		<issue number="3" title="How to manage specific access to *vec* types components ?" statue="Unresolved" date="2005-01-22">
-			<entry title="DISCUTION">GLSL allows several components to be accessed at the same time. Moreover, GLSL let the possibility to the user to order components as he wants. To implement such a possibility, 4² * 3 * 2 = 96 fuctions should be added for vec4 type, for example (components number : 4, access types : 3, readonly access and write access : 2).</entry>
-			<entry title="RESOLUTION">A solution witch reach GLSL conformance have been found. However it need lot of functions. This feature is coming in a futur release.</entry>
-		</issue>
-		<issue number="2" title="How to access to *vec* type components ?" statue="Closed" date="2005-01-15">
-			<entry title="DISCUTION">GLSL allows an access to a component with many different names, that explains the component notion. i.e. the first vec3 component is accessible with .x, .r, .s.</entry>
-			<entry title="PROPOSAL">A possibility would be creating three functions for each component.</entry>
-			<entry title="PROPOSAL">Another would be using the keyword 'union'.</entry>
-			<entry title="RESOLUTION">The first solution allows to keep components values in a private classes table, but in this case, the overloaded operator [] must be used to access values and/or functions per component that is not conform to GLSL specifications. The second respect GLSL rules but components are public. In this case, this is not a real problem so this second solution is kept.</entry>
-		</issue>
-		<issue number="1" title="How to consider dedicated functions to fragment shaders and ftransform function ?" statue="Closed" date="2005-01-12">
-			<entry title="RESOLUTION">GLSL specifications tell that 'fragment processing functions' are only available for fragment shaders and function ftransform is only available for vertex shaders. The C/C++ program must be considered as a third program type so this functions are not available.</entry>
-		</issue>
-	</issues>
-	<bugs>
-		<bug number="3" title="_xvec* class data and ISO C++ standard non compliance" statue="Resolved" date="2005-02-15">
-			<entry title="DISCUTION">'union' keyword is here to allow access to vector components with several different variables names. Moreover, templates are also used to create two vector type categories : _vec* and _ivec*. Eventually, anonymous structures are not allowed in ISO C++ norm.</entry>
-			<entry title="DISCUTION">Problem might come from the lack of supporting both templates and unions from Visual C++ 7.1.</entry>
-			<entry title="RESOLUTION">If -pedantic isn't used with G++, then code compiles correctly. As we are waiting for a better compromise, the code stays that way. As notified for the bug #4, the ultimate solution might be to avoid templates in vector definition.</entry>
-		</bug>
-		<bug number="2" title="'not' is a GCC keyword" statue="Partly resolved" date="2005-03-03">
-			<entry title="DISCUTION">GCC supports all C++ keywords that includes 'not', which is equivalent to '!' operator. So there is a problem with GLM because GLSL defines the 'not' function.</entry>
-			<entry title="PROPOSITION">Overloading the '!' operator or the 'not' keyword we can partly resolve the problem but leaving as ignored the GLM namespace concept. If the source code contains 'glm:not' string, then GCC gives an error.</entry>
-			<entry title="PROPOSITION">'not' is a C++ keyword so GLM mustn't define a 'not' function. However, all the compilers don't support this keyword (VC7.1). Does this name has to be changed ? For now, it is recommended to avoid using 'not'.</entry>
-		</bug>
-		<bug number="1" title="*vec* doesn't allow multiple components selection." statue="Unresolved" date="2005-01-30">
-			<entry title="DISCUTION">The GLSL specifications grant access to multiple components for vector types. i.e. with GLSL the following lines are correct : vec3 MyVector = vec4(1.0, 1.0, 1.0, 0.0).xyz.</entry>
-			<entry title="DISCUTION">It seems difficult to create an equal feature in C++ because 'x', 'y', and 'z' according to the previous example can be sorted in any order and be repeated from zero to four to a max of four components.</entry>
-		</bug>
-	</bugs>
-
-  <about-long date=" " title=" ">
-    <paragraph>
-      OpenGL Mathematics (GLM) is a C++ mathematics library for 3D software based on the OpenGL Shading Language (GLSL) specification.
-    </paragraph>
-    <paragraph>
-      The goal of the project is to provide to 3D programmers math classes and functions that miss in C++ when we use to program with GLSL or any high level GPU language. With GLM, the idea is to have a library that works the same way that GLSL which imply a strict following of GLSL specification for the implementation.
-    </paragraph>
-    <paragraph>
-      However, this project isn't limited by GLSL features. An extension system allows to extend GLSL capabilities. It allows GLM to be a great subtitute for some OpenGL 3 deprecated functions, to work following a clean programmable approach.
-    </paragraph>
-    <paragraph>
-      GLM is release under <link href="./copying.txt">MIT license</link> and available for all version of GCC from version 3.4 and Visual Studio from version 8.0 as a platform independent library.
-    </paragraph>
-    <paragraph>
-      You can checkout SVN development sources from <link href="https://glf.svn.sourceforge.net/svnroot/glf/Trunk/glm/">https://glf.svn.sourceforge.net/svnroot/glf/Trunk/glm/</link>.
-    </paragraph>
-  </about-long>
-
-  <about-short>
-    <element>GLSL + Optional features = OpenGL Mathematics (GLM).</element>
-    <element>A C++ mathematics library for 3D graphics.</element>
-  </about-short>
-
-  <goodies>
-    <goodie date="16/10/2008" title="GLM Logo" image="goodies/logo.png" image-mini="image/logo-mini.png">
-      <paragraph>
-      </paragraph>
-      <source type="Download" adresse="./goodies/logo2560x1600.png">2560x1600</source>
-      <source type="Download" adresse="./goodies/logo1920x1200.png">1920x1200</source>
-      <source type="Download" adresse="./goodies/logo1600x1000.png">1600x1000</source>
-      <source type="Download" adresse="./goodies/logo1280x0800.png">1280x0800</source>
-      <source type="Download" adresse="./goodies/logo1024x0640.png">1024x0640</source>
-    </goodie>
-    <goodie date="16/10/2008" title="GLM Font" image="goodies/font.png" image-mini="image/font-mini.png">
-      <paragraph>
-      </paragraph>
-      <source type="Download" adresse="./goodies/tenby-five.otf">Font (.otf)</source>
-    </goodie>
-  </goodies>
-    
-  <menu>
-    <menu-group name="Main">
-      <menu-entry name="News" href="./index.html" />
-      <menu-entry name="About" href="./about.html" />
-      <menu-entry name="Downloads" href="./download.html" />
-      <menu-entry name="Changelog" href="./changelog.html" />
-      <menu-entry name="Goodies" href="./goodies.html" />
-    </menu-group>
-
-    <menu-group name="Documentation">
-      <menu-entry name="GLM Manual" href="./glm-manual.pdf" />
-      <menu-entry name="GLM API" href="./html/index.html" />
-      <menu-entry name="Code samples" href="./code.html" />
-      <menu-entry name="GLSL Specification" href="http://www.opengl.org/registry/doc/GLSLangSpec.1.50.11.pdf" />
-      <menu-entry name="OpenGL.org Toolkits forum" href="http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=postlist&amp;Board=10&amp;page=1" />
-      <!--menu-entry name="Usage" href="./usage.html" /-->
-    </menu-group>
-
-    <menu-group name="Developer">
-      <!--menu-entry name="Contribute" href="./contribute.html" /-->
-      <menu-entry name="Browse SVN" href="https://sourceforge.net/apps/trac/glf/browser/Trunk/glm" />
-      <menu-entry name="Tracker" href="https://sourceforge.net/apps/trac/glf/query?group=status&amp;component=GLM" />
-    </menu-group>
-
-    <menu-link>
-      <menu-pic name="G-Truc" image="./common/g-truc.jpg" href="http://www.g-truc.net" />
-      <menu-pic name="SourceForge" image="./common/sourceforge.gif" href="http://www.sourceforge.net" />
-      <menu-pic name="OpenGL" image="./common/opengl.jpg" href="http://www.opengl.org" />
-    </menu-link>
-  </menu>
-
-</glm>

+ 0 - 78
doc/src/download.xsl

@@ -1,78 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-  <xsl:output method="html" media-type="text/html; charset=ISO-8859-1" />
-
-  <xsl:include href="./util.xsl" />
-
-  <xsl:template match="/">
-    <html>
-      <head>
-        <title>OpenGL Mathematics : Downloads</title>
-        <meta http-equiv="Content-Language" content="en" />
-        <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=iso-8859-1" />
-        <meta name="copyright" content="G-Truc Creation" />
-        <link href="./common/style.css" rel="stylesheet" media="screen, print, embossed" type="text/css" />
-      </head>
-      <body>
-        <table>
-          <tr>
-            <td class="menu">
-              <xsl:apply-templates select="./glm/menu" />
-            </td>
-            <td class="page">
-              <div class="title1">
-                <img src="./common/title.png" alt="OpenGL Mathematics" />
-              </div>
-              <xsl:apply-templates select="./glm/about-short" />
-              <br />
-              <div>
-                <div class="title4">Current release</div>
-                <xsl:apply-templates select="./download" />
-              </div>
-              <div class="issue-content">
-                <xsl:value-of select="/glm/downloads/section/download/@date"/>:
-                <a href="{/glm/downloads/section/download/@link}">
-                  <xsl:value-of select="/glm/downloads/section/download/@name" />
-                </a>
-                (<xsl:value-of select="/glm/downloads/section/download/@size"/>)
-              </div>
-              <div class="news-separator">_________________</div>
-              <br />
-              <xsl:apply-templates select="./glm/downloads/section" />
-
-              <div class="email">
-                <img src="./common/email.png" alt="email not available as text" />
-              </div>
-              <div class="news-separator">_________________</div>
-              <br />
-              <div class="title3">
-                <xsl:value-of select="./glm/@copyright" />
-                <a href="http://www.g-truc.net">G-Truc Creation</a>
-              </div>
-            </td>
-          </tr>
-        </table>
-      </body>
-    </html>
-  </xsl:template>
-
-  <xsl:template match="section">
-    <div>
-      <div class="title4">
-        <xsl:value-of select="./@name"/>
-      </div>
-      <xsl:apply-templates select="./download" />
-    </div>
-    <div class="news-separator">_________________</div>
-    <br />
-  </xsl:template>
-
-  <xsl:template match="download">
-    <div class="issue-content">
-      <xsl:value-of select="./@date"/>: <a href="{./@link}">
-        <xsl:value-of select="./@name"/>
-      </a> (<xsl:value-of select="./@size"/>)
-    </div>
-  </xsl:template>
-
-</xsl:stylesheet>

+ 0 - 4
doc/src/dummy.cpp

@@ -1,4 +0,0 @@
-int main()
-{
-
-}

+ 0 - 79
doc/src/goodies.xsl

@@ -1,79 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-  <xsl:output method="html" media-type="text/html; charset=ISO-8859-1" />
-
-  <xsl:include href="./util.xsl" />
-
-  <xsl:template match="/">
-    <html>
-      <head>
-        <title>OpenGL Mathematics: Goodies</title>
-        <meta http-equiv="Content-Language" content="en" />
-        <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=iso-8859-1" />
-        <meta name="copyright" content="G-Truc Creation" />
-        <link href="./common/style.css" rel="stylesheet" media="screen, print, embossed" type="text/css" />
-      </head>
-      <body>
-        <table>
-          <tr>
-            <td class="menu">
-              <xsl:apply-templates select="./glm/menu" />
-            </td>
-            <td class="page">
-              <div class="title1">
-                <img src="./common/title.png" alt="OpenGL Mathematics" />
-              </div>
-              <xsl:apply-templates select="./glm/about-short" />
-              <br />
-              <xsl:apply-templates select="./glm/goodies/goodie" />
-
-              <div class="email">
-                <img src="./common/email.png" alt="email not available as text" />
-              </div>
-              <div class="news-separator">_________________</div>
-              <br />
-              <div class="title3">
-                <xsl:value-of select="./glm/@copyright" />
-                <a href="http://www.g-truc.net">G-Truc Creation</a>
-              </div>
-            </td>
-          </tr>
-        </table>
-      </body>
-    </html>
-  </xsl:template>
-
-  <xsl:template match="goodie">
-    <div>
-      <div class="title-date">
-        <xsl:value-of select="./@date" />
-      </div>
-      <div class="title4">
-        <xsl:value-of select="./@title" />
-      </div>
-      <div>
-        <table style="width:100%;">
-          <tr style="width:100%;">
-            <td>
-              <xsl:if test="./paragraph">
-                <xsl:apply-templates select="./paragraph" />
-              </xsl:if>
-              <xsl:if test="./list">
-                <xsl:apply-templates select="./list" />
-              </xsl:if>
-              <xsl:apply-templates select="./source" />
-            </td>
-            <td style="text-align:right;">
-              <a ref="{./@image}">
-                <img src="{./@image-mini}" alt=" " />
-              </a>
-            </td>
-          </tr>
-        </table>
-      </div>
-      <div class="news-separator">_________________</div>
-      <br />
-    </div>
-  </xsl:template>
-
-</xsl:stylesheet>

+ 0 - 120
doc/src/issue.xsl

@@ -1,120 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-  <xsl:output method="html" media-type="text/html; charset=ISO-8859-1" />
-
-  <xsl:include href="./util.xsl" />
-
-  <xsl:template match="/">
-    <html>
-      <head>
-        <title>OpenGL Mathematics : Issues</title>
-        <meta http-equiv="Content-Language" content="fr, be, ca, lu, ch" />
-        <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=iso-8859-1" />
-        <meta name="copyright" content="&#65533; 2005 C-Truc Creation" />
-        <link href="./common/style.css" rel="stylesheet" media="screen, print, embossed" type="text/css" />
-      </head>
-      <body>
-        <div class="title1">
-          <img src="./common/title.png" alt="OpenGL Mathematics" />
-        </div>
-        <table>
-          <tr>
-            <td class="menu">
-              <div class="menu1">
-                <a class="menu" href="./glm/downloads/section/download/@link">
-                  Download <xsl:value-of select="./glm/downloads/section/download/@name" />
-                </a>
-              </div>
-              <hr />
-              <div class="menu2">
-                <a class="menu" href="./index.html">News</a>
-              </div>
-              <div class="menu2">
-                <a class="menu" href="./download.html">Downloads</a>
-              </div>
-              <div class="menu2">
-                <a class="menu" href="./changelog.html">Changelog</a>
-              </div>
-              <div class="menu2">
-                <a class="menu" href="./glm-manual.pdf">User manual</a>
-              </div>
-              <div class="menu2">
-                <a class="menu" href="./html/index.html">API Documentation</a>
-              </div>
-              <div class="menu2">
-                <a class="menu" href="http://glf.svn.sourceforge.net/viewvc/glf">SVN Browse</a>
-              </div>
-              <div class="menu2">
-                <a class="menu" href="https://sourceforge.net/tracker/?group_id=129808&amp;atid=901445">Bug tracker</a>
-              </div>
-              <div class="menu2">
-                <a class="menu" href="https://sourceforge.net/tracker/?group_id=129808&amp;atid=715891">Feature requests</a>
-              </div>
-              <div class="menu2">
-                <a class="menu" href="./link.html">Links</a>
-              </div>
-              <hr />
-              <div class="menu2">
-                <a href="http://validator.w3.org/check/referer">
-                  <img class="menu-img" src="http://www.w3.org/Icons/valid-xhtml11" alt="Valid XHTML 1.1!" />
-                </a>
-              </div>
-              <div class="menu2">
-                <a href="http://www.opengl.org">
-                  <img class="menu-img" src="./common/opengl.jpg" alt="OpenGL"/>
-                </a>
-              </div>
-              <div class="menu2">
-                <a href="http://www.sourceforge.net">
-                  <img class="menu-img" src="./common/sourceforge.gif" alt="SourceForge"/>
-                </a>
-              </div>
-              <div class="menu2">
-                <a href="http://www.g-truc.net">
-                  <img class="menu-img" src="./common/g-truc.jpg" alt="G-Truc"/>
-                </a>
-              </div>
-              <hr />
-            </td>
-            <td class="page">
-              <xsl:apply-templates select="./glm/issues" />
-            </td>
-          </tr>
-        </table>
-        <div class="title3">
-          <xsl:value-of select="./glm/@copyright" />
-          <a href="http://www.g-truc.net">G-Truc Creation</a>
-        </div>
-      </body>
-    </html>
-  </xsl:template>
-
-  <xsl:template match="issues">
-    <div>
-      <div class="title2">Problématiques</div>
-      <br />
-      <xsl:apply-templates select="./issue" />
-    </div>
-  </xsl:template>
-
-  <xsl:template match="issue">
-    <div class="issue-title">
-      <xsl:value-of select="./@number"/>) <xsl:value-of select="./@title"/><br />
-    </div>
-    <div>
-      <xsl:apply-templates select="./entry" />
-      <br />
-      <div class="issue-content">
-        STATUE : <xsl:value-of select="./@statue"/>, <xsl:value-of select="./@date"/>
-      </div>
-    </div>
-    <br />
-  </xsl:template>
-
-  <xsl:template match="entry">
-    <div class="issue-content">
-      <xsl:value-of select="./@title"/>: <xsl:value-of select="."/>
-    </div>
-  </xsl:template>
-
-</xsl:stylesheet>

+ 0 - 115
doc/src/link.xsl

@@ -1,115 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-  <xsl:output method="html" media-type="text/html; charset=ISO-8859-1" />
-
-  <xsl:include href="./util.xsl" />
-
-  <xsl:template match="/">
-    <html>
-      <head>
-        <title>OpenGL Mathematics : Links</title>
-        <meta http-equiv="Content-Language" content="fr, be, ca, lu, ch" />
-        <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=iso-8859-1" />
-        <meta name="copyright" content="&#65533; 2005 C-Truc Creation" />
-        <link href="./common/style.css" rel="stylesheet" media="screen, print, embossed" type="text/css" />
-      </head>
-      <body>
-        <div class="title1">
-          <img src="./common/title.png" alt="OpenGL Mathematics" />
-        </div>
-        <table>
-          <tr>
-            <td class="menu">
-              <div class="menu1">
-                <a class="menu" href="./glm/downloads/section/download/@link">
-                  Download <xsl:value-of select="./glm/downloads/section/download/@name" />
-                </a>
-              </div>
-              <hr />
-              <div class="menu2">
-                <a class="menu" href="./index.html">News</a>
-              </div>
-              <div class="menu2">
-                <a class="menu" href="./download.html">Downloads</a>
-              </div>
-              <div class="menu2">
-                <a class="menu" href="./changelog.html">Changelog</a>
-              </div>
-              <div class="menu2">
-                <a class="menu" href="./glm-manual.pdf">User manual</a>
-              </div>
-              <div class="menu2">
-                <a class="menu" href="./html/index.html">API Documentation</a>
-              </div>
-              <div class="menu2">
-                <a class="menu" href="http://glf.svn.sourceforge.net/viewvc/glf">SVN Browse</a>
-              </div>
-              <div class="menu2">
-                <a class="menu" href="https://sourceforge.net/tracker/?group_id=129808&amp;atid=901445">Bug tracker</a>
-              </div>
-              <div class="menu2">
-                <a class="menu" href="https://sourceforge.net/tracker/?group_id=129808&amp;atid=715891">Feature requests</a>
-              </div>
-              <div class="menu2">
-                <a class="menu" href="./link.html">Links</a>
-              </div>
-              <hr />
-              <div class="menu2">
-                <a href="http://validator.w3.org/check/referer">
-                  <img class="menu-img" src="http://www.w3.org/Icons/valid-xhtml11" alt="Valid XHTML 1.1!" />
-                </a>
-              </div>
-              <div class="menu2">
-                <a href="http://www.opengl.org">
-                  <img class="menu-img" src="./common/opengl.jpg" alt="OpenGL"/>
-                </a>
-              </div>
-              <div class="menu2">
-                <a href="http://www.sourceforge.net">
-                  <img class="menu-img" src="./common/sourceforge.gif" alt="SourceForge"/>
-                </a>
-              </div>
-              <div class="menu2">
-                <a href="http://www.g-truc.net">
-                  <img class="menu-img" src="./common/g-truc.jpg" alt="G-Truc"/>
-                </a>
-              </div>
-              <hr />
-            </td>
-            <td class="page">
-              <xsl:apply-templates select="./glm/links" />
-            </td>
-          </tr>
-        </table>
-        <div class="title3">
-          <xsl:value-of select="./glm/@copyright" />
-          <a href="http://www.g-truc.net">G-Truc Creation</a>
-        </div>
-      </body>
-    </html>
-  </xsl:template>
-
-  <xsl:template match="links">
-    <div>
-      <div class="title2">Liens</div>
-      <div class="issue-content">
-        This page lists all the documents that helped to develop OpenGL Mathematics.
-      </div>
-      <br />
-      <xsl:apply-templates select="./link" />
-    </div>
-  </xsl:template>
-
-  <xsl:template match="link">
-    <div class="issue-title">
-      <a href="{./@link}">
-        <xsl:value-of select="./@name"/>
-      </a>
-    </div>
-    <div class="issue-content">
-      <xsl:value-of select="."/>
-    </div>
-    <br />
-  </xsl:template>
-
-</xsl:stylesheet>

+ 0 - 81
doc/src/news.xsl

@@ -1,81 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-  <xsl:output method="html" media-type="text/html; charset=ISO-8859-1" />
-
-  <xsl:include href="./util.xsl" />
-
-  <xsl:template match="/">
-    <html>
-      <head>
-        <title>OpenGL Mathematics: News</title>
-        <meta http-equiv="Content-Language" content="en" />
-        <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=iso-8859-1" />
-        <meta name="copyright" content="G-Truc Creation" />
-        <link href="./common/style.css" rel="stylesheet" media="screen, print, embossed" type="text/css" />
-      </head>
-      <body>
-        <table>
-          <tr>
-            <td class="menu">
-              <xsl:apply-templates select="./glm/menu" />
-            </td>
-            <td class="page">
-              <!--div class="title1">OpenGL Mathematics</div-->
-              <div class="title1">
-                <img src="./common/title.png" alt="OpenGL Mathematics" />
-              </div>
-              <xsl:apply-templates select="./glm/about-short" />
-              <br />
-              <xsl:apply-templates select="./glm/page_news/news" />
-              <div class="title3">
-                <xsl:value-of select="./glm/@copyright" />
-                <a href="http://www.g-truc.net">G-Truc Creation</a>
-              </div>
-            </td>
-          </tr>
-        </table>
-      </body>
-    </html>
-  </xsl:template>
-
-  <xsl:template match="news">
-    <div>
-      <div class="title-date">
-        <xsl:value-of select="./@date" />
-      </div>
-      <div class="title4">
-        <xsl:value-of select="./@title" />
-      </div>
-      <div>
-        <xsl:if test="./paragraph">
-          <xsl:apply-templates select="./paragraph" />
-        </xsl:if>
-        <xsl:if test="./list">
-          <xsl:apply-templates select="./list" />
-        </xsl:if>
-        <xsl:apply-templates select="./source" />
-
-        <!--table style="width:100%;">
-        <tr style="width:100%;">
-          <td>
-            <xsl:if test="./paragraph">
-              <xsl:apply-templates select="./paragraph" />
-            </xsl:if>
-            <xsl:if test="./list">
-              <xsl:apply-templates select="./list" />
-            </xsl:if>
-            <xsl:apply-templates select="./source" />
-          </td>
-          <td style="text-align:right;">
-            <a ref="{./@image}"><img src="{./@image-mini}" alt=" " /></a>
-          </td>
-        </tr>
-      </table-->
-
-      </div>
-      <div class="news-separator">_________________</div>
-      <br />
-    </div>
-  </xsl:template>
-
-</xsl:stylesheet>

+ 0 - 143
doc/src/util.xsl

@@ -1,143 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-
-<xsl:strip-space elements="*" />
-
-<xsl:output 
-	method="xml"
-	media-type="application/xhtml+xml; charset=iso-8859-1"
-	version="1.0"
-	encoding="iso-8859-1"
-	standalone="no"
-	omit-xml-declaration="no"
-	doctype-public="-//W3C//DTD XHTML 1.1//EN" 
-	doctype-system="http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"
-	indent="no" />
-
-<xsl:template match="link">
-	<a href="{./@href}"><xsl:value-of select="." /></a>
-</xsl:template>
-
-<xsl:template match="image">
-	<xsl:choose>
-		<xsl:when test="./@href">
-			<xsl:element name="a">
-				<xsl:attribute name="class">menu-titre2</xsl:attribute>
-				<xsl:attribute name="href"><xsl:value-of select="./@href" /></xsl:attribute>
-				<xsl:element name="img">
-					<xsl:attribute name="src"><xsl:value-of select="@file" /></xsl:attribute>
-					<xsl:attribute name="alt"><xsl:value-of select="@file" /></xsl:attribute>
-				</xsl:element>
-			</xsl:element>
-		</xsl:when>
-		<xsl:otherwise>
-			<xsl:element name="img">
-				<xsl:attribute name="src"><xsl:value-of select="@file" /></xsl:attribute>
-				<xsl:attribute name="alt"><xsl:value-of select="@file" /></xsl:attribute>
-			</xsl:element>
-		</xsl:otherwise>
-	</xsl:choose>
-</xsl:template>
-
-  <xsl:template match="image-list">
-    <div class="news-image">
-      <xsl:apply-templates select="./image-element" />
-    </div>
-  </xsl:template>
-
-  <xsl:template match="image-element">
-    <a href="{./@normal}">
-      <img src="{./@small}" alt="{./@title}" />
-    </a>
-  </xsl:template>
-
-<xsl:template match="list">
-	<xsl:value-of select="./@nom" /><br />
-	<xsl:apply-templates select="./element"/>
-	<br />
-</xsl:template>
-
-<xsl:template match="element">
-	<xsl:apply-templates /><br />
-</xsl:template>
-
-<xsl:template match="paragraph">
-	<div class="paragraph"><xsl:text /><xsl:apply-templates /><xsl:text /></div><br />
-</xsl:template>
-
-<xsl:template match="about-short">
-  <div class="title3">
-    <xsl:apply-templates select="./element" />
-  </div>
-  <br />
-</xsl:template>
-  
-<xsl:template match="source">
-	<xsl:value-of select="./@type"/>: <a href="{./@adresse}"><xsl:value-of select="."/></a><br />
-</xsl:template>
-
-<xsl:template match="menu">
-  <div class="menu1">
-    <br />
-    <div>
-      <a href="./goodies/logo1920x1200.png">
-        <img class="menu-img" src="./common/logo.png" alt="GLM Logo"/>
-      </a>
-    </div>
-    <br />
-    <div>
-      <a class="menu" href="{/glm/downloads/section/download/@link}">
-        Download <xsl:value-of select="/glm/downloads/section/download/@name" />
-      </a>
-    </div>
-  </div>
-  <br />
-  <xsl:apply-templates select="./menu-group"/>
-  <div class="menu1">
-    <img class="menu-img" src="./common/email.png" alt="contact"/>
-  </div>
-  <br />
-  <xsl:apply-templates select="./menu-link"/>
-  <br />
-  <!--div>
-    <script type="text/javascript" src="http://feedjit.com/map/?bc=FFFFFF&amp;tc=494949&amp;brd1=FFFFFF&amp;lnk=494949&amp;hc=FF8000&amp;dot=FF8000"></script>
-    <noscript>
-      <a href="http://feedjit.com/">Feedjit Live Blog Stats</a>
-    </noscript>
-  </div-->
-</xsl:template>
-
-<xsl:template match="menu-pic">
-  <div class="menu2">
-    <a href="{@href}">
-      <img class="menu-img" src="{@image}" alt="{@name}"/>
-    </a>
-  </div>
-</xsl:template>
-
-<xsl:template match="menu-link">
-  <xsl:apply-templates select="./menu-pic"/>
-</xsl:template>
-  
-<xsl:template match="menu-image">
-  <div class="menu2">
-    <a href="./common/glm.jpg">
-      <img class="menu-img" src="./common/logo.jpg" alt="G-Truc"/>
-    </a>
-  </div>
-</xsl:template>
-  
-<xsl:template match="menu-group">
-  <xsl:apply-templates select="./menu-entry"/>
-  <br />
-</xsl:template>
-
-<xsl:template match="menu-entry">
-  <div class="menu2">
-    <a href="{./@href}">
-      <xsl:value-of select="./@name"/>
-    </a>
-  </div>
-</xsl:template>
-
-</xsl:stylesheet>

+ 0 - 646
doc/usertype.dat

@@ -1,646 +0,0 @@
-attribute 
-const 
-uniform
-varying
-break
-continue
-do
-for
-while
-if
-else
-in
-out
-inout
-float
-int
-void
-bool
-true
-false
-discard
-return
-mat2
-mat3
-mat4
-mat2x2
-mat3x3
-mat4x4
-mat2x3
-mat3x2
-mat2x4
-mat4x2
-mat3x4
-mat4x3
-vec2
-vec3
-vec4
-ivec2
-ivec3
-ivec4
-uvec2
-uvec3
-uvec4
-bvec2
-bvec3
-bvec4
-sampler1D
-sampler2D
-sampler3D
-samplerCube
-sampler1DShadow
-sampler2DShadow
-struct
-
-asm
-class
-union
-enum
-typedef
-template
-this
-packed
-goto
-switch
-default
-inline
-noinline
-volatile
-public
-static
-extern
-external
-interface
-long
-short
-double
-half
-fixed
-unsigned
-input
-output
-sampler2DRect
-sampler3DRect
-sampler2DRectShadow
-sizeof
-cast
-namespace
-using
-
-hvec2
-hvec3
-hvec4
-fvec2
-fvec3
-fvec4
-dvec2
-dvec3
-dvec4
-
-__uvec2GTX
-__uvec3GTX
-__uvec4GTX
-__ivec2GTX
-__ivec3GTX
-__ivec4GTX
-__hvec2GTX
-__hvec3GTX
-__hvec4GTX
-__fvec2GTX
-__fvec3GTX
-__fvec4GTX
-__dvec2GTX
-__dvec3GTX
-__dvec4GTX
-
-on
-
-final
-abstract
-limited
-access
-self
-
-uchar
-schar
-uint
-sint
-
-int8
-int16
-int32
-int64
-
-sint8
-sint16
-sint32
-sint64
-
-uint8
-uint16
-uint32
-uint64
-
-float16
-float32
-float64
-
-quat
-hquat
-fquat
-dquat
-
-__quatGTX
-__hquatGTX
-__fquatGTX
-__dquatGTX
-
-handle
-handle8
-handle16
-handle32
-handle64
-
-flag
-flag8
-flag16
-flag32
-flag64
-
-import
-export
-
-hmat2
-hmat3
-hmat4
-
-fmat2
-fmat3
-fmat4
-
-dmat2
-dmat3
-dmat4
-
-hmat2x3
-hmat3x2
-hmat2x4
-hmat4x2
-hmat3x4
-hmat4x3
-
-fmat2x3
-fmat3x2
-fmat2x4
-fmat4x2
-fmat3x4
-fmat4x3
-
-dmat2x3
-dmat3x2
-dmat2x4
-dmat4x2
-dmat3x4
-dmat4x3
-
-__halfGTX
-
-__hvec2GTX
-__hvec3GTX
-__hvec4GTX
-
-__hmat2GTX
-__hmat3GTX
-__hmat4GTX
-
-__fmat2GTX
-__fmat3GTX
-__fmat4GTX
-
-__dmat2GTX
-__dmat3GTX
-__dmat4GTX
-
-__hmat2x3GTX
-__hmat3x2GTX
-__hmat2x4GTX
-__hmat4x2GTX
-__hmat3x4GTX
-__hmat4x3GTX
-
-__fmat2x3GTX
-__fmat3x2GTX
-__fmat2x4GTX
-__fmat4x2GTX
-__fmat3x4GTX
-__fmat4x3GTX
-
-__dmat2x3GTX
-__dmat3x2GTX
-__dmat2x4GTX
-__dmat4x2GTX
-__dmat3x4GTX
-__dmat4x3GTX
-
-null
-pi
-epsilon
-infinite
-self
-
-byte
-word
-dword
-qword
-
-new_object
-new_array
-delete_object
-delete_array
-
-__int8GTX
-__int16GTX
-__int32GTX
-__int64GTX
-
-__i8GTX
-__i16GTX
-__i32GTX
-__i64GTX
-
-__i8vec2GTX
-__i8vec3GTX
-__i8vec4GTX
-
-__i16vec2GTX
-__i16vec3GTX
-__i16vec4GTX
-
-__i32vec2GTX
-__i32vec3GTX
-__i32vec4GTX
-
-__i64vec2GTX
-__i64vec3GTX
-__i64vec4GTX
-
-__uint8GTX
-__uint16GTX
-__uint32GTX
-__uint64GTX
-
-__u8GTX
-__u16GTX
-__u32GTX
-__u64GTX
-
-__u8vec2GTX
-__u8vec3GTX
-__u8vec4GTX
-
-__u16vec2GTX
-__u16vec3GTX
-__u16vec4GTX
-
-__u32vec2GTX
-__u32vec3GTX
-__u32vec4GTX
-
-__u64vec2GTX
-__u64vec3GTX
-__u64vec4GTX
-
-__float16GTX
-__float32GTX
-__float64GTX
-
-__f16GTX
-__f32GTX
-__f64GTX
-
-__f16vec2GTX
-__f16vec3GTX
-__f16vec4GTX
-
-__f32vec2GTX
-__f32vec3GTX
-__f32vec4GTX
-
-__f64vec2GTX
-__f64vec3GTX
-__f64vec4GTX
-
-__f16mat2GTX
-__f16mat3GTX
-__f16mat4GTX
-
-__f16mat2x3GTX
-__f16mat2x4GTX
-__f16mat3x2GTX
-__f16mat3x4GTX
-__f16mat4x2GTX
-__f16mat4x3GTX
-
-__f32mat2GTX
-__f32mat3GTX
-__f32mat4GTX
-
-__f32mat2x3GTX
-__f32mat2x4GTX
-__f32mat3x2GTX
-__f32mat3x4GTX
-__f32mat4x2GTX
-__f32mat4x3GTX
-
-__f64mat2GTX
-__f64mat3GTX
-__f64mat4GTX
-
-__f64mat2x3GTX
-__f64mat2x4GTX
-__f64mat3x2GTX
-__f64mat3x4GTX
-__f64mat4x2GTX
-__f64mat4x3GTX
-
-__f16quatGTX
-__f32quatGTX
-__f64quatGTX
-
-int8
-int16
-int32
-int64
-
-i8
-i16
-i32
-i64
-
-i8vec2
-i8vec3
-i8vec4
-
-i16vec2
-i16vec3
-i16vec4
-
-i32vec2
-i32vec3
-i32vec4
-
-i64vec2
-i64vec3
-i64vec4
-
-uint8
-uint16
-uint32
-uint64
-
-u8
-u16
-u32
-u64
-
-u8vec2
-u8vec3
-u8vec4
-
-u16vec2
-u16vec3
-u16vec4
-
-u32vec2
-u32vec3
-u32vec4
-
-u64vec2
-u64vec3
-u64vec4
-
-float16
-float32
-float64
-
-f16
-f32
-f64
-
-f16vec2
-f16vec3
-f16vec4
-
-f32vec2
-f32vec3
-f32vec4
-
-f64vec2
-f64vec3
-f64vec4
-
-f16mat2
-f16mat3
-f16mat4
-
-f16mat2x3
-f16mat2x4
-f16mat3x2
-f16mat3x4
-f16mat4x2
-f16mat4x3
-
-f32mat2
-f32mat3
-f32mat4
-
-f32mat2x3
-f32mat2x4
-f32mat3x2
-f32mat3x4
-f32mat4x2
-f32mat4x3
-
-f64mat2
-f64mat3
-f64mat4
-
-f64mat2x3
-f64mat2x4
-f64mat3x2
-f64mat3x4
-f64mat4x2
-f64mat4x3
-
-f16quat
-f32quat
-f64quat
-
-bool1
-bool2
-bool3
-bool4
-
-bool1x1
-bool2x2
-bool3x3
-bool4x4
-
-bool2x3
-bool2x4
-bool3x2
-bool3x4
-bool4x2
-bool4x3
-
-int1
-int2
-int3
-int4
-
-int1x1
-int2x2
-int3x3
-int4x4
-
-int2x3
-int2x4
-int3x2
-int3x4
-int4x2
-int4x3
-
-half1
-half2
-half3
-half4
-
-half2x2
-half3x3
-half4x4
-
-half2x3
-half2x4
-half3x2
-half3x4
-half4x2
-half4x3
-
-float1
-float2
-float3
-float4
-
-float1x1
-float2x2
-float3x3
-float4x4
-
-float2x3
-float2x4
-float3x2
-float3x4
-float4x2
-float4x3
-
-double1
-double2
-double3
-double4
-
-double1x1
-double2x2
-double3x3
-double4x4
-
-double2x3
-double2x4
-double3x2
-double3x4
-double4x2
-double4x3
-
-bool1GTX
-bool2GTX
-bool3GTX
-bool4GTX
-
-bool1x1GTX
-bool2x2GTX
-bool3x3GTX
-bool4x4GTX
-
-bool2x3GTX
-bool2x4GTX
-bool3x2GTX
-bool3x4GTX
-bool4x2GTX
-bool4x3GTX
-
-__int1GTX
-__int2GTX
-__int3GTX
-__int4GTX
-
-__int1x1GTX
-__int2x2GTX
-__int3x3GTX
-__int4x4GTX
-
-__int2x3GTX
-__int2x4GTX
-__int3x2GTX
-__int3x4GTX
-__int4x2GTX
-__int4x3GTX
-
-__half1GTX
-__half2GTX
-__half3GTX
-__half4GTX
-
-__half1x1GTX
-__half2x2GTX
-__half3x3GTX
-__half4x4GTX
-
-__half2x3GTX
-__half2x4GTX
-__half3x2GTX
-__half3x4GTX
-__half4x2GTX
-__half4x3GTX
-
-__float1GTX
-__float2GTX
-__float3GTX
-__float4GTX
-
-__float1x1GTX
-__float2x2GTX
-__float3x3GTX
-__float4x4GTX
-
-__float2x3GTX
-__float2x4GTX
-__float3x2GTX
-__float3x4GTX
-__float4x2GTX
-__float4x3GTX
-
-__double1GTX
-__double2GTX
-__double3GTX
-__double4GTX
-
-__double1x1GTX
-__double2x2GTX
-__double3x3GTX
-__double4x4GTX
-
-__double2x3GTX
-__double2x4GTX
-__double3x2GTX
-__double3x4GTX
-__double4x2GTX
-__double4x3GTX

+ 0 - 51
glm/CMakeLists.txt

@@ -1,51 +0,0 @@
-set(NAME glm)
-
-file(GLOB ROOT_SOURCE *.cpp)
-file(GLOB ROOT_INLINE *.inl)
-file(GLOB ROOT_HEADER *.hpp)
-
-file(GLOB_RECURSE CORE_SOURCE ./core/*.cpp)
-file(GLOB_RECURSE CORE_INLINE ./core/*.inl)
-file(GLOB_RECURSE CORE_HEADER ./core/*.hpp)
-
-file(GLOB_RECURSE GTC_SOURCE ./gtc/*.cpp)
-file(GLOB_RECURSE GTC_INLINE ./gtc/*.inl)
-file(GLOB_RECURSE GTC_HEADER ./gtc/*.hpp)
-
-file(GLOB_RECURSE GTX_SOURCE ./gtx/*.cpp)
-file(GLOB_RECURSE GTX_INLINE ./gtx/*.inl)
-file(GLOB_RECURSE GTX_HEADER ./gtx/*.hpp)
-
-file(GLOB_RECURSE IMG_SOURCE ./img/*.cpp)
-file(GLOB_RECURSE IMG_INLINE ./img/*.inl)
-file(GLOB_RECURSE IMG_HEADER ./img/*.hpp)
-
-file(GLOB_RECURSE VIRTREV_SOURCE ./virtrev/*.cpp)
-file(GLOB_RECURSE VIRTREV_INLINE ./virtrev/*.inl)
-file(GLOB_RECURSE VIRTREV_HEADER ./virtrev/*.hpp)
-
-source_group("Core Files" FILES ${CORE_SOURCE})
-source_group("Core Files" FILES ${CORE_INLINE})
-source_group("Core Files" FILES ${CORE_HEADER})
-source_group("GTC Files" FILES ${GTC_SOURCE})
-source_group("GTC Files" FILES ${GTC_INLINE})
-source_group("GTC Files" FILES ${GTC_HEADER})
-source_group("GTX Files" FILES ${GTX_SOURCE})
-source_group("GTX Files" FILES ${GTX_INLINE})
-source_group("GTX Files" FILES ${GTX_HEADER})
-source_group("IMG Files" FILES ${IMG_SOURCE})
-source_group("IMG Files" FILES ${IMG_INLINE})
-source_group("IMG Files" FILES ${IMG_HEADER})
-source_group("VIRTREV Files" FILES ${VIRTREV_SOURCE})
-source_group("VIRTREV Files" FILES ${VIRTREV_INLINE})
-source_group("VIRTREV Files" FILES ${VIRTREV_HEADER})
-
-include_directories(..)
-
-add_executable(${NAME} 
-	${ROOT_SOURCE}    ${ROOT_INLINE}    ${ROOT_HEADER} 
-	${CORE_SOURCE}    ${CORE_INLINE}    ${CORE_HEADER}
-	${GTC_SOURCE}     ${GTC_INLINE}     ${GTC_HEADER} 
-	${GTX_SOURCE}     ${GTX_INLINE}     ${GTX_HEADER} 
-	${IMG_SOURCE}     ${IMG_INLINE}     ${IMG_HEADER}
-	${VIRTREV_SOURCE} ${VIRTREV_INLINE} ${VIRTREV_HEADER})

+ 0 - 327
glm/core/_detail.hpp

@@ -1,327 +0,0 @@
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// OpenGL Mathematics Copyright (c) 2005 - 2010 G-Truc Creation (www.g-truc.net)
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// Created : 2008-07-24
-// Updated : 2008-08-31
-// Licence : This source is under MIT License
-// File    : glm/core/_detail.hpp
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-#ifndef glm_core_detail
-#define glm_core_detail
-
-#include "../setup.hpp"
-#include <cassert>
-
-//#define valType			typename genType::value_type
-//#define valType_cref	typename genType::value_type const &
-//#define genType_cref	typename genType const &
-
-namespace glm{
-namespace detail{
-
-	class thalf;
-
-#if(defined(GLM_COMPILER) && (GLM_COMPILER & GLM_COMPILER_VC))
-	typedef signed __int64						sint64;
-	typedef unsigned __int64					uint64;
-#elif(defined(GLM_COMPILER) && (GLM_COMPILER & GLM_COMPILER_GCC))
-	__extension__ typedef signed long long		sint64;
-	__extension__ typedef unsigned long long	uint64;
-#else//unknown compiler
-	typedef signed long							sint64;
-	typedef unsigned long						uint64;
-#endif//GLM_COMPILER
-
-	template<bool C>
-	struct If
-	{
-		template<typename F, typename T>
-		static inline T apply(F functor, const T& val)
-		{
-			return functor(val);
-		}
-	};
-
-	template<>
-	struct If<false>
-	{
-		template<typename F, typename T>
-		static inline T apply(F, const T& val)
-		{
-			return val;
-		}
-	};
-
-	//template <typename T>
-	//struct traits
-	//{
-	//	static const bool is_signed = false;
-	//	static const bool is_float = false;
-	//	static const bool is_vector = false;
-	//	static const bool is_matrix = false;
-	//	static const bool is_genType = false;
-	//	static const bool is_genIType = false;
-	//	static const bool is_genUType = false;
-	//};
-
-	//template <>
-	//struct traits<half>
-	//{
-	//	static const bool is_float = true;
-	//	static const bool is_genType = true;
-	//};
-
-	//template <>
-	//struct traits<float>
-	//{
-	//	static const bool is_float = true;
-	//	static const bool is_genType = true;
-	//};
-
-	//template <>
-	//struct traits<double>
-	//{
-	//	static const bool is_float = true;
-	//	static const bool is_genType = true;
-	//};
-
-	//template <typename genType>
-	//struct desc
-	//{
-	//	typedef genType							type;
-	//	typedef genType *						pointer;
-	//	typedef genType const*					const_pointer;
-	//	typedef genType const *const			const_pointer_const;
-	//	typedef genType *const					pointer_const;
-	//	typedef genType &						reference;
-	//	typedef genType const&					const_reference;
-	//	typedef genType const&					param_type;
-
-	//	typedef typename genType::value_type	value_type;
-	//	typedef typename genType::size_type		size_type;
-	//	static const typename size_type			value_size;
-	//};
-
-	//template <typename genType>
-	//const typename desc<genType>::size_type desc<genType>::value_size = genType::value_size();
-
-	union uif32
-	{
-		uif32() :
-			i(0)
-		{}
-
-		uif32(float f) :
-			f(f)
-		{}
-
-		uif32(unsigned int i) :
-			i(i)
-		{}
-
-		float f;
-		unsigned int i;
-	};
-
-	union uif64
-	{
-		uif64() :
-			i(0)
-		{}
-
-		uif64(double f) :
-			f(f)
-		{}
-
-		uif64(uint64 i) :
-			i(i)
-		{}
-
-		double f;
-		uint64 i;
-	};
-
-	typedef uif32 uif;
-
-	//////////////////
-	// int
-
-	template <typename T>
-	struct is_int
-	{
-		enum is_int_enum
-		{
-			YES = 0,
-			NO = 1
-		};
-	};
-
-#define GLM_DETAIL_IS_INT(T)	\
-	template <>					\
-	struct is_int<T>			\
-	{							\
-		enum is_int_enum		\
-		{						\
-			YES = 1,			\
-			NO = 0				\
-		};						\
-	}
-
-	//////////////////
-	// uint
-
-	template <typename T>
-	struct is_uint
-	{
-		enum is_uint_enum
-		{
-			YES = 0,
-			NO = 1
-		};
-	};
-
-#define GLM_DETAIL_IS_UINT(T)	\
-	template <>					\
-	struct is_uint<T>			\
-	{							\
-		enum is_uint_enum		\
-		{						\
-			YES = 1,			\
-			NO = 0				\
-		};						\
-	}
-
-	//GLM_DETAIL_IS_UINT(unsigned long long)
-
-	//////////////////
-	// float
-
-	template <typename T>
-	struct is_float
-	{
-		enum is_float_enum
-		{
-			YES = 0,
-			NO = 1
-		};
-	};
-
-#define GLM_DETAIL_IS_FLOAT(T)	\
-	template <>					\
-	struct is_float<T>			\
-	{							\
-		enum is_float_enum		\
-		{						\
-			YES = 1,			\
-			NO = 0				\
-		};						\
-	}
-
-	//////////////////
-	// bool
-
-	template <typename T>
-	struct is_bool
-	{
-		enum is_bool_enum
-		{
-			YES = 0,
-			NO = 1
-		};
-	};
-	
-	template <>
-	struct is_bool<bool>
-	{
-		enum is_bool_enum
-		{
-			YES = 1,
-			NO = 0
-		};
-	};
-	
-	//////////////////
-	// vector
-
-	template <typename T>
-	struct is_vector
-	{
-		enum is_vector_enum
-		{
-			YES = 0,
-			NO = 1
-		};
-	};
-
-#define GLM_DETAIL_IS_VECTOR(T)	\
-	template <>					\
-	struct is_vector			\
-	{							\
-		enum is_vector_enum		\
-		{						\
-			YES = 1,			\
-			NO = 0				\
-		};						\
-	}
-
-	//////////////////
-	// matrix
-
-	template <typename T>
-	struct is_matrix
-	{
-		enum is_matrix_enum
-		{
-			YES = 0,
-			NO = 1
-		};
-	};
-
-#define GLM_DETAIL_IS_MATRIX(T)	\
-	template <>					\
-	struct is_matrix			\
-	{							\
-		enum is_matrix_enum		\
-		{						\
-			YES = 1,			\
-			NO = 0				\
-		};						\
-	}
-
-	//////////////////
-	// type
-
-	template <typename T>
-	struct type
-	{
-		enum type_enum
-		{
-			is_float = is_float<T>::YES,
-			is_int = is_int<T>::YES,
-			is_uint = is_uint<T>::YES,
-			is_bool = is_bool<T>::YES
-		};
-	};
-
-	//////////////////
-	// type
-
-	typedef signed char							int8;
-	typedef signed short						int16;
-	typedef signed int							int32;
-	typedef detail::sint64						int64;
-
-	typedef unsigned char						uint8;
-	typedef unsigned short						uint16;
-	typedef unsigned int						uint32;
-	typedef detail::uint64						uint64;
-
-	typedef detail::thalf						float16;
-	typedef float								float32;
-	typedef double								float64;
-
-}//namespace detail
-}//namespace glm
-
-#endif//glm_core_detail

+ 0 - 1085
glm/core/_swizzle.hpp

@@ -1,1085 +0,0 @@
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// OpenGL Mathematics Copyright (c) 2005 - 2010 G-Truc Creation (www.g-truc.net)
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// Created : 2006-04-20
-// Updated : 2008-08-22
-// Licence : This source is under MIT License
-// File    : glm/core/_swizzle.hpp
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-#ifndef glm_core_swizzle
-#define glm_core_swizzle
-
-namespace glm
-{
-	enum comp
-	{
-		X = 0,
-		R = 0,
-		S = 0,
-		Y = 1,
-		G = 1,
-		T = 1,
-		Z = 2,
-		B = 2,
-		P = 2,
-		W = 3,
-		A = 3,
-		Q = 3
-	};
-}//namespace glm
-
-#if defined(GLM_SWIZZLE) && (GLM_SWIZZLE & GLM_SWIZZLE_XYZW)
-
-#define xx swizzle(glm::X, glm::X)
-#define yx swizzle(glm::Y, glm::X)
-#define zx swizzle(glm::Z, glm::X)
-#define wx swizzle(glm::W, glm::X)
-#define xy swizzle(glm::X, glm::Y)
-#define yy swizzle(glm::Y, glm::Y)
-#define zy swizzle(glm::Z, glm::Y)
-#define wy swizzle(glm::W, glm::Y)
-#define xz swizzle(glm::X, glm::Z)
-#define yz swizzle(glm::Y, glm::Z)
-#define zz swizzle(glm::Z, glm::Z)
-#define wz swizzle(glm::W, glm::Z)
-#define xw swizzle(glm::X, glm::W)
-#define yw swizzle(glm::Y, glm::W)
-#define zw swizzle(glm::Z, glm::W)
-#define ww swizzle(glm::W, glm::W)
-
-#endif// defined(GLM_SWIZZLE) && (GLM_SWIZZLE & GLM_SWIZZLE_XYZW)
-
-#if defined(GLM_SWIZZLE) && (GLM_SWIZZLE & GLM_SWIZZLE_RGBA)
-
-#define rr swizzle(glm::X, glm::X)
-#define gr swizzle(glm::Y, glm::X)
-#define br swizzle(glm::Z, glm::X)
-#define ar swizzle(glm::W, glm::X)
-#define rg swizzle(glm::X, glm::Y)
-#define gg swizzle(glm::Y, glm::Y)
-#define bg swizzle(glm::Z, glm::Y)
-#define ag swizzle(glm::W, glm::Y)
-#define rb swizzle(glm::X, glm::Z)
-#define gb swizzle(glm::Y, glm::Z)
-#define bb swizzle(glm::Z, glm::Z)
-#define ab swizzle(glm::W, glm::Z)
-#define ra swizzle(glm::X, glm::W)
-#define ga swizzle(glm::Y, glm::W)
-#define ba swizzle(glm::Z, glm::W)
-#define aa swizzle(glm::W, glm::W)
-
-#endif// defined(GLM_SWIZZLE) && (GLM_SWIZZLE & GLM_SWIZZLE_RGBA)
-
-#if defined(GLM_SWIZZLE) && (GLM_SWIZZLE & GLM_SWIZZLE_STPQ)
-
-#define ss swizzle(glm::X, glm::X)
-#define ts swizzle(glm::Y, glm::X)
-#define ps swizzle(glm::Z, glm::X)
-#define qs swizzle(glm::W, glm::X)
-#define st swizzle(glm::X, glm::Y)
-#define tt swizzle(glm::Y, glm::Y)
-#define pt swizzle(glm::Z, glm::Y)
-#define qt swizzle(glm::W, glm::Y)
-#define sp swizzle(glm::X, glm::Z)
-#define tp swizzle(glm::Y, glm::Z)
-#define pp swizzle(glm::Z, glm::Z)
-#define qp swizzle(glm::W, glm::Z)
-#define sq swizzle(glm::X, glm::W)
-#define tq swizzle(glm::Y, glm::W)
-#define pq swizzle(glm::Z, glm::W)
-#define qq swizzle(glm::W, glm::W)
-
-#endif// defined(GLM_SWIZZLE) && (GLM_SWIZZLE & GLM_SWIZZLE_STPQ)
-
-#if defined(GLM_SWIZZLE) && (GLM_SWIZZLE & GLM_SWIZZLE_XYZW)
-
-#define xxx swizzle(glm::X, glm::X, glm::X)
-#define yxx swizzle(glm::Y, glm::X, glm::X)
-#define zxx swizzle(glm::Z, glm::X, glm::X)
-#define wxx swizzle(glm::W, glm::X, glm::X)
-#define xyx swizzle(glm::X, glm::Y, glm::X)
-#define yyx swizzle(glm::Y, glm::Y, glm::X)
-#define zyx swizzle(glm::Z, glm::Y, glm::X)
-#define wyx swizzle(glm::W, glm::Y, glm::X)
-#define xzx swizzle(glm::X, glm::Z, glm::X)
-#define yzx swizzle(glm::Y, glm::Z, glm::X)
-#define zzx swizzle(glm::Z, glm::Z, glm::X)
-#define wzx swizzle(glm::W, glm::Z, glm::X)
-#define xwx swizzle(glm::X, glm::W, glm::X)
-#define ywx swizzle(glm::Y, glm::W, glm::X)
-#define zwx swizzle(glm::Z, glm::W, glm::X)
-#define wwx swizzle(glm::W, glm::W, glm::X)
-#define xxy swizzle(glm::X, glm::X, glm::Y)
-#define yxy swizzle(glm::Y, glm::X, glm::Y)
-#define zxy swizzle(glm::Z, glm::X, glm::Y)
-#define wxy swizzle(glm::W, glm::X, glm::Y)
-#define xyy swizzle(glm::X, glm::Y, glm::Y)
-#define yyy swizzle(glm::Y, glm::Y, glm::Y)
-#define zyy swizzle(glm::Z, glm::Y, glm::Y)
-#define wyy swizzle(glm::W, glm::Y, glm::Y)
-#define xzy swizzle(glm::X, glm::Z, glm::Y)
-#define yzy swizzle(glm::Y, glm::Z, glm::Y)
-#define zzy swizzle(glm::Z, glm::Z, glm::Y)
-#define wzy swizzle(glm::W, glm::Z, glm::Y)
-#define xwy swizzle(glm::X, glm::W, glm::Y)
-#define ywy swizzle(glm::Y, glm::W, glm::Y)
-#define zwy swizzle(glm::Z, glm::W, glm::Y)
-#define wwy swizzle(glm::W, glm::W, glm::Y)
-#define xxz swizzle(glm::X, glm::X, glm::Z)
-#define yxz swizzle(glm::Y, glm::X, glm::Z)
-#define zxz swizzle(glm::Z, glm::X, glm::Z)
-#define wxz swizzle(glm::W, glm::X, glm::Z)
-#define xyz swizzle(glm::X, glm::Y, glm::Z)
-#define yyz swizzle(glm::Y, glm::Y, glm::Z)
-#define zyz swizzle(glm::Z, glm::Y, glm::Z)
-#define wyz swizzle(glm::W, glm::Y, glm::Z)
-#define xzz swizzle(glm::X, glm::Z, glm::Z)
-#define yzz swizzle(glm::Y, glm::Z, glm::Z)
-#define zzz swizzle(glm::Z, glm::Z, glm::Z)
-#define wzz swizzle(glm::W, glm::Z, glm::Z)
-#define xwz swizzle(glm::X, glm::W, glm::Z)
-#define ywz swizzle(glm::Y, glm::W, glm::Z)
-#define zwz swizzle(glm::Z, glm::W, glm::Z)
-#define wwz swizzle(glm::W, glm::W, glm::Z)
-#define xxw swizzle(glm::X, glm::X, glm::W)
-#define yxw swizzle(glm::Y, glm::X, glm::W)
-#define zxw swizzle(glm::Z, glm::X, glm::W)
-#define wxw swizzle(glm::W, glm::X, glm::W)
-#define xyw swizzle(glm::X, glm::Y, glm::W)
-#define yyw swizzle(glm::Y, glm::Y, glm::W)
-#define zyw swizzle(glm::Z, glm::Y, glm::W)
-#define wyw swizzle(glm::W, glm::Y, glm::W)
-#define xzw swizzle(glm::X, glm::Z, glm::W)
-#define yzw swizzle(glm::Y, glm::Z, glm::W)
-#define zzw swizzle(glm::Z, glm::Z, glm::W)
-#define wzw swizzle(glm::W, glm::Z, glm::W)
-#define xww swizzle(glm::X, glm::W, glm::W)
-#define yww swizzle(glm::Y, glm::W, glm::W)
-#define zww swizzle(glm::Z, glm::W, glm::W)
-#define www swizzle(glm::W, glm::W, glm::W)
-
-#endif// defined(GLM_SWIZZLE) && (GLM_SWIZZLE & GLM_SWIZZLE_XYZW)
-
-#if defined(GLM_SWIZZLE) && (GLM_SWIZZLE & GLM_SWIZZLE_RGBA)
-
-#define rrr swizzle(glm::X, glm::X, glm::X)
-#define grr swizzle(glm::Y, glm::X, glm::X)
-#define brr swizzle(glm::Z, glm::X, glm::X)
-#define arr swizzle(glm::W, glm::X, glm::X)
-#define rgr swizzle(glm::X, glm::Y, glm::X)
-#define ggr swizzle(glm::Y, glm::Y, glm::X)
-#define bgr swizzle(glm::Z, glm::Y, glm::X)
-#define agr swizzle(glm::W, glm::Y, glm::X)
-#define rbr swizzle(glm::X, glm::Z, glm::X)
-#define gbr swizzle(glm::Y, glm::Z, glm::X)
-#define bbr swizzle(glm::Z, glm::Z, glm::X)
-#define abr swizzle(glm::W, glm::Z, glm::X)
-#define rar swizzle(glm::X, glm::W, glm::X)
-#define gar swizzle(glm::Y, glm::W, glm::X)
-#define bar swizzle(glm::Z, glm::W, glm::X)
-#define aar swizzle(glm::W, glm::W, glm::X)
-#define rrg swizzle(glm::X, glm::X, glm::Y)
-#define grg swizzle(glm::Y, glm::X, glm::Y)
-#define brg swizzle(glm::Z, glm::X, glm::Y)
-#define arg swizzle(glm::W, glm::X, glm::Y)
-#define rgg swizzle(glm::X, glm::Y, glm::Y)
-#define ggg swizzle(glm::Y, glm::Y, glm::Y)
-#define bgg swizzle(glm::Z, glm::Y, glm::Y)
-#define agg swizzle(glm::W, glm::Y, glm::Y)
-#define rbg swizzle(glm::X, glm::Z, glm::Y)
-#define gbg swizzle(glm::Y, glm::Z, glm::Y)
-#define bbg swizzle(glm::Z, glm::Z, glm::Y)
-#define abg swizzle(glm::W, glm::Z, glm::Y)
-#define rag swizzle(glm::X, glm::W, glm::Y)
-#define gag swizzle(glm::Y, glm::W, glm::Y)
-#define bag swizzle(glm::Z, glm::W, glm::Y)
-#define aag swizzle(glm::W, glm::W, glm::Y)
-#define rrb swizzle(glm::X, glm::X, glm::Z)
-#define grb swizzle(glm::Y, glm::X, glm::Z)
-#define brb swizzle(glm::Z, glm::X, glm::Z)
-#define arb swizzle(glm::W, glm::X, glm::Z)
-#define rgb swizzle(glm::X, glm::Y, glm::Z)
-#define ggb swizzle(glm::Y, glm::Y, glm::Z)
-#define bgb swizzle(glm::Z, glm::Y, glm::Z)
-#define agb swizzle(glm::W, glm::Y, glm::Z)
-#define rbb swizzle(glm::X, glm::Z, glm::Z)
-#define gbb swizzle(glm::Y, glm::Z, glm::Z)
-#define bbb swizzle(glm::Z, glm::Z, glm::Z)
-#define abb swizzle(glm::W, glm::Z, glm::Z)
-#define rab swizzle(glm::X, glm::W, glm::Z)
-#define gab swizzle(glm::Y, glm::W, glm::Z)
-#define bab swizzle(glm::Z, glm::W, glm::Z)
-#define aab swizzle(glm::W, glm::W, glm::Z)
-#define rra swizzle(glm::X, glm::X, glm::W)
-#define gra swizzle(glm::Y, glm::X, glm::W)
-#define bra swizzle(glm::Z, glm::X, glm::W)
-#define ara swizzle(glm::W, glm::X, glm::W)
-#define rga swizzle(glm::X, glm::Y, glm::W)
-#define gga swizzle(glm::Y, glm::Y, glm::W)
-#define bga swizzle(glm::Z, glm::Y, glm::W)
-#define aga swizzle(glm::W, glm::Y, glm::W)
-#define rba swizzle(glm::X, glm::Z, glm::W)
-#define gba swizzle(glm::Y, glm::Z, glm::W)
-#define bba swizzle(glm::Z, glm::Z, glm::W)
-#define aba swizzle(glm::W, glm::Z, glm::W)
-#define raa swizzle(glm::X, glm::W, glm::W)
-#define gaa swizzle(glm::Y, glm::W, glm::W)
-#define baa swizzle(glm::Z, glm::W, glm::W)
-#define aaa swizzle(glm::W, glm::W, glm::W)
-
-#endif//defined(GLM_SWIZZLE) && (GLM_SWIZZLE & GLM_SWIZZLE_RGBA)
-
-#if defined(GLM_SWIZZLE) && (GLM_SWIZZLE & GLM_SWIZZLE_STPQ)
-
-#define sss swizzle(glm::X, glm::X, glm::X)
-#define tss swizzle(glm::Y, glm::X, glm::X)
-#define pss swizzle(glm::Z, glm::X, glm::X)
-#define qss swizzle(glm::W, glm::X, glm::X)
-#define sts swizzle(glm::X, glm::Y, glm::X)
-#define tts swizzle(glm::Y, glm::Y, glm::X)
-#define pts swizzle(glm::Z, glm::Y, glm::X)
-#define qts swizzle(glm::W, glm::Y, glm::X)
-#define sps swizzle(glm::X, glm::Z, glm::X)
-#define tps swizzle(glm::Y, glm::Z, glm::X)
-#define pps swizzle(glm::Z, glm::Z, glm::X)
-#define qps swizzle(glm::W, glm::Z, glm::X)
-#define sqs swizzle(glm::X, glm::W, glm::X)
-#define tqs swizzle(glm::Y, glm::W, glm::X)
-#define pqs swizzle(glm::Z, glm::W, glm::X)
-#define qqs swizzle(glm::W, glm::W, glm::X)
-#define sst swizzle(glm::X, glm::X, glm::Y)
-#define tst swizzle(glm::Y, glm::X, glm::Y)
-#define pst swizzle(glm::Z, glm::X, glm::Y)
-#define qst swizzle(glm::W, glm::X, glm::Y)
-#define stt swizzle(glm::X, glm::Y, glm::Y)
-#define ttt swizzle(glm::Y, glm::Y, glm::Y)
-#define ptt swizzle(glm::Z, glm::Y, glm::Y)
-#define qtt swizzle(glm::W, glm::Y, glm::Y)
-#define spt swizzle(glm::X, glm::Z, glm::Y)
-#define tpt swizzle(glm::Y, glm::Z, glm::Y)
-#define ppt swizzle(glm::Z, glm::Z, glm::Y)
-#define qpt swizzle(glm::W, glm::Z, glm::Y)
-#define sqt swizzle(glm::X, glm::W, glm::Y)
-#define tqt swizzle(glm::Y, glm::W, glm::Y)
-#define pqt swizzle(glm::Z, glm::W, glm::Y)
-#define qqt swizzle(glm::W, glm::W, glm::Y)
-#define ssp swizzle(glm::X, glm::X, glm::Z)
-#define tsp swizzle(glm::Y, glm::X, glm::Z)
-#define psp swizzle(glm::Z, glm::X, glm::Z)
-#define qsp swizzle(glm::W, glm::X, glm::Z)
-#define stp swizzle(glm::X, glm::Y, glm::Z)
-#define ttp swizzle(glm::Y, glm::Y, glm::Z)
-#define ptp swizzle(glm::Z, glm::Y, glm::Z)
-#define qtp swizzle(glm::W, glm::Y, glm::Z)
-#define spp swizzle(glm::X, glm::Z, glm::Z)
-#define tpp swizzle(glm::Y, glm::Z, glm::Z)
-#define ppp swizzle(glm::Z, glm::Z, glm::Z)
-#define qpp swizzle(glm::W, glm::Z, glm::Z)
-#define sqp swizzle(glm::X, glm::W, glm::Z)
-#define tqp swizzle(glm::Y, glm::W, glm::Z)
-#define pqp swizzle(glm::Z, glm::W, glm::Z)
-#define qqp swizzle(glm::W, glm::W, glm::Z)
-#define ssq swizzle(glm::X, glm::X, glm::W)
-#define tsq swizzle(glm::Y, glm::X, glm::W)
-#define psq swizzle(glm::Z, glm::X, glm::W)
-#define qsq swizzle(glm::W, glm::X, glm::W)
-#define stq swizzle(glm::X, glm::Y, glm::W)
-#define ttq swizzle(glm::Y, glm::Y, glm::W)
-#define ptq swizzle(glm::Z, glm::Y, glm::W)
-#define qtq swizzle(glm::W, glm::Y, glm::W)
-#define spq swizzle(glm::X, glm::Z, glm::W)
-#define tpq swizzle(glm::Y, glm::Z, glm::W)
-#define ppq swizzle(glm::Z, glm::Z, glm::W)
-#define qpq swizzle(glm::W, glm::Z, glm::W)
-#define sqq swizzle(glm::X, glm::W, glm::W)
-#define tqq swizzle(glm::Y, glm::W, glm::W)
-#define pqq swizzle(glm::Z, glm::W, glm::W)
-#define qqq swizzle(glm::W, glm::W, glm::W)
-
-#endif//defined(GLM_SWIZZLE) && (GLM_SWIZZLE & GLM_SWIZZLE_STPQ)
-
-#if defined(GLM_SWIZZLE) && (GLM_SWIZZLE & GLM_SWIZZLE_XYZW)
-
-#define xxxx swizzle(glm::X, glm::X, glm::X, glm::X)
-#define yxxx swizzle(glm::Y, glm::X, glm::X, glm::X)
-#define zxxx swizzle(glm::Z, glm::X, glm::X, glm::X)
-#define wxxx swizzle(glm::W, glm::X, glm::X, glm::X)
-#define xyxx swizzle(glm::X, glm::Y, glm::X, glm::X)
-#define yyxx swizzle(glm::Y, glm::Y, glm::X, glm::X)
-#define zyxx swizzle(glm::Z, glm::Y, glm::X, glm::X)
-#define wyxx swizzle(glm::W, glm::Y, glm::X, glm::X)
-#define xzxx swizzle(glm::X, glm::Z, glm::X, glm::X)
-#define yzxx swizzle(glm::Y, glm::Z, glm::X, glm::X)
-#define zzxx swizzle(glm::Z, glm::Z, glm::X, glm::X)
-#define wzxx swizzle(glm::W, glm::Z, glm::X, glm::X)
-#define xwxx swizzle(glm::X, glm::W, glm::X, glm::X)
-#define ywxx swizzle(glm::Y, glm::W, glm::X, glm::X)
-#define zwxx swizzle(glm::Z, glm::W, glm::X, glm::X)
-#define wwxx swizzle(glm::W, glm::W, glm::X, glm::X)
-#define xxyx swizzle(glm::X, glm::X, glm::Y, glm::X)
-#define yxyx swizzle(glm::Y, glm::X, glm::Y, glm::X)
-#define zxyx swizzle(glm::Z, glm::X, glm::Y, glm::X)
-#define wxyx swizzle(glm::W, glm::X, glm::Y, glm::X)
-#define xyyx swizzle(glm::X, glm::Y, glm::Y, glm::X)
-#define yyyx swizzle(glm::Y, glm::Y, glm::Y, glm::X)
-#define zyyx swizzle(glm::Z, glm::Y, glm::Y, glm::X)
-#define wyyx swizzle(glm::W, glm::Y, glm::Y, glm::X)
-#define xzyx swizzle(glm::X, glm::Z, glm::Y, glm::X)
-#define yzyx swizzle(glm::Y, glm::Z, glm::Y, glm::X)
-#define zzyx swizzle(glm::Z, glm::Z, glm::Y, glm::X)
-#define wzyx swizzle(glm::W, glm::Z, glm::Y, glm::X)
-#define xwyx swizzle(glm::X, glm::W, glm::Y, glm::X)
-#define ywyx swizzle(glm::Y, glm::W, glm::Y, glm::X)
-#define zwyx swizzle(glm::Z, glm::W, glm::Y, glm::X)
-#define wwyx swizzle(glm::W, glm::W, glm::Y, glm::X)
-#define xxzx swizzle(glm::X, glm::X, glm::Z, glm::X)
-#define yxzx swizzle(glm::Y, glm::X, glm::Z, glm::X)
-#define zxzx swizzle(glm::Z, glm::X, glm::Z, glm::X)
-#define wxzx swizzle(glm::W, glm::X, glm::Z, glm::X)
-#define xyzx swizzle(glm::X, glm::Y, glm::Z, glm::X)
-#define yyzx swizzle(glm::Y, glm::Y, glm::Z, glm::X)
-#define zyzx swizzle(glm::Z, glm::Y, glm::Z, glm::X)
-#define wyzx swizzle(glm::W, glm::Y, glm::Z, glm::X)
-#define xzzx swizzle(glm::X, glm::Z, glm::Z, glm::X)
-#define yzzx swizzle(glm::Y, glm::Z, glm::Z, glm::X)
-#define zzzx swizzle(glm::Z, glm::Z, glm::Z, glm::X)
-#define wzzx swizzle(glm::W, glm::Z, glm::Z, glm::X)
-#define xwzx swizzle(glm::X, glm::W, glm::Z, glm::X)
-#define ywzx swizzle(glm::Y, glm::W, glm::Z, glm::X)
-#define zwzx swizzle(glm::Z, glm::W, glm::Z, glm::X)
-#define wwzx swizzle(glm::W, glm::W, glm::Z, glm::X)
-#define xxwx swizzle(glm::X, glm::X, glm::W, glm::X)
-#define yxwx swizzle(glm::Y, glm::X, glm::W, glm::X)
-#define zxwx swizzle(glm::Z, glm::X, glm::W, glm::X)
-#define wxwx swizzle(glm::W, glm::X, glm::W, glm::X)
-#define xywx swizzle(glm::X, glm::Y, glm::W, glm::X)
-#define yywx swizzle(glm::Y, glm::Y, glm::W, glm::X)
-#define zywx swizzle(glm::Z, glm::Y, glm::W, glm::X)
-#define wywx swizzle(glm::W, glm::Y, glm::W, glm::X)
-#define xzwx swizzle(glm::X, glm::Z, glm::W, glm::X)
-#define yzwx swizzle(glm::Y, glm::Z, glm::W, glm::X)
-#define zzwx swizzle(glm::Z, glm::Z, glm::W, glm::X)
-#define wzwx swizzle(glm::W, glm::Z, glm::W, glm::X)
-#define xwwx swizzle(glm::X, glm::W, glm::W, glm::X)
-#define ywwx swizzle(glm::Y, glm::W, glm::W, glm::X)
-#define zwwx swizzle(glm::Z, glm::W, glm::W, glm::X)
-#define wwwx swizzle(glm::W, glm::W, glm::W, glm::X)
-#define xxxy swizzle(glm::X, glm::X, glm::X, glm::Y)
-#define yxxy swizzle(glm::Y, glm::X, glm::X, glm::Y)
-#define zxxy swizzle(glm::Z, glm::X, glm::X, glm::Y)
-#define wxxy swizzle(glm::W, glm::X, glm::X, glm::Y)
-#define xyxy swizzle(glm::X, glm::Y, glm::X, glm::Y)
-#define yyxy swizzle(glm::Y, glm::Y, glm::X, glm::Y)
-#define zyxy swizzle(glm::Z, glm::Y, glm::X, glm::Y)
-#define wyxy swizzle(glm::W, glm::Y, glm::X, glm::Y)
-#define xzxy swizzle(glm::X, glm::Z, glm::X, glm::Y)
-#define yzxy swizzle(glm::Y, glm::Z, glm::X, glm::Y)
-#define zzxy swizzle(glm::Z, glm::Z, glm::X, glm::Y)
-#define wzxy swizzle(glm::W, glm::Z, glm::X, glm::Y)
-#define xwxy swizzle(glm::X, glm::W, glm::X, glm::Y)
-#define ywxy swizzle(glm::Y, glm::W, glm::X, glm::Y)
-#define zwxy swizzle(glm::Z, glm::W, glm::X, glm::Y)
-#define wwxy swizzle(glm::W, glm::W, glm::X, glm::Y)
-#define xxyy swizzle(glm::X, glm::X, glm::Y, glm::Y)
-#define yxyy swizzle(glm::Y, glm::X, glm::Y, glm::Y)
-#define zxyy swizzle(glm::Z, glm::X, glm::Y, glm::Y)
-#define wxyy swizzle(glm::W, glm::X, glm::Y, glm::Y)
-#define xyyy swizzle(glm::X, glm::Y, glm::Y, glm::Y)
-#define yyyy swizzle(glm::Y, glm::Y, glm::Y, glm::Y)
-#define zyyy swizzle(glm::Z, glm::Y, glm::Y, glm::Y)
-#define wyyy swizzle(glm::W, glm::Y, glm::Y, glm::Y)
-#define xzyy swizzle(glm::X, glm::Z, glm::Y, glm::Y)
-#define yzyy swizzle(glm::Y, glm::Z, glm::Y, glm::Y)
-#define zzyy swizzle(glm::Z, glm::Z, glm::Y, glm::Y)
-#define wzyy swizzle(glm::W, glm::Z, glm::Y, glm::Y)
-#define xwyy swizzle(glm::X, glm::W, glm::Y, glm::Y)
-#define ywyy swizzle(glm::Y, glm::W, glm::Y, glm::Y)
-#define zwyy swizzle(glm::Z, glm::W, glm::Y, glm::Y)
-#define wwyy swizzle(glm::W, glm::W, glm::Y, glm::Y)
-#define xxzy swizzle(glm::X, glm::X, glm::Z, glm::Y)
-#define yxzy swizzle(glm::Y, glm::X, glm::Z, glm::Y)
-#define zxzy swizzle(glm::Z, glm::X, glm::Z, glm::Y)
-#define wxzy swizzle(glm::W, glm::X, glm::Z, glm::Y)
-#define xyzy swizzle(glm::X, glm::Y, glm::Z, glm::Y)
-#define yyzy swizzle(glm::Y, glm::Y, glm::Z, glm::Y)
-#define zyzy swizzle(glm::Z, glm::Y, glm::Z, glm::Y)
-#define wyzy swizzle(glm::W, glm::Y, glm::Z, glm::Y)
-#define xzzy swizzle(glm::X, glm::Z, glm::Z, glm::Y)
-#define yzzy swizzle(glm::Y, glm::Z, glm::Z, glm::Y)
-#define zzzy swizzle(glm::Z, glm::Z, glm::Z, glm::Y)
-#define wzzy swizzle(glm::W, glm::Z, glm::Z, glm::Y)
-#define xwzy swizzle(glm::X, glm::W, glm::Z, glm::Y)
-#define ywzy swizzle(glm::Y, glm::W, glm::Z, glm::Y)
-#define zwzy swizzle(glm::Z, glm::W, glm::Z, glm::Y)
-#define wwzy swizzle(glm::W, glm::W, glm::Z, glm::Y)
-#define xxwy swizzle(glm::X, glm::X, glm::W, glm::Y)
-#define yxwy swizzle(glm::Y, glm::X, glm::W, glm::Y)
-#define zxwy swizzle(glm::Z, glm::X, glm::W, glm::Y)
-#define wxwy swizzle(glm::W, glm::X, glm::W, glm::Y)
-#define xywy swizzle(glm::X, glm::Y, glm::W, glm::Y)
-#define yywy swizzle(glm::Y, glm::Y, glm::W, glm::Y)
-#define zywy swizzle(glm::Z, glm::Y, glm::W, glm::Y)
-#define wywy swizzle(glm::W, glm::Y, glm::W, glm::Y)
-#define xzwy swizzle(glm::X, glm::Z, glm::W, glm::Y)
-#define yzwy swizzle(glm::Y, glm::Z, glm::W, glm::Y)
-#define zzwy swizzle(glm::Z, glm::Z, glm::W, glm::Y)
-#define wzwy swizzle(glm::W, glm::Z, glm::W, glm::Y)
-#define xwwy swizzle(glm::X, glm::W, glm::W, glm::Y)
-#define ywwy swizzle(glm::Y, glm::W, glm::W, glm::Y)
-#define zwwy swizzle(glm::Z, glm::W, glm::W, glm::Y)
-#define wwwy swizzle(glm::W, glm::W, glm::W, glm::Y)
-#define xxxz swizzle(glm::X, glm::X, glm::X, glm::Z)
-#define yxxz swizzle(glm::Y, glm::X, glm::X, glm::Z)
-#define zxxz swizzle(glm::Z, glm::X, glm::X, glm::Z)
-#define wxxz swizzle(glm::W, glm::X, glm::X, glm::Z)
-#define xyxz swizzle(glm::X, glm::Y, glm::X, glm::Z)
-#define yyxz swizzle(glm::Y, glm::Y, glm::X, glm::Z)
-#define zyxz swizzle(glm::Z, glm::Y, glm::X, glm::Z)
-#define wyxz swizzle(glm::W, glm::Y, glm::X, glm::Z)
-#define xzxz swizzle(glm::X, glm::Z, glm::X, glm::Z)
-#define yzxz swizzle(glm::Y, glm::Z, glm::X, glm::Z)
-#define zzxz swizzle(glm::Z, glm::Z, glm::X, glm::Z)
-#define wzxz swizzle(glm::W, glm::Z, glm::X, glm::Z)
-#define xwxz swizzle(glm::X, glm::W, glm::X, glm::Z)
-#define ywxz swizzle(glm::Y, glm::W, glm::X, glm::Z)
-#define zwxz swizzle(glm::Z, glm::W, glm::X, glm::Z)
-#define wwxz swizzle(glm::W, glm::W, glm::X, glm::Z)
-#define xxyz swizzle(glm::X, glm::X, glm::Y, glm::Z)
-#define yxyz swizzle(glm::Y, glm::X, glm::Y, glm::Z)
-#define zxyz swizzle(glm::Z, glm::X, glm::Y, glm::Z)
-#define wxyz swizzle(glm::W, glm::X, glm::Y, glm::Z)
-#define xyyz swizzle(glm::X, glm::Y, glm::Y, glm::Z)
-#define yyyz swizzle(glm::Y, glm::Y, glm::Y, glm::Z)
-#define zyyz swizzle(glm::Z, glm::Y, glm::Y, glm::Z)
-#define wyyz swizzle(glm::W, glm::Y, glm::Y, glm::Z)
-#define xzyz swizzle(glm::X, glm::Z, glm::Y, glm::Z)
-#define yzyz swizzle(glm::Y, glm::Z, glm::Y, glm::Z)
-#define zzyz swizzle(glm::Z, glm::Z, glm::Y, glm::Z)
-#define wzyz swizzle(glm::W, glm::Z, glm::Y, glm::Z)
-#define xwyz swizzle(glm::X, glm::W, glm::Y, glm::Z)
-#define ywyz swizzle(glm::Y, glm::W, glm::Y, glm::Z)
-#define zwyz swizzle(glm::Z, glm::W, glm::Y, glm::Z)
-#define wwyz swizzle(glm::W, glm::W, glm::Y, glm::Z)
-#define xxzz swizzle(glm::X, glm::X, glm::Z, glm::Z)
-#define yxzz swizzle(glm::Y, glm::X, glm::Z, glm::Z)
-#define zxzz swizzle(glm::Z, glm::X, glm::Z, glm::Z)
-#define wxzz swizzle(glm::W, glm::X, glm::Z, glm::Z)
-#define xyzz swizzle(glm::X, glm::Y, glm::Z, glm::Z)
-#define yyzz swizzle(glm::Y, glm::Y, glm::Z, glm::Z)
-#define zyzz swizzle(glm::Z, glm::Y, glm::Z, glm::Z)
-#define wyzz swizzle(glm::W, glm::Y, glm::Z, glm::Z)
-#define xzzz swizzle(glm::X, glm::Z, glm::Z, glm::Z)
-#define yzzz swizzle(glm::Y, glm::Z, glm::Z, glm::Z)
-#define zzzz swizzle(glm::Z, glm::Z, glm::Z, glm::Z)
-#define wzzz swizzle(glm::W, glm::Z, glm::Z, glm::Z)
-#define xwzz swizzle(glm::X, glm::W, glm::Z, glm::Z)
-#define ywzz swizzle(glm::Y, glm::W, glm::Z, glm::Z)
-#define zwzz swizzle(glm::Z, glm::W, glm::Z, glm::Z)
-#define wwzz swizzle(glm::W, glm::W, glm::Z, glm::Z)
-#define xxwz swizzle(glm::X, glm::X, glm::W, glm::Z)
-#define yxwz swizzle(glm::Y, glm::X, glm::W, glm::Z)
-#define zxwz swizzle(glm::Z, glm::X, glm::W, glm::Z)
-#define wxwz swizzle(glm::W, glm::X, glm::W, glm::Z)
-#define xywz swizzle(glm::X, glm::Y, glm::W, glm::Z)
-#define yywz swizzle(glm::Y, glm::Y, glm::W, glm::Z)
-#define zywz swizzle(glm::Z, glm::Y, glm::W, glm::Z)
-#define wywz swizzle(glm::W, glm::Y, glm::W, glm::Z)
-#define xzwz swizzle(glm::X, glm::Z, glm::W, glm::Z)
-#define yzwz swizzle(glm::Y, glm::Z, glm::W, glm::Z)
-#define zzwz swizzle(glm::Z, glm::Z, glm::W, glm::Z)
-#define wzwz swizzle(glm::W, glm::Z, glm::W, glm::Z)
-#define xwwz swizzle(glm::X, glm::W, glm::W, glm::Z)
-#define ywwz swizzle(glm::Y, glm::W, glm::W, glm::Z)
-#define zwwz swizzle(glm::Z, glm::W, glm::W, glm::Z)
-#define wwwz swizzle(glm::W, glm::W, glm::W, glm::Z)
-#define xxxw swizzle(glm::X, glm::X, glm::X, glm::W)
-#define yxxw swizzle(glm::Y, glm::X, glm::X, glm::W)
-#define zxxw swizzle(glm::Z, glm::X, glm::X, glm::W)
-#define wxxw swizzle(glm::W, glm::X, glm::X, glm::W)
-#define xyxw swizzle(glm::X, glm::Y, glm::X, glm::W)
-#define yyxw swizzle(glm::Y, glm::Y, glm::X, glm::W)
-#define zyxw swizzle(glm::Z, glm::Y, glm::X, glm::W)
-#define wyxw swizzle(glm::W, glm::Y, glm::X, glm::W)
-#define xzxw swizzle(glm::X, glm::Z, glm::X, glm::W)
-#define yzxw swizzle(glm::Y, glm::Z, glm::X, glm::W)
-#define zzxw swizzle(glm::Z, glm::Z, glm::X, glm::W)
-#define wzxw swizzle(glm::W, glm::Z, glm::X, glm::W)
-#define xwxw swizzle(glm::X, glm::W, glm::X, glm::W)
-#define ywxw swizzle(glm::Y, glm::W, glm::X, glm::W)
-#define zwxw swizzle(glm::Z, glm::W, glm::X, glm::W)
-#define wwxw swizzle(glm::W, glm::W, glm::X, glm::W)
-#define xxyw swizzle(glm::X, glm::X, glm::Y, glm::W)
-#define yxyw swizzle(glm::Y, glm::X, glm::Y, glm::W)
-#define zxyw swizzle(glm::Z, glm::X, glm::Y, glm::W)
-#define wxyw swizzle(glm::W, glm::X, glm::Y, glm::W)
-#define xyyw swizzle(glm::X, glm::Y, glm::Y, glm::W)
-#define yyyw swizzle(glm::Y, glm::Y, glm::Y, glm::W)
-#define zyyw swizzle(glm::Z, glm::Y, glm::Y, glm::W)
-#define wyyw swizzle(glm::W, glm::Y, glm::Y, glm::W)
-#define xzyw swizzle(glm::X, glm::Z, glm::Y, glm::W)
-#define yzyw swizzle(glm::Y, glm::Z, glm::Y, glm::W)
-#define zzyw swizzle(glm::Z, glm::Z, glm::Y, glm::W)
-#define wzyw swizzle(glm::W, glm::Z, glm::Y, glm::W)
-#define xwyw swizzle(glm::X, glm::W, glm::Y, glm::W)
-#define ywyw swizzle(glm::Y, glm::W, glm::Y, glm::W)
-#define zwyw swizzle(glm::Z, glm::W, glm::Y, glm::W)
-#define wwyw swizzle(glm::W, glm::W, glm::Y, glm::W)
-#define xxzw swizzle(glm::X, glm::X, glm::Z, glm::W)
-#define yxzw swizzle(glm::Y, glm::X, glm::Z, glm::W)
-#define zxzw swizzle(glm::Z, glm::X, glm::Z, glm::W)
-#define wxzw swizzle(glm::W, glm::X, glm::Z, glm::W)
-#define xyzw swizzle(glm::X, glm::Y, glm::Z, glm::W)
-#define yyzw swizzle(glm::Y, glm::Y, glm::Z, glm::W)
-#define zyzw swizzle(glm::Z, glm::Y, glm::Z, glm::W)
-#define wyzw swizzle(glm::W, glm::Y, glm::Z, glm::W)
-#define xzzw swizzle(glm::X, glm::Z, glm::Z, glm::W)
-#define yzzw swizzle(glm::Y, glm::Z, glm::Z, glm::W)
-#define zzzw swizzle(glm::Z, glm::Z, glm::Z, glm::W)
-#define wzzw swizzle(glm::W, glm::Z, glm::Z, glm::W)
-#define xwzw swizzle(glm::X, glm::W, glm::Z, glm::W)
-#define ywzw swizzle(glm::Y, glm::W, glm::Z, glm::W)
-#define zwzw swizzle(glm::Z, glm::W, glm::Z, glm::W)
-#define wwzw swizzle(glm::W, glm::W, glm::Z, glm::W)
-#define xxww swizzle(glm::X, glm::X, glm::W, glm::W)
-#define yxww swizzle(glm::Y, glm::X, glm::W, glm::W)
-#define zxww swizzle(glm::Z, glm::X, glm::W, glm::W)
-#define wxww swizzle(glm::W, glm::X, glm::W, glm::W)
-#define xyww swizzle(glm::X, glm::Y, glm::W, glm::W)
-#define yyww swizzle(glm::Y, glm::Y, glm::W, glm::W)
-#define zyww swizzle(glm::Z, glm::Y, glm::W, glm::W)
-#define wyww swizzle(glm::W, glm::Y, glm::W, glm::W)
-#define xzww swizzle(glm::X, glm::Z, glm::W, glm::W)
-#define yzww swizzle(glm::Y, glm::Z, glm::W, glm::W)
-#define zzww swizzle(glm::Z, glm::Z, glm::W, glm::W)
-#define wzww swizzle(glm::W, glm::Z, glm::W, glm::W)
-#define xwww swizzle(glm::X, glm::W, glm::W, glm::W)
-#define ywww swizzle(glm::Y, glm::W, glm::W, glm::W)
-#define zwww swizzle(glm::Z, glm::W, glm::W, glm::W)
-#define wwww swizzle(glm::W, glm::W, glm::W, glm::W)
-
-#endif//defined(GLM_SWIZZLE) && (GLM_SWIZZLE & GLM_SWIZZLE_XYZW)
-
-#if defined(GLM_SWIZZLE) && (GLM_SWIZZLE & GLM_SWIZZLE_RGBA)
-
-#define rrrr swizzle(glm::X, glm::X, glm::X, glm::X)
-#define grrr swizzle(glm::Y, glm::X, glm::X, glm::X)
-#define brrr swizzle(glm::Z, glm::X, glm::X, glm::X)
-#define arrr swizzle(glm::W, glm::X, glm::X, glm::X)
-#define rgrr swizzle(glm::X, glm::Y, glm::X, glm::X)
-#define ggrr swizzle(glm::Y, glm::Y, glm::X, glm::X)
-#define bgrr swizzle(glm::Z, glm::Y, glm::X, glm::X)
-#define agrr swizzle(glm::W, glm::Y, glm::X, glm::X)
-#define rbrr swizzle(glm::X, glm::Z, glm::X, glm::X)
-#define gbrr swizzle(glm::Y, glm::Z, glm::X, glm::X)
-#define bbrr swizzle(glm::Z, glm::Z, glm::X, glm::X)
-#define abrr swizzle(glm::W, glm::Z, glm::X, glm::X)
-#define rarr swizzle(glm::X, glm::W, glm::X, glm::X)
-#define garr swizzle(glm::Y, glm::W, glm::X, glm::X)
-#define barr swizzle(glm::Z, glm::W, glm::X, glm::X)
-#define aarr swizzle(glm::W, glm::W, glm::X, glm::X)
-#define rrgr swizzle(glm::X, glm::X, glm::Y, glm::X)
-#define grgr swizzle(glm::Y, glm::X, glm::Y, glm::X)
-#define brgr swizzle(glm::Z, glm::X, glm::Y, glm::X)
-#define argr swizzle(glm::W, glm::X, glm::Y, glm::X)
-#define rggr swizzle(glm::X, glm::Y, glm::Y, glm::X)
-#define gggr swizzle(glm::Y, glm::Y, glm::Y, glm::X)
-#define bggr swizzle(glm::Z, glm::Y, glm::Y, glm::X)
-#define aggr swizzle(glm::W, glm::Y, glm::Y, glm::X)
-#define rbgr swizzle(glm::X, glm::Z, glm::Y, glm::X)
-#define gbgr swizzle(glm::Y, glm::Z, glm::Y, glm::X)
-#define bbgr swizzle(glm::Z, glm::Z, glm::Y, glm::X)
-#define abgr swizzle(glm::W, glm::Z, glm::Y, glm::X)
-#define ragr swizzle(glm::X, glm::W, glm::Y, glm::X)
-#define gagr swizzle(glm::Y, glm::W, glm::Y, glm::X)
-#define bagr swizzle(glm::Z, glm::W, glm::Y, glm::X)
-#define aagr swizzle(glm::W, glm::W, glm::Y, glm::X)
-#define rrbr swizzle(glm::X, glm::X, glm::Z, glm::X)
-#define grbr swizzle(glm::Y, glm::X, glm::Z, glm::X)
-#define brbr swizzle(glm::Z, glm::X, glm::Z, glm::X)
-#define arbr swizzle(glm::W, glm::X, glm::Z, glm::X)
-#define rgbr swizzle(glm::X, glm::Y, glm::Z, glm::X)
-#define ggbr swizzle(glm::Y, glm::Y, glm::Z, glm::X)
-#define bgbr swizzle(glm::Z, glm::Y, glm::Z, glm::X)
-#define agbr swizzle(glm::W, glm::Y, glm::Z, glm::X)
-#define rbbr swizzle(glm::X, glm::Z, glm::Z, glm::X)
-#define gbbr swizzle(glm::Y, glm::Z, glm::Z, glm::X)
-#define bbbr swizzle(glm::Z, glm::Z, glm::Z, glm::X)
-#define abbr swizzle(glm::W, glm::Z, glm::Z, glm::X)
-#define rabr swizzle(glm::X, glm::W, glm::Z, glm::X)
-#define gabr swizzle(glm::Y, glm::W, glm::Z, glm::X)
-#define babr swizzle(glm::Z, glm::W, glm::Z, glm::X)
-#define aabr swizzle(glm::W, glm::W, glm::Z, glm::X)
-#define rrar swizzle(glm::X, glm::X, glm::W, glm::X)
-#define grar swizzle(glm::Y, glm::X, glm::W, glm::X)
-#define brar swizzle(glm::Z, glm::X, glm::W, glm::X)
-#define arar swizzle(glm::W, glm::X, glm::W, glm::X)
-#define rgar swizzle(glm::X, glm::Y, glm::W, glm::X)
-#define ggar swizzle(glm::Y, glm::Y, glm::W, glm::X)
-#define bgar swizzle(glm::Z, glm::Y, glm::W, glm::X)
-#define agar swizzle(glm::W, glm::Y, glm::W, glm::X)
-#define rbar swizzle(glm::X, glm::Z, glm::W, glm::X)
-#define gbar swizzle(glm::Y, glm::Z, glm::W, glm::X)
-#define bbar swizzle(glm::Z, glm::Z, glm::W, glm::X)
-#define abar swizzle(glm::W, glm::Z, glm::W, glm::X)
-#define raar swizzle(glm::X, glm::W, glm::W, glm::X)
-#define gaar swizzle(glm::Y, glm::W, glm::W, glm::X)
-#define baar swizzle(glm::Z, glm::W, glm::W, glm::X)
-#define aaar swizzle(glm::W, glm::W, glm::W, glm::X)
-#define rrrg swizzle(glm::X, glm::X, glm::X, glm::Y)
-#define grrg swizzle(glm::Y, glm::X, glm::X, glm::Y)
-#define brrg swizzle(glm::Z, glm::X, glm::X, glm::Y)
-#define arrg swizzle(glm::W, glm::X, glm::X, glm::Y)
-#define rgrg swizzle(glm::X, glm::Y, glm::X, glm::Y)
-#define ggrg swizzle(glm::Y, glm::Y, glm::X, glm::Y)
-#define bgrg swizzle(glm::Z, glm::Y, glm::X, glm::Y)
-#define agrg swizzle(glm::W, glm::Y, glm::X, glm::Y)
-#define rbrg swizzle(glm::X, glm::Z, glm::X, glm::Y)
-#define gbrg swizzle(glm::Y, glm::Z, glm::X, glm::Y)
-#define bbrg swizzle(glm::Z, glm::Z, glm::X, glm::Y)
-#define abrg swizzle(glm::W, glm::Z, glm::X, glm::Y)
-#define rarg swizzle(glm::X, glm::W, glm::X, glm::Y)
-#define garg swizzle(glm::Y, glm::W, glm::X, glm::Y)
-#define barg swizzle(glm::Z, glm::W, glm::X, glm::Y)
-#define aarg swizzle(glm::W, glm::W, glm::X, glm::Y)
-#define rrgg swizzle(glm::X, glm::X, glm::Y, glm::Y)
-#define grgg swizzle(glm::Y, glm::X, glm::Y, glm::Y)
-#define brgg swizzle(glm::Z, glm::X, glm::Y, glm::Y)
-#define argg swizzle(glm::W, glm::X, glm::Y, glm::Y)
-#define rggg swizzle(glm::X, glm::Y, glm::Y, glm::Y)
-#define gggg swizzle(glm::Y, glm::Y, glm::Y, glm::Y)
-#define bggg swizzle(glm::Z, glm::Y, glm::Y, glm::Y)
-#define aggg swizzle(glm::W, glm::Y, glm::Y, glm::Y)
-#define rbgg swizzle(glm::X, glm::Z, glm::Y, glm::Y)
-#define gbgg swizzle(glm::Y, glm::Z, glm::Y, glm::Y)
-#define bbgg swizzle(glm::Z, glm::Z, glm::Y, glm::Y)
-#define abgg swizzle(glm::W, glm::Z, glm::Y, glm::Y)
-#define ragg swizzle(glm::X, glm::W, glm::Y, glm::Y)
-#define gagg swizzle(glm::Y, glm::W, glm::Y, glm::Y)
-#define bagg swizzle(glm::Z, glm::W, glm::Y, glm::Y)
-#define aagg swizzle(glm::W, glm::W, glm::Y, glm::Y)
-#define rrbg swizzle(glm::X, glm::X, glm::Z, glm::Y)
-#define grbg swizzle(glm::Y, glm::X, glm::Z, glm::Y)
-#define brbg swizzle(glm::Z, glm::X, glm::Z, glm::Y)
-#define arbg swizzle(glm::W, glm::X, glm::Z, glm::Y)
-#define rgbg swizzle(glm::X, glm::Y, glm::Z, glm::Y)
-#define ggbg swizzle(glm::Y, glm::Y, glm::Z, glm::Y)
-#define bgbg swizzle(glm::Z, glm::Y, glm::Z, glm::Y)
-#define agbg swizzle(glm::W, glm::Y, glm::Z, glm::Y)
-#define rbbg swizzle(glm::X, glm::Z, glm::Z, glm::Y)
-#define gbbg swizzle(glm::Y, glm::Z, glm::Z, glm::Y)
-#define bbbg swizzle(glm::Z, glm::Z, glm::Z, glm::Y)
-#define abbg swizzle(glm::W, glm::Z, glm::Z, glm::Y)
-#define rabg swizzle(glm::X, glm::W, glm::Z, glm::Y)
-#define gabg swizzle(glm::Y, glm::W, glm::Z, glm::Y)
-#define babg swizzle(glm::Z, glm::W, glm::Z, glm::Y)
-#define aabg swizzle(glm::W, glm::W, glm::Z, glm::Y)
-#define rrag swizzle(glm::X, glm::X, glm::W, glm::Y)
-#define grag swizzle(glm::Y, glm::X, glm::W, glm::Y)
-#define brag swizzle(glm::Z, glm::X, glm::W, glm::Y)
-#define arag swizzle(glm::W, glm::X, glm::W, glm::Y)
-#define rgag swizzle(glm::X, glm::Y, glm::W, glm::Y)
-#define ggag swizzle(glm::Y, glm::Y, glm::W, glm::Y)
-#define bgag swizzle(glm::Z, glm::Y, glm::W, glm::Y)
-#define agag swizzle(glm::W, glm::Y, glm::W, glm::Y)
-#define rbag swizzle(glm::X, glm::Z, glm::W, glm::Y)
-#define gbag swizzle(glm::Y, glm::Z, glm::W, glm::Y)
-#define bbag swizzle(glm::Z, glm::Z, glm::W, glm::Y)
-#define abag swizzle(glm::W, glm::Z, glm::W, glm::Y)
-#define raag swizzle(glm::X, glm::W, glm::W, glm::Y)
-#define gaag swizzle(glm::Y, glm::W, glm::W, glm::Y)
-#define baag swizzle(glm::Z, glm::W, glm::W, glm::Y)
-#define aaag swizzle(glm::W, glm::W, glm::W, glm::Y)
-#define rrrb swizzle(glm::X, glm::X, glm::X, glm::Z)
-#define grrb swizzle(glm::Y, glm::X, glm::X, glm::Z)
-#define brrb swizzle(glm::Z, glm::X, glm::X, glm::Z)
-#define arrb swizzle(glm::W, glm::X, glm::X, glm::Z)
-#define rgrb swizzle(glm::X, glm::Y, glm::X, glm::Z)
-#define ggrb swizzle(glm::Y, glm::Y, glm::X, glm::Z)
-#define bgrb swizzle(glm::Z, glm::Y, glm::X, glm::Z)
-#define agrb swizzle(glm::W, glm::Y, glm::X, glm::Z)
-#define rbrb swizzle(glm::X, glm::Z, glm::X, glm::Z)
-#define gbrb swizzle(glm::Y, glm::Z, glm::X, glm::Z)
-#define bbrb swizzle(glm::Z, glm::Z, glm::X, glm::Z)
-#define abrb swizzle(glm::W, glm::Z, glm::X, glm::Z)
-#define rarb swizzle(glm::X, glm::W, glm::X, glm::Z)
-#define garb swizzle(glm::Y, glm::W, glm::X, glm::Z)
-#define barb swizzle(glm::Z, glm::W, glm::X, glm::Z)
-#define aarb swizzle(glm::W, glm::W, glm::X, glm::Z)
-#define rrgb swizzle(glm::X, glm::X, glm::Y, glm::Z)
-#define grgb swizzle(glm::Y, glm::X, glm::Y, glm::Z)
-#define brgb swizzle(glm::Z, glm::X, glm::Y, glm::Z)
-#define argb swizzle(glm::W, glm::X, glm::Y, glm::Z)
-#define rggb swizzle(glm::X, glm::Y, glm::Y, glm::Z)
-#define gggb swizzle(glm::Y, glm::Y, glm::Y, glm::Z)
-#define bggb swizzle(glm::Z, glm::Y, glm::Y, glm::Z)
-#define aggb swizzle(glm::W, glm::Y, glm::Y, glm::Z)
-#define rbgb swizzle(glm::X, glm::Z, glm::Y, glm::Z)
-#define gbgb swizzle(glm::Y, glm::Z, glm::Y, glm::Z)
-#define bbgb swizzle(glm::Z, glm::Z, glm::Y, glm::Z)
-#define abgb swizzle(glm::W, glm::Z, glm::Y, glm::Z)
-#define ragb swizzle(glm::X, glm::W, glm::Y, glm::Z)
-#define gagb swizzle(glm::Y, glm::W, glm::Y, glm::Z)
-#define bagb swizzle(glm::Z, glm::W, glm::Y, glm::Z)
-#define aagb swizzle(glm::W, glm::W, glm::Y, glm::Z)
-#define rrbb swizzle(glm::X, glm::X, glm::Z, glm::Z)
-#define grbb swizzle(glm::Y, glm::X, glm::Z, glm::Z)
-#define brbb swizzle(glm::Z, glm::X, glm::Z, glm::Z)
-#define arbb swizzle(glm::W, glm::X, glm::Z, glm::Z)
-#define rgbb swizzle(glm::X, glm::Y, glm::Z, glm::Z)
-#define ggbb swizzle(glm::Y, glm::Y, glm::Z, glm::Z)
-#define bgbb swizzle(glm::Z, glm::Y, glm::Z, glm::Z)
-#define agbb swizzle(glm::W, glm::Y, glm::Z, glm::Z)
-#define rbbb swizzle(glm::X, glm::Z, glm::Z, glm::Z)
-#define gbbb swizzle(glm::Y, glm::Z, glm::Z, glm::Z)
-#define bbbb swizzle(glm::Z, glm::Z, glm::Z, glm::Z)
-#define abbb swizzle(glm::W, glm::Z, glm::Z, glm::Z)
-#define rabb swizzle(glm::X, glm::W, glm::Z, glm::Z)
-#define gabb swizzle(glm::Y, glm::W, glm::Z, glm::Z)
-#define babb swizzle(glm::Z, glm::W, glm::Z, glm::Z)
-#define aabb swizzle(glm::W, glm::W, glm::Z, glm::Z)
-#define rrab swizzle(glm::X, glm::X, glm::W, glm::Z)
-#define grab swizzle(glm::Y, glm::X, glm::W, glm::Z)
-#define brab swizzle(glm::Z, glm::X, glm::W, glm::Z)
-#define arab swizzle(glm::W, glm::X, glm::W, glm::Z)
-#define rgab swizzle(glm::X, glm::Y, glm::W, glm::Z)
-#define ggab swizzle(glm::Y, glm::Y, glm::W, glm::Z)
-#define bgab swizzle(glm::Z, glm::Y, glm::W, glm::Z)
-#define agab swizzle(glm::W, glm::Y, glm::W, glm::Z)
-#define rbab swizzle(glm::X, glm::Z, glm::W, glm::Z)
-#define gbab swizzle(glm::Y, glm::Z, glm::W, glm::Z)
-#define bbab swizzle(glm::Z, glm::Z, glm::W, glm::Z)
-#define abab swizzle(glm::W, glm::Z, glm::W, glm::Z)
-#define raab swizzle(glm::X, glm::W, glm::W, glm::Z)
-#define gaab swizzle(glm::Y, glm::W, glm::W, glm::Z)
-#define baab swizzle(glm::Z, glm::W, glm::W, glm::Z)
-#define aaab swizzle(glm::W, glm::W, glm::W, glm::Z)
-#define rrra swizzle(glm::X, glm::X, glm::X, glm::W)
-#define grra swizzle(glm::Y, glm::X, glm::X, glm::W)
-#define brra swizzle(glm::Z, glm::X, glm::X, glm::W)
-#define arra swizzle(glm::W, glm::X, glm::X, glm::W)
-#define rgra swizzle(glm::X, glm::Y, glm::X, glm::W)
-#define ggra swizzle(glm::Y, glm::Y, glm::X, glm::W)
-#define bgra swizzle(glm::Z, glm::Y, glm::X, glm::W)
-#define agra swizzle(glm::W, glm::Y, glm::X, glm::W)
-#define rbra swizzle(glm::X, glm::Z, glm::X, glm::W)
-#define gbra swizzle(glm::Y, glm::Z, glm::X, glm::W)
-#define bbra swizzle(glm::Z, glm::Z, glm::X, glm::W)
-#define abra swizzle(glm::W, glm::Z, glm::X, glm::W)
-#define rara swizzle(glm::X, glm::W, glm::X, glm::W)
-#define gara swizzle(glm::Y, glm::W, glm::X, glm::W)
-#define bara swizzle(glm::Z, glm::W, glm::X, glm::W)
-#define aara swizzle(glm::W, glm::W, glm::X, glm::W)
-#define rrga swizzle(glm::X, glm::X, glm::Y, glm::W)
-#define grga swizzle(glm::Y, glm::X, glm::Y, glm::W)
-#define brga swizzle(glm::Z, glm::X, glm::Y, glm::W)
-#define arga swizzle(glm::W, glm::X, glm::Y, glm::W)
-#define rgga swizzle(glm::X, glm::Y, glm::Y, glm::W)
-#define ggga swizzle(glm::Y, glm::Y, glm::Y, glm::W)
-#define bgga swizzle(glm::Z, glm::Y, glm::Y, glm::W)
-#define agga swizzle(glm::W, glm::Y, glm::Y, glm::W)
-#define rbga swizzle(glm::X, glm::Z, glm::Y, glm::W)
-#define gbga swizzle(glm::Y, glm::Z, glm::Y, glm::W)
-#define bbga swizzle(glm::Z, glm::Z, glm::Y, glm::W)
-#define abga swizzle(glm::W, glm::Z, glm::Y, glm::W)
-#define raga swizzle(glm::X, glm::W, glm::Y, glm::W)
-#define gaga swizzle(glm::Y, glm::W, glm::Y, glm::W)
-#define baga swizzle(glm::Z, glm::W, glm::Y, glm::W)
-#define aaga swizzle(glm::W, glm::W, glm::Y, glm::W)
-#define rrba swizzle(glm::X, glm::X, glm::Z, glm::W)
-#define grba swizzle(glm::Y, glm::X, glm::Z, glm::W)
-#define brba swizzle(glm::Z, glm::X, glm::Z, glm::W)
-#define arba swizzle(glm::W, glm::X, glm::Z, glm::W)
-#define rgba swizzle(glm::X, glm::Y, glm::Z, glm::W)
-#define ggba swizzle(glm::Y, glm::Y, glm::Z, glm::W)
-#define bgba swizzle(glm::Z, glm::Y, glm::Z, glm::W)
-#define agba swizzle(glm::W, glm::Y, glm::Z, glm::W)
-#define rbba swizzle(glm::X, glm::Z, glm::Z, glm::W)
-#define gbba swizzle(glm::Y, glm::Z, glm::Z, glm::W)
-#define bbba swizzle(glm::Z, glm::Z, glm::Z, glm::W)
-#define abba swizzle(glm::W, glm::Z, glm::Z, glm::W)
-#define raba swizzle(glm::X, glm::W, glm::Z, glm::W)
-#define gaba swizzle(glm::Y, glm::W, glm::Z, glm::W)
-#define baba swizzle(glm::Z, glm::W, glm::Z, glm::W)
-#define aaba swizzle(glm::W, glm::W, glm::Z, glm::W)
-#define rraa swizzle(glm::X, glm::X, glm::W, glm::W)
-#define graa swizzle(glm::Y, glm::X, glm::W, glm::W)
-#define braa swizzle(glm::Z, glm::X, glm::W, glm::W)
-#define araa swizzle(glm::W, glm::X, glm::W, glm::W)
-#define rgaa swizzle(glm::X, glm::Y, glm::W, glm::W)
-#define ggaa swizzle(glm::Y, glm::Y, glm::W, glm::W)
-#define bgaa swizzle(glm::Z, glm::Y, glm::W, glm::W)
-#define agaa swizzle(glm::W, glm::Y, glm::W, glm::W)
-#define rbaa swizzle(glm::X, glm::Z, glm::W, glm::W)
-#define gbaa swizzle(glm::Y, glm::Z, glm::W, glm::W)
-#define bbaa swizzle(glm::Z, glm::Z, glm::W, glm::W)
-#define abaa swizzle(glm::W, glm::Z, glm::W, glm::W)
-#define raaa swizzle(glm::X, glm::W, glm::W, glm::W)
-#define gaaa swizzle(glm::Y, glm::W, glm::W, glm::W)
-#define baaa swizzle(glm::Z, glm::W, glm::W, glm::W)
-#define aaaa swizzle(glm::W, glm::W, glm::W, glm::W)
-
-#endif//defined(GLM_SWIZZLE) && (GLM_SWIZZLE & GLM_SWIZZLE_RGBA)
-
-#if defined(GLM_SWIZZLE) && (GLM_SWIZZLE & GLM_SWIZZLE_STPQ)
-
-#define ssss swizzle(glm::X, glm::X, glm::X, glm::X)
-#define tsss swizzle(glm::Y, glm::X, glm::X, glm::X)
-#define psss swizzle(glm::Z, glm::X, glm::X, glm::X)
-#define qsss swizzle(glm::W, glm::X, glm::X, glm::X)
-#define stss swizzle(glm::X, glm::Y, glm::X, glm::X)
-#define ttss swizzle(glm::Y, glm::Y, glm::X, glm::X)
-#define ptss swizzle(glm::Z, glm::Y, glm::X, glm::X)
-#define qtss swizzle(glm::W, glm::Y, glm::X, glm::X)
-#define spss swizzle(glm::X, glm::Z, glm::X, glm::X)
-#define tpss swizzle(glm::Y, glm::Z, glm::X, glm::X)
-#define ppss swizzle(glm::Z, glm::Z, glm::X, glm::X)
-#define qpss swizzle(glm::W, glm::Z, glm::X, glm::X)
-#define sqss swizzle(glm::X, glm::W, glm::X, glm::X)
-#define tqss swizzle(glm::Y, glm::W, glm::X, glm::X)
-#define pqss swizzle(glm::Z, glm::W, glm::X, glm::X)
-#define qqss swizzle(glm::W, glm::W, glm::X, glm::X)
-#define ssts swizzle(glm::X, glm::X, glm::Y, glm::X)
-#define tsts swizzle(glm::Y, glm::X, glm::Y, glm::X)
-#define psts swizzle(glm::Z, glm::X, glm::Y, glm::X)
-#define qsts swizzle(glm::W, glm::X, glm::Y, glm::X)
-#define stts swizzle(glm::X, glm::Y, glm::Y, glm::X)
-#define ttts swizzle(glm::Y, glm::Y, glm::Y, glm::X)
-#define ptts swizzle(glm::Z, glm::Y, glm::Y, glm::X)
-#define qtts swizzle(glm::W, glm::Y, glm::Y, glm::X)
-#define spts swizzle(glm::X, glm::Z, glm::Y, glm::X)
-#define tpts swizzle(glm::Y, glm::Z, glm::Y, glm::X)
-#define ppts swizzle(glm::Z, glm::Z, glm::Y, glm::X)
-#define qpts swizzle(glm::W, glm::Z, glm::Y, glm::X)
-#define sqts swizzle(glm::X, glm::W, glm::Y, glm::X)
-#define tqts swizzle(glm::Y, glm::W, glm::Y, glm::X)
-#define pqts swizzle(glm::Z, glm::W, glm::Y, glm::X)
-#define qqts swizzle(glm::W, glm::W, glm::Y, glm::X)
-#define ssps swizzle(glm::X, glm::X, glm::Z, glm::X)
-#define tsps swizzle(glm::Y, glm::X, glm::Z, glm::X)
-#define psps swizzle(glm::Z, glm::X, glm::Z, glm::X)
-#define qsps swizzle(glm::W, glm::X, glm::Z, glm::X)
-#define stps swizzle(glm::X, glm::Y, glm::Z, glm::X)
-#define ttps swizzle(glm::Y, glm::Y, glm::Z, glm::X)
-#define ptps swizzle(glm::Z, glm::Y, glm::Z, glm::X)
-#define qtps swizzle(glm::W, glm::Y, glm::Z, glm::X)
-#define spps swizzle(glm::X, glm::Z, glm::Z, glm::X)
-#define tpps swizzle(glm::Y, glm::Z, glm::Z, glm::X)
-#define ppps swizzle(glm::Z, glm::Z, glm::Z, glm::X)
-#define qpps swizzle(glm::W, glm::Z, glm::Z, glm::X)
-#define sqps swizzle(glm::X, glm::W, glm::Z, glm::X)
-#define tqps swizzle(glm::Y, glm::W, glm::Z, glm::X)
-#define pqps swizzle(glm::Z, glm::W, glm::Z, glm::X)
-#define qqps swizzle(glm::W, glm::W, glm::Z, glm::X)
-#define ssqs swizzle(glm::X, glm::X, glm::W, glm::X)
-#define tsqs swizzle(glm::Y, glm::X, glm::W, glm::X)
-#define psqs swizzle(glm::Z, glm::X, glm::W, glm::X)
-#define qsqs swizzle(glm::W, glm::X, glm::W, glm::X)
-#define stqs swizzle(glm::X, glm::Y, glm::W, glm::X)
-#define ttqs swizzle(glm::Y, glm::Y, glm::W, glm::X)
-#define ptqs swizzle(glm::Z, glm::Y, glm::W, glm::X)
-#define qtqs swizzle(glm::W, glm::Y, glm::W, glm::X)
-#define spqs swizzle(glm::X, glm::Z, glm::W, glm::X)
-#define tpqs swizzle(glm::Y, glm::Z, glm::W, glm::X)
-#define ppqs swizzle(glm::Z, glm::Z, glm::W, glm::X)
-#define qpqs swizzle(glm::W, glm::Z, glm::W, glm::X)
-#define sqqs swizzle(glm::X, glm::W, glm::W, glm::X)
-#define tqqs swizzle(glm::Y, glm::W, glm::W, glm::X)
-#define pqqs swizzle(glm::Z, glm::W, glm::W, glm::X)
-#define qqqs swizzle(glm::W, glm::W, glm::W, glm::X)
-#define ssst swizzle(glm::X, glm::X, glm::X, glm::Y)
-#define tsst swizzle(glm::Y, glm::X, glm::X, glm::Y)
-#define psst swizzle(glm::Z, glm::X, glm::X, glm::Y)
-#define qsst swizzle(glm::W, glm::X, glm::X, glm::Y)
-#define stst swizzle(glm::X, glm::Y, glm::X, glm::Y)
-#define ttst swizzle(glm::Y, glm::Y, glm::X, glm::Y)
-#define ptst swizzle(glm::Z, glm::Y, glm::X, glm::Y)
-#define qtst swizzle(glm::W, glm::Y, glm::X, glm::Y)
-#define spst swizzle(glm::X, glm::Z, glm::X, glm::Y)
-#define tpst swizzle(glm::Y, glm::Z, glm::X, glm::Y)
-#define ppst swizzle(glm::Z, glm::Z, glm::X, glm::Y)
-#define qpst swizzle(glm::W, glm::Z, glm::X, glm::Y)
-#define sqst swizzle(glm::X, glm::W, glm::X, glm::Y)
-#define tqst swizzle(glm::Y, glm::W, glm::X, glm::Y)
-#define pqst swizzle(glm::Z, glm::W, glm::X, glm::Y)
-#define qqst swizzle(glm::W, glm::W, glm::X, glm::Y)
-#define sstt swizzle(glm::X, glm::X, glm::Y, glm::Y)
-#define tstt swizzle(glm::Y, glm::X, glm::Y, glm::Y)
-#define pstt swizzle(glm::Z, glm::X, glm::Y, glm::Y)
-#define qstt swizzle(glm::W, glm::X, glm::Y, glm::Y)
-#define sttt swizzle(glm::X, glm::Y, glm::Y, glm::Y)
-#define tttt swizzle(glm::Y, glm::Y, glm::Y, glm::Y)
-#define pttt swizzle(glm::Z, glm::Y, glm::Y, glm::Y)
-#define qttt swizzle(glm::W, glm::Y, glm::Y, glm::Y)
-#define sptt swizzle(glm::X, glm::Z, glm::Y, glm::Y)
-#define tptt swizzle(glm::Y, glm::Z, glm::Y, glm::Y)
-#define pptt swizzle(glm::Z, glm::Z, glm::Y, glm::Y)
-#define qptt swizzle(glm::W, glm::Z, glm::Y, glm::Y)
-#define sqtt swizzle(glm::X, glm::W, glm::Y, glm::Y)
-#define tqtt swizzle(glm::Y, glm::W, glm::Y, glm::Y)
-#define pqtt swizzle(glm::Z, glm::W, glm::Y, glm::Y)
-#define qqtt swizzle(glm::W, glm::W, glm::Y, glm::Y)
-#define sspt swizzle(glm::X, glm::X, glm::Z, glm::Y)
-#define tspt swizzle(glm::Y, glm::X, glm::Z, glm::Y)
-#define pspt swizzle(glm::Z, glm::X, glm::Z, glm::Y)
-#define qspt swizzle(glm::W, glm::X, glm::Z, glm::Y)
-#define stpt swizzle(glm::X, glm::Y, glm::Z, glm::Y)
-#define ttpt swizzle(glm::Y, glm::Y, glm::Z, glm::Y)
-#define ptpt swizzle(glm::Z, glm::Y, glm::Z, glm::Y)
-#define qtpt swizzle(glm::W, glm::Y, glm::Z, glm::Y)
-#define sppt swizzle(glm::X, glm::Z, glm::Z, glm::Y)
-#define tppt swizzle(glm::Y, glm::Z, glm::Z, glm::Y)
-#define pppt swizzle(glm::Z, glm::Z, glm::Z, glm::Y)
-#define qppt swizzle(glm::W, glm::Z, glm::Z, glm::Y)
-#define sqpt swizzle(glm::X, glm::W, glm::Z, glm::Y)
-#define tqpt swizzle(glm::Y, glm::W, glm::Z, glm::Y)
-#define pqpt swizzle(glm::Z, glm::W, glm::Z, glm::Y)
-#define qqpt swizzle(glm::W, glm::W, glm::Z, glm::Y)
-#define ssqt swizzle(glm::X, glm::X, glm::W, glm::Y)
-#define tsqt swizzle(glm::Y, glm::X, glm::W, glm::Y)
-#define psqt swizzle(glm::Z, glm::X, glm::W, glm::Y)
-#define qsqt swizzle(glm::W, glm::X, glm::W, glm::Y)
-#define stqt swizzle(glm::X, glm::Y, glm::W, glm::Y)
-#define ttqt swizzle(glm::Y, glm::Y, glm::W, glm::Y)
-#define ptqt swizzle(glm::Z, glm::Y, glm::W, glm::Y)
-#define qtqt swizzle(glm::W, glm::Y, glm::W, glm::Y)
-#define spqt swizzle(glm::X, glm::Z, glm::W, glm::Y)
-#define tpqt swizzle(glm::Y, glm::Z, glm::W, glm::Y)
-#define ppqt swizzle(glm::Z, glm::Z, glm::W, glm::Y)
-#define qpqt swizzle(glm::W, glm::Z, glm::W, glm::Y)
-#define sqqt swizzle(glm::X, glm::W, glm::W, glm::Y)
-#define tqqt swizzle(glm::Y, glm::W, glm::W, glm::Y)
-#define pqqt swizzle(glm::Z, glm::W, glm::W, glm::Y)
-#define qqqt swizzle(glm::W, glm::W, glm::W, glm::Y)
-#define sssp swizzle(glm::X, glm::X, glm::X, glm::Z)
-#define tssp swizzle(glm::Y, glm::X, glm::X, glm::Z)
-#define pssp swizzle(glm::Z, glm::X, glm::X, glm::Z)
-#define qssp swizzle(glm::W, glm::X, glm::X, glm::Z)
-#define stsp swizzle(glm::X, glm::Y, glm::X, glm::Z)
-#define ttsp swizzle(glm::Y, glm::Y, glm::X, glm::Z)
-#define ptsp swizzle(glm::Z, glm::Y, glm::X, glm::Z)
-#define qtsp swizzle(glm::W, glm::Y, glm::X, glm::Z)
-#define spsp swizzle(glm::X, glm::Z, glm::X, glm::Z)
-#define tpsp swizzle(glm::Y, glm::Z, glm::X, glm::Z)
-#define ppsp swizzle(glm::Z, glm::Z, glm::X, glm::Z)
-#define qpsp swizzle(glm::W, glm::Z, glm::X, glm::Z)
-#define sqsp swizzle(glm::X, glm::W, glm::X, glm::Z)
-#define tqsp swizzle(glm::Y, glm::W, glm::X, glm::Z)
-#define pqsp swizzle(glm::Z, glm::W, glm::X, glm::Z)
-#define qqsp swizzle(glm::W, glm::W, glm::X, glm::Z)
-#define sstp swizzle(glm::X, glm::X, glm::Y, glm::Z)
-#define tstp swizzle(glm::Y, glm::X, glm::Y, glm::Z)
-#define pstp swizzle(glm::Z, glm::X, glm::Y, glm::Z)
-#define qstp swizzle(glm::W, glm::X, glm::Y, glm::Z)
-#define sttp swizzle(glm::X, glm::Y, glm::Y, glm::Z)
-#define tttp swizzle(glm::Y, glm::Y, glm::Y, glm::Z)
-#define pttp swizzle(glm::Z, glm::Y, glm::Y, glm::Z)
-#define qttp swizzle(glm::W, glm::Y, glm::Y, glm::Z)
-#define sptp swizzle(glm::X, glm::Z, glm::Y, glm::Z)
-#define tptp swizzle(glm::Y, glm::Z, glm::Y, glm::Z)
-#define pptp swizzle(glm::Z, glm::Z, glm::Y, glm::Z)
-#define qptp swizzle(glm::W, glm::Z, glm::Y, glm::Z)
-#define sqtp swizzle(glm::X, glm::W, glm::Y, glm::Z)
-#define tqtp swizzle(glm::Y, glm::W, glm::Y, glm::Z)
-#define pqtp swizzle(glm::Z, glm::W, glm::Y, glm::Z)
-#define qqtp swizzle(glm::W, glm::W, glm::Y, glm::Z)
-#define sspp swizzle(glm::X, glm::X, glm::Z, glm::Z)
-#define tspp swizzle(glm::Y, glm::X, glm::Z, glm::Z)
-#define pspp swizzle(glm::Z, glm::X, glm::Z, glm::Z)
-#define qspp swizzle(glm::W, glm::X, glm::Z, glm::Z)
-#define stpp swizzle(glm::X, glm::Y, glm::Z, glm::Z)
-#define ttpp swizzle(glm::Y, glm::Y, glm::Z, glm::Z)
-#define ptpp swizzle(glm::Z, glm::Y, glm::Z, glm::Z)
-#define qtpp swizzle(glm::W, glm::Y, glm::Z, glm::Z)
-#define sppp swizzle(glm::X, glm::Z, glm::Z, glm::Z)
-#define tppp swizzle(glm::Y, glm::Z, glm::Z, glm::Z)
-#define pppp swizzle(glm::Z, glm::Z, glm::Z, glm::Z)
-#define qppp swizzle(glm::W, glm::Z, glm::Z, glm::Z)
-#define sqpp swizzle(glm::X, glm::W, glm::Z, glm::Z)
-#define tqpp swizzle(glm::Y, glm::W, glm::Z, glm::Z)
-#define pqpp swizzle(glm::Z, glm::W, glm::Z, glm::Z)
-#define qqpp swizzle(glm::W, glm::W, glm::Z, glm::Z)
-#define ssqp swizzle(glm::X, glm::X, glm::W, glm::Z)
-#define tsqp swizzle(glm::Y, glm::X, glm::W, glm::Z)
-#define psqp swizzle(glm::Z, glm::X, glm::W, glm::Z)
-#define qsqp swizzle(glm::W, glm::X, glm::W, glm::Z)
-#define stqp swizzle(glm::X, glm::Y, glm::W, glm::Z)
-#define ttqp swizzle(glm::Y, glm::Y, glm::W, glm::Z)
-#define ptqp swizzle(glm::Z, glm::Y, glm::W, glm::Z)
-#define qtqp swizzle(glm::W, glm::Y, glm::W, glm::Z)
-#define spqp swizzle(glm::X, glm::Z, glm::W, glm::Z)
-#define tpqp swizzle(glm::Y, glm::Z, glm::W, glm::Z)
-#define ppqp swizzle(glm::Z, glm::Z, glm::W, glm::Z)
-#define qpqp swizzle(glm::W, glm::Z, glm::W, glm::Z)
-#define sqqp swizzle(glm::X, glm::W, glm::W, glm::Z)
-#define tqqp swizzle(glm::Y, glm::W, glm::W, glm::Z)
-#define pqqp swizzle(glm::Z, glm::W, glm::W, glm::Z)
-#define qqqp swizzle(glm::W, glm::W, glm::W, glm::Z)
-#define sssq swizzle(glm::X, glm::X, glm::X, glm::W)
-#define tssq swizzle(glm::Y, glm::X, glm::X, glm::W)
-#define pssq swizzle(glm::Z, glm::X, glm::X, glm::W)
-#define qssq swizzle(glm::W, glm::X, glm::X, glm::W)
-#define stsq swizzle(glm::X, glm::Y, glm::X, glm::W)
-#define ttsq swizzle(glm::Y, glm::Y, glm::X, glm::W)
-#define ptsq swizzle(glm::Z, glm::Y, glm::X, glm::W)
-#define qtsq swizzle(glm::W, glm::Y, glm::X, glm::W)
-#define spsq swizzle(glm::X, glm::Z, glm::X, glm::W)
-#define tpsq swizzle(glm::Y, glm::Z, glm::X, glm::W)
-#define ppsq swizzle(glm::Z, glm::Z, glm::X, glm::W)
-#define qpsq swizzle(glm::W, glm::Z, glm::X, glm::W)
-#define sqsq swizzle(glm::X, glm::W, glm::X, glm::W)
-#define tqsq swizzle(glm::Y, glm::W, glm::X, glm::W)
-#define pqsq swizzle(glm::Z, glm::W, glm::X, glm::W)
-#define qqsq swizzle(glm::W, glm::W, glm::X, glm::W)
-#define sstq swizzle(glm::X, glm::X, glm::Y, glm::W)
-#define tstq swizzle(glm::Y, glm::X, glm::Y, glm::W)
-#define pstq swizzle(glm::Z, glm::X, glm::Y, glm::W)
-#define qstq swizzle(glm::W, glm::X, glm::Y, glm::W)
-#define sttq swizzle(glm::X, glm::Y, glm::Y, glm::W)
-#define tttq swizzle(glm::Y, glm::Y, glm::Y, glm::W)
-#define pttq swizzle(glm::Z, glm::Y, glm::Y, glm::W)
-#define qttq swizzle(glm::W, glm::Y, glm::Y, glm::W)
-#define sptq swizzle(glm::X, glm::Z, glm::Y, glm::W)
-#define tptq swizzle(glm::Y, glm::Z, glm::Y, glm::W)
-#define pptq swizzle(glm::Z, glm::Z, glm::Y, glm::W)
-#define qptq swizzle(glm::W, glm::Z, glm::Y, glm::W)
-#define sqtq swizzle(glm::X, glm::W, glm::Y, glm::W)
-#define tqtq swizzle(glm::Y, glm::W, glm::Y, glm::W)
-#define pqtq swizzle(glm::Z, glm::W, glm::Y, glm::W)
-#define qqtq swizzle(glm::W, glm::W, glm::Y, glm::W)
-#define sspq swizzle(glm::X, glm::X, glm::Z, glm::W)
-#define tspq swizzle(glm::Y, glm::X, glm::Z, glm::W)
-#define pspq swizzle(glm::Z, glm::X, glm::Z, glm::W)
-#define qspq swizzle(glm::W, glm::X, glm::Z, glm::W)
-#define stpq swizzle(glm::X, glm::Y, glm::Z, glm::W)
-#define ttpq swizzle(glm::Y, glm::Y, glm::Z, glm::W)
-#define ptpq swizzle(glm::Z, glm::Y, glm::Z, glm::W)
-#define qtpq swizzle(glm::W, glm::Y, glm::Z, glm::W)
-#define sppq swizzle(glm::X, glm::Z, glm::Z, glm::W)
-#define tppq swizzle(glm::Y, glm::Z, glm::Z, glm::W)
-#define pppq swizzle(glm::Z, glm::Z, glm::Z, glm::W)
-#define qppq swizzle(glm::W, glm::Z, glm::Z, glm::W)
-#define sqpq swizzle(glm::X, glm::W, glm::Z, glm::W)
-#define tqpq swizzle(glm::Y, glm::W, glm::Z, glm::W)
-#define pqpq swizzle(glm::Z, glm::W, glm::Z, glm::W)
-#define qqpq swizzle(glm::W, glm::W, glm::Z, glm::W)
-#define ssqq swizzle(glm::X, glm::X, glm::W, glm::W)
-#define tsqq swizzle(glm::Y, glm::X, glm::W, glm::W)
-#define psqq swizzle(glm::Z, glm::X, glm::W, glm::W)
-#define qsqq swizzle(glm::W, glm::X, glm::W, glm::W)
-#define stqq swizzle(glm::X, glm::Y, glm::W, glm::W)
-#define ttqq swizzle(glm::Y, glm::Y, glm::W, glm::W)
-#define ptqq swizzle(glm::Z, glm::Y, glm::W, glm::W)
-#define qtqq swizzle(glm::W, glm::Y, glm::W, glm::W)
-#define spqq swizzle(glm::X, glm::Z, glm::W, glm::W)
-#define tpqq swizzle(glm::Y, glm::Z, glm::W, glm::W)
-#define ppqq swizzle(glm::Z, glm::Z, glm::W, glm::W)
-#define qpqq swizzle(glm::W, glm::Z, glm::W, glm::W)
-#define sqqq swizzle(glm::X, glm::W, glm::W, glm::W)
-#define tqqq swizzle(glm::Y, glm::W, glm::W, glm::W)
-#define pqqq swizzle(glm::Z, glm::W, glm::W, glm::W)
-#define qqqq swizzle(glm::W, glm::W, glm::W, glm::W)
-
-#endif//defined(GLM_SWIZZLE) && (GLM_SWIZZLE & GLM_SWIZZLE_STPQ)
-
-#endif//glm_core_swizzle

+ 0 - 20
glm/core/_swizzle.inl

@@ -1,20 +0,0 @@
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// OpenGL Mathematics Copyright (c) 2005 - 2010 G-Truc Creation (www.g-truc.net)
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// Created : 2006-04-27
-// Updated : 2006-04-27
-// Licence : This source is under MIT License
-// File    : _swizzle.inl
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-#ifndef __swizzle_inl__
-#define __swizzle_inl__
-
-#include "./_swizzle.h"
-
-namespace glm
-{
-
-}
-
-#endif//__swizzle_inl__

+ 0 - 4
glm/core/dummy.cpp

@@ -1,4 +0,0 @@
-int main()
-{
-
-}

+ 0 - 274
glm/core/func_common.hpp

@@ -1,274 +0,0 @@
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// OpenGL Mathematics Copyright (c) 2005 - 2010 G-Truc Creation (www.g-truc.net)
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// Created : 2008-03-08
-// Updated : 2010-01-26
-// Licence : This source is under MIT License
-// File    : glm/core/func_common.hpp
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-#ifndef glm_core_func_common
-#define glm_core_func_common
-
-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{
-
-	//! Returns x if x >= 0; otherwise, it returns -x. 
-	//! (From GLSL 1.30.08 specification, section 8.3)
-	template <typename genFIType> 
-	genFIType abs(genFIType const & x);
-
-	//! Returns 1.0 if x > 0, 0.0 if x = 0, or -1.0 if x < 0. 
-	//! (From GLSL 1.30.08 specification, section 8.3)
-	template <typename genFIType> 
-	genFIType sign(genFIType const & x);
-
-    //! Returns a value equal to the nearest integer that is less then or equal to x. 
-	//! (From GLSL 1.30.08 specification, section 8.3)
-	template <typename genType> 
-	genType floor(genType const & x);
-
-	//! Returns a value equal to the nearest integer to x 
-	//! whose absolute value is not larger than the absolute value of x. 
-	//! (From GLSL 1.30.08 specification, section 8.3)
-	template <typename genType> 
-	genType trunc(genType const & x);
-
-	//! Returns a value equal to the nearest integer to x. 
-	//! The fraction 0.5 will round in a direction chosen by the 
-	//! implementation, presumably the direction that is fastest. 
-	//! This includes the possibility that round(x) returns the 
-	//! same value as roundEven(x) for all values of x. 
-	//! (From GLSL 1.30.08 specification, section 8.3)
-	template <typename genType> 
-	genType round(genType const & x);
-
-	//! Returns a value equal to the nearest integer to x.
-	//! A fractional part of 0.5 will round toward the nearest even
-	//! integer. (Both 3.5 and 4.5 for x will return 4.0.) 
-	//! (From GLSL 1.30.08 specification, section 8.3)
-	template <typename genType> 
-	genType roundEven(genType const & x);
-
-	//! Returns a value equal to the nearest integer 
-	//! that is greater than or equal to x. 
-	//! (From GLSL 1.30.08 specification, section 8.3)
-    template <typename genType> 
-	genType ceil(genType const & x);
-
-	//! Return x - floor(x).
-	//! (From GLSL 1.30.08 specification, section 8.3)
-    template <typename genType> 
-	genType fract(genType const & x);
-
-	//! Modulus. Returns x - y * floor(x / y) 
-	//! for each component in x using the floating point value y.
-	//! (From GLSL 1.30.08 specification, section 8.3)
-    template <typename genType> 
-	genType mod(
-		genType const & x, 
-		genType const & y);
-
-	//! Modulus. Returns x - y * floor(x / y) 
-	//! for each component in x using the floating point value y.
-	//! (From GLSL 1.30.08 specification, section 8.3)
-    template <typename genType> 
-	genType mod(
-		genType const & x, 
-		typename genType::value_type const & y);
-
-	//! Returns the fractional part of x and sets i to the integer
-	//! part (as a whole number floating point value). Both the
-	//! return value and the output parameter will have the same
-	//! sign as x.
-	//! (From GLSL 1.30.08 specification, section 8.3)
-	template <typename genType> 
-	genType modf(
-		genType const & x, 
-		genType & i);
-
-    //! Returns y if y < x; otherwise, it returns x.
-	//! (From GLSL 1.30.08 specification, section 8.3)
-	template <typename genType> 
-	genType min(
-		genType const & x, 
-		genType const & y);
-
-	template <typename genType> 
-	genType min(
-		genType const & x, 
-		typename genType::value_type const & y);
-
-    //! Returns y if x < y; otherwise, it returns x.
-	//! (From GLSL 1.30.08 specification, section 8.3)
-	template <typename genType> 
-	genType max(
-		genType const & x, 
-		genType const & y);
-
-	template <typename genType> 
-	genType max(
-		genType const & x, 
-		typename genType::value_type const & y);
-
-    //! Returns min(max(x, minVal), maxVal) for each component in x 
-	//! using the floating-point values minVal and maxVal.
-	//! (From GLSL 1.30.08 specification, section 8.3)
-	template <typename genType> 
-	genType clamp(
-		genType const & x, 
-		genType const & minVal, 
-		genType const & maxVal); 
-
-	template <typename genType> 
-	genType clamp(
-		genType const & x, 
-		typename genType::value_type const & minVal, 
-		typename genType::value_type const & maxVal); 
-
-	//! \return If genTypeU is a floating scalar or vector: 
-	//! Returns x * (1.0 - a) + y * a, i.e., the linear blend of 
-	//! x and y using the floating-point value a. 
-	//! The value for a is not restricted to the range [0, 1].
-	//!
-	//! \return If genTypeU is a boolean scalar or vector: 
-	//! Selects which vector each returned component comes
-	//! from. For a component of a that is false, the
-	//! corresponding component of x is returned. For a
-	//! component of a that is true, the corresponding
-	//! component of y is returned. Components of x and y that
-	//! are not selected are allowed to be invalid floating point
-	//! values and will have no effect on the results. Thus, this
-	//! provides different functionality than
-	//! genType mix(genType x, genType y, genType(a))
-	//! where a is a Boolean vector.
-	//! 
-	//! From GLSL 1.30.08 specification, section 8.3
-	//! 
-	//! \param[in]  x Floating point scalar or vector.
-	//! \param[in]  y Floating point scalar or vector.
-	//! \param[in]  a Floating point or boolean scalar or vector.
-	//!
-	// \todo Test when 'a' is a boolean.
-	template <typename genTypeT, typename genTypeU> 
-	genTypeT mix(genTypeT const & x, genTypeT const & y, genTypeU const & a);
-
-	//! Returns 0.0 if x < edge, otherwise it returns 1.0.
-	//! (From GLSL 1.30.08 specification, section 8.3)
-	template <typename genType> 
-	genType step(
-		genType const & edge, 
-		genType const & x);
-
-	template <typename genType> 
-	genType step(
-		typename genType::value_type const & edge, 
-		genType const & x);
-
-	//! Returns 0.0 if x <= edge0 and 1.0 if x >= edge1 and
-	//! performs smooth Hermite interpolation between 0 and 1
-	//! when edge0 < x < edge1. This is useful in cases where
-	//! you would want a threshold function with a smooth
-	//! transition. This is equivalent to:
-	//! genType t;
-	//! t = clamp ((x – edge0) / (edge1 – edge0), 0, 1);
-	//! return t * t * (3 – 2 * t);
-	//! Results are undefined if edge0 >= edge1.
-	//! (From GLSL 1.30.08 specification, section 8.3)
-	template <typename genType> 
-	genType smoothstep(
-		genType const & edge0, 
-		genType const & edge1, 
-		genType const & x);
-
-	template <typename genType> 
-	genType smoothstep(
-		typename genType::value_type const & edge0, 
-		typename genType::value_type const & edge1, 
-		genType const & x);
-
-	//! Returns true if x holds a NaN (not a number)
-	//! representation in the underlying implementation's set of
-	//! floating point representations. Returns false otherwise,
-	//! including for implementations with no NaN
-	//! representations.
-	//! (From GLSL 1.30.08 specification, section 8.3)
-	template <typename genType> 
-	typename genType::bool_type isnan(genType const & x);
-
-	//! Returns true if x holds a positive infinity or negative
-	//! infinity representation in the underlying implementation's
-	//! set of floating point representations. Returns false
-	//! otherwise, including for implementations with no infinity
-	//! representations.
-	//! (From GLSL 1.30.08 specification, section 8.3)
-	template <typename genType> 
-	typename genType::bool_type isinf(genType const & x);
-
-	//! Returns a signed or unsigned integer value representing
-	//! the encoding of a floating-point value. The floatingpoint
-	//! value's bit-level representation is preserved.
-	//! (From GLSL 4.00.08 specification, section 8.3)
-	template <typename genType, typename genIType>
-	genIType floatBitsToInt(genType const & value);
-
-	//! Returns a signed or unsigned integer value representing
-	//! the encoding of a floating-point value. The floatingpoint
-	//! value's bit-level representation is preserved.
-	//! (From GLSL 4.00.08 specification, section 8.3)
-	template <typename genType, typename genUType>
-	genUType floatBitsToInt(genType const & value);
-
-	//! Returns a floating-point value corresponding to a signed
-	//! or unsigned integer encoding of a floating-point value.
-	//! If an inf or NaN is passed in, it will not signal, and the
-	//! resulting floating point value is unspecified. Otherwise,
-	//! the bit-level representation is preserved.
-	//! (From GLSL 4.00.08 specification, section 8.3)
-	template <typename genType, typename genIUType>
-	genType intBitsToFloat(genIUType const & value);
-
-	//! Computes and returns a * b + c.
-	//! (From GLSL 4.00.08 specification, section 8.3)
-	template <typename genType>
-	genType fma(genType const & a, genType const & b, genType const & c);
-
-	//! Splits x into a floating-point significand in the range
-	//! [0.5, 1.0) and an integral exponent of two, such that:
-	//! x = significand * exp(2, exponent)
-	//! The significand is returned by the function and the
-	//! exponent is returned in the parameter exp. For a
-	//! floating-point value of zero, the significant and exponent
-	//! are both zero. For a floating-point value that is an
-	//! infinity or is not a number, the results are undefined.
-	//! (From GLSL 4.00.08 specification, section 8.3)
-	template <typename genType, typename genIType>
-	genType frexp(genType const & x, genIType & exp);
-
-	//! Builds a floating-point number from x and the
-	//! corresponding integral exponent of two in exp, returning:
-	//! significand * exp(2, exponent)
-	//! If this product is too large to be represented in the
-	//! floating-point type, the result is undefined.
-	//! (From GLSL 4.00.08 specification, section 8.3)
-	template <typename genType, typename genIType>
-	genType ldexp(genType const & x, genIType const & exp);
-
-	}//namespace common
-	}//namespace function
-	}//namespace core
-
-	using namespace core::function::common;
-}//namespace glm
-
-#include "func_common.inl"
-
-#endif//glm_core_func_common

+ 0 - 1542
glm/core/func_common.inl

@@ -1,1542 +0,0 @@
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// OpenGL Mathematics Copyright (c) 2005 - 2010 G-Truc Creation (www.g-truc.net)
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// Created : 2008-08-03
-// Updated : 2010-01-26
-// Licence : This source is under MIT License
-// File    : glm/core/func_common.inl
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-namespace glm
-{
-	namespace detail
-	{
-		template <typename genFIType, bool /*signed*/>
-		struct Abs_
-		{
-		};
-
-		template <typename genFIType>
-		struct Abs_<genFIType, true>
-		{
-			static genFIType get(genFIType const & x)
-			{
-				GLM_STATIC_ASSERT(
-					detail::type<genFIType>::is_float || 
-					detail::type<genFIType>::is_int);
-				return x >= genFIType(0) ? x : -x;
-			}
-		};
-
-		template <typename genFIType>
-		struct Abs_<genFIType, false>
-		{
-			static genFIType get(genFIType const & x)
-			{
-				GLM_STATIC_ASSERT(
-					detail::type<genFIType>::is_uint);
-
-				return x;
-			}
-		};
-	}//namespace detail
-
-	namespace core{
-	namespace function{
-	namespace common{
-
-	// abs
-	template <typename genFIType>
-    inline genFIType abs(
-		genFIType const & x)
-    {
-		return detail::Abs_<genFIType, std::numeric_limits<genFIType>::is_signed>::get(x);
-    }
-
-	//template <typename T> 
-	//inline detail::tvec1<T> abs(
-	//	detail::tvec1<T> const & v)
-	//{
-	//	return detail::tvec1<T>(
-	//		abs(v.x));	
-	//}
-
-    template <typename T>
-    inline detail::tvec2<T> abs(
-		detail::tvec2<T> const & v)
-    {
-        return detail::tvec2<T>(
-            abs(v.x),
-            abs(v.y));
-    }
-
-    template <typename T>
-    inline detail::tvec3<T> abs(
-		detail::tvec3<T> const & v)
-    {
-        return detail::tvec3<T>(
-            abs(v.x),
-            abs(v.y),
-            abs(v.z));
-    }
-
-    template <typename T>
-    inline detail::tvec4<T> abs(
-		detail::tvec4<T> const & v)
-    {
-        return detail::tvec4<T>(
-            abs(v.x),
-            abs(v.y),
-            abs(v.z),
-            abs(v.w));
-    }
-
-    // sign
-
-	//Try something like based on x >> 31 to get the sign bit
-    template <typename genFIType> 
-	inline genFIType sign(
-		genFIType const & x)
-	{
-		GLM_STATIC_ASSERT(
-			detail::type<genFIType>::is_float || 
-			detail::type<genFIType>::is_int);
-        
-		genFIType result;
-		if(x > genFIType(0))
-            result = genFIType(1);
-        else if(x < genFIType(0))
-            result = genFIType(-1);
-        else
-            result = genFIType(0);
-        return result;
-	}
-	
-    template <typename valFIType>
-    inline detail::tvec2<valFIType> sign(
-		detail::tvec2<valFIType> const & x)
-    {
-        return detail::tvec2<valFIType>(
-            sign(x.x),
-            sign(x.y));
-    }
-
-    template <typename valFIType>
-    inline detail::tvec3<valFIType> sign(
-		detail::tvec3<valFIType> const & x)
-    {
-        return detail::tvec3<valFIType>(
-            sign(x.x),
-            sign(x.y),
-            sign(x.z));
-    }
-
-    template <typename valFIType>
-    inline detail::tvec4<valFIType> sign(
-		detail::tvec4<valFIType> const & x)
-    {
-        return detail::tvec4<valFIType>(
-            sign(x.x),
-            sign(x.y),
-            sign(x.z),
-            sign(x.w));
-    }
-
-    // floor
-    template <>
-	inline detail::thalf floor<detail::thalf>(detail::thalf const& x)
-    {
-        return detail::thalf(::std::floor(float(x)));
-    }
-
-    template <typename genType>
-    inline genType floor(genType const& x)
-    {
-		GLM_STATIC_ASSERT(detail::type<genType>::is_float);
-
-        return ::std::floor(x);
-    }
-
-    template <typename valType>
-    inline detail::tvec2<valType> floor(detail::tvec2<valType> const& x)
-    {
-        return detail::tvec2<valType>(
-            floor(x.x),
-            floor(x.y));
-    }
-
-    template <typename valType>
-    inline detail::tvec3<valType> floor(detail::tvec3<valType> const& x)
-    {
-        return detail::tvec3<valType>(
-            floor(x.x),
-            floor(x.y),
-            floor(x.z));
-    }
-
-    template <typename valType>
-    inline detail::tvec4<valType> floor(detail::tvec4<valType> const& x)
-    {
-        return detail::tvec4<valType>(
-            floor(x.x),
-            floor(x.y),
-            floor(x.z),
-            floor(x.w));
-    }
-
-    // trunc
-    template <typename genType>
-    inline genType trunc(genType const & x)
-    {
-		GLM_STATIC_ASSERT(detail::type<genType>::is_float);
-        return floor(abs(x));
-    }
-
-    template <typename valType>
-    inline detail::tvec2<valType> trunc(detail::tvec2<valType> const & x)
-    {
-        return detail::tvec2<valType>(
-            trunc(x.x),
-            trunc(x.y));
-    }
-
-    template <typename valType>
-    inline detail::tvec3<valType> trunc(detail::tvec3<valType> const & x)
-    {
-        return detail::tvec3<valType>(
-            trunc(x.x),
-            trunc(x.y),
-            trunc(x.z));
-    }
-
-    template <typename valType>
-    inline detail::tvec4<valType> trunc(detail::tvec4<valType> const & x)
-    {
-        return detail::tvec4<valType>(
-            trunc(x.x),
-            trunc(x.y),
-            trunc(x.z),
-            trunc(x.w));
-    }
-
-    // round
-    template <typename genType>
-    inline genType round(genType const& x)
-    {
-		GLM_STATIC_ASSERT(detail::type<genType>::is_float);
-
-        return genType(int(x + genType(0.5)));
-    }
-
-    template <typename valType>
-    inline detail::tvec2<valType> round(detail::tvec2<valType> const& x)
-    {
-        return detail::tvec2<valType>(
-            round(x.x),
-            round(x.y));
-    }
-
-    template <typename valType>
-    inline detail::tvec3<valType> round(detail::tvec3<valType> const& x)
-    {
-        return detail::tvec3<valType>(
-            round(x.x),
-            round(x.y),
-            round(x.z));
-    }
-
-    template <typename valType>
-    inline detail::tvec4<valType> round(detail::tvec4<valType> const& x)
-    {
-        return detail::tvec4<valType>(
-            round(x.x),
-            round(x.y),
-            round(x.z),
-            round(x.w));
-    }
-
-    // roundEven
-    template <typename genType>
-    inline genType roundEven(genType const& x)
-    {
-		GLM_STATIC_ASSERT(detail::type<genType>::is_float);
-
-		return genType(int(x + genType(int(x) % 2)));
-    }
-
-    template <typename valType>
-    inline detail::tvec2<valType> roundEven(detail::tvec2<valType> const& x)
-    {
-        return detail::tvec2<valType>(
-            roundEven(x.x),
-            roundEven(x.y));
-    }
-
-    template <typename valType>
-    inline detail::tvec3<valType> roundEven(detail::tvec3<valType> const& x)
-    {
-        return detail::tvec3<valType>(
-            roundEven(x.x),
-            roundEven(x.y),
-            roundEven(x.z));
-    }
-
-    template <typename valType>
-    inline detail::tvec4<valType> roundEven(detail::tvec4<valType> const& x)
-    {
-        return detail::tvec4<valType>(
-            roundEven(x.x),
-            roundEven(x.y),
-            roundEven(x.z),
-            roundEven(x.w));
-    }
-
-    // ceil
-    template <typename genType>
-    inline genType ceil(genType const & x)
-    {
-		GLM_STATIC_ASSERT(detail::type<genType>::is_float);
-
-        return ::std::ceil(x);
-    }
-
-    template <typename valType>
-    inline detail::tvec2<valType> ceil(detail::tvec2<valType> const & x)
-    {
-        return detail::tvec2<valType>(
-            ceil(x.x),
-            ceil(x.y));
-    }
-
-    template <typename valType>
-    inline detail::tvec3<valType> ceil(detail::tvec3<valType> const & x)
-    {
-        return detail::tvec3<valType>(
-            ceil(x.x),
-            ceil(x.y),
-            ceil(x.z));
-    }
-
-    template <typename valType>
-    inline detail::tvec4<valType> ceil(detail::tvec4<valType> const & x)
-    {
-        return detail::tvec4<valType>(
-            ceil(x.x),
-            ceil(x.y),
-            ceil(x.z),
-            ceil(x.w));
-    }
-
-    // fract
-    template <typename genType>
-    inline genType fract
-	(
-		genType const & x
-	)
-    {
-		GLM_STATIC_ASSERT(detail::type<genType>::is_float);
-
-        return x - ::std::floor(x);
-    }
-
-    template <typename valType>
-    inline detail::tvec2<valType> fract
-	(
-		detail::tvec2<valType> const & x
-	)
-    {
-        return detail::tvec2<valType>(
-            fract(x.x),
-            fract(x.y));
-    }
-
-    template <typename valType>
-    inline detail::tvec3<valType> fract
-	(
-		detail::tvec3<valType> const & x
-	)
-    {
-        return detail::tvec3<valType>(
-            fract(x.x),
-            fract(x.y),
-            fract(x.z));
-    }
-
-    template <typename valType>
-    inline detail::tvec4<valType> fract
-	(
-		detail::tvec4<valType> const & x
-	)
-    {
-        return detail::tvec4<valType>(
-            fract(x.x),
-            fract(x.y),
-            fract(x.z),
-            fract(x.w));
-    }
-
-    // mod
-    template <typename genType>
-    inline genType mod
-	(
-		genType const & x, 
-		genType const & y
-	)
-    {
-		GLM_STATIC_ASSERT(detail::type<genType>::is_float);
-
-        return x - y * floor(x / y);
-    }
-
-    template <typename T>
-    inline detail::tvec2<T> mod
-	(
-		detail::tvec2<T> const & x, 
-		typename detail::tvec2<T>::value_type const & y
-	)
-    {
-        return detail::tvec2<T>(
-            mod(x.x, y),
-            mod(x.y, y));
-    }
-
-    template <typename T>
-    inline detail::tvec3<T> mod
-	(
-		detail::tvec3<T> const & x, 
-		typename detail::tvec3<T>::value_type const & y
-	)
-    {
-        return detail::tvec3<T>(
-            mod(x.x, y),
-            mod(x.y, y),
-            mod(x.z, y));
-    }
-
-    template <typename T>
-    inline detail::tvec4<T> mod
-	(
-		detail::tvec4<T> const & x, 
-		typename detail::tvec4<T>::value_type const & y
-	)
-    {
-        return detail::tvec4<T>(
-            mod(x.x, y),
-            mod(x.y, y),
-            mod(x.z, y),
-            mod(x.w, y));
-    }
-
-    template <typename T>
-    inline detail::tvec2<T> mod
-	(
-		detail::tvec2<T> const & x, 
-		detail::tvec2<T> const & y
-	)
-    {
-        return detail::tvec2<T>(
-            mod(x.x, y.x),
-            mod(x.y, y.y));
-    }
-
-    template <typename T>
-    inline detail::tvec3<T> mod
-	(
-		detail::tvec3<T> const & x, 
-		detail::tvec3<T> const & y
-	)
-    {
-        return detail::tvec3<T>(
-            mod(x.x, y.x),
-            mod(x.y, y.y),
-            mod(x.z, y.z));
-    }
-
-    template <typename T>
-    inline detail::tvec4<T> mod
-	(
-		detail::tvec4<T> const & x, 
-		detail::tvec4<T> const & y
-	)
-    {
-        return detail::tvec4<T>(
-            mod(x.x, y.x),
-            mod(x.y, y.y),
-            mod(x.z, y.z),
-            mod(x.w, y.w));
-    }
-
-    // modf
-    template <typename genType>
-    inline genType modf
-	(
-		genType const & x, 
-		genType & i
-	)
-    {
-		GLM_STATIC_ASSERT(detail::type<genType>::is_float);
-
-		i = glm::floor(x);
-
-        return x - i;
-    }
-
-    template <typename valType>
-    inline detail::tvec2<valType> modf
-	(
-		detail::tvec2<valType> const & x, 
-		detail::tvec2<valType> const & y
-	)
-    {
-        return detail::tvec2<valType>(
-            modf(x.x, y.x),
-            modf(x.y, y.y));
-    }
-
-    template <typename valType>
-    inline detail::tvec3<valType> modf
-	(
-		detail::tvec3<valType> const & x, 
-		detail::tvec3<valType> const & y
-	)
-    {
-        return detail::tvec3<valType>(
-            modf(x.x, y.x),
-            modf(x.y, y.y),
-            modf(x.z, y.z));
-    }
-
-    template <typename valType>
-    inline detail::tvec4<valType> modf
-	(
-		detail::tvec4<valType> const & x, 
-		detail::tvec4<valType> const & y
-	)
-    {
-        return detail::tvec4<valType>(
-            modf(x.x, y.x),
-            modf(x.y, y.y),
-            modf(x.z, y.z),
-            modf(x.w, y.w));
-    }
-
-	//// Only valid if (INT_MIN <= x-y <= INT_MAX)
-	//// min(x,y)
-	//r = y + ((x - y) & ((x - y) >> (sizeof(int) *
-	//CHAR_BIT – 1)));
-	//// max(x,y)
-	//r = x - ((x - y) & ((x - y) >> (sizeof(int) *
-	//CHAR_BIT - 1)));
-
-    // min
-    template <typename genType>
-    inline genType min
-	(
-		genType const & x, 
-		genType const & y
-	)
-    {
-		GLM_STATIC_ASSERT(
-			detail::type<genType>::is_float || 
-			detail::type<genType>::is_int ||
-			detail::type<genType>::is_uint);
-
-        return x < y ? x : y;
-    }
-
-    template <typename T>
-    inline detail::tvec2<T> min
-	(
-		detail::tvec2<T> const & x, 
-		typename detail::tvec2<T>::value_type const & y
-	)
-    {
-        return detail::tvec2<T>(
-            min(x.x, y),
-            min(x.y, y));
-    }
-
-    template <typename T>
-    inline detail::tvec3<T> min
-	(
-		detail::tvec3<T> const & x, 
-		typename detail::tvec2<T>::value_type const & y
-	)
-    {
-        return detail::tvec3<T>(
-            min(x.x, y),
-            min(x.y, y),
-            min(x.z, y));
-    }
-
-    template <typename T>
-    inline detail::tvec4<T> min
-	(
-		detail::tvec4<T> const & x, 
-		typename detail::tvec4<T>::value_type const & y
-	)
-    {
-        return detail::tvec4<T>(
-            min(x.x, y),
-            min(x.y, y),
-            min(x.z, y),
-            min(x.w, y));
-    }
-
-    template <typename T>
-    inline detail::tvec2<T> min
-	(
-		detail::tvec2<T> const & x, 
-		detail::tvec2<T> const & y
-	)
-    {
-        return detail::tvec2<T>(
-            min(x.x, y.x),
-            min(x.y, y.y));
-    }
-
-    template <typename T>
-    inline detail::tvec3<T> min
-	(
-		detail::tvec3<T> const & x, 
-		detail::tvec3<T> const & y
-	)
-    {
-        return detail::tvec3<T>(
-            min(x.x, y.x),
-            min(x.y, y.y),
-            min(x.z, y.z));
-    }
-
-    template <typename T>
-    inline detail::tvec4<T> min
-	(
-		detail::tvec4<T> const & x, 
-		detail::tvec4<T> const & y
-	)
-    {
-        return detail::tvec4<T>(
-            min(x.x, y.x),
-            min(x.y, y.y),
-            min(x.z, y.z),
-            min(x.w, y.w));
-    }
-
-    // max
-    template <typename genType>
-    inline genType max
-	(
-		genType const & x, 
-		genType const & y
-	)
-    {
-		GLM_STATIC_ASSERT(
-			detail::type<genType>::is_float || 
-			detail::type<genType>::is_int ||
-			detail::type<genType>::is_uint);
-
-		return x > y ? x : y;
-    }
-
-    template <typename T>
-    inline detail::tvec2<T> max
-	(
-		detail::tvec2<T> const & x, 
-		typename detail::tvec2<T>::value_type y
-	)
-    {
-        return detail::tvec2<T>(
-            max(x.x, y),
-            max(x.y, y));
-    }
-
-    template <typename T>
-    inline detail::tvec3<T> max
-	(
-		detail::tvec3<T> const & x, 
-		typename detail::tvec3<T>::value_type y
-	)
-    {
-        return detail::tvec3<T>(
-            max(x.x, y),
-            max(x.y, y),
-            max(x.z, y));
-    }
-
-    template <typename T>
-    inline detail::tvec4<T> max
-	(
-		detail::tvec4<T> const & x, 
-		typename detail::tvec4<T>::value_type y
-	)
-    {
-        return detail::tvec4<T>(
-            max(x.x, y),
-            max(x.y, y),
-            max(x.z, y),
-            max(x.w, y));
-    }
-
-    template <typename T>
-    inline detail::tvec2<T> max
-	(
-		detail::tvec2<T> const & x, 
-		detail::tvec2<T> const & y
-	)
-    {
-        return detail::tvec2<T>(
-            max(x.x, y.x),
-            max(x.y, y.y));
-    }
-
-    template <typename T>
-    inline detail::tvec3<T> max
-	(
-		detail::tvec3<T> const & x, 
-		detail::tvec3<T> const & y
-	)
-    {
-        return detail::tvec3<T>(
-            max(x.x, y.x),
-            max(x.y, y.y),
-            max(x.z, y.z));
-    }
-
-    template <typename T>
-    inline detail::tvec4<T> max
-	(
-		detail::tvec4<T> const & x, 
-		detail::tvec4<T> const & y)
-    {
-        return detail::tvec4<T>(
-            max(x.x, y.x),
-            max(x.y, y.y),
-            max(x.z, y.z),
-            max(x.w, y.w));
-    }
-
-    // clamp
-    template <typename valType>
-    inline valType clamp
-	(
-		valType const & x, 
-		valType const & minVal, 
-		valType const & maxVal
-	)
-    {
-		GLM_STATIC_ASSERT(
-			detail::type<valType>::is_float || 
-			detail::type<valType>::is_int ||
-			detail::type<valType>::is_uint);
-		
-		if(x >= maxVal) return maxVal; 
-        if(x <= minVal) return minVal;
-	    return x;
-    }
-
-    template <typename T>
-    inline detail::tvec2<T> clamp
-	(
-		detail::tvec2<T> const & x, 
-		typename detail::tvec2<T>::value_type const & minVal, 
-		typename detail::tvec2<T>::value_type const & maxVal
-	)
-    {
-        return detail::tvec2<T>(
-            clamp(x.x, minVal, maxVal),
-            clamp(x.y, minVal, maxVal));
-    }
-
-    template <typename T>
-    inline detail::tvec3<T> clamp
-	(
-		detail::tvec3<T> const & x, 
-		typename detail::tvec3<T>::value_type const & minVal, 
-		typename detail::tvec3<T>::value_type const & maxVal
-	)
-    {
-        return detail::tvec3<T>(
-            clamp(x.x, minVal, maxVal),
-            clamp(x.y, minVal, maxVal),
-            clamp(x.z, minVal, maxVal));
-    }
-
-    template <typename T>
-    inline detail::tvec4<T> clamp
-	(
-		detail::tvec4<T> const & x, 
-		typename detail::tvec4<T>::value_type const & minVal, 
-		typename detail::tvec4<T>::value_type const & maxVal
-	)
-    {
-        return detail::tvec4<T>(
-            clamp(x.x, minVal, maxVal),
-            clamp(x.y, minVal, maxVal),
-            clamp(x.z, minVal, maxVal),
-            clamp(x.w, minVal, maxVal));
-    }
-
-    template <typename T>
-    inline detail::tvec2<T> clamp
-	(
-		detail::tvec2<T> const & x, 
-		detail::tvec2<T> const & minVal, 
-		detail::tvec2<T> const & maxVal
-	)
-    {
-        return detail::tvec2<T>(
-            clamp(x.x, minVal.x, maxVal.x),
-            clamp(x.y, minVal.y, maxVal.y));
-    }
-
-    template <typename T>
-    inline detail::tvec3<T> clamp
-	(
-		detail::tvec3<T> const & x, 
-		detail::tvec3<T> const & minVal, 
-		detail::tvec3<T> const & maxVal
-	)
-    {
-        return detail::tvec3<T>(
-            clamp(x.x, minVal.x, maxVal.x),
-            clamp(x.y, minVal.y, maxVal.y),
-            clamp(x.z, minVal.z, maxVal.z));
-    }
-
-    template <typename T>
-    inline detail::tvec4<T> clamp
-	(
-		detail::tvec4<T> const & x, 
-		detail::tvec4<T> const & minVal, 
-		detail::tvec4<T> const & maxVal
-	)
-    {
-        return detail::tvec4<T>(
-            clamp(x.x, minVal.x, maxVal.x),
-            clamp(x.y, minVal.y, maxVal.y),
-            clamp(x.z, minVal.z, maxVal.z),
-            clamp(x.w, minVal.w, maxVal.w));
-    }
-
-	// mix
-	template <typename genTypeT, typename genTypeU>
-	inline genTypeT mix
-	(
-		genTypeT const & x, 
-		genTypeT const & y, 
-		genTypeU const & a
-	)
-	{
-		// It could be a vector too
-		//GLM_STATIC_ASSERT(
-		//	detail::type<genTypeT>::is_float && 
-		//	detail::type<genTypeU>::is_float);
-
-		//return x + a * (y - x);
-		return genTypeU(x) + a * genTypeU(y - x);
-	}
-
-	template <typename valTypeA, typename valTypeB>
-	inline detail::tvec2<valTypeA> mix
-	(
-		detail::tvec2<valTypeA> const & x, 
-		detail::tvec2<valTypeA> const & y, 
-		valTypeB const & a
-	)
-	{
-		return detail::tvec2<valTypeA>(
-			detail::tvec2<valTypeB>(x) + a * detail::tvec2<valTypeB>(y - x));
-	}
-
-	template <typename valTypeA, typename valTypeB>
-	inline detail::tvec3<valTypeA> mix
-	(
-		detail::tvec3<valTypeA> const & x, 
-		detail::tvec3<valTypeA> const & y, 
-		valTypeB const & a
-	)
-	{
-		return detail::tvec3<valTypeA>(
-			detail::tvec3<valTypeB>(x) + a * detail::tvec3<valTypeB>(y - x));
-	}
-
-	template <typename valTypeA, typename valTypeB>
-	inline detail::tvec4<valTypeA> mix
-	(
-		detail::tvec4<valTypeA> const & x, 
-		detail::tvec4<valTypeA> const & y, 
-		valTypeB const & a
-	)
-	{
-		return detail::tvec4<valTypeA>(
-			detail::tvec4<valTypeB>(x) + a * detail::tvec4<valTypeB>(y - x));
-	}
-
-	template <typename valTypeA, typename valTypeB>
-	inline detail::tvec2<valTypeA> mix
-	(
-		detail::tvec2<valTypeA> const & x, 
-		detail::tvec2<valTypeA> const & y, 
-		detail::tvec2<valTypeB> const & a
-	)
-	{
-		return detail::tvec2<valTypeA>(
-			detail::tvec2<valTypeB>(x) + a * detail::tvec2<valTypeB>(y - x));
-	}
-
-	template <typename valTypeA, typename valTypeB>
-	inline detail::tvec3<valTypeA> mix
-	(
-		detail::tvec3<valTypeA> const & x, 
-		detail::tvec3<valTypeA> const & y, 
-		detail::tvec3<valTypeB> const & a
-	)
-	{
-		return detail::tvec3<valTypeA>(
-			detail::tvec3<valTypeB>(x) + a * detail::tvec3<valTypeB>(y - x));
-	}
-
-	template <typename valTypeA, typename valTypeB>
-	inline detail::tvec4<valTypeA> mix
-	(
-		detail::tvec4<valTypeA> const & x, 
-		detail::tvec4<valTypeA> const & y, 
-		detail::tvec4<valTypeB> const & a
-	)
-	{
-		return detail::tvec4<valTypeA>(
-			detail::tvec4<valTypeB>(x) + a * detail::tvec4<valTypeB>(y - x));
-	}
-
-	//template <typename genTypeT>
-	//inline genTypeT mix
-	//(
-	//	genTypeT const & x, 
-	//	genTypeT const & y, 
-	//	float const & a
-	//)
-	//{
-	//	// It could be a vector too
-	//	//GLM_STATIC_ASSERT(
-	//	//	detail::type<genTypeT>::is_float && 
-	//	//	detail::type<genTypeU>::is_float);
-
-	//	return x + a * (y - x);
-	//}
-
-	template <typename genType>
-	inline genType mix
-	(
-		genType const & x, 
-		genType const & y, 
-		bool a
-	)
-	{
-		GLM_STATIC_ASSERT(detail::type<genType>::is_float);
-
-		return a ? x : y;
-	}
-
-	template <typename T>
-	inline detail::tvec2<T> mix
-	(
-		detail::tvec2<T> const & x, 
-		detail::tvec2<T> const & y, 
-		typename detail::tvec2<T>::bool_type a
-	)
-	{
-		GLM_STATIC_ASSERT(detail::type<T>::is_float);
-
-		detail::tvec2<T> result;
-		for
-		(
-			typename detail::tvec2<T>::size_type i = 0; 
-			i < detail::tvec2<T>::value_size(); 
-			++i
-		)
-		{
-			result[i] = a[i] ? x[i] : y[i];
-		}
-		return result;
-	}
-
-	template <typename T>
-	inline detail::tvec3<T> mix
-	(
-		detail::tvec3<T> const & x, 
-		detail::tvec3<T> const & y, 
-		typename detail::tvec3<T>::bool_type a
-	)
-	{
-		GLM_STATIC_ASSERT(detail::type<T>::is_float);
-
-		detail::tvec3<T> result;
-		for
-		(
-			typename detail::tvec3<T>::size_type i = 0; 
-			i < detail::tvec3<T>::value_size(); 
-			++i
-		)
-		{
-			result[i] = a[i] ? x[i] : y[i];
-		}
-		return result;
-	}
-
-	template <typename T>
-	inline detail::tvec4<T> mix
-	(
-		detail::tvec4<T> const & x, 
-		detail::tvec4<T> const & y, 
-		typename detail::tvec4<T>::bool_type a
-	)
-	{
-		GLM_STATIC_ASSERT(detail::type<T>::is_float);
-
-		detail::tvec4<T> result;
-		for
-		(
-			typename detail::tvec4<T>::size_type i = 0; 
-			i < detail::tvec4<T>::value_size(); 
-			++i
-		)
-		{
-			result[i] = a[i] ? x[i] : y[i];
-		}
-		return result;
-	}
-
-	// step
-    template <typename genType>
-    inline genType step
-	(
-		genType const & edge, 
-		genType const & x
-	)
-    {
-		GLM_STATIC_ASSERT(detail::type<genType>::is_float);
-
-        return x <= edge ? genType(0) : genType(1);
-    }
-
-    template <typename T>
-    inline detail::tvec2<T> step
-	(
-		typename detail::tvec2<T>::value_type const & edge, 
-		detail::tvec2<T> const & x
-	)
-    {
-        return detail::tvec2<T>(
-            x.x <= edge ? T(0) : T(1),
-            x.y <= edge ? T(0) : T(1));
-    }
-
-    template <typename T>
-    inline detail::tvec3<T> step
-	(
-		typename detail::tvec3<T>::value_type const & edge, 
-		detail::tvec3<T> const & x
-	)
-    {
-		return detail::tvec3<T>(
-			x.x <= edge ? T(0) : T(1),
-			x.y <= edge ? T(0) : T(1),
-			x.z <= edge ? T(0) : T(1));
-    }
-
-    template <typename T>
-    inline detail::tvec4<T> step
-	(
-		typename detail::tvec4<T>::value_type const & edge, 
-		detail::tvec4<T> const & x
-	)
-    {
-        return detail::tvec4<T>(
-            x.x <= edge ? T(0) : T(1),
-            x.y <= edge ? T(0) : T(1),
-            x.z <= edge ? T(0) : T(1),
-            x.w <= edge ? T(0) : T(1));
-    }
-
-    template <typename T>
-    inline detail::tvec2<T> step
-	(
-		detail::tvec2<T> const & edge, 
-		detail::tvec2<T> const & x
-	)
-    {
-        return detail::tvec2<T>(
-            x.x <= edge.x ? T(0) : T(1),
-            x.y <= edge.y ? T(0) : T(1));
-    }
-
-    template <typename T>
-    inline detail::tvec3<T> step
-	(
-		detail::tvec3<T> const & edge, 
-		detail::tvec3<T> const & x
-	)
-    {
-        return detail::tvec3<T>(
-            x.x <= edge.x ? T(0) : T(1),
-            x.y <= edge.y ? T(0) : T(1),
-            x.z <= edge.z ? T(0) : T(1));
-    }
-
-    template <typename T>
-    inline detail::tvec4<T> step
-	(
-		detail::tvec4<T> const & edge, 
-		detail::tvec4<T> const & x
-	)
-    {
-        return detail::tvec4<T>(
-            x.x <= edge.x ? T(0) : T(1),
-            x.y <= edge.y ? T(0) : T(1),
-            x.z <= edge.z ? T(0) : T(1),
-            x.w <= edge.w ? T(0) : T(1));
-    }
-
-    // smoothstep
-    template <typename genType>
-    inline genType smoothstep
-	(
-		genType const & edge0, 
-		genType const & edge1, 
-		genType const & x
-	)
-    {
-		GLM_STATIC_ASSERT(detail::type<genType>::is_float);
-
-        genType tmp = clamp((x - edge0) / (edge1 - edge0), genType(0), genType(1));
-        return tmp * tmp * (genType(3) - genType(2) * tmp);
-    }
-
-    template <typename T>
-    inline detail::tvec2<T> smoothstep
-	(
-		typename detail::tvec2<T>::value_type const & edge0, 
-		typename detail::tvec2<T>::value_type const & edge1, 
-		detail::tvec2<T> const & x
-	)
-    {
-        return detail::tvec2<T>(
-            smoothstep(edge0, edge1, x.x),
-            smoothstep(edge0, edge1, x.y));
-    }
-
-    template <typename T>
-    inline detail::tvec3<T> smoothstep
-	(
-		typename detail::tvec3<T>::value_type const & edge0, 
-		typename detail::tvec3<T>::value_type const & edge1, 
-		detail::tvec3<T> const & x
-	)
-    {
-        return detail::tvec3<T>(
-            smoothstep(edge0, edge1, x.x),
-            smoothstep(edge0, edge1, x.y),
-            smoothstep(edge0, edge1, x.z));
-    }
-
-    template <typename T>
-    inline detail::tvec4<T> smoothstep
-	(
-		typename detail::tvec4<T>::value_type const & edge0, 
-		typename detail::tvec4<T>::value_type const & edge1, 
-		detail::tvec4<T> const & x
-	)
-    {
-        return detail::tvec4<T>(
-            smoothstep(edge0, edge1, x.x),
-            smoothstep(edge0, edge1, x.y),
-            smoothstep(edge0, edge1, x.z),
-            smoothstep(edge0, edge1, x.w));
-    }
-
-    template <typename T>
-    inline detail::tvec2<T> smoothstep
-	(
-		detail::tvec2<T> const & edge0, 
-		detail::tvec2<T> const & edge1, 
-		detail::tvec2<T> const & x
-	)
-    {
-        return detail::tvec2<T>(
-            smoothstep(edge0.x, edge1.x, x.x),
-            smoothstep(edge0.y, edge1.y, x.y));
-    }
-
-    template <typename T>
-    inline detail::tvec3<T> smoothstep
-	(
-		detail::tvec3<T> const & edge0, 
-		detail::tvec3<T> const & edge1, 
-		detail::tvec3<T> const & x
-	)
-    {
-        return detail::tvec3<T>(
-            smoothstep(edge0.x, edge1.x, x.x),
-            smoothstep(edge0.y, edge1.y, x.y),
-            smoothstep(edge0.z, edge1.z, x.z));
-    }
-
-    template <typename T>
-    inline detail::tvec4<T> smoothstep
-	(
-		detail::tvec4<T> const & edge0, 
-		detail::tvec4<T> const & edge1, 
-		detail::tvec4<T> const & x
-	)
-    {
-        return detail::tvec4<T>(
-            smoothstep(edge0.x, edge1.x, x.x),
-            smoothstep(edge0.y, edge1.y, x.y),
-            smoothstep(edge0.z, edge1.z, x.z),
-            smoothstep(edge0.w, edge1.w, x.w));
-    }
-
-	template <typename genType> 
-	inline typename genType::bool_type isnan
-	(
-		genType const & x
-	)
-	{
-		GLM_STATIC_ASSERT(detail::type<genType>::is_float);
-
-#if(defined(GLM_COMPILER) && GLM_COMPILER & GLM_COMPILER_VC)
-		return typename genType::bool_type(_isnan(x));
-#else
-		return typename genType::bool_type(std::isnan(x));
-#endif
-	}
-
-    template <typename T>
-    inline typename detail::tvec2<T>::bool_type isnan
-	(
-		detail::tvec2<T> const & x
-	)
-    {
-        return typename detail::tvec2<T>::bool_type(
-            isnan(x.x),
-            isnan(x.y));
-    }
-
-    template <typename T>
-    inline typename detail::tvec3<T>::bool_type isnan
-	(
-		detail::tvec3<T> const & x
-	)
-    {
-        return typename detail::tvec3<T>::bool_type(
-            isnan(x.x),
-            isnan(x.y),
-            isnan(x.z));
-    }
-
-    template <typename T>
-    inline typename detail::tvec4<T>::bool_type isnan
-	(
-		detail::tvec4<T> const & x
-	)
-    {
-        return typename detail::tvec4<T>::bool_type(
-            isnan(x.x),
-            isnan(x.y),
-            isnan(x.z),
-            isnan(x.w));
-    }
-
-	template <typename genType> 
-	inline typename genType::bool_type isinf
-	(
-		genType const & x
-	)
-	{
-		GLM_STATIC_ASSERT(detail::type<genType>::is_float);
-
-#if(defined(GLM_COMPILER) && GLM_COMPILER & GLM_COMPILER_VC)
-		return typename genType::bool_type(_fpclass(x) == _FPCLASS_NINF || _fpclass(x) == _FPCLASS_PINF);
-#else
-		return typename genType::bool_type(std::isinf(x));
-#endif
-	}
-
-    template <typename T>
-    inline typename detail::tvec2<T>::bool_type isinf
-	(
-		detail::tvec2<T> const & x
-	)
-    {
-        return typename detail::tvec2<T>::bool_type(
-            isnan(x.x),
-            isnan(x.y));
-    }
-
-    template <typename T>
-    inline typename detail::tvec3<T>::bool_type isinf
-	(
-		detail::tvec3<T> const & x
-	)
-    {
-        return typename detail::tvec3<T>::bool_type(
-            isnan(x.x),
-            isnan(x.y),
-            isnan(x.z));
-    }
-
-    template <typename T>
-    inline typename detail::tvec4<T>::bool_type isinf
-	(
-		detail::tvec4<T> const & x
-	)
-    {
-        return typename detail::tvec4<T>::bool_type(
-            isnan(x.x),
-            isnan(x.y),
-            isnan(x.z),
-            isnan(x.w));
-    }
-
-	inline int floatBitsToInt(float const & value)
-	{
-		union
-		{
-			float f;
-			int i;
-		} fi;
-
-		fi.f = value;
-		return fi.i;
-	}
-
-    template <typename T>
-    inline detail::tvec2<int> floatBitsToInt
-	(
-		detail::tvec2<T> const & value
-	)
-    {
-        return detail::tvec2<T>(
-            floatBitsToInt(value.x),
-            floatBitsToInt(value.y));
-    }
-
-    template <typename T>
-    inline detail::tvec3<int> floatBitsToInt
-	(
-		detail::tvec3<T> const & value
-	)
-    {
-        return detail::tvec3<T>(
-            floatBitsToInt(value.x),
-            floatBitsToInt(value.y));
-    }
-
-    template <typename T>
-    inline detail::tvec4<int> floatBitsToInt
-	(
-		detail::tvec4<T> const & value
-	)
-    {
-        return detail::tvec4<T>(
-            floatBitsToInt(value.x),
-            floatBitsToInt(value.y));
-    }
-
-	inline uint floatBitsToUint(float const & value)
-	{
-		union
-		{
-			float f;
-			uint u;
-		} fu;
-
-		fu.f = value;
-		return fu.u;
-	}
-
-    template <typename T>
-    inline detail::tvec2<uint> floatBitsToUint
-	(
-		detail::tvec2<T> const & value
-	)
-    {
-        return detail::tvec2<T>(
-            floatBitsToUint(value.x),
-            floatBitsToUint(value.y));
-    }
-
-    template <typename T>
-    inline detail::tvec3<uint> floatBitsToUint
-	(
-		detail::tvec3<T> const & value
-	)
-    {
-        return detail::tvec3<T>(
-            floatBitsToUint(value.x),
-            floatBitsToUint(value.y));
-    }
-
-    template <typename T>
-    inline detail::tvec4<uint> floatBitsToUint
-	(
-		detail::tvec4<T> const & value
-	)
-    {
-        return detail::tvec4<T>(
-            floatBitsToUint(value.x),
-            floatBitsToUint(value.y));
-    }
-
-	inline float intBitsToFloat(int const & value)
-	{
-		union
-		{
-			float f;
-			int i;
-		} fi;
-
-		fi.i = value;
-		return fi.f;
-	}
-
-	inline float intBitsToFloat(uint const & value)
-	{
-		union
-		{
-			float f;
-			uint u;
-		} fu;
-
-		fu.u = value;
-		return fu.f;
-	}
-
-    template <typename T>
-    inline detail::tvec2<float> intBitsToFloat
-	(
-		detail::tvec2<T> const & value
-	)
-    {
-        return detail::tvec2<T>(
-            intBitsToFloat(value.x),
-            intBitsToFloat(value.y));
-    }
-
-    template <typename T>
-    inline detail::tvec3<float> intBitsToFloat
-	(
-		detail::tvec3<T> const & value
-	)
-    {
-        return detail::tvec3<T>(
-            intBitsToFloat(value.x),
-            intBitsToFloat(value.y));
-    }
-
-    template <typename T>
-    inline detail::tvec4<float> intBitsToFloat
-	(
-		detail::tvec4<T> const & value
-	)
-    {
-        return detail::tvec4<T>(
-            intBitsToFloat(value.x),
-            intBitsToFloat(value.y));
-    }
-
-	template <typename genType>
-	inline genType fma
-	(
-		genType const & a, 
-		genType const & b, 
-		genType const & c
-	)
-	{
-		return a * b + c;
-	}
-
-	template <typename genType>
-	genType frexp
-	(
-		genType const & x, 
-		int & exp
-	)
-	{
-		return std::frexp(x, exp);
-	}
-
-	template <typename T>
-	detail::tvec2<T> frexp
-	(
-		detail::tvec2<T> const & x, 
-		detail::tvec2<int> & exp
-	)
-	{
-		return std::frexp(x, exp);
-	}
-
-	template <typename T>
-	detail::tvec3<T> frexp
-	(
-		detail::tvec3<T> const & x, 
-		detail::tvec3<int> & exp
-	)
-	{
-		return std::frexp(x, exp);
-	}
-
-	template <typename T>
-	detail::tvec4<T> frexp
-	(
-		detail::tvec4<T> const & x, 
-		detail::tvec4<int> & exp
-	)
-	{
-		return std::frexp(x, exp);
-	}
-
-	template <typename genType>
-	genType ldexp
-	(
-		genType const & x, 
-		int const & exp
-	)
-	{
-		return std::frexp(x, exp);
-	}
-
-	template <typename T>
-	detail::tvec2<T> ldexp
-	(
-		detail::tvec2<T> const & x, 
-		detail::tvec2<int> const & exp
-	)
-	{
-		return std::frexp(x, exp);
-	}
-
-	template <typename T>
-	detail::tvec3<T> ldexp
-	(
-		detail::tvec3<T> const & x, 
-		detail::tvec3<int> const & exp
-	)
-	{
-		return std::frexp(x, exp);
-	}
-
-	template <typename T>
-	detail::tvec4<T> ldexp
-	(
-		detail::tvec4<T> const & x, 
-		detail::tvec4<int> const & exp
-	)
-	{
-		return std::frexp(x, exp);
-	}
-
-	}//namespace common
-	}//namespace function
-	}//namespace core
-}//namespace glm

+ 0 - 71
glm/core/func_exponential.hpp

@@ -1,71 +0,0 @@
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// OpenGL Mathematics Copyright (c) 2005 - 2010 G-Truc Creation (www.g-truc.net)
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// Created : 2008-08-08
-// Updated : 2010-02-04
-// Licence : This source is under MIT License
-// File    : glm/core/func_exponential.hpp
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-#ifndef glm_core_func_exponential
-#define glm_core_func_exponential
-
-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.
-	namespace exponential{
-
-	//! Returns x raised to the y power. 
-	//! (From GLSL 1.30.08 specification, section 8.2)
-	template <typename genType> 
-	genType pow(genType const & x, genType const & y);
-
-	//! Returns the natural exponentiation of x, i.e., e^x.
-	//! (From GLSL 1.30.08 specification, section 8.2)
-	template <typename genType> 
-	genType exp(genType const & x);
-
-	//! Returns the natural logarithm of x, i.e., 
-	//! returns the value y which satisfies the equation x = e^y. 
-	//! Results are undefined if x <= 0.
-	//! (From GLSL 1.30.08 specification, section 8.2)
-	template <typename genType> 
-	genType log(genType const & x);
-
-	//! Returns 2 raised to the x power.
-	//! (From GLSL 1.30.08 specification, section 8.2)
-	template <typename genType> 
-	genType exp2(genType const & x);
-
-	//! Returns the base 2 log of x, i.e., returns the value y, 
-	//! which satisfies the equation x = 2 ^ y.
-	//! (From GLSL 1.30.08 specification, section 8.2)
-	template <typename genType> 
-	genType log2(genType const & x);
-
-	//! Returns the positive square root of x.
-	//! (From GLSL 1.30.08 specification, section 8.2)
-	template <typename genType> 
-	genType sqrt(genType const & x);
-    
-	//! Returns the reciprocal of the positive square root of x.
-	//! (From GLSL 1.30.08 specification, section 8.2)
-	template <typename genType> 
-	genType inversesqrt(genType const & x);
-
-	}//namespace exponential
-	}//namespace function
-	}//namespace core
-
-	using namespace core::function::exponential;
-}//namespace glm
-
-#include "func_exponential.inl"
-
-#endif//glm_core_func_exponential

+ 0 - 358
glm/core/func_exponential.inl

@@ -1,358 +0,0 @@
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// OpenGL Mathematics Copyright (c) 2005 - 2010 G-Truc Creation (www.g-truc.net)
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// Created : 2008-08-03
-// Updated : 2010-02-04
-// Licence : This source is under MIT License
-// File    : glm/core/func_exponential.inl
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-namespace glm
-{
-	namespace core{
-	namespace function{
-	namespace exponential{
-
-    // pow
-    template <typename genType>
-    inline genType pow
-	(
-		genType const & x, 
-		genType const & y
-	)
-    {
-		GLM_STATIC_ASSERT(detail::type<genType>::is_float);
-
-        return ::std::pow(x, y);
-    }
-
-    template <typename T>
-    inline detail::tvec2<T> pow
-	(
-		detail::tvec2<T> const & x, 
-		detail::tvec2<T> const & y
-	)
-    {
-        return detail::tvec2<T>(
-            pow(x.x, y.x),
-            pow(x.y, y.y));
-    }
-
-    template <typename T>
-    inline detail::tvec3<T> pow
-	(
-		detail::tvec3<T> const & x, 
-		detail::tvec3<T> const & y
-	)
-    {
-        return detail::tvec3<T>(
-            pow(x.x, y.x),
-            pow(x.y, y.y),
-            pow(x.z, y.z));
-    }
-
-    template <typename T>
-    inline detail::tvec4<T> pow
-	(
-		detail::tvec4<T> const & x, 
-		detail::tvec4<T> const & y
-	)
-    {
-        return detail::tvec4<T>(
-            pow(x.x, y.x),
-            pow(x.y, y.y),
-            pow(x.z, y.z),
-            pow(x.w, y.w));
-    }
-
-    // exp
-    template <typename genType>
-    inline genType exp
-	(
-		genType const & x
-	)
-    {
-		GLM_STATIC_ASSERT(detail::type<genType>::is_float);
-
-        return ::std::exp(x);
-    }
-
-    template <typename T>
-    inline detail::tvec2<T> exp
-	(
-		detail::tvec2<T> const & x
-	)
-    {
-        return detail::tvec2<T>(
-            exp(x.x),
-            exp(x.y));
-    }
-
-    template <typename T>
-    inline detail::tvec3<T> exp
-	(
-		detail::tvec3<T> const & x
-	)
-    {
-        return detail::tvec3<T>(
-            exp(x.x),
-            exp(x.y),
-            exp(x.z));
-    }
-
-    template <typename T>
-    inline detail::tvec4<T> exp
-	(
-		detail::tvec4<T> const & x
-	)
-    {
-        return detail::tvec4<T>(
-            exp(x.x),
-            exp(x.y),
-            exp(x.z),
-            exp(x.w));
-    }
-
-    // log
-    template <typename genType>
-    inline genType log
-	(
-		genType const & x
-	)
-    {
-		GLM_STATIC_ASSERT(detail::type<genType>::is_float);
-
-        return ::std::log(x);
-    }
-
-    template <typename T>
-    inline detail::tvec2<T> log
-	(
-		detail::tvec2<T> const & x
-	)
-    {
-        return detail::tvec2<T>(
-            log(x.x),
-            log(x.y));
-    }
-
-    template <typename T>
-    inline detail::tvec3<T> log
-	(
-		detail::tvec3<T> const & x
-	)
-    {
-        return detail::tvec3<T>(
-            log(x.x),
-            log(x.y),
-            log(x.z));
-    }
-
-    template <typename T>
-    inline detail::tvec4<T> log
-	(
-		detail::tvec4<T> const & x
-	)
-    {
-        return detail::tvec4<T>(
-            log(x.x),
-            log(x.y),
-            log(x.z),
-            log(x.w));
-    }
-
-    //exp2, ln2 = 0.69314718055994530941723212145818f
-    template <typename genType>
-    inline genType exp2
-	(
-		genType const & x
-	)
-    {
-		GLM_STATIC_ASSERT(detail::type<genType>::is_float);
-
-        return ::std::exp(genType(0.69314718055994530941723212145818) * x);
-    }
-
-    template <typename T>
-    inline detail::tvec2<T> exp2
-	(
-		detail::tvec2<T> const & x
-	)
-    {
-        return detail::tvec2<T>(
-            exp2(x.x),
-            exp2(x.y));
-    }
-
-    template <typename T>
-    inline detail::tvec3<T> exp2
-	(
-		detail::tvec3<T> const & x
-	)
-    {
-        return detail::tvec3<T>(
-            exp2(x.x),
-            exp2(x.y),
-            exp2(x.z));
-    }
-
-    template <typename T>
-    inline detail::tvec4<T> exp2
-	(
-		detail::tvec4<T> const & x
-	)
-    {
-        return detail::tvec4<T>(
-            exp2(x.x),
-            exp2(x.y),
-            exp2(x.z),
-            exp2(x.w));
-    }
-
-    // log2, ln2 = 0.69314718055994530941723212145818f
-    template <typename genType>
-    inline genType log2
-	(
-		genType const & x
-	)
-    {
-		GLM_STATIC_ASSERT(detail::type<genType>::is_float);
-
-        return ::std::log(x) / genType(0.69314718055994530941723212145818);
-    }
-
-    template <typename T>
-    inline detail::tvec2<T> log2
-	(
-		detail::tvec2<T> const & x
-	)
-    {
-        return detail::tvec2<T>(
-            log2(x.x),
-            log2(x.y));
-    }
-
-    template <typename T>
-    inline detail::tvec3<T> log2
-	(
-		detail::tvec3<T> const & x
-	)
-    {
-        return detail::tvec3<T>(
-            log2(x.x),
-            log2(x.y),
-            log2(x.z));
-    }
-
-    template <typename T>
-    inline detail::tvec4<T> log2
-	(
-		detail::tvec4<T> const & x
-	)
-    {
-        return detail::tvec4<T>(
-            log2(x.x),
-            log2(x.y),
-            log2(x.z),
-            log2(x.w));
-    }
-
-    // sqrt
-    template <typename genType>
-    inline genType sqrt
-	(
-		genType const & x
-	)
-    {
-		GLM_STATIC_ASSERT(detail::type<genType>::is_float);
-
-        return genType(::std::sqrt(double(x)));
-    }
-
-    template <typename T>
-    inline detail::tvec2<T> sqrt
-	(
-		detail::tvec2<T> const & x
-	)
-    {
-        return detail::tvec2<T>(
-            sqrt(x.x),
-            sqrt(x.y));
-    }
-
-    template <typename T>
-    inline detail::tvec3<T> sqrt
-	(
-		detail::tvec3<T> const & x
-	)
-    {
-        return detail::tvec3<T>(
-            sqrt(x.x),
-            sqrt(x.y),
-            sqrt(x.z));
-    }
-
-    template <typename T>
-    inline detail::tvec4<T> sqrt
-	(
-		detail::tvec4<T> const & x
-	)
-    {
-        return detail::tvec4<T>(
-            sqrt(x.x),
-            sqrt(x.y),
-            sqrt(x.z),
-            sqrt(x.w));
-    }
-
-    template <typename genType>
-    inline genType inversesqrt
-	(
-		genType const & x
-	)
-    {
-		GLM_STATIC_ASSERT(detail::type<genType>::is_float);
-
-        return genType(1) / ::std::sqrt(x);
-    }
-
-    template <typename T>
-    inline detail::tvec2<T> inversesqrt
-	(
-		detail::tvec2<T> const & x
-	)
-    {
-        return detail::tvec2<T>(
-            inversesqrt(x.x),
-            inversesqrt(x.y));
-    }
-
-    template <typename T>
-    inline detail::tvec3<T> inversesqrt
-	(
-		detail::tvec3<T> const & x
-	)
-    {
-        return detail::tvec3<T>(
-            inversesqrt(x.x),
-            inversesqrt(x.y),
-            inversesqrt(x.z));
-    }
-
-    template <typename T>
-    inline detail::tvec4<T> inversesqrt
-	(
-		detail::tvec4<T> const & x
-	)
-    {
-        return detail::tvec4<T>(
-            inversesqrt(x.x),
-            inversesqrt(x.y),
-            inversesqrt(x.z),
-            inversesqrt(x.w));
-    }
-
-	}//namespace exponential
-	}//namespace function
-	}//namespace core
-}//namespace glm

+ 0 - 92
glm/core/func_geometric.hpp

@@ -1,92 +0,0 @@
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// OpenGL Mathematics Copyright (c) 2005 - 2010 G-Truc Creation (www.g-truc.net)
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// Created : 2008-08-03
-// Updated : 2010-02-04
-// Licence : This source is under MIT License
-// File    : glm/core/func_geometric.hpp
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-#ifndef glm_core_func_geometric
-#define glm_core_func_geometric
-
-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{
-
-	//! Returns the length of x, i.e., sqrt(x * x).
-	//! (From GLSL 1.30.08 specification, section 8.4)
-	template <typename genType> 
-	typename genType::value_type length(
-		genType const & x); 
-
-	//! Returns the distance betwwen p0 and p1, i.e., length(p0 - p1).
-    //! (From GLSL 1.30.08 specification, section 8.4)
-	template <typename genType> 
-	typename genType::value_type distance(
-		genType const & p0, 
-		genType const & p1);
-
-	//! Returns the dot product of x and y, i.e., result = x * y.
-	//! (From GLSL 1.30.08 specification, section 8.4)
-    template <typename genType> 
-	typename genType::value_type dot(
-		genType const & x, 
-		genType const & y);
-
-	//! Returns the cross product of x and y.
-    //! (From GLSL 1.30.08 specification, section 8.4)
-    template <typename T> 
-	detail::tvec3<T> cross(
-		detail::tvec3<T> const & x, 
-		detail::tvec3<T> const & y);
-
-	//! Returns a vector in the same direction as x but with length of 1.
-	//! (From GLSL 1.30.08 specification, section 8.4)
-	template <typename genType> 
-	genType normalize(
-		genType const & x);
-
-	//! If dot(Nref, I) < 0.0, return N, otherwise, return -N.
-	//! (From GLSL 1.30.08 specification, section 8.4)
-    template <typename genType> 
-	genType faceforward(
-		genType const & N, 
-		genType const & I, 
-		genType const & Nref);
-  
-	//! For the incident vector I and surface orientation N, 
-	//! returns the reflection direction : result = I - 2.0 * dot(N, I) * N.
-	//! (From GLSL 1.30.08 specification, section 8.4)
-    template <typename genType> 
-	genType reflect(
-		genType const & I, 
-		genType const & N);
-  
-	//! For the incident vector I and surface normal N, 
-	//! and the ratio of indices of refraction eta, 
-	//! return the refraction vector.
-	//! (From GLSL 1.30.08 specification, section 8.4)
-    template <typename genType> 
-	genType refract(
-		genType const & I, 
-		genType const & N, 
-		typename genType::value_type const & eta);
-
-	}//namespace geometric
-	}//namespace function
-	}//namespace core
-
-	using namespace core::function::geometric;
-}//namespace glm
-
-#include "func_geometric.inl"
-
-#endif//glm_core_func_geometric

+ 0 - 290
glm/core/func_geometric.inl

@@ -1,290 +0,0 @@
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// OpenGL Mathematics Copyright (c) 2005 - 2010 G-Truc Creation (www.g-truc.net)
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// Created : 2008-08-03
-// Updated : 2010-02-04
-// Licence : This source is under MIT License
-// File    : glm/core/func_geometric.inl
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-namespace glm
-{
-	namespace core{
-	namespace function{
-	namespace geometric{
-
-    // length
-    template <typename genType>
-	inline genType length
-	(
-		genType const & x
-	)
-    {
-		GLM_STATIC_ASSERT(detail::type<genType>::is_float);
-
-        genType sqr = x * x;
-        return sqrt(sqr);
-    }
-
-	template <typename T>
-	inline typename detail::tvec2<T>::value_type length
-	(
-		detail::tvec2<T> const & v
-	)
-    {
-		GLM_STATIC_ASSERT(detail::type<T>::is_float);
-
-        typename detail::tvec2<T>::value_type sqr = v.x * v.x + v.y * v.y;
-        return sqrt(sqr);
-    }
-
-    template <typename T>
-    inline typename detail::tvec3<T>::value_type length
-	(
-		detail::tvec3<T> const & v
-	)
-    {
-		GLM_STATIC_ASSERT(detail::type<T>::is_float);
-
-        typename detail::tvec3<T>::value_type sqr = v.x * v.x + v.y * v.y + v.z * v.z;
-        return sqrt(sqr);
-    }
-
-    template <typename T>
-    inline typename detail::tvec4<T>::value_type length
-	(
-		detail::tvec4<T> const & v
-	)
-    {
-		GLM_STATIC_ASSERT(detail::type<T>::is_float);
-
-        typename detail::tvec4<T>::value_type sqr = v.x * v.x + v.y * v.y + v.z * v.z + v.w * v.w;
-        return sqrt(sqr);
-    }
-
-    // distance
-	template <typename genType>
-    inline genType distance
-	(
-		genType const & p0, 
-		genType const & p1
-	)
-    {
-        GLM_STATIC_ASSERT(detail::type<genType>::is_float);
-
-		return length(p1 - p0);
-    }
- 
-	template <typename T>
-	inline typename detail::tvec2<T>::value_type distance
-	(
-		detail::tvec2<T> const & p0,
-		detail::tvec2<T> const & p1
-	)
-    {
-		GLM_STATIC_ASSERT(detail::type<T>::is_float);
-
-        return length(p1 - p0);
-    }
-
-    template <typename T>
-    inline typename detail::tvec3<T>::value_type distance
-	(
-		detail::tvec3<T> const & p0,
-		detail::tvec3<T> const & p1
-	)
-    {
-		GLM_STATIC_ASSERT(detail::type<T>::is_float);
-
-		return length(p1 - p0);
-    }
-
-    template <typename T>
-    inline typename detail::tvec4<T>::value_type distance
-	(
-		detail::tvec4<T> const & p0,
-		detail::tvec4<T> const & p1
-	)
-    {
-		GLM_STATIC_ASSERT(detail::type<T>::is_float);
-
-		return length(p1 - p0);
-    }
-
-	// dot
-	template <typename genType>
-	inline genType dot
-	(
-		genType const & x, 
-		genType const & y
-	)
-	{
-		GLM_STATIC_ASSERT(detail::type<genType>::is_float);
-
-		return x * y;
-	}
-
-    template <typename T>
-	inline typename detail::tvec2<T>::value_type dot
-	(
-		detail::tvec2<T> const & x, 
-		detail::tvec2<T> const & y
-	)
-    {
-		GLM_STATIC_ASSERT(detail::type<T>::is_float);
-
-		return x.x * y.x + x.y * y.y;
-    }
-
-    template <typename T>
-    inline T dot
-	(
-		detail::tvec3<T> const & x, 
-		detail::tvec3<T> const & y
-	)
-    {
-		GLM_STATIC_ASSERT(detail::type<T>::is_float);
-
-		return x.x * y.x + x.y * y.y + x.z * y.z;
-    }
-/* // SSE3
-    inline float dot(const tvec4<float>& x, const tvec4<float>& y)
-    {
-	    float Result;
-	    __asm
-        {
-		    mov		esi, x
-		    mov		edi, y
-		    movaps	xmm0, [esi]
-		    mulps	xmm0, [edi]
-		    haddps(	_xmm0, _xmm0 )
-		    haddps(	_xmm0, _xmm0 )
-		    movss	Result, xmm0
-	    }
-	    return Result;
-    }
-*/
-    template <typename T>
-    inline T dot
-	(
-		detail::tvec4<T> const & x, 
-		detail::tvec4<T> const & y
-	)
-    {
-		GLM_STATIC_ASSERT(detail::type<T>::is_float);
-
-        return x.x * y.x + x.y * y.y + x.z * y.z + x.w * y.w;
-    }
-
-    // cross
-    template <typename T>
-    inline detail::tvec3<T> cross
-	(
-		detail::tvec3<T> const & x, 
-		detail::tvec3<T> const & y
-	)
-    {
-		GLM_STATIC_ASSERT(detail::type<T>::is_float);
-
-        return detail::tvec3<T>(
-            x.y * y.z - y.y * x.z,
-            x.z * y.x - y.z * x.x,
-            x.x * y.y - y.x * x.y);
-    }
-
-    // normalize
-    template <typename genType>
-    inline genType normalize
-	(
-		genType const & x
-	)
-    {
-		GLM_STATIC_ASSERT(detail::type<genType>::is_float);
-
-        return x < genType(0) ? genType(-1) : genType(1);
-    }
-
-    // According to issue 10 GLSL 1.10 specification, if length(x) == 0 then result is undefine and generate an error
-    template <typename T>
-    inline detail::tvec2<T> normalize
-	(
-		detail::tvec2<T> const & x
-	)
-    {
-		GLM_STATIC_ASSERT(detail::type<T>::is_float);
-		
-		typename detail::tvec2<T>::value_type sqr = x.x * x.x + x.y * x.y;
-	    return x * inversesqrt(sqr);
-    }
-
-    template <typename T>
-    inline detail::tvec3<T> normalize
-	(
-		detail::tvec3<T> const & x
-	)
-    {
-        GLM_STATIC_ASSERT(detail::type<T>::is_float);
-
-		typename detail::tvec3<T>::value_type sqr = x.x * x.x + x.y * x.y + x.z * x.z;
-	    return x * inversesqrt(sqr);
-    }
-
-    template <typename T>
-    inline detail::tvec4<T> normalize
-	(
-		detail::tvec4<T> const & x
-	)
-    {
-        GLM_STATIC_ASSERT(detail::type<T>::is_float);
-		
-		typename detail::tvec4<T>::value_type sqr = x.x * x.x + x.y * x.y + x.z * x.z + x.w * x.w;
-	    return x * inversesqrt(sqr);
-    }
-
-    // faceforward
-	template <typename genType>
-	inline genType faceforward
-	(
-		genType const & N, 
-		genType const & I, 
-		genType const & Nref
-	)
-	{
-		return dot(Nref, I) < 0 ? N : -N;
-	}
-
-	// reflect
-	template <typename genType>
-	genType reflect
-	(
-		genType const & I, 
-		genType const & N
-	)
-	{
-		return I - N * dot(N, I) * float(2);
-	}
-
-    // refract
-    template <typename genType>
-    inline genType refract
-	(
-		genType const & I, 
-		genType const & N, 
-		typename genType::value_type const & eta
-	)
-    {
-		//It could be a vector
-		//GLM_STATIC_ASSERT(detail::type<genType>::is_float);
-
-        typename genType::value_type dotValue = dot(N, I);
-        typename genType::value_type k = typename genType::value_type(1) - eta * eta * (typename genType::value_type(1) - dotValue * dotValue);
-        if(k < typename genType::value_type(0))
-            return genType(0);
-        else
-            return eta * I - (eta * dotValue + sqrt(k)) * N;
-    }
-
-	}//namespace geometric
-	}//namespace function
-	}//namespace core
-}//namespace glm

+ 0 - 142
glm/core/func_integer.hpp

@@ -1,142 +0,0 @@
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// OpenGL Mathematics Copyright (c) 2005 - 2010 G-Truc Creation (www.g-truc.net)
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// Created : 2010-03-17
-// Updated : 2010-03-31
-// Licence : This source is under MIT License
-// File    : glm/core/func_integer.hpp
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-#ifndef glm_core_func_integer
-#define glm_core_func_integer
-
-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. 
-	namespace integer{
-
-		//! Adds 32-bit unsigned integer x and y, returning the sum
-		//! modulo pow(2, 32). The value carry is set to 0 if the sum was
-		//! less than pow(2, 32), or to 1 otherwise.
-		//!
-		//! (From GLSL 4.00.08 specification, section 8.8)
-		template <typename genUType>
-		genUType uaddCarry(
-			genUType const & x, 
-			genUType const & y, 
-			genUType & carry);
-
-		//! Subtracts the 32-bit unsigned integer y from x, returning
-		//! the difference if non-negative, or pow(2, 32) plus the difference
-		//! otherwise. The value borrow is set to 0 if x >= y, or to 1 otherwise.
-		//! 
-		//! (From GLSL 4.00.08 specification, section 8.8)
-		template <typename genUType>
-		genUType usubBorrow(
-			genUType const & x, 
-			genUType const & y, 
-			genUType & borrow);
-		
-		//! Multiplies 32-bit integers x and y, producing a 64-bit
-		//! result. The 32 least-significant bits are returned in lsb.
-		//! The 32 most-significant bits are returned in msb.
-		//! (From GLSL 4.00.08 specification, section 8.8)
-		template <typename genUType>
-		void umulExtended(
-			genUType const & x, 
-			genUType const & y, 
-			genUType & msb, 
-			genUType & lsb);
-		
-		//! Multiplies 32-bit integers x and y, producing a 64-bit
-		//! result. The 32 least-significant bits are returned in lsb.
-		//! The 32 most-significant bits are returned in msb.
-		//! (From GLSL 4.00.08 specification, section 8.8)
-		template <typename genIType>
-		void imulExtended(
-			genIType const & x, 
-			genIType const & y, 
-			genIType & msb, 
-			genIType & lsb);
-
-
-		//! Extracts bits [offset, offset + bits - 1] from value,
-		//! returning them in the least significant bits of the result.
-		//! For unsigned data types, the most significant bits of the
-		//! result will be set to zero. For signed data types, the
-		//! most significant bits will be set to the value of bit offset + base – 1.
-		//!
-		//! If bits is zero, the result will be zero. The result will be
-		//! undefined if offset or bits is negative, or if the sum of
-		//! offset and bits is greater than the number of bits used
-		//! to store the operand.
-		//!
-		//! (From GLSL 4.00.08 specification, section 8.8)
-		template <typename genIUType>
-		genIUType bitfieldExtract(
-			genIUType const & Value, 
-			int const & Offset, 
-			int const & Bits);
-
-		//! Returns the insertion the bits least-significant bits of insert into base.
-		//!
-		//! The result will have bits [offset, offset + bits - 1] taken
-		//! from bits [0, bits – 1] of insert, and all other bits taken
-		//! directly from the corresponding bits of base. If bits is
-		//! zero, the result will simply be base. The result will be
-		//! undefined if offset or bits is negative, or if the sum of
-		//! offset and bits is greater than the number of bits used to
-		//! store the operand.
-		//!
-		//! (From GLSL 4.00.08 specification, section 8.8)
-		template <typename genIUType>
-		genIUType bitfieldInsert(
-			genIUType const & Base, 
-			genIUType const & Insert, 
-			int const & Offset, 
-			int const & Bits);
-
-		//! Returns the reversal of the bits of value. 
-		//! The bit numbered n of the result will be taken from bit (bits - 1) - n of value, 
-		//! where bits is the total number of bits used to represent value.
-		//! (From GLSL 4.00.08 specification, section 8.8)
-		template <typename genIUType>
-		genIUType bitfieldReverse(genIUType const & value);
-		
-		//! Returns the number of bits set to 1 in the binary representation of value.
-		//! (From GLSL 4.00.08 specification, section 8.8)
-		template <typename T, template <typename> class C>
-		typename C<T>::signed_type bitCount(C<T> const & Value);
-
-		//! Returns the bit number of the least significant bit set to
-		//! 1 in the binary representation of value. 
-		//! If value is zero, -1 will be returned.
-		//! (From GLSL 4.00.08 specification, section 8.8)
-		template <typename T, template <typename> class C>
-		typename C<T>::signed_type findLSB(C<T> const & Value);
-
-		//! Returns the bit number of the most significant bit in the binary representation of value.
-		//! For positive integers, the result will be the bit number of the most significant bit set to 1. 
-		//! For negative integers, the result will be the bit number of the most significant
-		//! bit set to 0. For a value of zero or negative one, -1 will be returned.
-		//! (From GLSL 4.00.08 specification, section 8.8)
-		template <typename T, template <typename> class C>
-		typename C<T>::signed_type findMSB(C<T> const & Value);
-
-	}//namespace integer
-	}//namespace function
-	}//namespace core
-
-	using namespace core::function::integer;
-}//namespace glm
-
-#include "func_integer.inl"
-
-#endif//glm_core_func_integer
-

+ 0 - 600
glm/core/func_integer.inl

@@ -1,600 +0,0 @@
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// OpenGL Mathematics Copyright (c) 2005 - 2010 G-Truc Creation (www.g-truc.net)
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// Created : 2010-03-17
-// Updated : 2010-03-31
-// Licence : This source is under MIT License
-// File    : glm/core/func_integer.inl
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-namespace glm
-{
-	namespace detail
-	{
-		
-	}//namespace detail
-
-	namespace core{
-	namespace function{
-	namespace integer
-	{
-		// uaddCarry
-		template <typename genUType>
-		inline genUType uaddCarry
-		(
-			genUType const & x, 
-			genUType const & y, 
-			genUType & Carry
-		)
-		{
-			detail::highp_uint_t Value64 = detail::highp_uint_t(x) + detail::highp_uint_t(y);
-			genUType Result = genUType(Value64 % (detail::highp_uint_t(1) << detail::highp_uint_t(32)));
-			Carry = (Value64 % (detail::highp_uint_t(1) << detail::highp_uint_t(32))) > 1 ? 1 : 0;
-			return Result;
-		}
-
-		template <typename T>
-		inline detail::tvec2<T> uaddCarry
-		(
-			detail::tvec2<T> const & x, 
-			detail::tvec2<T> const & y, 
-			detail::tvec2<T> & Carry
-		)
-		{
-			return detail::tvec2<T>(
-				uaddCarry(x[0], y[0], Carry[0]),
-				uaddCarry(x[1], y[1], Carry[1]));
-		}
-
-		template <typename T>
-		inline detail::tvec3<T> uaddCarry
-		(
-			detail::tvec3<T> const & x, 
-			detail::tvec3<T> const & y, 
-			detail::tvec3<T> & Carry
-		)
-		{
-			return detail::tvec3<T>(
-				uaddCarry(x[0], y[0], Carry[0]),
-				uaddCarry(x[1], y[1], Carry[1]),
-				uaddCarry(x[2], y[2], Carry[2]));
-		}
-
-		template <typename T>
-		inline detail::tvec4<T> uaddCarry
-		(
-			detail::tvec4<T> const & x, 
-			detail::tvec4<T> const & y, 
-			detail::tvec4<T> & Carry
-		)
-		{
-			return detail::tvec4<T>(
-				uaddCarry(x[0], y[0], Carry[0]),
-				uaddCarry(x[1], y[1], Carry[1]),
-				uaddCarry(x[2], y[2], Carry[2]),
-				uaddCarry(x[3], y[3], Carry[3]));
-		}
-
-		// usubBorrow
-		template <typename genUType>
-		inline genUType usubBorrow
-		(
-			genUType const & x, 
-			genUType const & y, 
-			genUType & Borrow
-		)
-		{
-			Borrow = x >= y ? 0 : 1;
-			if(x > y)
-				return genUType(detail::highp_int_t(x) - detail::highp_int_t(y));
-			else
-				return genUType(detail::highp_int_t(1) << detail::highp_int_t(32) + detail::highp_int_t(x) - detail::highp_int_t(y));
-		}
-
-		template <typename T>
-		inline detail::tvec2<T> usubBorrow
-		(
-			detail::tvec2<T> const & x, 
-			detail::tvec2<T> const & y, 
-			detail::tvec2<T> & Borrow
-		)
-		{
-			return detail::tvec2<T>(
-				usubBorrow(x[0], y[0], Borrow[0]),
-				usubBorrow(x[1], y[1], Borrow[1]));
-		}
-
-		template <typename T>
-		inline detail::tvec3<T> usubBorrow
-		(
-			detail::tvec3<T> const & x, 
-			detail::tvec3<T> const & y, 
-			detail::tvec3<T> & Borrow
-		)
-		{
-			return detail::tvec3<T>(
-				usubBorrow(x[0], y[0], Borrow[0]),
-				usubBorrow(x[1], y[1], Borrow[1]),
-				usubBorrow(x[2], y[2], Borrow[2]));
-		}
-
-		template <typename T>
-		inline detail::tvec4<T> usubBorrow
-		(
-			detail::tvec4<T> const & x, 
-			detail::tvec4<T> const & y, 
-			detail::tvec4<T> & Borrow
-		)
-		{
-			return detail::tvec4<T>(
-				usubBorrow(x[0], y[0], Borrow[0]),
-				usubBorrow(x[1], y[1], Borrow[1]),
-				usubBorrow(x[2], y[2], Borrow[2]),
-				usubBorrow(x[3], y[3], Borrow[3]));
-		}
-
-		// umulExtended
-		template <typename genUType>
-		inline void umulExtended
-		(
-			genUType const & x, 
-			genUType const & y, 
-			genUType & msb, 
-			genUType & lsb
-		)
-		{
-			detail::highp_uint_t ValueX64 = x;
-			detail::highp_uint_t ValueY64 = y;
-			detail::highp_uint_t Value64 = ValueX64 * ValueY64;
-			msb = *(genUType*)&(Value64 & ((detail::highp_uint_t(1) << detail::highp_uint_t(32)) - detail::highp_uint_t(1)));
-			lsb = *(genUType*)&(Value64 >> detail::highp_uint_t(32));
-		}
-
-		template <typename T>
-		inline detail::tvec2<T> umulExtended
-		(
-			detail::tvec2<T> const & x, 
-			detail::tvec2<T> const & y, 
-			detail::tvec2<T> & msb, 
-			detail::tvec2<T> & lsb
-		)
-		{
-			return detail::tvec2<T>(
-				umulExtended(x[0], y[0], msb, lsb),
-				umulExtended(x[1], y[1], msb, lsb));
-		}
-
-		template <typename T>
-		inline detail::tvec3<T> umulExtended
-		(
-			detail::tvec3<T> const & x, 
-			detail::tvec3<T> const & y, 
-			detail::tvec3<T> & msb, 
-			detail::tvec3<T> & lsb
-		)
-		{
-			return detail::tvec3<T>(
-				umulExtended(x[0], y[0], msb, lsb),
-				umulExtended(x[1], y[1], msb, lsb),
-				umulExtended(x[2], y[2], msb, lsb));
-		}
-
-		template <typename T>
-		inline detail::tvec4<T> umulExtended
-		(
-			detail::tvec4<T> const & x, 
-			detail::tvec4<T> const & y, 
-			detail::tvec4<T> & msb, 
-			detail::tvec4<T> & lsb
-		)
-		{
-			return detail::tvec4<T>(
-				umulExtended(x[0], y[0], msb, lsb),
-				umulExtended(x[1], y[1], msb, lsb),
-				umulExtended(x[2], y[2], msb, lsb),
-				umulExtended(x[3], y[3], msb, lsb));
-		}
-
-		// imulExtended
-		template <typename genIType>
-		void imulExtended
-		(
-			genIType const & x, 
-			genIType const & y, 
-			genIType & msb, 
-			genIType & lsb
-		)
-		{
-			detail::highp_int_t ValueX64 = x;
-			detail::highp_int_t ValueY64 = y;
-			detail::highp_int_t Value64 = ValueX64 * ValueY64;
-			msb = *(genIType*)&(Value64 & ((detail::highp_uint_t(1) << detail::highp_uint_t(32)) - detail::highp_uint_t(1)));
-			lsb = *(genIType*)&(Value64 >> detail::highp_uint_t(32));
-		}
-
-		template <typename T>
-		inline detail::tvec2<T> imulExtended
-		(
-			detail::tvec2<T> const & x, 
-			detail::tvec2<T> const & y, 
-			detail::tvec2<T> & msb, 
-			detail::tvec2<T> & lsb
-		)
-		{
-			return detail::tvec2<T>(
-				imulExtended(x[0], y[0], msb, lsb),
-				imulExtended(x[1], y[1], msb, lsb));
-		}
-
-		template <typename T>
-		inline detail::tvec3<T> imulExtended
-		(
-			detail::tvec3<T> const & x, 
-			detail::tvec3<T> const & y, 
-			detail::tvec3<T> & msb, 
-			detail::tvec3<T> & lsb
-		)
-		{
-			return detail::tvec3<T>(
-				imulExtended(x[0], y[0], msb, lsb),
-				imulExtended(x[1], y[1], msb, lsb),
-				imulExtended(x[2], y[2], msb, lsb));
-		}
-
-		template <typename T>
-		inline detail::tvec4<T> imulExtended
-		(
-			detail::tvec4<T> const & x, 
-			detail::tvec4<T> const & y, 
-			detail::tvec4<T> & msb, 
-			detail::tvec4<T> & lsb
-		)
-		{
-			return detail::tvec4<T>(
-				imulExtended(x[0], y[0], msb, lsb),
-				imulExtended(x[1], y[1], msb, lsb),
-				imulExtended(x[2], y[2], msb, lsb),
-				imulExtended(x[3], y[3], msb, lsb));
-		}
-
-		// bitfieldExtract
-		template <typename genIUType>
-		genIUType bitfieldExtract
-		(
-			genIUType const & Value, 
-			int const & Offset, 
-			int const & Bits
-		)
-		{
-			GLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer);
-			assert(Offset + Bits <= sizeof(genIUType));
-
-			genIUType Result = 0;
-			if(std::numeric_limits<genIUType>::is_signed)
-				Result |= (1 << (sizeof(genIUType) * 8 - 1)) & (1 << (Offset + Bits - 1));
-
-			genIUType Mask = 0;
-			for(std::size_t Bit = Offset; Bit < Bits; ++Bit)
-				Mask |= (1 << Bit);
-
-			return Result | ((Mask & Value) >> Offset);
-		}
-
-		template <typename T>
-		inline detail::tvec2<T> bitfieldExtract
-		(
-			detail::tvec2<T> const & Value, 
-			int const & Offset, 
-			int const & Bits
-		)
-		{
-			return detail::tvec2<T>(
-				bitfieldExtract(Value[0]),
-				bitfieldExtract(Value[1]));
-		}
-
-		template <typename T>
-		inline detail::tvec3<T> bitfieldExtract
-		(
-			detail::tvec3<T> const & Value, 
-			int const & Offset, 
-			int const & Bits
-		)
-		{
-			return detail::tvec3<T>(
-				bitfieldExtract(Value[0]),
-				bitfieldExtract(Value[1]),
-				bitfieldExtract(Value[2]));
-		}
-
-		template <typename T>
-		inline detail::tvec4<T> bitfieldExtract
-		(
-			detail::tvec4<T> const & Value, 
-			int const & Offset, 
-			int const & Bits
-		)
-		{
-			return detail::tvec4<T>(
-				bitfieldExtract(Value[0]),
-				bitfieldExtract(Value[1]),
-				bitfieldExtract(Value[2]),
-				bitfieldExtract(Value[3]));
-		}
-
-		// bitfieldInsert
-		template <typename genIUType>
-		inline genIUType bitfieldInsert
-		(
-			genIUType const & Base, 
-			genIUType const & Insert, 
-			int const & Offset, 
-			int const & Bits
-		)
-		{
-			GLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer);
-			assert(Offset + Bits <= sizeof(genIUType));
-
-			if(Bits == 0)
-				return Base;
-
-			genIUType Mask = 0;
-			for(std::size_t Bit = Offset; Bit < Offset + Bits; ++Bit)
-				Mask |= (1 << Bit);
-
-			return (Base & ~Mask) | (Insert & Mask);
-		}
-
-		template <typename T>
-		inline detail::tvec2<T> bitfieldInsert
-		(
-			detail::tvec2<T> const & Base, 
-			detail::tvec2<T> const & Insert, 
-			int const & Offset, 
-			int const & Bits
-		)
-		{
-			return detail::tvec2<T>(
-				bitfieldInsert(Base[0], Insert[0], Offset, Bits),
-				bitfieldInsert(Base[1], Insert[1], Offset, Bits));
-		}
-
-		template <typename T>
-		inline detail::tvec3<T> bitfieldInsert
-		(
-			detail::tvec3<T> const & Base, 
-			detail::tvec3<T> const & Insert, 
-			int const & Offset, 
-			int const & Bits
-		)
-		{
-			return detail::tvec3<T>(
-				bitfieldInsert(Base[0], Insert[0], Offset, Bits),
-				bitfieldInsert(Base[1], Insert[1], Offset, Bits),
-				bitfieldInsert(Base[2], Insert[2], Offset, Bits));
-		}
-
-		template <typename T>
-		inline detail::tvec4<T> bitfieldInsert
-		(
-			detail::tvec4<T> const & Base, 
-			detail::tvec4<T> const & Insert, 
-			int const & Offset, 
-			int const & Bits
-		)
-		{
-			return detail::tvec4<T>(
-				bitfieldInsert(Base[0], Insert[0], Offset, Bits),
-				bitfieldInsert(Base[1], Insert[1], Offset, Bits),
-				bitfieldInsert(Base[2], Insert[2], Offset, Bits),
-				bitfieldInsert(Base[3], Insert[3], Offset, Bits));
-		}
-
-		// bitfieldReverse
-		template <typename genIUType>
-		inline genIUType bitfieldReverse(genIUType const & Value)
-		{
-			GLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer);
-
-			genIUType Result = 0;
-			for(std::size_t i = 0; i < sizeof(genIUType) * std::size_t(8); ++i)
-				if(Value & (1 << i))
-					Result |= (genIUType(1) << (sizeof(genIUType) * std::size_t(8)) - genIUType(1) - i);
-			return Result;
-		}	
-
-		template <typename T>
-		inline detail::tvec2<T> bitfieldReverse
-		(
-			detail::tvec2<T> const & value
-		)
-		{
-			return detail::tvec2<T>(
-				bitfieldReverse(value[0]),
-				bitfieldReverse(value[1]));
-		}
-
-		template <typename T>
-		inline detail::tvec3<T> bitfieldReverse
-		(
-			detail::tvec3<T> const & value
-		)
-		{
-			return detail::tvec3<T>(
-				bitfieldReverse(value[0]),
-				bitfieldReverse(value[1]),
-				bitfieldReverse(value[2]));
-		}
-
-		template <typename T>
-		inline detail::tvec4<T> bitfieldReverse
-		(
-			detail::tvec4<T> const & value
-		)
-		{
-			return detail::tvec4<T>(
-				bitfieldReverse(value[0]),
-				bitfieldReverse(value[1]),
-				bitfieldReverse(value[2]),
-				bitfieldReverse(value[3]));
-		}
-
-		// bitCount
-		template <typename genIUType>
-		int bitCount(genIUType const & Value)
-		{
-			GLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer);
-
-			int Count = 0;
-			for(std::size_t i = 0; i < sizeof(genIUType) * std::size_t(8); ++i)
-			{
-				if(Value & (1 << i))
-					++Count;
-			}
-			return Count;
-		}
-
-		template <typename T>
-		inline detail::tvec2<int> bitCount
-		(
-			detail::tvec2<T> const & value
-		)
-		{
-			return detail::tvec2<int>(
-				bitCount(value[0]),
-				bitCount(value[1]));
-		}
-
-		template <typename T>
-		inline detail::tvec3<int> bitCount
-		(
-			detail::tvec3<T> const & value
-		)
-		{
-			return detail::tvec3<int>(
-				bitCount(value[0]),
-				bitCount(value[1]),
-				bitCount(value[2]));
-		}
-
-		template <typename T>
-		inline detail::tvec4<int> bitCount
-		(
-			detail::tvec4<T> const & value
-		)
-		{
-			return detail::tvec4<int>(
-				bitCount(value[0]),
-				bitCount(value[1]),
-				bitCount(value[2]),
-				bitCount(value[3]));
-		}
-
-		// findLSB
-		template <typename genIUType>
-		inline int findLSB
-		(
-			genIUType const & Value
-		)
-		{
-			GLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer);
-			if(Value == 0)
-				return -1;
-
-			genIUType Bit;
-			for(Bit = genIUType(0); !(Value & (1 << Bit)); ++Bit){}
-			return Bit;
-		}
-
-		template <typename T>
-		inline detail::tvec2<int> findLSB
-		(
-			detail::tvec2<T> const & value
-		)
-		{
-			return detail::tvec2<int>(
-				findLSB(value[0]),
-				findLSB(value[1]));
-		}
-
-		template <typename T>
-		inline detail::tvec3<int> findLSB
-		(
-			detail::tvec3<T> const & value
-		)
-		{
-			return detail::tvec3<int>(
-				findLSB(value[0]),
-				findLSB(value[1]),
-				findLSB(value[2]));
-		}
-
-		template <typename T>
-		inline detail::tvec4<int> findLSB
-		(
-			detail::tvec4<T> const & value
-		)
-		{
-			return detail::tvec4<int>(
-				findLSB(value[0]),
-				findLSB(value[1]),
-				findLSB(value[2]),
-				findLSB(value[3]));
-		}
-
-		// findMSB
-		template <typename genIUType>
-		inline int findMSB
-		(
-			genIUType const & Value
-		)
-		{
-			GLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer);
-			if(Value == 0)
-				return -1;
-
-			genIUType bit = genIUType(-1);
-			for(genIUType tmp = Value; tmp; tmp >>= 1, ++bit){}
-			return bit;
-		}
-
-		template <typename T>
-		inline detail::tvec2<int> findMSB
-		(
-			detail::tvec2<T> const & value
-		)
-		{
-			return detail::tvec2<int>(
-				findMSB(value[0]),
-				findMSB(value[1]));
-		}
-
-		template <typename T>
-		inline detail::tvec3<int> findMSB
-		(
-			detail::tvec3<T> const & value
-		)
-		{
-			return detail::tvec3<int>(
-				findMSB(value[0]),
-				findMSB(value[1]),
-				findMSB(value[2]));
-		}
-
-		template <typename T>
-		inline detail::tvec4<int> findMSB
-		(
-			detail::tvec4<T> const & value
-		)
-		{
-			return detail::tvec4<int>(
-				findMSB(value[0]),
-				findMSB(value[1]),
-				findMSB(value[2]),
-				findMSB(value[3]));
-		}
-
-	}//namespace integer
-	}//namespace function
-	}//namespace core
-}//namespace glm

+ 0 - 92
glm/core/func_matrix.hpp

@@ -1,92 +0,0 @@
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// OpenGL Mathematics Copyright (c) 2005 - 2010 G-Truc Creation (www.g-truc.net)
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// Created : 2008-08-03
-// Updated : 2010-02-04
-// Licence : This source is under MIT License
-// File    : glm/core/func_matrix.hpp
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-#ifndef glm_core_func_matrix
-#define glm_core_func_matrix
-
-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.
-	namespace matrix{
-
-	//! Multiply matrix x by matrix y component-wise, i.e., 
-	//! result[i][j] is the scalar product of x[i][j] and y[i][j].
-	//! (From GLSL 1.30.08 specification, section 8.5)
-	template <typename matType> 
-	matType matrixCompMult(
-		matType const & x, 
-		matType const & y);
-
-	//! Treats the first parameter c as a column vector 
-	//! and the second parameter r as a row vector
-	//! and does a linear algebraic matrix multiply c * r.
-	//! (From GLSL 1.30.08 specification, section 8.5)
-	template <typename vecType, typename matType> 
-	matType outerProduct(
-		vecType const & c, 
-		vecType const & r);
-
-	//! Returns the transposed matrix of x
-	//! (From GLSL 1.30.08 specification, section 8.5)
-	template <typename matType> 
-	typename matType::transpose_type transpose(
-		matType const & x);
-	
-	//! Return the determinant of a mat2 matrix. 
-	//! (From GLSL 1.50.09 specification, section 8.5)..
-	template <typename T> 
-	typename detail::tmat2x2<T>::value_type determinant(
-		detail::tmat2x2<T> const & m);
-
-	//! Return the determinant of a mat3 matrix. 
-	//! (From GLSL 1.50.09 specification, section 8.5).
-	template <typename T> 
-	typename detail::tmat3x3<T>::value_type determinant(
-		detail::tmat3x3<T> const & m);
-
-	//! Return the determinant of a mat4 matrix. 
-	//! (From GLSL 1.50.09 specification, section 8.5).
-	template <typename T> 
-	typename detail::tmat4x4<T>::value_type determinant(
-		detail::tmat4x4<T> const & m);
-
-	//! Return the inverse of a mat2 matrix. 
-	//! (From GLSL 1.40.07 specification, section 8.5).
-	template <typename T> 
-	detail::tmat2x2<T> inverse(
-		detail::tmat2x2<T> const & m);
-
-	//! Return the inverse of a mat3 matrix. 
-	//! (From GLSL 1.40.07 specification, section 8.5).
-	template <typename T> 
-	detail::tmat3x3<T> inverse(
-		detail::tmat3x3<T> const & m);
-
-	//! Return the inverse of a mat4 matrix. 
-	//! (From GLSL 1.40.07 specification, section 8.5).
-	template <typename T> 
-	detail::tmat4x4<T> inverse(
-		detail::tmat4x4<T> const & m);
-
-	}//namespace matrix
-	}//namespace function
-	}//namespace core
-
-	using namespace core::function::matrix;
-}//namespace glm
-
-#include "func_matrix.inl"
-
-#endif//glm_core_func_matrix

+ 0 - 559
glm/core/func_matrix.inl

@@ -1,559 +0,0 @@
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// OpenGL Mathematics Copyright (c) 2005 - 2010 G-Truc Creation (www.g-truc.net)
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// Created : 2008-03-08
-// Updated : 2010-02-04
-// Licence : This source is under MIT License
-// File    : glm/core/func_matrix.inl
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-namespace glm
-{
-	namespace core{
-	namespace function{
-	namespace matrix{
-
-    // matrixCompMult
-    template <typename matType>
-    inline matType matrixCompMult
-	(
-		matType const & x, 
-		matType const & y
-	)
-    {
-		GLM_STATIC_ASSERT(detail::type<typename matType::value_type>::is_float);
-
-        matType result(matType::null);
-		for(typename matType::size_type i = 0; i < matType::col_size(); ++i)
-			result[i] = x[i] * y[i];
-        return result;
-    }
-
-	// outerProduct
-    template <typename T>
-    inline detail::tmat2x2<T> outerProduct
-	(
-		detail::tvec2<T> const & c, 
-		detail::tvec2<T> const & r
-	)
-    {
-		GLM_STATIC_ASSERT(detail::type<T>::is_float);
-
-		detail::tmat2x2<T> m(detail::tmat2x2<T>::null);
-		m[0][0] = c[0] * r[0];
-		m[0][1] = c[1] * r[0];
-		m[1][0] = c[0] * r[1];
-		m[1][1] = c[1] * r[1];
-        return m;
-    }
-
-    template <typename T>
-    inline detail::tmat3x3<T> outerProduct
-	(
-		detail::tvec3<T> const & c, 
-		detail::tvec3<T> const & r
-	)
-    {
-		GLM_STATIC_ASSERT(detail::type<T>::is_float);
-
-		detail::tmat3x3<T> m(detail::tmat3x3<T>::null);
-		for(typename detail::tmat3x3<T>::size_type i = 0; i < detail::tmat3x3<T>::col_size(); ++i)
-			m[i] = c * r[i];
-        return m;
-    }
-
-    template <typename T>
-    inline detail::tmat4x4<T> outerProduct
-	(
-		detail::tvec4<T> const & c, 
-		detail::tvec4<T> const & r
-	)
-    {
-		GLM_STATIC_ASSERT(detail::type<T>::is_float);
-
-		detail::tmat4x4<T> m(detail::tmat4x4<T>::null);
-		for(typename detail::tmat4x4<T>::size_type i = 0; i < detail::tmat4x4<T>::col_size(); ++i)
-			m[i] = c * r[i];
-        return m;
-    }
-
-    template <typename T>
-	inline detail::tmat2x3<T> outerProduct
-	(
-		detail::tvec3<T> const & c, 
-		detail::tvec2<T> const & r
-	)
-	{
-		GLM_STATIC_ASSERT(detail::type<T>::is_float);
-
-		detail::tmat2x3<T> m(detail::tmat2x3<T>::null);
-		m[0][0] = c.x * r.x;
-		m[0][1] = c.y * r.x;
-		m[0][2] = c.z * r.x;
-		m[1][0] = c.x * r.y;
-		m[1][1] = c.y * r.y;
-		m[1][2] = c.z * r.y;
-		return m;
-	}
-
-    template <typename T>
-	inline detail::tmat3x2<T> outerProduct
-	(
-		detail::tvec2<T> const & c, 
-		detail::tvec3<T> const & r
-	)
-	{
-		GLM_STATIC_ASSERT(detail::type<T>::is_float);
-
-		detail::tmat3x2<T> m(detail::tmat3x2<T>::null);
-		m[0][0] = c.x * r.x;
-		m[0][1] = c.y * r.x;
-		m[1][0] = c.x * r.y;
-		m[1][1] = c.y * r.y;
-		m[2][0] = c.x * r.z;
-		m[2][1] = c.y * r.z;
-		return m;
-	}
-
-	template <typename T>
-	inline detail::tmat2x4<T> outerProduct
-	(
-		detail::tvec2<T> const & c, 
-		detail::tvec4<T> const & r
-	)
-	{
-		GLM_STATIC_ASSERT(detail::type<T>::is_float);
-
-		detail::tmat2x4<T> m(detail::tmat2x4<T>::null);
-		m[0][0] = c.x * r.x;
-		m[0][1] = c.y * r.x;
-		m[0][2] = c.z * r.x;
-		m[0][3] = c.w * r.x;
-		m[1][0] = c.x * r.y;
-		m[1][1] = c.y * r.y;
-		m[1][2] = c.z * r.y;
-		m[1][3] = c.w * r.y;
-		return m;
-	}
-
-	template <typename T>
-	inline detail::tmat4x2<T> outerProduct
-	(
-		detail::tvec4<T> const & c, 
-		detail::tvec2<T> const & r
-	)
-	{
-		GLM_STATIC_ASSERT(detail::type<T>::is_float);
-
-		detail::tmat4x2<T> m(detail::tmat4x2<T>::null);
-		m[0][0] = c.x * r.x;
-		m[0][1] = c.y * r.x;
-		m[1][0] = c.x * r.y;
-		m[1][1] = c.y * r.y;
-		m[2][0] = c.x * r.z;
-		m[2][1] = c.y * r.z;
-		m[3][0] = c.x * r.w;
-		m[3][1] = c.y * r.w;
-		return m;
-	}
-
-	template <typename T>
-	inline detail::tmat3x4<T> outerProduct
-	(
-		detail::tvec4<T> const & c, 
-		detail::tvec3<T> const & r
-	)
-	{
-		GLM_STATIC_ASSERT(detail::type<T>::is_float);
-
-		detail::tmat3x4<T> m(detail::tmat3x4<T>::null);
-		m[0][0] = c.x * r.x;
-		m[0][1] = c.y * r.x;
-		m[0][2] = c.z * r.x;
-		m[0][3] = c.w * r.x;
-		m[1][0] = c.x * r.y;
-		m[1][1] = c.y * r.y;
-		m[1][2] = c.z * r.y;
-		m[1][3] = c.w * r.y;
-		m[2][0] = c.x * r.z;
-		m[2][1] = c.y * r.z;
-		m[2][2] = c.z * r.z;
-		m[2][3] = c.w * r.z;
-		return m;
-	}
-
-	template <typename T>
-	inline detail::tmat4x3<T> outerProduct
-	(
-		detail::tvec3<T> const & c, 
-		detail::tvec4<T> const & r
-	)
-	{
-		GLM_STATIC_ASSERT(detail::type<T>::is_float);
-
-		detail::tmat4x3<T> m(detail::tmat4x3<T>::null);
-		m[0][0] = c.x * r.x;
-		m[0][1] = c.y * r.x;
-		m[0][2] = c.z * r.x;
-		m[1][0] = c.x * r.y;
-		m[1][1] = c.y * r.y;
-		m[1][2] = c.z * r.y;
-		m[2][0] = c.x * r.z;
-		m[2][1] = c.y * r.z;
-		m[2][2] = c.z * r.z;
-		m[3][0] = c.x * r.w;
-		m[3][1] = c.y * r.w;
-		m[3][2] = c.z * r.w;
-		return m;
-	}
-
-    template <typename T>
-    inline detail::tmat2x2<T> transpose
-	(
-		detail::tmat2x2<T> const & m
-	)
-    {
-		GLM_STATIC_ASSERT(detail::type<T>::is_float);
-
-        detail::tmat2x2<T> result(detail::tmat2x2<T>::null);
-        result[0][0] = m[0][0];
-        result[0][1] = m[1][0];
-        result[1][0] = m[0][1];
-        result[1][1] = m[1][1];
-        return result;
-    }
-
-    template <typename T>
-    inline detail::tmat3x3<T> transpose
-	(
-		detail::tmat3x3<T> const & m
-	)
-    {
-		GLM_STATIC_ASSERT(detail::type<T>::is_float);
-
-        detail::tmat3x3<T> result(detail::tmat3x3<T>::null);
-        result[0][0] = m[0][0];
-        result[0][1] = m[1][0];
-        result[0][2] = m[2][0];
-
-        result[1][0] = m[0][1];
-        result[1][1] = m[1][1];
-        result[1][2] = m[2][1];
-
-        result[2][0] = m[0][2];
-        result[2][1] = m[1][2];
-        result[2][2] = m[2][2];
-        return result;
-    }
-
-    template <typename T>
-    inline detail::tmat4x4<T> transpose
-	(
-		detail::tmat4x4<T> const & m
-	)
-    {
-		GLM_STATIC_ASSERT(detail::type<T>::is_float);
-
-        detail::tmat4x4<T> result(detail::tmat4x4<T>::null);
-        result[0][0] = m[0][0];
-        result[0][1] = m[1][0];
-        result[0][2] = m[2][0];
-        result[0][3] = m[3][0];
-
-        result[1][0] = m[0][1];
-        result[1][1] = m[1][1];
-        result[1][2] = m[2][1];
-        result[1][3] = m[3][1];
-
-        result[2][0] = m[0][2];
-        result[2][1] = m[1][2];
-        result[2][2] = m[2][2];
-        result[2][3] = m[3][2];
-
-        result[3][0] = m[0][3];
-        result[3][1] = m[1][3];
-        result[3][2] = m[2][3];
-        result[3][3] = m[3][3];
-        return result;
-    }
-
-    template <typename T>
-    inline detail::tmat2x3<T> transpose
-	(
-		detail::tmat3x2<T> const & m
-	)
-    {
-		GLM_STATIC_ASSERT(detail::type<T>::is_float);
-
-        detail::tmat2x3<T> result(detail::tmat2x3<T>::null);
-        result[0][0] = m[0][0];
-        result[0][1] = m[1][0];
-		result[0][2] = m[2][0];
-        result[1][0] = m[0][1];
-        result[1][1] = m[1][1];
-		result[1][2] = m[2][1];
-        return result;
-    }
-
-    template <typename T>
-    inline detail::tmat3x2<T> transpose
-	(
-		detail::tmat2x3<T> const & m
-	)
-    {
-		GLM_STATIC_ASSERT(detail::type<T>::is_float);
-
-        detail::tmat3x2<T> result(detail::tmat3x2<T>::null);
-        result[0][0] = m[0][0];
-        result[0][1] = m[1][0];
-        result[1][0] = m[0][1];
-        result[1][1] = m[1][1];
-        result[2][0] = m[0][2];
-        result[2][1] = m[1][2];
-        return result;
-    }
-
-    template <typename T>
-	inline detail::tmat2x4<T> transpose
-	(
-		detail::tmat4x2<T> const & m
-	)
-	{
-		GLM_STATIC_ASSERT(detail::type<T>::is_float);
-
-		detail::tmat2x4<T> result(detail::tmat2x4<T>::null);
-        result[0][0] = m[0][0];
-        result[0][1] = m[1][0];
-		result[0][2] = m[2][0];
-		result[0][3] = m[3][0];
-        result[1][0] = m[0][1];
-        result[1][1] = m[1][1];
-		result[1][2] = m[2][1];
-		result[1][3] = m[3][1];
-		return result;
-	}
-
-    template <typename T>
-	inline detail::tmat4x2<T> transpose
-	(
-		detail::tmat2x4<T> const & m
-	)
-	{
-		GLM_STATIC_ASSERT(detail::type<T>::is_float);
-
-        detail::tmat4x2<T> result(detail::tmat4x2<T>::null);
-        result[0][0] = m[0][0];
-        result[0][1] = m[1][0];
-        result[1][0] = m[0][1];
-        result[1][1] = m[1][1];
-        result[2][0] = m[0][2];
-        result[2][1] = m[1][2];
-        result[3][0] = m[0][3];
-        result[3][1] = m[1][3];
-        return result;
-	}
-
-    template <typename T>
-	inline detail::tmat3x4<T> transpose
-	(
-		detail::tmat4x3<T> const & m
-	)
-	{
-		GLM_STATIC_ASSERT(detail::type<T>::is_float);
-
-		detail::tmat3x4<T> result(detail::tmat3x4<T>::null);
-        result[0][0] = m[0][0];
-        result[0][1] = m[1][0];
-		result[0][2] = m[2][0];
-		result[0][3] = m[3][0];
-        result[1][0] = m[0][1];
-        result[1][1] = m[1][1];
-		result[1][2] = m[2][1];
-		result[1][3] = m[3][1];
-        result[2][0] = m[0][2];
-        result[2][1] = m[1][2];
-		result[2][2] = m[2][2];
-		result[2][3] = m[3][2];
-		return result;
-	}
-
-    template <typename T>
-	inline detail::tmat4x3<T> transpose
-	(
-		detail::tmat3x4<T> const & m
-	)
-	{
-		GLM_STATIC_ASSERT(detail::type<T>::is_float);
-
-        detail::tmat4x3<T> result(detail::tmat4x3<T>::null);
-        result[0][0] = m[0][0];
-        result[0][1] = m[1][0];
-		result[0][2] = m[2][0];
-        result[1][0] = m[0][1];
-        result[1][1] = m[1][1];
-		result[1][2] = m[2][1];
-        result[2][0] = m[0][2];
-        result[2][1] = m[1][2];
-		result[2][2] = m[2][2];
-        result[3][0] = m[0][3];
-        result[3][1] = m[1][3];
-		result[3][2] = m[2][3];
-        return result;
-	}
-
-	template <typename T>
-	inline typename detail::tmat2x2<T>::value_type determinant
-	(
-		detail::tmat2x2<T> const & m
-	)
-	{
-		return m[0][0] * m[1][1] - m[1][0] * m[0][1];
-	}
-
-	template <typename T>
-	inline typename detail::tmat3x3<T>::value_type determinant
-	(
-		detail::tmat3x3<T> const & m
-	)
-	{
-		return 
-			+ m[0][0] * (m[1][1] * m[2][2] - m[2][1] * m[1][2])
-			- m[1][0] * (m[0][1] * m[2][2] - m[2][1] * m[0][2])
-			+ m[2][0] * (m[0][1] * m[1][2] - m[1][1] * m[0][2]);
-	}
-
-	template <typename T>
-	inline typename detail::tmat4x4<T>::value_type determinant
-	(
-		detail::tmat4x4<T> const & m
-	)
-	{
-		T SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3];
-		T SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3];
-		T SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2];
-		T SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3];
-		T SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2];
-		T SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1];
-
-		detail::tvec4<T> DetCof(
-			+ (m[1][1] * SubFactor00 - m[1][2] * SubFactor01 + m[1][3] * SubFactor02),
-			- (m[1][0] * SubFactor00 - m[1][2] * SubFactor03 + m[1][3] * SubFactor04),
-			+ (m[1][0] * SubFactor01 - m[1][1] * SubFactor03 + m[1][3] * SubFactor05),
-			- (m[1][0] * SubFactor02 - m[1][1] * SubFactor04 + m[1][2] * SubFactor05));
-
-		return m[0][0] * DetCof[0]
-			 + m[0][1] * DetCof[1]
-			 + m[0][2] * DetCof[2]
-			 + m[0][3] * DetCof[3];
-	}
-
-	template <typename T> 
-	inline detail::tmat2x2<T> inverse
-	(
-		detail::tmat2x2<T> const & m
-	)
-	{
-		//valType Determinant = m[0][0] * m[1][1] - m[1][0] * m[0][1];
-		T Determinant = determinant(m);
-
-		detail::tmat2x2<T> Inverse(
-			+ m[1][1] / Determinant,
-			- m[1][0] / Determinant,
-			- m[0][1] / Determinant, 
-			+ m[0][0] / Determinant);
-
-		return Inverse;
-	}
-
-	template <typename T> 
-	inline detail::tmat3x3<T> inverse
-	(
-		detail::tmat3x3<T> const & m
-	)
-	{
-		//valType Determinant = m[0][0] * (m[1][1] * m[2][2] - m[2][1] * m[1][2])
-		//					- m[1][0] * (m[0][1] * m[2][2] - m[2][1] * m[0][2])
-		//					+ m[2][0] * (m[0][1] * m[1][2] - m[1][1] * m[0][2]);
-
-		T Determinant = determinant(m);
-
-		detail::tmat3x3<T> Inverse(detail::tmat3x3<T>::null);
-		Inverse[0][0] = + (m[1][1] * m[2][2] - m[2][1] * m[1][2]);
-		Inverse[1][0] = - (m[1][0] * m[2][2] - m[2][0] * m[1][2]);
-		Inverse[2][0] = + (m[1][0] * m[2][1] - m[2][0] * m[1][1]);
-		Inverse[0][1] = - (m[0][1] * m[2][2] - m[2][1] * m[0][2]);
-		Inverse[1][1] = + (m[0][0] * m[2][2] - m[2][0] * m[0][2]);
-		Inverse[2][1] = - (m[0][0] * m[2][1] - m[2][0] * m[0][1]);
-		Inverse[0][2] = + (m[0][1] * m[1][2] - m[1][1] * m[0][2]);
-		Inverse[1][2] = - (m[0][0] * m[1][2] - m[1][0] * m[0][2]);
-		Inverse[2][2] = + (m[0][0] * m[1][1] - m[1][0] * m[0][1]);
-		Inverse /= Determinant;
-
-		return Inverse;
-	}
-
-	template <typename T> 
-	inline detail::tmat4x4<T> inverse
-	(
-		detail::tmat4x4<T> const & m
-	)
-	{
-		T Coef00 = m[2][2] * m[3][3] - m[3][2] * m[2][3];
-		T Coef02 = m[1][2] * m[3][3] - m[3][2] * m[1][3];
-		T Coef03 = m[1][2] * m[2][3] - m[2][2] * m[1][3];
-
-		T Coef04 = m[2][1] * m[3][3] - m[3][1] * m[2][3];
-		T Coef06 = m[1][1] * m[3][3] - m[3][1] * m[1][3];
-		T Coef07 = m[1][1] * m[2][3] - m[2][1] * m[1][3];
-
-		T Coef08 = m[2][1] * m[3][2] - m[3][1] * m[2][2];
-		T Coef10 = m[1][1] * m[3][2] - m[3][1] * m[1][2];
-		T Coef11 = m[1][1] * m[2][2] - m[2][1] * m[1][2];
-
-		T Coef12 = m[2][0] * m[3][3] - m[3][0] * m[2][3];
-		T Coef14 = m[1][0] * m[3][3] - m[3][0] * m[1][3];
-		T Coef15 = m[1][0] * m[2][3] - m[2][0] * m[1][3];
-
-		T Coef16 = m[2][0] * m[3][2] - m[3][0] * m[2][2];
-		T Coef18 = m[1][0] * m[3][2] - m[3][0] * m[1][2];
-		T Coef19 = m[1][0] * m[2][2] - m[2][0] * m[1][2];
-
-		T Coef20 = m[2][0] * m[3][1] - m[3][0] * m[2][1];
-		T Coef22 = m[1][0] * m[3][1] - m[3][0] * m[1][1];
-		T Coef23 = m[1][0] * m[2][1] - m[2][0] * m[1][1];
-
-		detail::tvec4<T> const SignA(+1, -1, +1, -1);
-		detail::tvec4<T> const SignB(-1, +1, -1, +1);
-
-		detail::tvec4<T> Fac0(Coef00, Coef00, Coef02, Coef03);
-		detail::tvec4<T> Fac1(Coef04, Coef04, Coef06, Coef07);
-		detail::tvec4<T> Fac2(Coef08, Coef08, Coef10, Coef11);
-		detail::tvec4<T> Fac3(Coef12, Coef12, Coef14, Coef15);
-		detail::tvec4<T> Fac4(Coef16, Coef16, Coef18, Coef19);
-		detail::tvec4<T> Fac5(Coef20, Coef20, Coef22, Coef23);
-
-		detail::tvec4<T> Vec0(m[1][0], m[0][0], m[0][0], m[0][0]);
-		detail::tvec4<T> Vec1(m[1][1], m[0][1], m[0][1], m[0][1]);
-		detail::tvec4<T> Vec2(m[1][2], m[0][2], m[0][2], m[0][2]);
-		detail::tvec4<T> Vec3(m[1][3], m[0][3], m[0][3], m[0][3]);
-
-		detail::tvec4<T> Inv0 = SignA * (Vec1 * Fac0 - Vec2 * Fac1 + Vec3 * Fac2);
-		detail::tvec4<T> Inv1 = SignB * (Vec0 * Fac0 - Vec2 * Fac3 + Vec3 * Fac4);
-		detail::tvec4<T> Inv2 = SignA * (Vec0 * Fac1 - Vec1 * Fac3 + Vec3 * Fac5);
-		detail::tvec4<T> Inv3 = SignB * (Vec0 * Fac2 - Vec1 * Fac4 + Vec2 * Fac5);
-
-		detail::tmat4x4<T> Inverse(Inv0, Inv1, Inv2, Inv3);
-
-		detail::tvec4<T> Row0(Inverse[0][0], Inverse[1][0], Inverse[2][0], Inverse[3][0]);
-
-		T Determinant = glm::dot(m[0], Row0);
-
-		Inverse /= Determinant;
-	    
-		return Inverse;
-	}
-
-	}//namespace matrix
-	}//namespace function
-	}//namespace core
-}//namespace glm

+ 0 - 53
glm/core/func_noise.hpp

@@ -1,53 +0,0 @@
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// OpenGL Mathematics Copyright (c) 2005 - 2010 G-Truc Creation (www.g-truc.net)
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// Created : 2008-08-01
-// Updated : 2008-09-10
-// Licence : This source is under MIT License
-// File    : glm/core/func_noise.hpp
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-#ifndef glm_core_func_noise
-#define glm_core_func_noise
-
-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.
-	namespace noise{
-
-	// Returns a 1D noise value based on the input value x.
-	// From GLSL 1.30.08 specification, section 8.9.
-	template <typename genType>
-	typename genType::value_type noise1(genType const & x);
-
-	// Returns a 2D noise value based on the input value x.
-	// From GLSL 1.30.08 specification, section 8.9.
-	template <typename genType>
-	detail::tvec2<typename genType::value_type> noise2(genType const & x);
-
-	// Returns a 3D noise value based on the input value x.
-	// From GLSL 1.30.08 specification, section 8.9.
-	template <typename genType>
-	detail::tvec3<typename genType::value_type> noise3(genType const & x);
-
-	// Returns a 4D noise value based on the input value x.
-	// From GLSL 1.30.08 specification, section 8.9.
-	template <typename genType>
-	detail::tvec4<typename genType::value_type> noise4(genType const & x);
-
-	}//namespace noise
-	}//namespace function
-	}//namespace core
-
-	using namespace core::function::noise;
-}//namespace glm
-
-#include "func_noise.inl"
-
-#endif//glm_core_func_noise

+ 0 - 305
glm/core/func_noise.inl

@@ -1,305 +0,0 @@
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// OpenGL Mathematics Copyright (c) 2005 - 2010 G-Truc Creation (www.g-truc.net)
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// Created : 2008-08-01
-// Updated : 2008-09-23
-// Licence : This source is under MIT License
-// File    : glm/core/func_noise.inl
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-namespace glm
-{
-	namespace core{
-	namespace function{
-	namespace noise{
-
-	// noise1
-	template <typename genType>
-	inline genType noise1
-	(
-		genType const & x
-	)
-	{
-		GLM_STATIC_ASSERT(detail::type<genType>::is_float);
-
-		int iNbr = int(x + genType(3) / genType(2)) * 1103515245 + 12345;
-		return genType(int(iNbr / genType(65536)) % 32768) / genType(32767);
-	}
-
-	template <typename T>
-	inline typename detail::tvec2<T>::value_type noise1
-	(
-		detail::tvec2<T> const & x
-	)
-	{
-		T tmp(0);
-		for(typename detail::tvec2<T>::size_type i = 0; i < detail::tvec2<T>::value_size(); ++i)
-			tmp += x[i];
-		return noise1(tmp);
-	}
-
-	template <typename T>
-	inline typename detail::tvec3<T>::value_type noise1
-	(
-		detail::tvec3<T> const & x
-	)
-	{
-		T tmp(0);
-		for(typename detail::tvec3<T>::size_type i = 0; i < detail::tvec3<T>::value_size(); ++i)
-			tmp += x[i];
-		return noise1(tmp);
-	}
-
-	template <typename T>
-	inline typename detail::tvec4<T>::value_type noise1
-	(
-		detail::tvec4<T> const & x
-	)
-	{
-		T tmp(0);
-		for(typename detail::tvec4<T>::size_type i = 0; i < detail::tvec4<T>::value_size(); ++i)
-			tmp += x[i];
-		return noise1(tmp);
-	}
-
-	// noise2
-	template <typename genType>
-	inline detail::tvec2<genType> noise2
-	(
-		genType const & x
-	)
-	{
-		GLM_STATIC_ASSERT(detail::type<genType>::is_float);
-
-		genType f1 = x * genType(1103515245) + genType(12345);
-		genType f2 = f1 * genType(1103515245) + genType(12345);
-		return detail::tvec2<genType>(
-			noise1(f1),
-			noise1(f2));
-	}
-
-	template <typename T>
-	inline detail::tvec2<T> noise2
-	(
-		detail::tvec2<T> const & x
-	)
-	{
-		GLM_STATIC_ASSERT(detail::type<T>::is_float);
-
-		T f0(0);
-		for(typename detail::tvec2<T>::size_type i = 0; i < detail::tvec2<T>::value_size(); ++i)
-			f0 += x[i];
-		
-		T f1 = f0 * T(1103515245) + T(12345);
-		T f2 = f1 * T(1103515245) + T(12345);
-		return detail::tvec2<T>(
-			noise1(f1),
-			noise1(f2));
-	}
-
-	template <typename T>
-	inline detail::tvec2<T> noise2
-	(
-		detail::tvec3<T> const & x
-	)
-	{
-		GLM_STATIC_ASSERT(detail::type<T>::is_float);
-
-		T f0(0);
-		for(typename detail::tvec3<T>::size_type i = 0; i < detail::tvec3<T>::value_size(); ++i)
-			f0 += x[i];
-
-		T f1 = f0 * T(1103515245) + T(12345);
-		T f2 = f1 * T(1103515245) + T(12345);
-		return detail::tvec2<T>(
-			noise1(f1),
-			noise1(f2));
-	}
-
-	template <typename T>
-	inline detail::tvec2<T> noise2
-	(
-		detail::tvec4<T> const & x
-	)
-	{
-		GLM_STATIC_ASSERT(detail::type<T>::is_float);
-
-		T f0(0);
-		for(typename detail::tvec4<T>::size_type i = 0; i < detail::tvec4<T>::value_size(); ++i)
-			f0 += x[i];
-		
-		T f1 = f0 * T(1103515245) + T(12345);
-		T f2 = f1 * T(1103515245) + T(12345);
-		return detail::tvec2<T>(
-			noise1(f1),
-			noise1(f2));
-	}
-
-	// noise3
-	template <typename genType>
-	inline detail::tvec3<genType> noise3
-	(
-		genType const & x
-	)
-	{
-		GLM_STATIC_ASSERT(detail::type<genType>::is_float);
-
-		genType f1 = x * genType(1103515245) + genType(12345);
-		genType f2 = f1 * genType(1103515245) + genType(12345);
-		genType f3 = f2 * genType(1103515245) + genType(12345);
-		return detail::tvec3<genType>(
-			noise1(f1),
-			noise1(f2),
-			noise1(f3));
-	}
-
-	template <typename T>
-	inline detail::tvec3<T> noise3
-	(
-		detail::tvec2<T> const & x
-	)
-	{
-		GLM_STATIC_ASSERT(detail::type<T>::is_float);
-
-		T f0(0);
-		for(typename detail::tvec2<T>::size_type i = 0; i < detail::tvec2<T>::value_size(); ++i)
-			f0 += x[i];
-		T f1 = f0 * T(1103515245) + T(12345);
-		T f2 = f1 * T(1103515245) + T(12345);
-		T f3 = f2 * T(1103515245) + T(12345);
-		return detail::tvec3<T>(
-			noise1(f1),
-			noise1(f2),
-			noise1(f3));
-	}
-
-	template <typename T>
-	inline detail::tvec3<T> noise3
-	(
-		detail::tvec3<T> const & x
-	)
-	{
-		GLM_STATIC_ASSERT(detail::type<T>::is_float);
-
-		T f0(0);
-		for(typename detail::tvec3<T>::size_type i = 0; i < detail::tvec3<T>::value_size(); ++i)
-			f0 += x[i];
-		T f1 = f0 * T(1103515245) + T(12345);
-		T f2 = f1 * T(1103515245) + T(12345);
-		T f3 = f2 * T(1103515245) + T(12345);
-		return detail::tvec3<T>(
-			noise1(f1),
-			noise1(f2),
-			noise1(f3));
-	}
-
-	template <typename T>
-	inline detail::tvec3<T> noise3
-	(
-		detail::tvec4<T> const & x
-	)
-	{
-		GLM_STATIC_ASSERT(detail::type<T>::is_float);
-
-		T f0(0);
-		for(typename detail::tvec4<T>::size_type i = 0; i < detail::tvec4<T>::value_size(); ++i)
-			f0 += x[i];
-		T f1 = f0 * T(1103515245) + T(12345);
-		T f2 = f1 * T(1103515245) + T(12345);
-		T f3 = f2 * T(1103515245) + T(12345);
-		return detail::tvec3<T>(
-			noise1(f1),
-			noise1(f2),
-			noise1(f3));
-	}
-
-	// noise4
-	template <typename genType>
-	inline detail::tvec4<genType> noise4
-	(
-		genType const & x
-	)
-	{
-		GLM_STATIC_ASSERT(detail::type<genType>::is_float);
-
-		genType f1 = x * genType(1103515245) + genType(12345);
-		genType f2 = f1 * genType(1103515245) + genType(12345);
-		genType f3 = f2 * genType(1103515245) + genType(12345);
-		genType f4 = f3 * genType(1103515245) + genType(12345);
-		return detail::tvec4<genType>(
-			noise1(f1),
-			noise1(f2),
-			noise1(f3),
-			noise1(f4));
-	}
-
-	template <typename T>
-	inline detail::tvec4<T> noise4
-	(
-		detail::tvec2<T> const & x
-	)
-	{
-		GLM_STATIC_ASSERT(detail::type<T>::is_float);
-
-		T f0(0);
-		for(typename detail::tvec2<T>::size_type i = 0; i < detail::tvec2<T>::value_size(); ++i)
-			f0 += x[i];
-		T f1 = f0 * T(1103515245) + T(12345);
-		T f2 = f1 * T(1103515245) + T(12345);
-		T f3 = f2 * T(1103515245) + T(12345);
-		T f4 = f3 * T(1103515245) + T(12345);
-		return detail::tvec4<T>(
-			noise1(f1),
-			noise1(f2),
-			noise1(f3),
-			noise1(f4));
-	}
-
-	template <typename T>
-	inline detail::tvec4<T> noise4
-	(
-		detail::tvec3<T> const & x
-	)
-	{
-		GLM_STATIC_ASSERT(detail::type<T>::is_float);
-
-		T f0(0);
-		for(typename detail::tvec3<T>::size_type i = 0; i < detail::tvec3<T>::value_size()(); ++i)
-			f0 += x[i];
-		T f1 = f0 * T(1103515245) + T(12345);
-		T f2 = f1 * T(1103515245) + T(12345);
-		T f3 = f2 * T(1103515245) + T(12345);
-		T f4 = f3 * T(1103515245) + T(12345);
-		return detail::tvec4<T>(
-			noise1(f1),
-			noise1(f2),
-			noise1(f3),
-			noise1(f4));
-	}
-
-	template <typename T>
-	inline detail::tvec4<T> noise4
-	(
-		detail::tvec4<T> const & x
-	)
-	{
-		GLM_STATIC_ASSERT(detail::type<T>::is_float);
-
-		T f0(0);
-		for(typename detail::tvec4<T>::size_type i = 0; i < detail::tvec4<T>::value_size()(); ++i)
-			f0 += x[i];
-		T f1 = f0 * T(1103515245) + T(12345);
-		T f2 = f1 * T(1103515245) + T(12345);
-		T f3 = f2 * T(1103515245) + T(12345);
-		T f4 = f3 * T(1103515245) + T(12345);
-		return detail::tvec4<T>(
-			noise1(f1),
-			noise1(f2),
-			noise1(f3),
-			noise1(f4));
-	}
-
-	}//namespace noise
-	}//namespace function
-	}//namespace core
-}//namespace glm

+ 0 - 45
glm/core/func_packing.hpp

@@ -1,45 +0,0 @@
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// OpenGL Mathematics Copyright (c) 2005 - 2010 G-Truc Creation (www.g-truc.net)
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// Created : 2010-03-17
-// Updated : 2010-03-17
-// Licence : This source is under MIT License
-// File    : glm/core/func_packing.hpp
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-#ifndef glm_core_func_packing
-#define glm_core_func_packing
-
-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
-	namespace packing
-	{
-		uint packUnorm2x16(vec2 const & v);
-		uint packUnorm4x8(vec4 const & v);
-		uint packSnorm4x8(vec4 const & v);
-
-		vec2 unpackUnorm2x16(uint const & p);
-		vec4 unpackUnorm4x8(uint const & p);
-		vec4 unpackSnorm4x8(uint const & p);
-
-		double packDouble2x32(uvec2 const & v);
-		uvec2 unpackDouble2x32(double const & v);
-
-	}//namespace packing
-	}//namespace function
-	}//namespace core
-
-	using namespace core::function::packing;
-}//namespace glm
-
-#include "func_packing.inl"
-
-#endif//glm_core_func_packing
-

+ 0 - 25
glm/core/func_packing.inl

@@ -1,25 +0,0 @@
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// OpenGL Mathematics Copyright (c) 2005 - 2010 G-Truc Creation (www.g-truc.net)
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// Created : 2010-03-17
-// Updated : 2010-03-17
-// Licence : This source is under MIT License
-// File    : glm/core/func_packing.inl
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-namespace glm
-{
-	namespace detail
-	{
-		
-	}//namespace detail
-
-	namespace core{
-	namespace function{
-	namespace packing{
-
-
-	}//namespace packing
-	}//namespace function
-	}//namespace core
-}//namespace glm

+ 0 - 125
glm/core/func_trigonometric.hpp

@@ -1,125 +0,0 @@
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// OpenGL Mathematics Copyright (c) 2005 - 2010 G-Truc Creation (www.g-truc.net)
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// Created : 2008-08-01
-// Updated : 2008-09-10
-// Licence : This source is under MIT License
-// File    : glm/core/func_trigonometric.hpp
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-#ifndef glm_core_func_trigonometric
-#define glm_core_func_trigonometric
-
-namespace glm
-{
-	namespace test{
-		void main_core_func_trigonometric();
-	}//namespace test
-
-	namespace core{
-	namespace function{
-	//! Define Angle and trigonometry functions 
-	//! from Section 8.1 of GLSL 1.30.8 specification. 
-	//! Included in glm namespace.
-	namespace trigonometric{
-
-	//! Converts degrees to radians and returns the result.
-	//! (From GLSL 1.30.08 specification, section 8.1)
-	template <typename genType> 
-	genType radians(genType const & degrees);
-
-	//! Converts radians to degrees and returns the result.
-	//! (From GLSL 1.30.08 specification, section 8.1)
-	template <typename genType> 
-	genType degrees(genType const & radians);
-
-	//! The standard trigonometric sine function. 
-	//! The values returned by this function will range from [-1, 1].
-	//! (From GLSL 1.30.08 specification, section 8.1)
-	template <typename genType> 
-	genType sin(genType const & angle);
-
-	//! The standard trigonometric cosine function. 
-	//! The values returned by this function will range from [-1, 1].
-	//! (From GLSL 1.30.08 specification, section 8.1)
-	template <typename genType> 
-	genType cos(genType const & angle);
-
-	//! The standard trigonometric tangent function.
-	//! (From GLSL 1.30.08 specification, section 8.1)
-	template <typename genType> 
-	genType tan(genType const & angle); 
-
-	//! Arc sine. Returns an angle whose sine is x. 
-	//! The range of values returned by this function is [-PI/2, PI/2]. 
-	//! Results are undefined if |x| > 1.
-	//! (From GLSL 1.30.08 specification, section 8.1)
-	template <typename genType> 
-	genType asin(genType const & x);
-
-	//! Arc cosine. Returns an angle whose sine is x. 
-	//! The range of values returned by this function is [0, PI]. 
-	//! Results are undefined if |x| > 1.
-	//! (From GLSL 1.30.08 specification, section 8.1)
-	template <typename genType> 
-	genType acos(genType const & x);
-
-	//! Arc tangent. Returns an angle whose tangent is y/x. 
-	//! The signs of x and y are used to determine what 
-	//! quadrant the angle is in. The range of values returned 
-	//! by this function is [-PI, PI]. Results are undefined 
-	//! if x and y are both 0. 
-	//! (From GLSL 1.30.08 specification, section 8.1)
-	template <typename genType> 
-	genType atan(genType const & y, genType const & x);
-
-	//! Arc tangent. Returns an angle whose tangent is y_over_x. 
-	//! The range of values returned by this function is [-PI/2, PI/2].
-	//! (From GLSL 1.30.08 specification, section 8.1)
-	template <typename genType> 
-	genType atan(genType const & y_over_x);
-
-	//! Returns the hyperbolic sine function, (exp(x) - exp(-x)) / 2
-	//! (From GLSL 1.30.08 specification, section 8.1)
-	template <typename genType> 
-	genType sinh(genType const & angle);
-
-	//! Returns the hyperbolic cosine function, (exp(x) + exp(-x)) / 2
-	//! (From GLSL 1.30.08 specification, section 8.1)
-	template <typename genType> 
-	genType cosh(genType const & angle);
-
-	//! Returns the hyperbolic tangent function, sinh(angle) / cosh(angle)
-	//! (From GLSL 1.30.08 specification, section 8.1)
-	template <typename genType> 
-	genType tanh(genType const & angle);
-
-	//! Arc hyperbolic sine; returns the inverse of sinh.
-	//! (From GLSL 1.30.08 specification, section 8.1)
-	template <typename genType> 
-	genType asinh(genType const & x);
-	
-	//! Arc hyperbolic cosine; returns the non-negative inverse
-	//! of cosh. Results are undefined if x < 1.
-	//! (From GLSL 1.30.08 specification, section 8.1)
-	template <typename genType> 
-	genType acosh(genType const & x);
-
-	//! Arc hyperbolic tangent; returns the inverse of tanh.
-	//! Results are undefined if abs(x) >= 1.
-	//! (From GLSL 1.30.08 specification, section 8.1)
-	template <typename genType> 
-	genType atanh(genType const & x);
-
-	}//namespace trigonometric
-	}//namespace function
-	}//namespace core
-
-	using namespace core::function::trigonometric;
-}//namespace glm
-
-#include "func_trigonometric.inl"
-
-#endif//glm_core_func_trigonometric
-
-

+ 0 - 745
glm/core/func_trigonometric.inl

@@ -1,745 +0,0 @@
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// OpenGL Mathematics Copyright (c) 2005 - 2010 G-Truc Creation (www.g-truc.net)
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// Created : 2008-08-03
-// Updated : 2008-09-14
-// Licence : This source is under MIT License
-// File    : glm/core/func_trigonometric.inl
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-namespace glm
-{
-	namespace core{
-	namespace function{
-	namespace trigonometric{
-
-    // radians
-    template <typename genType>
-    inline genType radians
-	(
-		genType const & degrees
-	)
-    {
-		GLM_STATIC_ASSERT(detail::type<genType>::is_float);
-
-        const genType pi = genType(3.1415926535897932384626433832795);
-        return degrees * (pi / genType(180));
-    }
-
-    template <typename T>
-	inline detail::tvec2<T> radians
-	(
-		detail::tvec2<T> const & degrees
-	)
-    {
-        return detail::tvec2<T>(
-            radians(degrees.x),
-            radians(degrees.y));
-    }
-
-    template <typename T>
-    inline detail::tvec3<T> radians
-	(
-		detail::tvec3<T> const & degrees
-	)
-    {
-        return detail::tvec3<T>(
-            radians(degrees.x),
-            radians(degrees.y),
-            radians(degrees.z));
-    }
-
-    template <typename T>
-    inline detail::tvec4<T> radians
-	(
-		detail::tvec4<T> const & degrees
-	)
-    {
-        return detail::tvec4<T>(
-            radians(degrees.x),
-            radians(degrees.y),
-            radians(degrees.z),
-            radians(degrees.w));
-    }
-
-    // degrees
-    template <typename genType>
-    inline genType degrees
-	(
-		genType const & radians
-	)
-    {
-		GLM_STATIC_ASSERT(detail::type<genType>::is_float);
-
-        const genType pi = genType(3.1415926535897932384626433832795);
-        return radians * (genType(180) / pi);
-    }
-
-    template <typename T>
-    inline detail::tvec2<T> degrees
-	(
-		detail::tvec2<T> const & radians
-	)
-    {
-        return detail::tvec2<T>(
-            degrees(radians.x),
-            degrees(radians.y));
-    }
-
-    template <typename T>
-    inline detail::tvec3<T> degrees
-	(	
-		detail::tvec3<T> const & radians
-	)
-    {
-        return detail::tvec3<T>(
-            degrees(radians.x),
-            degrees(radians.y),
-            degrees(radians.z));
-    }
-
-    template <typename T>
-    inline detail::tvec4<T> degrees
-	(
-		detail::tvec4<T> const & radians
-	)
-    {
-        return detail::tvec4<T>(
-            degrees(radians.x),
-            degrees(radians.y),
-            degrees(radians.z),
-            degrees(radians.w));
-    }
-
-    // sin
-    template <typename genType>
-    inline genType sin
-	(
-		genType const & angle
-	)
-    {
-		GLM_STATIC_ASSERT(detail::type<genType>::is_float);
-
-		return ::std::sin(angle);
-    }
-
-    template <typename T>
-    inline detail::tvec2<T> sin
-	(
-		detail::tvec2<T> const & angle
-	)
-    {
-        return detail::tvec2<T>(
-            sin(angle.x),
-            sin(angle.y));
-    }
-
-    template <typename T>
-    inline detail::tvec3<T> sin
-	(
-		detail::tvec3<T> const & angle
-	)
-    {
-        return detail::tvec3<T>(
-            sin(angle.x),
-            sin(angle.y),
-            sin(angle.z));
-    }
-
-    template <typename T>
-    inline detail::tvec4<T> sin
-	(
-		detail::tvec4<T> const & angle
-	)
-    {
-        return detail::tvec4<T>(
-            sin(angle.x),
-            sin(angle.y),
-            sin(angle.z),
-            sin(angle.w));
-    }
-
-    // cos
-    template <typename genType>
-    inline genType cos(genType const & angle)
-    {
-		GLM_STATIC_ASSERT(detail::type<genType>::is_float);
-
-        return ::std::cos(angle);
-    }
-
-    template <typename T>
-    inline detail::tvec2<T> cos
-	(
-		detail::tvec2<T> const & angle
-	)
-    {
-        return detail::tvec2<T>(
-            cos(angle.x),
-            cos(angle.y));
-    }
-
-    template <typename T>
-    inline detail::tvec3<T> cos
-	(
-		detail::tvec3<T> const & angle
-	)
-    {
-        return detail::tvec3<T>(
-            cos(angle.x),
-            cos(angle.y),
-            cos(angle.z));
-    }
-
-    template <typename T>
-    inline detail::tvec4<T> cos
-	(	
-		detail::tvec4<T> const & angle
-	)
-    {
-        return detail::tvec4<T>(
-            cos(angle.x),
-            cos(angle.y),
-            cos(angle.z),
-            cos(angle.w));
-    }
-
-    // tan
-    template <typename genType>
-    inline genType tan
-	(
-		genType const & angle
-	)
-    {
-		GLM_STATIC_ASSERT(detail::type<genType>::is_float);
-
-        return ::std::tan(angle);
-    }
-
-    template <typename T>
-    inline detail::tvec2<T> tan
-	(
-		detail::tvec2<T> const & angle
-	)
-    {
-        return detail::tvec2<T>(
-            tan(angle.x),
-            tan(angle.y));
-    }
-
-    template <typename T>
-    inline detail::tvec3<T> tan
-	(
-		detail::tvec3<T> const & angle
-	)
-    {
-        return detail::tvec3<T>(
-            tan(angle.x),
-            tan(angle.y),
-            tan(angle.z));
-    }
-
-    template <typename T>
-    inline detail::tvec4<T> tan
-	(
-		detail::tvec4<T> const & angle
-	)
-    {
-        return detail::tvec4<T>(
-            tan(angle.x),
-            tan(angle.y),
-            tan(angle.z),
-            tan(angle.w));
-    }
-
-    // asin
-    template <typename genType>
-    inline genType asin
-	(
-		genType const & x
-	)
-    {
-		GLM_STATIC_ASSERT(detail::type<genType>::is_float);
-
-        return ::std::asin(x);
-    }
-
-    template <typename T>
-	inline detail::tvec2<T> asin
-	(
-		detail::tvec2<T> const & x
-	)
-    {
-        return detail::tvec2<T>(
-            asin(x.x),
-            asin(x.y));
-    }
-
-    template <typename T>
-	inline detail::tvec3<T> asin
-	(
-		detail::tvec3<T> const & x
-	)
-    {
-        return detail::tvec3<T>(
-            asin(x.x),
-            asin(x.y),
-            asin(x.z));
-    }
-
-    template <typename T>
-	inline detail::tvec4<T> asin
-	(
-		detail::tvec4<T> const & x
-	)
-    {
-        return detail::tvec4<T>(
-            asin(x.x),
-            asin(x.y),
-            asin(x.z),
-            asin(x.w));
-    }
-
-    // acos
-    template <typename genType>
-    inline genType acos
-	(
-		genType const & x
-	)
-    {
-		GLM_STATIC_ASSERT(detail::type<genType>::is_float);
-
-        return ::std::acos(x);
-    }
-
-    template <typename T>
-	inline detail::tvec2<T> acos
-	(
-		detail::tvec2<T> const & x
-	)
-    {
-        return detail::tvec2<T>(
-            acos(x.x),
-            acos(x.y));
-    }
-
-    template <typename T>
-	inline detail::tvec3<T> acos
-	(
-		detail::tvec3<T> const & x
-	)
-    {
-        return detail::tvec3<T>(
-            acos(x.x),
-            acos(x.y),
-            acos(x.z));
-    }
-
-    template <typename T>
-	inline detail::tvec4<T> acos
-	(
-		detail::tvec4<T> const & x
-	)
-    {
-        return detail::tvec4<T>(
-            acos(x.x),
-            acos(x.y),
-            acos(x.z),
-            acos(x.w));
-    }
-
-    // atan
-    template <typename genType>
-    inline genType atan
-	(
-		genType const & y, 
-		genType const & x
-	)
-    {
-		GLM_STATIC_ASSERT(detail::type<genType>::is_float);
-
-        return ::std::atan2(y, x);
-    }
-
-    template <typename T>
-    inline detail::tvec2<T> atan
-	(
-		detail::tvec2<T> const & y, 
-		detail::tvec2<T> const & x
-	)
-    {
-        return detail::tvec2<T>(
-            atan(y.x, x.x),
-            atan(y.y, x.y));
-    }
-
-    template <typename T>
-    inline detail::tvec3<T> atan
-	(
-		detail::tvec3<T> const & y, 
-		detail::tvec3<T> const & x
-	)
-    {
-        return detail::tvec3<T>(
-            atan(y.x, x.x),
-            atan(y.y, x.y),
-            atan(y.z, x.z));
-    }
-
-    template <typename T>
-    inline detail::tvec4<T> atan
-	(
-		detail::tvec4<T> const & y, 
-		detail::tvec4<T> const & x
-	)
-    {
-        return detail::tvec4<T>(
-            atan(y.x, x.x),
-            atan(y.y, x.y),
-            atan(y.z, x.z),
-            atan(y.w, x.w));
-    }
-
-    template <typename genType>
-    inline genType atan
-	(
-		genType const & x
-	)
-    {
-		GLM_STATIC_ASSERT(detail::type<genType>::is_float);
-
-        return ::std::atan(x);
-    }
-
-    template <typename T>
-    inline detail::tvec2<T> atan
-	(
-		detail::tvec2<T> const & x
-	)
-    {
-        return detail::tvec2<T>(
-            atan(x.x),
-            atan(x.y));
-    }
-
-    template <typename T>
-    inline detail::tvec3<T> atan
-	(
-		detail::tvec3<T> const & x
-	)
-    {
-        return detail::tvec3<T>(
-            atan(x.x),
-            atan(x.y),
-            atan(x.z));
-    }
-
-    template <typename T>
-    inline detail::tvec4<T> atan
-	(
-		detail::tvec4<T> const & x
-	)
-    {
-        return detail::tvec4<T>(
-            atan(x.x),
-            atan(x.y),
-            atan(x.z),
-            atan(x.w));
-    }
-
-    // sinh
-    template <typename genType> 
-    inline genType sinh
-	(
-		genType const & angle
-	)
-    {
-        GLM_STATIC_ASSERT(detail::type<genType>::is_float);
-
-		return std::sinh(angle);
-    }
-
-    template <typename T> 
-    inline detail::tvec2<T> sinh
-	(
-		detail::tvec2<T> const & angle
-	)
-    {
-        return detail::tvec2<T>(
-            sinh(angle.x),
-            sinh(angle.y));
-    }
-
-    template <typename T> 
-    inline detail::tvec3<T> sinh
-	(
-		detail::tvec3<T> const & angle
-	)
-    {
-        return detail::tvec3<T>(
-            sinh(angle.x),
-            sinh(angle.y),
-            sinh(angle.z));
-    }
-
-    template <typename T> 
-    inline detail::tvec4<T> sinh
-	(
-		detail::tvec4<T> const & angle
-	)
-    {
-        return detail::tvec4<T>(
-            sinh(angle.x),
-            sinh(angle.y),
-            sinh(angle.z),
-            sinh(angle.w));
-    }
-
-    // cosh
-    template <typename genType> 
-    inline genType cosh
-	(
-		genType const & angle
-	)
-    {
-        GLM_STATIC_ASSERT(detail::type<genType>::is_float);
-
-		return std::cosh(angle);
-    }
-
-    template <typename T> 
-    inline detail::tvec2<T> cosh
-	(
-		detail::tvec2<T> const & angle
-	)
-    {
-        return detail::tvec2<T>(
-            cosh(angle.x),
-            cosh(angle.y));
-    }
-
-    template <typename T> 
-    inline detail::tvec3<T> cosh
-	(
-		detail::tvec3<T> const & angle
-	)
-    {
-        return detail::tvec3<T>(
-            cosh(angle.x),
-            cosh(angle.y),
-            cosh(angle.z));
-    }
-
-    template <typename T> 
-    inline detail::tvec4<T> cosh
-	(
-		detail::tvec4<T> const & angle
-	)
-    {
-        return detail::tvec4<T>(
-            cosh(angle.x),
-            cosh(angle.y),
-            cosh(angle.z),
-            cosh(angle.w));
-    }
-
-    // tanh
-    template <typename genType>
-    inline genType tanh
-	(
-		genType const & angle
-	)
-    {
-        GLM_STATIC_ASSERT(detail::type<genType>::is_float);
-
-		return std::tanh(angle);
-    }
-
-    template <typename T> 
-    inline detail::tvec2<T> tanh
-	(
-		detail::tvec2<T> const & angle
-	)
-    {
-        return detail::tvec2<T>(
-            tanh(angle.x),
-            tanh(angle.y));
-    }
-
-    template <typename T> 
-    inline detail::tvec3<T> tanh
-	(
-		detail::tvec3<T> const & angle
-	)
-    {
-        return detail::tvec3<T>(
-            tanh(angle.x),
-            tanh(angle.y),
-            tanh(angle.z));
-    }
-
-    template <typename T> 
-    inline detail::tvec4<T> tanh
-	(
-		detail::tvec4<T> const & angle
-	)
-    {
-        return detail::tvec4<T>(
-            tanh(angle.x),
-            tanh(angle.y),
-            tanh(angle.z),
-            tanh(angle.w));
-    }
-
-    // asinh
-    template <typename genType> 
-    inline genType asinh
-	(
-		genType const & x
-	)
-    {
-		GLM_STATIC_ASSERT(detail::type<genType>::is_float);
-		
-		return (x < genType(0) ? genType(-1) : (x > genType(0) ? genType(1) : genType(0))) * log(abs(x) + sqrt(genType(1) + x * x));
-    }
-
-    template <typename T> 
-    inline detail::tvec2<T> asinh
-	(
-		detail::tvec2<T> const & x
-	)
-    {
-        return detail::tvec2<T>(
-            asinh(x.x),
-            asinh(x.y));
-    }
-
-    template <typename T> 
-    inline detail::tvec3<T> asinh
-	(
-		detail::tvec3<T> const & x
-	)
-    {
-        return detail::tvec3<T>(
-            asinh(x.x),
-            asinh(x.y),
-            asinh(x.z));
-    }
-
-    template <typename T> 
-    inline detail::tvec4<T> asinh
-	(
-		detail::tvec4<T> const & x
-	)
-    {
-        return detail::tvec4<T>(
-            asinh(x.x),
-            asinh(x.y),
-            asinh(x.z),
-            asinh(x.w));
-    }
-
-    // acosh
-    template <typename genType> 
-    inline genType acosh
-	(
-		genType const & x
-	)
-    {
-		GLM_STATIC_ASSERT(detail::type<genType>::is_float);
-
-		if(x < genType(1))
-			return genType(0);
-		return log(x + sqrt(x * x - genType(1)));
-    }
-
-	template <typename T> 
-	inline detail::tvec2<T> acosh
-	(
-		detail::tvec2<T> const & x
-	)
-	{
-		return detail::tvec2<T>(
-			acosh(x.x),
-			acosh(x.y));
-	}
-
-    template <typename T> 
-    inline detail::tvec3<T> acosh
-	(
-		detail::tvec3<T> const & x
-	)
-    {
-        return detail::tvec3<T>(
-            acosh(x.x),
-            acosh(x.y),
-            acosh(x.z));
-    }
-
-    template <typename T> 
-    inline detail::tvec4<T> acosh
-	(
-		detail::tvec4<T> const & x
-	)
-    {
-        return detail::tvec4<T>(
-            acosh(x.x),
-            acosh(x.y),
-            acosh(x.z),
-            acosh(x.w));
-    }
-
-    // atanh
-    template <typename genType>
-    inline genType atanh
-	(
-		genType const & x
-	)
-    {
-		GLM_STATIC_ASSERT(detail::type<genType>::is_float);
-		
-		if(abs(x) >= genType(1))
-			return 0;
-		return genType(0.5) * log((genType(1) + x) / (genType(1) - x));
-    }
-
-    template <typename T> 
-    inline detail::tvec2<T> atanh
-	(
-		detail::tvec2<T> const & x
-	)
-    {
-        return detail::tvec2<T>(
-            atanh(x.x),
-            atanh(x.y));
-    }
-
-    template <typename T> 
-    inline detail::tvec3<T> atanh
-	(
-		detail::tvec3<T> const & x
-	)
-    {
-        return detail::tvec3<T>(
-            atanh(x.x),
-            atanh(x.y),
-            atanh(x.z));
-    }
-
-    template <typename T> 
-    inline detail::tvec4<T> atanh
-	(
-		detail::tvec4<T> const & x
-	)
-    {
-        return detail::tvec4<T>(
-            atanh(x.x),
-            atanh(x.y),
-            atanh(x.z),
-            atanh(x.w));
-    }
-
-	}//namespace trigonometric
-	}//namespace function
-	}//namespace core
-}//namespace glm

+ 0 - 189
glm/core/func_vector_relational.hpp

@@ -1,189 +0,0 @@
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// OpenGL Mathematics Copyright (c) 2005 - 2010 G-Truc Creation (www.g-truc.net)
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// Created : 2008-08-03
-// Updated : 2008-09-09
-// Licence : This source is under MIT License
-// File    : glm/core/func_vector_relational.hpp
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-#ifndef glm_core_func_vector_relational
-#define glm_core_func_vector_relational
-
-namespace glm
-{
-	namespace test{
-		void main_core_func_vector_relational();
-	}//namespace test
-
-	namespace core{
-	namespace function{
-	//! Define vector relational functions from Section 8.3 of GLSL 1.30.8 specification. 
-	//! Included in glm namespace.
-	namespace vector_relational
-	{
-		//! Returns the component-wise comparison result of x < y.
-		//! (From GLSL 1.30.08 specification, section 8.6)
-		template <typename T, template <typename> class vecType> 
-		inline typename vecType<T>::bool_type lessThan
-		(
-			vecType<T> const & x, 
-			vecType<T> const & y
-		)
-		{
-			GLM_STATIC_ASSERT(
-				detail::type<T>::is_float || 
-				detail::type<T>::is_int || 
-				detail::type<T>::is_uint);
-
-			typename vecType<bool>::bool_type Result(vecType<bool>::null);
-			for(typename vecType<bool>::size_type i = 0; i < vecType<bool>::value_size(); ++i)
-				Result[i] = x[i] < y[i];
-			return Result;
-		}
-
-		//! Returns the component-wise comparison of result x <= y.
-		//! (From GLSL 1.30.08 specification, section 8.6)
-		template <typename T, template <typename> class vecType> 
-		inline typename vecType<T>::bool_type lessThanEqual
-		(
-			vecType<T> const & x, 
-			vecType<T> const & y
-		)
-		{
-			GLM_STATIC_ASSERT(
-				detail::type<T>::is_float || 
-				detail::type<T>::is_int || 
-				detail::type<T>::is_uint);
-
-			typename vecType<bool>::bool_type Result(vecType<bool>::null);
-			for(typename vecType<bool>::size_type i = 0; i < vecType<bool>::value_size(); ++i)
-				Result[i] = x[i] <= y[i];
-			return Result;
-		}
-
-		//! Returns the component-wise comparison of result x > y.
-		//! (From GLSL 1.30.08 specification, section 8.6)
-		template <typename T, template <typename> class vecType> 
-		inline typename vecType<T>::bool_type greaterThan
-		(
-			vecType<T> const & x, 
-			vecType<T> const & y
-		)
-		{
-			GLM_STATIC_ASSERT(
-				detail::type<T>::is_float || 
-				detail::type<T>::is_int || 
-				detail::type<T>::is_uint);
-
-			typename vecType<bool>::bool_type Result(vecType<bool>::null);
-			for(typename vecType<bool>::size_type i = 0; i < vecType<bool>::value_size(); ++i)
-				Result[i] = x[i] > y[i];
-			return Result;
-		}
-
-		//! Returns the component-wise comparison of result x >= y.
-		//! (From GLSL 1.30.08 specification, section 8.6)
-		template <typename T, template <typename> class vecType> 
-		inline typename vecType<T>::bool_type greaterThanEqual
-		(
-			vecType<T> const & x, 
-			vecType<T> const & y
-		)
-		{
-			GLM_STATIC_ASSERT(
-				detail::type<T>::is_float || 
-				detail::type<T>::is_int || 
-				detail::type<T>::is_uint);
-
-			typename vecType<bool>::bool_type Result(vecType<bool>::null);
-			for(typename vecType<bool>::size_type i = 0; i < vecType<bool>::value_size(); ++i)
-				Result[i] = x[i] >= y[i];
-			return Result;
-		}
-
-		//! Returns the component-wise comparison of result x == y.
-		//! (From GLSL 1.30.08 specification, section 8.6)
-		template <typename T, template <typename> class vecType> 
-		inline typename vecType<T>::bool_type equal
-		(
-			vecType<T> const & x, 
-			vecType<T> const & y
-		)
-		{
-			GLM_STATIC_ASSERT(
-				detail::type<T>::is_float || 
-				detail::type<T>::is_int || 
-				detail::type<T>::is_uint || 
-				detail::type<T>::is_bool);
-
-			typename vecType<bool>::bool_type Result(vecType<bool>::null);
-			for(typename vecType<bool>::size_type i = 0; i < vecType<bool>::value_size(); ++i)
-				Result[i] = x[i] == y[i];
-			return Result;
-		}
-
-		//! Returns the component-wise comparison of result x != y.
-		//! (From GLSL 1.30.08 specification, section 8.6)
-		template <typename T, template <typename> class vecType> 
-		inline typename vecType<T>::bool_type notEqual
-		(
-			vecType<T> const & x, 
-			vecType<T> const & y
-		)
-		{
-			GLM_STATIC_ASSERT(
-				detail::type<T>::is_float || 
-				detail::type<T>::is_int || 
-				detail::type<T>::is_uint || 
-				detail::type<T>::is_bool);
-
-			typename vecType<bool>::bool_type Result(vecType<bool>::null);
-			for(typename vecType<bool>::size_type i = 0; i < vecType<bool>::value_size(); ++i)
-				Result[i] = x[i] != y[i];
-			return Result;
-		}
-
-		//! Returns true if any component of x is true.
-		//! (From GLSL 1.30.08 specification, section 8.6)
-		template <template <typename> class vecType> 
-		inline bool any(vecType<bool> const & v)
-		{
-			bool Result = false;
-			for(typename vecType<bool>::size_type i = 0; i < vecType<bool>::value_size(); ++i)
-				Result = Result || v[i];
-			return Result;
-		}
-
-		//! Returns true if all components of x are true.
-		//! (From GLSL 1.30.08 specification, section 8.6)
-		template <template <typename> class vecType> 
-		inline bool all(vecType<bool> const & v)
-		{
-			bool Result = true;
-			for(typename vecType<bool>::size_type i = 0; i < vecType<bool>::value_size(); ++i)
-				Result = Result && v[i];
-			return Result;
-		}
-
-		//! Returns the component-wise logical complement of x.
-		//! (From GLSL 1.30.08 specification, section 8.6)
-		template <template <typename> class vecType> 
-		inline vecType<bool> not_(vecType<bool> const & v)
-		{
-			typename vecType<bool>::bool_type Result(vecType<bool>::null);
-			for(typename vecType<bool>::size_type i = 0; i < vecType<bool>::value_size(); ++i)
-				Result[i] = !v[i];
-			return Result;
-		}
-
-	}//namespace vector_relational
-	}//namespace function
-	}//namespace core
-
-	using namespace core::function::vector_relational;
-}//namespace glm
-
-#include "func_vector_relational.inl"
-
-#endif//glm_core_func_vector_relational

+ 0 - 20
glm/core/func_vector_relational.inl

@@ -1,20 +0,0 @@
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// OpenGL Mathematics Copyright (c) 2005 - 2010 G-Truc Creation (www.g-truc.net)
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// Created : 2008-08-03
-// Updated : 2008-09-14
-// Licence : This source is under MIT License
-// File    : glm/core/func_vector_relational.inl
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-namespace glm
-{
-	namespace core{
-	namespace function{
-	namespace vector_relational{
-
-	}//namespace vector_relational
-	}//namespace function
-	}//namespace core
-}//namespace glm
-

+ 0 - 21
glm/core/hint.hpp

@@ -1,21 +0,0 @@
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// OpenGL Mathematics Copyright (c) 2005 - 2010 G-Truc Creation (www.g-truc.net)
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// Created : 2008-08-14
-// Updated : 2008-08-14
-// Licence : This source is under MIT License
-// File    : glm/core/hint.hpp
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-#ifndef glm_core_type
-#define glm_core_type
-
-namespace glm
-{
-	// Use dont_care, nicest and fastest to optimize implementations.
-	class dont_care {};
-	class nicest {};
-	class fastest {};
-};
-
-#endif//glm_core_type

+ 0 - 60
glm/core/intrinsic_common.hpp

@@ -1,60 +0,0 @@
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// OpenGL Mathematics Copyright (c) 2005 - 2010 G-Truc Creation (www.g-truc.net)
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// Created : 2009-05-11
-// Updated : 2009-05-11
-// Licence : This source is under MIT License
-// File    : glm/core/intrinsic_common.hpp
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-#ifndef GLM_DETAIL_INTRINSIC_COMMON_INCLUDED
-#define GLM_DETAIL_INTRINSIC_COMMON_INCLUDED
-
-//#include <mmintrin.h>
-//#include <emmintrin.h>
-#include <xmmintrin.h>
-#include <emmintrin.h>
-
-__m128 _mm_abs_ps(__m128 x);
-
-__m128 _mm_sgn_ps(__m128 x);
-
-//floor
-__m128 _mm_flr_ps(__m128 v);
-
-//trunc
-__m128 _mm_trc_ps(__m128 v);
-
-//round
-__m128 _mm_rnd_ps(__m128 v);
-
-//roundEven
-__m128 _mm_rde_ps(__m128 v);
-
-__m128 _mm_ceil_ps(__m128 v);
-
-__m128 _mm_frc_ps(__m128 x);
-
-__m128 _mm_mod_ps(__m128 x, __m128 y);
-
-__m128 _mm_modf_ps(__m128 x, __m128i & i);
-
-//inline __m128 _mm_min_ps(__m128 x, __m128 y)
-
-//inline __m128 _mm_max_ps(__m128 x, __m128 y)
-
-__m128 _mm_clp_ps(__m128 v, __m128 minVal, __m128 maxVal);
-
-__m128 _mm_mix_ps(__m128 v1, __m128 v2, __m128 a);
-
-__m128 _mm_stp_ps(__m128 edge, __m128 x);
-
-__m128 _mm_ssp_ps(__m128 edge0, __m128 edge1, __m128 x);
-
-__m128 _mm_nan_ps(__m128 x);
-
-__m128 _mm_inf_ps(__m128 x);
-
-#include "intrinsic_common.inl"
-
-#endif//GLM_DETAIL_INTRINSIC_COMMON_INCLUDED

+ 0 - 280
glm/core/intrinsic_common.inl

@@ -1,280 +0,0 @@
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// OpenGL Mathematics Copyright (c) 2005 - 2010 G-Truc Creation (www.g-truc.net)
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// Created : 2009-05-08
-// Updated : 2009-05-08
-// Licence : This source is under MIT License
-// File    : glm/core/intrinsic_common.inl
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-namespace glm{
-namespace detail{
-
-	union ieee754_QNAN
-	{
-	   const float f;
-	   struct
-	   {
-		  const unsigned int mantissa:23, exp:8, sign:1;
-	   };
-	   
-	   ieee754_QNAN() : f(0.0), mantissa(0x7FFFFF), exp(0xFF), sign(0x0) {}
-	};
-
-	static const __m128 zero = _mm_setzero_ps();
-	static const __m128 one = _mm_set_ps1(1.0f);
-	static const __m128 minus_one = _mm_set_ps1(-1.0f);
-	static const __m128 two = _mm_set_ps1(2.0f);
-	static const __m128 three = _mm_set_ps1(3.0f);
-	static const __m128 pi = _mm_set_ps1(3.1415926535897932384626433832795f);
-	static const __m128 hundred_eighty = _mm_set_ps1(180.f);
-	static const __m128 pi_over_hundred_eighty = _mm_set_ps1(0.017453292519943295769236907684886f);
-	static const __m128 hundred_eighty_over_pi = _mm_set_ps1(57.295779513082320876798154814105f);
-
-	static const ieee754_QNAN absMask;
-	static const __m128 abs4Mask = _mm_set_ps1(absMask.f);
-
-        //static const __m128 _epi32_sign_mask = _mm_castsi128_ps(_mm_set1_epi32(0x80000000));
-        //static const __m128 _epi32_inv_sign_mask = _mm_castsi128_ps(_mm_set1_epi32(0x7FFFFFFF));
-        //static const __m128 _epi32_mant_mask = _mm_castsi128_ps(_mm_set1_epi32(0x7F800000));
-        //static const __m128 _epi32_inv_mant_mask = _mm_castsi128_ps(_mm_set1_epi32(0x807FFFFF));
-        //static const __m128 _epi32_min_norm_pos = _mm_castsi128_ps(_mm_set1_epi32(0x00800000));
-	static const __m128 _epi32_0 = _mm_set_ps1(0);
-	static const __m128 _epi32_1 = _mm_set_ps1(1);
-	static const __m128 _epi32_2 = _mm_set_ps1(2);
-	static const __m128 _epi32_3 = _mm_set_ps1(3);
-	static const __m128 _epi32_4 = _mm_set_ps1(4);
-	static const __m128 _epi32_5 = _mm_set_ps1(5);
-	static const __m128 _epi32_6 = _mm_set_ps1(6);
-	static const __m128 _epi32_7 = _mm_set_ps1(7);
-	static const __m128 _epi32_8 = _mm_set_ps1(8);
-	static const __m128 _epi32_9 = _mm_set_ps1(9);
-	static const __m128 _epi32_127 = _mm_set_ps1(127);
-        //static const __m128 _epi32_ninf = _mm_castsi128_ps(_mm_set1_epi32(0xFF800000));
-        //static const __m128 _epi32_pinf = _mm_castsi128_ps(_mm_set1_epi32(0x7F800000));
-
-	static const __m128 _ps_1_3 = _mm_set_ps1(0.33333333333333333333333333333333f);
-	static const __m128 _ps_0p5 = _mm_set_ps1(0.5f);
-	static const __m128 _ps_1 = _mm_set_ps1(1.0f);
-	static const __m128 _ps_m1 = _mm_set_ps1(-1.0f);
-	static const __m128 _ps_2 = _mm_set_ps1(2.0f);
-	static const __m128 _ps_3 = _mm_set_ps1(3.0f);
-	static const __m128 _ps_127 = _mm_set_ps1(127.0f);
-	static const __m128 _ps_255 = _mm_set_ps1(255.0f);
-	static const __m128 _ps_2pow23 = _mm_set_ps1(8388608.0f);
-
-	static const __m128 _ps_1_0_0_0 = _mm_set_ps(1.0f, 0.0f, 0.0f, 0.0f);
-	static const __m128 _ps_0_1_0_0 = _mm_set_ps(0.0f, 1.0f, 0.0f, 0.0f);
-	static const __m128 _ps_0_0_1_0 = _mm_set_ps(0.0f, 0.0f, 1.0f, 0.0f);
-	static const __m128 _ps_0_0_0_1 = _mm_set_ps(0.0f, 0.0f, 0.0f, 1.0f);
-
-	static const __m128 _ps_pi = _mm_set_ps1(3.1415926535897932384626433832795f);
-	static const __m128 _ps_pi2 = _mm_set_ps1(6.283185307179586476925286766560f);
-	static const __m128 _ps_2_pi = _mm_set_ps1(0.63661977236758134307553505349006f);
-	static const __m128 _ps_pi_2 = _mm_set_ps1(1.5707963267948966192313216916398f);
-	static const __m128 _ps_4_pi = _mm_set_ps1(1.2732395447351626861510701069801f);
-	static const __m128 _ps_pi_4 = _mm_set_ps1(0.78539816339744830961566084581988f);
-
-	static const __m128 _ps_sincos_p0 = _mm_set_ps1(0.15707963267948963959e1f);
-	static const __m128 _ps_sincos_p1 = _mm_set_ps1(-0.64596409750621907082e0f);
-	static const __m128 _ps_sincos_p2 = _mm_set_ps1(0.7969262624561800806e-1f);
-	static const __m128 _ps_sincos_p3 = _mm_set_ps1(-0.468175413106023168e-2f);
-	static const __m128 _ps_tan_p0 = _mm_set_ps1(-1.79565251976484877988e7f);
-	static const __m128 _ps_tan_p1 = _mm_set_ps1(1.15351664838587416140e6f);
-	static const __m128 _ps_tan_p2 = _mm_set_ps1(-1.30936939181383777646e4f);
-	static const __m128 _ps_tan_q0 = _mm_set_ps1(-5.38695755929454629881e7f);
-	static const __m128 _ps_tan_q1 = _mm_set_ps1(2.50083801823357915839e7f);
-	static const __m128 _ps_tan_q2 = _mm_set_ps1(-1.32089234440210967447e6f);
-	static const __m128 _ps_tan_q3 = _mm_set_ps1(1.36812963470692954678e4f);
-	static const __m128 _ps_tan_poleval = _mm_set_ps1(3.68935e19f);
-	static const __m128 _ps_atan_t0 = _mm_set_ps1(-0.91646118527267623468e-1f);
-	static const __m128 _ps_atan_t1 = _mm_set_ps1(-0.13956945682312098640e1f);
-	static const __m128 _ps_atan_t2 = _mm_set_ps1(-0.94393926122725531747e2f);
-	static const __m128 _ps_atan_t3 = _mm_set_ps1(0.12888383034157279340e2f);
-	static const __m128 _ps_atan_s0 = _mm_set_ps1(0.12797564625607904396e1f);
-	static const __m128 _ps_atan_s1 = _mm_set_ps1(0.21972168858277355914e1f);
-	static const __m128 _ps_atan_s2 = _mm_set_ps1(0.68193064729268275701e1f);
-	static const __m128 _ps_atan_s3 = _mm_set_ps1(0.28205206687035841409e2f);
-
-	static const __m128 _ps_exp_hi = _mm_set_ps1(88.3762626647949f);
-	static const __m128 _ps_exp_lo = _mm_set_ps1(-88.3762626647949f);
-	static const __m128 _ps_exp_rln2 = _mm_set_ps1(1.4426950408889634073599f);
-	static const __m128 _ps_exp_p0 = _mm_set_ps1(1.26177193074810590878e-4f);
-	static const __m128 _ps_exp_p1 = _mm_set_ps1(3.02994407707441961300e-2f);
-	static const __m128 _ps_exp_q0 = _mm_set_ps1(3.00198505138664455042e-6f);
-	static const __m128 _ps_exp_q1 = _mm_set_ps1(2.52448340349684104192e-3f);
-	static const __m128 _ps_exp_q2 = _mm_set_ps1(2.27265548208155028766e-1f);
-	static const __m128 _ps_exp_q3 = _mm_set_ps1(2.00000000000000000009e0f);
-	static const __m128 _ps_exp_c1 = _mm_set_ps1(6.93145751953125e-1f);
-	static const __m128 _ps_exp_c2 = _mm_set_ps1(1.42860682030941723212e-6f);
-	static const __m128 _ps_exp2_hi = _mm_set_ps1(127.4999961853f);
-	static const __m128 _ps_exp2_lo = _mm_set_ps1(-127.4999961853f);
-	static const __m128 _ps_exp2_p0 = _mm_set_ps1(2.30933477057345225087e-2f);
-	static const __m128 _ps_exp2_p1 = _mm_set_ps1(2.02020656693165307700e1f);
-	static const __m128 _ps_exp2_p2 = _mm_set_ps1(1.51390680115615096133e3f);
-	static const __m128 _ps_exp2_q0 = _mm_set_ps1(2.33184211722314911771e2f);
-	static const __m128 _ps_exp2_q1 = _mm_set_ps1(4.36821166879210612817e3f);
-	static const __m128 _ps_log_p0 = _mm_set_ps1(-7.89580278884799154124e-1f);
-	static const __m128 _ps_log_p1 = _mm_set_ps1(1.63866645699558079767e1f);
-	static const __m128 _ps_log_p2 = _mm_set_ps1(-6.41409952958715622951e1f);
-	static const __m128 _ps_log_q0 = _mm_set_ps1(-3.56722798256324312549e1f);
-	static const __m128 _ps_log_q1 = _mm_set_ps1(3.12093766372244180303e2f);
-	static const __m128 _ps_log_q2 = _mm_set_ps1(-7.69691943550460008604e2f);
-	static const __m128 _ps_log_c0 = _mm_set_ps1(0.693147180559945f);
-	static const __m128 _ps_log2_c0 = _mm_set_ps1(1.44269504088896340735992f);
-
-}//namespace detail
-}//namespace glm
-
-inline __m128 _mm_abs_ps(__m128 x)
-{
-	return _mm_and_ps(glm::detail::abs4Mask, x);
-} 
-
-inline __m128 _mm_sgn_ps(__m128 x)
-{
-	//__m128 cmp0 = _mm_cmpeq_ps(x, zero);
-	//__m128 cmp1 = _mm_cmple_ps(x, zero);
-	//__m128 cmp2 = _mm_cmpge_ps(x, zero);
-
-	__m128 result;
-	__m128 cmp0 = _mm_cmpeq_ps(x, glm::detail::zero);
-	if(_mm_movemask_ps(cmp0) == 0)
-		result = glm::detail::zero;
-	else
-	{
-		__m128 cmp1 = _mm_cmpge_ps(x, glm::detail::zero);
-		//__m128 cmp2 = _mm_cmple_ps(x, glm::detail::zero);
-		if(_mm_movemask_ps(cmp1) > 0)
-			result = glm::detail::one;
-		else //if(_mm_movemask_ps(cmp2) > 0)
-			result = glm::detail::minus_one;
-	}
-	return result;
-}
-
-//floor
-inline __m128 _mm_flr_ps(__m128 x)
-{
-	__m128 rnd0 = _mm_rnd_ps(x);
-	__m128 cmp0 = _mm_cmplt_ps(x, rnd0);
-	__m128 and0 = _mm_and_ps(cmp0, glm::detail::_ps_1);
-	__m128 sub0 = _mm_sub_ps(rnd0, and0);
-	return sub0;
-}
-
-//trunc
-inline __m128 _mm_trc_ps(__m128 v)
-{
-	return __m128();
-}
-
-//round
-inline __m128 _mm_rnd_ps(__m128 x)
-{
-	__m128 and0;// = _mm_and_ps(glm::detail::_epi32_sign_mask, x);
-	__m128 or0 = _mm_or_ps(and0, glm::detail::_ps_2pow23);
-	__m128 add0 = _mm_add_ps(x, or0);
-	__m128 sub0 = _mm_sub_ps(add0, or0);
-	return sub0;
-}
-
-//roundEven
-inline __m128 _mm_rde_ps(__m128 v)
-{
-
-}
-
-inline __m128 _mm_ceil_ps(__m128 x)
-{
-	__m128 rnd0 = _mm_rnd_ps(x);
-	__m128 cmp0 = _mm_cmpgt_ps(x, rnd0);
-	__m128 and0 = _mm_and_ps(cmp0, glm::detail::_ps_1);
-	__m128 add0 = _mm_add_ps(rnd0, and0);
-	return add0;
-}
-
-inline __m128 _mm_frc_ps(__m128 x)
-{
-	__m128 flr0 = _mm_flr_ps(x);
-	__m128 sub0 = _mm_sub_ps(x, flr0);
-	return sub0;
-}
-
-inline __m128 _mm_mod_ps(__m128 x, __m128 y)
-{
-	__m128 div0 = _mm_div_ps(x, y);
-	__m128 flr0 = _mm_flr_ps(div0);
-	__m128 mul0 = _mm_mul_ps(y, flr0);
-	__m128 sub0 = _mm_sub_ps(x, mul0);
-	return sub0;
-}
-
-inline __m128 _mm_modf_ps(__m128 x, __m128i & i)
-{
-
-}
-
-//inline __m128 _mm_min_ps(__m128 x, __m128 y)
-
-//inline __m128 _mm_max_ps(__m128 x, __m128 y)
-
-inline __m128 _mm_clp_ps(__m128 v, __m128 minVal, __m128 maxVal)
-{
-	__m128 min0 = _mm_min_ps(v, maxVal);
-	__m128 max0 = _mm_max_ps(min0, minVal);
-	return max0;
-}
-
-inline __m128 _mm_mix_ps(__m128 v1, __m128 v2, __m128 a)
-{
-	__m128 sub0 = _mm_sub_ps(glm::detail::one, a);
-	__m128 mul0 = _mm_mul_ps(v1, sub0);
-	__m128 mul1 = _mm_mul_ps(v2, a);
-	__m128 add0 = _mm_add_ps(mul0, mul1);
-	return add0;
-}
-
-inline __m128 _mm_stp_ps(__m128 edge, __m128 x)
-{
-	__m128 cmp = _mm_cmple_ps(x, edge);
-	if(_mm_movemask_ps(cmp) == 0)
-		return glm::detail::one;
-	else
-		return glm::detail::zero;
-}
-
-inline __m128 _mm_ssp_ps(__m128 edge0, __m128 edge1, __m128 x)
-{
-	__m128 sub0 = _mm_sub_ps(x, edge0);
-	__m128 sub1 = _mm_sub_ps(edge1, edge0);
-	__m128 div0 = _mm_sub_ps(sub0, sub1);
-	__m128 clp0 = _mm_clp_ps(div0, glm::detail::zero, glm::detail::one);
-	__m128 mul0 = _mm_mul_ps(glm::detail::two, clp0);
-	__m128 sub2 = _mm_sub_ps(glm::detail::three, mul0);
-	__m128 mul1 = _mm_mul_ps(clp0, clp0);
-	__m128 mul2 = _mm_mul_ps(mul1, sub2);
-	return mul2;
-}
-
-inline __m128 _mm_nan_ps(__m128 x)
-{
-
-}
-
-inline __m128 _mm_inf_ps(__m128 x)
-{
-
-}
-
-// SSE scalar reciprocal sqrt using rsqrt op, plus one Newton-Rhaphson iteration
-// By Elan Ruskin, 
-inline __m128 _mm_sqrt_wip_ss(__m128 const x)
-{
-	__m128 recip = _mm_rsqrt_ss( x );  // "estimate" opcode
-	const static __m128 three = { 3, 3, 3, 3 }; // aligned consts for fast load
-	const static __m128 half = { 0.5,0.5,0.5,0.5 };
-	__m128 halfrecip = _mm_mul_ss( half, recip );
-	__m128 threeminus_xrr = _mm_sub_ss( three, _mm_mul_ss( x, _mm_mul_ss ( recip, recip ) ) );
-	return _mm_mul_ss( halfrecip, threeminus_xrr );
-}

+ 0 - 34
glm/core/intrinsic_exponential.hpp

@@ -1,34 +0,0 @@
-/*
-inline __m128 _mm_rsqrt_nr_ss(__m128 const x)
-{
-	__m128 recip = _mm_rsqrt_ss( x );  // "estimate" opcode
-	const static __m128 three = { 3, 3, 3, 3 }; // aligned consts for fast load
-	const static __m128 half = { 0.5,0.5,0.5,0.5 };
-	__m128 halfrecip = _mm_mul_ss( half, recip );
-	__m128 threeminus_xrr = _mm_sub_ss( three, _mm_mul_ss( x, _mm_mul_ss ( recip, recip ) ) );
-	return _mm_mul_ss( halfrecip, threeminus_xrr );
-}
- 
-inline __m128 __mm_normalize_fast_ps(  float * RESTRICT vOut, float * RESTRICT vIn )
-{
-        __m128 x = _mm_load_ss(&vIn[0]);
-        __m128 y = _mm_load_ss(&vIn[1]);
-        __m128 z = _mm_load_ss(&vIn[2]);
- 
-        const __m128 l =  // compute x*x + y*y + z*z
-                _mm_add_ss(
-                 _mm_add_ss( _mm_mul_ss(x,x),
-                             _mm_mul_ss(y,y)
-                            ),
-                 _mm_mul_ss( z, z )
-                );
- 
- 
-        const __m128 rsqt = _mm_rsqrt_nr_ss( l );
-        _mm_store_ss( &vOut[0] , _mm_mul_ss( rsqt, x ) );
-        _mm_store_ss( &vOut[1] , _mm_mul_ss( rsqt, y ) );
-        _mm_store_ss( &vOut[2] , _mm_mul_ss( rsqt, z ) );
- 
-        return _mm_mul_ss( l , rsqt );
-}
-*/

+ 0 - 0
glm/core/intrinsic_exponential.inl


+ 0 - 45
glm/core/intrinsic_geometric.hpp

@@ -1,45 +0,0 @@
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// OpenGL Mathematics Copyright (c) 2005 - 2010 G-Truc Creation (www.g-truc.net)
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// Created : 2009-05-08
-// Updated : 2009-05-08
-// Licence : This source is under MIT License
-// File    : glm/core/intrinsic_geometric.hpp
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-#ifndef glm_core_intrinsic_geometric
-#define glm_core_intrinsic_geometric
-
-#include "intrinsic_common.hpp"
-
-//length
-__m128 _mm_len_ps(__m128 x);
-
-//distance
-__m128 _mm_dst_ps(__m128 p0, __m128 p1);
-
-//dot
-__m128 _mm_dot_ps(__m128 v1, __m128 v2);
-
-// SSE1
-__m128 _mm_dot_ss(__m128 v1, __m128 v2);
-
-//cross
-__m128 _mm_xpd_ps(__m128 v1, __m128 v2);
-
-//normalize
-__m128 _mm_nrm_ps(__m128 v);
-
-//faceforward
-__m128 _mm_ffd_ps(__m128 N, __m128 I, __m128 Nref);
-
-//reflect
-__m128 _mm_rfe_ps(__m128 I, __m128 N);
-
-//refract
-__m128 _mm_rfa_ps(__m128 I, __m128 N, __m128 eta);
-
-
-#include "intrinsic_geometric.inl"
-
-#endif//glm_core_intrinsic_geometric

+ 0 - 117
glm/core/intrinsic_geometric.inl

@@ -1,117 +0,0 @@
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// OpenGL Mathematics Copyright (c) 2005 - 2010 G-Truc Creation (www.g-truc.net)
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// Created : 2009-05-08
-// Updated : 2009-05-08
-// Licence : This source is under MIT License
-// File    : glm/core/intrinsic_geometric.inl
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-//length
-inline __m128 _mm_len_ps(__m128 x)
-{
-    __m128 dot0 = _mm_dot_ps(x, x);
-	__m128 sqt0 = _mm_sqrt_ps(dot0);
-    return sqt0;
-}
-
-//distance
-inline __m128 _mm_dst_ps(__m128 p0, __m128 p1)
-{
-	__m128 sub0 = _mm_sub_ps(p0, p1);
-    __m128 len0 = _mm_len_ps(sub0);
-    return len0;
-}
-
-//dot
-inline __m128 _mm_dot_ps(__m128 v1, __m128 v2)
-{
-	__m128 mul0 = _mm_mul_ps(v1, v2);
-	__m128 swp0 = _mm_shuffle_ps(mul0, mul0, _MM_SHUFFLE(2, 3, 0, 1));
-	__m128 add0 = _mm_add_ps(mul0, swp0);
-	__m128 swp1 = _mm_shuffle_ps(add0, add0, _MM_SHUFFLE(0, 1, 2, 3));
-	__m128 add1 = _mm_add_ps(add0, swp1);
-	return add1;
-}
-
-// SSE1
-inline __m128 _mm_dot_ss(__m128 v1, __m128 v2)
-{
-	__m128 mul0 = _mm_mul_ps(v1, v2);
-	__m128 mov0 = _mm_movehl_ps(mul0, mul0);
-	__m128 add0 = _mm_add_ps(mov0, mul0);
-	__m128 swp1 = _mm_shuffle_ps(add0, add0, 1);
-	__m128 add1 = _mm_add_ss(add0, swp1);
-	return add1;
-}
-
-//cross
-inline __m128 _mm_xpd_ps(__m128 v1, __m128 v2)
-{
-	__m128 swp0 = _mm_shuffle_ps(v1, v1, _MM_SHUFFLE(3, 0, 2, 1));
-	__m128 swp1 = _mm_shuffle_ps(v1, v1, _MM_SHUFFLE(3, 1, 0, 2));
-	__m128 swp2 = _mm_shuffle_ps(v2, v2, _MM_SHUFFLE(3, 0, 2, 1));
-	__m128 swp3 = _mm_shuffle_ps(v2, v2, _MM_SHUFFLE(3, 1, 0, 2));
-	__m128 mul0 = _mm_mul_ps(swp0, swp3);
-	__m128 mul1 = _mm_mul_ps(swp1, swp2);
-	__m128 sub0 = _mm_sub_ps(mul0, mul1);
-	return sub0;
-}
-
-//normalize
-inline __m128 _mm_nrm_ps(__m128 v)
-{
-	__m128 dot0 = _mm_dot_ps(v, v);
-	__m128 isr0 = _mm_rsqrt_ps(dot0);
-	__m128 mul0 = _mm_mul_ps(v, isr0);
-	return mul0;
-}
-
-//faceforward
-inline __m128 _mm_ffd_ps(__m128 N, __m128 I, __m128 Nref)
-{
-	//__m128 dot0 = _mm_dot_ps(v, v);
-	//__m128 neg0 = _mm_neg_ps(N);
-	//__m128 sgn0 = _mm_sgn_ps(dot0);
-	//__m128 mix0 = _mm_mix_ps(N, neg0, sgn0);
-	//return mix0;
-
-	__m128 dot0 = _mm_dot_ps(Nref, I);
-	__m128 sgn0 = _mm_sgn_ps(dot0);
-	__m128 mul0 = _mm_mul_ps(sgn0, glm::detail::minus_one);
-	__m128 mul1 = _mm_mul_ps(N, mul0);
-	return mul1;
-}
-
-//reflect
-inline __m128 _mm_rfe_ps(__m128 I, __m128 N)
-{
-	__m128 dot0 = _mm_dot_ps(N, I);
-	__m128 mul0 = _mm_mul_ps(N, I);
-	__m128 mul1 = _mm_mul_ps(mul0, glm::detail::two);
-	__m128 sub0 = _mm_sub_ps(I, mul1);
-	return sub0;
-}
-
-//refract
-inline __m128 _mm_rfa_ps(__m128 I, __m128 N, __m128 eta)
-{
-	__m128 dot0 = _mm_dot_ps(N, I);
-	__m128 mul0 = _mm_mul_ps(eta, eta);
-	__m128 mul1 = _mm_mul_ps(dot0, dot0);
-	__m128 sub0 = _mm_sub_ps(glm::detail::one, mul0);
-	__m128 sub1 = _mm_sub_ps(glm::detail::one, mul1);
-	__m128 mul2 = _mm_mul_ps(sub0, sub1);
-	
-	if(_mm_movemask_ps(_mm_cmplt_ss(mul2, glm::detail::zero)) == 0)
-		return glm::detail::zero;
-
-	__m128 sqt0 = _mm_sqrt_ps(mul2);
-	__m128 mul3 = _mm_mul_ps(eta, dot0);
-	__m128 add0 = _mm_add_ps(mul3, sqt0);
-	__m128 mul4 = _mm_mul_ps(add0, N);
-	__m128 mul5 = _mm_mul_ps(eta, I);
-	__m128 sub2 = _mm_sub_ps(mul5, mul4);
-
-	return sub2;
-}

+ 0 - 36
glm/core/intrinsic_matrix.hpp

@@ -1,36 +0,0 @@
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// OpenGL Mathematics Copyright (c) 2005 - 2010 G-Truc Creation (www.g-truc.net)
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// Created : 2009-06-05
-// Updated : 2009-06-05
-// Licence : This source is under MIT License
-// File    : glm/core/intrinsic_common.hpp
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-#ifndef GLM_DETAIL_INTRINSIC_MATRIX_INCLUDED
-#define GLM_DETAIL_INTRINSIC_MATRIX_INCLUDED
-
-#include "../glm.hpp"
-
-#include <xmmintrin.h>
-#include <emmintrin.h>
-
-void _mm_add_ps(__m128 in1[4], __m128 in2[4], __m128 out[4]);
-
-void _mm_sub_ps(__m128 in1[4], __m128 in2[4], __m128 out[4]);
-
-__m128 _mm_mul_ps(__m128 m[4], __m128 v);
-
-__m128 _mm_mul_ps(__m128 v, __m128 m[4]);
-
-void _mm_mul_ps(__m128 const in1[4], __m128 const in2[4], __m128 out[4]);
-
-void _mm_transpose_ps(__m128 const in[4], __m128 out[4]);
-
-void _mm_inverse_ps(__m128 const in[4], __m128 out[4]);
-
-void _mm_rotate_ps(__m128 const in[4], float Angle, float const v[3], __m128 out[4]);
-
-#include "intrinsic_matrix.inl"
-
-#endif//GLM_DETAIL_INTRINSIC_MATRIX_INCLUDED

+ 0 - 704
glm/core/intrinsic_matrix.inl

@@ -1,704 +0,0 @@
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// OpenGL Mathematics Copyright (c) 2005 - 2010 G-Truc Creation (www.g-truc.net)
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// Created : 2009-06-05
-// Updated : 2009-06-05
-// Licence : This source is under MIT License
-// File    : glm/core/intrinsic_common.inl
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-static const __m128 one = _mm_set_ps1(1.0f);
-static const __m128 pi = _mm_set_ps1(3.141592653589793238462643383279f);
-static const __m128 _m128_rad_ps = _mm_set_ps1(3.141592653589793238462643383279f / 180.f);
-static const __m128 _m128_deg_ps = _mm_set_ps1(180.f / 3.141592653589793238462643383279f);
-
-inline void _mm_add_ps(__m128 in1[4], __m128 in2[4], __m128 out[4])
-{
-	{
-		out[0] = _mm_add_ps(in1[0], in2[0]);
-		out[1] = _mm_add_ps(in1[1], in2[1]);
-		out[2] = _mm_add_ps(in1[2], in2[2]);
-		out[3] = _mm_add_ps(in1[3], in2[3]);
-	}
-}
-
-inline void _mm_sub_ps(__m128 in1[4], __m128 in2[4], __m128 out[4])
-{
-	{
-		out[0] = _mm_sub_ps(in1[0], in2[0]);
-		out[1] = _mm_sub_ps(in1[1], in2[1]);
-		out[2] = _mm_sub_ps(in1[2], in2[2]);
-		out[3] = _mm_sub_ps(in1[3], in2[3]);
-	}
-}
-
-inline __m128 _mm_mul_ps(__m128 m[4], __m128 v)
-{
-	__m128 v0 = _mm_shuffle_ps(v, v, _MM_SHUFFLE(0, 0, 0, 0));
-	__m128 v1 = _mm_shuffle_ps(v, v, _MM_SHUFFLE(1, 1, 1, 1));
-	__m128 v2 = _mm_shuffle_ps(v, v, _MM_SHUFFLE(2, 2, 2, 2));
-	__m128 v3 = _mm_shuffle_ps(v, v, _MM_SHUFFLE(3, 3, 3, 3));
-
-	__m128 m0 = _mm_mul_ps(m[0], v0);
-	__m128 m1 = _mm_mul_ps(m[1], v1);
-	__m128 m2 = _mm_mul_ps(m[2], v2);
-	__m128 m3 = _mm_mul_ps(m[3], v3);
-
-	__m128 a0 = _mm_add_ps(m0, m1);
-	__m128 a1 = _mm_add_ps(m2, m3);
-	__m128 a2 = _mm_add_ps(a0, a1);
-
-	return a2;
-}
-
-inline __m128 _mm_mul_ps(__m128 v, __m128 m[4])
-{
-	__m128 i0 = m[0];
-	__m128 i1 = m[1];
-	__m128 i2 = m[2];
-	__m128 i3 = m[3];
-
-	__m128 m0 = _mm_mul_ps(v, i0);
-	__m128 m1 = _mm_mul_ps(v, i1);
-	__m128 m2 = _mm_mul_ps(v, i2);
-	__m128 m3 = _mm_mul_ps(v, i3);
-
-	__m128 u0 = _mm_unpacklo_ps(m0, m1);
-	__m128 u1 = _mm_unpackhi_ps(m0, m1);
-	__m128 a0 = _mm_add_ps(u0, u1);
-
-	__m128 u2 = _mm_unpacklo_ps(m2, m3);
-	__m128 u3 = _mm_unpackhi_ps(m2, m3);
-	__m128 a1 = _mm_add_ps(u2, u3);
-
-	__m128 f0 = _mm_movelh_ps(a0, a1);
-	__m128 f1 = _mm_movehl_ps(a1, a0);
-	__m128 f2 = _mm_add_ps(f0, f1);
-
-	return f2;
-}
-
-inline void _mm_mul_ps(__m128 const in1[4], __m128 const in2[4], __m128 out[4])
-{
-	{
-		__m128 e0 = _mm_shuffle_ps(in2[0], in2[0], _MM_SHUFFLE(0, 0, 0, 0));
-		__m128 e1 = _mm_shuffle_ps(in2[0], in2[0], _MM_SHUFFLE(1, 1, 1, 1));
-		__m128 e2 = _mm_shuffle_ps(in2[0], in2[0], _MM_SHUFFLE(2, 2, 2, 2));
-		__m128 e3 = _mm_shuffle_ps(in2[0], in2[0], _MM_SHUFFLE(3, 3, 3, 3));
-
-		__m128 m0 = _mm_mul_ps(in1[0], e0);
-		__m128 m1 = _mm_mul_ps(in1[1], e1);
-		__m128 m2 = _mm_mul_ps(in1[2], e2);
-		__m128 m3 = _mm_mul_ps(in1[3], e3);
-
-		__m128 a0 = _mm_add_ps(m0, m1);
-		__m128 a1 = _mm_add_ps(m2, m3);
-		__m128 a2 = _mm_add_ps(a0, a1);
-
-		out[0] = a2;
-	}
-
-	{
-		__m128 e0 = _mm_shuffle_ps(in2[1], in2[1], _MM_SHUFFLE(0, 0, 0, 0));
-		__m128 e1 = _mm_shuffle_ps(in2[1], in2[1], _MM_SHUFFLE(1, 1, 1, 1));
-		__m128 e2 = _mm_shuffle_ps(in2[1], in2[1], _MM_SHUFFLE(2, 2, 2, 2));
-		__m128 e3 = _mm_shuffle_ps(in2[1], in2[1], _MM_SHUFFLE(3, 3, 3, 3));
-
-		__m128 m0 = _mm_mul_ps(in1[0], e0);
-		__m128 m1 = _mm_mul_ps(in1[1], e1);
-		__m128 m2 = _mm_mul_ps(in1[2], e2);
-		__m128 m3 = _mm_mul_ps(in1[3], e3);
-
-		__m128 a0 = _mm_add_ps(m0, m1);
-		__m128 a1 = _mm_add_ps(m2, m3);
-		__m128 a2 = _mm_add_ps(a0, a1);
-
-		out[1] = a2;
-	}
-
-	{
-		__m128 e0 = _mm_shuffle_ps(in2[2], in2[2], _MM_SHUFFLE(0, 0, 0, 0));
-		__m128 e1 = _mm_shuffle_ps(in2[2], in2[2], _MM_SHUFFLE(1, 1, 1, 1));
-		__m128 e2 = _mm_shuffle_ps(in2[2], in2[2], _MM_SHUFFLE(2, 2, 2, 2));
-		__m128 e3 = _mm_shuffle_ps(in2[2], in2[2], _MM_SHUFFLE(3, 3, 3, 3));
-
-		__m128 m0 = _mm_mul_ps(in1[0], e0);
-		__m128 m1 = _mm_mul_ps(in1[1], e1);
-		__m128 m2 = _mm_mul_ps(in1[2], e2);
-		__m128 m3 = _mm_mul_ps(in1[3], e3);
-
-		__m128 a0 = _mm_add_ps(m0, m1);
-		__m128 a1 = _mm_add_ps(m2, m3);
-		__m128 a2 = _mm_add_ps(a0, a1);
-
-		out[2] = a2;
-	}
-
-	{
-		//(__m128&)_mm_shuffle_epi32(__m128i&)in2[0], _MM_SHUFFLE(3, 3, 3, 3))
-		__m128 e0 = _mm_shuffle_ps(in2[3], in2[3], _MM_SHUFFLE(0, 0, 0, 0));
-		__m128 e1 = _mm_shuffle_ps(in2[3], in2[3], _MM_SHUFFLE(1, 1, 1, 1));
-		__m128 e2 = _mm_shuffle_ps(in2[3], in2[3], _MM_SHUFFLE(2, 2, 2, 2));
-		__m128 e3 = _mm_shuffle_ps(in2[3], in2[3], _MM_SHUFFLE(3, 3, 3, 3));
-
-		__m128 m0 = _mm_mul_ps(in1[0], e0);
-		__m128 m1 = _mm_mul_ps(in1[1], e1);
-		__m128 m2 = _mm_mul_ps(in1[2], e2);
-		__m128 m3 = _mm_mul_ps(in1[3], e3);
-
-		__m128 a0 = _mm_add_ps(m0, m1);
-		__m128 a1 = _mm_add_ps(m2, m3);
-		__m128 a2 = _mm_add_ps(a0, a1);
-
-		out[3] = a2;
-	}
-}
-
-inline void _mm_transpose_ps(__m128 const in[4], __m128 out[4])
-{
-    __m128 tmp0 = _mm_shuffle_ps(in[0], in[1], 0x44);
-    __m128 tmp2 = _mm_shuffle_ps(in[0], in[1], 0xEE);
-    __m128 tmp1 = _mm_shuffle_ps(in[2], in[3], 0x44);
-    __m128 tmp3 = _mm_shuffle_ps(in[2], in[3], 0xEE);
-
-    out[0] = _mm_shuffle_ps(tmp0, tmp1, 0x88);
-    out[1] = _mm_shuffle_ps(tmp0, tmp1, 0xDD);
-    out[2] = _mm_shuffle_ps(tmp2, tmp3, 0x88);
-    out[3] = _mm_shuffle_ps(tmp2, tmp3, 0xDD);
-}
-
-inline void _mm_inverse_ps(__m128 const in[4], __m128 out[4])
-{
-	__m128 Fac0;
-	{
-		//	valType SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3];
-		//	valType SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3];
-		//	valType SubFactor06 = m[1][2] * m[3][3] - m[3][2] * m[1][3];
-		//	valType SubFactor13 = m[1][2] * m[2][3] - m[2][2] * m[1][3];
-
-		__m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3));
-		__m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2));
-
-		__m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2));
-		__m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));
-		__m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));
-		__m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3));
-
-		__m128 Mul00 = _mm_mul_ps(Swp00, Swp01);
-		__m128 Mul01 = _mm_mul_ps(Swp02, Swp03);
-		Fac0 = _mm_sub_ps(Mul00, Mul01);
-
-		bool stop = true;
-	}
-
-	__m128 Fac1;
-	{
-		//	valType SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3];
-		//	valType SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3];
-		//	valType SubFactor07 = m[1][1] * m[3][3] - m[3][1] * m[1][3];
-		//	valType SubFactor14 = m[1][1] * m[2][3] - m[2][1] * m[1][3];
-
-		__m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3));
-		__m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1));
-
-		__m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1));
-		__m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));
-		__m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));
-		__m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3));
-
-		__m128 Mul00 = _mm_mul_ps(Swp00, Swp01);
-		__m128 Mul01 = _mm_mul_ps(Swp02, Swp03);
-		Fac1 = _mm_sub_ps(Mul00, Mul01);
-
-		bool stop = true;
-	}
-
-
-	__m128 Fac2;
-	{
-		//	valType SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2];
-		//	valType SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2];
-		//	valType SubFactor08 = m[1][1] * m[3][2] - m[3][1] * m[1][2];
-		//	valType SubFactor15 = m[1][1] * m[2][2] - m[2][1] * m[1][2];
-
-		__m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2));
-		__m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1));
-
-		__m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1));
-		__m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));
-		__m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));
-		__m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2));
-
-		__m128 Mul00 = _mm_mul_ps(Swp00, Swp01);
-		__m128 Mul01 = _mm_mul_ps(Swp02, Swp03);
-		Fac2 = _mm_sub_ps(Mul00, Mul01);
-
-		bool stop = true;
-	}
-
-	__m128 Fac3;
-	{
-		//	valType SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3];
-		//	valType SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3];
-		//	valType SubFactor09 = m[1][0] * m[3][3] - m[3][0] * m[1][3];
-		//	valType SubFactor16 = m[1][0] * m[2][3] - m[2][0] * m[1][3];
-
-		__m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3));
-		__m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0));
-
-		__m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0));
-		__m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));
-		__m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));
-		__m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3));
-
-		__m128 Mul00 = _mm_mul_ps(Swp00, Swp01);
-		__m128 Mul01 = _mm_mul_ps(Swp02, Swp03);
-		Fac3 = _mm_sub_ps(Mul00, Mul01);
-
-		bool stop = true;
-	}
-
-	__m128 Fac4;
-	{
-		//	valType SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2];
-		//	valType SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2];
-		//	valType SubFactor10 = m[1][0] * m[3][2] - m[3][0] * m[1][2];
-		//	valType SubFactor17 = m[1][0] * m[2][2] - m[2][0] * m[1][2];
-
-		__m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2));
-		__m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0));
-
-		__m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0));
-		__m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));
-		__m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));
-		__m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2));
-
-		__m128 Mul00 = _mm_mul_ps(Swp00, Swp01);
-		__m128 Mul01 = _mm_mul_ps(Swp02, Swp03);
-		Fac4 = _mm_sub_ps(Mul00, Mul01);
-
-		bool stop = true;
-	}
-
-	__m128 Fac5;
-	{
-		//	valType SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1];
-		//	valType SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1];
-		//	valType SubFactor12 = m[1][0] * m[3][1] - m[3][0] * m[1][1];
-		//	valType SubFactor18 = m[1][0] * m[2][1] - m[2][0] * m[1][1];
-
-		__m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1));
-		__m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0));
-
-		__m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0));
-		__m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));
-		__m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));
-		__m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1));
-
-		__m128 Mul00 = _mm_mul_ps(Swp00, Swp01);
-		__m128 Mul01 = _mm_mul_ps(Swp02, Swp03);
-		Fac5 = _mm_sub_ps(Mul00, Mul01);
-
-		bool stop = true;
-	}
-
-	__m128 SignA = _mm_set_ps( 1.0f,-1.0f, 1.0f,-1.0f);
-	__m128 SignB = _mm_set_ps(-1.0f, 1.0f,-1.0f, 1.0f);
-
-	// m[1][0]
-	// m[0][0]
-	// m[0][0]
-	// m[0][0]
-	__m128 Temp0 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(0, 0, 0, 0));
-	__m128 Vec0 = _mm_shuffle_ps(Temp0, Temp0, _MM_SHUFFLE(2, 2, 2, 0));
-
-	// m[1][1]
-	// m[0][1]
-	// m[0][1]
-	// m[0][1]
-	__m128 Temp1 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(1, 1, 1, 1));
-	__m128 Vec1 = _mm_shuffle_ps(Temp1, Temp1, _MM_SHUFFLE(2, 2, 2, 0));
-
-	// m[1][2]
-	// m[0][2]
-	// m[0][2]
-	// m[0][2]
-	__m128 Temp2 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(2, 2, 2, 2));
-	__m128 Vec2 = _mm_shuffle_ps(Temp2, Temp2, _MM_SHUFFLE(2, 2, 2, 0));
-
-	// m[1][3]
-	// m[0][3]
-	// m[0][3]
-	// m[0][3]
-	__m128 Temp3 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(3, 3, 3, 3));
-	__m128 Vec3 = _mm_shuffle_ps(Temp3, Temp3, _MM_SHUFFLE(2, 2, 2, 0));
-
-	// col0
-	// + (Vec1[0] * Fac0[0] - Vec2[0] * Fac1[0] + Vec3[0] * Fac2[0]),
-	// - (Vec1[1] * Fac0[1] - Vec2[1] * Fac1[1] + Vec3[1] * Fac2[1]),
-	// + (Vec1[2] * Fac0[2] - Vec2[2] * Fac1[2] + Vec3[2] * Fac2[2]),
-	// - (Vec1[3] * Fac0[3] - Vec2[3] * Fac1[3] + Vec3[3] * Fac2[3]),
-	__m128 Mul00 = _mm_mul_ps(Vec1, Fac0);
-	__m128 Mul01 = _mm_mul_ps(Vec2, Fac1);
-	__m128 Mul02 = _mm_mul_ps(Vec3, Fac2);
-	__m128 Sub00 = _mm_sub_ps(Mul00, Mul01);
-	__m128 Add00 = _mm_add_ps(Sub00, Mul02);
-	__m128 Inv0 = _mm_mul_ps(SignB, Add00);
-
-	// col1
-	// - (Vec0[0] * Fac0[0] - Vec2[0] * Fac3[0] + Vec3[0] * Fac4[0]),
-	// + (Vec0[0] * Fac0[1] - Vec2[1] * Fac3[1] + Vec3[1] * Fac4[1]),
-	// - (Vec0[0] * Fac0[2] - Vec2[2] * Fac3[2] + Vec3[2] * Fac4[2]),
-	// + (Vec0[0] * Fac0[3] - Vec2[3] * Fac3[3] + Vec3[3] * Fac4[3]),
-	__m128 Mul03 = _mm_mul_ps(Vec0, Fac0);
-	__m128 Mul04 = _mm_mul_ps(Vec2, Fac3);
-	__m128 Mul05 = _mm_mul_ps(Vec3, Fac4);
-	__m128 Sub01 = _mm_sub_ps(Mul03, Mul04);
-	__m128 Add01 = _mm_add_ps(Sub01, Mul05);
-	__m128 Inv1 = _mm_mul_ps(SignA, Add01);
-
-	// col2
-	// + (Vec0[0] * Fac1[0] - Vec1[0] * Fac3[0] + Vec3[0] * Fac5[0]),
-	// - (Vec0[0] * Fac1[1] - Vec1[1] * Fac3[1] + Vec3[1] * Fac5[1]),
-	// + (Vec0[0] * Fac1[2] - Vec1[2] * Fac3[2] + Vec3[2] * Fac5[2]),
-	// - (Vec0[0] * Fac1[3] - Vec1[3] * Fac3[3] + Vec3[3] * Fac5[3]),
-	__m128 Mul06 = _mm_mul_ps(Vec0, Fac1);
-	__m128 Mul07 = _mm_mul_ps(Vec1, Fac3);
-	__m128 Mul08 = _mm_mul_ps(Vec3, Fac5);
-	__m128 Sub02 = _mm_sub_ps(Mul06, Mul07);
-	__m128 Add02 = _mm_add_ps(Sub02, Mul08);
-	__m128 Inv2 = _mm_mul_ps(SignB, Add02);
-
-	// col3
-	// - (Vec1[0] * Fac2[0] - Vec1[0] * Fac4[0] + Vec2[0] * Fac5[0]),
-	// + (Vec1[0] * Fac2[1] - Vec1[1] * Fac4[1] + Vec2[1] * Fac5[1]),
-	// - (Vec1[0] * Fac2[2] - Vec1[2] * Fac4[2] + Vec2[2] * Fac5[2]),
-	// + (Vec1[0] * Fac2[3] - Vec1[3] * Fac4[3] + Vec2[3] * Fac5[3]));
-	__m128 Mul09 = _mm_mul_ps(Vec0, Fac2);
-	__m128 Mul10 = _mm_mul_ps(Vec1, Fac4);
-	__m128 Mul11 = _mm_mul_ps(Vec2, Fac5);
-	__m128 Sub03 = _mm_sub_ps(Mul09, Mul10);
-	__m128 Add03 = _mm_add_ps(Sub03, Mul11);
-	__m128 Inv3 = _mm_mul_ps(SignA, Add03);
-
-	__m128 Row0 = _mm_shuffle_ps(Inv0, Inv1, _MM_SHUFFLE(0, 0, 0, 0));
-	__m128 Row1 = _mm_shuffle_ps(Inv2, Inv3, _MM_SHUFFLE(0, 0, 0, 0));
-	__m128 Row2 = _mm_shuffle_ps(Row0, Row1, _MM_SHUFFLE(2, 0, 2, 0));
-
-	//	valType Determinant = m[0][0] * Inverse[0][0] 
-	//						+ m[0][1] * Inverse[1][0] 
-	//						+ m[0][2] * Inverse[2][0] 
-	//						+ m[0][3] * Inverse[3][0];
-	__m128 Det0 = _mm_dot_ps(in[0], Row2);
-	__m128 Rcp0 = _mm_div_ps(one, Det0);
-	//__m128 Rcp0 = _mm_rcp_ps(Det0);
-
-	//	Inverse /= Determinant;
-	out[0] = _mm_mul_ps(Inv0, Rcp0);
-	out[1] = _mm_mul_ps(Inv1, Rcp0);
-	out[2] = _mm_mul_ps(Inv2, Rcp0);
-	out[3] = _mm_mul_ps(Inv3, Rcp0);
-}
-
-inline void _mm_inverse_fast_ps(__m128 const in[4], __m128 out[4])
-{
-	__m128 Fac0;
-	{
-		//	valType SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3];
-		//	valType SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3];
-		//	valType SubFactor06 = m[1][2] * m[3][3] - m[3][2] * m[1][3];
-		//	valType SubFactor13 = m[1][2] * m[2][3] - m[2][2] * m[1][3];
-
-		__m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3));
-		__m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2));
-
-		__m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2));
-		__m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));
-		__m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));
-		__m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3));
-
-		__m128 Mul00 = _mm_mul_ps(Swp00, Swp01);
-		__m128 Mul01 = _mm_mul_ps(Swp02, Swp03);
-		Fac0 = _mm_sub_ps(Mul00, Mul01);
-
-		bool stop = true;
-	}
-
-	__m128 Fac1;
-	{
-		//	valType SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3];
-		//	valType SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3];
-		//	valType SubFactor07 = m[1][1] * m[3][3] - m[3][1] * m[1][3];
-		//	valType SubFactor14 = m[1][1] * m[2][3] - m[2][1] * m[1][3];
-
-		__m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3));
-		__m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1));
-
-		__m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1));
-		__m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));
-		__m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));
-		__m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3));
-
-		__m128 Mul00 = _mm_mul_ps(Swp00, Swp01);
-		__m128 Mul01 = _mm_mul_ps(Swp02, Swp03);
-		Fac1 = _mm_sub_ps(Mul00, Mul01);
-
-		bool stop = true;
-	}
-
-
-	__m128 Fac2;
-	{
-		//	valType SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2];
-		//	valType SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2];
-		//	valType SubFactor08 = m[1][1] * m[3][2] - m[3][1] * m[1][2];
-		//	valType SubFactor15 = m[1][1] * m[2][2] - m[2][1] * m[1][2];
-
-		__m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2));
-		__m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1));
-
-		__m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1));
-		__m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));
-		__m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));
-		__m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2));
-
-		__m128 Mul00 = _mm_mul_ps(Swp00, Swp01);
-		__m128 Mul01 = _mm_mul_ps(Swp02, Swp03);
-		Fac2 = _mm_sub_ps(Mul00, Mul01);
-
-		bool stop = true;
-	}
-
-	__m128 Fac3;
-	{
-		//	valType SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3];
-		//	valType SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3];
-		//	valType SubFactor09 = m[1][0] * m[3][3] - m[3][0] * m[1][3];
-		//	valType SubFactor16 = m[1][0] * m[2][3] - m[2][0] * m[1][3];
-
-		__m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3));
-		__m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0));
-
-		__m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0));
-		__m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));
-		__m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));
-		__m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3));
-
-		__m128 Mul00 = _mm_mul_ps(Swp00, Swp01);
-		__m128 Mul01 = _mm_mul_ps(Swp02, Swp03);
-		Fac3 = _mm_sub_ps(Mul00, Mul01);
-
-		bool stop = true;
-	}
-
-	__m128 Fac4;
-	{
-		//	valType SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2];
-		//	valType SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2];
-		//	valType SubFactor10 = m[1][0] * m[3][2] - m[3][0] * m[1][2];
-		//	valType SubFactor17 = m[1][0] * m[2][2] - m[2][0] * m[1][2];
-
-		__m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2));
-		__m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0));
-
-		__m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0));
-		__m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));
-		__m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));
-		__m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2));
-
-		__m128 Mul00 = _mm_mul_ps(Swp00, Swp01);
-		__m128 Mul01 = _mm_mul_ps(Swp02, Swp03);
-		Fac4 = _mm_sub_ps(Mul00, Mul01);
-
-		bool stop = true;
-	}
-
-	__m128 Fac5;
-	{
-		//	valType SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1];
-		//	valType SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1];
-		//	valType SubFactor12 = m[1][0] * m[3][1] - m[3][0] * m[1][1];
-		//	valType SubFactor18 = m[1][0] * m[2][1] - m[2][0] * m[1][1];
-
-		__m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1));
-		__m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0));
-
-		__m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0));
-		__m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));
-		__m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));
-		__m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1));
-
-		__m128 Mul00 = _mm_mul_ps(Swp00, Swp01);
-		__m128 Mul01 = _mm_mul_ps(Swp02, Swp03);
-		Fac5 = _mm_sub_ps(Mul00, Mul01);
-
-		bool stop = true;
-	}
-
-	__m128 SignA = _mm_set_ps( 1.0f,-1.0f, 1.0f,-1.0f);
-	__m128 SignB = _mm_set_ps(-1.0f, 1.0f,-1.0f, 1.0f);
-
-	// m[1][0]
-	// m[0][0]
-	// m[0][0]
-	// m[0][0]
-	__m128 Temp0 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(0, 0, 0, 0));
-	__m128 Vec0 = _mm_shuffle_ps(Temp0, Temp0, _MM_SHUFFLE(2, 2, 2, 0));
-
-	// m[1][1]
-	// m[0][1]
-	// m[0][1]
-	// m[0][1]
-	__m128 Temp1 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(1, 1, 1, 1));
-	__m128 Vec1 = _mm_shuffle_ps(Temp1, Temp1, _MM_SHUFFLE(2, 2, 2, 0));
-
-	// m[1][2]
-	// m[0][2]
-	// m[0][2]
-	// m[0][2]
-	__m128 Temp2 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(2, 2, 2, 2));
-	__m128 Vec2 = _mm_shuffle_ps(Temp2, Temp2, _MM_SHUFFLE(2, 2, 2, 0));
-
-	// m[1][3]
-	// m[0][3]
-	// m[0][3]
-	// m[0][3]
-	__m128 Temp3 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(3, 3, 3, 3));
-	__m128 Vec3 = _mm_shuffle_ps(Temp3, Temp3, _MM_SHUFFLE(2, 2, 2, 0));
-
-	// col0
-	// + (Vec1[0] * Fac0[0] - Vec2[0] * Fac1[0] + Vec3[0] * Fac2[0]),
-	// - (Vec1[1] * Fac0[1] - Vec2[1] * Fac1[1] + Vec3[1] * Fac2[1]),
-	// + (Vec1[2] * Fac0[2] - Vec2[2] * Fac1[2] + Vec3[2] * Fac2[2]),
-	// - (Vec1[3] * Fac0[3] - Vec2[3] * Fac1[3] + Vec3[3] * Fac2[3]),
-	__m128 Mul00 = _mm_mul_ps(Vec1, Fac0);
-	__m128 Mul01 = _mm_mul_ps(Vec2, Fac1);
-	__m128 Mul02 = _mm_mul_ps(Vec3, Fac2);
-	__m128 Sub00 = _mm_sub_ps(Mul00, Mul01);
-	__m128 Add00 = _mm_add_ps(Sub00, Mul02);
-	__m128 Inv0 = _mm_mul_ps(SignB, Add00);
-
-	// col1
-	// - (Vec0[0] * Fac0[0] - Vec2[0] * Fac3[0] + Vec3[0] * Fac4[0]),
-	// + (Vec0[0] * Fac0[1] - Vec2[1] * Fac3[1] + Vec3[1] * Fac4[1]),
-	// - (Vec0[0] * Fac0[2] - Vec2[2] * Fac3[2] + Vec3[2] * Fac4[2]),
-	// + (Vec0[0] * Fac0[3] - Vec2[3] * Fac3[3] + Vec3[3] * Fac4[3]),
-	__m128 Mul03 = _mm_mul_ps(Vec0, Fac0);
-	__m128 Mul04 = _mm_mul_ps(Vec2, Fac3);
-	__m128 Mul05 = _mm_mul_ps(Vec3, Fac4);
-	__m128 Sub01 = _mm_sub_ps(Mul03, Mul04);
-	__m128 Add01 = _mm_add_ps(Sub01, Mul05);
-	__m128 Inv1 = _mm_mul_ps(SignA, Add01);
-
-	// col2
-	// + (Vec0[0] * Fac1[0] - Vec1[0] * Fac3[0] + Vec3[0] * Fac5[0]),
-	// - (Vec0[0] * Fac1[1] - Vec1[1] * Fac3[1] + Vec3[1] * Fac5[1]),
-	// + (Vec0[0] * Fac1[2] - Vec1[2] * Fac3[2] + Vec3[2] * Fac5[2]),
-	// - (Vec0[0] * Fac1[3] - Vec1[3] * Fac3[3] + Vec3[3] * Fac5[3]),
-	__m128 Mul06 = _mm_mul_ps(Vec0, Fac1);
-	__m128 Mul07 = _mm_mul_ps(Vec1, Fac3);
-	__m128 Mul08 = _mm_mul_ps(Vec3, Fac5);
-	__m128 Sub02 = _mm_sub_ps(Mul06, Mul07);
-	__m128 Add02 = _mm_add_ps(Sub02, Mul08);
-	__m128 Inv2 = _mm_mul_ps(SignB, Add02);
-
-	// col3
-	// - (Vec1[0] * Fac2[0] - Vec1[0] * Fac4[0] + Vec2[0] * Fac5[0]),
-	// + (Vec1[0] * Fac2[1] - Vec1[1] * Fac4[1] + Vec2[1] * Fac5[1]),
-	// - (Vec1[0] * Fac2[2] - Vec1[2] * Fac4[2] + Vec2[2] * Fac5[2]),
-	// + (Vec1[0] * Fac2[3] - Vec1[3] * Fac4[3] + Vec2[3] * Fac5[3]));
-	__m128 Mul09 = _mm_mul_ps(Vec0, Fac2);
-	__m128 Mul10 = _mm_mul_ps(Vec1, Fac4);
-	__m128 Mul11 = _mm_mul_ps(Vec2, Fac5);
-	__m128 Sub03 = _mm_sub_ps(Mul09, Mul10);
-	__m128 Add03 = _mm_add_ps(Sub03, Mul11);
-	__m128 Inv3 = _mm_mul_ps(SignA, Add03);
-
-	__m128 Row0 = _mm_shuffle_ps(Inv0, Inv1, _MM_SHUFFLE(0, 0, 0, 0));
-	__m128 Row1 = _mm_shuffle_ps(Inv2, Inv3, _MM_SHUFFLE(0, 0, 0, 0));
-	__m128 Row2 = _mm_shuffle_ps(Row0, Row1, _MM_SHUFFLE(2, 0, 2, 0));
-
-	//	valType Determinant = m[0][0] * Inverse[0][0] 
-	//						+ m[0][1] * Inverse[1][0] 
-	//						+ m[0][2] * Inverse[2][0] 
-	//						+ m[0][3] * Inverse[3][0];
-	__m128 Det0 = _mm_dot_ps(in[0], Row2);
-	__m128 Rcp0 = _mm_rcp_ps(Det0);
-	//__m128 Rcp0 = _mm_div_ps(one, Det0);
-	//	Inverse /= Determinant;
-	out[0] = _mm_mul_ps(Inv0, Rcp0);
-	out[1] = _mm_mul_ps(Inv1, Rcp0);
-	out[2] = _mm_mul_ps(Inv2, Rcp0);
-	out[3] = _mm_mul_ps(Inv3, Rcp0);
-}
-
-
-void _mm_rotate_ps(__m128 const in[4], float Angle, float const v[3], __m128 out[4])
-{
-	float a = glm::radians(Angle);
-    float c = cos(a);
-    float s = sin(a);
-
-	glm::vec4 AxisA(v[0], v[1], v[2], float(0));
-	__m128 AxisB = _mm_set_ps(AxisA.w, AxisA.z, AxisA.y, AxisA.x);
-    __m128 AxisC = _mm_nrm_ps(AxisB);
-
-	__m128 Cos0 = _mm_set_ss(c);
-	__m128 CosA = _mm_shuffle_ps(Cos0, Cos0, _MM_SHUFFLE(0, 0, 0, 0));
-	__m128 Sin0 = _mm_set_ss(s);
-	__m128 SinA = _mm_shuffle_ps(Sin0, Sin0, _MM_SHUFFLE(0, 0, 0, 0));
-
-	// detail::tvec3<valType> temp = (valType(1) - c) * axis;
-	__m128 Temp0 = _mm_sub_ps(one, CosA);
-	__m128 Temp1 = _mm_mul_ps(Temp0, AxisC);
-	
-	//Rotate[0][0] = c + temp[0] * axis[0];
-	//Rotate[0][1] = 0 + temp[0] * axis[1] + s * axis[2];
-	//Rotate[0][2] = 0 + temp[0] * axis[2] - s * axis[1];
-	__m128 Axis0 = _mm_shuffle_ps(AxisC, AxisC, _MM_SHUFFLE(0, 0, 0, 0));
-	__m128 TmpA0 = _mm_mul_ps(Axis0, AxisC);
-	__m128 CosA0 = _mm_shuffle_ps(Cos0, Cos0, _MM_SHUFFLE(1, 1, 1, 0));
-	__m128 TmpA1 = _mm_add_ps(CosA0, TmpA0);
-	__m128 SinA0 = SinA;//_mm_set_ps(0.0f, s, -s, 0.0f);
-	__m128 TmpA2 = _mm_shuffle_ps(AxisC, AxisC, _MM_SHUFFLE(3, 1, 2, 3));
-	__m128 TmpA3 = _mm_mul_ps(SinA0, TmpA2);
-	__m128 TmpA4 = _mm_add_ps(TmpA1, TmpA3);
-
-	//Rotate[1][0] = 0 + temp[1] * axis[0] - s * axis[2];
-	//Rotate[1][1] = c + temp[1] * axis[1];
-	//Rotate[1][2] = 0 + temp[1] * axis[2] + s * axis[0];
-	__m128 Axis1 = _mm_shuffle_ps(AxisC, AxisC, _MM_SHUFFLE(1, 1, 1, 1));
-	__m128 TmpB0 = _mm_mul_ps(Axis1, AxisC);
-	__m128 CosA1 = _mm_shuffle_ps(Cos0, Cos0, _MM_SHUFFLE(1, 1, 0, 1));
-	__m128 TmpB1 = _mm_add_ps(CosA1, TmpB0);
-	__m128 SinB0 = SinA;//_mm_set_ps(-s, 0.0f, s, 0.0f);
-	__m128 TmpB2 = _mm_shuffle_ps(AxisC, AxisC, _MM_SHUFFLE(3, 0, 3, 2));
-	__m128 TmpB3 = _mm_mul_ps(SinA0, TmpB2);
-	__m128 TmpB4 = _mm_add_ps(TmpB1, TmpB3);
-
-    //Rotate[2][0] = 0 + temp[2] * axis[0] + s * axis[1];
-    //Rotate[2][1] = 0 + temp[2] * axis[1] - s * axis[0];
-    //Rotate[2][2] = c + temp[2] * axis[2];
-	__m128 Axis2 = _mm_shuffle_ps(AxisC, AxisC, _MM_SHUFFLE(2, 2, 2, 2));
-	__m128 TmpC0 = _mm_mul_ps(Axis2, AxisC);
-	__m128 CosA2 = _mm_shuffle_ps(Cos0, Cos0, _MM_SHUFFLE(1, 0, 1, 1));
-	__m128 TmpC1 = _mm_add_ps(CosA2, TmpC0);
-	__m128 SinC0 = SinA;//_mm_set_ps(s, -s, 0.0f, 0.0f);
-	__m128 TmpC2 = _mm_shuffle_ps(AxisC, AxisC, _MM_SHUFFLE(3, 3, 0, 1));
-	__m128 TmpC3 = _mm_mul_ps(SinA0, TmpC2);
-	__m128 TmpC4 = _mm_add_ps(TmpC1, TmpC3);
-
-	__m128 Result[4];
-	Result[0] = TmpA4;
-	Result[1] = TmpB4;
-	Result[2] = TmpC4;
-	Result[2] = _mm_set_ps(1, 0, 0, 0);
-
-	//detail::tmat4x4<valType> Result(detail::tmat4x4<valType>::null);
-	//Result[0] = m[0] * Rotate[0][0] + m[1] * Rotate[0][1] + m[2] * Rotate[0][2];
-	//Result[1] = m[0] * Rotate[1][0] + m[1] * Rotate[1][1] + m[2] * Rotate[1][2];
-	//Result[2] = m[0] * Rotate[2][0] + m[1] * Rotate[2][1] + m[2] * Rotate[2][2];
-	//Result[3] = m[3];
-	//return Result;
-	_mm_mul_ps(in, Result, out);
-}

+ 0 - 0
glm/core/intrinsic_trigonometric.hpp


+ 0 - 0
glm/core/intrinsic_trigonometric.inl


+ 0 - 18
glm/core/intrinsic_vector_relational.hpp

@@ -1,18 +0,0 @@
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// OpenGL Mathematics Copyright (c) 2005 - 2010 G-Truc Creation (www.g-truc.net)
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// Created : 2009-06-09
-// Updated : 2009-06-09
-// Licence : This source is under MIT License
-// File    : glm/core/intrinsic_vector_relational.hpp
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-#ifndef GLM_DETAIL_INTRINSIC_VECTOR_RELATIONAL_INCLUDED
-#define GLM_DETAIL_INTRINSIC_VECTOR_RELATIONAL_INCLUDED
-
-#include <xmmintrin.h>
-#include <emmintrin.h>
-
-#include "intrinsic_vector_relational.inl"
-
-#endif//GLM_DETAIL_INTRINSIC_VECTOR_RELATIONAL_INCLUDED

+ 0 - 347
glm/core/intrinsic_vector_relational.inl

@@ -1,347 +0,0 @@
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// OpenGL Mathematics Copyright (c) 2005 - 2010 G-Truc Creation (www.g-truc.net)
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// Created : 2009-06-09
-// Updated : 2009-06-09
-// Licence : This source is under MIT License
-// File    : glm/core/intrinsic_vector_relational.inl
-///////////////////////////////////////////////////////////////////////////////////////////////////
-//
-//// lessThan
-//template <typename valType>
-//inline typename detail::tvec2<valType>::bool_type lessThan
-//(
-//	detail::tvec2<valType> const & x, 
-//	detail::tvec2<valType> const & y
-//)
-//{
-//	GLM_STATIC_ASSERT(
-//		detail::type<valType>::is_float || 
-//		detail::type<valType>::is_int || 
-//		detail::type<valType>::is_uint);
-//
-//    return typename detail::tvec2<bool>::bool_type(x.x < y.x, x.y < y.y);
-//}
-//
-//template <typename valType>
-//inline typename detail::tvec3<valType>::bool_type lessThan
-//(
-//	detail::tvec3<valType> const & x, 
-//	detail::tvec3<valType> const & y
-//)
-//{
-//	GLM_STATIC_ASSERT(
-//		detail::type<valType>::is_float || 
-//		detail::type<valType>::is_int || 
-//		detail::type<valType>::is_uint);
-//	
-//	return typename detail::tvec3<bool>::bool_type(x.x < y.x, x.y < y.y, x.z < y.z);
-//}
-//
-//template <typename valType>
-//inline typename detail::tvec4<valType>::bool_type lessThan
-//(
-//	detail::tvec4<valType> const & x, 
-//	detail::tvec4<valType> const & y
-//)
-//{
-//	GLM_STATIC_ASSERT(
-//		detail::type<valType>::is_float || 
-//		detail::type<valType>::is_int || 
-//		detail::type<valType>::is_uint);
-//
-//	return typename detail::tvec4<bool>::bool_type(x.x < y.x, x.y < y.y, x.z < y.z, x.w < y.w);
-//}
-//
-//// lessThanEqual
-//template <typename valType>
-//inline typename detail::tvec2<valType>::bool_type lessThanEqual
-//(
-//	detail::tvec2<valType> const & x, 
-//	detail::tvec2<valType> const & y
-//)
-//{
-//	GLM_STATIC_ASSERT(
-//		detail::type<valType>::is_float || 
-//		detail::type<valType>::is_int || 
-//		detail::type<valType>::is_uint);
-//
-//	return typename detail::tvec2<bool>::bool_type(x.x <= y.x, x.y <= y.y);
-//}
-//
-//template <typename valType>
-//inline typename detail::tvec3<valType>::bool_type lessThanEqual
-//(
-//	detail::tvec3<valType> const & x, 
-//	detail::tvec3<valType> const & y
-//)
-//{
-//	GLM_STATIC_ASSERT(
-//		detail::type<valType>::is_float || 
-//		detail::type<valType>::is_int || 
-//		detail::type<valType>::is_uint);
-//	
-//	return typename detail::tvec3<bool>::bool_type(x.x <= y.x, x.y <= y.y, x.z <= y.z);
-//}
-//
-//template <typename valType>
-//inline typename detail::tvec4<valType>::bool_type lessThanEqual
-//(
-//	detail::tvec4<valType> const & x, 
-//	detail::tvec4<valType> const & y
-//)
-//{
-//	GLM_STATIC_ASSERT(
-//		detail::type<valType>::is_float || 
-//		detail::type<valType>::is_int || 
-//		detail::type<valType>::is_uint);
-//	
-//	return typename detail::tvec4<bool>::bool_type(x.x <= y.x, x.y <= y.y, x.z <= y.z, x.w <= y.w);
-//}
-//
-//// greaterThan
-//template <typename valType>
-//inline typename detail::tvec2<valType>::bool_type greaterThan
-//(
-//	detail::tvec2<valType> const & x, 
-//	detail::tvec2<valType> const & y
-//)
-//{
-//	GLM_STATIC_ASSERT(
-//		detail::type<valType>::is_float || 
-//		detail::type<valType>::is_int || 
-//		detail::type<valType>::is_uint);
-//
-//	return typename detail::tvec2<bool>::bool_type(x.x > y.x, x.y > y.y);
-//}
-//
-//template <typename valType>
-//inline typename detail::tvec3<valType>::bool_type greaterThan
-//(
-//	detail::tvec3<valType> const & x, 
-//	detail::tvec3<valType> const & y
-//)
-//{
-//	GLM_STATIC_ASSERT(
-//		detail::type<valType>::is_float || 
-//		detail::type<valType>::is_int || 
-//		detail::type<valType>::is_uint);
-//	
-//	return typename detail::tvec3<bool>::bool_type(x.x > y.x, x.y > y.y, x.z > y.z);
-//}
-//
-//template <typename valType>
-//inline typename detail::tvec4<valType>::bool_type greaterThan
-//(
-//	detail::tvec4<valType> const & x, 
-//	detail::tvec4<valType> const & y
-//)
-//{
-//	GLM_STATIC_ASSERT(
-//		detail::type<valType>::is_float || 
-//		detail::type<valType>::is_int || 
-//		detail::type<valType>::is_uint);
-//	
-//	return typename detail::tvec4<bool>::bool_type(x.x > y.x, x.y > y.y, x.z > y.z, x.w > y.w);
-//}
-//
-//// greaterThanEqual
-//template <typename valType>
-//inline typename detail::tvec2<valType>::bool_type greaterThanEqual
-//(
-//	detail::tvec2<valType> const & x, 
-//	detail::tvec2<valType> const & y
-//)
-//{
-//	GLM_STATIC_ASSERT(
-//		detail::type<valType>::is_float || 
-//		detail::type<valType>::is_int || 
-//		detail::type<valType>::is_uint);
-//
-//	return typename detail::tvec2<bool>::bool_type(x.x >= y.x, x.y >= y.y);
-//}
-//
-//template <typename valType>
-//inline typename detail::tvec3<valType>::bool_type greaterThanEqual
-//(
-//	detail::tvec3<valType> const & x, 
-//	detail::tvec3<valType> const & y
-//)
-//{
-//	GLM_STATIC_ASSERT(
-//		detail::type<valType>::is_float || 
-//		detail::type<valType>::is_int || 
-//		detail::type<valType>::is_uint);
-//
-//	return typename detail::tvec3<bool>::bool_type(x.x >= y.x, x.y >= y.y, x.z >= y.z);
-//}
-//
-//template <typename valType>
-//inline typename detail::tvec4<valType>::bool_type greaterThanEqual
-//(
-//	detail::tvec4<valType> const & x, 
-//	detail::tvec4<valType> const & y
-//)
-//{
-//	GLM_STATIC_ASSERT(
-//		detail::type<valType>::is_float || 
-//		detail::type<valType>::is_int || 
-//		detail::type<valType>::is_uint);
-//
-//	return typename detail::tvec4<bool>::bool_type(x.x >= y.x, x.y >= y.y, x.z >= y.z, x.w >= y.w);
-//}
-//
-//// equal
-//template <typename valType>
-//inline typename detail::tvec2<valType>::bool_type equal
-//(
-//	detail::tvec2<valType> const & x, 
-//	detail::tvec2<valType> const & y
-//)
-//{
-//	GLM_STATIC_ASSERT(
-//		detail::type<valType>::is_float || 
-//		detail::type<valType>::is_int || 
-//		detail::type<valType>::is_uint || 
-//		detail::type<valType>::is_bool);
-//
-//	return typename detail::tvec2<valType>::bool_type(x.x == y.x, x.y == y.y);
-//}
-//
-//template <typename valType>
-//inline typename detail::tvec3<valType>::bool_type equal
-//(
-//	detail::tvec3<valType> const & x, 
-//	detail::tvec3<valType> const & y
-//)
-//{
-//	GLM_STATIC_ASSERT(
-//		detail::type<valType>::is_float || 
-//		detail::type<valType>::is_int || 
-//		detail::type<valType>::is_uint || 
-//		detail::type<valType>::is_bool);
-//
-//	return typename detail::tvec3<valType>::bool_type(x.x == y.x, x.y == y.y, x.z == y.z);
-//}
-//
-//template <typename valType>
-//inline typename detail::tvec4<valType>::bool_type equal
-//(
-//	detail::tvec4<valType> const & x, 
-//	detail::tvec4<valType> const & y
-//)
-//{
-//	GLM_STATIC_ASSERT(
-//		detail::type<valType>::is_float || 
-//		detail::type<valType>::is_int || 
-//		detail::type<valType>::is_uint || 
-//		detail::type<valType>::is_bool);
-//
-//	return typename detail::tvec4<valType>::bool_type(x.x == y.x, x.y == y.y, x.z == y.z, x.w == y.w);
-//}
-//
-//// notEqual
-//template <typename valType>
-//inline typename detail::tvec2<valType>::bool_type notEqual
-//(
-//	detail::tvec2<valType> const & x, 
-//	detail::tvec2<valType> const & y
-//)
-//{
-//	GLM_STATIC_ASSERT(
-//		detail::type<valType>::is_float || 
-//		detail::type<valType>::is_int || 
-//		detail::type<valType>::is_uint || 
-//		detail::type<valType>::is_bool);
-//
-//	return typename detail::tvec2<valType>::bool_type(x.x != y.x, x.y != y.y);
-//}
-//
-//template <typename valType>
-//inline typename detail::tvec3<valType>::bool_type notEqual
-//(
-//	detail::tvec3<valType> const & x, 
-//	detail::tvec3<valType> const & y
-//)
-//{
-//	GLM_STATIC_ASSERT(
-//		detail::type<valType>::is_float || 
-//		detail::type<valType>::is_int || 
-//		detail::type<valType>::is_uint || 
-//		detail::type<valType>::is_bool);
-//
-//	return typename detail::tvec3<valType>::bool_type(x.x != y.x, x.y != y.y, x.z != y.z);
-//}
-//
-//template <typename valType>
-//inline typename detail::tvec4<valType>::bool_type notEqual
-//(
-//	detail::tvec4<valType> const & x, 
-//	detail::tvec4<valType> const & y
-//)
-//{
-//	GLM_STATIC_ASSERT(
-//		detail::type<valType>::is_float || 
-//		detail::type<valType>::is_int || 
-//		detail::type<valType>::is_uint || 
-//		detail::type<valType>::is_bool);
-//
-//	return typename detail::tvec4<valType>::bool_type(x.x != y.x, x.y != y.y, x.z != y.z, x.w != y.w);
-//}
-//
-//// any
-//inline bool any(detail::tvec2<bool> const & x)
-//{
-//	return x.x || x.y;
-//}
-//
-//inline bool any(detail::tvec3<bool> const & x)
-//{
-//    return x.x || x.y || x.z;
-//}
-//
-//inline bool any(detail::tvec4<bool> const & x)
-//{
-//    return x.x || x.y || x.z || x.w;
-//}
-//
-//// all
-//inline bool all(const detail::tvec2<bool>& x)
-//{
-//    return x.x && x.y;
-//}
-//
-//inline bool all(const detail::tvec3<bool>& x)
-//{
-//    return x.x && x.y && x.z;
-//}
-//
-//inline bool all(const detail::tvec4<bool>& x)
-//{
-//    return x.x && x.y && x.z && x.w;
-//}
-//
-//// not
-//inline detail::tvec2<bool>::bool_type not_
-//(
-//	detail::tvec2<bool> const & v
-//)
-//{
-//    return detail::tvec2<bool>::bool_type(!v.x, !v.y);
-//}
-//
-//inline detail::tvec3<bool>::bool_type not_
-//(
-//	detail::tvec3<bool> const & v
-//)
-//{
-//    return detail::tvec3<bool>::bool_type(!v.x, !v.y, !v.z);
-//}
-//
-//inline detail::tvec4<bool>::bool_type not_
-//(
-//	detail::tvec4<bool> const & v
-//)
-//{
-//    return detail::tvec4<bool>::bool_type(!v.x, !v.y, !v.z, !v.w);
-//}

+ 0 - 283
glm/core/type.hpp

@@ -1,283 +0,0 @@
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// OpenGL Mathematics Copyright (c) 2005 - 2010 G-Truc Creation (www.g-truc.net)
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// Created : 2008-01-08
-// Updated : 2008-01-08
-// Licence : This source is under MIT License
-// File    : glm/core/type.hpp
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-#ifndef glm_core_type
-#define glm_core_type
-
-#include "type_half.hpp"
-#include "type_float.hpp"
-#include "type_int.hpp"
-
-#include "type_gentype.hpp"
-
-#include "type_vec1.hpp"
-#include "type_vec2.hpp"
-#include "type_vec3.hpp"
-#include "type_vec4.hpp"
-
-#include "type_mat2x2.hpp"
-#include "type_mat2x3.hpp"
-#include "type_mat2x4.hpp"
-#include "type_mat3x2.hpp"
-#include "type_mat3x3.hpp"
-#include "type_mat3x4.hpp"
-#include "type_mat4x2.hpp"
-#include "type_mat4x3.hpp"
-#include "type_mat4x4.hpp"
-
-namespace glm{
-namespace core{
-namespace type
-{
-	//////////////////////////
-	// Float definition
-
-#if(defined(GLM_PRECISION) && GLM_PRECISION & GLM_PRECISION_HIGHP_FLOAT)
-	typedef precision::highp_vec2		vec2;
-	typedef precision::highp_vec3		vec3;
-	typedef precision::highp_vec4		vec4;
-	typedef precision::highp_mat2x2		mat2x2;
-	typedef precision::highp_mat2x3		mat2x3;
-	typedef precision::highp_mat2x4		mat2x4;
-	typedef precision::highp_mat3x2		mat3x2;
-	typedef precision::highp_mat3x3		mat3x3;
-	typedef precision::highp_mat3x4		mat3x4;
-	typedef precision::highp_mat4x2		mat4x2;
-	typedef precision::highp_mat4x3		mat4x3;
-	typedef precision::highp_mat4x4		mat4x4;
-#elif(defined(GLM_PRECISION) && GLM_PRECISION & GLM_PRECISION_MEDIUMP_FLOAT)
-	typedef precision::mediump_vec2		vec2;
-	typedef precision::mediump_vec3		vec3;
-	typedef precision::mediump_vec4		vec4;
-	typedef precision::mediump_mat2x2	mat2x2;
-	typedef precision::mediump_mat2x3	mat2x3;
-	typedef precision::mediump_mat2x4	mat2x4;
-	typedef precision::mediump_mat3x2	mat3x2;
-	typedef precision::mediump_mat3x3	mat3x3;
-	typedef precision::mediump_mat3x4	mat3x4;
-	typedef precision::mediump_mat4x2	mat4x2;
-	typedef precision::mediump_mat4x3	mat4x3;
-	typedef precision::mediump_mat4x4	mat4x4;
-#elif(defined(GLM_PRECISION) && GLM_PRECISION & GLM_PRECISION_LOWP_FLOAT)
-	typedef precision::lowp_vec2			vec2;
-	typedef precision::lowp_vec3			vec3;
-	typedef precision::lowp_vec4			vec4;
-	typedef precision::lowp_mat2x2			mat2x2;
-	typedef precision::lowp_mat2x3			mat2x3;
-	typedef precision::lowp_mat2x4			mat2x4;
-	typedef precision::lowp_mat3x2			mat3x2;
-	typedef precision::lowp_mat3x3			mat3x3;
-	typedef precision::lowp_mat3x4			mat3x4;
-	typedef precision::lowp_mat4x2			mat4x2;
-	typedef precision::lowp_mat4x3			mat4x3;
-	typedef precision::lowp_mat4x4			mat4x4;
-#else
-	//! 2 components vector of floating-point numbers. 
-	//! From GLSL 1.30.8 specification, section 4.1.5 Vectors.
-	typedef precision::mediump_vec2		vec2;
-
-	//! 3 components vector of floating-point numbers. 
-	//! From GLSL 1.30.8 specification, section 4.1.5 Vectors.
-	typedef precision::mediump_vec3		vec3;
-
-	//! 4 components vector of floating-point numbers. 
-	//! From GLSL 1.30.8 specification, section 4.1.5 Vectors.
-	typedef precision::mediump_vec4		vec4;
-
-	//! 2 columns of 2 components matrix of floating-point numbers. 
-	//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices)
-	typedef precision::mediump_mat2x2		mat2x2;
-
-	//! 2 columns of 3 components matrix of floating-point numbers. 
-	//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices)
-	typedef precision::mediump_mat2x3		mat2x3;
-
-	//! 2 columns of 4 components matrix of floating-point numbers. 
-	//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices)
-	typedef precision::mediump_mat2x4		mat2x4;
-
-	//! 3 columns of 2 components matrix of floating-point numbers. 
-	//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices)
-	typedef precision::mediump_mat3x2		mat3x2;
-
-	//! 3 columns of 3 components matrix of floating-point numbers. 
-	//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices)
-	typedef precision::mediump_mat3x3		mat3x3;
-
-	//! 3 columns of 4 components matrix of floating-point numbers. 
-	//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices)
-	typedef precision::mediump_mat3x4		mat3x4;
-
-	//! 4 columns of 2 components matrix of floating-point numbers. 
-	//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices)
-	typedef precision::mediump_mat4x2		mat4x2;
-
-	//! 4 columns of 3 components matrix of floating-point numbers. 
-	//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices)
-	typedef precision::mediump_mat4x3		mat4x3;
-
-	//! 4 columns of 4 components matrix of floating-point numbers. 
-	//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices)
-	typedef precision::mediump_mat4x4		mat4x4;
-
-#endif//GLM_PRECISION
-
-	//! 2 columns of 2 components matrix of floating-point numbers. 
-	//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices)
-	typedef mat2x2							mat2;
-
-	//! 3 columns of 3 components matrix of floating-point numbers. 
-	//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices)
-	typedef mat3x3							mat3;
-
-	//! 4 columns of 4 components matrix of floating-point numbers. 
-	//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices)
-	typedef mat4x4							mat4;
-
-	//////////////////////////
-	// Signed integer definition
-
-#if(defined(GLM_PRECISION) && GLM_PRECISION & GLM_PRECISION_HIGHP_INT)
-	typedef precision::highp_ivec2			ivec2;
-	typedef precision::highp_ivec3			ivec3;
-	typedef precision::highp_ivec4			ivec4;
-#elif(defined(GLM_PRECISION) && GLM_PRECISION & GLM_PRECISION_MEDIUMP_INT)
-	typedef precision::mediump_ivec2		ivec2;
-	typedef precision::mediump_ivec3		ivec3;
-	typedef precision::mediump_ivec4		ivec4;
-#elif(defined(GLM_PRECISION) && GLM_PRECISION & GLM_PRECISION_LOWP_INT)
-	typedef precision::lowp_ivec2			ivec2;
-	typedef precision::lowp_ivec3			ivec3;
-	typedef precision::lowp_ivec4			ivec4;
-#else
-	//! 2 components vector of signed integer numbers. 
-	//! From GLSL 1.30.8 specification, section 4.1.5 Vectors.
-	typedef precision::mediump_ivec2		ivec2;
-
-	//! 3 components vector of signed integer numbers. 
-	//! From GLSL 1.30.8 specification, section 4.1.5 Vectors.
-	typedef precision::mediump_ivec3		ivec3;
-
-	//! 4 components vector of signed integer numbers. 
-	//! From GLSL 1.30.8 specification, section 4.1.5 Vectors.
-	typedef precision::mediump_ivec4		ivec4;
-#endif//GLM_PRECISION
-
-	//////////////////////////
-	// Unsigned integer definition
-
-#if(defined(GLM_PRECISION) && GLM_PRECISION & GLM_PRECISION_HIGHP_UINT)
-	typedef precision::highp_uvec2			uvec2;
-	typedef precision::highp_uvec3			uvec3;
-	typedef precision::highp_uvec4			uvec4;
-#elif(defined(GLM_PRECISION) && GLM_PRECISION & GLM_PRECISION_MEDIUMP_UINT)
-	typedef precision::mediump_uvec2		uvec2;
-	typedef precision::mediump_uvec3		uvec3;
-	typedef precision::mediump_uvec4		uvec4;
-#elif(defined(GLM_PRECISION) && GLM_PRECISION & GLM_PRECISION_LOWP_UINT)
-	typedef precision::lowp_uvec2			uvec2;
-	typedef precision::lowp_uvec3			uvec3;
-	typedef precision::lowp_uvec4			uvec4;
-#else
-	//! 2 components vector of unsigned integer numbers. 
-	//! From GLSL 1.30.8 specification, section 4.1.5 Vectors.
-	typedef precision::mediump_uvec2		uvec2;
-
-	//! 3 components vector of unsigned integer numbers. 
-	//! From GLSL 1.30.8 specification, section 4.1.5 Vectors.
-	typedef precision::mediump_uvec3		uvec3;
-
-	//! 4 components vector of unsigned integer numbers. 
-	//! From GLSL 1.30.8 specification, section 4.1.5 Vectors.
-	typedef precision::mediump_uvec4		uvec4;
-#endif//GLM_PRECISION
-
-	//////////////////////////
-	// Boolean definition
-
-	//! 2 components vector of boolean. 
-	//! From GLSL 1.30.8 specification, section 4.1.5 Vectors.
-	typedef detail::tvec2<bool>		bvec2;
-
-	//! 3 components vector of boolean. 
-	//! From GLSL 1.30.8 specification, section 4.1.5 Vectors.
-	typedef detail::tvec3<bool>		bvec3;
-
-	//! 4 components vector of boolean. 
-	//! From GLSL 1.30.8 specification, section 4.1.5 Vectors.
-	typedef detail::tvec4<bool>		bvec4;
-
-	//////////////////////////
-	// Double definition
-
-	//! Vector of 2 double-precision floating-point numbers. 
-	//! From GLSL 4.00.8 specification, section 4.1 Basic Types.
-	typedef detail::tvec2<double>	dvec2;
-
-	//! Vector of 3 double-precision floating-point numbers.
-	//! From GLSL 4.00.8 specification, section 4.1 Basic Types.
-	typedef detail::tvec3<double>	dvec3;
-
-	//! Vector of 4 double-precision floating-point numbers. 
-	//! From GLSL 4.00.8 specification, section 4.1 Basic Types.
-	typedef detail::tvec4<double>	dvec4;
-
-	//! 2 * 2 matrix of double-precision floating-point numbers. 
-	//! From GLSL 4.00.8 specification, section 4.1 Basic Types.
-	typedef detail::tmat2x2<double>	dmat2;
-
-	//! 3 * 3 matrix of double-precision floating-point numbers. 
-	//! From GLSL 4.00.8 specification, section 4.1 Basic Types.
-	typedef detail::tmat3x3<double>	dmat3;
-
-	//! 4 * 4 matrix of double-precision floating-point numbers.
-	//! From GLSL 4.00.8 specification, section 4.1 Basic Types.
-	typedef detail::tmat4x4<double>	dmat4;
-
-	//! 2 * 2 matrix of double-precision floating-point numbers. 
-	//! From GLSL 4.00.8 specification, section 4.1 Basic Types.
-	typedef detail::tmat2x2<double>	dmat2x2;
-
-	//! 2 * 3 matrix of double-precision floating-point numbers. 
-	//! From GLSL 4.00.8 specification, section 4.1 Basic Types.
-	typedef detail::tmat2x3<double>	dmat2x3;
-
-	//! 2 * 4 matrix of double-precision floating-point numbers. 
-	//! From GLSL 4.00.8 specification, section 4.1 Basic Types.
-	typedef detail::tmat2x4<double>	dmat2x4;
-
-	//! 3 * 2 matrix of double-precision floating-point numbers. 
-	//! From GLSL 4.00.8 specification, section 4.1 Basic Types.
-	typedef detail::tmat3x2<double>	dmat3x2;
-
-	//! 3 * 3 matrix of double-precision floating-point numbers. 
-	//! From GLSL 4.00.8 specification, section 4.1 Basic Types.
-	typedef detail::tmat3x3<double>	dmat3x3;
-
-	//! 3 * 4 matrix of double-precision floating-point numbers. 
-	//! From GLSL 4.00.8 specification, section 4.1 Basic Types.
-	typedef detail::tmat3x4<double>	dmat3x4;
-
-	//! 4 * 2 matrix of double-precision floating-point numbers. 
-	//! From GLSL 4.00.8 specification, section 4.1 Basic Types.
-	typedef detail::tmat4x2<double>	dmat4x2;
-
-	//! 4 * 3 matrix of double-precision floating-point numbers. 
-	//! From GLSL 4.00.8 specification, section 4.1 Basic Types.
-	typedef detail::tmat4x3<double>	dmat4x3;
-
-	//! 4 * 4 matrix of double-precision floating-point numbers. 
-	//! From GLSL 4.00.8 specification, section 4.1 Basic Types.
-	typedef detail::tmat4x4<double>	dmat4x4;
-
-}//namespace type
-}//namespace core
-}//namespace glm
-
-#endif//glm_core_type

+ 0 - 72
glm/core/type_float.hpp

@@ -1,72 +0,0 @@
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// OpenGL Mathematics Copyright (c) 2005 - 2010 G-Truc Creation (www.g-truc.net)
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// Created : 2008-08-22
-// Updated : 2010-02-08
-// Licence : This source is under MIT License
-// File    : glm/core/type_float.hpp
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-#ifndef glm_core_type_float
-#define glm_core_type_float
-
-#include "type_half.hpp"
-#include "../setup.hpp"
-
-namespace glm
-{
-	namespace detail
-	{
-		GLM_DETAIL_IS_FLOAT(detail::thalf);
-		GLM_DETAIL_IS_FLOAT(float);
-		GLM_DETAIL_IS_FLOAT(double);
-		GLM_DETAIL_IS_FLOAT(long double);
-	}
-	//namespace detail
-
-	namespace core{
-	namespace type{
-
-	namespace precision
-	{
-#ifdef GLM_USE_HALF_SCALAR
-		typedef detail::thalf		lowp_float_t;
-#else//GLM_USE_HALF_SCALAR
-		typedef float				lowp_float_t;
-#endif//GLM_USE_HALF_SCALAR
-		typedef float				mediump_float_t;
-		typedef double				highp_float_t;
-
-		//! Low precision floating-point numbers. 
-		//! There is no garanty on the actual precision.
-		//! From GLSL 1.30.8 specification
-		typedef lowp_float_t		lowp_float;
-		//! Medium precision floating-point numbers.
-		//! There is no garanty on the actual precision.
-		//! From GLSL 1.30.8 specification
-		typedef mediump_float_t		mediump_float;
-		//! High precision floating-point numbers.
-		//! There is no garanty on the actual precision.
-		//! From GLSL 1.30.8 specification
-		typedef highp_float_t		highp_float;
-	}
-	//namespace precision
-
-#ifndef GLM_PRECISION 
-	typedef precision::mediump_float		float_t;
-#elif(GLM_PRECISION & GLM_PRECISION_HIGHP_FLOAT)
-	typedef precision::highp_float			float_t;
-#elif(GLM_PRECISION & GLM_PRECISION_MEDIUMP_FLOAT)
-	typedef precision::mediump_float		float_t;
-#elif(GLM_PRECISION & GLM_PRECISION_LOWP_FLOAT)
-	typedef precision::lowp_float			float_t;
-#else
-	#	pragma message("GLM message: Precisson undefined for float numbers.");
-	typedef precision::mediump_float		float_t;
-#endif//GLM_PRECISION
-
-	}//namespace type
-	}//namespace core
-}//namespace glm
-
-#endif//glm_core_type_float

+ 0 - 150
glm/core/type_gentype.hpp

@@ -1,150 +0,0 @@
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// OpenGL Mathematics Copyright (c) 2005 - 2010 G-Truc Creation (www.g-truc.net)
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// Created : 2008-10-05
-// Updated : 2010-01-26
-// Licence : This source is under MIT License
-// File    : glm/core/type_gentype.hpp
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-#ifndef glm_core_type_gentype
-#define glm_core_type_gentype
-
-#include "type_size.hpp"
-
-namespace glm
-{
-	enum profile
-	{
-		nice,
-		fast,
-		simd
-	};
-
-namespace detail
-{
-	template
-	<
-		typename VALTYPE, 
-		template <typename> class TYPE
-	>
-	struct genType
-	{
-	public:
-		enum ctor{null};
-
-		typedef VALTYPE value_type;
-		typedef VALTYPE & value_reference;
-		typedef VALTYPE * value_pointer;
-		typedef VALTYPE const * value_const_pointer;
-		typedef TYPE<bool> bool_type;
-
-		typedef sizeType size_type;
-		static bool is_vector();
-		static bool is_matrix();
-		
-		typedef TYPE<VALTYPE> type;
-		typedef TYPE<VALTYPE> * pointer;
-		typedef TYPE<VALTYPE> const * const_pointer;
-		typedef TYPE<VALTYPE> const * const const_pointer_const;
-		typedef TYPE<VALTYPE> * const pointer_const;
-		typedef TYPE<VALTYPE> & reference;
-		typedef TYPE<VALTYPE> const & const_reference;
-		typedef TYPE<VALTYPE> const & param_type;
-
-		//////////////////////////////////////
-		// Address (Implementation details)
-
-		value_const_pointer value_address() const{return value_pointer(this);}
-		value_pointer value_address(){return value_pointer(this);}
-
-	//protected:
-	//	enum kind
-	//	{
-	//		GEN_TYPE,
-	//		VEC_TYPE,
-	//		MAT_TYPE
-	//	};
-
-	//	typedef typename TYPE::kind kind;
-	};
-
-	template
-	<
-		typename VALTYPE, 
-		template <typename> class TYPE
-	>
-	bool genType<VALTYPE, TYPE>::is_vector()
-	{
-		return true;
-	}
-/*
-	template <typename valTypeT, unsigned int colT, unsigned int rowT, profile proT = nice>
-	class base
-	{
-	public:
-		//////////////////////////////////////
-		// Traits
-
-		typedef sizeType							size_type;
-		typedef valTypeT							value_type;
-
-		typedef base<value_type, colT, rowT>		class_type;
-
-		typedef base<bool, colT, rowT>				bool_type;
-		typedef base<value_type, rowT, 1>			col_type;
-		typedef base<value_type, colT, 1>			row_type;
-		typedef base<value_type, rowT, colT>		transpose_type;
-
-		static size_type							col_size();
-		static size_type							row_size();
-		static size_type							value_size();
-		static bool									is_scalar();
-		static bool									is_vector();
-		static bool									is_matrix();
-
-	private:
-		// Data 
-		col_type value[colT];		
-
-	public:
-		//////////////////////////////////////
-		// Constructors
-		base();
-		base(class_type const & m);
-
-		explicit base(value_type const & x);
-		explicit base(value_type const * const x);
-		explicit base(col_type const * const x);
-
-		//////////////////////////////////////
-		// Conversions
-		template <typename vU, uint cU, uint rU, profile pU>
-		explicit base(base<vU, cU, rU, pU> const & m);
-
-		//////////////////////////////////////
-		// Accesses
-		col_type& operator[](size_type i);
-		col_type const & operator[](size_type i) const;
-
-		//////////////////////////////////////
-		// Unary updatable operators
-		class_type& operator=  (class_type const & x);
-		class_type& operator+= (value_type const & x);
-		class_type& operator+= (class_type const & x);
-		class_type& operator-= (value_type const & x);
-		class_type& operator-= (class_type const & x);
-		class_type& operator*= (value_type const & x);
-		class_type& operator*= (class_type const & x);
-		class_type& operator/= (value_type const & x);
-		class_type& operator/= (class_type const & x);
-		class_type& operator++ ();
-		class_type& operator-- ();
-	};
-*/
-	}//namespace detail
-}//namespace glm
-
-//#include "type_gentype.inl"
-
-#endif//glm_core_type_gentype

+ 0 - 347
glm/core/type_gentype.inl

@@ -1,347 +0,0 @@
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// OpenGL Mathematics Copyright (c) 2005 - 2010 G-Truc Creation (www.g-truc.net)
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// Created : 2008-10-05
-// Updated : 2008-10-05
-// Licence : This source is under MIT License
-// File    : glm/core/type_gentype.inl
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-namespace glm{
-namespace detail{
-
-/////////////////////////////////
-// Static functions
-
-template <typename vT, uint cT, uint rT, profile pT>
-typename base<vT, cT, rT, pT>::size_type base<vT, cT, rT, pT>::col_size()
-{
-	return cT;
-}
-
-template <typename vT, uint cT, uint rT, profile pT>
-typename base<vT, cT, rT, pT>::size_type base<vT, cT, rT, pT>::row_size()
-{
-	return rT;
-}
-
-template <typename vT, uint cT, uint rT, profile pT>
-typename base<vT, cT, rT, pT>::size_type base<vT, cT, rT, pT>::value_size()
-{
-	return rT * cT;
-}
-
-template <typename vT, uint cT, uint rT, profile pT>
-bool base<vT, cT, rT, pT>::is_scalar()
-{
-	return rT == 1 && cT == 1;
-}
-
-template <typename vT, uint cT, uint rT, profile pT>
-bool base<vT, cT, rT, pT>::is_vector()
-{
-	return rT == 1;
-}
-
-template <typename vT, uint cT, uint rT, profile pT>
-bool base<vT, cT, rT, pT>::is_matrix()
-{
-	return rT != 1;
-}
-
-/////////////////////////////////
-// Constructor
-
-template <typename vT, uint cT, uint rT, profile pT>
-base<vT, cT, rT, pT>::base()
-{
-	memset(&this->value, 0, cT * rT * sizeof(vT));
-}
-
-template <typename vT, uint cT, uint rT, profile pT>
-base<vT, cT, rT, pT>::base
-(
-	typename base<vT, cT, rT, pT>::class_type const & m
-)
-{
-	for
-	(
-		typename genType<vT, cT, rT, pT>::size_type i = typename base<vT, cT, rT, pT>::size_type(0);
-		i < base<vT, cT, rT, pT>::col_size();
-		++i
-	)
-	{
-		this->value[i] = m[i];
-	}
-}
-
-template <typename vT, uint cT, uint rT, profile pT>
-base<vT, cT, rT, pT>::base
-(
-	typename base<vT, cT, rT, pT>::value_type const & x
-)
-{
-	if(rT == 1) // vector
-	{
-		for
-		(
-			typename base<vT, cT, rT, pT>::size_type i = typename base<vT, cT, rT, pT>::size_type(0);
-			i < base<vT, cT, rT, pT>::col_size();
-			++i
-		)
-		{
-			this->value[i][rT] = x;
-		}
-	}
-	else // matrix
-	{
-		memset(&this->value, 0, cT * rT * sizeof(vT));
-
-		typename base<vT, cT, rT, pT>::size_type stop = cT < rT ? cT : rT;
-
-		for
-		(
-			typename base<vT, cT, rT, pT>::size_type i = typename base<vT, cT, rT, pT>::size_type(0);
-			i < stop;
-			++i
-		)
-		{
-			this->value[i][i] = x;
-		}
-	}
-}
-
-template <typename vT, uint cT, uint rT, profile pT>
-base<vT, cT, rT, pT>::base
-(
-	typename base<vT, cT, rT, pT>::value_type const * const x
-)
-{
-	memcpy(&this->value, &x.value, cT * rT * sizeof(vT));
-}
-
-template <typename vT, uint cT, uint rT, profile pT>
-base<vT, cT, rT, pT>::base
-(
-	typename base<vT, cT, rT, pT>::col_type const * const x
-)
-{
-	for
-	(
-		typename base<vT, cT, rT, pT>::size_type i = typename base<vT, cT, rT, pT>::size_type(0);
-		i < base<vT, cT, rT, pT>::col_size();
-		++i
-	)
-	{
-		this->value[i] = x[i];
-	}
-}
-
-template <typename vT, uint cT, uint rT, profile pT>
-template <typename vU, uint cU, uint rU, profile pU>
-base<vT, cT, rT, pT>::base
-(
-	base<vU, cU, rU, pU> const & m
-)
-{
-	for
-	(
-		typename base<vT, cT, rT, pT>::size_type i = typename base<vT, cT, rT, pT>::size_type(0);
-		i < base<vT, cT, rT, pT>::col_size();
-		++i
-	)
-	{
-		this->value[i] = base<vT, cT, rT, pT>(m[i]);
-	}
-}
-
-//////////////////////////////////////
-// Accesses
-
-template <typename vT, uint cT, uint rT, profile pT>
-typename base<vT, cT, rT, pT>::col_type& base<vT, cT, rT, pT>::operator[]
-(
-	typename base<vT, cT, rT, pT>::size_type i
-)
-{
-	return this->value[i];
-}
-
-template <typename vT, uint cT, uint rT, profile pT>
-typename base<vT, cT, rT, pT>::col_type const & base<vT, cT, rT, pT>::operator[]
-(
-	typename base<vT, cT, rT, pT>::size_type i
-) const
-{
-	return this->value[i];
-}
-
-//////////////////////////////////////
-// Unary updatable operators
-
-template <typename vT, uint cT, uint rT, profile pT>
-typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator= 
-(
-	typename base<vT, cT, rT, pT>::class_type const & x
-)
-{
-	memcpy(&this->value, &x.value, cT * rT * sizeof(vT));
-	return *this;
-}
-
-template <typename vT, uint cT, uint rT, profile pT>
-typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator+= 
-(
-	typename base<vT, cT, rT, pT>::value_type const & x
-)
-{
-	typename base<vT, cT, rT, pT>::size_type stop_col = x.col_size();
-	typename base<vT, cT, rT, pT>::size_type stop_row = x.row_size();
-
-	for(typename base<vT, cT, rT, pT>::size_type j = 0; j < stop_col; ++j)
-	for(typename base<vT, cT, rT, pT>::size_type i = 0; i < stop_row; ++i)
-		this->value[j][i] += x;
-
-	return *this;
-}
-
-template <typename vT, uint cT, uint rT, profile pT>
-typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator+= 
-(
-	typename base<vT, cT, rT, pT>::class_type const & x
-)
-{
-	typename base<vT, cT, rT, pT>::size_type stop_col = x.col_size();
-	typename base<vT, cT, rT, pT>::size_type stop_row = x.row_size();
-
-	for(typename base<vT, cT, rT, pT>::size_type j = 0; j < stop_col; ++j)
-	for(typename base<vT, cT, rT, pT>::size_type i = 0; i < stop_row; ++i)
-		this->value[j][i] += x[j][i];
-
-	return *this;
-}
-
-template <typename vT, uint cT, uint rT, profile pT>
-typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator-= 
-(
-	typename base<vT, cT, rT, pT>::value_type const & x
-)
-{
-	typename base<vT, cT, rT, pT>::size_type stop_col = x.col_size();
-	typename base<vT, cT, rT, pT>::size_type stop_row = x.row_size();
-
-	for(typename base<vT, cT, rT, pT>::size_type j = 0; j < stop_col; ++j)
-	for(typename base<vT, cT, rT, pT>::size_type i = 0; i < stop_row; ++i)
-		this->value[j][i] -= x;
-
-	return *this;
-}
-
-template <typename vT, uint cT, uint rT, profile pT>
-typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator-= 
-(
-	typename base<vT, cT, rT, pT>::class_type const & x
-)
-{
-	typename base<vT, cT, rT, pT>::size_type stop_col = x.col_size();
-	typename base<vT, cT, rT, pT>::size_type stop_row = x.row_size();
-
-	for(typename base<vT, cT, rT, pT>::size_type j = 0; j < stop_col; ++j)
-	for(typename base<vT, cT, rT, pT>::size_type i = 0; i < stop_row; ++i)
-		this->value[j][i] -= x[j][i];
-
-	return *this;
-}
-
-template <typename vT, uint cT, uint rT, profile pT>
-typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator*= 
-(
-	typename base<vT, cT, rT, pT>::value_type const & x
-)
-{
-	typename base<vT, cT, rT, pT>::size_type stop_col = x.col_size();
-	typename base<vT, cT, rT, pT>::size_type stop_row = x.row_size();
-
-	for(typename base<vT, cT, rT, pT>::size_type j = 0; j < stop_col; ++j)
-	for(typename base<vT, cT, rT, pT>::size_type i = 0; i < stop_row; ++i)
-		this->value[j][i] *= x;
-
-	return *this;
-}
-
-template <typename vT, uint cT, uint rT, profile pT>
-typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator*= 
-(
-	typename base<vT, cT, rT, pT>::class_type const & x
-)
-{
-	typename base<vT, cT, rT, pT>::size_type stop_col = x.col_size();
-	typename base<vT, cT, rT, pT>::size_type stop_row = x.row_size();
-
-	for(typename base<vT, cT, rT, pT>::size_type j = 0; j < stop_col; ++j)
-	for(typename base<vT, cT, rT, pT>::size_type i = 0; i < stop_row; ++i)
-		this->value[j][i] *= x[j][i];
-
-	return *this;
-}
-
-template <typename vT, uint cT, uint rT, profile pT>
-typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator/= 
-(
-	typename base<vT, cT, rT, pT>::value_type const & x
-)
-{
-	typename base<vT, cT, rT, pT>::size_type stop_col = x.col_size();
-	typename base<vT, cT, rT, pT>::size_type stop_row = x.row_size();
-
-	for(typename base<vT, cT, rT, pT>::size_type j = 0; j < stop_col; ++j)
-	for(typename base<vT, cT, rT, pT>::size_type i = 0; i < stop_row; ++i)
-		this->value[j][i] /= x;
-
-	return *this;
-}
-
-template <typename vT, uint cT, uint rT, profile pT>
-typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator/= 
-(
-	typename base<vT, cT, rT, pT>::class_type const & x
-)
-{
-	typename base<vT, cT, rT, pT>::size_type stop_col = x.col_size();
-	typename base<vT, cT, rT, pT>::size_type stop_row = x.row_size();
-
-	for(typename base<vT, cT, rT, pT>::size_type j = 0; j < stop_col; ++j)
-	for(typename base<vT, cT, rT, pT>::size_type i = 0; i < stop_row; ++i)
-		this->value[j][i] /= x[j][i];
-
-	return *this;
-}
-
-template <typename vT, uint cT, uint rT, profile pT>
-typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator++ ()
-{
-	typename base<vT, cT, rT, pT>::size_type stop_col = col_size();
-	typename base<vT, cT, rT, pT>::size_type stop_row = row_size();
-
-	for(typename base<vT, cT, rT, pT>::size_type j = 0; j < stop_col; ++j)
-	for(typename base<vT, cT, rT, pT>::size_type i = 0; i < stop_row; ++i)
-		++this->value[j][i];
-
-	return *this;
-}
-
-template <typename vT, uint cT, uint rT, profile pT>
-typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator-- ()
-{
-	typename base<vT, cT, rT, pT>::size_type stop_col = col_size();
-	typename base<vT, cT, rT, pT>::size_type stop_row = row_size();
-
-	for(typename base<vT, cT, rT, pT>::size_type j = 0; j < stop_col; ++j)
-	for(typename base<vT, cT, rT, pT>::size_type i = 0; i < stop_row; ++i)
-		--this->value[j][i];
-
-	return *this;
-}
-
-} //namespace detail
-} //namespace glm

+ 0 - 85
glm/core/type_half.hpp

@@ -1,85 +0,0 @@
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// OpenGL Mathematics Copyright (c) 2005 - 2010 G-Truc Creation (www.g-truc.net)
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// Created : 2008-08-17
-// Updated : 2010-02-17
-// Licence : This source is under MIT License
-// File    : glm/core/type_half.hpp
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-#ifndef glm_core_type_half
-#define glm_core_type_half
-
-#include <cstdlib>
-
-namespace glm
-{
-	namespace test
-	{
-		bool main_type_half();
-
-	}//namespace test
-
-	namespace detail
-	{
-		typedef short hdata;
-
-		float toFloat32(hdata value);
-		hdata toFloat16(float const & value);
-
-		class thalf
-		{
-		public: 
-			// Constructors
-			thalf();
-			thalf(thalf const & s);
-			
-			template <typename U>
-			explicit thalf(U const & s);
-
-			// Cast
-			//operator float();
-			operator float() const;
-			//operator double();
-			//operator double() const;
-
-			// Unary updatable operators
-			thalf& operator= (thalf const & s);
-			thalf& operator+=(thalf const & s);
-			thalf& operator-=(thalf const & s);
-			thalf& operator*=(thalf const & s);
-			thalf& operator/=(thalf const & s);
-			thalf& operator++();
-			thalf& operator--();
-	
-			float toFloat() const{return toFloat32(data);}
-
-			hdata _data() const{return 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);
-
-		// Unary constant operators
-		thalf operator- (thalf const & s);
-
-		thalf operator-- (thalf const & s, int);
-
-		thalf operator++ (thalf const & s, int);
-
-	}//namespace detail
-
-
-}//namespace glm
-
-#include "type_half.inl"
-
-#endif//glm_core_type_half

+ 0 - 357
glm/core/type_half.inl

@@ -1,357 +0,0 @@
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// OpenGL Mathematics Copyright (c) 2005 - 2010 G-Truc Creation (www.g-truc.net)
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// Created : 2008-08-17
-// Updated : 2009-11-12
-// Licence : This source is under MIT License
-// File    : glm/core/type_half.inl
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// Copyright:
-// This half implementation is based on OpenEXR which is Copyright (c) 2002, 
-// Industrial Light & Magic, a division of Lucas Digital Ltd. LLC
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-#include "_detail.hpp"
-
-namespace glm{
-namespace detail
-{
-	inline float overflow()
-	{
-		volatile float f = 1e10;
-
-		for(int i = 0; i < 10; ++i)	
-			f *= f;             // this will overflow before
-								// the for­loop terminates
-		return f;
-	}
-
-	inline float toFloat32(hdata value)
-	{
-		int s = (value >> 15) & 0x00000001;
-		int e = (value >> 10) & 0x0000001f;
-		int m =  value        & 0x000003ff;
-
-		if(e == 0)
-		{
-			if(m == 0)
-			{
-				//
-				// Plus or minus zero
-				//
-
-				detail::uif result;
-				result.i = s << 31;
-				return result.f;
-			}
-			else
-			{
-				//
-				// Denormalized number -- renormalize it
-				//
-
-				while(!(m & 0x00000400))
-				{
-					m <<= 1;
-					e -=  1;
-				}
-
-				e += 1;
-				m &= ~0x00000400;
-			}
-		}
-		else if(e == 31)
-		{
-			if(m == 0)
-			{
-				//
-				// Positive or negative infinity
-				//
-
-				uif result;
-				result.i = (s << 31) | 0x7f800000;
-				return result.f;
-			}
-			else
-			{
-				//
-				// Nan -- preserve sign and significand bits
-				//
-
-				uif result;
-				result.i = (s << 31) | 0x7f800000 | (m << 13);
-				return result.f;
-			}
-		}
-
-		//
-		// Normalized number
-		//
-
-		e = e + (127 - 15);
-		m = m << 13;
-
-		//
-		// Assemble s, e and m.
-		//
-
-		uif Result;
-		Result.i = (s << 31) | (e << 23) | m;
-		return Result.f;
-	}
-
-	inline hdata toFloat16(float const & f)
-	{
-		uif Entry;
-		Entry.f = f;
-		int i = Entry.i;
-
-		//
-		// Our floating point number, f, is represented by the bit
-		// pattern in integer i.  Disassemble that bit pattern into
-		// the sign, s, the exponent, e, and the significand, m.
-		// Shift s into the position where it will go in in the
-		// resulting half number.
-		// Adjust e, accounting for the different exponent bias
-		// of float and half (127 versus 15).
-		//
-
-		register int s =  (i >> 16) & 0x00008000;
-		register int e = ((i >> 23) & 0x000000ff) - (127 - 15);
-		register int m =   i        & 0x007fffff;
-
-		//
-		// Now reassemble s, e and m into a half:
-		//
-
-		if(e <= 0)
-		{
-			if(e < -10)
-			{
-				//
-				// E is less than -10.  The absolute value of f is
-				// less than half_MIN (f may be a small normalized
-				// float, a denormalized float or a zero).
-				//
-				// We convert f to a _halfGTX zero.
-				//
-
-				return 0;
-			}
-
-			//
-			// E is between -10 and 0.  F is a normalized float,
-			// whose magnitude is less than __half_NRM_MIN.
-			//
-			// We convert f to a denormalized _halfGTX.
-			// 
-
-			m = (m | 0x00800000) >> (1 - e);
-
-			//
-			// Round to nearest, round "0.5" up.
-			//
-			// Rounding may cause the significand to overflow and make
-			// our number normalized.  Because of the way a half's bits
-			// are laid out, we don't have to treat this case separately;
-			// the code below will handle it correctly.
-			// 
-
-			if(m & 0x00001000) 
-				m += 0x00002000;
-
-			//
-			// Assemble the _halfGTX from s, e (zero) and m.
-			//
-
-			return hdata(s | (m >> 13));
-		}
-		else if(e == 0xff - (127 - 15))
-		{
-			if(m == 0)
-			{
-				//
-				// F is an infinity; convert f to a half
-				// infinity with the same sign as f.
-				//
-
-				return hdata(s | 0x7c00);
-			}
-			else
-			{
-				//
-				// F is a NAN; we produce a half NAN that preserves
-				// the sign bit and the 10 leftmost bits of the
-				// significand of f, with one exception: If the 10
-				// leftmost bits are all zero, the NAN would turn 
-				// into an infinity, so we have to set at least one
-				// bit in the significand.
-				//
-
-				m >>= 13;
-
-				return hdata(s | 0x7c00 | m | (m == 0));
-			}
-		}
-		else
-		{
-			//
-			// E is greater than zero.  F is a normalized float.
-			// We try to convert f to a normalized half.
-			//
-
-			//
-			// Round to nearest, round "0.5" up
-			//
-
-			if(m &  0x00001000)
-			{
-				m += 0x00002000;
-
-				if(m & 0x00800000)
-				{
-					m =  0;     // overflow in significand,
-					e += 1;     // adjust exponent
-				}
-			}
-
-			//
-			// Handle exponent overflow
-			//
-
-			if (e > 30)
-			{
-				overflow();        // Cause a hardware floating point overflow;
-
-				return hdata(s | 0x7c00);
-				// if this returns, the half becomes an
-			}   // infinity with the same sign as f.
-
-			//
-			// Assemble the half from s, e and m.
-			//
-
-			return hdata(s | (e << 10) | (m >> 13));
-		}
-	}
-
-	inline thalf::thalf() :
-		data(0)
-	{}
-
-	inline thalf::thalf(thalf const & s) :
-		data(s.data)
-	{}
-
-	template <typename U>
-	inline thalf::thalf(U const & s) :
-		data(toFloat16(float(s)))
-	{}
-
-	// Cast
-	//inline half::operator float()
-	//{
-	//	return toFloat();
-	//}
-
-	inline thalf::operator float() const 
-	{
-		return toFloat();
-	}
-
-	//inline half::operator double()
-	//{
-	//	return double(toFloat());
-	//}
-
-	//inline half::operator double() const
-	//{
-	//	return double(toFloat());
-	//}
-
-	// Unary updatable operators
-	inline thalf& thalf::operator= (thalf const & s)
-	{
-		data = s.data;
-		return *this;
-	}
-
-	inline thalf& thalf::operator+=(thalf const & s)
-	{
-		data = toFloat16(toFloat32(data) + toFloat32(s.data));
-		return *this;
-	}
-
-	inline thalf& thalf::operator-=(thalf const & s)
-	{
-		data = toFloat16(toFloat32(data) - toFloat32(s.data));
-		return *this;
-	}
-
-	inline thalf& thalf::operator*=(thalf const & s)
-	{
-		data = toFloat16(toFloat32(data) * toFloat32(s.data));		
-		return *this;
-	}
-
-	inline thalf& thalf::operator/=(thalf const & s)
-	{
-		data = toFloat16(toFloat32(data) / toFloat32(s.data));
-		return *this;
-	}
-
-	inline thalf& thalf::operator++()
-	{
-		float Casted = toFloat32(data);
-		data = toFloat16(++Casted);
-		return *this;
-	}
-
-	inline thalf& thalf::operator--()
-	{
-		float Casted = toFloat32(data);
-		data = toFloat16(--Casted);
-		return *this;
-	}
-
-	//////////////////////////////////////
-	// Binary arithmetic operators
-
-	inline detail::thalf operator+ (detail::thalf const & s1, detail::thalf const & s2)
-	{
-		return detail::thalf(float(s1) + float(s2));
-	}
-
-	inline detail::thalf operator- (detail::thalf const & s1, detail::thalf const & s2)
-	{
-		return detail::thalf(float(s1) - float(s2));
-	}
-
-	inline detail::thalf operator* (detail::thalf const & s1, detail::thalf const & s2)
-	{
-		return detail::thalf(float(s1) * float(s2));
-	}
-
-	inline detail::thalf operator/ (detail::thalf const & s1, detail::thalf const & s2)
-	{
-		return detail::thalf(float(s1) / float(s2));
-	}
-
-	// Unary constant operators
-	inline detail::thalf operator- (detail::thalf const & s)
-	{
-		return detail::thalf(-float(s));
-	}
-
-	inline detail::thalf operator-- (detail::thalf const & s, int)
-	{
-		return detail::thalf(float(s) - 1.0f);
-	}
-
-	inline detail::thalf operator++ (detail::thalf const & s, int)
-	{
-		return detail::thalf(float(s) + 1.0f);
-	}
-
-}//namespace detail
-}//namespace glm

+ 0 - 130
glm/core/type_int.hpp

@@ -1,130 +0,0 @@
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// OpenGL Mathematics Copyright (c) 2005 - 2010 G-Truc Creation (www.g-truc.net)
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// Created : 2008-08-22
-// Updated : 2008-09-17
-// Licence : This source is under MIT License
-// File    : glm/core/type_int.hpp
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-#ifndef glm_core_type_int
-#define glm_core_type_int
-
-#include "../setup.hpp"
-#include "_detail.hpp"
-
-namespace glm
-{
-	namespace detail
-	{
-#if defined(GLM_COMPILER) && (GLM_COMPILER & GLM_COMPILER_VC)
-		typedef signed __int64						highp_int_t;
-		typedef unsigned __int64					highp_uint_t;
-#elif(defined(GLM_COMPILER) && (GLM_COMPILER & GLM_COMPILER_GCC))
-		__extension__ typedef signed long long		highp_int_t;
-		__extension__ typedef unsigned long long	highp_uint_t;
-//#	if GLM_MODEL == GLM_MODEL_64
-//		typedef signed long							highp_int_t;
-//		typedef unsigned long						highp_uint_t;
-//#   elif GLM_MODEL == GLM_MODEL_32
-//		__extension__ typedef signed long long		highp_int_t;
-//		__extension__ typedef unsigned long long	highp_uint_t;
-//#	endif//GLM_MODEL
-#elif(defined(GLM_COMPILER_BC))
-		typedef Int64								highp_int_t;
-		typedef Uint64								highp_uint_t;
-#else
-		typedef signed long	long					highp_int_t;
-		typedef unsigned long long					highp_uint_t;
-#endif//GLM_COMPILER
-
-		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);
-
-		typedef signed short			lowp_int_t;
-		typedef signed int				mediump_int_t;
-		typedef detail::highp_int_t		highp_int_t;
-
-		typedef unsigned short			lowp_uint_t;
-		typedef unsigned int			mediump_uint_t;
-		typedef detail::highp_uint_t	highp_uint_t;
-	}
-	//namespace detail
-
-	namespace core{
-	namespace type{
-
-	namespace precision
-	{
-		//! Low precision signed integer. 
-		//! There is no garanty on the actual precision.
-		//! From GLSL 1.30.8 specification.
-		typedef detail::lowp_int_t				lowp_int;
-		//! Medium precision signed integer. 
-		//! There is no garanty on the actual precision.
-		//! From GLSL 1.30.8 specification.
-		typedef detail::mediump_int_t			mediump_int;
-		//! High precision signed integer.
-		//! There is no garanty on the actual precision.
-		//! From GLSL 1.30.8 specification.
-		typedef detail::highp_int_t				highp_int;
-
-		//! Low precision unsigned integer. 
-		//! There is no garanty on the actual precision.
-		//! From GLSL 1.30.8 specification.
-		typedef detail::lowp_uint_t				lowp_uint;
-		//! Medium precision unsigned integer. 
-		//! There is no garanty on the actual precision.
-		//! From GLSL 1.30.8 specification.
-		typedef detail::mediump_uint_t			mediump_uint;
-		//! High precision unsigned integer. 
-		//! There is no garanty on the actual precision.
-		//! From GLSL 1.30.8 specification.
-		typedef detail::highp_uint_t			highp_uint;
-	}
-	//namespace precision
-
-#ifndef GLM_PRECISION 
-	typedef precision::mediump_int				int_t;
-#elif(GLM_PRECISION & GLM_PRECISION_HIGHP_INT)
-	typedef precision::highp_int				int_t;
-#elif(GLM_PRECISION & GLM_PRECISION_MEDIUMP_INT)
-	typedef precision::mediump_int				int_t;
-#elif(GLM_PRECISION & GLM_PRECISION_LOWP_INT)
-	typedef precision::lowp_int					int_t;
-#else
-	typedef mediump_int							int_t;
-#	pragma message("GLM message: Precisson undefined for signed integer number.");
-#endif//GLM_PRECISION
-
-#ifndef GLM_PRECISION 
-	typedef precision::mediump_uint				uint_t;
-#elif(GLM_PRECISION & GLM_PRECISION_HIGHP_UINT)
-	typedef precision::highp_uint				uint_t;
-#elif(GLM_PRECISION & GLM_PRECISION_MEDIUMP_UINT)
-	typedef precision::mediump_uint				uint_t;
-#elif(GLM_PRECISION & GLM_PRECISION_LOWP_UINT)
-	typedef precision::lowp_uint				uint_t;
-#else
-	typedef precision::mediump_uint				uint_t;
-#	pragma message("GLM message: Precisson undefined for unsigned integer number.");
-#endif//GLM_PRECISION
-
-	//! Unsigned integer. 
-	//! From GLSL 1.30.8 specification section 4.1.3 Integers.
-	typedef uint_t								uint;
-
-	}//namespace type
-	}//namespace core
-}//namespace glm
-
-#endif//glm_core_type_int

+ 0 - 56
glm/core/type_mat.hpp

@@ -1,56 +0,0 @@
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// OpenGL Mathematics Copyright (c) 2005 - 2010 G-Truc Creation (www.g-truc.net)
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// Created : 2010-01-26
-// Updated : 2010-01-26
-// Licence : This source is under MIT License
-// File    : glm/core/type_mat.hpp
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-#ifndef glm_core_type_mat
-#define glm_core_type_mat
-
-#include "type_gentype.hpp"
-
-namespace glm{
-namespace detail
-{
-	//template 
-	//<
-	//	typename T, 
-	//	template <typename> class C, 
-	//	template <typename> class R
-	//>
-	//struct matType
-	//{
-	//	enum ctor{null};
-	//	typedef T value_type;
-	//	typedef std::size_t size_type;
-	//	typedef C<T> col_type;
-	//	typedef R<T> row_type;
-	//	static size_type const col_size;
-	//	static size_type const row_size;
-	//};
-
-	//template 
-	//<
-	//	typename T, 
-	//	template <typename> class C, 
-	//	template <typename> class R
-	//>
-	//typename matType<T, C, R>::size_type const 
-	//matType<T, C, R>::col_size = matType<T, C, R>::col_type::value_size;
-
-	//template 
-	//<
-	//	typename T, 
-	//	template <typename> class C, 
-	//	template <typename> class R
-	//>
-	//typename matType<T, C, R>::size_type const 
-	//matType<T, C, R>::row_size = matType<T, C, R>::row_type::value_size;
-
-}//namespace detail
-}//namespace glm
-
-#endif//glm_core_type_mat

+ 0 - 0
glm/core/type_mat.inl


+ 0 - 245
glm/core/type_mat2x2.hpp

@@ -1,245 +0,0 @@
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// OpenGL Mathematics Copyright (c) 2005 - 2010 G-Truc Creation (www.g-truc.net)
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// Created : 2005-01-27
-// Updated : 2010-02-11
-// Licence : This source is under MIT License
-// File    : glm/core/type_mat2x2.hpp
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-#ifndef glm_core_type_mat2x2
-#define glm_core_type_mat2x2
-
-#include "type_mat.hpp"
-
-namespace glm
-{
-	namespace test
-	{
-		void main_mat2x2();
-	}//namespace test
-
-	namespace detail
-	{
-		template <typename T> struct tvec1;
-		template <typename T> struct tvec2;
-		template <typename T> struct tvec3;
-		template <typename T> struct tvec4;
-		template <typename T> struct tmat2x2;
-		template <typename T> struct tmat2x3;
-		template <typename T> struct tmat2x4;
-		template <typename T> struct tmat3x2;
-		template <typename T> struct tmat3x3;
-		template <typename T> struct tmat3x4;
-		template <typename T> struct tmat4x2;
-		template <typename T> struct tmat4x3;
-		template <typename T> struct tmat4x4;
-
-		//!< \brief Template for 2 * 2 matrix of floating-point numbers.
-		template <typename T> 
-		struct tmat2x2
-		{
-			enum ctor{null};
-			typedef T value_type;
-			typedef std::size_t size_type;
-			typedef tvec2<T> col_type;
-			typedef tvec2<T> row_type;
-			static size_type col_size();
-			static size_type row_size();
-
-			typedef tmat2x2<T> type;
-			typedef tmat2x2<T> transpose_type;
-
-		public:
-			// Implementation detail
-			tmat2x2<T> _inverse() const;
-
-		private:
-			// Data 
-			col_type value[2];
-
-		public:
-			// Constructors
-			tmat2x2();
-			tmat2x2(
-				tmat2x2 const & m);
-
-			explicit tmat2x2(
-				ctor Null);
-			explicit tmat2x2(
-				value_type const & x);
-			explicit tmat2x2(
-				value_type const & x1, value_type const & y1, 
-				value_type const & x2, value_type const & y2);
-			explicit tmat2x2(
-				col_type const & v1, 
-				col_type const & v2);
-
-			// Conversions
-			template <typename U> 
-			explicit tmat2x2(tmat2x2<U> const & m);
-
-			explicit tmat2x2(tmat3x3<T> const & x);
-			explicit tmat2x2(tmat4x4<T> const & x);
-			explicit tmat2x2(tmat2x3<T> const & x);
-			explicit tmat2x2(tmat3x2<T> const & x);
-			explicit tmat2x2(tmat2x4<T> const & x);
-			explicit tmat2x2(tmat4x2<T> const & x);
-			explicit tmat2x2(tmat3x4<T> const & x);
-			explicit tmat2x2(tmat4x3<T> const & x);
-
-			//////////////////////////////////////
-			// Accesses
-
-			col_type & operator[](size_type i);
-			col_type const & operator[](size_type i) const;
-
-			// Unary updatable operators
-			tmat2x2<T> & operator=(tmat2x2<T> const & m);
-			template <typename U> 
-			tmat2x2<T> & operator=(tmat2x2<U> const & m);
-			template <typename U> 
-			tmat2x2<T> & operator+=(U const & s);
-			template <typename U> 
-			tmat2x2<T> & operator+=(tmat2x2<U> const & m);
-			template <typename U> 
-			tmat2x2<T> & operator-=(U const & s);
-			template <typename U> 
-			tmat2x2<T> & operator-=(tmat2x2<U> const & m);
-			template <typename U> 
-			tmat2x2<T> & operator*=(U const & s);
-			template <typename U> 
-			tmat2x2<T> & operator*=(tmat2x2<U> const & m);
-			template <typename U> 
-			tmat2x2<T> & operator/=(U const & s);
-			template <typename U> 
-			tmat2x2<T> & operator/=(tmat2x2<U> const & m);
-			tmat2x2<T> & operator++();
-			tmat2x2<T> & operator--();
-		};
-
-		// Binary operators
-		template <typename T> 
-		tmat2x2<T> operator+ (
-			tmat2x2<T> const & m, 
-			typename tmat2x2<T>::value_type const & s);
-
-		template <typename T> 
-		tmat2x2<T> operator+ (
-			typename tmat2x2<T>::value_type const & s, 
-			tmat2x2<T> const & m);
-
-		template <typename T> 
-		tmat2x2<T> operator+ (
-			tmat2x2<T> const & m1, 
-			tmat2x2<T> const & m2);
-	    
-		template <typename T> 
-		tmat2x2<T> operator- (
-			tmat2x2<T> const & m, 
-			typename tmat2x2<T>::value_type const & s);
-
-		template <typename T> 
-		tmat2x2<T> operator- (
-			typename tmat2x2<T>::value_type const & s, 
-			tmat2x2<T> const & m);
-
-		template <typename T> 
-		tmat2x2<T> operator- (
-			tmat2x2<T> const & m1, 
-			tmat2x2<T> const & m2);
-
-		template <typename T> 
-		tmat2x2<T> operator* (
-			tmat2x2<T> const & m, 
-			typename tmat2x2<T>::value_type const & s);
-
-		template <typename T> 
-		tmat2x2<T> operator* (
-			typename tmat2x2<T>::value_type const & s, 
-			tmat2x2<T> const & m);
-
-		template <typename T> 
-		typename tmat2x2<T>::row_type operator* (
-			tmat2x2<T> const & m, 
-			typename tmat2x2<T>::col_type const & s);
-
-		template <typename T> 
-		typename tmat2x2<T>::col_type operator* (
-			typename tmat2x2<T>::row_type, 
-			tmat2x2<T> const & m);
-
-		template <typename T> 
-		tmat2x2<T> operator* (
-			tmat2x2<T> const & m1, 
-			tmat2x2<T> const & m2);
-
-		template <typename T> 
-		tmat2x2<T> operator/ (
-			tmat2x2<T> const & m, 
-			typename tmat2x2<T>::value_type const & s);
-
-		template <typename T> 
-		tmat2x2<T> operator/ (
-			typename tmat2x2<T>::value_type const & s,
-			tmat2x2<T> const & m);
-
-		template <typename T> 
-		typename tmat2x2<T>::row_type operator/ (
-			tmat2x2<T> const & m, 
-			typename tmat2x2<T>::col_type const & v);
-
-		template <typename T> 
-		typename tmat2x2<T>::col_type operator/ (
-			typename tmat2x2<T>::row_type & v, 
-			tmat2x2<T> const & m);
-
-		template <typename T> 
-		tmat2x2<T> operator/ (
-			tmat2x2<T> const & m1, 
-			tmat2x2<T> const & m2);
-
-		// Unary constant operators
-		template <typename T> 
-		tmat2x2<T> const operator-  (
-			tmat2x2<T> const & m);
-
-		template <typename T> 
-		tmat2x2<T> const operator-- (
-			tmat2x2<T> const & m, 
-			int);
-
-		template <typename T> 
-		tmat2x2<T> const operator++ (
-			tmat2x2<T> const & m, 
-			int);
-
-	} //namespace detail
-
-	namespace core{
-	namespace type{
-
-	namespace precision
-	{
-		//! 2 columns of 2 components matrix of low precision floating-point numbers.
-		//! There is no garanty 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::tmat2x2<lowp_float>		lowp_mat2x2;
-		//! 2 columns of 2 components matrix of medium precision floating-point numbers. 
-		//! There is no garanty 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::tmat2x2<mediump_float>	mediump_mat2x2;
-		//! 2 columns of 2 components matrix of high precision floating-point numbers. 
-		//! There is no garanty 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::tmat2x2<highp_float>	highp_mat2x2;
-	}
-	//namespace precision
-
-	}//namespace type
-	}//namespace core
-} //namespace glm
-
-#include "type_mat2x2.inl"
-
-#endif //glm_core_type_mat2x2

Kaikkia tiedostoja ei voida näyttää, sillä liian monta tiedostoa muuttui tässä diffissä