Parcourir la source

Merge remote-tracking branch 'upstream/master'

Will Usher il y a 6 ans
Parent
commit
d773b4453a

+ 2 - 2
copying.txt

@@ -6,7 +6,7 @@ GLM is licensed under The Happy Bunny License or MIT License
 ================================================================================
 The Happy Bunny License (Modified MIT License)
 --------------------------------------------------------------------------------
-Copyright (c) 2005 - 2014 G-Truc Creation
+Copyright (c) 2005 - G-Truc Creation
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
@@ -33,7 +33,7 @@ THE SOFTWARE.
 ================================================================================
 The MIT License
 --------------------------------------------------------------------------------
-Copyright (c) 2005 - 2014 G-Truc Creation
+Copyright (c) 2005 - G-Truc Creation
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal

BIN
doc/api/bc_s.png


BIN
doc/api/bdwn.png


BIN
doc/api/closed.png


BIN
doc/api/doc.png


+ 134 - 92
doc/api/doxygen.css

@@ -4,13 +4,27 @@ body, table, div, p, dl {
 	font: 400 14px/22px Roboto,sans-serif;
 }
 
+body
+{
+	margin:0px;
+	padding:0px;
+	background-color:#bf6000;
+	background-repeat:no-repeat;
+	background-position:center center;
+	background-attachment:fixed;
+	min-height:1200px;
+	overflow:auto;
+}
+
 /* @group Heading Levels */
 
 h1.groupheader {
+	color:#bf6000;
 	font-size: 150%;
 }
 
 .title {
+	color:#bf6000;
 	font: 400 14px/28px Roboto,sans-serif;
 	font-size: 150%;
 	font-weight: bold;
@@ -18,8 +32,8 @@ h1.groupheader {
 }
 
 h2.groupheader {
-	border-bottom: 1px solid #879ECB;
-	color: #354C7B;
+	border-bottom: 1px solid #bf6000;
+	color:#bf6000;
 	font-size: 150%;
 	font-weight: normal;
 	margin-top: 1.75em;
@@ -93,8 +107,8 @@ h3.version {
 }
 
 div.qindex, div.navtab{
-	background-color: #EBEFF6;
-	border: 1px solid #A3B4D7;
+	background-color: #FFF8F0;
+	border: 1px solid #FF8000;
 	text-align: center;
 }
 
@@ -110,13 +124,27 @@ div.navtab {
 /* @group Link Styling */
 
 a {
-	color: #3D578C;
+	color: #000000;
 	font-weight: normal;
 	text-decoration: none;
 }
 
 .contents a:visited {
-	color: #4665A2;
+	color: #606060;
+}
+
+.contents{
+	background-color: #FFFFFF;
+	padding-top:8px;
+	padding-bottom:8px;
+	padding-left:32px; 
+	padding-right:32px;
+	margin:0px;
+	margin-left:auto; 
+	margin-right:auto;
+	width:1216px;
+	border-bottom-left-radius: 8px;
+	border-bottom-right-radius: 8px;
 }
 
 a:hover {
@@ -160,8 +188,8 @@ dl.el {
 }
 
 pre.fragment {
-        border: 1px solid #C4CFE5;
-        background-color: #FBFCFD;
+        border: 1px solid #FF8000;
+        background-color: #FFF8F0;
         padding: 4px 6px;
         margin: 4px 8px 4px 2px;
         overflow: auto;
@@ -173,15 +201,15 @@ pre.fragment {
 }
 
 div.fragment {
-        padding: 4px 6px;
-        margin: 4px 8px 4px 2px;
-	background-color: #FBFCFD;
-	border: 1px solid #C4CFE5;
+	padding: 4px 6px;
+	margin: 4px 8px 4px 2px;
+	background-color: #FFF8F0;
+	border: 1px solid #FF8000;
 }
 
 div.line {
 	font-family: monospace, fixed;
-        font-size: 13px;
+	font-size: 13px;
 	min-height: 13px;
 	line-height: 1.0;
 	text-wrap: unrestricted;
@@ -217,7 +245,7 @@ span.lineno {
 	text-align: right;
 	border-right: 2px solid #0F0;
 	background-color: #E8E8E8;
-        white-space: pre;
+	white-space: pre;
 }
 span.lineno a {
 	background-color: #D8D8D8;
@@ -266,36 +294,29 @@ div.groupText {
 }
 
 body {
-	background-color: white;
 	color: black;
-        margin: 0;
-}
-
-div.contents {
-	margin-top: 10px;
-	margin-left: 12px;
-	margin-right: 8px;
+	margin: 0;
 }
 
 td.indexkey {
-	background-color: #EBEFF6;
+	background-color: #FFF8F0;
 	font-weight: bold;
 	border: 1px solid #C4CFE5;
 	margin: 2px 0px 2px 0;
 	padding: 2px 10px;
-        white-space: nowrap;
-        vertical-align: top;
+	white-space: nowrap;
+	vertical-align: top;
 }
 
 td.indexvalue {
-	background-color: #EBEFF6;
+	background-color: #FFF8F0;
 	border: 1px solid #C4CFE5;
 	padding: 2px 10px;
 	margin: 2px 0px;
 }
 
 tr.memlist {
-	background-color: #EEF1F7;
+	background-color: #FFF8F0;
 }
 
 p.formulaDsp {
@@ -312,9 +333,9 @@ img.formulaInl {
 
 div.center {
 	text-align: center;
-        margin-top: 0px;
-        margin-bottom: 0px;
-        padding: 0px;
+	margin-top: 0px;
+	margin-bottom: 0px;
+	padding: 0px;
 }
 
 div.center img {
@@ -322,8 +343,7 @@ div.center img {
 }
 
 address.footer {
-	text-align: right;
-	padding-right: 12px;
+	display: none;
 }
 
 img.footer {
@@ -412,7 +432,7 @@ td.tiny {
 .dirtab {
 	padding: 4px;
 	border-collapse: collapse;
-	border: 1px solid #A3B4D7;
+	border: 1px solid #FF8000;
 }
 
 th.dirtab {
@@ -427,7 +447,7 @@ hr {
 }
 
 hr.footer {
-	height: 1px;
+	display: none;
 }
 
 /* @group Member Descriptions */
@@ -458,7 +478,7 @@ table.memberdecls {
 .mdescLeft, .mdescRight,
 .memItemLeft, .memItemRight,
 .memTemplItemLeft, .memTemplItemRight, .memTemplParams {
-	background-color: #F9FAFC;
+	background-color: #FFFCF8;
 	border: none;
 	margin: 4px;
 	padding: 1px 0 0 8px;
@@ -470,7 +490,7 @@ table.memberdecls {
 }
 
 .memSeparator {
-        border-bottom: 1px solid #DEE4F0;
+        border-bottom: 1px solid #FFF8F0;
         line-height: 1px;
         margin: 0px;
         padding: 0px;
@@ -485,7 +505,7 @@ table.memberdecls {
 }
 
 .memTemplParams {
-	color: #4665A2;
+	color: #bf6000;
         white-space: nowrap;
 	font-size: 80%;
 }
@@ -504,8 +524,8 @@ table.memberdecls {
 }
 
 .memnav {
-	background-color: #EBEFF6;
-	border: 1px solid #A3B4D7;
+	background-color: #FFF8F0;
+	border: 1px solid #FF8000;
 	text-align: center;
 	margin: 2px;
 	margin-right: 15px;
@@ -543,16 +563,16 @@ table.memberdecls {
 }
 
 .memproto, dl.reflist dt {
-        border-top: 1px solid #A8B8D9;
-        border-left: 1px solid #A8B8D9;
-        border-right: 1px solid #A8B8D9;
+        border-top: 1px solid #bf6000;
+        border-left: 1px solid #bf6000;
+        border-right: 1px solid #bf6000;
         padding: 6px 0px 6px 0px;
-        color: #253555;
+        /*color: #253555;*/
         font-weight: bold;
-        text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
-        background-image:url('nav_f.png');
+        /*text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);*/
+        /*background-image:url('nav_f.png');*/
         background-repeat:repeat-x;
-        background-color: #E2E8F2;
+        background-color: #FFF8F0;
         /* opera specific markup */
         box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
         border-top-right-radius: 4px;
@@ -569,15 +589,14 @@ table.memberdecls {
 }
 
 .memdoc, dl.reflist dd {
-        border-bottom: 1px solid #A8B8D9;      
-        border-left: 1px solid #A8B8D9;      
-        border-right: 1px solid #A8B8D9; 
+        border-bottom: 1px solid #bf6000;      
+        border-left: 1px solid #bf6000;      
+        border-right: 1px solid #bf6000; 
         padding: 6px 10px 2px 10px;
-        background-color: #FBFCFD;
         border-top-width: 0;
         background-image:url('nav_g.png');
         background-repeat:repeat-x;
-        background-color: #FFFFFF;
+        background-color: #FFFDFB;
         /* opera specific markup */
         border-bottom-left-radius: 4px;
         border-bottom-right-radius: 4px;
@@ -660,11 +679,11 @@ span.mlabels {
 }
 
 span.mlabel {
-        background-color: #728DC1;
-        border-top:1px solid #5373B4;
-        border-left:1px solid #5373B4;
-        border-right:1px solid #C4CFE5;
-        border-bottom:1px solid #C4CFE5;
+	background-color: #728DC1;
+	border-top:1px solid #5373B4;
+	border-left:1px solid #5373B4;
+	border-right:1px solid #C4CFE5;
+	border-bottom:1px solid #C4CFE5;
 	text-shadow: none;
 	color: white;
 	margin-right: 4px;
@@ -683,8 +702,8 @@ span.mlabel {
 
 div.directory {
         margin: 10px 0px;
-        border-top: 1px solid #9CAFD4;
-        border-bottom: 1px solid #9CAFD4;
+        border-top: 1px solid #bf6000;
+        border-bottom: 1px solid #bf6000;
         width: 100%;
 }
 
@@ -693,14 +712,14 @@ div.directory {
 }
 
 .directory td {
-        margin: 0px;
-        padding: 0px;
+	margin: 0px;
+	padding: 0px;
 	vertical-align: top;
 }
 
 .directory td.entry {
-        white-space: nowrap;
-        padding-right: 6px;
+	white-space: nowrap;
+	padding-right: 6px;
 	padding-top: 3px;
 }
 
@@ -713,8 +732,8 @@ div.directory {
 }
 
 .directory td.desc {
-        width: 100%;
-        padding-left: 6px;
+	width: 100%;
+	padding-left: 6px;
 	padding-right: 6px;
 	padding-top: 3px;
 	border-left: 1px solid rgba(0,0,0,0.05);
@@ -722,7 +741,7 @@ div.directory {
 
 .directory tr.even {
 	padding-left: 6px;
-	background-color: #F7F8FB;
+	background-color: #FFFDFB;
 }
 
 .directory img {
@@ -737,14 +756,14 @@ div.directory {
 }
 
 .directory .levels span {
-        cursor: pointer;
-        padding-left: 2px;
-        padding-right: 2px;
-	color: #3D578C;
+	cursor: pointer;
+	padding-left: 2px;
+	padding-right: 2px;
+	color: #bf6000;
 }
 
 .arrow {
-    color: #9CAFD4;
+    color: #bf6000;
     -webkit-user-select: none;
     -khtml-user-select: none;
     -moz-user-select: none;
@@ -764,7 +783,7 @@ div.directory {
     height: 14px;
     width: 16px;
     display: inline-block;
-    background-color: #728DC1;
+    background-color: #bf6000;
     color: white;
     text-align: center;
     border-radius: 4px;
@@ -818,7 +837,7 @@ table.directory {
 /* @end */
 
 div.dynheader {
-        margin-top: 8px;
+	margin-top: 8px;
 	-webkit-touch-callout: none;
 	-webkit-user-select: none;
 	-khtml-user-select: none;
@@ -834,8 +853,8 @@ address {
 
 table.doxtable {
 	border-collapse:collapse;
-        margin-top: 4px;
-        margin-bottom: 4px;
+	margin-top: 4px;
+	margin-bottom: 4px;
 }
 
 table.doxtable td, table.doxtable th {
@@ -928,13 +947,14 @@ table.fieldtable {
 .navpath ul
 {
 	font-size: 11px;
-	background-image:url('tab_b.png');
+	/*background-image:url('tab_b.png');*/
+	background-color: #FFF8F0;
 	background-repeat:repeat-x;
 	background-position: 0 -5px;
 	height:30px;
 	line-height:30px;
-	color:#8AA0CC;
-	border:solid 1px #C2CDE4;
+	color:#bf6000;
+	border:solid 0px #C2CDE4;
 	overflow:hidden;
 	margin:0px;
 	padding:0px;
@@ -949,7 +969,7 @@ table.fieldtable {
 	background-image:url('bc_s.png');
 	background-repeat:no-repeat;
 	background-position:right;
-	color:#364D7C;
+	color:#bf6000;
 }
 
 .navpath li.navelem a
@@ -958,9 +978,8 @@ table.fieldtable {
 	display:block;
 	text-decoration: none;
 	outline: none;
-	color: #283A5D;
+	color: #bf6000;
 	font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
-	text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
 	text-decoration: none;        
 }
 
@@ -978,11 +997,10 @@ table.fieldtable {
         background-image:none;
         background-repeat:no-repeat;
         background-position:right;
-        color:#364D7C;
+        color:#bf6000;
         font-size: 8pt;
 }
 
-
 div.summary
 {
 	float: right;
@@ -990,7 +1008,7 @@ div.summary
 	padding-right: 5px;
 	width: 50%;
 	text-align: right;
-}       
+}
 
 div.summary a
 {
@@ -1011,11 +1029,14 @@ div.ingroups a
 
 div.header
 {
-        background-image:url('nav_h.png');
-        background-repeat:repeat-x;
-	background-color: #F9FAFC;
-	margin:  0px;
-	border-bottom: 1px solid #C4CFE5;
+	background-repeat:repeat-x;
+	background-color: #FFFCF8;
+
+	padding:0px;
+	margin:0px;
+	margin-left:auto; 
+	margin-right:auto;
+	width:1280px;
 }
 
 div.headertitle
@@ -1072,7 +1093,7 @@ dl.todo
         margin-left:-7px;
         padding-left: 3px;
         border-left:4px solid;
-        border-color: #00C0E0;
+        border-color: #E0C000;
 }
 
 dl.test
@@ -1118,6 +1139,7 @@ dl.section dd {
 	font: 300% Tahoma, Arial,sans-serif;
 	margin: 0px;
 	padding: 2px 0px;
+	color: #FF8000;
 }
     
 #projectbrief
@@ -1238,9 +1260,9 @@ div.toc li.level4 {
 }
 
 .inherit_header {
-        font-weight: bold;
-        color: gray;
-        cursor: pointer;
+	font-weight: bold;
+	color: gray;
+	cursor: pointer;
 	-webkit-touch-callout: none;
 	-webkit-user-select: none;
 	-khtml-user-select: none;
@@ -1433,6 +1455,26 @@ tr.heading h2 {
 	margin-top: -11px;
 }
 
+#titlearea
+{
+	margin: 0px;
+	padding-top: 8px;
+	padding-bottom: 8px;
+	margin-top: 32px;
+	width: 100%;
+	border-bottom: 0px solid #FF8000;
+	border-top-left-radius: 8px;
+	border-top-right-radius: 8px;
+	background-color:#FFFFFF;
+}
+
+#top
+{
+	margin-left:auto; 
+	margin-right:auto;
+	width:1280px;
+}
+
 @media print
 {
   #top { display: none; }

BIN
doc/api/doxygen.png


BIN
doc/api/folderclosed.png


BIN
doc/api/folderopen.png


BIN
doc/api/nav_f.png


BIN
doc/api/nav_h.png


BIN
doc/api/open.png


BIN
doc/api/splitbar.png


BIN
doc/api/sync_off.png


BIN
doc/api/sync_on.png


BIN
doc/api/tab_a.png


BIN
doc/api/tab_b.png


BIN
doc/api/tab_h.png


BIN
doc/api/tab_s.png


+ 10 - 2
glm/detail/type_quat.hpp

@@ -42,12 +42,20 @@ namespace glm
 #		if GLM_LANG & GLM_LANG_CXXMS_FLAG
 			union
 			{
-				struct { T x, y, z, w;};
+#				ifdef GLM_FORCE_QUAT_DATA_WXYZ
+					struct { T w, x, y, z; };
+#				else
+					struct { T x, y, z, w; };
+#				endif
 
 				typename detail::storage<4, T, detail::is_aligned<Q>::value>::type data;
 			};
 #		else
-			T x, y, z, w;
+#			ifdef GLM_FORCE_QUAT_DATA_WXYZ
+				T w, x, y, z;
+#			else
+				T x, y, z, w;
+#			endif
 #		endif
 
 #		if GLM_SILENT_WARNINGS == GLM_ENABLE

+ 40 - 11
glm/detail/type_quat.inl

@@ -74,14 +74,22 @@ namespace detail
 	GLM_FUNC_QUALIFIER GLM_CONSTEXPR T & qua<T, Q>::operator[](typename qua<T, Q>::length_type i)
 	{
 		assert(i >= 0 && i < this->length());
-		return (&x)[i];
+#		ifdef GLM_FORCE_QUAT_DATA_WXYZ
+			return (&w)[i];
+#		else
+			return (&x)[i];
+#		endif
 	}
 
 	template<typename T, qualifier Q>
 	GLM_FUNC_QUALIFIER GLM_CONSTEXPR T const& qua<T, Q>::operator[](typename qua<T, Q>::length_type i) const
 	{
 		assert(i >= 0 && i < this->length());
-		return (&x)[i];
+#		ifdef GLM_FORCE_QUAT_DATA_WXYZ
+			return (&w)[i];
+#		else
+			return (&x)[i];
+#		endif
 	}
 
 	// -- Implicit basic constructors --
@@ -90,32 +98,52 @@ namespace detail
 		template<typename T, qualifier Q>
 		GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q>::qua()
 #			if GLM_CONFIG_CTOR_INIT != GLM_CTOR_INIT_DISABLE
-			: x(0), y(0), z(0), w(1)
+#				ifdef GLM_FORCE_QUAT_DATA_WXYZ
+					: w(1), x(0), y(0), z(0)
+#				else
+					: x(0), y(0), z(0), w(1)
+#				endif
 #			endif
 		{}
 
 		template<typename T, qualifier Q>
 		GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q>::qua(qua<T, Q> const& q)
-			: x(q.x), y(q.y), z(q.z), w(q.w)
+#			ifdef GLM_FORCE_QUAT_DATA_WXYZ
+				: w(q.w), x(q.x), y(q.y), z(q.z)
+#			else
+				: x(q.x), y(q.y), z(q.z), w(q.w)
+#			endif
 		{}
 #	endif
 
 	template<typename T, qualifier Q>
 	template<qualifier P>
 	GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q>::qua(qua<T, P> const& q)
-		: x(q.x), y(q.y), z(q.z), w(q.w)
+#		ifdef GLM_FORCE_QUAT_DATA_WXYZ
+			: w(q.w), x(q.x), y(q.y), z(q.z)
+#		else
+			: x(q.x), y(q.y), z(q.z), w(q.w)
+#		endif
 	{}
 
 	// -- Explicit basic constructors --
 
 	template<typename T, qualifier Q>
 	GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q>::qua(T s, vec<3, T, Q> const& v)
-		: x(v.x), y(v.y), z(v.z), w(s)
+#		ifdef GLM_FORCE_QUAT_DATA_WXYZ
+			: w(s), x(v.x), y(v.y), z(v.z)
+#		else
+			: x(v.x), y(v.y), z(v.z), w(s)
+#		endif
 	{}
 
 	template <typename T, qualifier Q>
 	GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q>::qua(T _w, T _x, T _y, T _z)
-		: x(_x), y(_y), z(_z), w(_w)
+#		ifdef GLM_FORCE_QUAT_DATA_WXYZ
+			: w(_w), x(_x), y(_y), z(_z)
+#		else
+			: x(_x), y(_y), z(_z), w(_w)
+#		endif
 	{}
 
 	// -- Conversion constructors --
@@ -123,10 +151,11 @@ namespace detail
 	template<typename T, qualifier Q>
 	template<typename U, qualifier P>
 	GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q>::qua(qua<U, P> const& q)
-		: x(static_cast<T>(q.x))
-		, y(static_cast<T>(q.y))
-		, z(static_cast<T>(q.z))
-		, w(static_cast<T>(q.w))
+#		ifdef GLM_FORCE_QUAT_DATA_WXYZ
+			: w(static_cast<T>(q.w)), x(static_cast<T>(q.x)), y(static_cast<T>(q.y)), z(static_cast<T>(q.z))
+#		else
+			: x(static_cast<T>(q.x)), y(static_cast<T>(q.y)), z(static_cast<T>(q.z)), w(static_cast<T>(q.w))
+#		endif
 	{}
 
 	//template<typename valType>

+ 3 - 3
glm/ext/matrix_clip_space.inl

@@ -473,11 +473,11 @@ namespace glm
 	{
 #		if GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_LH_ZO
 			return perspectiveFovLH_ZO(fov, width, height, zNear, zFar);
-		elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_LH_NO
+#		elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_LH_NO
 			return perspectiveFovLH_NO(fov, width, height, zNear, zFar);
-		elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_ZO
+#		elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_ZO
 			return perspectiveFovRH_ZO(fov, width, height, zNear, zFar);
-		elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_NO
+#		elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_NO
 			return perspectiveFovRH_NO(fov, width, height, zNear, zFar);
 #		endif
 	}

+ 1 - 1
glm/gtx/scalar_multiplication.hpp

@@ -54,7 +54,7 @@ namespace glm
 	template<typename T> \
 	return_type_scalar_multiplication<T, Vec> \
 	operator/(Vec lh, T const& s){ \
-		return lh *= 1.0f / s; \
+		return lh *= 1.0f / static_cast<float>(s); \
 	}
 
 GLM_IMPLEMENT_SCAL_MULT(vec2)

+ 6 - 0
manual.md

@@ -36,6 +36,7 @@
 + [2.18. GLM\_FORCE\_SIZE\_T\_LENGTH: Vector and matrix static size type](#section2_18)
 + [2.19. GLM\_FORCE\_UNRESTRICTED\_GENTYPE: Removing genType restriction](#section2_19)
 + [2.20. GLM\_FORCE\_SILENT\_WARNINGS: Silent C++ warnings from language extensions](#section2_20)
++ [2.21. GLM\_FORCE\_QUAT\_DATA\_WXYZ: Force GLM to store quat data as w,x,y,z instead of x,y,z,w](#section2_21)
 + [3. Stable extensions](#section3)
 + [3.1. Scalar types](#section3_1)
 + [3.2. Scalar functions](#section3_2)
@@ -721,6 +722,11 @@ int average(int const A, int const B)
 When using /W4 on Visual C++ or -Wpedantic on GCC, for example, the compilers will generate warnings for using C++ language extensions (/Za with Visual C++) such as anonymous struct.
 GLM relies on anonymous structs for swizzle operators and aligned vector types. To silent those warnings define `GLM_FORCE_SILENT_WARNINGS` before including GLM headers.
 
+
+### <a name="section2_21"></a> 2.21. GLM\_FORCE\_QUAT\_DATA\_WXYZ: Force GLM to store quat data as w,x,y,z instead of x,y,z,w
+
+By default GLM store quaternion components with the x, y, z, w order. `GLM_FORCE_QUAT_DATA_WXYZ` allows switching the quaternion data storage to the w, x, y, z order.
+
 ---
 <div style="page-break-after: always;"> </div>
 

+ 4 - 1
readme.md

@@ -53,18 +53,21 @@ glm::mat4 camera(float Translate, glm::vec2 const& Rotate)
 
 ## Release notes
 
-### [GLM 0.9.9.7](https://github.com/g-truc/glm/releases/latest) - 2019-XX-XX
+### [GLM 0.9.9.7](https://github.com/g-truc/glm/releases/tag/0.9.9.7) - 2020-01-05
 #### Improvements:
 - Improved Neon support with more functions optimized #950
 - Added CMake GLM interface #963
 - Added fma implementation based on std::fma #969
 - Added missing quat constexpr #955
+- Added GLM_FORCE_QUAT_DATA_WXYZ to store quat data as w,x,y,z instead of x,y,z,w #983
 
 #### Fixes:
 - Fixed equal ULP variation when using negative sign #965
 - Fixed for intersection ray/plane and added related tests #953
 - Fixed ARM 64bit detection #949
 - Fixed GLM_EXT_matrix_clip_space warnings #980
+- Fixed Wimplicit-int-float-conversion warnings with clang 10+ #986
+- Fixed EXT_matrix_clip_space perspectiveFov
 
 ### [GLM 0.9.9.6](https://github.com/g-truc/glm/releases/tag/0.9.9.6) - 2019-09-08
 #### Features:

+ 7 - 0
test/core/CMakeLists.txt

@@ -2,11 +2,18 @@ glmCreateTestGTC(core_cpp_constexpr)
 glmCreateTestGTC(core_cpp_defaulted_ctor)
 glmCreateTestGTC(core_force_aligned_gentypes)
 glmCreateTestGTC(core_force_ctor_init)
+glmCreateTestGTC(core_force_cxx03)
+glmCreateTestGTC(core_force_cxx98)
+glmCreateTestGTC(core_force_arch_unknown)
+glmCreateTestGTC(core_force_compiler_unknown)
+glmCreateTestGTC(core_force_cxx_unknown)
 glmCreateTestGTC(core_force_explicit_ctor)
 glmCreateTestGTC(core_force_inline)
+glmCreateTestGTC(core_force_platform_unknown)
 glmCreateTestGTC(core_force_pure)
 glmCreateTestGTC(core_force_unrestricted_gentype)
 glmCreateTestGTC(core_force_xyzw_only)
+glmCreateTestGTC(core_force_quat_wxyz)
 glmCreateTestGTC(core_type_aligned)
 glmCreateTestGTC(core_type_cast)
 glmCreateTestGTC(core_type_ctor)

+ 14 - 0
test/core/core_force_arch_unknown.cpp

@@ -0,0 +1,14 @@
+#ifndef GLM_FORCE_ARCH_UNKNOWN
+#	define GLM_FORCE_ARCH_UNKNOWN
+#endif
+
+#include <glm/glm.hpp>
+#include <glm/ext.hpp>
+
+int main()
+{
+	int Error = 0;
+
+	return Error;
+}
+

+ 14 - 0
test/core/core_force_compiler_unknown.cpp

@@ -0,0 +1,14 @@
+#ifndef GLM_FORCE_COMPILER_UNKNOWN
+#	define GLM_FORCE_COMPILER_UNKNOWN
+#endif
+
+#include <glm/glm.hpp>
+#include <glm/ext.hpp>
+
+int main()
+{
+	int Error = 0;
+
+	return Error;
+}
+

+ 14 - 0
test/core/core_force_cxx03.cpp

@@ -0,0 +1,14 @@
+#ifndef GLM_FORCE_CXX03
+#	define GLM_FORCE_CXX03
+#endif
+
+#include <glm/glm.hpp>
+#include <glm/ext.hpp>
+
+int main()
+{
+	int Error = 0;
+
+	return Error;
+}
+

+ 14 - 0
test/core/core_force_cxx98.cpp

@@ -0,0 +1,14 @@
+#ifndef GLM_FORCE_CXX98
+#	define GLM_FORCE_CXX98
+#endif
+
+#include <glm/glm.hpp>
+#include <glm/ext.hpp>
+
+int main()
+{
+	int Error = 0;
+
+	return Error;
+}
+

+ 14 - 0
test/core/core_force_cxx_unknown.cpp

@@ -0,0 +1,14 @@
+#ifndef GLM_FORCE_CXX_UNKNOWN
+#	define GLM_FORCE_CXX_UNKNOWN
+#endif
+
+#include <glm/glm.hpp>
+#include <glm/ext.hpp>
+
+int main()
+{
+	int Error = 0;
+
+	return Error;
+}
+

+ 12 - 0
test/core/core_force_depth_zero_to_one.cpp

@@ -0,0 +1,12 @@
+#define GLM_FORCE_DEPTH_ZERO_TO_ONE
+
+#include <glm/glm.hpp>
+#include <glm/ext.hpp>
+
+int main()
+{
+	int Error = 0;
+
+	return Error;
+}
+

+ 12 - 0
test/core/core_force_left_handed.cpp

@@ -0,0 +1,12 @@
+#define GLM_FORCE_LEFT_HANDED
+
+#include <glm/glm.hpp>
+#include <glm/ext.hpp>
+
+int main()
+{
+	int Error = 0;
+
+	return Error;
+}
+

+ 14 - 0
test/core/core_force_platform_unknown.cpp

@@ -0,0 +1,14 @@
+#ifndef GLM_FORCE_PLATFORM_UNKNOWN
+#	define GLM_FORCE_PLATFORM_UNKNOWN
+#endif
+
+#include <glm/glm.hpp>
+#include <glm/ext.hpp>
+
+int main()
+{
+	int Error = 0;
+
+	return Error;
+}
+

+ 13 - 0
test/core/core_force_quat_wxyz.cpp

@@ -0,0 +1,13 @@
+#define GLM_FORCE_QUAT_DATA_WXYZ
+#define GLM_FORCE_INLINE
+
+#include <glm/glm.hpp>
+#include <glm/ext.hpp>
+
+int main()
+{
+	int Error = 0;
+
+	return Error;
+}
+

+ 12 - 0
test/core/core_force_size_t_length.cpp

@@ -0,0 +1,12 @@
+#define GLM_FORCE_SIZE_T_LENGTH
+
+#include <glm/glm.hpp>
+#include <glm/ext.hpp>
+
+int main()
+{
+	int Error = 0;
+
+	return Error;
+}
+

+ 16 - 16
test/gtx/gtx_fast_trigonometry.cpp

@@ -239,12 +239,12 @@ namespace taylorCos
 		std::vector<glm::vec4> Results;
 		Results.resize(Samples);
 
-		float Steps = (End - Begin) / Samples;
+		float const Steps = (End - Begin) / static_cast<float>(Samples);
 
 		std::clock_t const TimeStampBegin = std::clock();
 
 		for(std::size_t i = 0; i < Samples; ++i)
-			Results[i] = fastCosNew(AngleShift + glm::vec4(Begin + Steps * i));
+			Results[i] = fastCosNew(AngleShift + glm::vec4(Begin + Steps * static_cast<float>(i)));
 
 		std::clock_t const TimeStampEnd = std::clock();
 
@@ -280,12 +280,12 @@ namespace taylorCos
 		std::vector<glm::vec4> Results;
 		Results.resize(Samples);
 
-		float Steps = (End - Begin) / Samples;
+		float const Steps = (End - Begin) / static_cast<float>(Samples);
 
 		std::clock_t const TimeStampBegin = std::clock();
 
 		for(std::size_t i = 0; i < Samples; ++i)
-			Results[i] = taylorCos::fastCosDeterminisctic(AngleShift + glm::vec4(Begin + Steps * i));
+			Results[i] = taylorCos::fastCosDeterminisctic(AngleShift + glm::vec4(Begin + Steps * static_cast<float>(i)));
 
 		std::clock_t const TimeStampEnd = std::clock();
 
@@ -327,12 +327,12 @@ namespace taylorCos
 		std::vector<glm::vec4> Results;
 		Results.resize(Samples);
 
-		float Steps = (End - Begin) / Samples;
+		float const Steps = (End - Begin) / static_cast<float>(Samples);
 
 		std::clock_t const TimeStampBegin = std::clock();
 
 		for(std::size_t i = 0; i < Samples; ++i)
-			Results[i] = taylorCos::fastRefCos(AngleShift + glm::vec4(Begin + Steps * i));
+			Results[i] = taylorCos::fastRefCos(AngleShift + glm::vec4(Begin + Steps * static_cast<float>(i)));
 
 		std::clock_t const TimeStampEnd = std::clock();
 
@@ -349,12 +349,12 @@ namespace taylorCos
 		std::vector<glm::vec4> Results;
 		Results.resize(Samples);
 
-		float Steps = (End - Begin) / Samples;
+		float const Steps = (End - Begin) / static_cast<float>(Samples);
 
 		std::clock_t const TimeStampBegin = std::clock();
 
 		for(std::size_t i = 0; i < Samples; ++i)
-			Results[i] = glm::fastCos(AngleShift + glm::vec4(Begin + Steps * i));
+			Results[i] = glm::fastCos(AngleShift + glm::vec4(Begin + Steps * static_cast<float>(i)));
 
 		std::clock_t const TimeStampEnd = std::clock();
 
@@ -371,12 +371,12 @@ namespace taylorCos
 		std::vector<glm::vec4> Results;
 		Results.resize(Samples);
 
-		float Steps = (End - Begin) / Samples;
+		float const Steps = (End - Begin) / static_cast<float>(Samples);
 
 		std::clock_t const TimeStampBegin = std::clock();
 
 		for(std::size_t i = 0; i < Samples; ++i)
-			Results[i] = glm::cos(AngleShift + glm::vec4(Begin + Steps * i));
+			Results[i] = glm::cos(AngleShift + glm::vec4(Begin + Steps * static_cast<float>(i)));
 
 		std::clock_t const TimeStampEnd = std::clock();
 
@@ -466,12 +466,12 @@ namespace taylor2
 		std::vector<float> Results;
 		Results.resize(Samples);
 
-		float Steps = (End - Begin) / Samples;
+		float const Steps = (End - Begin) / static_cast<float>(Samples);
 
 		std::clock_t const TimeStampBegin = std::clock();
 
 		for(std::size_t i = 0; i < Samples; ++i)
-			Results[i] = taylorCosA(AngleShift.x + Begin + Steps * i);
+			Results[i] = taylorCosA(AngleShift.x + Begin + Steps * static_cast<float>(i));
 
 		std::clock_t const TimeStampEnd = std::clock();
 
@@ -488,12 +488,12 @@ namespace taylor2
 		std::vector<float> Results;
 		Results.resize(Samples);
 
-		float Steps = (End - Begin) / Samples;
+		float const Steps = (End - Begin) / static_cast<float>(Samples);
 
 		std::clock_t const TimeStampBegin = std::clock();
 
 		for(std::size_t i = 0; i < Samples; ++i)
-			Results[i] = taylorCosB(AngleShift.x + Begin + Steps * i);
+			Results[i] = taylorCosB(AngleShift.x + Begin + Steps * static_cast<float>(i));
 
 		std::clock_t const TimeStampEnd = std::clock();
 
@@ -510,12 +510,12 @@ namespace taylor2
 		std::vector<float> Results;
 		Results.resize(Samples);
 
-		float Steps = (End - Begin) / Samples;
+		float const Steps = (End - Begin) / static_cast<float>(Samples);
 
 		std::clock_t const TimeStampBegin = std::clock();
 
 		for(std::size_t i = 0; i < Samples; ++i)
-			Results[i] = taylorCosC(AngleShift.x + Begin + Steps * i);
+			Results[i] = taylorCosC(AngleShift.x + Begin + Steps * static_cast<float>(i));
 
 		std::clock_t const TimeStampEnd = std::clock();