Merge remote-tracking branch 'upstream/master'
@ -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
Before Width: | Height: | Size: 676 B After Width: | Height: | Size: 600 B |
BIN
doc/api/bdwn.png
Before Width: | Height: | Size: 147 B After Width: | Height: | Size: 200 B |
Before Width: | Height: | Size: 132 B After Width: | Height: | Size: 194 B |
BIN
doc/api/doc.png
Before Width: | Height: | Size: 746 B After Width: | Height: | Size: 624 B |
@ -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;
|
||||
@ -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; }
|
||||
|
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 616 B After Width: | Height: | Size: 573 B |
Before Width: | Height: | Size: 597 B After Width: | Height: | Size: 596 B |
Before Width: | Height: | Size: 153 B After Width: | Height: | Size: 233 B |
Before Width: | Height: | Size: 98 B After Width: | Height: | Size: 188 B |
BIN
doc/api/open.png
Before Width: | Height: | Size: 123 B After Width: | Height: | Size: 177 B |
Before Width: | Height: | Size: 314 B After Width: | Height: | Size: 262 B |
Before Width: | Height: | Size: 853 B After Width: | Height: | Size: 717 B |
Before Width: | Height: | Size: 845 B After Width: | Height: | Size: 712 B |
Before Width: | Height: | Size: 142 B After Width: | Height: | Size: 217 B |
Before Width: | Height: | Size: 169 B After Width: | Height: | Size: 253 B |
Before Width: | Height: | Size: 177 B After Width: | Height: | Size: 255 B |
Before Width: | Height: | Size: 184 B After Width: | Height: | Size: 260 B |
@ -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
|
||||
|
@ -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>
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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)
|
||||
|
@ -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>
|
||||
|
||||
|
@ -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:
|
||||
|
@ -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
test/core/core_force_arch_unknown.cpp
Normal file
@ -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
test/core/core_force_compiler_unknown.cpp
Normal file
@ -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
test/core/core_force_cxx03.cpp
Normal file
@ -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
test/core/core_force_cxx98.cpp
Normal file
@ -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
test/core/core_force_cxx_unknown.cpp
Normal file
@ -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
test/core/core_force_depth_zero_to_one.cpp
Normal file
@ -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
test/core/core_force_left_handed.cpp
Normal file
@ -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
test/core/core_force_platform_unknown.cpp
Normal file
@ -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
test/core/core_force_quat_wxyz.cpp
Normal file
@ -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
test/core/core_force_size_t_length.cpp
Normal file
@ -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;
|
||||
}
|
||||
|
@ -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();
|
||||
|
||||
|